[운영체제] O/S chapter4 정리
Updated:
chapter 4
시험 대비 겸 퀴즈 대비 챕터 정리를 해보도록 하겠다. chapter 4는 쓰레드에 관해 배운다.
- 멀티 쓰레딩을 지원하는 프로세스 모델
쓰레드는 프로세스 안에서 여러개가 있을 수 있다. 사진을 넣어도 되지만 귀찮아 말로 설명하겠다.
일단 전체적으로 프로세스 이미지를 생각해보자.
프로세스는 Process Control Block, Program code, Data, Stack으로 이루어져 있다.
우선 O/S Execution within process 기준을 설명하겠다.
여기서 쓰레드가 생기는데 쓰레드는 Thread Control Block, User Stack, Kernel Stack 으로 이루어져 있다.
T.C.B. 가 가지고 있는 정보로는 Processor State Information, Thread ID, P.C.I 중 실행에 관련 된 정보를 가지고 있다.
- 멀티 쓰레딩이 지원되는 시스템의 장점
- 같은 갯수의 프로세스를 만드는 시간보다 쓰레드를 만드는 시간이 훨씬 짧다.
- 프로세스 종료 시간보다 쓰레드 종료 시간이 짧다.
- 프로세스 스위칭 보다 쓰레드 스위칭 시간이 더 짧다.
- O/S 없이 쓰레드간 통신이 가능하다.
- 멀티 쓰레드를 구현 하는 방법 세가지
- User-Level Thread : Kernel이 멀티 쓰레드를 지원하지 않아 유저 라이브러리를 이용해 멀티 쓰레드를 구현하는 방식, Kernel은 쓰레드의 존재를 모른다.
- Kernel-Level Thread : Kernel이 멀티 쓰레드를 지원 해 Kernel에서 멀티 쓰레드를 구현하는 방식
- Combined Approach : 쓰레드 생성은 사용자 공간에서 이루어지고 Lightweight process를 통해 적절한 갯수의 쓰레드로 매핑 된 후 Kernel에 있는 쓰레드와 매핑한다.
- Kernel-Level Thread 의 장점과 단점
장점
- 프로세스의 여러 부분을 동시에 실행 한다.
- A 쓰레드가 멈춰도 B 쓰레드가 실행 되어 프로세스는 계속 실행된다.
- O/S 프로그램 자체를 멀티 쓰레드로 작성 할 수 있다.
단점
- User-Level Thread 와 달리 Kernel 에서 쓰레드가 스위칭 된다.
- Window Thread 의 State
- Running : 쓰레드가 실행 중인 상태
- Terminated : 종료 상태
- Waiting : 쓰레드가 I/O 작업 등으로 인해 Blocked 되어있는 상태, 여러 쓰레드 중 한 개만 Blocked 이기 때문에 스왑되지 않는다.
- Transition : 쓰레드의 Blocked 상태가 풀렸지만 프로세스가 HDD에 있는 상태
- Ready : 쓰레드가 실행 될 준비가 되어있는 상태
- Standby : Ready 상태인 쓰레드 중 우선순위가 가장 높은 쓰레드
- Solaris 시스템에서 사용되는 쓰레드
- User-Level Thread : 프로그래머가 필요로 인해 만든 쓰레드
- Lightweight Process : 프로그래머가 만든 쓰레드를 적당한 개수로 줄여 매핑한 쓰레드
- Kernel-Level Thread : Lightweight Process와 매핑한 Kernel 부분의 쓰레드
- Linux 에서 멀티 쓰레드를 지원하는 방식
리눅스에서는 프로세스와 쓰레드 개념 대신 둘을 합친 Task를 사용한다.
그래서 이 Task 들은 clone 명령을 통해 P.C.B, Program code, Data 는 서로 공유하면서 T.C.B, User Stack은 따로 가진다.
- Linux Process/Thread State
리눅스에서의 Process/Thread state 는 다른 system의 state와 다르지 않다.
Uninterruptible, Interruptible 만 기억하고 있으면 된다.
Uninterruptible : Blocked 상태이지만 이벤트가 끝날 때 까지 어떤 시그널이 와도 대기한다.
Interruptible : 이벤트가 없었어도 시그널이 오면 깨어난다.
Leave a comment