[컴퓨터과학] 운영체제(OS) - Process & Scheduling 알고리즘 & IPC

Kyung Jae, Cheong·2024년 11월 2일
post-thumbnail

운영체제(OS) - Process & Scheduling & IPC

1. Process란?

프로세스(process)실행 중인 프로그램을 의미합니다. 프로그램이 메모리에 올라와 실행되는 순간 프로세스가 됩니다.

  • 프로세스는 메모리에 올라와 실행되는 프로그램이며, 실행 파일(코드 이미지)을 기반으로 동작합니다.
  • 하나의 응용 프로그램은 여러 프로세스로 구성될 수 있습니다.
  • "작업(task)" 또는 "작업(job)"이라는 용어로도 사용됩니다.

1.1 프로세스의 구조

메모리에서 프로세스는 다음과 같은 구조로 구성됩니다:

  • text(CODE): 프로그램의 실행 코드
  • data: 전역 변수 및 초기화된 데이터
  • stack: 함수 호출로컬 변수임시 데이터를 저장하는 영역
  • heap: 실행 중 동적으로 할당되는 메모리 공간 (객체, 등)

1.2 프로세스 제어 블록(PCB)

운영체제는 각 프로세스의 상태와 관련된 정보를 프로세스 제어 블록(PCB, Process Control Block)에 저장합니다.

PCB는 프로세스 관리에 필요한 여러 정보를 포함하며, 주요 항목은 다음과 같습니다:

  • 프로세스 ID (PID)
    • 프로세스를 식별하기 위한 고유 번호입니다.
  • 프로그램 카운터(PC, Program Counter)
    • 다음에 실행할 명령어메모리 주소를 가리키며, 프로세스의 순차적 실행을 보장합니다.
  • 스택 포인터(SP, Stack Pointer)
    • 현재 스택의 최상단 위치를 가리키며, 함수 호출 시 임시 데이터를 저장하고 복원하는 데 중요한 역할을 합니다.
  • 레지스터 정보
    • 프로세스 실행에 필요한 CPU 레지스터의 상태를 저장합니다.
  • 메모리 관리 정보
    • 프로세스가 사용하는 메모리 영역(코드, 데이터, 스택, 힙)시작 주소와 크기 등이 포함됩니다.
  • 프로세스 상태
    • 프로세스가 실행 중인지, 대기 중인지, 종료 상태인지 등을 나타냅니다.

PCB는 컨텍스트 스위칭현재 프로세스의 상태를 저장하고, 다음 프로세스의 상태를 복원하는 데 필수적입니다.

  • PCSP는 PCB에 저장된 주요 정보로, CPU가 다른 프로세스로 전환될 때 실행 위치와 스택 상태를 정확히 복원할 수 있도록 합니다.

1.3 컨텍스트 스위칭(Context Switching)

컨텍스트 스위칭은 CPU가 한 프로세스에서 다른 프로세스로 전환할 때 발생하는 과정입니다.

  • PCB에 저장된 PCSP 등의 정보를 통해 프로세스의 상태를 저장하고 복원합니다.
  • 컨텍스트 스위칭은 일정한 오버헤드를 가지지만, 프로세스 간 자원 사용을 공정하게 배분하기 위해 필수적인 과정입니다.

2. 운영체제 Process 스케줄링(Scheduling) 방식

운영체제는 CPU 자원을 효율적으로 사용하고, 여러 프로세스가 동시에 실행될 수 있도록 스케줄링 방식을 사용합니다.

스케줄링 방식은 운영체제의 목적과 시스템의 요구에 따라 두 가지 주요 분류로 나눌 수 있습니다.

  1. 운영체제 처리 방식에 따른 분류

    • 배치 처리 시스템 (Batch Processing)
    • 시분할 시스템 (Time Sharing)
  2. 프로세스 실행 방식에 따른 분류

    • 멀티태스킹 (Multitasking)
    • 멀티프로그래밍 (Multiprogramming)
    • 멀티프로세싱 (Multiprocessing)

2.1 운영체제 처리 방식에 따른 분류 (Batch & Time)

운영체제는 작업을 처리하는 목적과 방식에 따라 배치 처리 시스템시분할 시스템으로 분류됩니다.

배치 처리 시스템 (Batch Processing)

  • 여러 작업을 한꺼번에 모아 순차적으로 실행하는 방식입니다.
  • 주로 오래 걸리는 작업을 일괄 처리하며, 대기 시간이 길지만 시스템 처리량이 높은 방식입니다.
  • 예: 월말 정산, 대규모 데이터 분석 작업 등

시분할 시스템 (Time Sharing)

  • 여러 사용자가 동시에 시스템을 사용하는 것처럼 보이도록 짧은 시간 단위로 교대로 실행하는 방식입니다.
  • 각 프로세스에 일정 시간(타임슬라이스)을 할당하여 교대로 실행되며, 빠른 응답 시간과 다중 사용자 지원이 목적입니다.
  • 예: 여러 사용자가 동시에 사용하는 서버 환경

2.2 프로세스 실행 방식에 따른 분류 (Multi)

프로세스를 실행하는 방식에 따라 멀티태스킹, 멀티프로그래밍, 멀티프로세싱으로 분류됩니다.

멀티태스킹 (Multitasking):

  • 단일 CPU가 여러 작업을 동시에 수행하는 것처럼 보이게 하는 방식입니다.
  • CPU가 각 작업에 빠르게 교대로 시간을 할당하여 동시 실행되는 것처럼 보이게 합니다.
  • 주로 시분할 시스템에서 사용되며, 사용자에게 여러 작업이 동시에 진행되는 경험을 제공합니다.

멀티프로그래밍 (Multiprogramming):

  • CPU 사용률을 최대화하기 위해 여러 프로그램이 메모리에 동시에 적재되어, CPU가 대기 시간 없이 연속적으로 작업을 수행하는 방식입니다.
  • CPU가 유휴 상태에 놓이지 않도록 하여 CPU 활용도를 극대화하는 것이 목적입니다.
  • 주로 배치 처리 시스템에서 사용됩니다.

멀티프로세싱 (Multiprocessing):

  • 여러 CPU(또는 코어)를 사용하여 여러 작업을 병렬로 실행하는 방식입니다.
  • 각 프로세스가 별도의 CPU에서 동시에 실행되어 병렬 처리를 통해 시스템 성능을 극대화합니다.
  • 주로 서버나 대규모 데이터 처리가 필요한 시스템에서 사용됩니다.

3. 스케줄링 알고리즘

스케줄링 알고리즘운영체제가 프로세스에 CPU 자원을 할당하는 방식을 결정합니다.

  • 각 알고리즘은 효율적인 자원 사용, 응답 시간 개선, 처리량 증가 등 운영체제의 목표에 맞추어 설계되었습니다.

3.1 FIFO(First In, First Out) 스케줄러

FIFO 스케줄러먼저 도착한 프로세스부터 차례대로 실행하는 방식입니다. 가장 단순한 스케줄링 방식으로, FCFS(First Come, First Served) 스케줄링이라고도 불립니다.

  • 특징:

    • 먼저 요청한 프로세스가 먼저 처리됩니다.
    • 배치 처리 시스템에서 자주 사용됩니다.
    • 순차적으로 작업을 처리하므로, 대기열이 생기기 쉬우며 긴 작업이 앞에 있을 경우 대기 시간이 길어지는 단점이 있습니다.

  • 장점: 구현이 간단하며, 선착순 방식으로 공정성이 있습니다.

  • 단점: 긴 작업이 먼저 들어오면 다른 작업이 오래 기다려야 하는 Convoy 효과가 발생할 수 있습니다.

3.2 최단 작업 우선(SJF) 스케줄러

SJF(Shortest Job First) 스케줄러실행 시간이 가장 짧은 프로세스부터 먼저 실행하는 방식입니다. 각 프로세스의 예상 실행 시간을 바탕으로 스케줄링을 결정하여 평균 대기 시간을 최소화합니다.

  • 특징:

    • 실행 시간이 짧은 작업을 우선 처리하므로, 전체 대기 시간이 줄어드는 효과가 있습니다.
    • 비선점형 방식에서는 도중에 다른 프로세스가 개입하지 않고, 한 번 시작하면 완료될 때까지 실행됩니다.
    • 선점형 방식에서는 실행 시간이 짧은 새로운 프로세스가 도착할 경우, 현재 작업을 중단하고 짧은 작업을 먼저 실행합니다. 이를 Shortest Remaining Time First (SRTF)라고도 합니다.

  • 장점: 평균 대기 시간이 최소화됩니다.

  • 단점: 실행 시간이 긴 작업이 계속 밀릴 수 있으며, 실행 시간을 미리 정확히 예측하기 어려운 경우가 있습니다.

3.3 우선순위 기반 스케줄러

우선순위 기반 스케줄러는 각 프로세스에 우선순위를 부여하고, 우선순위가 높은 프로세스부터 실행하는 방식입니다. 응급 상황이나 긴급한 작업을 먼저 처리해야 하는 경우에 유용합니다.

  • 특징:

    • 우선순위는 정적(미리 지정된 우선순위)일 수도 있고, 동적(상황에 따라 변화)일 수도 있습니다.
    • 낮은 우선순위의 프로세스가 무한히 대기하게 되는 기아(Starvation) 현상이 발생할 수 있습니다.

  • 장점: 중요한 작업을 우선 처리할 수 있어, 긴급한 상황에 유용합니다.

  • 단점: 기아 문제를 해결하기 위해 에이징(Aging) 기법이 필요할 수 있습니다. 에이징은 오래 대기 중인 프로세스의 우선순위를 점진적으로 높여주는 기법입니다.

3.4 라운드 로빈(Round Robin) 스케줄러

라운드 로빈(Round Robin) 스케줄러는 각 프로세스에 일정한 시간(Time Slice 또는 Quantum)을 할당하여, 교대로 실행하는 방식입니다. 주로 시분할 시스템에서 사용되며, 공평성을 강조하는 방식입니다.

  • 특징:

    • 각 프로세스는 타임 슬라이스 동안 실행되며, 시간이 다 되면 대기열의 맨 뒤로 이동하여 다음 프로세스가 실행됩니다.
    • 타임 슬라이스가 짧을수록 응답 시간이 빨라지지만, 컨텍스트 스위칭 오버헤드가 증가합니다.

  • 장점: 모든 프로세스가 공평하게 CPU 시간을 할당받아, 사용자가 대기 시간을 예측하기 쉽습니다.

  • 단점: 타임 슬라이스가 너무 길면 FCFS(FIFO)와 유사하게 작동하고, 너무 짧으면 컨텍스트 스위칭으로 인한 오버헤드가 커집니다.

3.5 프로세스 상태 기반 스케줄러

프로세스 상태 기반 스케줄러프로세스의 상태에 따라 스케줄링을 결정합니다. 이는 일반적으로 멀티프로그래밍 시스템에서 사용되며, 프로세스의 상태는 실행(running), 준비(ready), 대기(blocked) 상태로 나뉩니다.

  • 특징:

    • 프로세스는 실행 상태, 준비 상태, 대기 상태를 오가며 실행됩니다.
    • CPU가 유휴 상태에 있지 않도록 준비 상태에 있는 프로세스 중 하나를 선택해 실행합니다.

  • 장점: 시스템 자원을 효율적으로 활용할 수 있으며, 멀티태스킹을 효과적으로 지원합니다.

  • 단점: 대기 상태로 전환된 프로세스는 I/O 작업이 완료될 때까지 CPU를 사용하지 못해 대기 시간이 생길 수 있습니다.

4. 프로세스 간 통신(IPC)

운영체제에서 프로세스독립적인 메모리 공간을 가지며, 다른 프로세스의 메모리 공간에 직접 접근할 수 없습니다.

  • 이는 프로세스 간 상호작용이 안전하게 이루어지도록 보장하지만, 동시에 프로세스 간 통신(IPC, InterProcess Communication)이 필요하게 만듭니다.
  • IPC는 서로 독립된 프로세스가 데이터를 주고받고, 자원을 효율적으로 공유할 수 있도록 다양한 방법을 제공합니다.

4.1 프로세스 간 통신의 필요성과 파일 방식의 한계

프로세스는 독립된 메모리 공간을 사용하기 때문에 다른 프로세스와 직접적인 데이터 공유가 불가능합니다.

  • 그러나 여러 프로세스가 협력하여 작업을 수행해야 하는 경우, 데이터를 주고받거나 특정 자원에 대한 접근을 조율해야 합니다.

초기에는 파일을 통해 데이터를 주고받는 방식이 사용되었습니다.

  • 각 프로세스가 파일에 데이터를 저장하고, 다른 프로세스가 이를 읽는 방식입니다.
  • 하지만 파일 방식은 실시간 통신에 적합하지 않고, 속도가 느리며, 파일 I/O 오버헤드가 발생합니다.
  • 이로 인해 실시간 데이터 교환이나 빠른 응답이 필요한 상황에서는 비효율적입니다.

이러한 한계를 해결하기 위해 커널 공간을 활용한 다양한 IPC 방식이 등장하게 되었습니다.

  • 특히 메시지 큐, 공유 메모리, 파이프는 커널 공간을 통해 빠르고 안전하게 데이터를 주고받을 수 있어 자주 사용됩니다.

4.2 주요 IPC 방식

  1. 메시지 큐 (Message Queue):

    • 운영체제에서 제공하는 큐 구조를 통해 데이터를 주고받는 방식입니다.
    • 프로세스 간에 일정한 순서로 메시지를 전달하며, 커널 공간을 통해 안전하게 데이터가 교환됩니다.
    • 메시지 큐비동기적으로 통신할 수 있어, 프로세스들이 서로 독립적으로 동작하면서도 데이터를 교환할 수 있습니다.
  2. 공유 메모리 (Shared Memory):

    • 여러 프로세스가 하나의 메모리 공간을 공유하여 데이터를 교환하는 방식입니다.
    • 프로세스들이 가장 빠르게 데이터를 주고받을 수 있는 방식으로, 커널 공간에 생성된 메모리 영역을 프로세스들이 공유합니다.
    • 빠른 데이터 교환이 가능하지만, 데이터 동기화를 위해 세마포어 등의 추가적인 동기화 기법이 필요할 수 있습니다.
  3. 파이프 (Pipe):

    • 두 프로세스 간에 데이터를 스트림 형태로 주고받는 방식입니다.
    • 익명 파이프는 같은 부모 프로세스에서 생성된 자식 프로세스 간의 통신에 주로 사용됩니다.
    • 이름 있는 파이프(named pipe)는 서로 다른 프로세스 간의 통신도 가능하게 하며, 커널 공간을 통해 데이터가 안전하게 전달됩니다.

4.3 기타 IPC 방식

  • 파일 (File):

    • 간단한 데이터를 저장하고 읽는 방식입니다. 각 프로세스가 파일을 통해 데이터를 공유할 수 있지만, 속도가 느리고 실시간 통신에는 적합하지 않습니다.
    • : 로그 파일을 작성하여 여러 프로세스가 정보를 기록하거나 참조하는 방식
  • 세마포어 (Semaphore):

    • 여러 프로세스가 동시에 접근할 수 없는 공유 자원에 접근할 순서를 제어하는 동기화 기법입니다.
    • 커널 공간에서 관리되며, 프로세스 간 경쟁 상태를 방지하는 데 주로 사용됩니다.
    • 데이터를 직접 주고받기보다는, 특정 자원에 대한 접근을 조율하는 데 주로 사용됩니다.
  • 소켓 (Socket):

    • 네트워크를 통한 프로세스 간 통신에 사용됩니다. 로컬뿐만 아니라 네트워크상에서 서로 다른 컴퓨터 간의 통신도 가능합니다.
    • TCP/IPUDP 프로토콜을 통해 프로세스 간에 데이터를 주고받을 수 있어, 클라이언트-서버 구조의 프로그램에 자주 사용됩니다.

4.4 IPC 방식 요약 및 비교

IPC 방식커널 공간 활용실시간 통신 가능주요 특징
파일아니오아니오간단한 데이터 저장과 읽기, 실시간 통신에 비효율적
메시지 큐큐 구조로 순서 있는 메시지 전달, 비동기 통신 가능
공유 메모리빠른 데이터 교환, 추가적인 동기화 기법 필요
파이프제한적두 프로세스 간 데이터 스트림, 익명 및 이름 있는 파이프
세마포어제한적자원 접근 동기화 제어, 데이터를 직접 교환하지 않음
소켓네트워크 통신, 클라이언트-서버 모델에 유용

IPC 방식들은 각기 다른 상황에 적합한 방식으로 설계되었으며, 프로세스 간의 효율적인 데이터 교환과 자원 관리를 가능하게 합니다.

  • 커널 공간을 활용하는 메시지 큐, 공유 메모리, 파이프 방식은 빠르고 안정적인 통신이 가능하여, 실시간 응답이 필요한 경우 주로 사용됩니다.

마무리

이번 포스팅에서는 운영체제에서의 프로세스, 스케줄링, 그리고 프로세스 간 통신(IPC)에 대해 알아보았습니다.

  • 프로세스는 실행 중인 프로그램으로, 각 프로세스는 독립적인 메모리 공간을 사용하여 시스템 내에서 작업을 수행합니다.
  • 스케줄링 알고리즘은 여러 프로세스가 CPU 자원을 효율적으로 사용할 수 있도록 자원을 할당하는 방식이며, 시스템의 목적에 맞춰 다양한 알고리즘이 사용됩니다.
  • IPC(프로세스 간 통신)는 프로세스들이 데이터를 주고받거나 자원을 공유할 수 있도록 하는 방법입니다.
    • 커널 공간을 활용한 메시지 큐, 공유 메모리, 파이프와 같은 방식은 실시간 통신에 특히 유용합니다.

운영체제는 이러한 개념들을 통해 여러 작업을 동시에 실행하고 자원을 효과적으로 관리하여, 사용자에게 빠르고 안정적인 환경을 제공합니다.

다음 포스팅에서는 스레드(Thread)에 대해 다룰 예정입니다. 스레드는 프로세스보다 가벼운 실행 단위로, 멀티스레딩을 통해 한 프로세스 내에서 여러 작업을 동시에 수행할 수 있도록 합니다. 스레드의 개념과 스레드 간 통신 방식에 대해 더욱 깊이 알아보도록 하겠습니다.

profile
일 때문에 포스팅은 잠시 쉬어요 ㅠ 바쁘다 바빠 모두들 화이팅! // Machine Learning (AI) Engineer & BackEnd Engineer (Entry)

0개의 댓글