Home [운영 체제] 2강 - 프로세스와 쓰레드
Post
Cancel

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

💡해당 게시글은 방송통신대학교 김진욱 교수님의 '운영 체제' 강의를 개인 공부 목적으로 메모하였습니다.



학습 개요


  • 프로그램을 실행시키면 운영 체제로부터 프로그램이 동작하는 데 필요한 자원을 할당 받아 동작을 시작함
  • 이처럼 실행 상태에 들어간 프로그램을 프로세스라고 함
  • 프로세스의 동작은 CPU가 그 프로세스의 명령들을 실행하는 것임
  • 이때 CPU도 기억 장치나 입출력 장치와 마찬가지로 프로세스가 동작하는데 필요한 자원임
  • 그리고 프로세스 내 에서의 다중 처리를 위해 한 프로세스 안에 여러 개의 쓰레드를 두기도 함
  • 운영 체제의 핵심적인 구성 요소 중 하나인 프로세스에 대한 기본적인 이해와 함께 쓰레드의 개념을 학습함



학습 목표


  • 프로세스의 개념을 설명할 수 있음
  • 쓰레드의 개념을 설명할 수 있음
  • 프로세스와 쓰레드의 관계를 설명할 수 있음



강의록


프로세스

프로세스의 개요

  • 프로세스(process)

    image13.png

    • 작업 관리자
        • 사용자가 실행 시킨 프로세스
      • 백 그라운드 프로세스
        • 시스템 프로세스
      • PID
        • 프로세스 아이디
        • 프로세스에 해당하는 번호
        • 운영 체제가 같은 파일 이름을 갖는 여러 개의 다른 프로세스를 별도로 구분해 관리해주기 위해 이용
    • 실행 중인 프로그램
    • 프로그램
      • 동작을 하지 않는 정적·수동적 개체
      • 저장 장치에 있을 때는 프로그램에 관련된 명령어들의 리스트들이 쭉 들어있음
    • 프로세스
      • 동작을 하는 능동적 개체
      • 실제 프로세스가 되면 메모리 공간에는 그 프로그램 자체에다가 부가적인 다양한 데이터들이 더 필요해져 용량이 더 커짐
        • 프로세스 자체는 프로그램 사이즈보다 훨씬 큼
  • 운영 체제로부터 자원을 할당 받아 동작

    • 자원
      • CPU, 메모리, 입출력 장치, 파일 등
    • 동작
      • CPU가 프로세스의 명령을 실행

프로세스와 운영 체제

  • 프로세스를 생성 및 종료
  • 프로세스를 실행시키기 위한 스케줄링 작업
  • 프로세스의 상태 관리

프로세스의 구성

  • 메모리 구조
    • 프로그램 실행에 직접적으로 필요한 코드와 데이터

      image.png

    • 코드 영역
      • 프로그램 자체
    • 데이터 영역
      • 프로그램 실행 시 필요한 데이터
        • 상수나 변수의 값
        • 서브 프로그램 호출 상태 등
      • 정적 데이터 영역
        • 프로그램 시작부터 끝까지 관리되어야 하는 변수(상수, 전역변수) 보관
      • 스택 영역
        • 함수 호출 및 지역 변수 저장
      • 힙 영역
        • 동적으로 할당되는 메모리 공간
        • 동적 변수들 중에서 사용자가 수동으로 할당하는 것 저장
  • 프로세스 제어 블록(PCB)

    image.png

    • 운영 체제가 프로세스를 관리하기 위해 필요한 정보
    • 각 프로세스마다 존재
    • 여러 프로세스가 번갈아 실행되는 경우 PCB에 저장된 정보 활용
    • 프로그램 카운터(PC)
      • 현재 실행 중인 명령어에 바로 다음 명령어의 위치 값을 가지고 있어야 함
      • 제어의 흐름

프로세스 상태 관리

image.png

프로세스 상태 변화

image.png

  • 디스패치
    • 준비 큐에서 준비하다가 cpu 할당 받게 되는 것
    • 특정 프로세스에다가 cpu를 할당해 주는 과정 자체

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

  • 프로세스 생성 방법
    • 사용자가 프로그램을 직접 실행
    • 한 프로세스가 다른 프로세스를 생성
      • 프로세스 생성 시스템 호출 이용
      • 시스템 호출
        • 사용자 모드에서 동작을 하다가 자원 할당 같은 것이 필요할 때 커널 모드로 변화 시킴
  • 부모 프로세스
    • 시스템 호출을 하는 프로세스
  • 자식 프로세스
    • 시스템 호출을 통해 새로 생성된 프로세스

프로세스 생성 시스템 호출

  • UNIX, Linux
    • fork();
    • 자식 프로세스는 부모 프로세스의 복제본

      image.png

      • pid 값만 달라짐
      • fork 후 자식 pid 결과 값을 받아오기 때문에 부모 프로세스는 자식 프로세스의 pid 정보를 알 수 있음
      • 자식 프로세스는 포크 후 pid 결과 값 0 값을 받아와 자식 프로세스인지 구분할 수 있게 됨
  • UNIX, Linux
    • fork();
    • 자식 프로세스는 부모 프로세스와는 다른 프로그램 실행

      image.png

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

      image.png

쓰레드

전통적인 프로세스

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

    image.png

    • 코드(Code) 영역
      • 실행할 프로그램 코드가 저장되는 공간
    • 정적 데이터(Data) 영역
      • 전역 변수 및 초기화된 데이터 저장
    • 스택(Stack) 영역
      • 함수 호출, 지역 변수 저장
    • 힙(Heap) 영역
      • 동적 메모리 할당을 위한 공간
    • PCB (Process Control Block)
      • 프로세스의 상태, PID(프로세스 ID), PC(Program Counter) 등 정보를 저장
  • 자원 소유의 단위
    • 하나의 메모리 구조
  • 디스패칭의 단위
    • 하나의 제어 흐름
  • 프로세스 내에서 다중 처리 불가능

쓰레드(thread)

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

    image14

    • 코드(Code) 영역
      • 모든 쓰레드가 공유
    • 정적 데이터(Data) 영역
      • 모든 쓰레드가 공유
    • 힙(Heap) 영역
      • 모든 쓰레드가 공유
    • 스택(Stack) 영역
      • 각각의 쓰레드가 독립적으로 가짐
    • PC (Program Counter)
      • 각 쓰레드가 개별적으로 가짐
  • 하나의 프로그램을 실행하기 위한 기본적인 단위
    • 하나의 프로세스 안에서 여러 개의 작업(쓰레드)이 동시에 실행될 수 있도록 함
  • 디스패칭의 단위
    • 자원 소유의 단위 : 프로세스
  • 하나의 프로세스 내에는 하나 이상의 쓰레드 존재
  • 하나의 메모리 구조를 공유하는 여러 제어 흐름
    • 프로세스의 메모리 공간(코드, 데이터, 힙)을 공유하지만, 각 쓰레드는 독립적인 스택과 레지스터를 가짐

프로세스 비교

구분전통적인 프로세스쓰레드가 있는 프로세스
실행 흐름단일 실행 흐름다중 실행 흐름(쓰레드)
작업 처리 방식하나씩 순차 실행여러 개의 작업을 동시에 수행 가능
메모리 공유독립적인 메모리 사용같은 프로세스 내에서 메모리 공유
속도상대적으로 느림상대적으로 빠름 (병렬 처리 가능)
  • 전통적인 프로세스

    image.png

    • 하나의 프로세스는 하나의 실행 흐름을 가짐
    • 한 번에 하나의 작업만 수행할 수 있음
    • 프로세스 내부에는 PC(Program Counter, 프로그램 카운터)가 있어서 현재 실행 중인 명령어를 추적함
  • 쓰레드 있는 프로세스

    image.png

    • 하나의 프로세스 내에 여러 개의 실행 흐름(쓰레드)이 존재할 수 있음
    • 각 쓰레드는 자신만의 PC를 가지고, 동시에 실행될 수 있음
    • 같은 프로세스 안에서 여러 작업을 병렬로 실행할 수 있어서 성능이 향상됨

쓰레드와 프로세스

비교 항목프로세스쓰레드
실행 단위독립적인 실행 단위프로세스 내에서 실행되는 흐름
자원 소유자체적으로 메모리 및 자원 소유프로세스의 자원을 공유
메모리 구조독립적인 메모리 구조코드, 데이터, 힙을 공유하고 스택은 개별적
생성 속도상대적으로 느림상대적으로 빠름
문맥 전환 속도상대적으로 느림상대적으로 빠름
다중 처리프로세스 간 통신(IPC)이 필요같은 프로세스 내에서 쉽게 다중 처리 가능
  • 쓰레드는 실행에 필요한 최소한의 정보만 가짐

    image.png

    • PC를 포함한 레지스터 값
    • 상태 정보
    • 스택 영역
  • 나머지 정보는 프로세스에 두고 다른 쓰레드와 공유

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

  • 멀티 CPU 또는 멀티 코어 컴퓨터 시스템

    image.png

    • 다중 쓰레드를 병렬로 처리 가능
  • 처리 속도 별로 쓰레드가 나눠진 경우

    image.png

    • 효율적인 처리 가능



정리 하기


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

[Java 프로그래밍] 3강 - JAVA 기본 문법

[유비쿼터스 컴퓨팅 개론] 2강 - 유비쿼터스 컴퓨팅 개념과 주요 이슈