OS는 멀티 프로세스를 지원하는 프로세스와 지원하지 않는 OS로 나뉨
또한 쓰레드 모델을 지원하는 OS vs 지원 안 하는 OS
커널 레벨 쓰레드
- 커널의 스케줄러가 쓰레드들을 직접 관리
- 쓰레드에 대한 정보를 커널에서 알고 있음
그래서
유저 레벨 쓰레드
쓰레드를 라이브러리 형태로 가져와 사용한다.
커널에서는 유저레벨에 있는 프로세스들에 쓰레드들이 있는지 알 수가 없다.
커널에서는 프로세스만 관리한다.
커널이 만들어서 API 형태로 지원하면 커널 레벨 쓰레드가 된다.
위 그림에서 보면
커널 영역의 스케줄러가 쓰레드들의 정보를 갖고 있으면 각 쓰레드에 시간을 할당해준다.
하지만 스케줄러가 쓰레드가 아니라 프로세스의 정보만 갖고 있다면 스케줄러는 프로세스별로 시간을 할당해주고
프로세스 내부에서 각 쓰레드에 대한 시간을 따로 할당해준다.
만약에 쓰레드 A가 i/o상태에 빠져 자기의 실행을 포기하고 다음 우선순위인 쓰레드 B를 실행시키려 할 때 스케줄러가 쓰레드들의 정보를 갖고 있으면 그 실행의 우선순위를 쓰레드B에게 넘겨줄 것이다.
하지만 스케줄러가 쓰레드들의 정보가 없으면 스케줄러는 쓰레드A와 같은 프로세스에 있는 쓰레드B가 아닌 다른 프로세스에 있는 쓰레드에게 우선순위를 넘겨주게 된다. 왜냐? 스케줄러는 쓰레드들의 존재자체를 모르기 때문