리소스(Resource)란?
프로세스들이 사용하거나 조작하는 대상으로 하드웨어 자원이나 메인메모리에 들어가있는 data structure를 의미하기도 합니다. CPU time이나 storage disk space, I/O device 등도 리소스로 볼 수 있습니다.
리소스는 Preemptible resource와 Non-Preemptible resource로 나뉩니다. 이전에 스케줄링에서 개념을 배운적이 있는데 Preemptible scheduling은 프로세스가 CPU 자원을 가지고 있을 때 OS가 언제든지 뺏을 수 있는 스케줄링이고 Non-Preemptible scheduling은 프로세스가 스스로 수행을 완료해서 CPU를 내놓았을 때만 다른 프로세스가 CPU를 가질 수 있는 스케줄링었습니다.
Non-Preemptible resource와 Preemptible resource도 비슷하게 OS가 리소스를 뺏을 수 있는지 없는지에 차이로 나누어지게 됩니다. 리소스를 뺏었을 때 프로세스 수행에 중대한 문제가 발생하는 경우 Preemptible resource, 뺏었다 다시 반환해줘도 이상이 없으면 Non-Preemptible resource가 됩니다.
OS의 중요한 개념 중 하나가 Coordinator로 컴퓨터 시스템에 존재하는 많은 자원을 관리할 수 있는 점이었습니다. OS의 resource manager는 프로세스에게 자원을 할당해주는데, 먼저 어떤 프로세스에게 자원을 할당할지 결정해주고 프로세스가 이 자원을 사용하는 시간도 정하게 됩니다.
리소스 중에서 가장 중요한 리소스는 CPU로, CPU 리소스를 관리하는 OS의 부분을 Process scheculer라고 부릅니다. CPU 리소스보다 프로세스가 더 많은 상황인 multi-programming, multi-tasking OS 상황에서 스케줄링이 사용됩니다.
과거에 batch os의 job과 time shareing os의 프로세스는 어떻게 다를까요?
프로세스는 생성이 되면 ready queue에 들어있다 CPU를 할당받으면 running queue로 이동합니다. 이때 blocking system call이나 다른 event전까지 instruction을 수행할 수 있습니다. I/O event 등이 발생하면 프로세스는 CPU를 뺏기고 waiting state로 가게 됩니다. 이후 대기하다 ready queue로 들어가 프로세스가 종료되기까지 위 과정을 반복합니다.
- ready state에서 프로세스가 대기하는 시간을 preemption time이라고 합니다.
- preemption time은 queueing delay(큐잉 지연)을 말하는 것입니다.
- running state의 시간은 CPU execution time, waiting state에서 보내는 시간은 I/O waiting time이라고 합니다.
즉 프로세스의 execution이란 위 시간들을 반복하는 cycle한 움직임입니다. 스케줄링은 프로세스가 CPU를 할당받고 수행하는 시간에서 I/O waitiong 직전까지의 시간을 제어하게 됩니다. 이 부분을 CPU Burst time이라고 부릅니다.
어떤 프로세스의 수행을 시간 단위로 쪼개면 CPU Burst time과 I/O waiting time(I/O Burst), Preemption으로 나눠지게 됩니다. OS의 스케줄러가 스케줄링하는 부분은 CPU Burst time으로 어떤 프로세스에게 얼마만큼의 시간을 주는지를 결정하게 됩니다. 이 방법은 batch processing OS에서는 사용하지 않습니다.
batch OS의 경우 multi-tasking이나 multi-programming을 하지 않기에 어떤 job이 컴퓨터 센터에 submit되면 완전히 수행이 끝날 때까지 혼자서 컴퓨터 시스템을 독점하게 됩니다. 때문에 CPU Burst, I/O Burst time을 구별할 필요가 없습니다.
time sharing scheduling의 가장 중요한 부분이 CPU Burst을 어떻게 설정해야 시스템 성능이 좋아지는지 입니다. 이에 맞춰 스케줄링 알고리즘은 CPU Burst size(프로세스가 쓰는 시간)을 보고 거기에 맞춰 스케줄링 해 optimal solution을 얻는 것이 목표입니다.
4~5ms 내외의 CPU Burst size가 가장 빈도가 많고 그보다 작으면 조금 덜하고 그보다 크면 별로 없습니다. CPU Burst size가 40ms 이상 커지면 I/O를 거의 수행하지 않는 것으로 이런 프로그램은 굉장히 드뭅니다.(과학기술 연산 등)
CPU Burst size가 굉장히 큰 프로세스들을 CPU intensive process, CPU bound process라고 이야기 합니다. CPU Burst size가 굉장히 작고 I/O Burst size 굉장히 긴 프로세스는 I/O intensive process, I/O bound process라고 부릅니다.
CPU intensive process는 사용자가 굉장히 많은 연산을 컴퓨터에게 맡겨두고 결과물을 받는 형태입니다. 여기서 중요하게 보는 지표는 Throghput으로 기다린 시간만큼 많은 연산을 수행하는 것이 중요합니다. I/O intensive process는 그와 달리 짧은 연산을 빠르게 수행하고 전달해주는 것이 중요합니다.
즉 사용자와 interaction을 굉장히 많이 하기에 더 빠른 반응 시간을 원하게 됩니다. 그래서 I/O intensive process에서는 Response time을 성능 지표로 봅니다.(CPU intensive process는 사용자와 interaction이 굉장히 적습니다.)
OS는 프로세스들에 대해서 각기 다른 두 개의 성능 지표를 만족시켜야합니다. OS가 스케줄링할 때 CPU intensive process, I/O intensive process 둘 다 스케줄링하기 때문입니다.
'CS > Operating System' 카테고리의 다른 글
8. 동기화(Synchronization) (2) | 2023.11.20 |
---|---|
7. 스케줄링(Scheduling) (2) | 2023.10.31 |
5. 멀티 쓰레딩(Multi Threading) (2) | 2023.10.17 |
4. Process (creation, termination, context switching) (0) | 2023.10.12 |
3. 스택(Stack) (2) | 2023.10.01 |