claire 2022. 2. 7. 15:00

동기식 입출력은 입출력 요청을 한 프로세스가 입출력이 끝날 때까지 아무 일도 안 하고 기다린다. 

비동기식 입출력은 사용자 프로세스가 입출력 요청을 하고 입출력이 진행되는 동안에 cpu를 곧바로 잡아서 무엇인가 instruction을 수행하는 것을 말한다. 두 개의 차이는 프로세스가 입출력이 진행되는 동안에 instruction을 실행하느냐 안 하느냐의 차이이다. 

 

스레드는 프로세스 내부에 cpu 실행 단위가 여러개  있는 경우에 그것을 말한다. 

프로세스 하나에 cpu 수행 단위만 여러개 두는 것을 스레드라고 한다. 프로세스 하나에서 공유할 수 있는 것은 최대한 공유한다. program counter, register, stack은 별도로 갖는다. 

스레드가 동료 스레드와 공유하는 부분(task라고 부른다. task는 한 개. ) - code section, data section, os resources. 

프로세스 안에 스레드를 여러개 두는 것이 가볍다. 따라서 thread를 lightweight process라고 한다. 

 

스레드를 사용하면 장점

- 다중 스레드로 구성된 태스크 구조에서는 하나의 서버 스레드가 blocked(waiting) 상태인 동안에도 동일한 태스크 내의 다른 스레드가 실행(running)되어 빠른 처리를 할 수 있다. 또 다른 스레드가 별도의 작업을 하게 되면 사용자에게 빠른 응답성을 제공할 수 있다. 

- 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율(throughput)과 성능 향상을 얻을 수 있다. 

- cpu가 여러개 달린 컴퓨터에서는 병렬성을 높일 수 있다. 

 

PCB가 프로세스당 하나 만들어진다. 이 중 cpu수행과 관련된 program counter와 registers만 스레드 별로 가지고 있게 된다. 

주소 공간에서는 data와 code는 공유하고 stack 부분만 스레드 별로 가지게 된다. 

 

스레드 사용 장점 정리 

- 응답성. 사용자 입장에서 빠르다. 

- 자원 공유. 

- 경제성. 프로세스 안에 스레드 추가하는 것은 overhead가 작다. 하지만 context switch가 일어나 나는 것은 (하나의 프로세스로부터 다른 프로세스로 cpu가 넘어가는 것) overhead가 크다. 스레드 간 cpu switch는 간단하다. 

스레드 하나 생성하는 것이 프로세스를 생성하는 것보다 오버헤드가 작다. 

- cpu가 여러개 있을 때. 프로세스는 하나지만 스레드가 여러 개이면 서로 다른 cpu에서 각각의 스레드가 실행된다. multi prcessor 환경에서 효율 적안 실행 가능. 

 

 커널 스레드는 스레드가 여러 개 있다는 사실을 운영체제 커널이 알고 있다. 

use trhread는 스레드가 여러 개 있다는 사실을 운영체제 커널이 모른다. 사용자 수준에서 스레드 구현