포스트

[OS] 프로세스

1. 실행파일과 프로세스

1.1. 실행파일

실행파일이란 OS가 프로세스를 초기 구동하는 데 사용되는 파일로, Program 이라고 한다.

  • 저장장치에 저장되어 있는 정적인 상태
    • Windows: .exe
    • Linux, macOS: 확장자는 따로 없지만 ELF(Executable & Linkable Format) 형식의 파일이다.
  • OS는 executable한 파일을 읽어들여 프로그램을 실행한다.
    • 파일 헤더 ‘매직 넘버’: MZ(ascii), ELF(ascii),

1.2. 프로세스

실행파일(프로그램)이 실행되면 이를 프로세스(Process)라고 한다.

  • 실행파일이 메모리에 로딩되어 실행되는 상태
  • 프로그램들은 메모리에 올라가야만 실행될 수 있음(프로그램 → 프로세스)

1.3. 프로세스 개념

프로세스 개념 및 정의는 교재마다 상이하다. 프로세스의 다양한 표현은 아래와 같다.

  • 주기억 장치에 상주된 프로그램이 CPU에 의해 처리되는 상태
  • CPU에 의해 현재 실행되고 있는 프로그램
  • 실행을 위해 메모리에 올라온 동적인 상태
  • PCB(Process Control Block, 프로세스 제어 블록)의 존재로서 명시되는 것
  • 프로세스가 할당되는 개체로서, Dispatch가 가능한 단위
    • 비동기적 행위를 일으키는 주체
    • CPU가 할당되는 실체
    • OS가 관리하는 최소 단위 작업
    • task란 용어와 함께 사용되며, 다양한 정의 가짐
    • 프로그램과 달리 메모리에 주소 공간 갖는 능동적인 객체

2. 프로그램의 실행

2.1. 다중 프로그래밍

여러 프로그램을 동시에 실행하는 것으로, 여러 프로세스들이 메모리에 동시에 있을 수 있기 때문에 가능하다.

  • 프로세스들은 상호 독립적인 메모리 공간에서 실행된다.

다중 프로그래밍

2.2. 다중 인스턴스(Multi-instance)

같은 프로그램을 여러 개 실행할 수 있다. 실행될 때마다 독립된 프로세스가 생성된다.

  • 각 프로세스는 독립된 메모리 공간을 가진다.
  • 모두 별개의 프로세스로 취급된다.

다중 인스턴스

2.3. Loading

  • Loading(로딩): 실행파일이 메모리에 올라가는 과정
  • Loader(로더): 메모리에 Load(적재)해 주는 것

Loading

  • 절대 로더(Absolute loader)
    • 항상 고정된 위치에만 로딩됨
    • 재배치/링킹 없음
    • 다중 프로그래밍 X
  • 재배치 로더(Relocation loader)
    • 주기억 장치 상태에 따라 목적 프로그램을 주기억 장치 임의공간에 적재
    • 프로그램이 여러 개 실행되다 보면, 메모리 위치상에 충돌이 있을 수도 있음
  • 동적 적재(Dynamic loading)
    • 필요 부분만 주기억장치에 적재, 나머지 보조기억장치에 저장

3. 프로세스 생명 주기

프로세스는 생성부터 종료까지 여러 상태로 바뀌면서 실행된다. → State Change

프로세스 생명 주기 프로세스 생명 주기


프로세스 생명 주기 2 간단한 버전

3.1. 프로세스 상태 정리

상태설명작업
생성 상태프로그램을 메모리에 가져와 실행 준비가 완료된 상태메모리 할당, PCB 생성
준비 상태실행 기다리는 모든 프로세스가 자기 차례 기다리는 상태
실행될 프로세스를 CPU 스케줄러가 선택
dispatch(PID): 준비 → 실행
실행 상태선택된 프로세스가 time slice 얻어 CPU 사용하는 상태
프로세스 사이의 문맥 교환 발생
timeout(PID): 실행 → 준비
exit(PID): 실행 → 완료
block(PID): 실행 → 대기
대기 상태실행 상태 프로세스가 I/O 요청시 I/O 완료될 때까지 기다리는 상태
I/O 완료시 준비 상태로 감
wakeup(PID): 대기 → 준비
완료 상태프로세스 종료된 상태
사용 중이던 모든 데이터 정리됨
exit(정상 종료), abort(비정상 종료) 모두 포함
메모리 삭제, 프로세스 제어 블록 삭제

3.2. 보류 상태

  • 프로세스가 어떤 이유로 인해 실행 미뤄지고, 메모리에서 쫓겨난 상태

메모리에서 쫓겨났다는 것은, 프로그램이 저장장치에 놓여졌다는 것이다.

  • 보류 상태로 진입하는 이유
    • 메모리 용량 초과
    • 프로그램 오류
    • Malware라서 격리
    • 매우 긴 주기로 실행됨
    • IO에 지연 있을 경우
  • 예시: 업데이트 소프트웨어

보류 상태

4. PCB: Process Control Block

4.1. 프로세스 관리

프로세스는 생성부터 종료까지 모두 커널(OS)에 의해 관리

  • 프로세스 생명 주기: 생성, 실행, 중단, 일지 중단, 재개
  • 프로세스 정보(Metadata) 관리
  • 프로세스 통신, 동기화
  • 문맥 교환(Context switching)

OS는 프로세스를 제어하기 위해 상태 정보 일정한 자료 구조로 저장하는데, 이를 PCB(Process Control Block)라 한다.

  • 프로세스마다 고유의 PCB가 생성된다.

프로세스 관리

4.2. PCB 구조

  • OS는 PCB를 PCB table(Process table)이라는 곳을 통해 관리함
  • OS마다 구조가 전부 다르다.

PCB 구조

  • PCB에 저장된 이러한 정보들을 프로세스의 Context라고도 부른다.

5. 시분할 (Time-slicing)

  • 여러개의 프로세스를 동시에 처리하는 방법
  • 프로세스들에게 번갈아가며 CPU를 사용하게 하는 방법
    • 진짜로 동시에 실행되는 건 X
  • ‘번갈아가는 것’에서 파생되는 문제들
    • 어떻게 번갈아가는 것인가? → Context Switching
    • 어떤 순서로 번갈아가는 것인가? → 스케쥴링 문제

6. 문맥 교환(Context Switching)

  • 한 프로세스에서 다른 프로세스로 CPU를 넘겨주는 과정
  • 실행 상태에서 나가는 프로세스의 PCB에는 지금까지의 작업 내용 저장
  • 실행 상태로 들어오는 프로세스의 PCB의 내용으로 CPU가 세팅

문맥 교환

7. 고민해볼 문제들

프로그램은 로더를 통해 메모리에 적재되어야 하며, 적재된 것을 프로세스라 부른다. 이 과정에서여러 가지 고민해볼 문제들이 파생된다.

  • 로더는 누가 실행하는 것일까?
  • 메모리 어디에 로딩하며, 어떻게 로딩하는 것인가?
    • Allocation 문제
  • 프로그램의 크기가 메우 크면?
    • 가상 메모리, Paging
  • Context Switching이 Suspend에 걸쳐 이루어지면?
    • Swapping, 단편화 문제
  • 어떤 프로세스가 다른 프로세스 메모리 영역을 침범한다면?
    • 보안 문제

이 문제들은 OS를 더 공부하면서 하나씩 알아 볼 것이다.

이 포스팅은 작성자의 CC BY-NC 4.0 라이선스를 준수합니다.