1. 동기식 입출력 VS 비동기식 입출력
- 동기식 입출력
: I/O 요청에 따른 입출력을 OS가 직접 해주어야 하는데, 이 때 프로세스가 그 시간을 기다려 주는 것- 구현방법
- I/O가 끝날 때 까지 CPU를 낭비시킴
- 매시점 하나의 I/O만 일어날 수 있음
- 구현방법2
- I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음
- I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움
- 다른 프로그램에게 CPU를 줌
- 구현방법
- 비동기식 입출력(Asynchronous)
: I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감. 즉 원래 CPU를 받아서 사용하던 그 프로그램이 계속 다른일을 함
2. 쓰레드(Thread)
: Thread는 CPU의 수행단위이다. 전통적인 개념의 heavyweight process는 하나의 thread를 가지고 있는 task로 볼 수 있다.
- Thread의 구성
- program counter
: 스레드가 현재 실행중인 명령어의 메모리 주소를 저장하는 레지스터이다. 각 스레드는 자신만의 PC를 가진다 - register set
: 레지스터 세트는 데이터의 조작 및 처리를 위해 사용된다. 이 레지스터 세트를 이용해 각각 독립 수행이 가능하다. - stack space
: 스택 공간에서는 수행단위로서 존재하는 쓰레드가 함수 호출, 지역 변수 및 임시 데이터 저장등을 위해 사용하는 공간이다.
- program counter
- Thread가 서로 공유하는 부분(=Task)
- code section
- data section
- OS resources
- 프로세스는 Code, Data, Stack 으로 이루어진 주소공간이 생기고, 이를 관리하기위한 PCB이 생긴다
- 주소공간에서 Stack부분은 쓰레드의 갯수만큼 각각의 Stack을 가진다
1)쓰레드의 장점
- 응답성 : 빠르다. 스레드가 여러개이면 먼저 처리가 끝난 결과를 받아볼 수 있게 된다. 이미지를읽어오는동안 프로세스를 블럭시키는게 아니라, 텍스트를 보여주도록 비동기식 으로 동작하게 된다.
- 자원 공유 : 똑같은 일을 하는 CPU수행 단위만 늘렸을 땐, PC, Register, stack을 제외하고는 공유(Task)하기 때문에 자원 낭비가 떨어진다
- 경제성 : 좀 더 빠르다? 프로세스를 만든다 → 오버헤드가 크다 but 쓰레드를 늘린다 → 오버헤드가 그렇게 크지는 않다.
+문맥교환이 일어나는것은 오버헤드가 크지만 CPU내 스레드만 변경하는것은 오버헤드가 그렇게 크지 않다. - CPU가 여러개 일때, 스레드별로 CPU를 할당받아서 작업이 가능해진다. : 각각의 스레드가 각각의 서로 다른 CPU에서 병렬적으로 일을 하게 되면, 빠른 연산이 가능해진다
2) 쓰레드의 구현
- 커널 쓰레드 : 쓰레드가 여러개 있다는 사실을 운영체제 커널 쓰레드가 알고 있다. 한개의 쓰레드에서 다른 한개의 쓰레드로 CPU가 넘어가는 것도 커널이 CPU 스케쥴링처럼 넘겨주는 것
Ex) Window 95,98, Solaris, Digital UNIX - 라이브러리 쓰레드 : 프로세스 안에 여러개의 쓰레드가 있다는 것을 커널은 모르고 유저레벨 쓰레드가 알아서 관리하는 것이다. 커널이 봤을 땐 일반적인 프로세스처럼 보이지만, 실제로는 쓰레드가 나뉘어져 있다.
Ex) POSIX Pthreads, Mach C-Threads, Solaris threads
'OS' 카테고리의 다른 글
#2. Process (0) | 2023.04.13 |
---|---|
#1.2 System structure & Program execution (0) | 2023.04.11 |
#1. System structure & Program executio (0) | 2023.03.29 |
#0. Introduction to Operating Systems (0) | 2023.03.27 |