운영체제 내부에 대해 더 잘 알고 싶습니다. 프로세스 관리, 메모리 관리 및 그런 것들.
나는 리눅스 나 BSD 커널을 알게 됨으로써 배우는 것을 생각하고 있었다.
어떤 커널이 학습 목적으로 더 좋습니까?
시작할 수있는 가장 좋은 장소는 무엇입니까?
좋은 책을 권할 만합니까?
리눅스 또는 BSD 커널 내부 정보를 얻는 가장 좋은 방법은 무엇입니까?
답변
대학에서 나는 book by Tanenbaum을 사용하는 운영체제 클래스를 사용했습니다. 이 수업에서는 Minix operating system에 장치 드라이버를 구현했습니다. 많은 즐거움이었고 우리는 많은 것을 배웠습니다.
미닉스를 선택하면 학습을 위해 설계되었습니다. 그것은 마이크로 커널이지만 리눅스와 BSD는 모 놀리 식 커널이므로 배운 내용은 리눅스 나 BSD로 작업 할 수있는 100 % 번역이되지 않을 수도 있습니다. 그러나 꽤 많이 처리하지 않아도 많은 것을 얻을 수 있습니다 많은 정보.
부수적으로, Just for Fun을 읽은 Linus는 실제로 Linux를 작성하기 전에 Minix를 사용하고 있었지만 실제로는 충분하지 않았습니다.
나는 이전에 같은 목적을 위해 추천에이 책을 구입했다 그러나 나는 나 자신이 너무 만 중고로 데리고 그들에게 공부에 도착하지 조언.
리눅스 사용자로서 리눅스에는 사람들이 커널에 대해 알기에 좋은 커뮤니티가 있다고 말하고 싶습니다. http://kernelnewbies.org은 질문하고 커널 작동 방식을 배우기 시작할 수있는 좋은 곳입니다. 나는 책을 추천 할 수는 없지만, 일단 커널 뉴스 위의 출발 자료를 읽으면 근원이 잘 기록되어있다.
이미 언급 된 좋은 책 (Opeating System Design & 구현이 특히 좋다) 외에도 1.x 릴리즈 Linux 커널을 구해서 VMWare 또는 VirtualBox에로드하고 거기서부터 게임을 시작하십시오.
소스 코드를 탐색하는 데 많은 시간을 할애해야합니다. 이를 위해 찾아보기 가능한 링크 된 소스 버전 인 http://lxr.linux.no/을 확인하면 훨씬 쉽게 작업 할 수 있습니다. Linux (0.01)의 첫 번째 버전은 http://lxr.linux.no/linux-old+v0.01/을 확인하십시오. 재미는 http://lxr.linux.no/linux-old+v0.01/boot/boot.s에서 시작됩니다. 버전별로 진행하면서 ChangeLog를 확인하고 변경된 부분을 파헤쳐 전체 내용을 다시 읽지 않게하십시오.
개념을 익히고 나면 2.0, 2.2 등을 확인하십시오. 프로세스에 많은 시간을 들여 놓을 준비를하십시오.
유니 (uni)에있을 때 나는 운영체제를 공부하는 한 학기를 보냈는데, 그 일환으로 Linux에서 RAM 기반 파일 시스템을 구현해야하는 과제가있었습니다.
Linux keurnel의 내부를 이해하고 모든 것이 어떻게 잘 맞는지 파악하는 것은 환상적인 방법이었습니다. 또한 표준 도구와도 상호 작용하는 방식으로 놀면서 즐거웠습니다.
코드로 들어가기위한 대용품이 없습니다. 관심있는 드라이버 또는 하위 시스템을 찾아서 시도해보십시오. VMware Workstation 같은 도구를 사용하면 원하는대로 변경하고, VM을 스냅 샷하고, 수정 된 커널을 실행하는 것이 매우 쉽습니다. 부팅 할 때 커널 패닉이 발생한다면 누가 신경 써야할까요? 그냥 스냅 샷으로 돌아가서 문제를 해결하십시오.
도서의 경우 Robert Love의 Linux Kernel Development을 강력히 추천합니다. 그것은 훌륭하게 쓰여진 책입니다 - 많은 정보, 조직 된 건강하고 유머러스 한 ... 전혀 읽지 않는 독서.
필자는 직접 시도하지 않았지만 Linux From Scratch로 가서 자신 만의 Linux 배포판을 만들 수 있습니다. 쓸데없는 시간이 걸릴 것으로 보이지만 리눅스 커널과 각 부분이 어떻게 작동하는지에 대해 잘 알고있을 것입니다. 물론 여기 다른 팁을 따라이 학습을 보완 할 수 있습니다.
여기 BSD의 부족을 지적하면서, 나는 칩 거라고 생각에서 :
- The Design and Implementation of the FreeBSD Operating System (죽은 나무 책)
- Unix and BSD Courses (교육 과정 및 비디오)
- FreeBSD Architecture Handbook (온라인 책)
본인은 코스를 직접 택하지는 않았지만 마샬 커크 맥 쿠식 (Marshall Kirk McKusick)이 다른 경우에 말을하는 것을 들었습니다. 그는 그가하는 일에 정말 능숙합니다.
그리고 당연히 BSD 맨 페이지는 평범한 리눅스 맨 페이지보다 훨씬 우수한 수준으로 유지 관리되기 때문에 훌륭한 자료입니다. 예를 들어 uvm(9) 매뉴얼 페이지를 살펴보면 OpenBSD의 가상 메모리 인터페이스를 설명합니다.
아직 관련이 없지만 유닉스 역사 및 문화의 BSD 부분뿐만 아니라 많은 유쾌한 anectodes를 다시 소개 할 때 비디오 History of the Berkeley Software Distributions을 추천합니다.
Mike Stone의 조언을 듣고 Minix로 시작하십시오. 그것이 리누스가 한 일입니다! 교과서는 정말 잘 쓰여졌고, Tannenbaum은 다양한 기능이 실제 시스템에서 어떻게 구현되는지를 보여주는 훌륭한 일을합니다.
코드 위주의 BSD가 훨씬 더 깨끗하고 일관성이 있다고 언급 한 사람은 아무도 없습니다. 문서화의 방법도 (이미 언급 한 바와 같이) 더 좋습니다. 그러나 당신이 선택하는 어떤 시스템을 사용 하느냐에 관해서는 너무 많은 비웃음이 있기 때문에 - 나는 당신이 자주 사용하는 것을 고를 것입니다.
BSD 커널을 권장합니다! BSD 커널은 해커가 훨씬 적어 진화를 따르는 것이 더 쉽습니다. BSD와 리눅스 커널은 해커가 많지만, BSD가 명성을 낮추면 초보자를 걸러 낼 수 있다고 주장하는 사람들이 있습니다. 또한 소스가 하루에 100 번 업데이트되지 않을 때 디자인 결정을 내리는 것이 더 쉽습니다.
BSD 선택 중에서 가장 좋아하는 것은 NetBSD입니다. 그것은 당신이 당신의 데스크탑을 위해 원하는 pain-free 선택이 아닐지도 모르지만, 휴대성에 중점을두기 때문에 품질은 아주 좋습니다. 나는이 부분이 모든 말을 생각 :
일부 시스템 "이 작동하는 경우, 그것은 바로"의 철학을 갖고있는 것 같다.그 빛에 NetBSD의의 철학은 당신이 충분히 작동 된 경우
를, "맞지 않으면 작동하지 않습니다"당신이 NetBSD의 좋은 코딩을 배우기위한 아주 기쁨임을 알이라고 할 수있다. 전문적으로 리눅스에서 더 많은 기회를 찾으실 수 있습니다.
어느 쪽을 선택 하시든 메일 목록에 가입하고 토론을 따르십시오. 패치를 공부하고 마침내 버그 수정을 시도하십시오. 책에 관해서는 Diomidis Spinellis 기사 및 his book을 찾으십시오. 정확하게 커널 책은 아니지만 NetBSD 예제를 가지고 있으며 커다란 소프트웨어를 다루는데 많은 도움이됩니다.
Linux와 Minix는 재미 있습니다. 최신 마이크로 커널 운영 체제가 어떻게 생겼는지 알고 싶다면 QNX를 살펴보십시오. 전체 문서는 온라인에서 볼 수 있으며 매우 유용합니다. 예 : this 온라인 설명서.
- 1. 정보를 얻는 가장 좋은 방법은 xml입니까? sqlite?
- 2. 리눅스 또는 Windows 여부에 상관없이 OS 정보를 얻는 방법은 무엇입니까?
- 3. 리눅스 커널 모듈에서 정보를 표시하기 위해 PCB를 반복하는 방법은 무엇입니까?
- 4. 리눅스 커널 프로그래밍, 코딩 또는 읽기 학습을 시작하는 방법은 무엇입니까?
- 5. 리눅스 커널 모듈의 옵션 목록을 얻는 방법은 무엇입니까?
- 6. setscheduler()는 리눅스 커널
- 7. 리눅스 커널 모듈 권한
- 8. winhttp.h를 얻는 가장 좋은 방법은 무엇입니까?
- 9. 리눅스 커널 설정을 포함하는 적절한 방법은 무엇입니까?
- 10. 추가 정보를 위해 보안 정보를 저장하는 가장 좋은 방법은 무엇입니까?
- 11. 최소 안정 리눅스 커널
- 12. QPixmap의 해시를 얻는 가장 좋은 방법은 무엇입니까?
- 13. PHP에서 HashTable을 얻는 가장 좋은 방법은 무엇입니까?
- 14. 하위 문자열을 얻는 가장 좋은 방법은 무엇입니까?
- 15. 리소스 경로를 얻는 가장 좋은 방법은 무엇입니까
- 16. 리눅스 커널 스케쥴링
- 17. 리눅스 커널 개발을위한 배포판
- 18. modinfo()와 동등한 내부 커널?
- 19. 멀티 캐스팅 + 리눅스 커널
- 20. 리눅스 커널 설치
- 21. 리눅스 커널 뮤텍스
- 22. 초보자를위한 리눅스 커널 프로그래밍
- 23. 리눅스 커널 스레드 - 스케줄러
- 24. 회사 내부 직원의 데이터를 수집하는 가장 좋은 방법은 무엇입니까?
- 25. 커널 리눅스에서 곱셈을하는 방법은 무엇입니까?
- 26. 프로세스 정보를 얻는 방법은 무엇입니까?
- 27. oprofile에서 가장 유용한 출력을 얻는 가장 좋은 방법은 무엇입니까?
- 28. 리눅스 커널 모듈에서 시리얼 포트에 접근하기
- 29. 리눅스 가상 환경 커널 해킹
- 30. 리눅스 커널 개발
LFS는 배포판 작성에 대한 자세한 지식을 얻기 위해 고안되었으며 실제로 커널을 이해하는 데 도움이되지 않습니다. – Draemon