본문 바로가기
컴퓨터 COMPUTER/Linux 리눅스

6. [Process State, Scheduling] : 프로세스의 상태와 스케쥴링

by 매실이 maesiri 2019. 1. 30.

프로세스는 항상 5가지의 상태 중에 하나를 가지게 된다. 아래 발그림 + 설명을 통해 자세히 알아보자.



① 프로세스가 막 생성되었을 때 New 라는 상태를 가진다.

② 생성 후에 Admit 되면 Ready 상태로 넘어간다. Ready 상태에 있다는 것은 프로세서가 그 프로세스를 맡게 되기 까지 대기하는 것이며, 'ready queue' 에 서 기다리는 상태이다.

③ 대기 중인 프로세스가 순서가 되면 프로세서에 의해 그 프로세스의 instruction 이 실행된다. 이 과정을 Dispatch 라고 하며 이 때 프로세스의 상태를 'Running' 이라고 한다. 실행 중이던 프로세스가 프로세서에 할당된 시간을 다 썼다면 'Timeout' 상태가 되어 다시 Ready queue 로 돌아간다.

④ 실행 중이던 프로세스에서 메모리에 접근이 필요하다던가, I/O 작업이 필요하다던가 하는 이벤트가 생겼을 때, 'Event wait'에 의해 Blocked 상태가 된다. 이벤트가 해결되면 다시 순서를 기다리기 위해 Ready queue 로 돌아간다.

⑤ 실행 중이던 프로세스가 완료되면 Release 되어 Exit 상태가 된다.

Ready 와 Blocked 상태의 경우 모두 Queue의 형태로 프로세스가 대기하게 된다. 아래 그림과 같이 말이다.



< CASE - LINUX PROCESS STATE >

리눅스의 경우, Ready 상태와 Running 상태가 모두 TASK_RUNNING 상태로 표시된다. 아래 그림을 보자. 위 그림보다 조금 더 복잡해보이지만, 자세히 보면 거의 비슷하다.

TASK_RUNNING (running) 상태에서 다시 TASK_RUNNING (ready) 상태로 가는 경우 preempted 라는 말을 썼다. 이는 더 높은 priority 를 가진 프로세스에 의해 현재 돌아가던 프로세스가 밀려나는 것을 말하는데, 어떠한 기준으로 프로세스들에 순서를 매길지 앞으로 얘기해볼 것이다.

task_stopped 라는 상태가 추가되었는데, 이 상태는 프로세스에 뭔가 디버깅이 필요할 경우 프로세스가 잠시 멈추게 되어 생기는 상태이다. continue signal 을 받으면 다시 ready queue 로 돌아가게 된다.

TASK_INTERRUPTIBLE, TASK_UNINTERRUPTIBLE 은 Blocked 상태를 나타내는데, 인터럽트 없이 프로세스가 일어나야 이벤트 해결이 되는 경우 uninterruptible 상태가 된다.

Ready, Blocked 상태에서는 Queue를 두어 프로세스에 순서를 매긴다고 했다. 그럼 이러한 큐들이 실제로는 어떤 형태로 저장되는 걸까? 아래 그림을 보자.





프로세스의 구조를 설명하며 지난 글에서 PCB 을 설명했다. 이건 말 그대로 Block 블록 형태로 되어있는 큰 자료구조인데, 이 안에 포인터가 있었지 않나. 그 포인터를 이용하여 Linked List 형태로 큐잉을 하는 것을 볼 수 있다. 이렇게 Linked List 형태를 이용하는 것은, 포인터만 바꿔주면 성능 좋게 빠르게 순서를 바꿀 수 있기 때문이다. 이게 없었다면 큰 PCB를 매번 복사하고 삭제해야 했을 것이다. Pointer와 Linked List로 오버헤드를 크게 줄였다고 볼 수 있다.

Process Scheduling 의 종류

① Job Scheduling (Long-term Scheduling) : 어떤 프로세스가 시스템으로 들어와야할지 정하는. 몇 초/분마다 이루어지기 때문에 느릴 수 있음. 위 상태 모델링 그림에서 admit 부분을 조정한다.

② CPU Scheduling (Short-term Scheduling) : 어떤 프로세스가 CPU 로 할당되어야 할지 정하는. 몇 ms 마다 이루어지기 때문에 빠르게 이루어져야함. 위 상태 모델링 그림에서 dispatch 부분을 조정한다.

③ Medium Term Scheduling : 어떤 프로세스가 CPU에서 다시 Ready로 갈지 정하는. 위 상태 모델링 그림에서 preempting 부분을 조정한다.

다음 글에서는 프로세스 간 순서가 바뀔 때 일어나는 'Process Switching' 에 대해서 자세히 알아보겠다! 으앙




개인 공부 정리용으로 작성한 글입니다. 틀린 부분이 있을 수 있으니 참고용으로만 사용해주세요. 틀린 부분은 댓글로 알려주세요.♥


반응형