목차
- 동기식 입출력과 비동기식 입출력
- 프로세스 스케줄링 큐의 모습
- Thread
- Single and Multithreaded Processes
- Benefits of Threads
- Implemetation of Threads
동기식 입출력과 비동기식 입출력
동기식 입출력 : process가 i/o 요청을 한 후, i/o 작업이 끝날 때까지 놀고 있음.
비동기식 입출력 : process가 i/o 요청을 한 후, instruction을 실행하고 있음.
- 구현 방법1은 동기식 입출력으로 cpu 가지고 있으면서 노는 것.
- 구현 방법2는 동기식 입출력으로 놀거니까 cpu 다른 process한테 주는 것. (일반적임)
프로세스 스케줄링 큐의 모습
Threads
-
thread는 프로세스 내부의 cpu 수행단위가 여러개 있는 것.
-
process마다 주소공간(code, data, stack)이 만들어진다.
-
process 하나를 관리하기 위해서 운영체제 내부에 PCB를 두고 있다.
PCB
-
process state: 해당 프로세스 상태
-
process number: 프로세스 id
-
program counter: 메모리의 어디를 실행하고 있는가를 가리키고 있음
동일한 일을 하는 process가 여러개가 있다고 하면 별도의 주소공간이 여러개가 만들어진다. 같은 일을 하는 프로세스를 여러개 띄우고 싶다 그러면, 주소공간을 하나만 띄우고, 현재 각 프로세스마다 다른 부분의 코드를 실행할 수 있게 하면 된다 . => thread
- PC만 여러개를 둔다. 즉, process 하나에 cpu 수행단위만 여러개 두고 있는 것을 thread라고 부른다.
- instrunction 실행하려면 code의 어느 부분을 가리키고 있는지 PC, 그 CPU에서 실행되면서 메모리에 어떤 레지스터 값을 세팅
- thread 하나가 code 어느 부분을 실행하다가 함수 호출을 하면, return 하는 정보 같은 건 stack에 쌓아야 한다.
결론) thread라는 건 process 하나에서 공유할 수 있는건 최대한으로, 별도로 가지는 건 최소화하기 !
- 응답시간이 빠르다는 장점 : 하나의 스레드가 blocked일 때, 다른 스레드가 running
- 자원을 절약: 같은 일을 하는 process를 여러개 띄어놓게 되면 각각의 메모리에 올라가야 하기 때문에 메모리 낭비 심함. (웹 브라우저 여러개, 아래 한글 파일 여러개 띄운다고 했을 때 각각 서로 다른 process로 만들면 메모리 낭비 심함 ) 하나의 process안에 thread를 여러개 두게 되면 성능 향상, 자원절약 !
thread가 공유하는 것:code, data, files(여러 자원들)
thread각각 : cpu 관련 정보 (register set과 stack 정보)
Benefits of Threads
thread 장점 4가지
- 응답성 : 사용자 입장에서 빠름
- 자원 공유
- 성능이 좋음 : process 하나를 만드는건 overhead가 크다. thread하나 만드는 건 숟가락 하나 언지는 것. context switch가 일어날 때 하나의 프로세스에서 또다른 프로세스로 넘어가는 건 overhead가 상당히 크다. thread간 cpu switch가 일어나는 것은 대단히 간단함.
- 멀티 프로세서 환경에서 효율적(cpu가 여러개 있는 상황에서 얻을 수 있는 장점): 다른 cpu에서 병렬적으로 thread가 각각 실행
thread의 실행
- 운영체제의 지원을 받는 thread => kernel threads : thread가 여러개 있다는 사실을 운영체제 커널이 안다. 그래서 하나의 thread에서 다른 thread로 cpu가 넘어가는 것도 커널이 cpu 스케줄링을 하듯이 넘겨준다.
- 라이브러리의 지원을 받는 thread => user threads : process 안에 thread가 여러개 있다는 사실을 운영체제는 모른다. user program이 스스로 여러개의 thread를 관리한다.
- real time을 지원하는 thread가 생성될 수도 있음