[CS] 운영체제 · Chapter 1

프로그램 실행 과정

작성자: Choi.eth

8 min read

https://www.inflearn.com/course/운영체제-기술면접-비전공자?cid=337649

https://www.inflearn.com/course/운영체제-기술면접-비전공자?cid=337649

본 포스트는 인프런 “[CS 기술면접 2] 말이 트이는 운영체제” 강의를 학습하며 정리한 내용을 다룹니다.  

운영체제란?

운영체제(Operating System, OS)는 컴퓨터의 하드웨어와 소프트웨어 자원을 관리하고, 사용자가 프로그램을 실행할 수 있도록 지원하는 시스템 소프트웨어입니다.

우리가 사용하는 컴퓨터에서는 웹 브라우저, 게임, 메신저 등 다양한 프로그램이 동시에 실행됩니다. 하지만 CPU와 메모리 같은 하드웨어 자원은 한정되어 있기 때문에, 여러 프로그램이 이러한 자원을 효율적으로 사용할 수 있도록 관리하는 역할이 필요합니다. 이러한 역할을 담당하는 것이 바로 운영체제입니다. 운영체제는 프로그램에 CPU와 메모리를 할당하고, 입출력 장치를 제어하며, 여러 프로그램이 서로 충돌하지 않고 실행될 수 있도록 관리합니다.

운영체제가 이러한 작업을 어떻게 처리하는지 이해하려면 프로그램이 실행되는 과정에서 CPU와 운영체제가 어떤 역할을 수행하는지 알아야 하는데요. 먼저 프로그램 실행 과정을 이해하는 데 필요한 주요 용어부터 정리하겠습니다.

용어 정리

1. CPU 연산과 I/O 연산

프로그램이 수행하는 작업은 크게 CPU 연산과 I/O(Input/Output) 연산으로 구분할 수 있습니다.

CPU 연산

  • CPU가 데이터 처리와 계산을 수행하는 작업
  • 초당 수십억 번의 명령을 처리할 수 있을 정도로 빠른 연산 속도
  • 주로 메모리에서 명령어와 데이터를 읽어 연산 수행

I/O 연산

  • 컴퓨터와 외부 장치 사이에서 데이터를 입력하거나 출력하는 작업
  • 일반적으로 CPU 연산보다 느린 처리 속도
  • 예: 파일 저장, 디스크 읽기, 키보드 입력, 화면 출력

2. 인터럽트(Interrupt)

인터럽트는 CPU가 현재 실행 중인 작업을 잠시 중단하고, 발생한 이벤트를 처리하도록 하는 메커니즘입니다.

  • 주변 장치에서 특정 이벤트가 발생하면 CPU에 인터럽트 신호 전달
  • CPU는 실행 중인 작업을 잠시 중단하고 운영체제의 인터럽트 처리 루틴 실행
  • 처리 완료 후 기존 작업으로 복귀하거나 다른 작업 실행

인터럽트 라인(Interrupt Line)은 주변 장치에서 발생한 인터럽트 신호를 CPU에 전달하는 신호 경로입니다.

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

CPU는 시스템을 보호하기 위해 사용자 모드와 커널 모드를 구분하여 동작합니다.

사용자 모드(User Mode)

  • 웹 브라우저, 게임 등 일반 프로그램이 실행되는 모드
  • 제한된 권한으로 동작하며, 보호된 시스템 자원에 직접 접근 불가
  • 프로그램 오류가 시스템 전체에 미치는 영향을 최소화

커널 모드(Kernel Mode)

  • 운영체제의 핵심 기능인 커널이 실행되는 모드
  • 높은 권한으로 시스템 자원에 접근 가능
  • 메모리 관리, 프로세스 관리, 장치 제어 등 수행

4. 시스템 콜(System Call)

일반 프로그램은 사용자 모드에서 실행되므로, 커널 모드에서만 허용되는 특권 명령(Privileged Instruction)을 직접 수행할 수 없습니다.

따라서 파일 읽기나 장치 제어처럼 운영체제의 도움이 필요한 작업은 시스템 콜(System Call)을 통해 요청합니다.

  • 프로그램이 시스템 콜을 호출하면 CPU가 사용자 모드에서 커널 모드로 전환
  • 운영체제가 요청받은 작업 처리
  • 작업 처리 후 사용자 모드로 복귀하여 프로그램 실행 재개

즉, 시스템 콜은 사용자 프로그램이 운영체제의 기능을 사용하기 위한 인터페이스입니다.

5. CPU 제어권

CPU 제어권은 CPU에서 어떤 프로그램의 명령어를 실행할지 결정하고, 이를 관리하는 권한을 의미합니다.

  • 일반 프로그램이 실행되는 동안 CPU는 해당 프로그램의 명령어 처리
  • 시스템 콜이나 인터럽트가 발생하면 커널 모드로 전환되어 운영체제 코드 실행
  • 운영체제는 작업 처리 후 기존 프로그램을 계속 실행하거나 다른 프로세스로 전환

6. 동기식 입출력과 비동기식 입출력

입출력 작업은 결과를 기다리는 방식에 따라 동기식과 비동기식으로 구분됩니다.

동기식 입출력(Synchronous I/O)

  • 입출력 작업이 완료될 때까지 요청한 프로그램이 다음 작업을 진행하지 않는 방식
  • 프로그램이 입출력을 기다리는 동안 운영체제는 다른 프로세스에 CPU 할당 가능

비동기식 입출력(Asynchronous I/O)

  • 입출력 작업을 요청한 뒤 완료를 기다리지 않고 다음 작업을 수행하는 방식
  • 입출력 완료 시 알림이나 완료 결과 확인 등을 통해 결과 전달

두 방식의 핵심 차이는 입출력을 요청한 프로그램이 작업 완료를 기다리는지 여부입니다.

프로그램 실행 과정

앞서 정리한 개념들이 실제로 어떻게 활용되는지, 컴퓨터에 설치된 게임을 실행하는 상황을 예시로 살펴보겠습니다. 여기서는 게임을 프로그램 A라고 가정하고, 디스크에서 데이터를 읽어오는 동기식 입출력 과정을 기준으로 설명하겠습니다.

1. 프로그램 설치 및 실행

게임을 설치하면 실행 파일과 데이터가 디스크(SSD/HDD)에 저장됩니다. 이후 사용자가 게임을 실행하면 운영체제는 프로그램을 실행하기 위한 프로세스 A를 생성합니다.

  • 게임 설치 시 실행 파일과 데이터를 디스크에 저장
  • 게임 실행 시 운영체제가 프로세스 A 생성
  • 프로그램 실행에 필요한 코드와 데이터를 메모리에 적재
  • CPU가 메모리의 명령어를 읽어 실행하며, 프로그램 A는 사용자 모드에서 동작

2. 프로그램 A의 입출력 요청

게임 실행 중 새로운 맵의 데이터를 디스크에서 읽어와야 하는 상황을 가정하겠습니다. 프로그램 A는 사용자 모드에서 디스크를 직접 제어할 수 없으므로, 시스템 콜을 통해 운영체제에 입출력 작업을 요청합니다.

  • 프로그램 A에서 디스크 데이터 읽기 작업 필요
  • 사용자 모드에서는 입출력 장치를 직접 제어할 수 없으므로 시스템 콜 호출
  • CPU가 사용자 모드에서 커널 모드로 전환
  • 운영체제가 프로그램 A의 입출력 요청 처리

3. 운영체제의 입출력 처리

운영체제는 프로그램 A의 요청을 받아 디스크 컨트롤러에 입출력 작업을 지시합니다. 하지만 디스크 입출력은 CPU 연산보다 오래 걸리기 때문에, 운영체제는 CPU가 작업 완료를 기다리는 대신 다른 프로그램을 실행하도록 합니다.

  • 운영체제가 장치 드라이버를 통해 디스크 컨트롤러에 데이터 읽기 요청
  • 디스크 컨트롤러에서 입출력 작업 수행
  • 동기식 입출력을 요청한 프로그램 A는 작업 완료까지 대기 상태로 전환
  • 운영체제는 스케줄러를 통해 다른 프로세스인 프로그램 B에 CPU 할당

즉, 프로그램 A가 입출력을 기다리는 동안 CPU는 프로그램 B의 명령어를 실행할 수 있습니다.

4. 입출력 완료 및 인터럽트 발생

디스크 컨트롤러가 입출력 작업을 완료하면 인터럽트를 통해 CPU에 완료 사실을 알립니다. CPU는 실행 중이던 프로그램 B를 잠시 중단하고, 운영체제의 인터럽트 처리 루틴을 실행합니다.

  • 디스크 컨트롤러에서 입출력 완료 후 인터럽트 발생
  • CPU는 프로그램 B를 잠시 중단하고 커널 모드로 전환
  • 운영체제가 인터럽트를 처리하고 입출력 완료 여부 확인
  • 프로그램 A는 대기 상태에서 준비 상태(Ready)로 전환
  • CPU는 프로그램 B를 계속 실행하거나 스케줄링에 따라 다른 프로세스 실행

이때 입출력이 완료되었다고 해서 프로그램 A가 즉시 CPU를 할당받는 것은 아닙니다. 프로그램 A는 실행 가능한 상태가 되며, 실제 실행 시점은 운영체제의 스케줄러가 결정합니다.

5. 프로그램 A 실행 재개

이후 운영체제의 스케줄러가 프로그램 A를 선택하면, 프로그램 A는 앞서 요청했던 입출력 결과를 활용하여 실행을 이어갑니다.

  • 스케줄러가 프로그램 A를 선택하여 CPU 할당
  • 프로그램 A가 앞서 요청한 입출력 결과 사용
  • 디스크에서 읽어온 맵 데이터를 활용하여 게임 실행 재개

이처럼 운영체제는 입출력 작업을 기다리는 동안 다른 프로세스가 CPU를 사용할 수 있도록 관리하여 한정된 자원을 효율적으로 활용합니다.

정리

결국 운영체제는 CPU, 메모리, 입출력 장치와 프로세스 사이에서 자원을 관리하고, 여러 프로그램이 효율적이고 안정적으로 실행될 수 있도록 조율하는 역할을 수행합니다.