core.ewha.ac.kr/publicview/C0101020140321141759959993?vmode=f

 

반효경 [운영체제] 6. Process2

설명이 없습니다.

core.ewha.ac.kr

 

 

 

thread 에 대해서 공부하자.

 

 

 

 

threadprocess 내부에 cpu 수행 단위

 

process 내부에서 똑같은 code 를 가지고 동시에 여러 작업을 하기 위해,

thread 개수에 맞춰 pc(program counter) 를 여러개 둠.

pcb 에서 pc 와 해당 pc 위치에서 실행되는 코드에서 사용하는 레지스터가 여러개 생기겠지.

다음 이미지와 같이.

https://youtu.be/QmtYKZC0lMU

예를 들어본다.

process 가 실행하는 똑같은 코드에 대해 동시에 여러 작업을 수행하기위해

실행 단위를 thread 로 분리함.

 

thread 1은 pc 3000 위치에 있는 코드를 실행함.

3000 위치의 코드를 실행할 때 사용하는 값들을 레지스터에 담아두고 사용.

thread 2는 pc 300000 위치에 있는 코드를 실행함.

300000 위치의 코드를 실행할 때 사용하는 값들을 레지스터에 담아두고 사용.

thread 3은 pc 4000 위치에 있는 코드를 실행함.

4000 위치의 코드를 실행할 때 사용하는 값들을 레지스터에 담아두고 사용.

 

pcb 는 thread 를 갖는 이 process 의 context 를 저장해야 함

완벽히 저장하기 위해 (나중에 context switching 이 일어나도 복구가 잘 되도록)

thread 에서 사용하는 pc, 그리고 각 레지스터 값들 역시 여러개 저장함.

 

thread 가 함수를 호출하면 stack 영역에 쌓이게 될텐데

이것 역시 thread 마다 각자의 stack 영역이 (process 메모리 주소 공간에 생성)생성되어

각자의 stack 을 쌓을 수 있게 됨.

 

thread 라는 것은 process 내부에서

공유할 수 있는 건 최대한 공유하고(메모리 주소 공간, process 상태, process 의 자원, code, data 등)

각자가 cpu 수행을 하기 위해 갖고있는 정보들은 따로 갖고 있음

(pc, 레지스터, stack 등)

 

결과적으로 thread (독립적으로) 각자가 갖고 있는 값은 pc, 레지스터, stack 공간

thread 들이 공유하는 부분은 그 외 code section, data section, os 자원임.

 

 

 

 

thread 를 사용하는 이유

 

- (multi processor cpu 에서)병렬성을 높임

   cpu 의 여러 core 들을 thread들이 하나씩 선점하여 동시에 처리함으로써

   병렬성이 높아지고 처리량이 올라감. 

- 동일한 일을 수행하는 multi thread 가 협력 처리하여 높은 처리율과 성능 향상을 얻음

- 응답성이 빠름

   하나의 thread 가 blocked(waiting) 상태인 동안에 다른 thread 가 실행되어 처리를 빠르게 할 수 있음.

   예를 들어, 웹브라우저라는 하나의 process 가 2개의 thread 를 실행하는 상황에서

   1번 thread 가 어떤 사이트의 가벼운 텍스트와 무거운 이미지를 읽어오는데(io) 오래 걸린다고 하자.

   텍스트는 가볍기 때문에 빨리 읽어오지만 이미지는 무거워서 빨리 로딩하지 못해 사용자 입장에서는

   이미지가 모두 로딩될 때 까지 빈 화면만 보고 있어야 한다. 

   이 때 2번 thread는 1번 thread 가 받아온 텍스트를 미리 사용자에게 보여주는 식으로

   작동한다면 사용자는 적어도 텍스트는 볼 수 있게 된다. 답답함이 덜 하다고 ㅎㅎ

- 자원 공유를 통해 자원을 아낌

   별도의 process 를 만들지 않아도 되어 메모리를 아낌.

   만약 thread 대신 process 를 하나 더 만든다면, 별도의 메모리 주소 공간이 낭비 될 것임.

   thread 를 둠으로써 code, data, 그리고 메모리 등의 자원을 공유함. 경제적임.

- process 를 운용하는 비용보다 thread 운용 비용이 더 저렴함

   process 는 생성하거나 context switching 을 하는 비용이 비쌈

   하지만 thread 는 생성하는 비용도 저렴하고 thread context switching 비용도 저렴

   (코어가 하나일 때 thread context switching 이 일어나겠지)

   왜냐면 thread 들끼리 공유하는 부분이 있어서 context 를 백업하고 복구하는 정보량이 적기 때문

 

 

 

 

위 이미지는 pcb 내에서 thread 관련 정보를 저장하는 부분이 pc 와 레지스터 라는 것을 알려줌.

 

 

 

thread 종류가 세 가지 있음

- kernel threads : os(kernel) 에서 해당 process 에 thread 들이 존재한다는 사실을 알고 있음.

   그래서 쓰레드 스케줄링을 os 에서 해줄 수 있다고 함.

- user threads : os(kernel) 에서 해당 process 에 thread 들이 존재하는지 모름.

   os 입장에선 그냥 하나의 process 처럼 보임.

   process 내부에서 lib 를 통해 여러 threads 를 관리함.

- real time threads : ...real time 을 지원하는 thread? 설명을 안 하시고 넘어가심.

 

 

이 thread 들이 어떻게 생성되는지는 설명이 없음 -_-;

+ Recent posts