본문 바로가기

별걸다하는 IT/운영체제 OS

[운영체제]프로세스 상태(Process State-ready, waiting etc)

프로세스라고 하는 것은 상태(state)를 가지고 있습니다.

이번에는 그 프로세스 상태에 대해서 설명해보려고 합니다


프로세스 상태 

- new, ready, running, waiting, terminated


프로그램을 하나를 실행시키면 일단 프로세스가 하나 만들어지겠죠? 


new: The process is being created.

terminated : The process has finished execution.

running : Instructions are being executed

waiting : The process is waiting for some event to occur

ready : The process is waiting to be assigned to a process


프로세스가 만들어지는 과정의 상태가 new이고 프로세스가 다 수행되어서 종료할 때 잠시 생기는 state는 terminated입니다.

즉 new 하고 terminated 상태는 운영체제가 프로세스를 만들거나 종료시킬 때 잠시 임시적으로 있는 state이고

이 외의 이 3개의 상태(running, waiting, ready)가 돌아가면서 프로세스가 수행이 되는 것~!



Running

running은 단어에서 유추할 수 있듯이 CPU에서 수행이 되고 있는 상태를 말합니다.


Ready 와 Waiting

그리고 ready는 running할 준비가 되어 있는 것을 말해요. 그런데 running 할 준비가 되어있는데 왜 수행이 안될까?

CPU가 하나라고 생각한다면, "지금 다른 애가 돌고 있으니까 나는 기다리고 있어야 하는구나"하고 있는 상태이기 때문에 수행되지 않고 기다리는 상태에 머물러 있는 것이죠.

이 친구가 끝나면 CPU를 차지하고 나중에 수행될 것을 기다리고 있는, 언제든지 수행될 수 있는 만반의 준비상태가 ready입니다.


헷갈리게 waiting이라는 상태가 하나 더 있어요. 이 waiting이라고 하는 상태랑 ready의 차이점은 무엇이냐?

ready도 waiting이랑 똑같이 어떤 상태의 변화를 기다리고 있는 것인데

ready는 단어에서 알 수 있듯이 실행 준비가 다 된 상태에서 기다리는 것을 말합니다. 오로지 다른 애가 먼저 수행되고 있기 때문에 차례를 기다리는 것뿐! 근데 이 waiting이라는 state는 ready와는 다르게 I/O나 다른 이벤트가 발생하기를 기다리는 것을 나타내는 상태입니다.


(Running-> Waiting 과 Waiting -> Running 과정)

쉽게 예시를 든다면, 여러분이 메이플 스토리 게임을 시작한다고 합시다!

running에 올려두고 쭈욱 작업을 하려 했지만 로그인을 해야 진행할 수 있네요?

그러면 CPU는 사용자로부터 아이디와 패스워드를 받을 때까지 수행하지 못하죠?!

CPU는 엄청 빠른 비싼 장비인데 여러분이 아이디 패스워드 치는 동안 놀고 있으면 낭비죠!

그래서 CPU는 그 작업을 waiting 상태로 바꿔버리고 다른 프로세스를 가져와서 인풋을 기다리는 동안 running으로 돌립니다!

(CPU는 언제든지 실행될 수 있게 만반의 준비가 된 ready상태에 있는 프로세스 중 하나를 가져와서 running으로 돌리는 거죠)

이처럼 내 스스로 지금 더 이상 수행이 안되서 어떤 이벤트가 발생하기를 기다리는 상태를 waiting이라고 합니다.

이 과정이 그림에서는 Running--> waiting 부문으로 I/O or event wait 이라고 표현되어 있네요!

이 상태에서 여러분이 키보드에 입력을 완료하면

프로세스가 "CPU야! 나 입력 다했어!! 이제 끝났어 안기다려도 돼!"라고 알려주는 인터럽트 신호를 겁니다.

그러면 이제 다시 실행될 모든 준비가 됐으니 그림에서는 I/O or event completion가 돼서 Waiting --> Ready로 변하는 것이죠!


(Ready --> Running)

자 그럼 이제 이렇게 ready가 된 애들은 어떻게 running 상태로 갈까요?

운영체제가 이제 너네들 작업할 수 있어~ 너네 수행할 차례야~ 라고 선택을 해줘야겠죠 !

ready상태에 있는 프로세스들은 한개가 아니고 여러 개인데 그 중에 이제 수행될 하나를 고르는 작업을 스케줄링(scheduling)이라고 합니다. CPU의 스케줄러가 스케줄링을 해서 하나를 고르는 것! 결국 다 운영체제가 하는 일~!

그 다음에 그거를 실행시키는 것도 사실은 스케줄링이라고 볼 수 있는데 전체 스케줄링을 좀 세부적으로 크게 둘로 나누면, 여러 개 중에 하나를 고르는 것을 스케줄링, 고른 애를 CPU에 올려다가 놓는 것을 dispatch라고 해요.

이거 하나를 스케줄링이라 하고 스케줄러 dispatch에 의해 선택이 되면 running상태가 되는 것!


추후에는 스케줄링 알고리즘에 대해서 알아볼겁니당


도움이 됐다면 공감 꾹 

공감과 댓글은 지식 공유의 힘이 됩니다 ;)