택시짱의 개발 노트

5장. 프로세스 관리 본문

카테고리 없음

5장. 프로세스 관리

택시짱 2021. 3. 2. 01:25

www.yes24.com/Product/Goods/90124877

 

운영체제와 정보기술의 원리

컴퓨터 운영체제와 정보기술의 기본 원리 및 핵심 철학을 설명한 컴퓨터 입문서온라인 공개강좌 KOCW에서 꾸준히 호평 받아온 이화여대 반효경 교수의 컴퓨터 입문서이다. 이제는 시대의 흐름에

www.yes24.com

반효경 교수님이 출판하신 운영체제와 정보기술의 원리를 참고하여 작성하였습니다.

 

1. 프로세스의 개념

프로세스(process)란 실행 중인 프로그램(program in execution)을 뜻한다. 디스크에 실행파일 형태로 존재하던 프로그램이 메모리에 올라가서 실행되기 시작하면 비로소 생명력을 갖는 프로세스가 되며, 프로세스는 CPU를 획득해 자신의 코드를 수행하기도 하고, 때로는 CPU를 반환하고 입출력 작업을 수행하기도 한다. 그러다가 자신의 임무를 다 수행하고 나면 종료되어 사라지게 된다.

 

프로세스의 문맥이란 프로세스가 현재 어떤 상태에서 수행되고 있는지 정확히 규명하기 위해 필요한 정보를 의미한다.

프로세스의 문맥은 그 프로세스의 주소 공간(코드, 데이터, 스택 상태)을 비롯해 레지스터에 어떤 값을 가지고 있었는지와, 시스템 콜 등을 통해 커널에서 수행한 일의 상태, 그 프로세스에 관해 커널이 관리하고 있는 각종 정보등을 포함하게 된다.

 

프로세스의 문맥을 크게 세 가지로 분류하면 하드웨어 문맥, 프로세스의 주소 공간, 커널상의 문맥으로 나누어볼 수 있다.

 


2. 프로세스의 상태

프로세스의 상태는 실행(running), 준비(ready), 봉쇄(blocked, wait, sleep)의 세 가지로 구분할 수 있다.

실행 상태는 프로세스가 CPU를 보유하고, 기계어 명령을 실행하고 있는 상태를 가리킨다. 일반적인 컴퓨터 시스템내에는 CPU는 하나뿐이므로 컴퓨터 내에서 여러프로세스가 동시에 수행된다고 해도 실제로 실행 상태에 있는 프로세스는 매 시점 하나뿐이다.

준비 상태는 프로세스가 CPU만 보유하면 당장 명령을 실행할 수 있지만 CPU를 할당 받지 못한 상태를 가리킨다.

봉쇄 상태는 CPU를 할당받더라도 당장 명령을 실행할 수 없는 프로세스의 상태를 말한다. 봉쇄 상태의 예로는 프로세스가 요청한 입출력 작업이 진행중인 경우이다.

 

이 밖에 프로세스가 생성 중이거나 종료 중인 일시적 상태를 각각 시작(new) 상태, 완료(terminated) 상태 라고 한다.

시작 상태는 프로세스가 시작되어 그 프로세스를 위한 각종 자료구조는 생성되었지만 아직 메모리 획득을 승인받지 못한 상태이다.

완료 상태는 프로세스가 종료되었으나 운영체제가 그 프로세스와 관련된 자료구조를 완전히 정리하지 못한 상태이다.

 

하나의 프로세스는 위의 상태 중 어느 한 상태에 머물러 있게 된다.

 

실생시킬 프로세스를 변경하기 위해 원래 수행 중이던 프로세스의 문맥을 저장하고 새로운 프로세스의 문맥을 세팅하는 과정을 문맥교환(context switch)이라고 한다. 문맥교환이 일어나는 경우는 타이머 인터럽트가 발생하는 경우 외에도 실행 상태에 있던 프로세스가 입출력 요청 등으로 봉쇄 상태로 바뀌는 경우를 들 수 있다.

 

준비 상태에 있는 프로세스들 중에서 CPU를 할당받을 프로세스를 선택한 후 실제로 CPU의 제어권을 넘겨받는 과정을 CPU 디스패치(dispatch)라고 한다.

 


3. 프로세스 제어블록

프로세스 제어블록(process control block:PCB)이란 운영체제가 시스템내의 프로세스들을 관리하기 위해 프로세스마다 유지하는 정보들을 담는 커널 내의 자료구조를 뜻한다.

 

PCBsms 다음과 같은 요소들로 구성되어 있다.

- 프로세스의 상태(process state)

- 프로그램 카운터(program counter)의 값

- CPU 레지스터(CPU register)의 값

- CPU 스케쥴링 정보(CPU scheduling information)

- 메모리 관리 정보(memory management information)

- 자원 사용 정보(accounting information)

- 입출력 상태 정보(I/O status information)

 

프로세스의 상태는 CPU를 할당해도 되는지 여부를 결정하기 위해 필요하다.

프로그램 카운터값은 다음에 수행할 명령의 위치를 가리킨다

CPU 레지스터값은 CPU 연산을 위해 현 시점에 레지스터에 어떤 값을 저장하고 있는지를 나타낸다.

CPU 스케쥴링 정보와 메모리 관리 정보는 각각 그 프로세스의 CPU 스케쥴링과 메모리 할당을 위해 필요한 정보이다.

자원 사용 정보는 사용자에게 자원 사용 요금을 계산해 청구하는 등의 용도로 사용된다.

입출력 상태 정보는 프로세스가 오픈한 파일 정보 등 프로세스의 입출력 관련 상태 정보를 나타낸다.

 


4. 문맥교환

문맥교환(context switch)이란 하나의 사용자 프로세스로부터 다른 사용자 프로세스로 CPU의 제어권이 이양되는 과정을 뜻한다.

 

사용자 프로세스가 CPU를 할당받고 실행되던 중에 타이머 인터럽트가 발생하면 CPU의 제어권은 운영체제에게 넘어가게 된다. 그러면 운영체제는 타이머 인터럽트 처리루틴으로 가서 직전까지 수행 중이던 프로세스의 문맥을 저장하고 새롭게 실행시킬 프로세스에게 CPU를 이양한다.

 

문맥교환에 소요되는 시간은 시스템 입장에서 볼 때 일종의 오버헤드라고 할 수 있다. 이는 문맥교환 중에 일어나는 작업이 실제 시스템에게 유용한 작업이 아니기 때문이다. 따라서 타이머에 CPU 할당시간을 아주 작게 세팅해 프로세스 간 문맥교환이 빈번하게 발생하도록 하면 이에 드는 오버헤드가 상당히 커진다. 또 그 반대로 CPU 할당시간을 너무 크게 설정하면 시분할 시스템의 의미가 퇴색하게 되므로 적절한 CPU 할당시간을 정하는것이 중요하다.

 


5. 프로세스를 스케쥴링하기 위한 큐

운영체제는 준비 상태에 있는 프로세스들을 줄 세우기 위해 준비 큐(reday queue)를 두고 준비 큐의 제일 앞에 줄 서 있는 프로세스에 제일 먼저 CPU를 할당한다.

 

운영체제는 특정 자원을 기다리는 프로세스들을 줄 세우기 위해 자원별로 장치 큐(device queue)를 둔다.

 

자원 큐는 여러 프로세스가 공유 데이터에 동시에 접근하려고 할 경우 공유 데이터를 기다리는 큐에 줄 서게 하여 현재 그 데이터를 사용하고 있는 프로세스가 데이터를 반납하기 전까지는 접근하지 못하게 하고, 반납할 경우 큐에 줄 서 있는 순서대로 데이터의 접근 권한을 주는 방법을 사용한다.

 

이와 같이 프로세스의 상태 관리는 커널의 주소 영역 중 데이터 영역에 다양한 큐(queue)를 두어 수행하게 된다.

 

운영체제는 준비 큐(ready queue)와 장치 큐(device queue)외에 작업 큐(job queue)를 추가로 유지한다.

작업 큐는 시스템 내의 모든 프로세스를 관리하기 위한 큐로, 프로세스의 상태와 무관하게 현재 시스템 내에 있는 모든 프로세스가 적업 큐에 속하게 된다. 그러므로 작업 큐에 있다고 해서 반드시 메모리를 가지고 있는 것은 아니다.

준비 큐에 속한 프로세스들을 준비 상태에 있고, 장치 큐에 속한 프로세스들은 봉쇄 상태에 있으므로 프로세스는 상태 변화에 따라 준비 큐와 장치 큐를 오가며 실행된다. 작업 큐가 가장 넓은 개념이고 준비 큐와 장치 큐에 있는 프로세스들은 모두 작업 큐에 속해 있다.

 

운영체제는 준비 큐와 다양한 작업 큐를 연결리스트를 이용하여 구현 하고 있다.

 


6. 스케쥴러

스케줄러(scheduler)란 어떤 프로세스에게 자원을 할당할지를 결정하는 운영체제 커널의 코드를 지칭한다.

스케쥴러에는 장기 스케쥴러(long term scheduler)와 단기 스케쥴러(short term scheduler)가 있다.

 

장기 스케쥴러는 작업 스케쥴러(job scheduler)라고 부르며, 어떤 프로세스를 준비 큐에 진입시킬지 결정하는 역활을 한다.

단기 스케쥴러는 CPU 스케쥴러라고도 하며, 준비 상태의 프로세스 중에서 어떤 프로세스를 다음번에 실행 상태로 만들 것인지 결정하는 역활을 한다.

 

스케쥴러는 종류에 따라 각각 고유한 특성을 가진다. 단기 스케쥴러는 밀리초 정도의 시간 단위로 매우 빈번하게 호출되기 때문에 수행 속도가 충분히 빨라야 한다. 반면 장기 스케쥴러는 수십 초 내지 수 분 단위로 가끔 호출되기 때문에 상대적으로 속도가 느린 것이 허용된다.

 

하지만 현대의 시분할 시스템에서 사용되는 운영체제는 일반적으로 장기 스케쥴러를 두지 않는 경우가 대부분이다.

그래서 중기 스케쥴러가 나오게 되었고 이 중기 스케쥴러는 너무 많은 프로세스에게 메모리를 할당해 시스템의 성능이 저하되는 경우 이를 해결하기 위해 메모리에 적재된 프로세스의 수를 동적으로 조절하는 역활을 한다.

 


8. 프로세스 간의 협력

프로세스는 각자 자신만의 독립적인 주소 공간을 가지고 수행되며 프로세스가 다른 프로세스의 주소 공간을 참조하는 것은 허용되지 않는다.

 

프로세스 간의 협력 메커니즘을 위해 운영체제가 제공하는 대표적인 메커니즘으로는 IPC(Inter-Process-Communication)가 있다.

IPC란 하나의 컴퓨터 안에서 실행 중인 서로 다른 프로세스 간에 발생하는 통신을 말한다.

 

IPC의 대표적인 방법으로는 메시지 전달(message passing)방식과 공유메모리(shared memory)방식이 있다.

 

메시지 전달 방식은 프로세스 간에 공유 데이터를 일체 사용하지 않고 메시지를 주고 받으면서 통신하는 방식이다. 이때 두 프로세스의 주소 공간이 다르므로 메시지 전달을 직접 할 수는 없으며 커널이 그 역활을 하게 된다.

 

공유메모리 방식에서는 프로세스들이 주소 공간의 일부를 공유한다. 원칙적으로 서로 다른 프로세는 각자의 독립적인 주소 공간을 가지므로 각각의 프로세스는 자신의 주소 공간에 있는 내용을 볼 수 있다. 그러나 운영체제는 공유메모리를 사용하는 시스템 콜을 지원해, 서로 다른 프로세스들이 그들의 주소 공간 중 일부를 공유할 수 있도록 한다.

반응형
Comments