크래프톤 정글 (컴퓨터 시스템: CSAPP)/8장 예외적 제어 흐름

컴퓨터 시스템 : CSAPP 8장 정리 - 8.2 Processes

고웅 2025. 4. 19. 08:53

8.2: Processes

운영체제가 프로세스를 제공하는 핵심 기법은 예외(Exception)를 기반으로 하며, 이를 통해 프로그램은 마치 시스템 전체를 독점하고 있는 것처럼 보이는 환상을 경험하게 된다.

프로세스란?

  • 고전적인 정의: 실행 중인 프로그램의 인스턴스
  • 각 프로세스는 실행에 필요한 전체 컨텍스트(context)를 포함한다:
    • 코드, 데이터, 스택
    • 일반 레지스터, 프로그램 카운터(PC)
    • 환경 변수, 파일 디스크립터 등

프로세스를 통해 얻는 두 가지 핵심 추상화

  1. 논리적 제어 흐름 (Logical Control Flow)
    → 프로그램이 CPU를 독점하고 실행되는 듯한 착각을 제공
  2. 개인 주소 공간 (Private Address Space)
    → 프로그램이 메모리를 독점하는 듯한 착각을 제공

8.2.1 Logical Control Flow (논리적 제어 흐름)

논리적 제어 흐름은, 각 프로세스가 CPU를 독점적으로 사용하는 듯한 착각을 주는 메커니즘이다.

정의

  • 논리적 제어 흐름이란, 디버거로 한 줄씩 프로그램을 실행할 때 보이는 연속된 프로그램 카운터(PC)의 흐름이다.
  • 이 흐름은 실제로는 여러 프로세스가 하나의 CPU를 시간을 나누어 번갈아 사용하기 때문에 물리적인 흐름은 중단되었다가 재개된다.

실제 예시 (도식으로 설명)

  • 세 개의 프로세스 A, B, C가 실행된다고 가정할 때, 각 프로세스는 CPU를 일정 시간(slice) 동안 사용하다가 다른 프로세스로 전환된다.
  • 각 프로세스는 자신이 계속 실행되는 것처럼 보이나, 실제로는 OS가 선점(preemption)을 통해 제어 흐름을 전환한다.

사용자에게 보이는 환상

  • 레지스터와 메모리 상태는 보존되므로, 중단되었다가도 바로 이어서 실행되는 것처럼 보임.
  • 따라서 사용자 프로그램은 마치 시스템이 자신만을 위한 듯 동작하는 것처럼 느껴짐​.

8.2.2 Concurrent Flows (동시 흐름)

여러 개의 제어 흐름동시에 실행되는 것처럼 보이는 현상을 다룬다. 이는 동시성(concurrency)의 개념으로, 현대 시스템의 핵심 요소다.

동시 흐름이란?

  • 하나의 시스템에서 여러 개의 제어 흐름이 동시에 실행되는 것처럼 보이는 상태
  • 실제로는 CPU가 여러 프로세스 사이를 빠르게 전환(context switch)함으로써 이 착각을 제공함
  • 또는 여러 CPU 코어가 있는 경우 진짜 동시에 실행될 수도 있음

예시

  • 웹 브라우저가 탭 A에서는 웹페이지를 로딩하고, 탭 B에서는 음악을 재생할 때
  • 시스템은 둘을 거의 동시에 실행하는 것처럼 보임 → 실제로는 빠르게 번갈아 실행하거나, 다른 코어에서 병렬 수행

기술적 기반

  1. 시분할 시스템 (Time-sharing systems):
    • 하나의 CPU가 여러 프로세스를 빠르게 전환하여 실행
    • OS가 타이머 인터럽트 등을 통해 제어 흐름을 강제로 전환함
  2. 멀티코어 시스템 (Multicore systems):
    • 각 프로세스가 다른 CPU 코어에서 진짜 병렬 실행
    • 진정한 병렬성(parallelism) 제공

동시성과 병렬성의 차이

개념 설명
동시성 (Concurrency) 하나의 CPU가 여러 작업을 빠르게 번갈아 실행
병렬성 (Parallelism) 여러 CPU가 각기 다른 작업을 동시에 실행

✔ 이 절의 핵심: 프로세스가 동시에 실행되는 듯한 환상은 OS의 스케줄링과 CPU 구조 덕분에 가능하며, 이는 프로그램의 동작 방식과 성능에 중요한 영향을 준다.


8.2.3 Private Address Space (개인 주소 공간)

프로세스가 자신만의 독립적인 메모리 공간을 갖는다는 중요한 개념, 즉 Private Address Space에 대해 설명한다.

개념 정의

  • Private Address Space(개인 주소 공간)는 각 프로세스가 사용하는 가상 메모리 공간이 서로 완전히 분리되어 있다는 것을 의미한다.
  • 즉, 한 프로세스의 메모리는 다른 프로세스에서 직접 접근하거나 수정할 수 없다.

작동 방식

  • 운영체제는 가상 메모리 시스템을 통해, 각 프로세스가 동일한 주소(예: 0x400000)를 사용하더라도 실제로는 서로 다른 물리적 메모리를 가리키도록 설정한다.
  • 하드웨어의 메모리 관리 장치(MMU)와 OS가 협력해 주소 변환을 처리함.

주소 공간 구성 예시

각 프로세스는 다음과 같은 구성의 가상 메모리 공간을 가진다:

  1. 텍스트(text) 영역: 코드
  2. 데이터(data) 영역: 초기화된 전역/정적 변수
  3. BSS 영역: 초기화되지 않은 전역/정적 변수
  4. 힙(heap): 동적 메모리(malloc 등)
  5. 스택(stack): 함수 호출 및 지역 변수

각 프로세스는 이 메모리 공간을 자신만의 독립적 버전으로 가짐.

장점

  • 보안: 한 프로세스가 다른 프로세스의 메모리를 침범할 수 없음 → 안전성 보장
  • 안정성: 오류가 한 프로세스에만 영향을 미침 → 시스템 전체가 다운되지 않음
  • 편의성: 프로그래머가 다른 프로그램과의 메모리 충돌을 걱정할 필요 없음

8.2.4 User and Kernel Modes (유저 모드와 커널 모드)

프로세스 실행 권한의 두 가지 수준유저 모드(User Mode)커널 모드(Kernel Mode)의 개념과 역할에 대해 설명한다.

개념 요약

  • 현대 운영체제는 CPU의 실행 모드를 두 가지로 나눔:
    1. 유저 모드(User Mode): 일반 애플리케이션이 실행되는 모드
    2. 커널 모드(Kernel Mode): 운영체제가 실행되는 특권 모드

유저 모드 (User Mode)

  • 일반 애플리케이션이 이 모드에서 실행됨
  • 하드웨어 자원(디스크, 메모리 제어, 네트워크 등)에 직접 접근 불가
  • 오직 시스템 콜(System Call)을 통해서만 간접적으로 OS 기능 이용 가능

커널 모드 (Kernel Mode)

  • 운영체제 코드가 이 모드에서 실행됨
  • 하드웨어 자원에 완전한 접근 권한 보유
  • 예외 처리, 프로세스 스케줄링, 메모리 관리 등의 핵심 기능 수행

모드 전환의 예

상황 동작 모드 전환
프로그램이 printf 호출 시스템 콜 실행 유저 → 커널
커널이 작업 완료 후 반환 유저 프로그램으로 복귀 커널 → 유저
인터럽트 발생 (예: 타이머) 커널이 인터럽트 핸들러 실행 유저 → 커널

왜 필요한가?

  • 보안: 악성 코드가 직접 하드웨어를 제어하지 못하도록 제한
  • 안정성: 사용자 프로그램이 실수로 시스템 전체를 망가뜨리지 않도록 보호
  • 권한 분리: OS와 사용자 프로그램의 역할을 분리

비유로 이해하기

  • 유저 모드는 학교의 학생, 커널 모드는 선생님
  • 학생은 교무실(하드웨어)에 직접 들어갈 수 없고, 요청서를 통해서만 접근 가능ㄷ