🤖 Computer Science

Process란?

정의

실행 중인 프로그램

특징

  • OS에서 작업의 단위
  • 독립된 메모리 공간을 할당 받음
  • 명령어와 데이터를 가짐
  • 작업을 완수하기 위해 특정 자원이 필요
    • CPU 시간
    • 메모리
    • 파일
    • I/O 장치

프로세스의 문맥(Context)

notion image
  • CPU 수행 상태를 나타내는 하드웨어 문맥
    • Program Counter
    • 각종 Register
  • 프로세스의 주소 공간
    • code, data, stack
  • 프로세스 관련 커널 자료 구조
    • PCB(Process Control Block)
    • Kernel Stack

프로세스의 상태(Process State)

프로세스는 상태가 변경되며 수행된다.
notion image
  • New
    • 프로세스 생성
  • Ready
    • 메모리 등 다른 조건을 모두 만족하고 CPU를 기다리는 상태
  • Running
    • CPU를 점유하고 instruction을 수행하는 상태
  • Waiting(Blocked)
    • CPU를 주어도 당장 instruction을 수행할 수 없는 상태
    • 자신이 요청한 event(ex. I/O)가 즉시 만족되지 않아 기다리는 상태
    • 자신이 요청한 event의 I/O 완료나 신호가 수신되면, Ready
  • Suspended(Stopped)
    • 외부적인 이유로 프로세스의 수행이 정지된 상태
    • 프로세스는 Mid-term Scheduler에 의해 통째로 디스크에 swap out 된다.
    • 외부에서 resume 해주면 Active
  • Terminated
    • 프로세스의 수행이 끝난 상태
notion image

프로세스의 메모리 구조

notion image
  • Text section
    • 명령어
  • Data section
    • 전역 변수
  • Heap section
    • 프로그램 런타임 중 동적으로 할당된 메모리
  • Stack section
    • 함수 호출시 임시 데이터 저장
    • 함수 매개변수, 반환 주소, 지역 변수
notion image

PCB: Process Control Block

notion image
== TCB: Task Control Block
OS가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
  • 특정 프로세스와 연관된 많은 정보를 담고 있음(구조체로 유지)
    • OS가 관리상 사용하는 정보
      • Process state, Process ID
      • Scheduling information, Priority
    • CPU 수행 관련 하드웨어 값
      • Program counter
      • CPU registers
    • 메모리 관련
      • code, data, stack의 위치 정보
      • Memory management information
    • Accounting information
    • 파일 관련
      • I/O status information

문맥 교환(Context Switch)

notion image
CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정

목적

interrupt가 발생했을 때, 시스템은 현재 실행중인 프로세스의 문맥을 저장하여, 나중에 재개할 때의 문맥을 복원할 수 있다.

동작

  • CPU가 다른 프로세스에게 넘어갈 때 OS는 다음을 수행
    • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
    • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴

예시

  • System Call이나 Interrupt 발생 시 반드시 Context Switch가 일어나는 것은 아님
    • notion image
    • (1)의 경우, CPU 수행 정보 등 Context의 일부를 PCB에 save 해야하지만 Context Switch는 아님
    • (2)의 경우, Context Switch로 그 부담이 훨씬 큼(eg. Cache Memory Flush)

Process Scheduling

  • Multi-Programming의 목적
    • 동시에 여러 프로세스를 실행시키기 위함
    • CPU 활용을 극대화하기 위해
  • 시분할의 목적
    • 프로세스 사이에서 CPU 코어를 빠르게 switch하기 위함
    • 유저는 각 프로그램을 동시에 상호 작용 가능

Scheduling Queues

프로세스들은 각 큐들을 오가며 수행된다.
notion image

Job Queue

현재 시스템 내에 있는 모든 프로세스의 상위 집합

Ready Queue

현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합

Device Queues

I/O device의 처리를 기다리는 프로세스의 집합
 

Queueing Diagram

notion image
  • 프로세스가 시스템에 들어오면서
    • CPU 코어에서 실행되기를 준비하고 기다리는 Ready Queue에 들어간다.
  • 특정 이벤트가 발생하길 기다리는 프로세스는
    • Wait Queue에 위치한다.
  • Queue는 linked list로 구현됨

프로세스의 작동

실행의 두가지 경우

  • 부모가 자식과 동시에 실행
  • 부모가 자식이 종료 시까지 기다림

주소 공간의 두가지 경우

  • 자식이 부모의 복제
  • 자식이 새 프로그램을 가짐

프로세스 생성

notion image
  • UNIX-like OS
    • 새 프로세스는 fork() 시스템 콜에 의해 생성됨
    • 자식 프로세스는 부모 프로세스의 주소 공간 복사로 이루어져있음
    • 부모 프로세스는 실행을 이어감
      • 할게 없으면
      • 자식이 실행하는 동안 wait()을 할 수 있음
        • ready queue에서 wait queue로 이동해서 자식의 끝을 기다림
    • 차이점
      • fork()시
        • 0이 아닌 pid면 부모 프로세스
        • return이 0이면 자식 프로세스

프로세스 종료

  • 마지막 명령을 실행할 때
  • exit() system call
    • OS에게 삭제하라고 요청
  • OS가 자원을 해제, 회수

좀비와 고아

  • 좀비 프로세스
    • 부모가 자식을 신경 안쓴다.
    • 부모가 wait()를 아직 호출하지 않은 경우
  • 고아 프로세스
    • 부모가 먼저 죽었다.
    • 부모가 wait()를 호출하지 않고 종료한 경우

Process와 Thread

Process

프로세스는 single thread를 실행하는 프로그램
  • single thread control은 프로세스가 한번에 한 작업만 수행할 수 있음
  • 현대 OS는 확장된 process 개념을 갖고 있음
    • 프로세스가 multiple threads를 가질 수 있도록 함
    • 그래서 한번에 여러 작업 수행

Thread

장점

단점

단점 극복 방법

예시

비교군과의 차이

  • 프로세스는 각자 프로세스간의 통신에 IPC가 필요하다.
    • 쓰레드는 쓰레드 간의 통신에 IPC가 필요하지 않다.
  • 각 프로세스는 Code, Data, Heap, Stack 영역을 각자 보유한다.
    • 쓰레드는 Code, Data, Heap 영역은 공유하고 Stack영역만 각자 보유한다.
  • 프로세스는 생성과 context switching에 많은 비용이 들어간다.
    • 쓰레드는 생성과 context switching에 적은 비용이 들어간다.