Operating System Concepts 4장 Threads & Concurrency

[운영체제 정리] · 2024. 12. 17. 17:23

Thread

  • 쓰레드는 공유자원을 가지고 있고 각각의 자원도 가지고 있다.
  • 공유자원은 code, data, files ex) 전역변수
  • 각각의 pc값과 stack(지역변수)공간을 가지고 있다.
  • 쓰레드가 뭐냐 => 프로세스 안에 있는 독립된 실행단위

 

main에서 4개의 쓰레드를 실행키면 총 흐름의 개수는 => 5개이다. main까지 포함해서

 

자바에서 Thread 만들기 

Myth extends Thread{

run(){

blabla();

}

}

 

t1 = new Myth();

t1.start(); => 여기서 Myth의 run시작하고 쓰레드가 언제 끝나냐 run이 끝나면 끝난다.

t2 = new Myth();

t2.start();

t1.join(); 쓰레드가 끝날때까지 기다리겠다. (시스템 콜의 wait랑 똑같은 메소드)

t2.join();

 

Thread : LWP(Lightweight Process) - 경량 프로세스

  • 자원을 조금 쓴다.
  • 생성시간이 짧다
  • communication이 쉽다 (한 프로세스의 전역변수는 여러 쓰레드에서 접근이 가능하다)
  • IPC(Inter Process Communication)

 

4.4 Thread Libraries

  • 쓰레드 라이브러리를 제공하는 두가지 방법
  • 커널 지원 없이 user 모드에서 로컬 함수 호출
  • 커널 수준의 라이브러리, 커널에 대한 시스템 호출 

 

윈도우 : 자기꺼 쓰레드 라이브러리 쓴다.

자바 : 윈도우 API를 사용하여 자기껄 구현한다.

유닉스, 리눅스 맥os : Pthreads를 사용한다.

POSIX(Protable OS Interface for Unity)

 

4.4.1 Pthreads

  • Pthreads
  • Window도 third - party로 구현해서 pthread를 사용가능하다.

 

쓰레드를 사용자 수준과 커널 수준 중에서 뭐가 더 빠를까?

=> 사용자수준에 해도 커널로 접근해야되기 때문에 커널이 더 빠르다.

 

자바 쓰레드는 나중에~

 

4.5.1 Thread Pool

 

장점 3가지

  • 고객 요청이 들어왔을 때 새로 만드는거 보다 미리 만들어 두고 배정하는게 더 빠르다.

 

  • 스레드 풀은 특정 시점에 존재하는 스레드의 수를 제한한다.

ex) 만약 200개로 제한해놨는데 프로세스가 200개 이상이면 대기열이 걸린다.

 

  • 수행할 작업을 생성하는 메커니즘에서 작업을 분리하면 작업을 실행하기 위한 다양한 전략을 사용할 수 있습니다. 작업을 일정 시간 지연 후에 실행하도록 예약하거나 주기적으로 실행하도록 할 수 있습니다.

 

 

쓰레드를 몇개 만드는게 최적이냐? heuristically(경험적으로) 기반을 둔 요소를 고려한다. 데이터에 의해 가변적으로 적용할 수도 있다.

 

4.5.3 p.183

openMP는 C,C++, FORTRAN 등에서 쓰레드를 최적화 해서 자동생성할 수 있게 도와준다.

 

#pragma omp parallel for => 병렬처리 해달라는 지시어(directive)

 

 

4.5.4

 

Grand Central Dispatch(GCD) 애플에서 개발한 병렬처리 라이브러리

 

 

4.7.2

리눅스에서 clone()이라는 시스템콜을 추가 했다.

기본적인 동작 원리는 같다.

1.fork() : 부모와 자식의 공유하는 부분이 없다.

2.clone() : 공유부분을 지정할 수 있다.

그러나, 리눅스는 process와 thread를 Task라는 이름으로 크게 차이두지는 않는다. => 독립된 실행단위라는 점에서 차이가 없다.