오래된 데스크톱 컴퓨터에서 소규모 운영 체제를 구축하려면 어떻게해야합니까? [닫은]


111

운영 체제를 작성하는 것이 (특히 혼자서) 참을 수 없을 정도로 복잡하다는 것을 알고 있기 때문에 이것은 헛된 일입니다.

  • 나는 다음 리눅스 나 윈도우를 만들 것이라고 기대하지 않는다.

  • 끔찍하고 버그가 많고 작동하지 않을 것이라는 것을 알고 있지만 괜찮습니다.

Assembly , C 및 (일부) C ++로 모든 것을 직접 작성하고 싶습니다 .

지금은 다른 일로 바쁘고 당장 시간이 없어서이 프로젝트는 미래의 프로젝트입니다.하지만 지금 물어 보겠다고 생각했습니다. 그래서 아마도 이것에 대한 많은 답을 얻을 수있을 것입니다. 이러한 접근 방식을 구축하고 유용한 리소스가되어야합니다 (내가 본 다른 모든 것에는 미닉스에서 빌드, 기존 부트 로더 사용, 가상 부팅 프로그램에서 빌드 등).

모니터, 키보드 및 마우스가있는 이전 데스크탑 중 하나를 설정하고 하드 드라이브 에서 작업을 시작하고 싶습니다 .

나만의 부트 로더를 작성하는 방법을 배우고 싶습니다 (이에 대한 많은 리소스를 찾았지만 완전성을 위해 여전히 좋은 것들을 추가하십시오), 내 USB 드라이버 (필요한 경우), CD 드라이버 (필요한 경우) ) 등 모든 것이 처음부터 시작됩니다.

  • 컴퓨터에 코드를 어떻게 입력합니까? 플로피 디스크를 사용하는 것이 가장 좋습니까? 대부분의 컴퓨터가 USB 스틱에서 할 수 있습니까?

  • 어떤 드라이버가 필요하며이를 구축하는 데 참고할만한 사항이 있습니까?

  • 부팅 순서가 끝나면 어떻게됩니까? 보호 모드 등으로 들어가려면 어떻게해야합니까?

  • 운영 체제의 도움없이 어떻게 메모리를 관리합니까? 원하는 주소 만 사용합니까? 초기화가 필요하지 않습니까?

  • 의심 할 여지없이 나를 혼란스럽게하는 것은 무엇입니까?

  • 명령 줄 O / S 및 그래픽 O / S로 만들려면 어떻게해야합니까?

  • 그래픽 O / S는 무엇을 기반으로합니까? 예를 들어, 맨 위에 글꼴과 그림이있는 명령 줄과 같은 작업을 어떻게 수행 할 수 있습니까?

  • 멀티 태스킹 환경 설정에 대해 어디에서 읽을 수 있습니까? (즉, 두 개의 그래픽과 유사한 명령 줄이 나란히 실행 됨).

  • 일종의 윈도우 시스템을 어떻게 설정합니까? 간단한 멀티 태스킹이 설정되면 화면에 그래픽을 어떻게 표시합니까?

저를 믿으세요, 저는 이것이 매우 복잡한 프로젝트 라는 것을 알고 있으며 , 아마도 그것을 완성하거나 어떤 용도로든 아무것도 쓰지 않을 것입니다.

여기에 언급하지 않은 다른 부분이 많이 있습니다. 생각해 보면 자유롭게 추가해보세요.

답변 당 하나의 "주제"(예 : USB 드라이버)를 입력 한 다음 리소스 목록, 살펴 봐야 할 사항 등을 입력하십시오.

또한 다른 O / S 또는 기존 코드로 빌드하는 것을 제안하지 마십시오. 나는 많은 기존 코드 (리눅스 커널, 예제 리소스, 기존 드라이버 등) 를 읽을 것이라는 것을 알고 있지만 궁극적으로 모든 작성을 직접 수행하고 싶습니다. 나는 내가 다른 것으로부터 구축 해야한다는 것을 알고 있으며, 내가 마음을 바꾸고 그 길을 가면 읽을 수있는 그것에 대해 많은 다른 질문들이 있습니다. 그러나 이것은 모든 것을 처음부터 수행하는 것입니다.

그래픽을 얻는 방법에 대한 제안이 있습니까? 다른 비디오 모드 및 작업 방법 등?


14
이것이 나의 가장 큰 목표입니다. 재미와 학습을 위해 운영 체제를 너무나 나쁘게 작성하고 싶습니다. 지난 몇 년 동안 시간을 ​​아끼지 못했습니다. 도움을 줄 사람을 찾거나 당신과 이야기를 나누고 싶다면 gmail.com의 schmeling88로 저에게 이메일을 보내십시오.
Max Schmeling

2
@Max와 @Tom, 나도 버그가 있습니다. 사실이 시간 약 : 시작 준비하고 있어요
지오 바니 Galbo

2
지금 그래픽에 대해 생각하지 마십시오. Unix는 그래픽을 직접 지원하지 않았으며 그렇게 나쁘지 않습니다. :-)하지만 기본적으로 800x600 IIRC를 넘어서는 쉽고 이식 가능한 방법은 없습니다.
Bastien Léonard


1
왜? 이 질문은 오래되었으며 더 이상 활동을 생성하지 않습니다. 무슨 상관이야?
Carson Myers

답변:


51

먼저 첫 번째 것들. 읽고, 읽고, 읽고, 읽고, 읽고. 자신의 OS를 구현하기 전에 OS 작동 방식을 확실히 이해해야합니다.

운영 체제에 대한 Andrew Tanenbaum의 책 중 하나를 가져옵니다. 이것은 우리가 대학에서 OS 수업에서 사용한 것입니다.

최신 운영 체제 PDF

Amazon의 최신 운영 체제

어리석은 표지에도 불구하고, 특히 교과서의 경우 환상적인 읽기입니다. Tanenbaum은이 분야의 전문가이며 후드 아래에서 OS가 어떻게 작동하는지에 대한 그의 설명은 명확하고 이해하기 쉽습니다. 이 책은 대부분 이론이지만 구현에 대해 더 많이 논의하는 책도 있다고 생각합니다. 그래도 읽은 적이 없어서 댓글을 달 수 없습니다.

이는 프로세스 관리, 메모리 관리, 파일 시스템 및 OS 커널이 부팅 가능한 상태를 얻기 위해 수행해야하는 기타 모든 작업에 도움이 될 것입니다. 그 시점부터 기본적으로 지원해야하는 하드웨어에 대한 장치 드라이버를 작성하고 파일 및 장치 열기, 읽기 및 쓰기, 프로세스 간 메시지 전달 등과 같은 커널 호출을 수행하는 C 라이브러리 함수의 구현을 제공하는 문제입니다. .

x86 어셈블리에 대해 읽어보십시오 (x86 시스템 용으로 설계한다고 가정). 프로세서 작동 모드 간 이동과 관련된 많은 질문에 답할 수 있습니다.

전자 지식이 있으면 일반적으로 x86 PC보다 간단하기 때문에 충분한 문서가있는 임베디드 장치 용 운영 체제를 작성하는 것이 더 쉬울 수 있습니다. 저는 항상 저만의 OS를 작성하고 싶었고, Digilent 에서이 개발 보드 용 마이크로 커널 임베디드 OS를 작성하기 시작했습니다 . 매우 철저한 문서가있는 Xilinx의 소프트 코어 MicroBlaze 프로세서를 실행할 수 있습니다. 또한 RAM, 플래시 데이터 저장 장치, LED, 스위치, 버튼, VGA 출력 등이 있습니다. 간단한 드라이버를 작성하는 데 사용할 수있는 많은 것들이 있습니다.

임베디드 장치의 장점 중 하나는 오랫동안 VGA 드라이버를 작성하지 않아도된다는 것입니다. 필자의 경우 Digilent 개발 보드에는 온보드 UART가 있으므로 직렬 출력을 콘솔로 효과적으로 사용하여 모든 작업을 수행하고 최소한의 번거 로움으로 명령 줄로 부팅 할 수 있습니다.

대상으로 선택하는 것이 무엇이든 쉽게 사용할 수 있고 잘 테스트 된 컴파일러가 있는지 확인하십시오. OS와 컴파일러를 동시에 작성하고 싶지 는 않습니다 .


2
+1,하지만 저는 Tanenbaum Minix 책 (구현에 더 중점을 둔 책)을 선호하며 이론에 먼저 집중할 필요가 없습니다. 어쨌든 그는 첫 번째 시도에서 OS를 작성하지 않을 것입니다. 먼저 부트 로더를 작성한 다음 보호 모드로 전환 한 다음 I / O를 처리하는 등의 작업을 수행합니다.
Bastien Léonard

2
임베디드 칩용 OS 작성시 +1. 하루가 끝나면 뭔가 독특한 것을 만들었다 고 느낄 것입니다. 동일한 핵심 개념을 유지하면서 x86 용으로 작성하는 것보다 훨씬 간단합니다. (기술적으로 OS, 그것을 위해 스케줄러 및 작업 모듈 같은 것들가없는 동안 ..) 예를 들어, TinyOS의 봐
크리스토퍼 Micinski에게

29

http://www.osdev.org/http://www.osdever.net/

OS 개발 세계에 오신 것을 환영합니다.

SO의 다른 x86 문서 링크도 참조하십시오. 태그 위키 : Intel 및 AMD 매뉴얼, 컴파일러 / 어셈블러 문서 및 다양한 가이드.

또한 부트 로더를 한 단계 씩 수행하고 레지스터를 검사 할 수 있으므로 디버깅을 위해 BOCHS 또는 기타 가상 환경을 사용하는 것이 좋습니다.



forums.osdever.net 잊지 마세요 :)
Brenden

6
나는 이것이 유용한 자료라는 것을 알고 있지만, 설명이없는 링크 세트보다는 문맥을 제공한다면 미래의 독자들에게 더 도움이 될 것이라고 생각합니다.
icktoofay 2014 년

@icktoofay 질문이 너무 광범위해서 제대로 대답 할 수 없다고 생각합니다.
user253751

15

적어도 처음에는 Bochs 또는 다른 가상 머신 에서 작업하는 것이 좋습니다. 그 이유는 원하는 곳 어디에서나 가져갈 수 있고 디버그하기가 더 쉽기 때문입니다 (하드웨어의 정확한 상태를 볼 수 있음). 외부 도움이 필요하면 그들은 당신과 똑같은 '하드웨어'를 사용할 수 있습니다.

제가 가진 가장 유용한 조언은 가능한 한 빨리 C 코드를 실행할 수있는 상태에 들어가는 것입니다. 즉, 부팅하고, 설명자 테이블을 설정하고, 컴파일 된 C를 실행하는 것이 안전한 지점에 도달하는 것입니다. 정상적인 상태를 유지하고 계속 작업하려면 모든 커널이 C에 있어야합니다. 조립은 일부 장소에서 필요하지만 지루하고 디버그하기 어려운 경향이 있습니다.


지금은 Bochs를 살펴 보겠습니다.하지만 결국 일부 PC에서이를 구축하고 싶습니다
Carson Myers

BOCHS에서 작동하는 경우 일반적으로 BIOS에서 모듈로 차이가있는 실제 PC에서 작동합니다. 대부분의 버그는 아마도 BOCHS와 실제 하드웨어에 영향을 미치는 것들 일 것입니다. 그러나 차이점은 코드가 BOCHS에서 무한 루프에 갇 히면 BOCHS의 내장 디버거를 사용하여 찾을 수있는 위치와 단일 단계를 찾을 수 있다는 것입니다. 어떻게 / 왜. 실제 하드웨어에서는 디버그 인쇄를 추가하기 만하면됩니다. 디버거를 사용하면 헤드 스크래칭 시간과 며칠을 절약 할 수 있습니다.
Peter Cordes

14

최하위 수준에서 운영 체제가 수행 할 수있는 최소한의 것은 어떤 방식 으로든 시스템의 하드웨어를 구동하고 일종의 "사용자 코드"실행을로드하는 것입니다. PC로 시작하려면 일부 장치 또는 다른 장치에서로드 할 수있는 코드를 작성해야합니다. 구형 PC에는 하드웨어가 일부 초기화를 수행하는 방법을 결정하는 펌웨어에 BIOS가 있습니다 (최소한 비디오, 키보드 및 일부 형태의 스토리지 또는 부트 로더). (2017 년 10 월 업데이트 : 최신 PC에는 EFI 또는 UEFI 펌웨어가 있습니다 ... 이는 대체로 현명한 차이입니다.이 논의에서 동일한 용도로 사용됩니다).

따라서 대상 시스템에서 BIOS 또는 기타 펌웨어를 사용하는 방법에 대한 낮은 수준의 세부 정보를 배우십시오. 즉, BIOS가로드하고 실행할 수있는 프로그램을 작성하는 방법을 배웁니다. 결국 부트 로더로 변할 것입니다. 작게 시작하십시오. "Hello, Linus"라는 프로그램을 펌웨어 부팅 프로세스에서 직접 가져 오십시오 (플로피 또는 USB 썸 드라이브에서 시작하는 것이 좋습니다 ... 또는 원하는 경우 하드 드라이브에서).

거기에서 나는 매우 간단한 직렬 드라이버를 작성하는 것이 좋습니다 ... 부트 로더를 업데이트하여 직렬 포트를 초기화하고 거기에서 다운로드를 시작하십시오. 그런 다음 가져 오는 코드를 실행할 수 있습니다. 거기에서 다른 블록 세트에 쓸 수있는 약간의 부트 스트랩을 작성하십시오 (아직 파일 시스템을 구현하지 않았습니다 ... 파티션 테이블 구문 분석조차도하지 않았습니다. 그래서 처음에는 디스크에서 원시 블록 범위를 처리했습니다. ).

이 시점에서 부트 로더는 직렬 라인을 통해 새 코드를 가져 와서 파티션에 덤프 할 수 있어야합니다 (예, 일종의 파티션 테이블 처리를 구현합니다 ... 표준 PC 규칙을 준수하는지 여부는이 시점에서 사용자에게 달려 있습니다. )하고 실행합니다.

거기에서 훨씬 더 정교한 기능을 작업 할 수 있어야합니다. 이베이스에서 새 "커널"을 작성하고 컴파일 할 수 있습니다. 테스트 베드를 재부팅하고 새 커널을 배포 할 수 있습니다.

(부트 로더는 다운로드를 건너 뛰고 기존 이미지를 부팅하기위한 명령으로 직렬 핸드 셰이 킹 행에 대한 BREAK와 같은 신호를 받아야합니다. 또한 이러한 방식으로 일부 시간 초과를 처리해야합니다).

거기에서 아주 간단한 터미널 레이어와 명령 셸을 작성 하시겠습니까? 파일 시스템? 커널 (일종의 파일 또는 개체)이 아닌 새로운 실행 가능 콘텐츠를 다운로드하는 명령을 구현합니다. 등등.

당연히 PC 키보드와 비디오를 사용하는 콘솔 드라이버로 시작할 수 있습니다 (올바르게 기억한다면 각각 BIOS INT 0x16h 및 INT 0x10H 항목). 그러나 다른 기존 (기능적) 시스템에서 빌드 / 배포 / 테스트주기를 자동화 할 수 있으므로 직렬 드라이버로 시작하는 것이 좋습니다. 새 OS가 크로스 컴파일 된 프로젝트로 시작되기 때문에이를 처리하는 능률적 인 방법을 갖추는 것이 필수적입니다.

프로젝트를 얼마나 진행하고 싶은지 모르겠습니다. 합리적으로 인상적인 목표는 "셀프 호스팅"을 달성하는 것입니다. 새 OS를 사용하여 새 OS의 작동 버전으로 (재) 빌드, 연결 및 부팅 할 수있는 간단한 어셈블러 / 컴파일러를 만들 수 있다면 그 목표를 달성 한 것입니다. (이것은 필수 사항이 아닙니다. 많은 임베디드 시스템은 절대 자체 호스팅이되지 않으며 그에 문제가 없습니다.)


최신 하드웨어에서는 콘솔 (비디오 / 키보드) 드라이버를 작성하는 것보다 직렬 드라이버를 작동시키는 것이 더 어려울 수 있습니다. 내가이 글을 쓴 후 몇 년 동안, 평범한 구형 직렬 커넥터는 현대 데스크톱 및 랩톱에 거의 존재하지 않게되었습니다. 일부 임베디드 및 "애호가"하드웨어에는 USB 에뮬레이션을 거치지 않고도 여전히 구식 RS-232C 인터페이스가 있습니다. 예를 들어 : mpl.ch/t2600.html이있는 것 같습니다.
Jim Dennis

12

하드웨어 가상화 사용에 신경 쓰지 않는다면 'Nand에서 Tetris로'를 안내하는 코스 (책 + 강의 + 소프트웨어)가 있습니다. (이러한 목적을 위해 원자적이고 주어진) 전기 NAND 게이트에서 OS, 언어를 구축하고 마지막으로 개인용 컴퓨터에서 간단한 게임을 코딩하는 것까지 전체 컴퓨터 시스템을 완전히 직접 만듭니다.

나는 그것이 좋은 아이디어라고 생각하며 조만간 완전히 멈출 계획입니다. 이 책은 놀랍도록 저렴하며 MIT에서 강의를한다고 생각합니다. 처음부터 직접 구축 한 전체 시스템에 대한 완전하고 완전한 지식을 갖는 것보다 더 큰 느낌은 상상할 수 없습니다.

링크 : http://www1.idc.ac.il/tecs/


이 링크는 죽었다고 생각합니다. 누구든지 이것에 액세스하는 다른 방법을 알고 있습니까?
Koray Tugay

1
@KorayTugay nand2tetris.org
user253751

10

저는 작게 시작하여 8086 임베디드 개발 키트를 구입하여 멀티 태스킹 OS를 개발했습니다. 커널이 있고 하드웨어 수준에서 작업하는 데 익숙해지면 더 어려운 작업을 수행 할 준비가 된 것입니다.

심지어 VGA 디스플레이 DOS 클론을 구축하는 것은 상당히 어려운 일입니다. 세부 사항은 엄청납니다. :-)

특정 주제.

컴퓨터에 코드를 어떻게 입력합니까? 플로피 디스크를 사용하는 것이 가장 좋습니까? 대부분의 컴퓨터가 USB 스틱에서 할 수 있습니까?

BIOS는 기본 부트 스트랩을 수행합니다.


어떤 드라이버가 필요하며이를 구축하는 데 참고할만한 사항이 있습니까?

직접적인 CPU / 메모리 작업이 아닌 모든 것. CPU 참조 설명서에 직접 나와 있지 않은 모든 것.


부팅 순서가 끝나면 어떻게됩니까? 보호 모드 등으로 들어가려면 어떻게해야합니까?

보호 모드는 부팅 순서의 일부입니다.

그런 다음 멀티 태스킹을 시작하고 프로세스를 시작하는 방법을 파악합니다.


운영 체제의 도움없이 어떻게 메모리를 관리합니까? 원하는 주소 만 사용합니까? 초기화가 필요하지 않습니까?

옳은. 결국 가상 메모리 시스템을 분류하고 싶을 것입니다.


의심 할 여지없이 나를 혼란스럽게하는 것은 무엇입니까?

디버깅 도구 없음, IO 없음


명령 줄 O / S 및 그래픽 O / S로 만들려면 어떻게해야합니까?

슬픔으로. Windows 3.1 및 Linux, 특히 X 창을 찾습니다.


그래픽 O / S는 무엇을 기반으로합니까? 예를 들어, 맨 위에 글꼴과 그림이있는 명령 줄과 같은 작업을 어떻게 수행 할 수 있습니까?

X 창을 찾습니다.


마지막 조언 : 리눅스 / x 윈도우를 공부하세요. 완벽하지는 않지만 한 가지 접근 방식에 대한 이해를 제공합니다 . 또한 임베디드 시스템을 연구하십시오.


좋은 대답은 이미 리눅스 커널을 가지고 있으며 Windows 3.1을 확실히 살펴볼 것입니다.
Carson Myers

8

OS 개발 사이트에 대한 좋은 참조가 많이 있으므로 다른 접근 방식을 설명하겠습니다.

베어 메탈에서 OS를 구현하는 경험을 원한다면 구형 PC보다 더 나은 하드웨어 선택이 있습니다. PC 아키텍처를 사용하면 30 년 디자인 역사의 흥미롭지 않은 인공물을 코딩하는 데 엄청난 시간을 할애하게됩니다. 예를 들어, 프로젝트의 부트 로더 부분 만이 용감한 프로그래머를 많이 태 웠을 것입니다.

예를 들어, 디스크 및 / 또는 네트워크에서 커널을 읽으려면 한 세트의 드라이버가 필요합니다. 그런 다음 보호 모드로 들어가려면 코드가 필요합니다. 이 시점에서 다른 드라이버 세트가 필요합니다! 그 시점 이후에는 칩을 보호 모드로 전환하기 위해 수행하는 작업 중 거의 양도 할 수 없습니다. 4 년 이상 다른 PC에서 실행하고 싶은데 또 다른 드라이버 세트가 필요합니다.

ARM 또는 기타 32 비트 "임베디드"칩의 부트 스트랩을 살펴보십시오. 저렴한 개발 보드를 사용할 수 있거나 직접 납땜 할 수 있습니다! 일부는 이더넷과 USB가 내장되어 있습니다. 건전하고 딱딱하지 않은 아키텍처에서 작업하는 것이 더 즐거워 질 것이며 아마도 재사용 가능한 기술로 끝날 것입니다.


정확히 내가 요청한 것은 아니지만 독서의 탄젠트에 나를 보내는 +1
Carson Myers

마쉬가 당신에게 좋은 조언을하고 있습니다. x86 / BIOS 아키텍처의 하위 수준 세부 정보는 복잡합니다. 이러한 세부 사항에 얽매여 메모리 관리 및 프로세스 예약과 같은 더 큰 문제에 집중할 수 없게됩니다. 직렬 포트가있는 "더 깨끗한"아키텍처를 선택하십시오. 장기적으로는 더 행복 할 것입니다.
Barry Brown

8

무엇보다 실제 하드웨어에서 실행하려면 프로세서 매뉴얼의 사본이 절대적으로 필요합니다. 인텔 설명서 ( http://www.intel.com/products/processor/manuals/ )는 매우 귀중합니다. 모드 전환 (실제 / 보호)에서 가상 메모리 관리 (그 정도까지 선택하는 경우), 시스템 호출 (사용자 모드를 수행하는 경우)에 이르기까지 모든 것을 다룹니다. 가장 중요한 것은 TSS 및 세그먼트 레지스터와 같이 기능을 수행하기 위해 설정해야하는 여러 가지 사항을 매우 자세하게 설명합니다. 대부분의 OS 텍스트는 프로세서보다 높은 수준의 개념에 더 관심이 있기 때문에 논의하지 않습니다. 특정 세부 사항.


또한 인텔을 통해 종이 사본을 무료로 얻을 수 있습니다.
Matthew Iselin


8

MikeOS와 같은 작은 기본 오픈 소스 OS의 코드를 읽으십시오.

또는 다음 단계를 제안합니다 (재미있을 것입니다!).

  1. 가상 머신을 작성합니다. 시스템 내부와 외부를 알 수 있도록 모든 프로세서 명령을 정의하십시오. 키보드, 마우스, 화면, 오디오 액세스를 위해 SDL과 인터페이스합니다. 한 번에 모든 것을 머릿속에 넣을 수 있도록 단순하게 유지하십시오. 최첨단 가상 머신 일 필요는 없으며 '실제'컴퓨터의 기능을 모방 할 수있는 가상 머신 일뿐입니다.
  2. 가상 머신의 프로세서에 대한 어셈블러를 작성하십시오. 이 어셈블러는 가상 머신의 언어로 작성된 프로그램 일 필요는 없지만 어셈블리 언어를 머신 코드로 변환 할 수있는 모든 것입니다.
  3. 실행 가능한 형식을 정의하고 간단한 링커를 작성합니다.
  4. 이제 운영 체제를 작성하는 데 필요한 모든 부분이 준비되었습니다! 어셈블리 언어로 작성하고, 어셈블합니다 ... 등등 .. 복잡한 부트 로딩 프로세스가 필요하지 않습니다. 먼저 시스템에서 OS를 실행하도록하십시오.

위의 단계는 간단한 OS를 작성하는 데 약간 어리석은 것처럼 보일 수 있지만, 정말 재미 있습니다.


6

MikeOS를 확인하십시오 . 작성된 상당히 간단한 OS는 (주석이있는 것처럼) 어셈블리를 읽을 수 있습니다. 매우 간단하지만 GUI가 있으며 일부 네트워킹 및 멀티미디어를 지원합니다.

편집 : MenuetOS 는 그래픽입니다. 그것도 쓰여진 것은 곧은 asm이지만 MikeOS보다 더 정교합니다.


6

야심 찬 목표가 있습니다. 그러나 실행이 핵심입니다.

대부분의 구조화 된 접근 방식 (교과서 또는 대학 수업)은 프로세스를 안내하지만 선택한 플랫폼의 난해한 세부 사항을 은폐하고 큰 그림 아이디어에 집중할 수있는 핵심적인 코드를 많이 제공합니다. 프로세스 스케줄링, 메모리 관리, 교착 상태 방지, I / O 등.

제 충고는 이것이다 : 기대치를 낮추고 기본적인 질문으로 시작하라.

운영 체제 란 무엇입니까?

컴퓨터 과학자는 OS가 그래픽 사용자 인터페이스, 웹 브라우저, USB 장치를 연결하는 방법 또는 사용자가 실제로 보거나 만질 수있는 모든 것을 결코 말하지 않을 것입니다. 대신, 가장 기본적인 수준의 OS는 위에서 언급 한 것들입니다. 그것들은 모두 자원 관리라는 하나의 큰 우산에 속합니다.

운영 체제는 메모리, CPU 및 주변 장치와 같은 컴퓨터의 하드웨어 리소스를 관리하는 프로그램에 지나지 않습니다.

다음은 간단한 운영 체제입니다. 프로그램은 사용자가 직렬 연결을 사용하여 프로그램 (16 진수 또는 바이너리)을 입력 할 수 있도록합니다. 프로그램을 입력하면 프로그램이 실행됩니다. 프로그램이 완료되면 제어권이 사용자에게 반환되어 프로그램을 다시 실행하거나 새 프로그램을 입력 할 수 있습니다.

64K 정도의 메모리가있는 임베디드 ARM 프로세서와 같은 "깨끗한"아키텍처에서이 작업을 수행하십시오. ARM에 대해 배우고 며칠 후에 어셈블리에서이를 코딩 할 수 있습니다. 그리고 짜잔! , 운영 체제가 있습니다.

OS가 수행해야하는 모든 작업을 수행합니다.

  • 사용자가 OS 자체를 덮어 쓰지 못하도록하여 메모리를 관리합니다.
  • 실행할 단일 프로세스를 예약합니다.
  • 단일 직렬 주변 장치에 대한 I / O를 처리합니다.

이를 통해 시작할 수있는 빌딩 블록이 제공됩니다. 이제 선택의 여지가 많습니다. 아마도 그중 하나는 두 개의 프로그램이 메모리에로드되도록 허용하고 사용자가 다음에 실행할 프로그램을 결정하게하는 것입니다.

또는 사용자가 한 프로그램의 실행을 일시 중단하고 다른 프로그램으로 전환하고 일시 중단 한 다음 다시 전환하도록 할 수 있습니다. 이것은 완전히 수동이지만 초보적인 멀티 태스킹입니다.

당신의 선택은 무제한이지만 각각은 당신이 이전에 가졌던 것의 아기 단계입니다.

시야를 너무 높게 설정하지 않으면 재미 있어요!



4

많은 학교에는 설명하는 내용의 대부분을 수행하는 OS 수업이 있습니다. 우리 학교 (CMU)는 C로 OS를 가르치고 커널, 파일 시스템 및 셸을 작성하고 부트 로더 용 코드를 제공 받았습니다.

안타깝게도 웹에서이 과정 (15-412)에 대한 결정적인 리소스를 찾을 수 없었으며 시간이 지남에 따라 발전했습니다. 그러나 아마도 사람들은 웹에 좋은 리소스가있는 학교의 소스와 과제에 대한 링크를 게시 할 수 있습니다.


3

"Roll your own toy UNIX-clone OS"라는 튜토리얼을 즐길 수 있습니다. 튜토리얼은 매우 통찰력이 있으며 당신의 길에 도움이 될 것입니다.

행운을 빕니다.


1
이렇게 심도있는 튜토리얼이있는 것은 훌륭하지만 초보자가 끊임없이 부딪히는 버그가 많이 있습니다. 이 튜토리얼은 인텔 매뉴얼과 같은 것을 열어 보고 자신이하는 일에 대해 생각할 때만 유용합니다 (예 : 복사 및 붙여 넣기 금지!).
Matthew Iselin

3

훔칠 수있는 아이디어에 대해 A2 시스템 (이전의 Oberon 시스템 이라고 함 )을 연구하십시오 . 두 사람이 만든 그래픽 OS이지만 한 사람은 Niklaus Wirth입니다. 1990 년경에 처음 출시되었으며 속도는 놀랍도록 좋습니다. Gutknecht의 책이 있습니다.


3

저수준 그래픽 프로그래밍에 대해서는 http://www.osdever.net/FreeVGA/home.htm 에서 많은 정보를 제공합니다 . (텍스트 모드에서도 매우 흥미 롭습니다.)

의심 할 여지없이 나를 혼란스럽게하는 것은 무엇입니까?

PC에는 불분명 한 것들이 엄청나게 많다는 것을 알게 될 것입니다. x86 명령어 세트 자체가 복잡하고 하드웨어에 직접 액세스 할 때 화면에 단일 문자를 작성하는 방법을 이해하는 데 상당한 시간이 걸릴 수 있습니다. .

플로피 디스크 등에 대해 걱정하지 마십시오. 대부분의 경우 Bochs 또는 QEmu와 같은 에뮬레이터를 사용합니다.


3

Abraham Silberschatz의 운영 체제 개념을 살펴 보는 것이 좋습니다. 시스템 프로그래밍 개념 이해는 기본적인 요구 사항입니다. OSes linux * BSD 및 GNU / Linux 의 F / OSS 커널 내부 , 특히 이전 버전을 살펴보십시오. 좀 더 문서화되어있을 것입니다.대체 텍스트 대체 텍스트


1
Silbershatz는 정말 훌륭하지만 매우 높은 수준입니다.
Paul Nathan

동의했습니다. 그러나 근본적으로 필수적이라고 말하고 싶습니다. Tanenbaum의 Modern Operating Systems (앞서 언급)에 대한 문서
amaterasu

2

Minix를 살펴보십시오 . " 운영 체제 설계 및 구현 " 과 함께 소스 코드를 연구하십시오 . 프로젝트에 기여하는 것을 고려하십시오. 저는 Minix가 정말 훌륭하고 유망한 OS라고 생각합니다. 또한 자금이 잘 지원되는 프로젝트입니다. 즉, 기부금에 대한 대가를받을 수도 있습니다!


1

BIOS에는 이미 화면 모드 변경, 픽셀 색상 변경, 화면에 텍스트 쓰기 등을위한 많은 입력 / 출력 기능이 내장되어 있기 때문에 매우 쉽습니다. 그러나 파일 시스템에 대한 지원은 포함되어 있지 않습니다. 이는 OS에 통합해야하는 극소수 중 하나입니다.

BIOS는 하드 드라이브의 첫 번째 섹터를로드하고 거기에서 코드를 실행하기 시작하므로 OS는 하드 드라이브의 첫 번째 섹터에 첫 번째 명령과 함께 배치되어야합니다.

이 Wikipedia 기사는 화면에 텍스트를 작성하고 키보드 및 기타 항목에서 키를 수신하기위한 BIOS 인터럽트를 시작할 수 있도록합니다. https://en.wikipedia.org/wiki/BIOS_interrupt_call

C ++를 사용할 계획이더라도 하드웨어 작동 방식을 이해하는 것이 중요하므로 어셈블리 프로그래밍에 대해 읽어 보는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.