프로세스란?

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

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

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

프로세스의 구성

  1. 메모리 구조 : 프로그램 실행에 직접적으로 필요한 코드와 데이터
    • 코드영역 : 프로그램 자체
    • 데이터영역 : 프로그램 실행 시 필요한 데이터 (ex. 상수나 변수의 값, 서브프로그램 호출상태 등)
      1) 정적 데이터 영역
      2) 스택 영역
      3) 힙 영역

  2. 프로세스 제어 블록 (PCB)
    • 운영체제가 프로세스를 관리하기 위해 필요한 정보
    • 프로세스번호(PID), 프로세스 상태, 프로그램 카운터(PC), 레지스터, 메모리 관리 정보, 프로세스 우선순위, 회계정보 등
    • 각 프로세스마다 존재
    • 여러 프로세스가 번갈아 실행되는 경우 PCB에 저장된 정보 활용

프로세스 상태

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

  2. 프로세스 상태 변화
    • 생성 : 준비로만 변화 가능
    • 준비 : 실행으로 디스패치
    • 실행 : 할당시간 만료되면 준비로 변화, 대기/종료로 변화
    • 대기 : 재개 조건 만족하면 준비로 변화

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

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

프로세스 생성 시스템 호출

  1. UNIX, Linux : fork();
    • 자식 프로세스는 부모 프로세스의 복제
  2. UNIX, Linux : exec();
    • 자식 프로세스는 부모 프로세스와는 다른 프로그램 실행
  3. Windows : CreateProcess()
    • 자식 프로세스는 새로운 프로그램으로 생성
  4. 프로세스 종료 방법
    • 프로세스가 모든 처리를 완료 (정상적 종료)
    • 부모 프로세스에 의해 자식 프로세스가 강제 종료
      • 프로세스 종료 시스템 호출 이용
      • 자식 프로세스 생성시 얻은 자식 PID 이용
    • 부모 프로세스가 종료되는 경우 운영체제가 자식 프로세스 종료

쓰레드

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

  2. 쓰레드
    • 프로세스 내에서 다중처리를 위해 제안된 개념
    • 하나의 프로그램을 실행하기 위한 기본적인 단위
    • 디스패칭의 단위
      • cf) 자원 소유의 단위 : 프로세스
    • 하나의 프로세스 내에는 하나 이상의 쓰레드 존재
    • 쓰레드는 실행에 필요한 최소한의 정보만 가짐
    • PC를 포함한 레지스터 값, 상태정보, 스택 영역 (나머지 정보는 프로세스에 두고 다른 쓰레드와 공유)

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

Updated: