본문 바로가기
OS/os 공부

3. 프로세스 관리

by Success T.H.I.E.F 2021. 12. 25.

프로세스 개념

현재 작업중인 프로세스들

정의

> 커널에 등록되어 커널의 관리하에 있는 작업

각종 자원을 요청, 할당받을 수 있는 개체

프로세스 관리 블록 PCB (Process Control Block)을 할당받은 개체

실행 중 각종 자원을 요구, 할당, 반납하며 진행하는 능동적 개체

 

간단히 : 실행중인 프로그램

 



Job과 프로세스의 차이

 

job / program

> 실행할 프로그램과 데이터를 묶은 것을 job 또는 program이라 부른다. 현재 디스크에만 있는 상태로서 컴퓨터 시스템에 실행 요청을 당하기 전의 상태이다.

 

Process 

>실행을 위해 시스템(커널)에 등록된 job을 말한다. 프로세스를 잘 관리해야 시스템의 성능 향상이 됨으로 커널이 관리한다. 

 

프로세스의 종류

자원(Resource)은 무엇인가?

커널의 관리 하에 프로세스에게 할당되고 반납되는 수동적인 개체

 

어떤 것이 있는가?

H/W resources

프로세서(cpu), 메모리, 디스크, 모니터, 키보드 등.

 

S/W resources 

메시지, 시그널, 파일 설치된 SW들 등.

 

PCB란?

> 커널 공간 내에 존재하며 각 프로세스들에 대한 정보를 관리하는 블록

프로세스 생성 시 생성되며 OS가 프로세스를 관리하기 위해 필요한 정보를 커널 공간에 저장한 것이라 보자.

pcb가 관리하는 정보?

 

프로세스 상태(Process States)

프로세스 상태 transition Diagram

Create state

잡을 커널에 등록한 상태로 PCB를 할당받아 프로레스를 생성한다.

가용 메모리 공간의 유무에 따라 Rready 혹은 Suspended ready로 전이된다.

 

Ready State(가용 메모리 有)

메모리 공간이 있어 프로세서(cpu) 외 다른 모든 자원을 할당받은 상태 (CPU 기다리는 상태)

CPU만 있으면 직시 실행 가능한 상태이다.

 

Running State

프로세서(cpu)와 그 외 필요한 자원을 모두 할당받아 열심히 일하는 상태이다.

 

러닝 상태를 벗어나게 되는 경우 

1. Preemption (CPU 뺏겨서 레디로 물러나는 경우)

> CPU를 다른 프로세스에게 뺏기면 Running State -> Readyu States로 내려온다.

프로세서 스케쥴링 과정에서 일어날 수 있다(ex. time-out, priority changes)

2. Block/Sleep

> 작업을 잠시 재워두는 상태로 I/O 등 자원 할당을 요청할 때 발생한다.

(ex 은행 갔는데 일 보다가 민증이 필요한데 집에 있어 잠시 다녀오는 경우)

다른 작업이 들어올 수 있다.

 

Blocked/Asleep State

프로세서 외에 다른 자원을 기다리는 상태로서 자원 할당은 system call에 의해 이루어진다.

wake-up 은 Asleep상태에서 자원을 받아오면 잠을 깨우며 바로 Running  상태로 돌아가는 것이 아니라

ready로 돌아가 자신의 차례를 기다린다.

Suspended State(가용 메모리 無)

메모리를 할당받지 못하거나 빼앗긴 상태의 경우 Suspended를 붙인다.

 

메모리를 빼앗기게 경우 지금까지 했던 작업을 세이브하기 위해 사진을 찍어 놓는다(Memory image)

메모리 이미지는 Swap devicd(HDD)라는 프로그램 정보를 저장하기 위한 특별한 파일 시스템에 저장하는데 이렇게 스왑에 저장하면서 자리를 물러나는걸 Swap out 다시 메모리를 할당받아 Swap에서 이미지를 들고 나와 작업을 재개하는걸 Swap in이라 한다.

 

Terminated/Zombie State

프로세스가 수행이 끝나고 바로 종료하면 좋겠지만 우리의 OS는 철저한 자원관리를 위해 해당 프로세스가 어떠한 자원을 빌려 썼고 무슨 작업을 했는지 조사를 한다.

프로세스 입장에서는 모든 자원을 반납했기에 죽어있지만 이후 프로세스의 관리를 위한 정보수집을 위해 커널 내에 일부 PCB정보가 남아있는 상태로 죽지 않은 상태와 비슷하여 좀비 상태라고도 부른다

 

이러한 관리를 하는 이후 같은 프로세스가 재동 작시 정보를 활용하여 효율적인 자원관리를 하기 위함이다.

 

프로세스 관리를 위한 자료구조

스케쥴러에 의해 프로세스가 레디 리스트 쌓이고 어떠한 자원이 필요해 Asleep에 들어간 경우 각 자원에 따라 각각 다른 리스트로 들어가 관리되며 자원을 확보하면 다시 레디 리스트로 들어간다.

인터럽트(Interrupt)

예상치 못한, 외부에서 발생하는 이벤트를 말하며 쉽게 말해 작업 도중 방해받는 것이다.

인터럽트 처리 과정

Pi 작업 도중 인터럽트가 발생하면 커널이 개입하여 프로세스를 중단하고 현재까지 작업 중이던 흐름/문맥(Context)을 잊지 않도록 Saving 하고 인터럽트를 핸들링한다 , 인터럽트를 핸들링하기 위해 어떤서비스를 할지 찾고 서비스를 해준다. 다시 본래의 작업을 하기위해 흐름을 가져와 복구를 하는데  Pi가 잠시 자리를 비운 사이 대기 중이던 다른 프로세스 Pj가 있으면 해당 프로세스를 돌리고 있으므로 Pi는 ready로 들어간다.

 

Context Switcing(문맥 교환)

Context

프로세스와 관련된 정보들의 집합을 말하며 이 정보들은 CPU와 두 군데 저장이 된다.

CPU register context는 CPU안에

그 외 코드, 데이터, 스택, PCB 정보는 메인 메모리에 저장된다.

 

예를 들어 Pi라는 프로세스가 Interrupt가 발생하면 저장하는 Context는 무엇일까?

인터럽트 발생으로 뺏기는 자원은 CPU이므로  CPU안에 있는 CPU register context를 saving 한다.

 

Pi가 잠시 자리를 비우면서 CPU에 자리가 생겼고 이때 이전에 잠시 자리 비운 Pj가 이 CPU를 할당받으면  Pj의 Context restoring 하여 프로세스를 복구한다.

 

Context Switching/Process Switcing 이란 이러한 Context Saving과 Context Restoring를 묶은 것이다. 

실행 중인 프로세스의 콘텍스트를 저장하고 재 실행할 프로세스의 콘텍스트를 복구하는 일이다.

콘텍스트 스위칭은 커널의 개입으로 이루어진다.

 

이러한 Context Swicing에  소용되는 비용은 OS마다 다르나 OS의 성능에 큰 영향을 준다 

 

Context Switching에 소요되는 비용은 OS마다 다르나 보통 우리는 굉장히 많은 프로세스를 사용하기 때문에 잦은 Context switching이 발생하고 이는 OS의 성능에 큰 영향을 준다.

 

따라서 OS 성능 향상에 있어 Context Switching을 줄이는 것이 중요하며 이는 thead사용 등으로 줄일 수 있다.