커널 레벨 thread vs 유저 레벨 thread

Run·2021년 10월 4일
0

OS는 멀티 프로세스를 지원하는 프로세스와 지원하지 않는 OS로 나뉨
또한 쓰레드 모델을 지원하는 OS vs 지원 안 하는 OS

커널 레벨 쓰레드

  • 커널의 스케줄러가 쓰레드들을 직접 관리
  • 쓰레드에 대한 정보를 커널에서 알고 있음
    그래서

유저 레벨 쓰레드
쓰레드를 라이브러리 형태로 가져와 사용한다.
커널에서는 유저레벨에 있는 프로세스들에 쓰레드들이 있는지 알 수가 없다.
커널에서는 프로세스만 관리한다.

커널이 만들어서 API 형태로 지원하면 커널 레벨 쓰레드가 된다.

위 그림에서 보면
커널 영역의 스케줄러가 쓰레드들의 정보를 갖고 있으면 각 쓰레드에 시간을 할당해준다.
하지만 스케줄러가 쓰레드가 아니라 프로세스의 정보만 갖고 있다면 스케줄러는 프로세스별로 시간을 할당해주고
프로세스 내부에서 각 쓰레드에 대한 시간을 따로 할당해준다.

만약에 쓰레드 A가 i/o상태에 빠져 자기의 실행을 포기하고 다음 우선순위인 쓰레드 B를 실행시키려 할 때 스케줄러가 쓰레드들의 정보를 갖고 있으면 그 실행의 우선순위를 쓰레드B에게 넘겨줄 것이다.
하지만 스케줄러가 쓰레드들의 정보가 없으면 스케줄러는 쓰레드A와 같은 프로세스에 있는 쓰레드B가 아닌 다른 프로세스에 있는 쓰레드에게 우선순위를 넘겨주게 된다. 왜냐? 스케줄러는 쓰레드들의 존재자체를 모르기 때문

profile
정글에서 살아남기

0개의 댓글