[OS] Chapter 3. Processes : 프로세스의 이해

지코·2025년 5월 14일

OperatingSystem

목록 보기
2/4
post-thumbnail

📌 프로세스(Process)

  • 실행 중인 프로그램.
  • 운영체제 내 작업의 단위.
  • 프로세스는 작업을 완료하기 위해 특정한 자원(resource)들을 필요로 한다. ➡️ CPU time, files, memory, I/O devices

구조

  • Text section : 실행 가능한 코드들이 있는 영역.
  • Data section : 전역 변수들을 저장하는 영역. ➡️ initialized / unintialized 나눠짐
  • Heap section : 프로그램이 실행되는 동안 동적으로 할당되는 변수들이 저장되는 영역.
  • Stack section : 함수가 실행되는 동안 지역 변수들이 있는 영역.

상태 (state)

  • New : 프로세스가 만들어진 상태. ➡️ fork() 를 통해 생성
  • Running : 명령어들이 실행되고 있는 상태.
  • Waiting : 프로세스가 어떤 이벤트가 발생하기를 기다리는 상태.
    Ex> 입출력 완료 or 신호 수신
  • Ready : 프로세스가 프로세서에 할당되기를 기다리는 상태.
  • Terminated : 프로세스가 실행을 마친 상태.

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

: 각 프로세스들은 운영체제에서 PCB라는 형태로 표현된다.

PCB가 포함하고 있는 것들 🧱

  • 프로세스의 상태 (Process State) : 위에서 언급한 new, run, wait, ready, terminate 다섯 가지 중 하나이다.
  • 프로그램 카운터 (Program Counter) : fetch해 올 메모리의 주소를 담는다.
  • CPU 레지스터 (CPU Register) : IR(Instruction Register), DR(Data Register), PC(Program Counter) 등을 포함하여 레지스터 정보들을 가지고 있다.
  • CPU 스케줄링 정보 (CPU Scheduling Information) : 프로세스들 사이의 실행 순서를 정하는 정보
  • 메모리 관리 정보 (Memory management Information) : 동적 할당 등에 관한 정보
  • 계정 정보(Accounting Information) : 사용자에 대한 정보
  • 입/출력 상태 정보(I/O Status Information) : 어떤 파일을 open하고 close했는지 등의 정보

    ➡️ 위와 같이 구성된 PCB들을 운영체제가 관리해줘야 한다.

프로세스(Process)와 쓰레드(Thread)

〰️ 프로세스(Process)

  • 프로세스는 하나의 싱글 쓰레드를 실행하는 프로그램이다.
    (프로그램이 한 줄로 실행된다는 것을 의미❗️ 하단 쓰레드와 다른 것❗️)
  • 한번에 하나의 task만 실행이 가능하다.
  • 현대 운영체제 시스템은 프로세스가 멀티 쓰레드(Multi Thread)를 실행할 수 있게 한다. 고로, 한 타임에 여러 작업을 처리할 수 있게 한다.
    ➡️ 운영체제의 핵심 기능은 멀티태스킹멀티 프로세싱을 적용할 수 있게 하는 것 ❗️

🪡 쓰레드(Thread)

  • 하나의 싱글 쓰레드에서 파생되어, 프로세스 안에 또 다른 작은 프로세스를 의미한다.
  • 여러 개의 프로세스를 실행하는 것보다, 여러 개의 쓰레드를 실행하는 것이 훨씬 장점이 많다.


📌 프로세스 스케줄링(Process Scheduling)

멀티프로그래밍(Multiprogramming)의 목적

  • 동시에 여러 프로세스를 실행하기 위함.
  • CPU의 사용 효율을 최대화하는 것.

시분할 시스템(Time Sharing System)의 목적

  • CPU 코어를 프로세스들 사이에서 자주 변경하여, 사용자들 입장에서는 각 프로세스들이 동시에 실행되고 있는 것처럼 보이게 하기 위함.

스케줄링 큐(Scheduling Queue)

  • 프로세스들이 Ready 상태이고 CPU의 코어에서 실행하기를 기다리고 있을 때, 프로세스들이 시스템 상에 들어오면 ready queue 에서 대기한다.
  • running 상태에 있던 프로세스들은 보통 다시 ready queue로 돌아가지만, 특정한 이벤트가 발생하기를 기다리는 프로세스들은 wait queue에 들어간다.
  • ready queue, wait queue 와 같은 큐들은 일반적으로 PCB들의 연결 리스트(linked list)로 구현된다.
  • 아래 그림은 ready queuewait queue 를 표현한 그림이다.
  • 프로세스 스케줄링을 다음과 같이 큐잉 다이어그램으로 표현했다.

문맥 교환 (Context Switch)

  • 문맥(context)이란? 프로세스가 사용되고 있는 상태로, 모두 PCB에 저장되어 있다.
  • interrupt 발생 시, 현재 실행되고 있는(running) 프로세스의 주소를 PC(program counter)에 저장해놓고, 재개 가능 시(ready queue에 있다가 CPU의 running 상태를 획득했을 때) 문맥을 복구시킨다.
  • 문맥 교환이란? 다른 프로세스에게 CPU core를 넘겨주는 것
1) 현재 프로세스의 state를 PC에 저장하기
2) 다른 프로세스의 state를 restore해오기

아래 그림은 프로세스와 프로세스 사이의 문맥 교환을 나타낸 그림이다.
프로세스 P0를 진행하다가 interrupt 혹은 system call이 발생하면 현재 프로세스 P0의 상태를 PCB0에 저장하고, 프로세스 P1의 상태를 PCB1으로부터 불러온다.
P1의 실행이 종료되면, P1의 상태를 PCB1에 저장하고, P0의 상태를 PCB0으로부터 불러온다.


📌 프로세스의 연산들(Operations on Processes)

부모 프로세스(Parent Process)와 자식 프로세스(Child Process)

➡️ 하나의 프로세스는 또 다른 프로세스를 생성할 수 있다. 
➡️ fork()를 통해 위와 같은 프로세스들의 트리 관계가 성립될 수 있다.

프로세스 실행의 두 가지 경우

1️⃣ 부모 프로세스와 자식 프로세스가 동시에 실행되는 경우
2️⃣ 부모 프로세스가 자식 프로세스가 종료될 때까지 기다리는 경우

프로세스 주소 공간의 두 가지 경우

1️⃣ 자식 프로세스가 부모 프로세스와 똑같은 일을 수행
2️⃣ 자식 프로세스가 부모 프로세스와 다른 새로운 일을 수행

부모 프로세스와 자식 프로세스의 실행 과정

➡️ fork()가 진행되면 child process가 실행되고, parent process는 wait 상태가 된다. 
➡️ child process가 종료되었을 때 parent process가 실행된다. 

프로세스의 종료

  • 기본적으로 마지막 문장이 끝나면 프로세스가 종료된다.
  • 프로그램 중간에 종료하고 싶다면 exit() 이라는 시스템 콜을 이용할 수도 있다.
  • 프로세스가 종료되면 OS는 메모리를 다시 돌려받고 모든 자원들을 회수한다.
    Ex> 할당되었던 메모리, 열려 있던 파일들, 입출력 버퍼들 등 ..

좀비 프로세스(Zombie Process)와 고아 프로세스(Orphan Process)

  • 좀비 프로세스 : 프로세스가 종료되었으나 부모 프로세스가 아직 wait() 명령을 호출하지 않아 삭제되지 않는 프로세스들을 좀비 프로세스라고 한다.
  • 고아 프로세스 : 부모 프로세스가 자식 프로세스를 생성했으나, 자식 프로세스가 실행될 때 부모 프로세스가 wait()하지 않고 return해서 종료된 경우 해당 자식 프로세스를 고아 프로세스라고 한다.

Reference

🦖 운영체제 공룡책 강의

profile
꾸준함이 무기

0개의 댓글