= New Linux Kernel = -- 김도집 2005.10.19 [[TableOfContents]] == 개요 == 내가 잘 모르거나, 새롭게 적용된 것들을 어떤 분류 기준도 없이 임의대로 정리한 것이다. == AIO == Asynchronous I/O == NPTL == 리눅스 커널 2.6에서는 Native POSIX Thread Library를 지원하고 있다. 스레드의 생성 및 파괴에서 기존 스레드보다 4배정도의 성능 향상을 보여준다고 한다. 기존 리눅스 스레드가 프로세스에 1:1로 대응되는 방식으로 생성이 되어 스레드로서의 인정을 받아오지 못했다. NPTL은 native thread로서 스레드 다운 스레드가 만들어진 것이다. 자세한 것은 다음을 참조한다. * [wiki:김도집/NTPL NPTL] == kprobes == kprobes를 이용하여 커널 모드 내에서 디버깅이 가능하다. [http://www.linuxjournal.com Linux Journal]에 실린 [http://www.linuxjournal.com/node/7905/print Kernel Korner - Kprobes—a Kernel Debugger]를 참고하라. == inotify == dnotify를 대체는 하는 것으로 inode에 기반한 파일 시스템의 변경을 감지하는 시스템이다. 커널 2.6.13에 처음으로 적용되었다. 공식 홈페이지는 [http://www.kernel.org/pub/linux/kernel/people/rml/inotify/]이다. === 간단한 테스트 === 다음은 inotify가 적용된 커널로 부팅한 경우에 간단히 테스트하는 방법이다. 다음을 실행해 보자. {{{#!vim sh dmesg |grep '^inotify device minor' |awk -F= '{ print $2 }' }}} 쉘에서 위와 같이 실행하며 inotify 디바이스의 부번호를 확인할 수 있다. 이 디바이스 부번호를 이용하여 디바이스 노드를 생성한다. {{{#!vim sh mknod /dev/inotify c 10 [numbfer from awk] }}} 이후 간단한 PERL Program으로 테스트 할 수 있는데, 자세한 것은 다음 사이트를 참조하라. * [http://www.edoceo.com/creo/inotify/] == class_simple == 리눅스 커널 2.6.13 버전 및 그 후속 버전에서는 class_simple_ 로 시작하는 API가 없다. 대신 class_ 로 시작하는 것들로 대체 되었다. 관련 API는 [wiki:KernelApi3 KERNEL API 3 - Linux Driver Model]를 참고하라. == devfs == 리눅스 커널 2.6.14 이후부터 더이상 사용되지 않는다. 효율적인 디바이스 노드의 관리를 위하여 리눅스 커널 2.5 이후 사용되어 왔으나 커널 레벨과 사용자 레벨의 불분명한 관리 방식으로 인해 커널에서 제외되게 되었다. 대체 방식으로 udev가 개발 진행되고 있다. == remap_page_range == 리눅스 커널 2.6.10 이후 버전부터 더이상 사용되지 않는다. 그 이유는 인자 중 물리 주소를 넘겨 받는 인자가 32비트로 4GB 이상의 메모리를 매핑할 수 없다. 이 때문에 이 함수는 더이상 사용되지 않으며 '''remap_pfn_range'''로 대체되었다. 이 함수는 물리 주소를 32비트로 넘겨 받지 않고 대신에 PAGE_SHIFT만큼 비트 쉬트트한 값인 페이지 프레임 번호를 넘기도록 하고 있다. 이를 통해 4GB 이상의 메모리도 매핑할 수 있다.