컴퓨터 구조 &운영체제/컴퓨터구조 + 운영체제

프로세스와 스레드

busy맨 2024. 2. 20. 10:36

1. 프로세스 개요

1) 프로세스

  • 프로세스(process)
    • 실행 중인 프로그램
    • 프로그램은 실행 전까지는 데이터 덩어리, 메모리에 적재되어 실행되는 순간 프로그램은 프로세스가 됨
  • 포그라운드 프로세스(foreground process)
    • 사용자가 보는 앞에서 실행되는 프로세스
  • 백그라운드 프로세스(background process)
    • 사용자가 보지 못하는 뒤에서 실행되는 프로세스

2) 프로세스 제어 블록

  • 프로세스의 실행
    • 모든 프로세스는 실행을 위해 CPU 자원을 필요로 하지만, CPU 자원은 한정되어 있음
    • 프로세스들은 차례대로 돌아가며 한정된 시간만큼만 CPU를 사용
    • 타이머 인터럽트를 통해 종료
      • 타이머 인터럽트: 클럭 신호를 발생시키는 장치에 의해 주기적으로 발생하는 하드웨어 인터럽트
  • 프로세스 제어 블록(PCB; Process Control Block)
    • 프로세스와 관련된 정보를 저장하는 자료구조
    • 프로세스를 식별하기 위해 필요한 정보들이 저장됨
    • 프로세스 생성 시에 커널 영역에서 생성되고, 실행이 끝나면 폐기됨
  • 프로세스에 담기는 정보
    • 프로세스 ID
      • 특정 프로세스를 식별하기 위해 부여하는 고유한 번호
    • 레지스터 값
      • 프로세스는 자신의 실행 차례가 돌아오면 이전까지 사용했던 레지스터의 중간값들을 복원
      • 이를 위해 프로그램 카운터를 비롯한 레지스터 값이 담김
    • 프로세스 상태
      • 현재 프로세스가 어떤 상태인지 기록됨
    • CPU 스케줄링 정보
      • 프로세스가 언제, 어떤 순서로 CPU에 할당받을지에 대한 정보
    • 메모리 관리 정보
      • 프로세스가 어디에 저장되어 있는지에 대한 정보
    • 사용한 파일과 입출력장치 목록
      • 프로세스 실행 과정에서 특정 입출력장치나 파일을 사용한 내역이 저장

3) 문맥 교환

  • 문맥(context)
    • 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보(=중간 정보)
    • PCB에 기록되는 정보들
  • 문맥 교환(context switching)
    • 기존 프로세스의 문맥을 PCB에 백업하고, 새 프로세스의 문맥을 PCB로부터 복구하여 프로세스 실행하는 것
    • 프로세스가 빨리 번갈아 가며 수행되기 때문에, 우리 눈에 프로세스들이 동시에 실행되는 것처럼 보임
    • 문맥 교환을 너무 자주하면 오버헤드가 발생할 수 있음

4) 프로세스의 메모리 영역

  • 코드 영역(code segment)
    • 실행할 수 있는 코드, 즉 기계어로 이루어진 명령어가 저장
    • 쓰기가 금지된 읽기 전용 공간
  • 데이터 영역(data segment)
    • 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간
      • Ex) 전역 변수
  • 힙 영역(heap segment)
    • 프로그래머가 직접 할당할 수 있는 저장 공간
    • 힙 영역에 메모리 공간을 할당했다면, 반드시 해당 공간을 반환해야함
      • 그렇지 않으면 메모리 누수(=메모리 낭비) 발생
  • 스택 영역(stack segment)
    • 데이터를 일시적으로 저장하는 공간
    • 데이터 영역과 달리 잠깐 사용되는 값들이 저장
      • Ex) 매개 변수, 지역 변수 
  • 정적 할당 영역
    • 크기가 고정된 영역
    • 코드 영역과 데이터 영역이 해당
  • 동적 할당 영역
    • 프로세스 실행 과정에서 크기가 변할 수 있는 영역
    • 힙 영역과 스택 영역이 해당

 

2. 프로세스 상태와 계층 구조

1) 프로세스 상태

  • 생성 상태(new)
    • 메모리에 적재되어 PCB를 할당받은 상태
    • 생성 상태를 거쳐 실행할 준비가 완료된 프로세스는 곧바로 실행되지 않고 준비 상태가 되어 CPU 할당을 대기
  • 준비 상태(ready)
    • 당장이라도 CPU 할당을 받아 실행될 수 있지만, 차례를 기다리는 상태
  • 실행 상태(running)
    • CPU를 할당받아 실행 중인 상태
    • 할당된 일정 시간 동안 CPU를 사용하고, 타이머 인터럽트가 발생하면 다시 준비 상태가 됨
  • 대기 상태(blocked)
    • 프로세스 실행 도중 입출력장치를 사용하는 경우, 입출력장치의 작업을 기다리는 상태
    • 입출력 작업이 완료되면 해당 프로세스는 다시 준비 상태가 됨
  • 종료 상태(terminated)
    • 프로세스가 종료된 상태
    • 운영체제는 PCB와 프로세스가 사용한 메모리를 정리
      프로세스 상태 다이어그램

2) 프로세스 계층 구조

  • 부모 프로세스(parent process)
    • 기존 실행 중인 프로세스
  • 자식 프로세스(child process)
    • 프로세스는 실행 도중 시스템 호출을 통해 생성된 프로세스
  • 부모 프로세스와 자식 프로세스는 각기 다른 PID를 가짐
  • 자식 프로세스가 생기면 트리 구조를 띄는데, 이를 프로세스 계층 구조라고 함

3) 프로세스 생성 기법

  • 부모 프로세스는 fork를 통해 자신의 복사본을 자식 프로세스로 생성
  • 자식 프로세스는 exec를 통해 자신의 메모리 공간을 다른 프로그램으로 교체
  • fork
    • 자기 자신 프로세스의 복사본을 만드는 시스템 호출
    • 자식 프로세스는 부모 프로세스의 내용을 상속 받음

fork

  • exec
    • 자신의 메모리 공간을 새로운 프로그램으로 덮어씌는 시스템 호출
    • 새로운 프로그램 내용으로 전환하여 실행
    • exec를 호출하면 코드 영역과 데이터 영역의 내용이 실행할 프로그램의 내용으로 변경, 나머지는 초기화

 

https://github.com/kmg0157/self-learning-cs/blob/main/process/process_cplusplus.md

 

 

3. 스레드

1) 프로세스과 스레드

  • 스레드(thread)
    • 프로세스 내의 실행 흐름 단위
    • 하나의 프로세스는 여러 개의 스레드를 가질 수 있음
    • 스레드를 사용하면 하나의 프로세스에서 여러 부분을 동시에 실행 가능
      • 프로세스의 여러 명령어를 동시에 처리

  • 스레드는 프로세스 내에서 각기 다른 스레드 ID, 레지스터 값, 스택으로 구성
    • 따라서 각기 다른 프로세스의 코드를 실행할 수 있음
  • 한 프로세스 내의 스레드들은 실행에 필요한 최소한의 자원을 공유하며 실행
    • 프로세스 내의 스레드는 프로세스의 자원을 공유
  • 스레드는 프로세스 자원을 공유한 채 실행에 필요한 최소한의 정보만으로 실행됨

'컴퓨터 구조 &운영체제 > 컴퓨터구조 + 운영체제' 카테고리의 다른 글

운영체제  (0) 2024.02.15
입출력장치  (0) 2024.02.13
메모리와 캐시 메모리  (0) 2024.02.07
CPU 성능 향상 기법  (0) 2024.02.06
CPU의 작동 원리  (0) 2024.02.05