운영체제 공룡책

[운영체제 공룡책] 3장 ProcessManagement

studyingalone 2024. 11. 20. 14:36
728x90

운영체제 공룡책: 3장 Process Management

3.1 Process Concept

프로세스 정의:

실행 중인 프로그램을 의미하며, 프로그램 카운터와 프로세서 레지스터의 상태로 현재 활동이 표현됨.

 

프로그램과의 차이점:

  • 프로그램은 디스크에 저장된 명령어의 집합으로 수동적(entity)이다.
  • 프로세스는 실행 중이며 자원을 가진 능동적(entity)이다.

3.1.1 The Process

프로세스 메모리 구조:

  • 텍스트 섹션: 실행 코드 (크기 고정).
  • 데이터 섹션: 전역 변수 (크기 고정).
  • 스택: 함수 호출 시 매개변수, 반환 주소, 지역 변수를 저장하며 동적으로 변함.
  • : 동적 메모리 할당 시 확장 및 축소 가능.

Layout of a process in memory.

 

프로세스와 작업(job)의 관계:

  • 프로세스는 현대적 용어, 작업(job)은 초기 운영체제의 용어로 역사적 의미가 있음.

프로세스 생성:

  • 실행 파일을 메모리에 로드하면 프로세스가 생성됨.
  • 동일 프로그램도 실행마다 별개의 프로세스로 간주.

3.1.2 Process State

프로세스 상태

프로세스는 실행 중 상태가 변하며, 다음과 같은 상태를 가질 수 있다

  1. New: 프로세스가 생성 중인 상태.
  2. Running: 프로세서에서 명령어가 실행 중인 상태.
  3. Waiting: 특정 이벤트(I/O 완료, 신호 수신 등)를 기다리는 상태.
  4. Ready: 프로세서 할당을 기다리는 상태.
  5. Terminated: 실행을 완료한 상태.

Diagram of process state.

 

※ 중요 사항

  • 각 상태의 명칭은 운영체제마다 다를 수 있으나, 개념은 공통적임.
  • 일부 운영체제는 프로세스 상태를 더 세분화하여 관리함.
  • 하나의 프로세서(또는 코어)는 동시에 하나의 프로세스만 실행 가능.
  • 다수의 프로세스가 Ready 또는 Waiting 상태로 대기할 수 있음.

 


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

PCB란?

  • 운영체제가 프로세스를 관리하기 위해 사용하는 데이터 구조.
  • 각 프로세스에 대한 정보를 저장하며, 프로세스 실행 및 재개에 필요한 데이터를 포함.

PCB에 저장되는 정보

  1. 프로세스 상태(Process state): New, Ready, Running, Waiting, Terminated 등.
  2. 프로그램 카운터(Program counter): 다음에 실행할 명령어의 메모리 주소.
  3. CPU 레지스터(CPU registers): 프로세서 아키텍처에 따라 다양한 레지스터(누산기, 스택 포인터, 조건 코드 등)를 포함하며, 프로세스가 중단될 때 저장됨.
  4. CPU 스케줄링 정보(CPU-scheduling information): 프로세스 우선순위, 스케줄링 큐 포인터, 기타 스케줄링 매개변수.
  5. 메모리 관리 정보(Memory-management information): 베이스 및 제한 레지스터, 페이지 테이블 또는 세그먼트 테이블 정보.
  6. 회계 정보(Accounting information): CPU 사용 시간, 실시간 사용량, 시간 제한, 계정 번호, 작업 또는 프로세스 번호 등.
  7. I/O 상태 정보(I/O status information): 할당된 I/O 장치 목록, 열린 파일 목록 등.

Process control block (PCB)


3.1.4 Threads

스레드(Threads)란?

프로세스가 작업을 진행하는 단일 실행 흐름(thread of execution).

  • 예: 워드 프로세서가 실행 중일 때, 하나의 명령어 흐름만 처리 가능.
  • 단일 스레드는 동시에 여러 작업(입력과 맞춤법 검사 등)을 수행할 수 없음.

멀티스레드(multiple threads)란?

현대 운영체제는 프로세스가 여러 스레드를 가질 수 있도록 확장.

  • 멀티스레드 프로세스: 하나의 프로세스가 여러 작업을 병렬로 수행.
  • 예: 워드 프로세서에서 입력 처리를 담당하는 스레드와 맞춤법 검사를 수행하는 스레드가 동시에 실행.
  • 특히 멀티코어 시스템에서 멀티스레드는 병렬 처리를 통해 성능을 극대화.

3.2 Process Scheduling

다중 프로그래밍과 시분할의 목표

  1. 다중 프로그래밍(Multiprogramming)
    • CPU를 항상 바쁘게 유지하여 CPU 활용도를 극대화.
    • 메모리에 여러 프로세스를 유지하며, 하나가 대기 중일 때 다른 프로세스를 실행.
  2. 시분할(Time Sharing)
    • CPU를 프로세스 간에 빠르게 전환하여 사용자와 각 프로그램 간의 상호작용 가능.

프로세스 스케줄링

  • 단일 코어 시스템: 한 번에 하나의 프로세스만 실행 가능.
  • 다중 코어 시스템: 여러 프로세스를 병렬로 실행 가능.
  • 실행 대기 중인 프로세스는 코어가 비워질 때까지 대기하며, 이후 재스케줄링됨.
  • 다중 프로그래밍 정도: 메모리에 동시에 적재된 프로세스 수.

프로세스 유형

  1. I/O-집약적 프로세스:
    • 계산보다 I/O 작업에 더 많은 시간을 소모.
  2. CPU-집약적 프로세스:
    • 계산에 더 많은 시간을 소모하며 I/O 요청이 드뭄.

3.2.1 Scheduling Queues

큐의 종류와 역할

  1. 준비 큐(Ready Queue)
    • 실행 준비가 완료된 프로세스들이 대기하는 큐.
    • 연결 리스트 형태로 저장: 큐 헤더는 첫 번째 PCB를 가리키며, 각 PCB는 다음 PCB를 가리킴.
  2. 대기 큐(Wait Queue)
    • 특정 이벤트 발생(예: I/O 완료)을 기다리는 프로세스들이 대기.
    • 대기 상태에 있다가 이벤트가 발생하면 준비 상태로 전환되어 준비 큐로 이동.

The ready queue and wait queues

 

프로세스의 흐름

  1. 새로운 프로세스는 준비 큐에 추가됨.
  2. CPU 코어가 할당되면 실행 상태로 전환.
  3. 실행 중 다음 이벤트 중 하나가 발생:
    • I/O 요청: 대기 큐로 이동.
    • 자식 프로세스 생성: 자식 프로세스 종료를 기다리며 대기 큐로 이동.
    • 타임 슬라이스 만료 또는 인터럽트 발생: 다시 준비 큐로 이동.
  4. 프로세스는 이러한 상태 전환을 반복하다가 종료되면 모든 큐에서 제거되고 PCB 및 자원이 해제됨.

스케줄링의 시각화

  • 큐잉 다이어그램: 프로세스의 흐름(큐 간 이동과 자원 할당)을 시각적으로 표현.
    • 원은 자원을, 화살표는 프로세스 이동 경로를 나타냄.

Queueing-diagram representation of process scheduling.

 

 


3.2.2 CPU Scheduling

CPU 스케줄러 역할

  • 준비 큐에서 실행 가능한 프로세스 중 하나를 선택하여 CPU 코어를 할당.
  • 스케줄링 빈도:
    • I/O-집약적 프로세스는 몇 밀리초 실행 후 I/O 요청으로 대기 상태로 전환.
    • CPU-집약적 프로세스는 상대적으로 긴 시간 실행되지만, CPU 독점을 방지하기 위해 일정 시간 후 강제로 CPU에서 제거됨.
    • CPU 스케줄러는 일반적으로 100밀리초 이상 주기로 실행되며, 더 빈번하게 동작할 수도 있음.

스와핑(Swapping)

  • 개념:
    • 메모리에서 프로세스를 제거해 디스크로 옮기고, 이후 필요할 때 다시 메모리로 복원하여 실행.
    • 프로세스의 현재 상태를 저장하고 복원하는 방식으로, 실행 위치를 유지.
  • 목적:  메모리가 과다 할당(Overcommitment)된 경우, 메모리를 확보하고 다중 프로그래밍 정도를 줄임.
  • 활용 사례: 스와핑은 메모리가 부족한 상황에서만 사용됨.

3.2.3 Context Switch

현재 실행 중인 프로세스의 상태를 저장하고, 다른 프로세스의 상태를 복원하여 CPU 코어에서 실행을 전환하는 작업.

  • 프로세스의 컨텍스트는 PCB에 저장되며 다음 정보를 포함:
    • CPU 레지스터 값
    • 프로세스 상태
    • 메모리 관리 정보

동작 원리

  1. 상태 저장: 현재 프로세스의 상태를 PCB에 저장.
  2. 상태 복원: 새롭게 스케줄된 프로세스의 PCB에서 상태를 불러와 실행.

오버헤드 발생: 컨텍스트 스위치 중에는 유용한 작업이 수행되지 않음.

Diagram showing context switch from process to process

 


3.3  프로세스 운영(Operations on Processes)

대부분의 시스템에서 프로세스는 동시에 실행될 수 있으며 동적으로 생성 및 삭제될 수 있습니다.

따라서 이러한 시스템은 프로세스 생성 및 종료를 위한 메커니즘을 제공해야 한다.

 

3.3.1 Process Creation

부모 프로세스(parent)가 새로운 자식 프로세스(child)를 생성하며, 이를 통해 프로세스 트리가 형성됨.

  • 자식 프로세스는 고유한 PID(Process Identifier)로 식별.

자원 할당

  • 자식 프로세스는 CPU 시간, 메모리, 파일, I/O 장치 등의 자원을 필요로 함.
  • 자원 할당 방법:
    1. 부모가 자원을 나누어 제공.
    2. 운영체제가 자원을 직접 제공.
  • 자원 제한은 시스템 과부하를 방지.

실행 및 주소 공간의 선택

  1. 실행 방식
    • 부모와 자식이 병렬 실행.
    • 부모가 자식 종료 대기.
  2. 주소 공간
    • 자식이 부모의 주소 공간 복제.
    • 자식에 새로운 프로그램 로드.

A tree of processes on a typical Linux system.


3.3.2 프로세스 종료(Process Termination)

1. 정상적인 종료

  • exit() 시스템 호출로 프로세스 종료를 요청.
  • 종료 시, 상태 값(exit status)을 부모 프로세스에 반환 가능.
  • 프로세스의 모든 자원(CPU, 메모리, 열려 있는 파일, I/O 버퍼 등)은 운영체제에 의해 해제되고 회수됨.

2. 비정상 종료 및 강제 종료

  • 부모 프로세스가 자식을 강제로 종료 가능
  • 강제 종료 이유:
    • 자식이 할당된 자원을 초과 사용.
    • 자식 작업이 더 이상 필요하지 않음.
    • 부모가 종료되어 자식도 더 이상 실행 불가.

3. 특정 종료 현상

  • 캐스케이딩 종료(cascading termination)
    • 부모가 종료되면 자식 프로세스도 자동으로 종료.
    • 일부 시스템에서 운영체제가 이를 강제 시행.
  • 좀비 프로세스(zombie process)
    • 프로세스가 종료되었지만 부모가 wait()를 호출하지 않은 상태.
    • 프로세스의 종료 상태(exit status)는 부모가 회수할 때까지 프로세스 테이블에 남음.
    • 부모가 wait() 호출 시, 프로세스 테이블의 항목과 PID가 해제됨.
  • 고아 프로세스(orphan process)
    • 부모가 먼저 종료되어 남겨진 자식 프로세스.

4. 주요 시스템 호출

  • wait(): 부모가 자식의 종료를 대기하며 자식의 종료 상태를 얻음.

3.4 Interprocess Communication

독립 프로세스는 다른 프로세스와 데이터를 공유하지 않으며, 협력 프로세스는 다른 프로세스와 데이터를 공유하거나 영향을 주고받을 수 있다. 협력 프로세스는 데이터를 주고받기 위해 인터프로세스 통신(IPC) 메커니즘이 필요하다.

 

협력 프로세스를 위한 환경 제공 이유:

  1. 정보 공유(Information sharing): 여러 애플리케이션이 동일한 정보를 사용할 때, 이를 공유할 수 있는 환경이 필요하다.
  2. 계산 속도 향상(Computation speedup): 특정 작업을 여러 하위 작업으로 나누어 병렬 실행시켜 속도를 향상시킬 수 있다. 다중 처리 코어에서만 가능.
  3. 모듈화(Modularity): 시스템을 모듈화하여 각각의 기능을 별도의 프로세스나 스레드로 나누어 구성할 수 있다.

두 가지 IPC (Inter-Process Communication) 모델

  1. 공유 메모리 (Shared Memory):
    • 여러 프로세스가 공유하는 메모리 영역을 설정하고, 데이터를 읽고 쓸 수 있다.
    • 장점: 빠르며 시스템 호출이 최소화됨.
    • 단점: 동시 접근 시 충돌을 피해야 하므로 관리가 필요.
  2. 메시지 전달 (Message Passing):
    • 프로세스 간 메시지를 주고받으며 통신.
    • 장점: 작은 데이터 교환에 유용하고, 분산 시스템에서 구현이 용이.
    • 단점: 시스템 호출이 필요하여 성능이 공유 메모리보다 낮을 수 있음

Communications models. (a) Shared memory. (b) Message passing

 

 


3.5 IPC in Shared-Memory Systems

공유 메모리

  • 여러 프로세스가 메모리의 특정 영역을 공유하여 데이터를 읽고 쓸 수 있다. 이를 통해 데이터를 효율적으로 교환할 수 있으며, 프로세스 간 동기화가 필요하다.

Producer-Consumer Problem

  • 생산자(Producer)와 소비자(Consumer) 프로세스가 동시에 실행되며 데이터를 생산하고 소비하는 문제이다. 공유 메모리에서 버퍼를 통해 데이터를 교환하며, 동기화가 필수적이다.

Bounded Buffer

  • 고정된 크기의 버퍼를 사용하여, 버퍼가 가득 차면 생산자가 대기하고, 버퍼가 비면 소비자가 대기.

동기화 문제

  • 여러 프로세스가 동시에 공유 메모리에 접근할 때 동기화 문제가 발생할 수 있다.

3.6 IPC in Message-Passing Systems

 

메시지 전달

  • 프로세스 간 통신을 위해 운영 체제가 메시지 전달 방식을 제공한다. 주로 분산 시스템에서 사용되며, 프로세스 간 직접적인 메모리 공유 없이 메시지를 주고받는다.

기본 연산

  • 메시지 전달은 send()와 receive() 연산을 통해 이루어짐.

Naming

  • 메시지를 보내거나 받기 위해 프로세스는 다른 프로세스를 직접 지칭하거나 간접적으로 참조해야 한다. 간접 참조는 우편함(Mailbox)을 사용하며, 프로세스 간 메시지를 주고받기 위해서는 공유된 우편함이 필요.

동기화(Synchronization)

  • 메시지 전달은 차단형(Blocking) 또는 비차단형(Nonblocking) 방식으로 구현할 수 있다. 차단형은 메시지가 전달될 때까지 보내는 프로세스가 대기하며, 비차단형은 메시지를 보내고 즉시 작업을 계속한다.

버퍼링(Buffering)

  • 메시지를 저장하는 큐는 세 가지 유형:
    1. Zero capacity: 큐에 메시지를 하나도 저장할 수 없으며, 송신자는 메시지가 수신될 때까지 대기.
    2. Bounded capacity: 제한된 크기의 큐를 사용하며, 큐가 가득 차면 송신자는 대기.
    3. Unbounded capacity: 큐의 크기가 무한하여 송신자는 절대로 대기하지 않음.

 


3.7 Examples of IPC Systems

 

 

3.7.1 POSIX Shared Memory

공유 메모리에 메모리 매핑된 파일을 사용.


3.7.2 Mach Message Passing

macOS/iOS에서 사용되는 분산 시스템


3.7.3 Windows

동일한 머신의 프로세스 간 통신에 최적화

 

포트 유형

  1. 연결 포트(Connection Ports): 클라이언트가 연결을 요청할 수 있도록 허용
  2. 통신 포트( Communication Ports ): 클라이언트-서버 메시징을 위한 비공개 채널

3.7.4 Pipes

프로세스 간 데이터 교환을 허용하는 가장 간단한 IPC 메커니즘

 

일반 파이프(Ordinary Pipes)

  • 특성:
    • 단방향
    • 부모-자식 프로세스 관계가 필요

명명된 파이프(Named Pipes)

  • 특성:
    • 양방향 통신을 허용
    • 부모-자식 관계는 필요 x
    • 프로세스가 종료된 후에도 지속

3.8 Communication in Client–Server Systems

클라이언트-서버 시스템의 통신을 위해 소켓과 RPC 살펴보자

 

3.8.1 Sockets

 

  • 소켓은 네트워크 통신을 위한 끝점으로, IP 주소와 포트 번호로 식별된다.
  • 클라이언트-서버 구조를 기반으로 하며, 서버는 특정 포트에서 클라이언트 요청을 수신 대기한다.

Communication using sockets.

 

자바에서 제공하는 소켓 라이브러리 

  • TCP 소켓: Socket 클래스 (연결 지향적).
  • UDP 소켓: DatagramSocket 클래스 (비연결 지향적).

 


3.8.2 Remote Procedure Calls

 

  • RPC는 네트워크 상의 시스템 간 절차 호출을 추상화한 방식으로, 로컬 호출처럼 원격 절차를 실행할 수 있게 함.
  • 메시지 기반 통신을 사용하며, 호출 세부사항은 클라이언트와 서버의 스텁(stub)이 처리한다.

 

작동 과정

  • 클라이언트 스텁이 서버의 포트를 찾아 매개변수를 구조화하여 전송.
  • 서버 스텁이 메시지를 수신해 해당 절차를 실행하고 결과를 클라이언트로 반환.

 

 

728x90
반응형