글 출처 : https://jhnyang.tistory.com/7
프로세스 상태
new, ready, running, waiting, terminated
프로세스가 만들어지는 과정의 상태가 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상태가 되는 것!