[CS] 프로세스와 쓰레드

히끼·2024년 3월 28일

TIL

목록 보기
33/43

1. 프로세스

  • 프로세스(process): 실행 중인 프로그램
    - 프로그램: 동작을 하지 않는 정적·수동적 개체
    - 저장장치에 들어있으며, 프로그램 실행에 필요한 명령어를 담고 있음
    - 프로세스: 동작을 하는 능동적 개체
    - 명령어 이외에도 데이터 등이 담김
    - 프로세스 자체의 사이즈는 프로그램 사이즈보다 큼

  • 운영체제로부터 자원을 할당 받아 동작
    - 자원: CPU, 메모리, 입출력장치, 파일 등
    - CPU 자원을 할당 받아야 동작을 할 수 있음
    - 동작: CPU가 프로세스의 명령을 실행

  • 운영체제(프로세스 관리자)가 처리하는 작업
    • 프로세스를 생성 및 종료
    • 프로세스를 실행시키기 위한 스케줄링 작업
    • 프로세스의 상태 관리

1-1. 프로세스의 구성

프로세스는 메모리 구조와 프로세스 제어 블록의 두 가지로 구성됨

(1) 메모리 구조

  • 프로그램 실행에 직접적으로 필요한 코드와 데이터
  • 코드 영역
    • 프로그램 자체
  • 데이터 영역 : 정적 데이터 영역 + 스택 영역 + 힙 영역
    • 프로그램 실행 시 필요한 데이터
      • 상수나 변수의 값
      • 서브프로그램 호출상태 등

각 영역에 따라 저장되는 데이터의 특징이 다름

  • 정적 데이터 영역 : 상수, 전역 변수 등 프로그램 시작부터 끝까지 관리되어야 하는 데이터
  • 스택 영역 : 서브 프로그램 호출 시 사용되는 지역변수 등
  • 힙 영역 : 동적 변수 사용자가 수동으로 할당하는 것들

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

운영체제가 프로세스 하나를 관리하기 위해서는 단순히 코드와 데이터 뿐만이 아니라,
특정 프로세스를 다른 프로세스와 구분해서 처리해줄 또다른 정보가 필요함

  • 운영체제가 프로세스를 관리하기 위해 필요한 정보
  • 각 프로세스마다 존재
  • 여러 프로세스가 번갈아 실행되는 경우 PCB에 저장된 정보 활용

1-2. 프로세스 상태 관리

프로세스 상태

상태설명
생성처음 작업이 시스템에 주어진 상태 (PCB를 만들고, 메모리 공간을 할당 받음)
준비실행 준비가 되어 CPU 할당을 기다리는 상태
실행프로세스가 처리되는 상태
대기프로세스가 I/O 작업이 끝날 때까지 또는 특정 자원을 할당받을 때까지 보류되는 상태
종료프로세스가 더 이상 실행되지 않도록 끝난 상태

프로세스 상태 변화

  • 생성 → 준비
    • PCB와 메모리 구조가 준비되면 준비 큐로 들어감
  • 준비 → 실행
    • 디스패치 : 특정 프로세스에 CPU를 할당해주는 과정
  • 실행 → 준비
    • CPU 할당 시간이 만료된 경우
    • 실행 중인 프로세스 보다 우선순위가 높은 프로세스가 준비 큐에 들어온 경우
  • 실행 → 대기
    • CPU 사용 중 입출력, 페이지 변환 등 자원 할당이 필요한 경우 알아서 CPU를 반환
  • 대기 → 준비
    • 재개 조건이 만족되면, 다시 준비 큐로 들어감
  • 실행 → 종료
    • 더 이상 실행할 부분이 없을 때
    • 실행 중에 치명적인 오류가 발생하여 더 이상 처리 불가할 경우
    • 실행 중에 부모 프로세스가 종료를 지시한 경우

      종료로 가게 되면, 그 프로세스는 더 이상 아무 작업도 할 수 없음

1-3. 부모 프로세스와 자식 프로세스

(1) 프로세스 생성 방법

  • 사용자가 프로그램을 직접 실행
  • 한 프로세스가 다른 프로세스를 생성
    • 프로세스 생성 시스템 호출 이용
    • 부모 프로세스: 시스템 호출을 하는 프로세스
    • 자식 프로세스: 시스템 호출을 통해 새로 생성된 프로세스

프로세스 생성 시스템 호출

  • UNIX, Linux: fork()
    • 자식 프로세스는 부모 프로세스의 복제본
    • PID를 제외한 나머지는 모두 동일 (PC가 가리키는 명령어 주소도 동일)
  • UNIX, Linux: exec()
    • 자식 프로세스는 부모 프로세스와는 다른 프로그램 실행
    • PID를 제외한 코드, 데이터, PCB 영역 모두 바뀜
  • Windows: CreateProcess()
    • 자식 프로세스는 새로운 프로그램으로 생성

(2) 프로세스 종료 방법

  • 프로세스가 모든 처리를 완료(정상적 종료)
  • 부모 프로세스에 의해 자식 프로세스가 강제 종료
    • 프로세스 종료 시스템 호출 이용
    • 자식 프로세스 생성시 얻은 자식 PID 이용
  • 부모 프로세스가 종료되는 경우 운영체제가 자식 프로세스 종료

2. 쓰레드

전통적인 프로세스

  • 하나의 프로그램을 실행하기 위한 기본적인 단위
  • 자원 소유의 단위
    • 하나의 메모리 구조
  • 디스패칭의 단위
    • 하나의 제어흐름
  • 프로세스 내에서 다중처리 불가능

2-1. 쓰레드 (thread)

  • 프로세스 내에서의 다중처리를 위해 제안된 개념
    • 프로세스에서 실행의 개념만 분리한 것
    • 프로세스 안에 여러 개의 PC가 존재 가능
  • 하나의 프로그램을 실행하기 위한 기본적인 단위
  • 디스패칭의 단위
    • 쓰레드마다 실행 위치가 달라질 수 있음
      • 하나의 프로세스 안에 제어의 흐름이 서로 다른 쓰레드를 여러 개 가질 수 있음
    • cf) 자원 소유의 단위: 프로세스
  • 하나의 프로세스 내에는 하나 이상의 쓰레드 존재
  • 전통적인 프로세스
    • 하나의 PC로 디스패칭하는 형태
  • 쓰레드 있는 프로세스
    • 프로세스 안의 쓰레드가 PC를 별도로 가짐

2-2. 쓰레드와 프로세스

  • 쓰레드는 실행에 필요한 최소한의 정보만 가짐
    • PC를 포함한 레지스터 값
    • 상태정보
    • 스택영역
      • 쓰레드마다 실행이 다르므로, 서브 프로그램 호출 과정도 달라질 수 있음
  • 나머지 정보는 프로세스에 두고 다른 쓰레드와 공유

다중 쓰레드로 구성된 프로세스

다중 쓰레드 = 멀티 쓰레드

  • 멀티 CPU 또는 멀티코어 컴퓨터 시스템
    • 다중 쓰레드를 병렬로 처리 가능
  • 처리속도 별로 쓰레드가 나눠진 경우
    • 효율적인 처리 가능

0개의 댓글