자신 만의 커널을 만드는 야심 찬 학생을위한 조언 [닫기]


18

저는 컴퓨터에 대해 알아야 할 모든 것을 배우고 자하는 매우 야심 찬 대학생입니다 (원한다면 배우고 싶습니다). 최근에 나는 내 자신의 커널을 디자인하고 빌드하는 것이 재미있는 프로젝트라고 생각했다.

몇 가지 기본 정보를 얻었으며 실제로이 작업을 수행하기 위해 Assembly 및 C / C ++를 마스터해야한다는 것을 모았습니다. 내가 그 일을하는 동안 커널이 실제로 프로그래밍 관점에서 어떻게 작동하는지 배우고 싶습니다. 나는 리눅스 커널의 코드를 탐색하는 데 몇 시간을 보냈지 만 지금까지는 걸릴 수 있습니다.

커널을 빌드하는 기본 단계는 무엇입니까? 해결해야 할 것들? 주문 또는 일을? 나는 많이 물고 있다는 것을 알고 있지만 그것을 처리 할만 큼 결심했습니다.


12
모든 것을 배우기 위해 당신을 강타 할 필요가 없습니다. 그러나 실제로 노력할 계획이라면 수명 연장, 초인간적 두뇌, 그리고 당신의 인생에 대한 다른 계획은없는 것이 좋습니다.)

2
나는 그 모든 것을 가질 것으로 기대합니다! 그러나 실제로는 배우고 싶은 압도적 인 충동이 있습니다.
n0pe

@delnan 가능한 편집증 정신 분열증도 플러스입니다 : templeos.org
DanteTheEgregore

@DanteTheEgregore 무엇입니까?
Panzercrisis

답변:


34

운영 체제를 설계해야합니다. 예를 들어, 유닉스 계열 시스템이어야한다고 결정하더라도 여전히 많은 결정이 필요합니다. 유닉스와 비슷한 정도를 원하십니까? UNIX의 어느 부분을 좋아하고 개선이 필요하다고 생각하십니까?

유닉스 계열로 설정하지 않았다면 더 많은 질문에 답해야합니다. 프로세스는 트리를 형성해야합니까, 아니면 "평평"해야합니까? 어떤 종류의 프로세스 간 통신을 지원 하시겠습니까? 다중 사용자이거나 다중 태스킹 (또는 단일 태스킹)을 원하십니까? 실시간 시스템을 원하십니까? 작업간에 어느 정도의 격리를 제공 하시겠습니까? 모 놀리 식 대 마이크로 커널 규모로 어디에서 떨어지기를 원하십니까? 분산 작업을 어느 정도 지원합니까 (있는 경우)?

나는 일반적으로 좋을 걸 에 대한 영감의 리눅스 커널을 공부. 그것은 리눅스 커널 자체에 반대되는 것이 아니라, 리눅스가 주로 교육용이 아닌 프로덕션 용도로 만들어 졌다는 간단한 사실입니다. 많은 최적화, 역 호환성 해킹 등이있어 생산에는 매우 유용하지만 교육보다는 산만 할 가능성이 높습니다.

당신이 그것을 찾을 수 있다면, 사자의 책 (사본 UNIX 6 판에 라이온스 해설 과 함께, 소스 코드 존 라이온스는) 훨씬 쉽게 시작 지점입니다. 6th Edition UNIX는 여전히 간결한 장난감 시스템이 아니라도 상당히 빠르게 읽고 이해하기에 충분히 작고 단순했습니다.

x86 (적어도 주로)을 대상으로하려는 경우 Richard Burgess의 MMURTL V 1.0 을 참조하십시오. 이것은 CPU 설계자가 원래 의도했던대로 x86 하드웨어를 훨씬 더 많이 사용하는 x86 용 시스템을 제공합니다. 대부분의 실제 시스템은 다른 CPU 로의 이식성을 선호합니다. 아시다시피, 이것은 하드웨어의 끝 부분에 훨씬 더 집중되는 경향이 있습니다. 인쇄 된 사본은 비싸고 찾기 어려워 보이지만 텍스트와 코드 를 무료로 다운로드 할 수 있습니다 .

다행히도 Andrew Tanenbaum과 Albert Woodhull의 운영 체제 설계 및 구현과 같은 몇 가지 가능성도 있습니다 .


좋은 답변 주셔서 감사합니다. 나는 그 모든 책들을 살펴볼 것이다.
n0pe

7
책과 소스의 PDF에 대한 링크를 추가했습니다. v6 UNIX의 소스에 대한 놀라운 점은 페이지 당 100 줄로 100 페이지 길이라는 것입니다. 또한 10,000 줄의 코드 로 완벽한 멀티 태스킹 운영 체제를 보유하고 있습니다 . 2238 행의 유명한 주석을 둘러싼 코드를 진정으로 이해할 수 있다면, "당신은 이것을 이해할 것으로 예상되지 않습니다."자신에게 골드 스타와 명예 석사를 줄 수 있습니다. 즐겨!
피터 로웰

링크 주셔서 감사합니다! 이제 이것을 인쇄 할 위치를 알아 내야합니다 ....
n0pe

1
Minix (Tannenbaum 책)는 교육용으로 설계되었으며 여기에 필요한 것일 수도 있습니다.

@PeterRowell, DMR은 버그이었다 진술 cm.bell-labs.com/who/dmr/odd.html

12

작고 집중적 인 작은 작업부터 시작하는 것이 좋습니다. 어셈블리 사용, 장난감 부트 스트랩 프로그램 작성. 많이 할 필요는 없습니다. 컴퓨터가 시작될 때 자동으로 프로그램을로드하고, 실행중인 것을 확인하는 메시지를 인쇄하고, 키보드에서 입력을 읽고, 다른 메시지를 인쇄 한 다음 컴퓨터를 종료하기 만하면됩니다.

몇 가지 이점이 있습니다.

  1. 결국 커널에 부트 스트랩 프로세스가 필요하므로 무의미한 연습이 될 수 없습니다.
  2. 집필을 통해 연습을하게됩니다.
  3. 저수준 IO 루틴 작성 연습을 제공합니다. 전화를 걸 OS가 없을 때 화면에 메시지를 쓰거나 키 입력을 읽는 방법은 무엇입니까?
  4. CPU와 마더 보드의 기술적 미세한 문제에 대한 연구 경험이 있습니다. (첫 번째 질문 : 메인 보드 / CPU가 시작될 때 어떻게 부팅 가능한 프로그램을 찾습니까?)
  5. 커널을 작성하는 것은 매우 정교한 작업이되었으며 많은 미묘함이 있습니다. 이 작업은 시작하기 전에 무언가를 제공하고 잡초에서 길을 잃지 않도록 할 것입니다.

일단 당신이 이것을 할 수 있다면, 당신은 당신이오고있는 것에 대해 훨씬 더 잘 이해할 것입니다.


이것에 대해 감사합니다. 이것이 바로 제가 시도하고 할 것이라고 생각합니다. 내 미래에 더 많은 독서.
n0pe

7

어셈블러에서 프로그래밍하는 방법을 배우는 것이 좋은 첫 시작이며 내장 된 기능이 없기 때문에 MSDOS 6.0에서 프로그래밍하는 것이 도움이 될 수 있습니다.

운영 체제 개념과 같은 좋은 책을 읽으면 자신의 커널을 설계하는 것이 시작이 될 것입니다. 부팅 로딩, 장치 드라이버 관리, BIOS와의 인터페이스, 파일 시스템 생성 및 관리, 프로그램 예약, 프로그램 로딩 및 언 로딩을 처리하고 최소한 일종의 쉘을 구현해야합니다 (윈도우 시스템을 구축하는 것보다 훨씬 쉽습니다).

C / C ++는 커널이 이러한 언어의 표준 라이브러리와 호환되는 경우에만 작동합니다. 그렇지 않으면 이러한 라이브러리의 사본도 작성해야합니다.

그것은 멀티 스레딩, 시스템 보안, 네트워킹에 대해 생각조차하기 시작했습니다.


7

Minix는 훌륭한 유닉스 클론 (Linux에 영감을 주 었음)으로 교육용으로 작성되었습니다.

Andrew S. Tannenbaum은 훌륭한 작가이자 교사이며 Minix를 예로 들어 운영 체제에 대한 전체 책을 작성했습니다 (다음에 따라야 할 소스 코드 포함). http://en.wikipedia.org/wiki/Operating_Systems:_Design_and_Implementation

개인적으로 나는 그가 프로그래머보다 다소 더 나은 작가라는 것을 알기 때문에 개인적으로 좋아하는 것만 큼 명확하지 않지만,-작동합니다!

이것을 학습 자료로 살펴 보는 것이 좋습니다. 또한 실제로 유용한 것을 실제로 생산하는 데 필요한 작업량에 대한 아이디어를 제공합니다.


실제 책을받는 것이 좋습니다. 보다 쉬운 메모 작성

실제로 생각해 보니, 아마존 책을 싸게 본 것 같습니다. 나는 그것을 얻을 수 있습니다. 감사합니다
n0pe

또한 이것은 3 판입니다. 코스를 받았을 때 첫 번째 버전을 사용했다고 생각합니다.

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