프로세스 스케줄러, 프로세스의 상태, 스레드에 대해 정리한 내용이다.
스케줄러
프로세스를 스케줄링 하는 스케줄러의 종류들이 세 가지가 존재한다.
그 전에 프로세스 스케줄링을 하기 위한 Queue도 아래와 같이 세 가지가 존재한다.
- Job Queue: 현재 시스템 내에 있는 모든 프로세스의 집합이다.
- Ready Queue: 현재 메모리 내에 있으면서 CPU를 선점하기를 기다리는 프로세스의 집합이다.
- Device Queue: I/O 디바이스의 처리를 기다리는 프로세스의 집합이다.
위 Queue들에 프로세슬르 넣고 빼주는 역할을 담당하는 것이 바로 스케줄러이다.
스케줄러에도 아래와 같이 세 가지가 존재한다.
- 단기 스케줄러(CPU Scheduler)
- 어떤 프로세스를 다음번에 Running시킬 지 결정한다.
- CPU 사용을 프로세스에게 넘기는걸 다루므로 속도가 빨라야한다.
- 장기 스케줄러(Job Scheduler)
- 시작 프로세스(New상태) 중 어느 것들을 Ready Queue로 보낼 지 결정한다.
- degree of multiprogramming(메모리에 올라와 있는 프로그램의 수)을 제어한다.
- time sharing system에서는 보통 장기 스케줄러가 없기 때문에 무조건 바로 Ready Queue로 이동한다.
그렇다면 degree of multiprogramming은 어떻게 제어할까? - 바로 아래 나오는 중기 스케줄러가 time sharing system에서 degree of multiprogramming을 제어해준다.
- time sharing system에서는 보통 장기 스케줄러가 없기 때문에 무조건 바로 Ready Queue로 이동한다.
- 시작할 때 프로세스에게 메모리를 주는 것.
- 중기 스케줄러(Swapper)
- 장기 스케줄러가 시작할 때 메모리에 올라갈 수 있는 프로세스 개수를 제어한다면,
중기 스케줄러는 우선 메모리에 올리고 -> 너무 많은 경우에 일부 프로세스를 통째로
메모리에서 디스크로 쫓아내는 역할을 한다. - 나중에 프로세스에게서 메모리를 뺏는 것.
- 장기 스케줄러가 시작할 때 메모리에 올라갈 수 있는 프로세스 개수를 제어한다면,
(*참고)
degree of multiprogramming 제어가 필요한 이유?
메모리에 여러 프로그램을 올리는 것은 cpu가 놀지 않기 때문에 좋을 것이다.
하지만, 너무 많아도/적어도 성능에 좋지 못하다.
그렇기에 메모리에 몇 개의 프로그램이 올라올 지 결정하는 degree of multiprogramming 제어가 중요한 것이다.
프로세스의 상태
프로세스의 상태는 앞선 글에서 그림으로 직접 그려보긴 했다.
하지만 중기 스케줄러에 의해서 프로세스가 스케줄링 되는 상태를 앞선 Running, Ready, Blocked(Wait)로는 설명할 수가 없다.
꼭 중기 스케줄러만을 위한 상태는 아니고, 외부적인 요인에 의해서도 프로세스가 중지되는 것은 위 세 가지 상태로는 표현할 수가 없다.
그 상태를 Suspended(Stopped)라고 부른다.
- Suspended
- 외부적인 이유로 프로세스의 수행이 정지된 상태이다.
- 프로세스는 통째로 디스크에 swap out 된다.
- (예시)
- 메모리에 너무 많은 프로세스가 올라와 있을 때, 시스템이 잠시 중단시킨다.(중기 스케줄러)
- 사용자가 프로그램을 일시정지 시킨 경우(외부적 요인)
위와 같은 상태를 추가한 프로세스의 상태도는 아래와 같다.
- Running 상태
- Running 상태가 두 가지로 나뉘어져 있는데,
user mode는 CPU에서 실행 중인 상태를 뜻하며, moniter mode는 System call에 의해서 커널모드에서 실행 중일 때 나타내는 상태이다.
- Running 상태가 두 가지로 나뉘어져 있는데,
- Suspende 상태
- Blocked 상태 또는 Ready 상태에서 Suspended 되느냐에 따라 따로 나뉘어져 있고,
외부에서 정지시게 되면 Suspended 상태가 되는 것이고, 외부에서 재개시키면 다시 active 상태로 돌아가게 되는 것이다.
- Blocked 상태 또는 Ready 상태에서 Suspended 되느냐에 따라 따로 나뉘어져 있고,
스레드(Thread)
스레드를 설명하기에 앞서 일반적인 프로세스의 주소공간과 프로세스의 PCB를 살펴보자.
- 프로세스 A의 주소공간이 좌측 그림처럼 있고, 프로세스 A의 PCB가 우측 그림처럼 있다.
- PCB에서 PC값이 프로세스 A의 주소공간 중 code영역에 어느 부분을 가리키고 있다.
- 이와 같은 상태에서 만약 동일한 작업을 하는 프로세슬 5개 실행한다면?
별도의 프로세스마다 주소공간을 10개 띄어야 할 것이다.
-> 이 이유뿐만은 아니지만 이러한 메모리 낭비를 방지할 수도 있는 것이 바로 Thread이다.
Thread
Thread를 사용하면 주소공간을 하나만 띄우고 각 프로세스마다 다른 영역의 code를 실행 시킬 수 있게 된다.
Thread를 사용하게 되면 위와 같이 주소공간과 PCB가 구성된다.
- 프로세스 하나에 CPU 수행 단위만 여러개 두는 것을 Thread라고 하는 것.
- 하나의 CPU에서 수행단위만 분리하므로, CPU수행과 관련한 정보를 독립적으로 가지면서 나머지 자원은 공유한다.
즉, Thread가 독립적으로 가지는 것과 공유되는 것을 구분하면 아래와 같다.
Thread가 독립적으로 가지는 것.
- Program Counter
- Register Set
- Stack영역
Thread간에 공유하는 부분(= task).
- code, data 영역
- 각종 os 자원
스레드의 장점
- 예를 들어, 웹 페이지 로딩을 스레드 차원에서 설명한다면 아래와 같을 것이다.
웹사이트를 여러 Thread로 구성한다면, 하나의 Thread가 이미지를 불러오는 동안에 프로세스를 Block시키지 않고, 다른 Thread가 html문서라도 먼저 불러와 화면에 띄어줄 수 있다.
즉, 하나의 스레드가 Block인 상태에서도 동일한 태스크 내의 다른 스레드가 Running상태로써 빠른 처리가 가능하다. - 예를 들어, 워드 프로그램에 여러 파일을 열었을 때.
여러 파일이 각각의 서로 다른 프로세스라면 각 주소공간을 가지게 되어 메모리 낭비가 심해진다.
하지만, 하나의 프로세스(워드 프로그램)안에 스레드를 여러개 두면 성능향상과 같은 효율을 얻을 수 있다.
'ComputerScience > OS' 카테고리의 다른 글
5. 프로세스 관련 시스템콜 & IPC (0) | 2022.12.28 |
---|---|
3. 프로세스(1) (0) | 2022.11.08 |
2. 컴퓨터시스템 구조(2) (0) | 2022.11.06 |
1. 운영체제란 & 컴퓨터시스템 구조(1) (0) | 2022.11.02 |
[OS] Process Memory와 Thread (0) | 2022.08.03 |