본문 바로가기
운영체제

[운영체제] 프로세스란

by 8ehrmin 2025. 5. 27.

프로세스 개념

프로세스(Process)
- 자원의 단위
- 실행중인 프로그램

 

프로세스는 실행중인 프로그램 즉 주 메모리에 적재되어 CPU에 할당받아 실행될 수 있는 프로그램이라고 볼 수 있는데요, 

디스크 Pool에 있는 작업들도 선택받아 실행될 수 있기에 내용이 조금 헷갈릴 수 있습니다.

 

하지만 오늘 자세히 살펴보고, 스스로 정의를 내려봅시다.


프로세스 배경

초기 컴퓨터는 한번에 하나의 프로그램만 실행
- 모든 제어를 프로그램이 가짐
- 모든 자원을 프로그램이 독점

 

초기에 CPU가 하나이며 단일 프로그래밍만을 하였을 때는, 다른 프로그램은 하나의 프로그램이 끝나야 했었습니다.

 

오늘날 여러 프로그램을 병행하여 실행
- 모든 제어 및 자원을 여러 프로그램이 점유할 수 있음

 

현재 웹 브라우저 쇼핑을하며 음악을 듣고, 계산기를 두들길 수 있죠?

따라서 다중 프로그래밍이 요구되고 CPU를 각 프로세스마다 전환하여 실행할 수 있도록, 다중화를 실현해야 합니다.

하나의 프로그램들을 계획적으로 관리해야 합니다.

 


프로세스 구조

스택(Stack) : 함수의 배개변수, 복귀 주소, 로컬 변수와 같은 임시적인 자료를 가지는 공간
데이터(Data) : 전역 변수와 같은 정적 변수를 가지는 공간
힙(Heap) : 실행 중 동적으로 할당되는 메모리
텍스트(Text) : 코드

프로세스 상태

프로세스 상태가 실행되는 동안 시시각각 다를 수 있는데요.

프로그램이 실행되는 동안 CPU의 점유 및 I/O 입출력 등으로 정지되거나 기다리는 상황 등 다양한 이유로 달라집니다.

이 상태는 운영체제마다 다릅니다. 

 

New : 프로세스 생성 중
Ready : 프로세스가 CPU 할당을 기다리는 중
Running : 프로세스가 실행 중
Waiting : 프로세스가 어느 사건 발생(완료 신호 등)을 기다림
Terminated : 프로세스 실행 종료

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

PCB(Process Control Block) : 프로세스 관련 정보를 저장하는 블록
- 프로세스 상태
- 프로그램 카운터 : 프로세스가 다음에 실행할 명령어 주소
- CPU 레지스터들 : 인터럽트 발생 시 처리 후 원래 상태로 돌아오기 위해 필요한 정보
- CPU 스케쥴링 정보
- 메모리 관리 정보
- 회계(account) 정보 : CPU 사용 시간, 경과 시간, 시간 제한, 프로세스 번호 등
- I/O 상태 정보 : 할당된 I/O 장치와 연관된 파일의 목록 등

프로세스 스케쥴러 

실행 가능한 프로세스 중 CPU 할당을 받을 프로세스 하나를 선택하는 역할

 

수많은 프로세스 중 CPU 할당을 받을 프로세스를 정하는 일을 수행합니다.

 

Scheduling Queue

대부분의 프로세스 들은 준비 혹은 기다리는 상태일 때 Queue(q)에 있습니다.

이러한 q들은 여러 종류가 있습니다.

Job Queue : 프로세스가 시스템에 들어오면 처음 들어가는 큐
Ready Queue : 준비 완료에서 실행을 대기하는 큐
    - 연결 리스트 : Header는 첫번 째 프로세스와 마지막 프로세스를 가리키는 포인터를 포함
Device Queue : 특정 I/O 장치를 대기하는 (연결 리스트)큐
    - 각 장치마다 하나씩 존재

 

여러 상황에서 어떤 큐를 들어가는지 보겠습니다.

  • 새로운 프로세스는 처음에 준비완료 Queue에 놓입니다.
    • Dispatch(CPU 할당) 까지 대기합니다.
  • 할당 받은 후
    1. 프로세스가 I/O 요청으로 인한 I/O 큐에 넣어짐
    2. 프로세스가 자식 프로세스를 생성 한 후, 종료를 기다림
    3. 인터럽트 결과로 CPU가 제거되고 다시 준비 완료 뷰에 넣어짐

할당 받은 후 1, 2번과 같은 경우 wait 큐에서 준비완료 큐로 이동합니다.

이렇게 모두 마친 후 종료가 되는데, 이 때 모든 자원과 PCB를 반납(deallocate)합니다.

스케줄러 (Scheduler)

스케쥴러 :  프로세스를 선택하여 처리하는 절차를 수행

 

모든 큐에 무작정 프로세스가 넣어지는 것은 아니며 상황에 적절하게 넣어져야 합니다.

또한 이는 프로세스를 보는 다양한 관점에서 다양한 종류의 스케쥴러로 나뉘게 됩니다.

 

잡 스케줄러 (Job Scheduler or 장기 스케쥴러)

잡 스케쥴러 : 디스크 Pool에서 프로세스를 선택하여 메모리에 적재 

 

잡 스케쥴러의 선택 종류
입출력 중심 프로세스 : 입출력 실행에 더 많은 시간을 소요하는 프로세스
    - 준비 완료 큐 이용율이 떨어짐

CPU 중심 프로세스 : 연산에 더 많은 시간을 소요하는 프로세스 
    - 입출력 대기 큐 이용율이 떨어짐
    - 입출력 및 주변 장치들이 사용되지 않음

 

이렇게 입출력 및 CPU 이용을 적절하고 균등하게 하는 프로세스들을 선택해야 하는 것이 중요합니다.

하지만  장기 스케쥴러는 Unix와 Window와 같은 시분할 운영체제에 없습니다.

 

이럴 때에는 중기 스케쥴러를 사용해야 합니다.

중기 스케줄러(medium term scheduler)

 중기 스케줄러 : 메모리에 적재된 프로세스 수 관리
- 메모리에 올라와 있는 프로세스의 메모리를 제거하여 다중 프로그래밍의 정도를 완화
- 제거한 후 다시 재개할 수 있도록 하는 Swaping 기법 사용

CPU 스케줄러 (CPU Scheduler or 단기 스케줄러)

CPU 스케줄러 : 실행 준비가 된 프로세스 중 하나를 선택하여 CPU 할당 

 


문맥 교환 (Context Switching)

문맥 교환 : 인터럽트 중단 이후 프로세스가 재개하기 위한 작업
문맥 교환 작업
State Save : 현재 상태를 저장하는 작업
State Restore : 연산 재개를 위한 상태 복구 작업

 

이러한 문맥 즉 Context는 프로세스 복구를 위한 (즉 프로세스와 관련된 정보) 작업이기에  PCB에 저장되어 있습니다.

이를위하여 사용하는 값 또한, PCB에 저장되어 있는 값(CPU 레지스터, 프로세스 상태, 메모리 관리 정보 등)을 사용합니다.

 

문맥 교환 빈도가 많을 수록?
문맥 교환이 진행되는 동안 시스템은 유용한 일을 수행하지 못하기 때문에 Overhead가 증가함

프로세스 연산 (Operation on Process)

프로세스 생성 (Process Creation)

프로세스는 부모 자식 관계를 가질 수 있으며 이는 Tree 구조를 형성

 

결국 루트가 있기 마련이고, 이 루트에 대한 프로세스가 무슨 일을 하는지 그리고 그 다음 프로세스는 어떤 것이 있는지 간단하게 알아 봅시다.

 

PID(프로세스 식별 번호)와 다양한 프로세스들
- init (PID : 1) : 부팅 시 다양한 프로세스를 생성하는 루트 프로세스이며 모든 사용자 프로세스의 부모 프로세스
- lthread (PID : 2) : 커널을 대신하여 작업을 수행할 프로세스를 생성하는 프로세스
- SSHD : SSH(Secure shell)를 사용하여 시스템에 접속하는 클라이언트를 관리하는 프로세스
- Login : 시스템에 직접 로그인하는 클라이언트 관리하는 프로세스

 

이렇게 init부터 하나하나 자식을 생성하여 하나의 트리 구조를 형성하게 됩니다.

 

부모 프로세스와 자식 프로세스
- 자식 프로세스는 운영체제로 부터 필요한 자원을 할당 받거나 부모의 자원을 일부 사용할 수 있음
- 부모 프로세스는 자신이 가진 자원을 자식에게 나누어 주거나 공유하여 사용할 수 있도록 제어할 수 있음

프로세스 종료 (Process Termination)

프로세스는 종료하며 모든 자원을 반환하게 됩니다.

부모-자식 관계를 갖는 프로세스의 종료 절차는 어떨까요?

연쇄식 종료(Cascading Termination) : 부모가 종료하기 이전에 자식을 먼저 종료.

물론 부모는 자식을 강제로 종료시킬 수 있으며 이를 위하여 자식의 PID를 알아야 합니다.

자식의 PID는 자식을 생성할 때 부터 부모는 알고있죠.

 

종료하는 과정에서 나타날 수 있는 프로세스
Zombie Process
: 자식 혹은 자신이 종료되었지만 wait을 호출하지 않아 프로세스 테이블에 프로세스 상태가 저장된 경우
      wait : 자식의 종료를 기다린 후 자신을 종료하며 PID 및 자원 등을 반환하며 프로세스를 종료하는 함수
 Orphan : wait을 거치지 않고 부모가 종료되었지만 자식이 살아있는 경우
      unix 혹은 window에서는 자동으로 자식 프로세스의 부모를 init 프로세스로 설정

 

'운영체제' 카테고리의 다른 글

[운영체제] 운영체제란?  (0) 2025.05.22