달력

2

« 2025/2 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
2011. 10. 11. 23:36

커널 스레드 OS이야기2011. 10. 11. 23:36

커널은 종종 백그라운드로 작업을 수행하는 것이 유용할 때가 있다.
커널은 이러한 작업을 위해 커널 스레드를 사용하는데, 커널 스레드는 오직 커널 공간에서만 존재하는 표준 프로세스를 말한다. 

커널스레드와 일반 프로세스의 중요한 차이점은 커널 스레드는 주소 공간을 갖지 않는다는 것이다.(mm 포인터가 NULL이다)
커널 스레드는 커널 공간에서만 동작하며 따라서 유저 공간으로의 전환이 일어나지 않는다. 하지만, 다른 일반 프로세스와 마찬가지로 스케줄링되며 선점 가능하다.

리눅스는 몇몇 태스크를 커널 스레드에게 대행을 시키는데, 대표적인 예로 pdflush와 ksoftirqd 태스크가 있다. 이 스레드들은 다른 커널 스레드들과 마찬가지로 시스템이 부트될 때 생성된다. 

또한, 커널 스레드는 다른 커널 스레드에 의해서만 생성될 수 있다. 새 커널 스레드를 생성하기 위한 인터페이스는 다음과 같다.

** int kernel_thread( int (*fn)(void *), void * arg, unsigned long flags) **
새 태스크는 특정한 flags 인수를 포함한 clone() 시스템 콜을 이용하여 생성된다. 여기서 자식 커널 스레드의 task_struct 포인터가 반환된다. 

'OS이야기' 카테고리의 다른 글

타임슬라이스 재계산  (0) 2011.10.13
프로세스 종료  (0) 2011.10.11
리눅스의 스레드 구현  (0) 2011.10.11
프로세스 생성  (0) 2011.10.11
container_of 매크로  (1) 2011.10.11
:
Posted by НooпeУ


Code Start Code End