본문 바로가기
Operating Systems

차근차근 시작하는 운영체제 - Part 3: 제한적 직접 실행(Limited Direct Execution, LDE)

by Jimmy_iOS 2024. 12. 31.

안녕하세요! 지난 글에서는 프로세스 API를 중심으로 프로세스 생성과 관리 방법을 살펴보았습니다.

이번 글에서는 CPU 가상화를 위한 핵심 기술인 제한적 직접 실행(Limited Direct Execution, LDE)의 개념과 작동 방식을 알아보겠습니다.

 

제한적 직접 실행은 운영체제가 CPU를 효율적으로 가상화하고 통제할 수 있도록 하는 기본 메커니즘입니다.

이를 통해 사용자는 실제 물리적 CPU를 독점하지 않고도 자신만의 가상 CPU를 사용하는 것처럼 느낄 수 있습니다.


제한적 직접 실행이란?

제한적 직접 실행은 운영체제가 CPU에서 프로그램을 직접 실행하도록 허용하면서도,

필요한 경우 운영체제가 제어권을 유지할 수 있도록 하는 기술입니다.

CRUX: 효율성과 제어의 균형

운영체제는 다음 두 가지 목표를 동시에 달성해야 합니다:

  1. 효율성: 프로그램이 가능한 한 빠르게 실행되도록 지원.
  2. 제어: 프로그램이 시스템 전체를 방해하지 않도록 운영체제가 제어권을 유지.

기본 원리

제한적 직접 실행의 핵심은 사용자 모드(user mode)커널 모드(kernel mode)의 두 가지 CPU 실행 모드를 활용하는 데 있습니다.

1. 사용자 모드와 커널 모드

  • 사용자 모드: 애플리케이션 코드가 실행되는 제한된 모드.
    • 하드웨어 리소스 접근 제한.
    • 잘못된 명령 실행 시 예외를 발생시킴.
  • 커널 모드: 운영체제 코드가 실행되는 모드.
    • 모든 하드웨어 리소스에 접근 가능.
    • 제한 없이 명령 실행 가능.

2. 시스템 호출과 트랩

사용자 프로그램이 제한된 작업(예: I/O 요청)을 수행하려면 시스템 호출(system call)을 통해 커널 모드로 전환해야 합니다.

  • 시스템 호출 과정:
    1. 사용자 프로그램이 시스템 호출을 실행.
    2. CPU가 커널 모드로 전환되고, 지정된 트랩 핸들러를 실행.
    3. 운영체제가 작업을 완료한 후 사용자 모드로 복귀.

제한적 직접 실행의 두 가지 문제

제한적 직접 실행을 구현할 때 다음 두 가지 주요 문제가 발생합니다:

문제 1: 제한된 작업 수행

사용자 모드에서 실행 중인 프로그램이 제한된 작업(예: 디스크 I/O)을 요청하면 어떻게 해야 할까요?

해결책: 시스템 호출

시스템 호출은 사용자 프로그램이 운영체제의 도움을 받아 제한된 작업을 수행하도록 합니다.

// 예: 파일 열기
int fd = open("file.txt", O_RDONLY);
  • open() 호출은 트랩을 발생시키고 운영체제가 파일을 엽니다.
  • 작업 완료 후 사용자 프로그램으로 복귀합니다.

문제 2: 프로세스 스케줄링

한 프로세스가 CPU를 독점하지 않도록 운영체제는 어떻게 제어권을 가져올까요?

해결책: 타이머 인터럽트

운영체제는 하드웨어 타이머를 설정하여 일정 시간마다 CPU 제어권을 자동으로 반환받습니다.

  • 타이머 인터럽트 과정:
    1. 타이머가 만료되면 인터럽트를 발생시킴.
    2. CPU가 커널 모드로 전환되고, 인터럽트 핸들러가 실행.
    3. 운영체제가 현재 프로세스를 중단하고 다른 프로세스를 실행.

제한적 직접 실행 프로토콜

제한적 직접 실행의 전체 과정은 다음과 같습니다:

  1. 운영체제가 프로세스를 생성하고 준비.
  2. 사용자 프로그램이 CPU에서 실행.
  3. 제한된 작업 요청 시 트랩 발생.
  4. 운영체제가 작업을 수행한 후 사용자 모드로 복귀.
  5. 타이머 인터럽트로 운영체제가 CPU 제어권을 가져옴.
  6. 스케줄러가 다음 프로세스를 선택.

정리하며

제한적 직접 실행은 CPU 가상화를 가능하게 하는 운영체제의 기본 메커니즘입니다. 사용자 프로그램은 CPU에서 직접 실행되지만,

운영체제는 시스템 호출과 타이머 인터럽트를 통해 필요한 제어를 유지합니다.

 

다음 글에서는 스케줄링(Scheduling)을 다루며 운영체제의 자원을 효율적으로 배분하고 성능을 최적화 하는것을 탐구하겠습니다.


다음 글에서 만나요!

이 글은 Operating Systems: Three Easy Pieces를 참고하여 작성되었습니다.