CS/OS

[OS] 프로세스

겜도리도리 2022. 8. 2. 22:14
반응형

개요

디스크에 있는 데이터 파일을 프로그램이라고 하고, 메모리에 올라와 실행 중인 프로그램을 프로세스라고 한다.

프로세스는 현대 컴퓨팅 시스템에서 작업의 단위를 뜻한다.

 

프로세스 메모리 배치

위가 높은 주소, 아래가 낮은 주소

Text(Code) 영역 : 실행 코드가 저장된다.

Data 영역 : 전역 변수들이 저장된다.

Heap 영역 : 프로그램 실행 중에 동적으로 할당되는 메모리이다.

Stack 영역 : 함수를 호출할 때 데이터(함수 매개변수, 복귀 주소 및 지역 변수)를 임시로 저장하는 메모리이다.

 

Text, Data 영역의 크기는 고정되어 있어 프로그램 실행 시간 동안 크기가 변하지 않는다.

Heap, Stack 영역은 프로그램 실행 중에 동적으로 줄어들거나 커질 수 있다. 운영체제는 Stack과 Heap 영역이 서로 겹치지 않도록 해야 한다.

 

프로세스 상태

State diagram

New : 프로세스가 생성 중인 상태

Ready : 프로세스가 프로세서에 할당되기를 기다리는 상태

Runnig : 프로세스가 실행 중인 상태

Waiting : 프로세스가 입출력 완료, 신호의 수신과 같은 이벤트가 일어나기를 기다리는 상태

Terminated : 프로세스 실행이 종료된 상태

 

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

프로세스 상태 : 프로세스의 상태를 나타낸다.

프로그램 카운터 : 다음 실행할 명령어의 주소를 가리킨다.

레지스터 : 누산기(Accumulator), 인덱스 레지스터, 스택 레지스터, 범용 레지스터 등등이 포함된다. 프로세스가 다시 스케줄 되기 위해서 인터럽트 발생 시 저장되어야 한다.

메모리 관련 정보 : Base 레지스터와 Limit 레지스터의 값을 저장한다. 페이지 테이블, 세그먼트 테이블과 같은 정보를 포함할 수도 있다.

회계 정보 : CPU 사용시간, 시간제한, 계정 번호, 프로세스 번호 등을 포함한다.

입출력 상태 정보 : 프로세스에 할당된 입출력 장치들과 열린 파일의 목록 등을 포함한다.

 

프로세스 스케줄링

프로세스가 시스템에 들어가면 준비 큐(일반적으로 연결 리스트)에 들어가서 준비 상태가 된 후, CPU에서 실행되기를 기다린다. 준비 큐의 헤더에는 첫 번째 PCB에 대한 포인터가 저장되고 각 PCB의 준비 큐의 다음 PCB를 가리키는 포인터가 존재한다.

Ready queue

I/O 완료와 같이 특정 이벤트가 발생하기를 기다리는 프로세스는 대기 큐에 삽입된다.

Queue Diagram

새 프로세스는 처음에 준비 큐에 놓이고, 실행을 위해 선택되거나 Dispatch 될 때까지 기다린다.

Context Switching

Context switching diagram

프로세스가 I/O 요청을 보내고 대기하는 동안 CPU가 마냥 놀 수 없다. CPU 스케줄링을 통해 다른 프로세스를 CPU 코어에 할당해야 한다.

CPU 코어를 다른 프로세스로 교환하려면, 이전의 프로세스 상태를 보관하고, 새로운 프로세스의 저장된 상태를 복구해야 하는데, 이 작업을 Context switching이라고 하고 이때 PCB를 사용한다.

Context switing이 일어나면 실행 중이던 프로세스의 Context(CPU 레지스터의 값, 프로세스 상태, 메모리 관리 정보 등)을 PCB에 저장하고, 실행할 프로세스의 저장된 Context를 복구한다.

Context switching이 일어나는 동안에는 시스템이 일을 할 수 없기 때문에 그 시간만큼 오버헤드가 발생한다.

반응형

'CS > OS' 카테고리의 다른 글

[OS] 프로세스 간 통신 (IPC)  (0) 2022.08.04
[OS] 시스템 프로그램  (0) 2022.08.01
[OS] Paging  (0) 2022.06.13
[OS] VMM  (0) 2022.05.29
[OS] 커널 (마이크로 커널, 모놀리틱 커널)  (0) 2022.05.05