본문 바로가기
CS study/Operating System

6. 운영체제 Threads

by 규나 2021. 9. 18.
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 같은 모델에서 유용

 

가이드라인

  1. Keep your code simple.
  2. Minimize thread interactions.
  3. Initialize locks and condition variables.
  4. Be careful when you pass arguments to or receive return values from threads.
  5. 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

댓글