프로세스(Process)

OS/Theory 2016. 4. 8. 11:30

<프로세스>

프로세스는 수행 중인 프로그램이다. 프로그램과 데이터를 기본으로 정상적인 실행을 위해 필요한 환경을 시스템으로부터 부여받은 능동적인 존재이다.



<프로세스 구성 요소>

프로세스는 코드(code) 영역, 데이터 영역, 스택 영역, (heap)영역으로 구성

1. 코드 영역: 프로그램의 코드 자체

2. 데이터 영역: 프로그램의 전역 변수(global variable)나 정적 변수(static variable)의 할당을 위해 존재하는 공간

3. 스택(stack) 영역: 지역 변수(local variable) 할당과 함수 호출 시 전달되는 인수(argument)



<프로세스 제어블록(Process Control Block)>

PCB는 프로세스가 시스템에 어떤 모습으로 존재하는지에 대한 정보를 테이블 모양의 자료구조로 구성되어 있다. , 프로세스에 대한 모든 정보를 가지고 있다.

[PCB 구성요소]

PID(프로세스 번호) - 프로세스의 고유의 번호

Status(프로세스 상태) - 준비, 실행, 대기, 보류 등의 상태를 나타냄

Priority(프로세스 상태) - 스케줄링을 할 때 우선순위

PC(프로그램 카운터) - 다음에 실행될 명령어의 주소 값을 가지고 있다.

메모리 포인터 - 프로그램과 데이터가 저장되어 있는 메모리 블록 위치와 메모리 블록들에 대한 포인터 정보를 가짐

문맥 데이터 - 문맥 교환 시 CPU 레지스터 값들을 저장하는 영역

할당받은 자원들에 대한 목록 - open한 파일의 할당받은 자원들의 정보

계정 정보 - CPU를 사용한 시간 등의 정보

입출력 정보 - 진행 중인 입출력 요구 등의 정보



<프로세스 상태와 변화>

프로세스의 상태에는 생성, 준비, 실행, 대기, 보류 준비, 보류 대기, 종료 상태가 있다.



 

1. 생성 상태는 사용자가 요청한 작업이 커널에 등록되고, PCB가 만들어져 프로세스가 만들어진 다음 메모리 공간을 검사하여 충분한 공간이 있으면 메모리를 할당하면서 준비상태로 가고, 공간이 없으면 보류 준비 상태로 만든다.

2. 준비 상태는 CPU를 할당받기 위해 기다리고 있는데, CPU만 주어지면 바로 실행한 준비가 되어 있는 상태이다. 다중 프로그래밍의 경우 여러개의 프로세스가 동시에 메모리가 적재되어 동작하는데, CPU를 할당받기를 기다리고 있는데 이들을 위해 큐가 사용된다.

순서에 따라 CPU를 할당받으면 실행 상태가 되는데 이때 순서를 정하는 것을 CPU 스케줄링이라고 한다.

3. 실행 상태는 CPU를 할당받아 실행 중인 상태를 말하는데, 이것을 디스패치라고 한다.

단일 CPU는 하나의 프로세스만이 CPU를 사용할 수 있어 하나의 프로세스만이 실행 상태에 있게 되는데, 여러 개의 CPU는 동시에 여러 개의 프로세스가 실행 상태에 있을 수 있는데 이것을 다중 처리라 한다.

4. 실행 상태에서 CPU를 뺏길 수 있는 경우는 2가지가 있다.

첫번째는 CPU 스케줄링 정책에 의해 CPU를 뺏길 수 있으며, 이 경우 준비상태로 바뀌게 된다. 시간 할당량(Time Quantum)이 소진되어 뺏길 때를 시간 종료라고 하는데, 이 경우도 인터럽트가 동원되어 처리된다.

두번째는 실행 상태의 프로세스가 입출력이 필요하게 되어 시스템 콜을 하면 입출력 처리의 종료를 기다리면서 대기 상태로 바뀌게 되고, CPU는 준비 상태의 프로세스들 중 하나를 선택해 CPU가 실행시켜 준다.

Time Quantum이란?

프로세스의 수명을 말한다.

5. 대기 상태는 프로세스가 실행되다가 입출력 처리를 요청하거나, 바로 확보될 수 없는 자원을 요청하면 CPU를 양도하고 요청한 일이 완료되기를 기다리면서 큐에 저장되어 대기하는 상태이다.

요청한 일이 완료되면 다시 실행 차례를 기다리기 위해 준비상태로 가는데, 이때 인터럽트를 걸어 준비상태 큐로 들어가게 된다.

5. 보류 상태는 한정된 메모리 공간의 여유가 없어지게 되면 시스템은 당분간 메모리를 회수해도 문제가 되지 않을 프로세스들을 골라 보류시켜 메모리 공간을 확보한다. 예를 들어 우선순위가 높고 급한 프로세스에게 CPU를 주어야 하는데 다른 프로세스들이 모두 메모리를 차지 하고 있을때 발생한다.

프로세스가 메모리 공간을 뺏기고 디스크로 나가야 하는걸 스왑되어 나간다(Swapped Out)라고 하고, 나중에 다시 메모리로 들어오면 스왑되어 들어온다(Swapped In)라고 하며 두 경우를 Swapping이라고 한다.

6. 보류 준비 상태는 실행상태의 프로세스가 CPU를 반납하면서 준비 상태로 바뀔 때 메모리 공간까지 잃어야 하는 경우 보류 준비상태로 바뀐다. 메모리의 여유가 생기면 준비상태로 가고, 준비 상태의 프로세스가 전혀 없을 때 대기 상태의 프로세스를 보류 대기로(? 대기상태의 프로세스들이 메모리를 모두 차지하고 있어서) 만들고 메모리 공간이 확보되면 준비 상태로 바뀌게 된다.(CPU를 놀게하지 않기 위해)

7. 보류 대기 상태는 대기 상태일 때 메모리 공간을 잃은 상태이다. 준비 상태의 프로세스가 있다고 하더라도 메모리의 여유 공간을 더 확보하기 위해서 보류 대기 상태가 되기도 한다. 보류 대기의 프로세스는 입출력이나 기다리던 사건의 종료 시 보류 준비 상태가 된다.

8. 종료 상태는 프로세스는 할당되었던 모든 자원들이 회수되고 PCB만 커널에 남아있는 상태이다.

Copyright2014 By 휴먼사이언스

posted by 경원구