최상의 답변
운영 체제의 의미에 따라 다릅니다. 한 번은 라운드 로빈 방식으로 여러 프로토콜 세션을 실행하는 간단한 대기열 시스템을 작성했습니다. 그러나 표준 운영 체제에서 실행되었습니다. 마이크로 컨트롤러가 임베디드 시스템 용으로 처음 나왔을 때 엔지니어들은 일반적으로 다른 답변 중 하나에 표시된대로 자신 만의 기초적인 OS를 작성했습니다.
멀티 태스킹 작동의 기본 기능을 갖춘 가장 작은 유용한 운영 체제입니다. -the-shelf 시스템은 QNX라고 불 렸습니다. 이것은 축소 된 Unix 시스템이었고 최초의 IBM PC에서 실행되었습니다. 멋진 그래픽은 없지만 소프트웨어 개발을 편하게 할 수있었습니다. 사실 현대 기계와의 유일한 차이점은 색상과 그래픽이있는 사용자 인터페이스였습니다. 따라서 기본적으로 IBM의 DOS 도입은 컴퓨터 산업을 최소 10 년 전으로 거슬러 올라갑니다. (적응 될 수있는) 우수한 운영체제가 많았거나 물론 그 당시 Unix가 표준을 설정하면서 개발 중이었습니다.
답변
저는 방금 개발을 마쳤습니다. 학교에서 지난 학기 동안 수업 용 커널 ( CS-4284 시스템 및 네트워킹 캡 스톤 ). 이전에 저는 OS 디자이너의 관점이 아닌 프로그래머의 관점에서 OS로 작업하는 것을 목표로하는 OS 수업을 들었습니다. 지난 1 년 반 동안 OS 및 커널 개발에 참여했습니다. 오랜 시간 이었지만 많은 것을 배웠습니다.) 다음은 제가 권장하는 내용입니다.
1. 마스터 C 더 이상 강조 할 수 없습니다. 아니요, 마스터하세요. OS 개발은 어렵습니다. C를 마스터하는 데 필요한 많은 개념이 포함되어 있으므로 방해가되지 않습니다. 예를 들어 Unix 파이프 (셸에 | 입력)를 사용합니다. OS에서 파이프를 개발하려면 OS 파일 시스템과 파일 구조를 잘 이해해야합니다. 이는 일반적인 제한 버퍼 문제 (소비자 / 생산자)이며 모든 동기화를 처리해야합니다. 가상 메모리를 작성하는 동안 알고 있어야합니다. 또한 Unix는 일반적으로 BYOB (자신의 버퍼 가져 오기)입니다. 사용자가 제공 한 버퍼를 적절하게 관리해야합니다. 여기서 마지막으로하고 싶은 것은 포인터 및 메모리 관리와 같은 기본적인 C 문제를 처리하는 것입니다. (참고 : OS의 메모리 관리는 C 메모리 관리보다 10 배 더 어렵습니다. 사용자와 커널 주소 공간을 알고 있어야합니다.)
2. 커널과 OS 커널과 OS의 차이점을 이해해야합니다. 커널은 기본적으로 OS의 두뇌입니다. OS는 함께 번들 된 응용 프로그램 집합입니다. 예를 들어, Mac OS X에는 커널, 인터페이스 (GUI), 내장 된 표준 응용 프로그램 (Finder- 파일 시스템, 텍스트 편집기, 셸 등을 시각화합니다 …)
3. 바로 뛰어 들지 마십시오. 시작할 수 없습니다. 며칠 또는 몇 주 만에 커널 개발을 수행합니다. 다음부터 시작하는 것이 좋습니다.
- GCC 컴파일 단계 (gcc를 실행하면 어떻게되는지, 실행 파일이 생성되는 방법 및 C로 간단한 어셈블러를 작성할 수도 있습니다 (어셈블리 코드를 입력 및 출력 기계 코드로 사용합니다. 이렇게하려면 어셈블리에있는 .data, .text 및 .bss 섹션이 무엇인지 이해해야합니다. OS 가상 메모리를 이해하는 길) 머신 수준의 주소 지정 및 분기 해결 방법도 이해하게됩니다.
- mach와 친숙해지기 ine 수준의 도구 및 프로그램. 폭탄 연구실을하는 것이 좋습니다. 많은 교육 자료가 있기 때문입니다. 그냥 구글 폭탄 연구소.
- 기본 OS 공격에 익숙해 지십시오. 포인트 1 (google buffer overflow lab)과 같은 이유로 버퍼 오버플로를 살펴볼 것을 제안합니다.
- C의 시스템 호출, 스레드 및 프로세스에 대해 알아보세요. 거기에서 C로 자신 만의 셸을 개발하세요.
- 메모리 할당에 대해 알아보고 malloc을 구현하고 C에서 free를 구현합니다. 디자인 절충, 할당 전략, 해제 전략 등에 대해 알아보세요 …
- 멀티 스레딩 및 멀티 프로세싱에 대해 알아보기 여기에서 동기화 메커니즘 (잠금, 뮤텍스, 세마포어)을 살펴보고 다른 프로그램에서 사용할 수있는 스레드 풀을 C로 개발하십시오.
4. 이제 실제적이면서도 단순화 된 OS 커널 개발을 시작할 수 있습니다. 이 시점에서 OS 디자이너로서 실제 OS에서 개발을 시작할 수 있습니다. Google Stanford Pintos를 사용하면 Stanford에서 개발 한 작은 교육용 커널에 액세스 할 수 있습니다. 문서와 4 개의 프로젝트 세트가 함께 제공됩니다. Pintos에 대한 강의 슬라이드가있는 일부 학교를 검색 할 수 있습니다. 운영 체제 개념 ( Amazon.com : 운영 체제 개념 (9781118063330) : Abraham Silberschatz, Peter B.Galvin, Greg Gagne : 책 ). 문서는 꽤 잘되어 있고 프로젝트는 잘 설명되어 있습니다. 또한 OS에는`make check`를 실행하여 실행할 수있는 테스트가 함께 제공되므로 “일을 제대로 수행했는지 여부를 확인할 수 있습니다.
5. Linux에 기여할 수 있습니다. 소스 코드와 Linux 설계 결정 (Pintos보다 훨씬 더 복잡함)을 검토하는 데 많은 노력이 필요하지만이 시점에서는 최소한 시작은 할 수 있습니다. 더 많은 연습과 독서를 통해 “그것을 배울 수 있습니다.
4 단계를 방금 완료했습니다. 1 ~ 3 단계를 좋아했지만 솔직히 4 ~ 4 단계는 OS 개발에 그다지 관심이 없다는 것을 깨달았습니다. 나는 프로그래머로서 (프로그래머의 관점에서) OS와 함께 일하는 것을 좋아했지만 더 깊이 파고 드는 것을 좋아하지 않았다. 그래도 커널 개발을 통해 많은 것을 배웠고 많은 것을 알 수 있습니다. 또한 커널을 작성할 수 있다면 소프트웨어를 작성합니다. OS에 대한 훌륭한 통찰력을 제공하므로 적어도 처음 3 단계를 수행하는 것이 좋습니다. 말 그대로 전반적으로 더 나은 소프트웨어 엔지니어가 될 것입니다. 높은 수준의 언어를 더 많이 이해하고 올바른 작업에 적합한 도구 / 언어 / 기술을 사용하는 방법도 배우게됩니다.
나는 있습니다. OS 개발, 프로젝트, 테스트 등에 대한 많은 자료 … 사람들이 관심이 있다면 댓글로 알려주세요. 그러면 초보자를 OS 개발에 안내하는 테스트 환경과 함께 온라인 eBook / 튜토리얼 / 가이드를 함께 만들 수 있습니다. 작업 할 프로젝트와 피드백을 제공합니다.