방송통신대학교/운영체제

[운영체제] 2강. 프로세스와 스레드

idleday 2023. 4. 16. 18:36
더보기

 


프로세스(process)

실행 중인 프로그램
프로그램: 동작을 하지 않
정적·수동적 개체
프로세스: 동작을 하는 능동적인 개체

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

 

  • 운영체제(프로세스 관리자)의 작업
    • 프로세스 생성 및 삭제
    • CPU 할당을 위한 스케줄 결정
    • 프로세스 상태를 관리하며 상태 전이 처리

 

프로세스의 구성

시스템 메모리 구조

프로그램 실행에 직접적으로 필요한 코드데이터

  • 코드 영역 (프로그램 자체)
  • 정적 데이터 영역 (프로그램 실행에 필요한 데이터)
    • 정적 데이터 영역 (전역변수, 정적변수, 상수)
    • 스택 영역 (지역변수, 매개변수, 서브프로그램 호출상태 등)
    • 힙 영역 (사용자 동적할당 값)

 

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

운영체제가 프로세스를 관리하기 위해 필요한 각 프로세스의 정보

여러 프로세스가 번갈아 실행되는 경우 PCB에 저장된 정보 활용

  • 프로세스 번호(PID)
  • 프로세스 상태
  • 프로그램 카운터(PC) (실행중인 명령어의 다음 명령어 위치값, 제어 흐름용)
  • 레지스터 (현재상태의 레지스터 값을 PCB에 저장 후 CPU 재할당 시 복구)
  • 메모리 관리 정보
  • 프로세스 우선순위
  • 회계 정보 ..

 

프로세스 상태 관리

프로세스 상태

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

프로세스 상태 변화

  • 생성 → 준비 
  • 준비 실행 디스패치 (특정 프로세스가 CPU할당받는 과정)
  • 실행  준비 할당시간 만료
  • 실행 대기 이벤트 대기(입출력 등 CPU 쓸 수 없다면)
  • 대기  준비 재개조건 만족
  • 종료 (실행완료, 치명적인 오류, 부모프로세스종료)

 

부모 프로세스와 자식 프로세스

프로세스 생성 방법

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

프로세스 종료 방법

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

 

프로세스 생성 시스템 호출

UNIX, Linux : fork()
자식 프로세스는 부모 프로세스의 복제본, PID 상이

    • 부모 프로세스 : PID = 10,  pid = fork(); // 25
    • 자식 프로세스 : PID = 25, pid = fork(); // 0

UNIX, Linux : exec()
자식 프로세스는 부모 프로세스와 다른 프로그램 실행, PID 동일

    • 자식 프로세스 : PID = 25, pid = fork(); if(pid == 0){ exec(prg2); }
    • 자식 프로세스 : PID = 25,  ~~~~;

Windows : CreateProcess()
자식 프로세스는 새로운 프로그램으로 생성 

    • 부모 프로세스 : PID = 10, CreateProcess(prg2, ,,,, , &pid);  
    • 자식 프로세스 : PID = 25, ~~~~~;

 


스레드(thread)

프로세스 내에서 다중처리를 위해 제안된 개념

 

스레드와 프로세스

  • 전통적인 프로세스
    • 하나의 프로그램을 실행하기 위한 기본적인 단위
    • 자원 소유의 단위(하나의 메모리 구조)
    • 디스패칭의 단위 (하나의 제어흐름, 하나의 PC)
    • 프로세스 내에서 다중처리 불가능
  • 스레드
    • 하나의 프로그램을 실행하기 위한 기본적인 단위
    • 디스패칭의 단위 (여러 제어흐름, 여러 PC)
    • 하나의 프로세스 내에 하나 이상의 스레드 존재 가능
  • 스레드는 실행에 필요한 최소한의 정보만 가짐
    • PC를 포함한 레지스터
    • 상태정보
    • 스택 영역
  • 나머지 정보는 프로세스에 두고 다른 스레드와 공유

 

다중 스레드로 구성된 프로세스의 장점

  • 멀티CPU 또는 멀티코어 컴퓨터 시스템
    • 다중 쓰레드를 병렬 처리 가능
  • 처리속도별로 쓰레드가 나눠진 경우
    • 효율적인 처리 가능
    • ex. 계산용 쓰레드 - 입력용 쓰레드 - 백업용 쓰레드

 


정리하기

  1. 프로세스실행 중인 프로그램을 의미하며, CPU, 메모리, 파일, 입출력장치 등 실행에 필요한 자원이 할당된다.
  2. 프로세스 제어 블록은 프로세스를 명시해 주는 다양한 내용을 포함하고 있다.
  3. 프로세스는 생성, 준비, 실행, 대기, 종료의 다섯 상태 중 하나로 존재하며, CPU의 스케줄링, 입출력 대기 등에 따라 준비, 실행, 대기 등으로 상태가 변화되며 동작한다.
  4. 쓰레드는 프로세스에서 실행의 개념만 분리한 것으로 디스패칭의 단위이다.
  5. 하나의 프로세스 내에는 하나 이상의 쓰레드가 있을 수 있어, 다중 쓰레드를 생성하여 프로세스 내에서의 다중처리를 할 수 있다.