프로그램(Program)

Untitled

컴퓨터에서 실행될 때 특정 작업을 수행하는 일련의 명령어들의 집합이다. 특정 문제를 해결하기 위해 처리 방법과 순서를 기술하여 컴퓨터에 입력되는 일련의 명령문 집합체이며 대부분의 프로그램은 실행 중(즉, 명령어를 ‘불러들일’ 때)에 사용자의 입력에 반응하도록 구현된 일련의 명령어들로 구성되어 있다. 대부분의 프로그램들은 하드디스크 등의 매체에 바이너리 형식의 파일로 저장되어 있다가 사용자가 실행시키면 메모리로 적재되어 실행된다.

프로세스(Process)

Untitled

컴퓨터에서 실행 중인 프로그램으로써 메모리 상에서 실행되는 작업 단위를 지칭한다. 각 프로세스 별로 독립된 메모리 공간을 할당 받으며, Code, Data, Heap, Stack 구조로 이루어져있다.

PCB(Process Control Block)

Process Control Block in OS - GeeksforGeeks

Process Control Block in OS - GeeksforGeeks

프로세스가 시스템에 존재하는 동안 운영체제에서 프로세스를 용이하게 관리하기 위하여 프로세스의 메타데이터를 담고 있는 PCB(Process Control Block)이라는 자료구조를 저장하며, 프로세스의 생성과 삭제가 자주 일어나기 때문에 Linked List 형태로 관리된다. 일반 사용자가 접근하지 못하도록 항상 메모리 영역 내에 있으며, 커널 스택의 처음에 위치한다.

PCB(Process Control Block) 구조

Process Control Block in OS - GeeksforGeeks

Process Control Block in OS - GeeksforGeeks

PCB는 포인터(Pointer), PID(Process ID), 프로세스 상태(Process Status), 프로그램 카운터(Program Counter), 레지스터(Register)와 메모리 관리 정보(페이지 테이블 등), 우선순위 등을 포함한다. 각각의 항목에 들어가는 내용은 아래와 같다.

항목내용
PID프로세스 구분하기 위한 고유 식별자
Procss State프로세스의 현재 상태를 나타내며, Ready, Running, Blocked 등의 상태를 포함한다.
Program Counter다음에 수행할 명령어의 주소를 담고 있다.
CPU Register프로세스가 실행될 때 사용하는 CPU의 레지스터 값이다. 프로세스 전환시 저장되고 복원된다.
Memory Information프로세스가 사용하는 메모리 정보로, 페이지 테이블, 할당된 메모리 블록 등이 포함된다.
Owner프로세스의 소유자 정보를 나타내며, 일반적으로 사용자 ID가 저장된다.
Process Scheduling Information프로세스의 우선순위 및 스케줄링 관련 정보
Other Info

프로세스의 자원 분배

image.jpg

프로세스는 시스템 자원을 할당 받기 위하여 CPU는 한 번에 하나의 프로세스만 수행할 수 있기 때문에 멀티 태스킹을 위해서는 CPU 자원을 요구하는 프로세스들에게 시분할 방식으로 CPU 자원을 적절히 분배하여 거의 동시에 실행되게 하게 끔 하는 것이 중요하다.

이를 위해 운영체제는 시스템 자원 소요 시간을 적절히 나누어 CPU 사용 시간을 분배한다. 이러한 정책을 **CPU 스케줄링(CPU Scheduling)**이라고 하는데, 이 작업을 수행하기 위하여 프로세스는 **상태(Status)**라는 값을 가지며, 운영체제는 프로세스의 상태 데이터와 우선 순위, 대기 시간, 응답 시간 등을 고려하여 시스템 자원을 분배한다.

CPU 스케줄링(CPU Scheduling)

image.jpg

CPU는 실행 중인 프로세스가 없을 경우 Ready Queue에 있는 프로세스를 하나 선택하여 실행해야 한다. 이때, Ready Queue에서 프로세스를 선택하는 방법은 CPU Scheduler에 의해 수행된다.

CPU 스케줄링은 공평성, 효율성, 안정성 등을 보장해야 하며, Interrupt, I/O 작업이나 이벤트 대기 등 프로세스의 상태가 변화하는 상황이 발생할 때, CPU 스케줄링이 발생한다.

프로세스의 상태

image.jpg

프로세스가 지니는 상태(Status)는 프로세스의 현재 상황을 나타낸다. 프로세스는 다양한 상태를 가질 수 있으며, 각 상태는 프로세스가 어떤 작업을 수행하고 있는 지를 나타낸다.

상태내용
Created - 생성프로세스가 생성된 상태
Ready - 준비프로세스가 메모리에 로드되어 CPU 자원의 할당을 기다리는 상태
Running - 실행프로세스에 CPU 자원이 할당되어 CPU가 해당 프로세스를 실행 중인 상태
Terminated - 종료프로세스가 실행이 완료되고 종료되어 CPU 자원이 다시 시스템에 반환된 상태
Blocked - 대기프로세스가 필요한 자원(I/O 작업 등)을 기다리고 있는 상태

문맥교환(Context Switching)

Context Switching in Operating System - GeeksforGeeks

Context Switching in Operating System - GeeksforGeeks

Context Switching은 CPU가 여러 프로세스를 처리할 때 이루어지는 과정으로, 현재까지의 프로세스 상태를 저장하고, 새로운 프로세스의 저장된 상태를 다시 적재하는 과정이다.

  1. 요청 : 시스템 인터럽트, 트랩 등 Context Switching을 요청
  2. PCB 저장 : 현재 작업 중인 프로세스(Process P0)의 정보를 현재 PCB에 저장
  3. CPU 할당 : 다음 프로세스(Process P1)의 PCB 정보를 불러와 CPU를 할당