Frog is cry

운영체제 : 2-프로세스 개념 본문

자격증/정보처리산업기사

운영체제 : 2-프로세스 개념

Frog is cry 2020. 7. 18. 20:55

1장 프로세스의 개념

파일로 작성된 프로그램은 로더(Loader)에 의해 주기억 장치에 상주되어 CPU에 의해서 처리된다.

이때 주기억 장치에서 상주된 프로그램이 CPU에 의해서 처리되는 상태를 프로세스라고한다.

> CPU에 의해서 현재 실행되고 있는 프로그램이다.

> PCB(Process Control Block, 프로세스 제어 블록)의 존재로서 명시되는 것이다.

> 지정된 결과를 얻기 위한 일련의 계통적 동작이다.

> 목적 또는 결과에 따라 발생하는 사건들의 과정이다.

> 비동기적 행위를 일으키는 주체이다.

> 프로시저가 활동중인 상태를 말한다.

> 실행중인 프로시저의 제어 궤적이다.

> CPU가 할당되는 실체이다.

> 운영체제가 관리하는 최소 단위의 작업(프로그램)이다.

 

프로세스의 상태

1) 프로세스 상태 전이도

프로세스 상태 전이도는 CPU를 사용할 때와 사용하기 전, 입출력을 행는 상태로 실행(Run), 준비(Ready), 대기(Block)로 구분할 수 있고 이러한 상태를 논리적으로 도식해보면 다음과 같다.

> 보조 기억 장치에 존재하는 A.EXE가 사용자에 의해서 실행한다.

> A.EXE는 스풀(Spool)로 이동한다.

> 스풀에 있던 실행 프로그램 파일이 주기억 장치로 적재(Loading)된다.(Job Scheduler에 의해서).

> 주기억 장치에 있는 A.EXE는 준비(Ready) 상태가 된다.

> A.EXE가 실행(Run) 상태가 된다(Process Scheduler 에 의해서).

> A.EXE는 정해진 시간 할당량(Time Slice, Quantum)에 따라 다시 준비 상태가 된다(Time Run Out).

> A.EXE가 자체적인 입출력(I/O) 행위가 요구되면 대기(Block) 상태가 되고 채널에 의해 입출력이 행해진다

> 입출력 수행이 끝나면 다시 준비 상태가 된다(Wake up).

> 보류 상태에서 준비가 안 된 입출력이 요구되면 잠시 중단되어서 중단된 봉쇄 상태(Suspended)가 된다.

> 보류 상태에서 실행 상태로 전이될 수 없으며 준비 상태에서 대기 상태로 전이될 수도 없다.

 

2) 주요 프로세스 상태

하나의 프로세스는 다음과 같이 3가지 주요 상태로 존재하게 된다. 실행(CPU 사용)을 위해 준비하고 있는 상태에 있다가 실행(Run)되며, 실행 중에 있다가도 필요에 따라서 대기(Block)하고 있는 상태로 있게 된다.

 

준비(Ready) 상태

> 프로세스가 처리기(CPU)를 사용하고 있찌는 않지만 언제든 사용할 수 있는 상태이다.

> 프로세스가 처리기의 배정을 기다리고 있는 상태이다.

> 다른 프로세스 실행을 위해서 일시적으로 정지해 있는 상태이다.

> CPU에 의해 처리되기 위해 주기억 장치에 존재하는 상태이다.

 

실행(Run) 상태

> 프로세스가 CPU를 차지하고 있는 상태이다.

> 프로세스의 명령이 실행되고 있는 상태이다.

 

대기(Block, Wait, 보류) 상태

> 프로세스가 어떤 사건이 일어나기를 기다리고 있는 상태이다.

> 처리 속도가 느린 I/O(입출력) 작업중인 상태이다.

> 외부적인 사건이 생길 때까지 실행할 수 없는 상태이다.

 

스풀(Spool)과 버퍼링

스풀(Spool) :

프로그램과 이를 이용하는 I/O(입출력) 장치와의 속도 차를 극복하기 위한 장치로 대부분 하드 디스크가 중재한다.

버퍼링(Buffering) : 

CPU와 입출력 장치와의 속도 차이를 줄이기 위해 메모리(주기억 장치의 일부분)가 중재한다. 버퍼링은 한 레코드를 읽어서 CPU가 그것에 대한 작업을 시작함과 동시에 입출력 장치가 필요한 레코드를 미리 읽어 CPU에 저장해 두고 CPU가 필요한 레코드를 읽기 위해 기다리는 일이 없도록 한다.

 

인터럽트(Interrupt) 처리

1) 인터럽트

프로세스가 수행중에 다른 프로세스를 수행하기 위하여 현재 수행중인 프로세스를 중단하거나 외부 입력 장치에 의해 프로세스가 중단되는 상태이다. 인터럽트는 어떤 이유에서든 H/W적, S/W 적으로 현재 프로세스를 중단시키는 모든 행위라고 할 수 있다.

 

2) 인터럽트 처리를 위한 작업 순서

1. 인터럽트가 발생하면 운영체제가 제어권을 받는다.

2. 운영체제는 인터럽트 받은 현재의 프로세스 상태를 저장한다.

3. 운영체제는 인터럽트의 정보를 분석하여 지정되어 있는 루틴으로 제어권을 넘겨준다.

4. 인터럽트 처리 루틴이 인터럽트를 처리한다.

5. 인터럽트가 걸렸던 이전 프로세스의 상태로 복구된다.

6. 인터럽트가 걸렸던 시점 이후부터 프로세스가 실행된다.

 

인터럽트의 종류

1) SVC(SuperVisor Call) 인터럽트

운영체제의 제어 프로그램인 감시 프로그램(Supervisor Program)을 호출하면 SVC인터럽트가 발생한다.

운영체제에서 중추적인 역할을 하는 감시 프로그램의 호출은 사용자로부터 운영체제를 보호하거나 입출력 수행 루틴 호출, 기억 장치 할당 루틴, 오퍼레이터와의 대화 등을 위해 발생하는 인터럽트이다.

 

2) 입출력(Input/Output) 인터럽트

하드웨어적 인터럽트로 입출력 채널 확인, 준비, 할당, 완료 시에 발생한다. 프로세스 실행(R

un) 상태에서 I/O을 처리하기 위해 대기(Block) 상태로 전이되고 필요한 I/O을 요구할떄 발생한다. 키 입려긍ㄹ 한다던지 출력하는 경우이다.

 

3) 외부(External) 인터럽트

현재 운영 중인 운영체제 소속이 아닌 외적인 요인(H/W, S/W 모두)로부터 발생한다. 인터럽트 시계에 의해 프로세스가 시간 할당량이 종료된 경우, 웹 서버나 프린트 서버를 운영하고 있는 상태에서 외부로부터 인터럽트 처리 신호가 왔을 경우, 즉 원격 접속을 하여 웹 서버중지 명령 신호나 클라이언트에서 프린터 서버에 출력 명령 신호를 보내올 때 발생하는 경우이다.

 

4) 재시작(Restart) 인터럽트

사용자에 의해서 운영체제를 메모리에 다시 상주시킬 때 발생한다. 사용자가 Ctrl + Alt + Delete를 입력하거나 Reset를 이용하여 시스템을 재부팅 하는 경우이다.

 

5) 프로그램 검사(Program Check) 인터럽트

프로그램 명령어를 수행하는 과정에서 부분적으로 발생되는 문제들에 의해 발생한다.

데이터 연산 과정에서 Overflow나 Underflow 상태 시 , 나눗셈에서 분모가 0인 경우, 기억 장치의 제한된 영역을 사용하는 명령 등으로 프로그램이 정상 수행되지 않고 시스템이 중지하거나 오류 메세지를 출력하고 운영체제로 복귀하는 경우이다.

 

6) 기계 검사(Hardware Check) 인터럽트

컴퓨터 시스템의 기계 고장으로 발생하는 인터럽트이다.

 

3. 문맥 교환(Context Switching)

1) 문맥교환의 개념

다중 프로그래밍 시스템에서 CPU가 할당되는 프로세스를 변경하기 위하여 현재 CPU를 사용하여 실행되고 있는 프로세서의 상태 정보를 저장하고 제어권을 인터럽트 서비스 루틴(ISR)에게 넘기는 작업을 문맥 교환이라고 한다.

 

문맥교환 위치

> 프로그램 실행 : 인터럽트 발생

> 프로그램 중단 : 현재 처리중인 프로그램 잠시 중단

> 문맥 교환 : 두 개의 프로그램 정보 교환

> 인터럽트 처리 : 새롭게 실행된 프로그램 처리

> 인터럽트 서비스 루틴 : 새롭게 실행된 프로그램의 부가적인 서비스 루틴 수행

> 프로그램 중단 부분 재실행 : 중단 되었던 기존에 프로그램 실행

 

2) 문맥 교환과 시간 할달량

문맥 교환과 인터럽트

CPU는 하나의 프로세스 정보만을 기억한다. 여러 개의 프로세스가 실행되는 다중 프로그래밍 환경에서 CPU는 각각의 프로세스의 정보를 저장했다 복귀하고 다시 저장했다 복귀하는 일을 반복한다. 프로세스의 저장과 복귀는 프로세스의 중단과 실행을 의미한다. 프로세스의 중단과 실행 시 인터럽트가 발생하므로, 문맥 교환이 많이 일어난다는 것은 인터럽트가 많이 발생한다는 것이다.

 

문맥 교환과 시간 할당량

프로세스들 시간 할달량은 시스템 성능의 중요한 역할을 한다. 시간 할당량이 적을수록 사용자 입장에서는 여러 개의 프로세스가 거의 동시에 수행되는 느낌을 갖지만 인터럽트의 수와 문맥 교환의 수가 늘어난다. 프로세스의 실행을 위한 부가적인 활동을 오버헤드(간접 부담 비용)라고 하는데, 이 또한 문맥 교환 수와 같이 늘어나게 된다. 정리하면 다음과 같다.

시간 할달량 적어지면 : 

문맥 교환 수, 인터럽트 횟수, 오버헤드가 증가하지만 여러 개의 프로세스가 동시에 수행되는 느낌을 갖는다.

 

시간 할달량이 커지면 : 

문맥 교환 수, 인터럽트 횟수, 오버헤드가 감소하지만 여러 개의 프로세스가 동시에 수행되는 느낌을 갖지 못한다.

 

프로세스 제어 블록(PCB : Process Control Block)

PCB(Process Control Block)는 운영체제 내에서 한 프로세스의 존재를 정의한다. 즉, 여러개의 프로세스를 수행하는 다중 프로그래밍 환경 하에서 각 프로세스를 구분하기 위한 프로세스 정보 블록이다.

 

1) 프로세스 제어 블록(PCB)의 항목

프로세스 식별자 :

> 프로세스 들을 구분할 수 있는 태그, 명칭, 고유 이름이다.

프로세스 현재 상태 :

> 프로세스의 현재 상태(준비, 실행, 대기 상태)를 기억시킨다.

프로그램 카운터(계수기) :

> 다음에 실행되는 명령어의 주소를 기억시킨다.

프로세스 우선순위 :

> 프로세스의 우선순위에 대한 정보를 기억시킨다.

프로세스가 적재된 기억 장치 부분을 가리키는 포인터 :

> 프로세스가 시작되는 기억 장치의 시작 번지(CS : 코드 세그먼트 레지스터를 기억 시킨다.

프로세스에 할당된 자원을 가리키는 포인터 :

> 프로세스 처리 중에 필요한 자원의 정보를 갖고 있는 기억 장소의 시작 번지를 기억시킨다.

처리기(CPU) 레지스터 정보 :

> CPU 내 범용 레지스터(AX, BX, CX, DX), 데이터 레지스터(SP, BP, SI, DI), 세그먼트 레지스터(CS, DS, ES, SS)등이 갖고 있는 값들을 기억시킨다.

CPU의 각종 레지스터 상태를 가리키는 포인터 : 

> CPU에 1비트로 구성된 상태 레지스터의 비트열 값을 기억시킨다.

계정 정보 :

> CPU 사용 시간의 정보(Quantum), 각종 스케쥴러에 필요한 정보를 기억시킨다.

기억 장치 관리 정보 : 

> 프로그램이 적재될 기억 장치의 상한치, 하한치, 페이지 테이블 등의 정보를 기억시킨다.

입출력 정보 :

> 프로세스 수행 시 필요한 주변 장치, 파일들의 정보를 기억시킨다.

부모 프로세스를 가리키는 포인터 :

> 자신을 생성한 상위 프로세스의 번지를 기억시킨다.

자식 프로세스를 가리키는 포인터 :

> 자신이 생성한 하위 프로세스의 번지를 기억시킨다.

 

 

 

 

 

 

Comments