본문 바로가기
TIL

운영체제 - 프로세스와 쓰레드

by cariño 2025. 4. 1.
728x90
반응형

 

 

 

1. 프로세스

프로세스의 개요

 

  • 프로세스(process) : 실행 중인 프로그램
    • 프로그램: 동작을 하지 않는 정적, 수동적 개체
    • 프로세스: 동작을 하는 능동적 개체
      • ex) 저장장치에는 mb -> 프로세스로 만들어지고 난 후에 kb
      • ex) window 작업관리자 -> 현재 내 pc에서 실행중인 프로세스가 쭉 나열되서 나타난다.
      • 작업관리자에는 각 프로세스에 대해서 CPU, 메모리, 디스크, 네트워크를 얼만큼 사용중인지 나와있다. 
      • 메모리 사용량? 저장장치에 있던 파일이 프로세스가 되면서 실제 메모리 공간을 할당받아서 사용하는 공간이 표기되어 있다.
      • 작업관리자라는 프로세스 자체의 사용량도 나와있다. 
      • 실행중인 프로그램은 원래 저장장치에 파일형태로 저장되어 있다.
      • 실행이 되면 운영체제 입장에서 관리하는 이름은 PID(process ID) 로 이용하게 된다.  
  • 운영체제로부터 자원을 할당 받아서 동작
    • 자원: CPU, 메모리, 입출력장치, 파일 등 (자원을 할당받음)
    • 동작: CPU가 프로세스의 명령을 실행 (마지막 단계로 CPU를 할당 받아서 실행됨)

 

운영체제(프로세스 관리자)가 처리하는 작업

  • 프로세스를 생성 및 종료
  • 프로세스를 실행시키기 위한 스케줄링 작업
  • 프로세스의 상태 관리(대기, 준비, 전이 등)

 

 

프로세스의 구성 

- 메모리 구조와 프로세스 제어 블록으로 하나의 프로세스가 생성이 된다. 

 

  • 메모리 구조
    • 프로그램 실행에 직접적으로 필요한 코드와 데이터 
    • 코드 영역(프로그램 자체)
    • 데이터 영역(코드가 실행될 때 필요한 데이터)
      • 정적 데이터 영역 (상수나 변수의 값)
      • 스택 영역 (서브프로그램 정보, 지역 변수 정보) 호출 상태 등
      • 힙 영역 (사용자가 수동으로 할당하는 것들)  
  • 프로세스 제어 블록 (Process Contorl Block:PCB)
    • 운영체제가 프로세스를 관리하기 위해 필요한 정보
      • PID (프로세스 번호): 메모리상의 프로세스로 존재하고 해당하는 프로세스가 무엇인지 구분을 함
      • 프로세스 상태
      • 프로그램 카운터(Program Counter, PC)는 컴퓨터의 중앙 처리 장치(CPU) 내부에 있는 레지스터로, 다음에 실행할 명령어의 주소를 저장하는 장소. 명령어 포인터(IP)라고도 불린다.
      • 레지스터: 프로세스 사용 중 다른 프로세스를 사용하고 왔을 때 레지스터에 보관 후 다시 사용할 때 쓰임
      • 메모리 관리 정보
      • 프로세스 우선순위
      • 회계 정보
    • 각 프로세스마다 존재
    • 여러 프로세스가 번갈아 실행되는 경우 PCB에 저장된 정보 활용

 

  • 프로세스 상태 (가장 기본적인 5가지 상태)
  • 생성
    • 처음 작업이 시스템에 주어진 상태 
  • 준비
    • 실행 준비가 되어서 CPU할당을 기다리는 상태 (PCB가 만들어짐 > PID가 생성됨 > 메모리공간 할당 받음 .... )
    • 준비 큐에 들어가진 상태
  • 실행
    • 프로세스가 처리되는 상태 
    • CPU가 프로그램에 있는 명령어를 처리해줌
  • 대기
    • 프로세스가 I/O 작업이 끝날 때까지 또는 특정 자원을 할당받을때까지 보류되는 상태 
    • CPU를 붙잡는것이 아닌 다른 자원에 CPU를 내어주고 특정 자원을 할당받을 때까지 기다리고 있는 상태
    • 생성/준비/실행을 오가는 형태
  • 종료
    • 프로세스가 더 이상 실행되지 않도록 끝난 상태

 

프로세스 상태 변화

  • 생성 -> 준비 -> 디스패치 -> 실행
    • 디스패치: 특정 프로세스에 CPU를 할당하는 과정 자체
  • 생성 -> 준비 -> 디스패치 -> 실행 -> 이벤트 대기 -> 대기
    • 만약 할당 시간이 만료 됐을 때는 실행 -> 준비로 되돌아갈 수 있다. 
    • 또는 나보다 우선순위가 더 높은 프로세스에 CPU를 디스패치 해줘야 하는 상태일 때 실행 -> 준비로 돌아감
  • 생성 -> 준비 -> 디스패치 -> 실행 -> 이벤트 대기 -> 대기 -> 재개 조건 만족 -> 준비 -> 실행 -> 종료

 

프로세스 생성 방법

  • 사용자가 프로그램을 직접 실행
  • 한 프로세스가 다른 프로세스를 생성
    • 사용자가 실행하는 것이 아닌 프로세스 생성 시스템 호출 이용
    • 부모 프로세스: 시스템 호출을 하는 프로세스
    • 자식 프로세스: 시스템 호출을 통해 새로 생성된 프로세스 
  • 트리형태의 부모 자식 관계 프로세스가 생성됨

 

프로세스 생성 시스템 호출

 

  • UNIX, Linux: fork()
    • 자식 프로세스는 부모 프로세스의 복제본
    • 부모 프로세스가 가진 PID만 다르고 fork()로 받은 값은 부모프로세스의 경우는 자식의 PID를 갖고 자식 프로세스의 PID값은 0으로 표기
  • windows: CreatProcess()
    • 자식 프로세스는 새로운 프로그램으로 생성

 

 

프로세스 종료 방법

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

 

 

 

2. 쓰레드

 

프로세스: 하나의 프로그램을 실행하기 위한 기본적인 단위

  • 자원 소유의 단위
    • 프로세스가 자원 소유의 단위가 된다. 메모리 구조상에 여러가지 자원을 가지고 있고 하나의 메모리 구조로 이루어져 있다. 
  • 디스패칭의 단위
    • 하나의 제어흐름만 존재한다.
  • 프로세스 내에서 다중처리 불가능 

 

  • 프로세스 내에서 다중처리를 위한 제안된 개념
    • 하나의 프로그램을 실행하기 위한 기본적인 단위
    • 디스패칭의 단위가 된다. (CPU를 할당받아서 명령어를 처리를 쓰레드 별로 디스패칭 받아서 처리)
    • 전통적으로는 프로세스 자체가 디스패칭의 단위이고 자원 소유의 단위였지만 디스패칭의 단위는 쓰레드가 되고 자원 소유의 단위는 프로세스가 된다.
  • 자원 소유의 단위: 프로세스
  • 하나의 프로세스 내에는 하나 이상의 쓰레드가 존재
    • 전통적인 프로세스: 하나의 PC를 가지고 디스패칭
    • 쓰레드가 있는 프로세스: 프로세스 안에 별도로 쓰레드를 가지고 있고 그게 PC를 가지고 있다. 
      • ex)프로세스 안에 쓰레드가 3개가 있을 경우 디스패칭 단위를 따로따로 가지고 관리를 하게 됐다. 
  • 쓰레드는 실행에 필요한 최소한의 정보만 가진다.
    •  pc를 포함한 레지스터 값
      • 쓰레드마다 레지스터/상태/스택 값을 갖는다. 
    • 상태정보
    • 스택영역
  • 나머지 정보는 프로세스에 두고 다른 쓰레드와 공유
    • 프로세스 자체를 자원소유의 단위로 보기때문에 공유를 한다. 
  • 멀티 CPU 또는 하나의 CPU에 멀티코어 컴퓨터 시스템
    • 다중 쓰레드를 병렬로 처리 가능
    • ex) 코어가 3개인 컴퓨터에 동시에 쓰레드가 사용가능하다.
    • 코어가 하나일 경우 처리속도별로 쓰레드를 나눌 수 있다. 
      • 효율적인 처리 가능 
      • 역할에 따라 용도별로 쓰레드를 나눠서 사용
        • ex) 계산용 쓰레드, 입력용 쓰레드, 백업용 쓰레드
728x90

'TIL' 카테고리의 다른 글

운영체제 - 프로세스 스케줄링  (0) 2025.04.07
운영체제 - 운영체제 소개  (0) 2025.03.31
서블릿, 멀티 쓰레드  (1) 2025.01.19
TIL - 스택  (0) 2025.01.07
TIL - 배열과 연결리스트  (1) 2025.01.02

댓글