1. Thread란?
- Thread(쓰레드)란 프로그램 내부의 흐름, 맥 과 같음
- 일반적으로 하나의 프로그램은 하나의 쓰레드가 있음
2. Multi Thread (다중 쓰레드)
- 하나의 프로그램에 2개 이상의 맥이 있는 경우를 말함
- 맥이 빠른 시간 간격으로 스위칭 된다 => 여러 맥이 동시에 실행되는 것처럼 보인다
- 시공유 시스템이 프로세스를 빠르게 스위칭해서 동시에 실행하는 것 처럼 보이게 하는 것과 비슷하게
- 여러 쓰레드를 빠른 시간에 스위칭하여 마치 동시에 두개의 맥이 흐르는 것 처럼 보이게 만든다.
- 실제로는 한 순간에는 하나만 실행되지만, 매우 빠르게 전환되어 마치 동시에 실행되는 것 처럼 보인다.
- Concurrent (동시성, 그러나 어느 한순간에는 하나만, O) vs Simultaneous (동시성, 진짜 동시에 두개, X)
3. Time Sharing System?
- 우리가 배웠던 Time Sharing System은 다음과 같다. (Round Robin Scheduling based)
- 메모리의 왼쪽에서 오른쪽으로 시간이 흐른다고 생각하면 된다. (사각형이 메모리이다...)
- 프로세스 P1이 실행되고나면 p2가 실행되고 그 뒤로 p3, p4가 실행되고 다시 p1, p2, p3, p4순으로 실핸된다
- 그러나 이 것은 싱글 쓰레드 프로그램을 돌리던, 옛날 운영체제이고 요즘은 아래와 같이 실행 된다.
- 요즘엔 거의 모든 프로그램이 멀티쓰레드로 돌기 떄문에 위와 같이 실행된다.
- P1, 2, 3에서 줄이 왔다갔다 하는데, 이 부분들이 매우 빨리 전환되면서 두개의 라인이
- 동시에 실행되는 것 처럼 보이게 하는 멀티 쓰레드 부분이다.
- 즉, 멀티쓰레드 환경에선 Context Switching의 단위가 프로세스가 아니라 쓰레드이다.
4. Thread의 구조
- 기본적으로 하나의 프로세스는 하나의 쓰레드를 보유하고 있음
- 그러나 멀티쓰레드 프로세스는 하나의 프로세스가 다수의 쓰레드를 보유하고 있음
- 쓰레드 간에 code, data 영역과 OS의 자원(file, I/O)등은 함께 공유하지만
- pc, sp, stack, register 등 실행에 직접적인 영향을 미치는 여러 포인터/레지스터는 공유하지 않음
- 스택도 아예 따로 씀. 스택을 같이 쓰면 진짜 대환장 파티가 날것임. 아예 다른 곳에서 스택 fp를 잡음
- pc나 sp가 다르게 설정되어있기 때문에 거의 동시에 여러 곳의 코드를 호출하는 것임
5. Reference
'운영체제' 카테고리의 다른 글
프로세스 생성과 소멸 (0) | 2020.05.05 |
---|---|
CPU 스케줄링 (5) - 다중 큐 스케줄링 (0) | 2020.05.05 |
CPU 스케줄링 (4) - 라운드 로빈 스케줄링 (0) | 2020.03.06 |
CPU 스케줄링 (3) - 우선순위 스케줄링 (0) | 2020.03.05 |
CPU Scheduling (2) - SJF (Shortest Job First) (0) | 2020.03.05 |
CPU Scheduling (1) - FCFS (First Come, First Served) (0) | 2020.02.04 |
CPU Scheduling Criteria & Kinds (0) | 2020.02.04 |