Contents

1. 배경

2. 주요 개념

3. 실행 방식의 발전


1. 배경

컴퓨터에서 프로그램을 실행할 때 CPU와 I/O 속도 차이로 인해 병목 현상이 발생한다.

  • CPU는 빠름
  • I/O(DB, 파일, 네트워크)는 느림

단일 프로그램만 실행한다면:

  • I/O동안 CPU는 아무것도 하지 못함
  • 전체 성능이 낮아짐

따라서 CPU 사용률을 높이기 위해 여러 작업을 동시에 처리하려는 방식이 등장한다.


2. 주요 개념

2.1 용어

프로그램:

  • 실행 가능한 파일
  • 단순한 명령어의 집합

프로세스:

  • 실행 중인 프로그램
  • OS가 자원을 할당한 단위
  • 독립된 메모리 공간(Heap, Stack, Code 등)을 가진다.
  • 다른 프로세스와 메모리 공유가 불가능하다.

스레드:

  • CPU에서 실행되는 최소 단위
  • 하나의 프로세스 내부에서 동작한다.
  • 같은 프로세스의 메모리를 공유한다.

CPU:

  • 명령어를 해석하고 실행하는 장치
  • 연산과 제어를 담당한다.
  • 프로세스·스레드를 실제로 실행한다.

레지스터:

  • CPU 내부에 존재하는 저장 공간
  • 연산에 필요한 값과 실행 상태를 임시로 저장한다.
  • PC(Program Counter) 등 실행 제어 정보도 포함한다.

메인 메모리:

  • 실행 중인 프로그램과 데이터를 저장하는 공간
  • 프로세스의 코드, 데이터, 스택, 힙이 올라간다.

IO:

  • 외부 장치와 데이터를 주고받는 작업
  • 디스크, 네트워크, 키보드 등과의 입출력을 포함한다.

2.2 메모리 구조

같은 프로세스의 스레드는 Code, Data, Heap 영역을 공유하고, Stack은 각각 독립적으로 가진다.

스레드 간 공유:

  • Code: 실행 코드(읽기 전용)
  • Data: 전역 변수, static 변수
  • Heap: 동적 할당 영역

스레드별 독립:

  • Stack: 함수 호출 정보(스레드별 독립)

2.3 CPU / 실행 정보

PC와 레지스터는 메모리 영역이 아니라 CPU 내부에 존재한다.

PC(Register):

  • 다음에 실행할 명령어 주소를 담고 있는 레지스터(스레드별)

Register:

  • 연산에 사용되는 값 저장(스레드별)

2.4 PCB(Process Control Block)

313

운영체제가 관리하는 프로세스의 실행 상태를 저장하는 구조체

  • 각 프로세스는 고유한 PCB를 하나씩 가지며, 운영체제는 이를 통해 프로세스의 상태를 추적하고 제어한다.
  • PC, 레지스터 값, 스케줄링 정보 등을 포함
  • Context Switch 시 CPU 상태를 저장/복원하는 역할
  • 스케줄러는 PCB를 기준으로 실행 대상을 결정한다.

2.5 컨텍스트 스위칭

커널이 CPU의 실행 중인 작업을 중단하고, 다른 프로세스(또는 스레드)로 전환하는 과정

동작 과정:

  1. 현재 실행 중인 프로세스의 상태를 저장한다.(Context Save)
    • PC(Program Counter), Register 값 등 CPU 상태를 PCB에 저장한다.
  2. 다음에 실행할 프로세스를 선택한다.(스케줄러)
  3. 선택된 프로세스의 상태를 복원한다.(Context Restore)
    • PCB에 저장된 PC, Register 값을 CPU에 로드

특징:

  • 커널 모드에서 수행된다.
  • CPU의 레지스터 상태를 교체한다.
  • 전환 과정 동안 CPU는 실제 작업을 수행하지 못한다.
  • 너무 자주 발생하면 성능 저하가 발생한다.
    • 캐시 오염 발생

프로세스 컨텍스트 스위칭:

  • 가상(virtual) 메모리 주소 관련 처리를 추가로 수행
    • MMU → 페이지 테이블(주소 공간) 변경
    • TLB → 비움
  • 무거움(메모리 공간 변경)

스레드 컨텍스트 스위칭:

  • 메모리 주소 관련 처리를 하지 않음
  • 가벼움(같은 메모리 공유)

3. 실행 방식의 발전

3.1 단일 프로세스

한번에 하나의 프로그램만 실행

  • I/O 동안 CPU idle
  • 자원 활용 비효율

3.2 멀티프로그래밍

여러 프로세스를 메모리에 올려두고 실행

  • 한 프로세스에서 I/O → 다른 프로세스 실행
  • CPU 사용률 올라감
  • 특정 프로세스가 CPU를 오랫동안 점유할 위험이 있음

3.3 멀티태스킹

CPU를 짧은 시간 단위로 나눠 실행

  • 각 프로세스·스레드는 quantum(타임 슬라이스) 만큼 실행
  • 번갈아 실행 → 동시에 실행되는 것처럼 보임(동시성)
  • 응답 시간 최소화(사용자 경험 개선)

3.4 멀티스레딩

하나의 프로세스에서 여러 작업 수행

  • 스레드 간 메모리 공유
    • 같은 프로세스 내에서는 주소 공간을 공유하기 때문에, 프로세스 전환보다 컨텍스트 스위칭 비용이 낮다.
  • 컨텍스트 스위칭 비용↓
    • 빠른 실행 + 쉬운 데이터 공유
  • 동기화 문제 발생
    • mutex, semaphore 필요

3.5 멀티프로세싱

CPU 코어를 여러 개 사용하는 방식

  • 실제 병렬 처리 가능
  • 성능 극대화(병렬성)