운영 체제 개발을 시작하기위한 리소스는 무엇입니까? [닫은]


589

내가 항상 원했던 한 가지는 내 자신의 운영 체제를 개발하는 것입니다 (Linux 또는 Windows와 같은 멋진 것은 아니지만 이미 수행 한 간단한 부트 로더보다 낫습니다).

간단한 "Hello World"OS를 작성하는 데 도움이되는 리소스 / 가이드를 찾는 데 어려움을 겪고 있습니다.

많은 사람들이 리눅스 나 BSD를 보라고 권할 것입니다. 그러나 그러한 시스템의 코드베이스는 (아마도) 너무 커서 시작 위치를 알 수 없습니다.

어떤 제안?

업데이트 : Google을 통해이 게시물을 방문하는 사람들이 쉽게 사용할 수 있도록 다음 OS 개발 리소스가 있습니다.

기타 자료 :

나는라는 좋은 자원을 발견 MikeOS를 , "MikeOS에서는 간단한 운영체제의 작업을 설명하는 학습 도구입니다. 그것은 복잡한 드라이버를 필요로하지 않는다 그래서, BIOS 액세스를위한 리얼 모드를 16 비트 사용"

08/11/08 업데이트

나는에 일부 리소스를 발견 로 ... 무료 및 비 - 무료 운영 체계 Freebyte 설명서 그러한 oskit의와 EXOS 라이브러리 등의 키트에 대한 링크. 이것들은 OS 개발을 시작하는 데 매우 유용합니다.

2009 년 2 월 23 일 업데이트

Ric Tokyo 는이 질문 에서 nanoos 를 권장 했습니다 . Nanoos는 C ++로 작성된 OS입니다.

2009 년 3 월 9 일 업데이트

Dinah는 주목받는 OS 개발자에 대한 유용한 스택 오버플로 토론을 제공했습니다. 사용자 지정 운영 체제를 만드는 데있어로드 블록 은 OS를 개발할 때 발생할 수있는 함정에 대해 논의하며 OS 개발 은보다 일반적인 토론입니다.

09/7/09 업데이트

LB는 OS 개발을 배우는 학생들을 위해 설계된 교육용 OS 인 Pintos Project에 대한 링크를 제공했습니다 .

2009 년 7 월 27 일에 업데이트 됨 (여전히 강력 해짐!)

나는 23 개의 강의로 버클리에서 온 온라인 OS 과정 을 우연히 발견했다 .

TomOS 는 약간의 메모리 관리자와 마우스 지원을 포함하는 MikeOS 의 포크입니다 . MikeOS로서 교육 프로젝트로 설계되었습니다. NASM 어셈블러로 작성되었습니다.

09/08/4 업데이트

위의 온라인 버클리 강의와 함께 진행 되는 슬라이드 및 기타 자료 를 찾았습니다 .

09/08/23 업데이트

모든 질문에 태그 osdev on stackoverflow

OS / 161 은 시뮬레이션 하드웨어에서 실행되는 c로 작성된 아카데믹 OS입니다. 이 OS는 Nachos와 비슷합니다. 감사합니다 Novelocrat!

tangurena 는 임베디드 시스템 용으로 설계된 OS 인 http://en.wikipedia.org/wiki/MicroC/OS-II를 권장 합니다. 이 동반자 도서 뿐만 아니라이.

Robert Love의 Linux 커널 개발 은 Anders에서 제안합니다. 그것은 "리눅스 커널에 대해 널리 알려진 내부자의 모습"입니다.

2009 년 9 월 18 일 업데이트

c #으로 작성된 OS 인 Cosmos에 대해 알려 주신 Tim S. Van Haren에게 감사드립니다 .

tgiphil은 "공통 중급 언어를 기반으로 관리되는 운영 체제의 개발을 장려하기위한 도구, 사양 및 소스 코드 세트"인 MSA ( Managed Operating System Alliance) 프레임 워크 에 대해 알려줍니다 .

2009 년 9 월 24 일 업데이트

Steve는 Visual Studio를 사용하여 Windows에서 개발할 수있는 몇 가지 리소스를 찾았습니다. VS 2005 또는 OSDev의 VS Section으로 BrokenThorn의 가이드 설정을 확인하십시오 .

2012 년 9 월 5 일 업데이트

kerneltrap.org는 더 이상 사용할 수 없습니다. 리눅스 커널 v0.01은 kernel.org 에서 구할 수 있습니다

2012 년 12 월 21 일 업데이트 됨 학기 프로젝트를 위해 설계된 기본 OS 개발 튜토리얼 . 기본 구성 요소를 사용하여 OS를 빌드하도록 안내합니다. 초보자에게 아주 좋은 시작입니다. 관련 논문 . 감사합니다 Srujan!

2013 년 11 월 15 일 업데이트

스크래치에서 간단한 운영 체제 작성 . 제임스 무어 감사합니다!

2013 년 12 월 8 일 업데이트

컴퓨터 운영 체제를 만드는 방법 감사합니다 ddtoni!

2014 년 3 월 18 일 업데이트

GUI를 포함하여 주로 처음부터 구축 된 OS에 ToAruOS

2016 년 9 월 12 일 업데이트

자신의 장난감 운영 체제 작성

2016 년 12 월 10 일 업데이트

Scratch에서 간단한 운영 체제 작성 (@Tyler C 감사합니다)


5
잊지 마세요 forums.osdever.net
Brenden

15
왜 이런 종류의 좋은 범용 질문이 항상 닫혀 있습니까?
Pratik Singhal

30
이 질문은 370 개의 공감 률이 있으며, 422 번 공표되었으며 StackOverflow가 처음 시작된 이래로 진행되었습니다. 지역 사회는 그것을 좋아 한 것 같지만, 어떤 이유로 소수의 사람들이 그것을 위해 그것을 망쳐 놓아야합니다. 이것이 내가 정말 싫어하는 이유입니다
Giovanni Galbo

1
이러한 노력이 매우 관련이있는 Unikernels에는 매우 흥미로운 경향이 있습니다 (단 하나만 수행하고 잘 수행하십시오). 일반적으로 가상 머신에서 유니 커널을 콜드 부팅하고 1 초 이내에 사용자 코드를 실행할 수 있습니다. 서비스에 대한 실제 요청이 들어 오면 나는 그런 서비스에 대한 바로 DNS 조회, DNS 서버 트리거를가 준비 있도록 "부팅 가상 머신을"만드는 솔루션을 보았다.
Thorbjørn Ravn 안데르센

답변:


95

X86 플랫폼 용 OS 작성과 관련된 내용에 대한 간략한 개요 후에는 많은 링크 가 있습니다.

가장 유망한 것으로 보이는 링크 (www.nondot.org/sabre/os/articles)는 더 이상 사용할 수 없으므로 Archive.org 버전 을 훑어보아야 합니다.

하루가 끝나면 부트 로더는 커널의 머신 코드를 가져 와서 메모리에 넣고 점프합니다. 원하는 커널에 머신 코드를 넣을 수 있지만 대부분의 C 프로그램은 OS를 기대하므로 컴파일러에 모든 기능이 없거나 부트 로더가 일부를 생성해야한다고 컴파일러에 알려 주어야합니다.

그런 다음 커널은 모든 무거운 작업을 수행하며 원하는 커널의 예라고 생각합니다. 그러나 "Hello world"라는 커널을 사용하여 명령 인터프리터를로드하고 디스크 서비스를 제공하며 프로그램을로드 및 관리하는 커널을 만드는 것 사이에는 갈 길이 멀다.

ACM에 가입하여 이전 문헌에 액세스 할 수 있습니다. 80 년대 후반과 90 년대 초반 초기 컴퓨팅 잡지에는 대체 OS만드는 방법에 대한 많은 기사가 있습니다 . 이 시대에 출판되지 않은 책들도있을 것입니다. 해당 잡지의 색인 (이 사이트에서 사용 가능-잡지 이름 근처의 "색인"을 클릭)을 찾은 다음 사본이있는 사람들을 요청하면 동일한 정보를 무료로 얻을 수 있습니다.

마지막으로 유즈넷이 죽었다는 것을 알고 있지만 (인터넷 파운데이션의 선지자들에게) 그 당시의 낡은 전문가들이 여전히 거기에 살고 있다는 것을 알게 될 것입니다. Google 그룹 (dejanews의 오래된 저장소가 있음)을 검색해야하며 10 년 또는 1.5 년 전에 많은 사람들이 지금 묻는 질문을 찾을 것으로 기대합니다. Linus Torvalds가 리눅스를 처음 개발했을 때 도움을 요청한 많은 질문을 겪을 수도 있습니다. 검색 결과가 나타나지 않으면 적절한 뉴스 그룹에 문의하십시오 (아마 comp.arch로 시작하지만 이름이 OS 인 뉴스 그룹을 검색하십시오).


안녕하세요, COSMOS는 운영 체제를 개발하기에 좋은 도구입니까?
Vikas Verma 2016 년

@VikasVerma 나는 그것을 사용하지 않았으므로 몰라요.
Adam Davis

@AdamDavis 첫 번째 링크가 끊어졌습니다 (다른 링크도 마찬가지입니다). 제발 고쳐주세요!
nbro

35

Minix 는 훨씬 더 작으며 학습 목적으로 설계되었으며, 함께 사용할 책 도 좋습니다.

업데이트 : Minix 3은 약간 다른 목표라고 생각하지만 Minix 2 (및 첫 번째 버전)는 교육 목적으로 사용되었습니다.


최신 Tanenbaum 서적을 얻었지만 minix3 소스 코드가 상당히 커 보입니다! 나는 OP와 비슷한 목표를 가지고 있지만, 처음부터 커널을 만들고 싶지는 않지만 커널의 작동 방식과 작동 방식을 이해하고 싶습니다. 다음과 같은 것이다 Tanenbaum book and minix3결국 나를 리눅스 커널에 기여 minix3 도움말을 변경할 충분히?
기드온

32

실시간 멀티 태스킹 운영 체제를 처음부터 작성한 사람은 ...

키보드 디 바운스 루틴, 키보드 드라이버, 디스크 드라이버, 비디오 드라이버, 파일 시스템 및 마지막으로 부트 로더-그것은 아무 것도하지 않고 처음으로 시작하는 것입니다!

... 하드웨어에 익숙해지는 것이 얼마나 중요한지 강조 할 수 없습니다! 이것은 다른 누군가가 이미 당신을 위해 마련한 기본 시스템을 선택하는 대신 직접 모든 것을하고 싶다면 특히 그렇습니다. 예를 들어, 인텔에 연락하여 CPU 유형에 맞는 CPU 카드를 요청하십시오! "pin-outs", 인터럽트, opcode 등 이름을 붙입니다.

하드웨어가 모든 것을 가능하게한다는 것을 기억하십시오. 하드웨어를 연구하십시오. 후회하지 않을 것입니다.

.


18

마이크로 컨트롤러 OS를 작성하십시오. x86 기반 마이크로 컨트롤러를 권장합니다. 현대 OS는 방대 합니다. 기본 사항을 먼저 배우십시오.


2
이 아이디어로 시작할 아이디어가 있습니까? 나는 매우 관심이 있습니까? 어떤 키트를 구입해야합니까 .. 책을 시작하는 등
Julio

@Uncle : 지금까지 최고의 임베디드 시스템을 본 적이 없습니다. 그들은 너무 높은 수준이고 OS를 가정하거나 전기 기술자를 대상으로 코드를 무시합니다. 키트의 경우 Google은 " bifferos.bizhat.com "을 찾습니다 . ARM 키트도 있습니다. 내가 아두 이노 부여하지하고 그래서 나는 개인적으로하지 하버드 아키텍처를 좋아한다, 그러나 입니다 가장 인기. 더 이국적인 작업을 위해 XC-1A도 좋습니다.
Paul Nathan

@Paul은 답변을 확장 할 수 있다면 감사하겠습니다. AVR 과 Arduino를 살펴 봤지만 최근에는 .NET 마이크로를 보았습니다. 나는 더 높은 추상화 LOB 녀석이지만 너무 많이 걷기 시작하고 싶습니다. 어디에서 시작하는 것이 좋습니다?
기드온

@giddy : AVR은 현재 유행입니다. 그것들은 작고 저렴하지만 건축을 정말로 좋아하지 않습니다. ARM 개발 키트 (최고 비용 ~ 100)를 얻는 것이 좋습니다. 상용 응용 프로그램에서 인기가 있습니다.
Paul Nathan

@Paul 감사합니다! ARM에 대해 많이 들어 보지 못했습니다. .net 마이크로는 어떻습니까? 뭔가 타는 것이 조금 걱정됩니다. 대부분의 키트에는 어떤 종류의 지침이 제공됩니까? 다시 감사합니다.
기드온

16

자신의 OS 개발에 대한 모든 정보를 얻을 수있는 곳이 있었으면 좋겠습니다. 가장 가까운 것은 OS Dev Wiki and Forums 입니다. 설정, 개발 및 장치 하드웨어 정보에 관한 많은 좋은 정보를 제공합니다.

또한에서 훌륭한 튜토리얼이 있습니다 BoneFide 나는으로 시작하기 자습서를 사용했습니다, 밀기울 , 지금 그의 전화를 기반으로 최근의 일에서 찾고 롤 자신의 장난감 유닉스 클론 OS .

두 번째 체크 아웃 : "운영 체제 : 설계 및 구현"

Windows에서 개발하려면 jolson의 블로그 게시물을 확인하십시오 .

편집 : Visual Studio를 사용하여 창을 개발하려면 BrokenThorn 안내서 또는 OSDev의 위키를 확인하십시오 .


1
관련 : SO의 x86 태그 위키 에는 Intel / AMD 설명서 및 많은 유용한 자료 에 대한 링크가 있습니다.
Peter Cordes

15

훌륭한 자료는 MIT 과정 6.828 : 운영 체제 엔지니어링의 자료입니다.

XV6-x86 용 ANSI C로 작성된 간단한 유닉스 계열의 교육용 OS http://pdos.csail.mit.edu/6.828/2012/xv6.html

XV6 소스-줄 번호가있는 인쇄 된 소책자 http://pdos.csail.mit.edu/6.828/2012/xv6/xv6-rev7.pdf

XV6 책-OS 디자인의 주요 아이디어를 설명 http://pdos.csail.mit.edu/6.828/2012/xv6/book-rev7.pdf

콤팩트 한 자료 : 92 페이지 소스 및 96 페이지 주석.

나는 Minix 책보다 더 좋아합니다! 진정한 보석입니다!


11

또한 c #으로 작성하는 운영 체제 인 SharpOS 를 살펴볼 수도 있습니다 .


9

책에는 운영 체제 기본 사항에 대한 유용한 리소스가 있습니다. 새로운 OS를 처음부터 새로 만들라는 요구가 많지 않기 때문에 인터넷에서 수많은 취미 유형 정보를 찾을 수 없습니다.

Tanenbaum의 표준 교재 "Modern Operating Systems"를 권장합니다. Calingaert의 "운영 체제 요소"도 유용 할 수 있습니다.이 책은 디자이너의 관점에서 OS가 무엇인지 대략적으로 보여주는 책에 대한 간단한 개요입니다.

실시간 시스템에 관심이 있고 (실시간 OS의 차이점과 이유를 이해해야하는 경우) Labrosse의 "MicroC / OS-II"도 추천합니다.

편집하다:

"보다 기술적 인"이라는 의미를 지정할 수 있습니까? 이 책은 의사 코드 구현에 대한 세부 정보를 제공하지만 특정 기계 / 언어에 대한 예제 OS 또는 코드 스 니펫을 찾고 있습니까?

-아담


7

다른 질문에서 왔습니다. Pintos 에 대해 언급하고 싶습니다 ... Nachos와 Pintos의 OS 과정이 x86에서 실행할 수있는 것과 같은 종류 인 것 같습니다.


7

Robert Love의 Linux Kernel Development가 매우 흥미로 웠습니다. Linux 커널의 여러 하위 시스템이 매우 철저하게 작동하는 방식에 대해 설명합니다. 소스가 사용 가능하기 때문에 리눅스는 해킹해야 할 주요 후보입니다.



6

저학년 운영 체제 과정에서 우리는 OS / 161을 위한 수많은 서브 시스템을 만들었 습니다. 간단한 BSD와 비슷한 커널로 일부 기본 사항을 제공하면서도 높은 수준의 서비스를 구현할 때 다양한 디자인 공간을 자유롭게 결정할 수있었습니다.


6

Minix에서 해킹을 시작하십시오. 그것은 리눅스보다 훨씬 작고 (명백하게) 가르치는 목적을 염두에두고 설계되었습니다 (최소한). 그러나 Minix 3이 아니라 완전히 다른 이야기입니다.


5

이미 대답했지만 대학에서 운영 체제를 사용할 때 초기 Linux 커널로 시작하여 단순한 현대 기능 (기본 파일 시스템, 가상 메모리, 멀티 태스킹, 뮤텍스)을 추가했습니다. 좋은 재미. 보호 모드 및 페이지 테이블을 사용하여 mucking 용 REALLY 미친 저수준 어셈블리의 일부를 건너 뛰면서 일부 직감을 배웠습니다.

http://kerneltrap.org/node/14002 http://kerneltrap.org/files/linux-0.01.tar.bz2


4

linuxfromscratch 를보고 싶을 수도 있습니다 .

Linux From Scratch (LFS)는 전적으로 소스 코드에서 사용자 정의 Linux 시스템을 빌드하기위한 단계별 지시 사항을 제공하는 프로젝트입니다.


32
운영 체제를 컴파일하는 것은 운영 체제를 작성하는 것과 크게 다릅니다.
duskwuff -inactive- 1

7
@duskwuff 당신 말이 맞지만 많은 것을 배울 것입니다. 그런 다음 계속해서 직접 쓸 수 있습니다.
jfs

4

한 학기의 프로젝트로 설계된 단순하고 기본적인 OS 개발 튜토리얼 . 기본 구성 요소를 사용하여 OS를 빌드하도록 안내합니다. 초보자에게 아주 좋은 시작입니다. 관련 논문은 여기에 있습니다 .


훌륭한 자원. 이 논문은 Nachos (2500 줄), OS / 161 (11000), MINIX (30000), GeekOS를 참조합니다. 각 대학 공식 페이지로 이동하면 소스 코드, 시뮬레이터 및 도구뿐만 아니라 연간 과제도 찾을 수 있습니다.
limitcracker



3

www.mosa-project.org 에서 MSA (Managed Operating System Alliance) 프로젝트를 확인하십시오 . 그들은 C #에서 AOT / JIT 컴파일러와 완벽하게 관리되는 운영 체제를 설계하고 있습니다. 일부 개발자는 비활성 SharpOS 프로젝트를 사용합니다.


3

"CIL 호환 언어로 완전히 구현 된 운영 체제 프로젝트"인 Cosmos를 가지고 놀았습니다 . 그것은 C #으로 작성되었으므로 바로 내 골목이었습니다. 나 자신과 같은 운영 체제 구축을 시도한 적이없는 사람에게는 "Hello World"운영 체제를 곧바로 실행할 수 있다는 것이 실제로 멋지다.



3

위에서 언급했듯이 OSDev Wiki 는 OS 개발을위한 최고의 소스입니다. 독일어를 사용하는 사람들에게는 lowlevel.eu Wiki도 좋습니다. 상대적으로 알려지지 않은 Incitatus OS , 작은 사용자 공간 앱 세트가있는 간단한 커널. OS 개발의 복잡한 주제를 다루는 데 사용하는 것이 좋습니다.


2

Movitz 는 Common Lisp로 작성되고 "금속에서"실행되는 Lisp 환경입니다. 불행히도 Movitz 메인 페이지 의 일부 링크는 액세스를 거부하지만 trac 페이지 에서 소스 코드를 다운로드하고 컴파일하는 방법에 대한 지침을 찾을 수 있습니다 . 또한 이 페이지 의 아카이브에서 준비된 이미지를 찾을 수 있습니다 .

IMHO 이것은 현재 사용 가능한 하드웨어에 대한 Lisp 머신 개념을 되살리기 때문에 가장 흥미 롭습니다 . 그것은 상업적으로 실패했지만 아이디어가 나쁘다는 것을 나에게 증명하지는 않습니다.

유닉스 증인 핸드북 은 유닉스와 그 파생어의 개념을 반쯤 으깨는 재미있는 책입니다. Lisp 머신 컨셉이 얼마나 나은지에 대한 많은 섹션 논쟁.




1

프로그래머를위한 모욕적 인 질문. Windows 또는 Mac과 같은 OS를 빌드하는 데 오랜 시간이 걸리지 만 간단한 것을 빌드하려는 경우 최선을 다할 수 있습니다.

  1. 어셈블리 언어, C 및 C ++에 중점을 두어야합니다. 이 언어에 능통해야합니다.
  2. 먼저 OS 작동 방식에 대한 좋은 책을 읽고 [Google it], Wiki OS의 모든 정보를 읽습니다.
  3. 유튜브에서 검색 "조립 언어로 자신 만의 OS를 만드는 방법"비디오를보십시오 . 비디오
  4. Linux OS 소스 코드를 다운로드하여 직접 컴파일하고 직접 코드를 수정하십시오.
  5. 이제 숙련 된 OS 편집기로 MinixQNX를 다운로드 하여 개발을 시작하고 여기에서 문서를 얻을 수 있습니다. Minix DocQNX Doc

이제 OS를 만드는 데있어 석사 학위 (완전히 조금만 더 나아가 야 할 것)를 얻었으며 이제는이 지식을 지식인들에게 배포하고 그들의 도움으로 Mac, Linux 또는 Windows만큼 강력한 OS를 만들려고 노력합니다.


편집자가 편집 HTTP betweern 내 대답하고 제거 공간하시기 바랍니다 : 나는 새로운 활발 그래서, 내가 너무 높은 어 Repu을 해달라고 나처럼 www와, PLZ 나를 위해 그 물건을
BharatKhanna

1

기본 운영 체제를 만들었 으면 GUI를 만들거나 라이브러리를 포팅하는 데 필요한 리소스가 많지 않기 때문에 실제로 계속하기가 어렵습니다. 하지만 ToAruOS를 살펴보면 많은 도움이 될 것입니다!

그 OS 표면 아래의 코드는 너무나 간단합니다! 그러나 동시에 그는 cairo, python, (아직은 아니지만) sdl과 같은 것을 이식하고 공유 메모리를 만들었으며 자신의 위젯 툴킷도 만들었습니다. 모두 C로 작성되었습니다.

또 다른 흥미로운 OS는 pedigreeOS 입니다. JamesM ( jamesM의 커널 튜토리얼 뒤에있는 사람)에 의해 만들어졌으며 ToaruOS 보다 더 많은 기능을 가지고 있지만 더 크고 혼란 스럽습니다.

그러나 어쨌든이 2 OS는 특히 ToAruOS에 많은 도움이 될 것입니다.


1

기본 운영 체제 작업을 시작했을 때 기본 운영 체제를 위한 디딤돌 과 같은 기본 가이드가 필요했습니다 . 머리를 풀지 않는 데 도움이되었습니다.

절대적으로 아무것도하지 않으려는 경우 (순수한 어셈블리 코드)

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