SMALL
이제부터는 가상화(virtualization)에 대한 이야기에서 병행성(concurrency)에 대한 이야기로 넘어올 것이다.
| Multi-Processing | Multi-Threading |
| - 여러 프로세스들이 프로세스에서 run (by 가상화) - 이전 상태는 PCB에 저장됨 |
- 여러 쓰레드들이 하나의 프로세스에서 run - address space를 공유하며, 스택만 달리 사용 - 이전 상태가 TCB에 저장됨 |

쓰레드의 생성

- pthread_create()
- pthread 생성시 함수에 전달할 인자는 포인터 변수 단 하나만 취급하므로, 여러 변수를 전달하려면 별도의 struct를 생성해서 전달해야 함
- 쓰레드의 스케줄링에는 우선순위가 없다!!
쓰레드의 종료

- pthread_join() : 메인 쓰레드가 자식 쓰레드를 wait
- pthread_exit() 또는 포인터 변수를 반환함으로써 쓰레드 종료
Race Condition
- 프로그램 실행의 결과가 코드 실행의 타이밍에 따라 달라지는 상태
- 다수의 쓰레드가 같은 코드를 실행한다면, race condition이 발생할 수 있다.
- 그리고 이러한 같은 코드 영역을 critical section이라고 한다.
- 쓰레드가 critical section을 동시에 실행하지 않게 하려면 쓰레드들은 mutually exclusive해야 한다.
Resolving Race Conditions
- 만약에 critical section의 코드가 shared data를 업데이트 하는 것이라면, 어셈블리 딴의 함수는
load-add-store의 세 단계이다. - 이 세 단계를 하나의 atomic instruction으로 묶으면 mutual exclusion이 된다.
- 또 다른 방식은 synchronization primitives를 사용하는 것이다. → Lock, Barriers
Mutual exclusion and Locks

- critical section이 lock으로 보호되면 그것을 해제하기 전까지는 다른 쓰레드가 lock을 얻는 것을 차단함
Mutual exclusion and Condition Variables

- 원하는 컨디션이 만족될 때까지 다른 쓰레드를 차단
- producer-consumer 같은 모델에서 유용
가이드라인
- Keep your code simple.
- Minimize thread interactions.
- Initialize locks and condition variables.
- Be careful when you pass arguments to or receive return values from threads.
- Each thread has its own stack.
'CS study > Operating System' 카테고리의 다른 글
| 8. 운영체제 Condition Variables (4) | 2021.09.22 |
|---|---|
| 7. 운영체제 Lock (0) | 2021.09.20 |
| 5. 운영체제 paging (0) | 2021.09.17 |
| 4. 운영체제 Virtual Memory (0) | 2021.09.15 |
| 3. 운영체제 Scheduling (0) | 2021.09.10 |
댓글