1. 프로세스 개요

  • 프로세스(process) : 실행 중인 프로그램
    • 포그라운드 프로세스(foreground process) : 사용자가 보는 앞에서 실행되는 프로세스
    • 백그라운드 프로세스(background process) : 보이지 않는 공간에 실행되는 프로세스
      • 사용자와 직접 상호작용 가능
      • 사용자와 상호작용 X 묵묵히 일만 → 데몬(daemon) in UNIX / 서비스(service) in 윈도우

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

  • 프로세스 관련된 정보 저장하는 자료 구조.
  • 커널 영역에 생성
  • 운영체제는 PCB로 특정 프로세스 식별 & 해당 프로세스 처리하는 데 필요한 정보 판단
  • new 프로세스 생성 = 운영체제가 PCB 생성
  • 프로세스 종료 = 운영체제가 PCB 폐기

PCB에 담기는 정보

  1. 프로세스 ID(PID : Process ID) : 특정 프로세스 식별하기 위해 부여하는 고유 번호
    • 같은 일 수행 프로그램도 2번 실행하면 PID 다름.
  2. 레지스터 값 : 자신의 실행 차례가 돌아오면 이전까지 사용했던 레지스터의 중간값 복원
  3. 프로세스 상태 : 입출력 장치 대기? CPU 사용 대기? CPU 사용 중?
  4. CPU 스케줄링 정보 : 프로세스가 언제, 어떤 순서로 CPU 할당받을지
  5. 메모리 관리 정보 : 프로세스가 어느 주소에 저장되어 있는지.
  6. 베이스 레지스터, 한계 레지스터 값
  7. 페이지 테이블 정보
  8. 사용한 파일과 입출력장치 목록 : 어떤 입출력장치 할당? 어떤 파일 열었는지?

문맥 교환(Context Switching)

  • 문맥(context) : 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보 (중간 정보)
  • 문맥 교환(context switching) : 기존 프로세스 문맥 PCB 백업, new 프로세스 문맥 PCB로부터 복구해 실행하는 것
    • 여러 프로세스가 빠르게 번갈아 가며 실행되는 원리
    • 너무 자주하면 오버헤드 발생 가능

프로세스의 메모리 영역

1. 코드 영역 (Code Segment)

  • = 텍스트 영역 (text segment)
  • 실행할 수 있는 코드, 기계어로 이루어진 명령어 저장
  • CPU가 실행할 명령어 저장 → 쓰기 금지
  • 읽기 전용(read-only) 공간.

    2. 데이터 영역 (Data Segment)

  • 프로그램이 실행되는 동안 유지할 데이터 저장
  • 전역 변수(global variable) : 프로그램이 실행되는 동안 유지. 프로그램 전체에서 접근 가능 변수

  • 정적 할당 영역
    • 크기가 고정된 영역
    • 코드 영역 & 데이터 영역

3. 힙 영역 (Heap Segment)

  • 프로그래머가 직접 할당 가능한 공간
  • 할당하면 언젠간 반환 해야 함. 안하면 메모리 누수(memory leak) 발생

    4. 스택 영역 (Stack Segment)

  • 데이터를 일시적으로 저장하는 공간
  • 매개 변수, 지역 변수 등 일시적 사용 데이터

  • 동적 할당 영역
    • 실시간으로 크기 변경 가능 영역
    • 힙 영역 : 낮은 → 높은
    • 스택 영역 : 높은 → 낮은

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

프로세스 상태

1. 생성 상태 (New)

  • 프로세스가 생성 중인 상태
  • 막 메모리에 적재되어 PCB 할당 받은 상태

    2. 준비 상태 (Ready)

  • CPU 할당 받아 실행 가능 but 아직 기다리는 상태

    3. 실행 상태 (Running)

  • CPU 할당 받아 실행 중인 상태.
  • 할당된 시간만 CPU 사용 가능.
  • 시간 모두 사용시 → 준비 상태
  • 실행 도중 입출력장치 사용해 기다려야 함 → 대기 상태

    4. 대기 상태 (Blocked)

  • 입출력장치의 작업 기다리는 상태
  • 대기 끝나면 → 준비 상태

    5. 종료 상태 (Terminated)

  • 프로세스 종료 상태.
  • 운영체제가 PCB와 메모리 정리

  • 프로세스 상태 다이어그램 (process state diagram)

프로세스 계층 구조

  • 부모 프로세스 (parent process) : 실행 도중 시스템 호출 통해 다른 프로세스 생성한 프로세스
  • 자식 프로세스 (child process) : 부모 프로세스에 의해 생성된 프로세스
  • 서로 다른 PID 가짐. 일부 운영체제에서는 자식 PCB에 PPID(Parent PID) 기록됨.
  • 프로세스 계층 구조 : 프로세스가 프로세스를 낳는 계층적 구조. Tree 형태

프로세스 생성 기법

  • fork : 부모 프로세스가 자신의 복사본을 자식 프로세스로 생성. 부모 프로세스 자원 상속. PID, 메모리 위치 다름.
  • exec : 만들어진 복사본의 메모리 공간을 다른 프로그램으로 교체. 새로운 프로그램 내용으로 전환해 실행.
    • 코드 & 데이터 영역 : 실행할 프로그램으로 바꿈
    • 힙 & 스택 영역 : 초기화 → both 시스템 호출
  • fork 만 하고 exec 안하는 경우도 있음 → 같은 코드 병행 실행.

3. 스레드

  • 스레드 (Thread) : 프로세스를 구성하는 실행의 흐름 단위
    • 1 프로세스 - 多 스레드 가능
    • 한 프로세스에서 여러 부분 동시 실행 가능

      프로세스와 스레드

  • 단일 스레드 프로세스 : 프로세스가 하나의 실행 흐름을 가지고 한 번에 하나의 부분만 실행.
  • 스레드 : 프로세스 내에서 각기 다른 ID, 프로그램 카운터 값, 레지스터 값, 스택으로 구성. → 스레드마다 다른 코드 실행 가능

    • 실행에 필요한 최소한의 정보만 유지 → 나머지는 프로세스 자원 공유

      멀티프로세스와 멀티스레드

  • 멀티프로세스 (multiprocess) : 여러 프로세스를 동시에 실행하는 것
  • 멀티스레드 (multithread) : 여러 스레드로 하나의 프로세스 동시에 실행하는 것

글 이동

Comments