-

[운영체제 Step 4] - 프로세스 관리 본문

CS/운영체제

[운영체제 Step 4] - 프로세스 관리

흣차 2021. 12. 3. 19:51
728x90
반응형

지금까지 프로세스 이름을 많이 봐왔었습니다.

프로세스는 단순히 말해 '실행의 주체' 라고 정리하고 넘어왔습니다.

앞으로는 프로세스에 대해 좀 더 깊히 다루어 보겠습니다.

여러분들은 프로세스를 어디에서 보셨나요? 아마 안 보신 분들은 거의 없으실 겁니다.

윈도우즈 + Delete를 눌러 작업 관리자를 들어가면 

이런 화면 보신 적 있으시죠??

실제로 우린 프로세스를 아주 많이 사용하고 있습니다.

 

이 프로세스는 작업(Job)과 구분이 됩니다.

이 작업은 실행할 프로그램과 데이터라고 합니다. 즉 실행하기 전의 상태를 의미합니다.

반면에 프로세스는 실행하기 위해 커널에 등록된 작업을 일컫습니다.

잡과 프로세스를 그림으로 보면 이렇게 표현됩니다.

확실히 명확하지요?? 잡은 커널에 등록되지 않은 실행 요청하기 전의 상태이고

프로세스는 실행하기 위해 커널에 등록되어 있는, 즉 커널을 기준으로 구분지어질 수 있습니다.

따라서 잡이 실행되기 위해 커널에 등록된다면 그것이 비로소 프로세스가 될 수 있겠습니다.

 

프로세스의 정의는 굉장히 다양하게 정의될 수 있습니다.

이 중에 하나만 외우시고 계셔도 면접에 도움이 되거나 누구 앞에서 프로세스를 설명할 때 도움이 될 수 있습니다.

즉 커널에 등록된 잡. 이것을 프로세스라고 했고, 각종 자원을 요청하고 할당 받을 개체라고 이해할 수 있습니다.

그렇기 때문에 작업을 수행할 능동적인 개체라고도 이해할 수 있습니다.

만약 외우기 어렵다면 '실행중인 프로그램'. 이렇게 알고 계셔도 좋겠습니다.

PCB는 뒤에서 조금 더 다루어 보겠습니다.

참고로 알아두시면 좋겠습니다.

 

커널과 프로세스를 정의하고 나면 지금까지 말했던 OS에 나왓던 자원을 이제 정의할 수 있습니다.

즉 커널의 관리 하에 프로세스에게 할당/반납되는 수동적 개체를 자원(Resource)라고 부릅니다.

자원은 앞에서도 계속 나왔듯이 하드웨어와 소프트웨어 자원으로 분류가 됩니다.

그렇다면 앞에 나왔던 PCB가 뭔지 이제 살펴보겠습니다.

 

  • Process Control Block (PCB)

프로세스를 컨트롤하기 위해 필요한 정보를 모아놓은 것을 PCB라고 부릅니다.

OS가 프로세스를 관리하기 위해 필요한 정보를 저장하는 의미로 받아들일 수 있습니다.

어떤 프로세스가 생성 됐다는 것은 이 PCB가 생성됐다는 것입니다.

그리고 우리 메모리 영역을 잘 보시면 커널이 쓰는 영역이 있고 사용자가 쓰는 영역이 있습니다.

이중에 이 PCB는 커널이 관리하는 영역에 존재하는 것을 이해하시면 되겠습니다.

그래서 이 PCB가 어떤 정보를 가지는지 한 번 알아보겠습니다.

당연히 ID도 필요할 것이고 정보나 상태, 메모리 정보 등도 필요합니다.

특히 다중 사용자 시스템일 경우 이 사용자가 누구인지 알아야할 필요가 있습니다.

그래서 그 계정의 정보도 PCB가 관리해야할 수 있습니다.

하지만 이 PCB는 OS와는 별개의 요소로서 구분되어 집니다.

오히려 PCB의 참조나 갱신 속도가 OS의 성능을 결정 짓는 요소로서 받아들여질 수 있습니다.

지금까지 프로세스를 정의 해보았습니다. 이젠 프로세스의 상태에 대해 알아보겠습니다.

 

  • 프로세스의 상태(Process States)

프로세스라는 녀석은 시스템에 등록된 후에 여러가지 상태를 거치면서 작업을 수행합니다.

이 상태라는 것은 자원 간의 상호작용에 의해 결정됩니다.

지금은 이런게 있다고 받아들이시면 되겠습니다. 앞으로 계속 다루어 볼 내용입니다.

중요한 것은 이 프로세스가 어떤 흐름을 가지고 다이어그램에 그려지는지 한 번 알아보겠습니다.

상당히 복잡합니다.

그러니, 조금씩 잘라서 한 번 의미를 이해해보도록 하겠습니다.

제일 왼쪽의 Created State부터 알아보겠습니다.

생성된 상태입니다.

프로세스는 커널에 등록된 잡이라고 정의헀습니다.

그러니까 어떤 프로세스가 생성된 상태. 이것을 Created State라고 하고 PCB가 할당이 됩니다.

이 프로세스가 생성이 되면 기로에 서게 됩니다.

Ready로 갈 것인지, suspeded ready로 갈 것인지 나뉘어집니다.

이것을 선택하는 것은 바로 메모리 공간에 의해 나뉘어 집니다.

내가 쓸 수 있는 메모리 공간이 있느냐를 통해서 어디로 갈지 결정이 됩니다.

그래서 만약 메모리가 여유가 있다면 ready가 될 것이고 없다고 한다면 suspended ready로 들어갑니다.

그럼 ready로 갔다고 가정해보겠습니다.

이 Ready State로 들어오게 되면 프로세서 할당 대기 상태가 됩니다.

만약 프로세서와 프로세스가 헷갈리신다면 프로세스는 CPU라고 이해하면 된다고 앞 시간에 소개해드렸습니다.

프로세스가 생성되고 메모리에 할당 받았다면 CPU만 있으면 실행될 수 있습니다.

이를 즉시 실행 가능 상태라고 부릅니다. 그리고 CPU를 할당 받으면 running으로 보낼 수 있고 이를

dispatch라고 부릅니다. (Ready State -> Running State)

그래서 running state가 되면

프로세서와 필요한 자원을 모두 받은 상태가 됩니다.

여기에서 running state를 벗어나는 단계는 2가지가 있습니다.

첫 번째는 ready로 내려가는 경우)

 이 때에는 프로세서만 없는 상태가 되기 때문에 (ready는 프로세서만 없습니다) 이를 Preemption이라고 부릅니다.

 그래서 발생하는 원인이 프로세서 스케줄링에 의해서 ready로 넘어갈 수 있는데 주로 타임아웃이나 priority changes가   일어날 때 다음 시간에 기다리게 하는 경우를 이야기합니다.

두 번째는 asleep으로 내려가는 경우)

 예를 들어 여러분이 어디에 가서 일을 보고 있는데 서류를 안가져왔다면 집에 가서 서류를 가지고 와야할 것입니다. 이것을 시스템에선 I/O라고 합니다. 만약 I/O가 발생한다면 다른 사람이 들어올 수 있게 방을 비워놓고 저는 I/O를 하러 가게 됩니다. 이 상태를 바로 Block된다고 하고 이것을 asleep상태라고 부릅니다. (서류를 가지고 올 때까진 잠자며 대기)

자 그래서 asleep상태가 되었습니다. 그러다가 기다리고 있던 데이터가 들어왔다면 다시 asleep에서 running상태가 될 수 있을까요?

물론 장치에 따라 조금 다를 수 있겠지만 다른 프로세스가 작업을 하고 있는데 끼어들면 안되겠죠?

그래서 바로 running이 되진 못하고 wakeup상태가 되어 다음 CPU할당을 기다리기 위해 ready상태에서 기다립니다.

그리고 다시 차례가 되면 running상태가 되어 작업을 수행하게 하도록 유도합니다.

 

이것으로 메모리 할당에 대해 이야기 해보았고요. 이젠 할당이 안되었을 때를 이야기해보겠습니다.

created state에서 suspeded ready로 오는 상태는 메모리가 없을 때를 이야기합니다.

그래서 메모리가 없고 ready하는 상태를 suspende state라고 말합니다.

근데 blokced도 됐는데 메모리도 뺏겨서 (I/O 하다가) 이 때를 suspend blocked라고 부릅니다.

 

그럼 만약 메모리를 뺏긴 상태인데 대기열이 너무 길어서 오래 기다려야 한다고 생각해봅시다.

이럴 경우에는 Memory image를 다음에 프로세서에 할당할 수 있을 때 이어서 하기 위해 swap device에 보관하게 됩니다. 일종의 하드디스크라고 생각하시면 됩니다.

그럼 다시 사용할 때 일종의 복구가 되어 하던 작업부터 다시 시작할 수 있습니다.

그래서 메모리에 뺏기면서 Swap device 에 저장하는 것. 이것을 Swap-out 이라고 하고 다시 이걸 복구하는 걸 Swap-in이라고 정의할 수 있습니다.

 

그리고 마지막으로 하나 남았습니다.

  • Terminated / Zombie State

프로세스가 열심히 일을 하다가 종료되었다고 해봅시다.

소멸되면 바로 소멸되면 좋을텐데 그렇지 않고 보통은 Terminate State에 잠시 들렀다 갑니다.

또는 Zombie State라고도 하고요.

왜 굳이 여길 들렸다 갈까요

프로세스가 지금까지 어떤 자원을 썼는지, 일을 얼마나 했는지를 만약 알고 있다면 다음에 비슷한 작업이 들어왔을 때 또 수행하기 좋겠죠?

그래서 프로세스가 종료되었을 때 커널에 일부 PCB정보만 남겨서 정보를 수집하는 과정이 필요합니다.

대부분의 자원은 반납이 되지만 PCB 정보만 남아 있다가 이후에 기록을 하면서 terminated에서 제거를 함으로써 최종적으로 프로세스가 종료될 수 있습니다.

이 그림을 다시 살펴보겠습니다.

프로세서가 없을 때 Ready와 Blocked로 구분될거구요. 자원이 있냐 없느냐에 따라 이 둘은 구분이 됩니다.

그리고 프로세서도 존재하면 Running이라고 불렸고 자원이 없으면 suspended block, 자원이 있으면 suspende ready라고 불렸습니다.

 

그래서 이 프로세스 관리를 위해 자료구조에 대한 이해도 필요합니다.

프로세스에서 자원을 처리할 때에는 Queue를 사용합니다.

728x90
반응형
Comments