2009-06-18 2 views
36

프로그래밍은 내 직업이 아니지만 나는 그것을 즐기고 때로는 돈을 받는다. 몇 년 동안 저는 지금 리눅스에 대해 들었습니다. 그리고 친구들은 제가 맥 오에스에도 불구하고 많은 nixes (또는 * nici?)를 보여주었습니다.재미있는 부분은 리눅스 커널의 어떤 부분을 읽을 수 있습니까?

내가보기에 즐겁게 볼 수있는 Linux 커널 부분이 있다고 생각합니까? 전체 내용이 무엇인지 이해하는 데 도움이됩니까? 예를 들어, Linux가 Darwin과 다른 점은 무엇입니까?

저는 어셈블러와 DOS로 성장해 왔습니다. 따라서 인터럽트 나 하위 레벨 C와 같은 것들은 이해의 장벽이되어서는 안됩니다. 그러나 결국에는 스레딩이나 네트워킹 스택과 같은 상위 개념에 더 관심이 있습니다. 다른 운영 체제가 다르게 수행한다는 것을 알고 있습니다. 그리고 나는 재미 있고 쉽고 재미있는 것을, 늦은 밤 독서와 같이 찾고 있습니다.

(참고 : 방금 경우, CW를 만든)

업데이트 : 일부 문서를 찾았다 및 읽기 시작 :

+3

BSD의 * (운영 체제에 대한 코드를 읽고 더 나을으로하는, 같은 리눅스, Unix 기반) *. Mac OSX는 BSD를 기반으로하기 때문에 OSX 커널의 상당 부분을 읽을 것입니다! –

+1

또한 Rusty의 Unreliable Guide to Kernel Hacking을 참조하십시오. 재미있는 부분을 찾으려면 커널에있는 재미있는 주석에 대한 좋은 섹션이 있습니다. OP에서 – ninjalj

답변

30

나는 LXR을 볼 것을 권장합니다. 코드의 흐름을 더 쉽게 따라 할 수 있습니다 (—라고하는 각 기능을 검색 할 필요는 없습니다. 그렇지만 사이트가 대신 사용합니다). 현재 버전 (2.6.30)에 대한

일부 시작 포인트 : main()의 커널 동등하게 그것의

  • start_kernel() — 생각합니다. 이 함수는 거의 모든 커널 하위 시스템을 초기화합니다. 코드를 따라 부팅하는 동안 화면에서 스크롤하는 내용을 코드에서 확인하십시오.
  • entry_32.S — 시스템 호출과 인터럽트 (여러분이 아는 것이 더 가까운 x86-32 버전, 익숙한 인텔 언어 대신 AT & T 어셈블리 언어 사용)에 유의하십시오.
  • head_32.S — 커널 진입 점. 보호 모드로 전환 한 후 커널이 시작됩니다. 결국 start_kernel()으로 전화 할 것입니다.
  • arch/x86/boot — 리얼 모드 부트 스트랩 코드. 어셈블리에서 시작하지만 (boot/header.S) C 코드로 빠르게 건너 뜁니다 (boot/main.c에서 시작). 리얼 모드 초기화 (주로 보호 모드로 전환하기 전에 수행해야하는 BIOS 호출); 그것은 이상한 GCC 트릭 (.code16gcc)을 사용하여 컴파일되어 32 비트 리얼 모드 코드를 생성 할 수 있습니다.
  • arch/x86/boot/compressed — "Decompressing Linux ..."메시지의 출처가 궁금한 분은 여기를 클릭하십시오.
+0

당신이 가지고있는 LXR URL이 바뀌 었다고 생각합니다. -> http://lxr.free-electrons.com/source/kernel/ –

11

나 자신을, 난 항상 발견했습니다 작업 스케줄링 코드 약간의 멍청이 : -/

당신은 업계 밖 취미 생활을해야합니다. 아니면 인생 :-)

+3

+1. 당신 말이 맞아요 :) –

8

커널의 주석은 상당히 재미있을 수 있습니다. 커널 트랩에 tips on where to find the best ones이 있습니다.

arch/sparc/lib/checksum.S-/* Sun, 당신은 단지 나를 이길 수는 없지만 그냥 할 수는 없습니다. 시도를 멈추십시오, arch/sparc/lib/checksum.S : * 포기하십시오. 난 심각, 내가 살아있는 똥을 걷어차려고하고있어 아치/SPARC/lib 디렉토리/checksum.S- * 당신의에서, 게임을 통해, 소등. */

+1

나는 이것도 제안 할 것입니다! –

1

당신은 아마 더 나갈 것 OS 이론에 관한 책을 읽는 것. 지금까지 소스 코드가 간다 : 나는 전혀 모른다. 그러나 당신은 쉽게 Linux kernel source을 다운로드 할 수 있었고, 호소력있는 것을 찾을 수 있는지 보았다.

+0

저처럼 영어를 좋아하지 않습니다 ... C : –

+0

아, 그러면 팍스 말이 맞아요 - 당신은 인생이 필요합니다 :-) –

3

Linux 커널을 자세히 살펴보기 전에 Linux 커널을 설명하는 책을 읽거나 빼 먹는 것이 좋습니다. 마음에 와서

책은 다음과 같습니다

+0

(1) 더 짧고 (2) 인터넷에서 무엇을 추천 하시겠습니까? –

+0

두 번째 책 ("The Unix Operating System의 디자인")은 훌륭하지만 리눅스에 관해서는 알려주지 않습니다. 20 년 전에 쓰여졌습니다. 리눅스를 만들기 훨씬 전이었습니다. 그것이 여러분에게주는 것은 유닉스 커널에 대한 훌륭한 견해이며, 코드에 뛰어 들지 않고 다양한 모듈과 알고리즘을 설명합니다. 구식이지만, 간단한 커널 버전을 설명하기 때문에 여러 주요 개념에 대해 더 쉽게 배울 수 있습니다. –

1

이것은 몇 가지 흥미로운 코드를 설정해야 src 디렉토리에 실행하면

grep -ir "fixme" * 

다른 우스꽝스러운 용어로 시도해 봐, 쓰레기, 젠장, f ***, 펭귄 등

1

당신의 맥락에서 '재미'라는 단어를 다시 정의해야합니다. :)

즉, 리눅스 커널은 너무 많은 괴물 일 수 있습니다. 우선 학문적 인 또는 원시적 인 커널로 시작하여 무엇이 진행되고 있는지 파악할 수 있습니다.Jolix 도서를 고려해 볼 수도 있습니다.

1

상당수의 사람들이 리눅스 v0.0.1을 가장 쉽게 이해할 것을 권장합니다.

좋은 커널 소스를 읽고 싶다면 Linux와 함께 가지 않겠지 만 해킹 야수 (GCC 소스가 "재미"라고 말하는 것과 같은) 대신 Minix를 사용해 볼 수 있습니다. 또는 BSD 중 하나 (기본적으로 다윈은 NetBSD iirc의 한 지점입니다) 또는 다른 모든 것이 약간 무서운 경우 많은 무료 DOS 클론 중 하나입니다 ..

0

재미있게도 Minix를 볼 수 있습니다. 정확하게 Linux가 아니지만 tenenbaum의 Modern Operating Systems은 좋은 읽을 거리입니다.

1

이 문자 장치를 구현하는 코드를 읽어보십시오 : 는/dev/제로 을/dev/null 는/dev/

어쩌면 난수 발생기 당신이 경 사진 경우

전체를. 이 코드는 하드웨어를 건드리지 않으므로 다른 모든 장치 드라이버보다 간단하고 간단합니다.

drivers/char/mem에서 시작하십시오.*

6

linux-0.01.tar.gz이 시작
에 대한 역사적인 커널과 좋은 그것은 간단하고 작고
읽기 시작 더 좋다 (웃음) (대신 start_kernel의) 또한 무효 메인 (무효를 가지고 : D)

1

kernel.h

우리가 배울 수있는 몇 가지 간단한 트릭 같은 아마

#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0])) 
... 
#define min(x, y) ... 
... 
#define container_of