2012년 1월 10일 화요일

Linux Kernel

Linux Article:


Summary:

  • 비선점형은 프로세서가 사용자 모드에서만 스케줄링하는 것이다. 선점형 커널이 될려면 프로세스가 커널 모드에 있더라도 필요한 경우 곧바로 프로세스가 선점되어 스케줄링이 될 수 있어야 한다.
  • 리눅스커널에 비선점형 구간이 있는데, 프로세스가 시스템 콜에 의해서 또는 인터럽트 예외가 발생하여 커널 모드에 진입한 경우, 프로세스가 자발적으로 CPU를 반납하거나 커널 모드에서 빠져 나오지 않는 이상, 커널 모드에 있는 동안은 프로세스가 선점되지 않는다는 것이다. 예를 들어 프로세스가 호출한 디바이스 드라이버의 함수가 무한루프에 빠진다면 더 이상 스케줄러가 동작할 수 없어 시스템의 동작이 멈추게 된다.
  • Linux kernel은 예부터 non-preemptible(비선점형)으로 설계되고 구현되었었으나, 동시성의 문제 해결을 위해, Kernel 2.6에서부터는 preemptible(선점형)으로 바뀌고 있다.
  • 커널 코드를 선점형으로 만들려면 커널 코드가 재진입 가능하게 되고 재진입 가능한 코드에서는 자료구조를 접근하고 수정하는 코드를 모두 임계 구역(critical region)으로 보호해야 한다. 다행히도 리눅스는 SMP 환경을 지원하기 시작한 후 커널 2.2, 2.4를 거쳐오면서 수많은 락(lock)을 도입하여 임계 구역을 보호해왔다. 커널이 비선점형이라고 하더라도 SMP 환경에서는 동시에 커널 코드를 실행할 수 있기 때문이다.


댓글 없음:

댓글 쓰기