Post

⚡ 운영체제 - 프로세스, 스레드, 컨텍스트 스위칭

⚡ 운영체제 - 프로세스, 스레드, 컨텍스트 스위칭

🔹 개요

  • 운영체제는 프로그램 실행의 핵심 환경을 제공하는 시스템 소프트웨어다.
  • 오늘은 그중에서도 핵심 개념인 Process, Thread, Context-Switching에 대해 정리한다.

🔹 프로세스(Process)란

  • 프로세스는 실행 중인 프로그램을 의미한다.
  • 프로그램이 메모리에 올라가 실행되면서 CPU 자원, 메모리 자원 등을 할당 받아 독립된 실행 단위로 동작한다.

▫️ 프로세스의 특징

  • 각 프로세스는 독립된 메모리 공간을 가진다.
  • 커널은 각 프로세스를 분리된 작업 단위로 관리한다.
  • 다른 프로세스의 메모리 영역에 접근할 수 없다.
  • 프로세스 간 통신은 별도의 메커니즘(IPC, 파이프, 소켓 등)을 통해 이뤄진다.

▫️ 프로세스 구성 요소

  • 코드 영역: 실행할 프로그램 코드
  • 데이터 영역: 전역 변수, 정적 변수
  • 힙(Heap): 동적 메모리 할당 영역
  • 스택(Stack): 함수 호출 시 생성되는 지역 변수, 매개변수 저장 영역
  • PCB(Process Control Block): 프로세스 상태, PID, 레지스터 정보 등 메타데이터를 담는 구조체

🔹 스레드(Thread)란

  • 스레드는 프로세스 내에서 실행되는 작업의 흐름이다.
  • 하나의 프로세스 안에는 하나 이상의 스레드가 존재할 수 있고, 이들은 자원을 공유하며 실행된다.

▫️ 스레드의 특징

  • 같은 프로세스 안에서 메모리(코드, 데이터, 힙)를 공유한다.
  • 스택과 레지스터는 스레드마다 따로 할당된다.
  • 오버헤드가 낮고, 컨텍스트 스위칭 비용이 작다.
  • 같은 프로세스 내의 스레드끼리는 상대적으로 빠르게 통신 가능하다.

🔹 프로세스와 스레드의 차이

항목프로세스스레드
메모리 공간독립적공유
생성 비용크다작다
통신느림빠름
안정성높음낮음

🔹 컨텍스트 스위칭이란

  • CPU는 동시에 여러 프로세스를 실행할 수 없다.
  • 멀티태스킹처럼 보이는 것은 운영체제가 매우 빠르게 실행 중인 작업을 전환하기 때문이다.
  • 이 작업이 바로 컨텍스트 스위칭이다.

▫️ 컨텍스트 스위칭의 정의

  • 하나의 프로세스(또는 스레드)의 실행 상태(컨텍스트)를 저장하고, 다른 프로세스의 컨텍스트를 로딩하여 CPU 제어를 전환하는 작업을 의미한다.

▫️ 저장되는 컨텍스트 정보

  • CPU 레지스터 값
  • 프로그램 카운터(PC)
  • 스택 포인터
  • 메모리 매핑 정보 (MMU 관련)
  • PCB 정보 등

▫️ 컨텍스트 스위칭 과정

  1. 현재 실행 중인 프로세스의 상태 저장 (PCB)
  2. 새로운 프로세스의 PCB에서 상태 불러오기
  3. CPU 제어권을 새 프로세스로 넘김

▫️ 컨텍스트 스위칭의 비용

  • 자주 발생하면 CPU 시간이 저장/복원에 소모되어 실제 연산 비율이 줄어듬
  • 캐시 무효화 등으로 인한 성능 저하 발생 가능

🔹 멀티프로세스 vs 멀티스레드

  • 멀티프로세스는 여러 개의 독립된 프로세스를 병렬로 실행하는 것을 의미
  • 멀티스레드는 하나의 프로세스 안에서 여러 스레드가 병렬로 실행되는 것을 의미
  • 멀티프로세스는 안정성과 격리성이 뛰어나지만, 자원 소비가 크고 문맥 전환 비용도 높다.
  • 반면 멀티스레드는 자원 공유를 통해 효율성이 높지만, 스레드 간 충돌이 발생하면 전체 프로세스가 위험해질 수 있다.

🔹 정리

  • 프로세스는 실행 중인 독립 프로그램 단위이며, 각각 고유한 메모리 공간과 시스템 자원을 가진다.
  • 스레드는 프로세스 내부의 실행 흐름 단위이며, 여러 스레드가 하나의 프로세스 자원을 공유하면서 병렬로 실행될 수 있다.
  • 컨텍스트 스위칭은 CPU가 실행할 작업을 전환하기 위해 현재 상태를 저장하고 다른 작업의 상태를 복원하는 과정이다.
  • 다수의 작업을 동시에 처리하기 위해 운영체제는 여러 프로세스 또는 하나의 프로세스 내 여러 스레드를 사용하는 구조를 갖는다.
  • 멀티프로세스는 안정성과 오류 격리에 유리하고, 멀티스레드는 자원 공유와 문맥 전환 비용 측면에서 효율적이다.
This post is licensed under CC BY 4.0 by the author.