반응형
그림과 같이 스레드가 구현되어 있다고 해보자.
(이 구현은 user level 스레드를 보여주고 있다. 런타임 시스템과 그 내부에 스레드 테이블이 있기 때문이다.)
이때 각각의 프로세스에게는 50ms 의 퀀텀이 주어졌고, 각 스레드는 CPU burst 마다 5ms의 시간이 소모된다고 해보자.
그러면 커널이 먼저 실행할 프로세스를 고르고, 그 다음에 런타임 시스템이 실행할 스레드를 골라서 굴리므로 프로세스 A의 스레드들이 A1 A2 A3 A1 A2 A3 이런식으로 돌아간다.
유저 레벨 스레드는 스레드 스위칭이 빠르므로, thread_yield 와 같은 프로시저를 사용하여 빠르게 스레드를 교체하며 돌리는 것이 가능하고, 성능도 좋다. (다만 라운드 로빈과 같이 정해진 퀀텀을 정해두고 돌리는 것은 힘들다.)
이때 스레드를 돌리는 것은 같은 프로세스 안에 있는 스레드에 대해서만 가능하다.
그 아래에서 보는 것처럼 A1 B1 A2 B2 와 같은 식으로 프로세스를 넘나드는 실행 순서 제어는 유저 레벨 스레드 구현에서는 할 수 없다.
이번엔 커널 레벨로 구현한 스레드를 보자.
커널 레벨 스레드에서는 커널이 직접 실행할 스레드를 선택하므로 하나의 프로세스 안에 있는 스레드만 골라 실행하는 것도 가능하고, 프로세스를 넘나들면서 스레드를 선택하여 실행하는 것도 가능하다.
이때는 지난 글에서 정리했듯 하나의 스레드가 I/O 등을 이유로 blocked 상태에 빠지더라도 프로세스 전체가 Blocked 되지는 않는다.
반응형
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 13. 스레드의 구현 방법 (0) | 2024.10.21 |
---|---|
[운영체제] 12. 스레드 (0) | 2024.10.21 |
[운영체제] 11. 스케줄링 (5) - Policy vs. Mechanism (0) | 2024.10.21 |
[운영체제] 10. 스케줄링 (4) - Real-Time System 스케줄링 (0) | 2024.10.21 |
[운영체제] 9. 스케줄링 (3) - Interactive System 스케줄링 (0) | 2024.10.20 |