상세 컨텐츠

본문 제목

운영체제는 어떻게 프로그램을 실행할까?

운영체제

by 박여치 2026. 4. 16. 20:00

본문

출처 <Chatgpt Image Producing>

운영체제(Operating System, OS)의 프로그램 실행

지난 글에서는 운영체제(OS)의 구성요소를 중심으로 전체 구조를 살펴봤습니다.

이번 글에서는 운영체제(OS)가 프로그램을 실제로 어떤 방식으로 실행하고 관리하는지 정리해보려고 합니다.

이를 설명하기 위해 커널 모드(Kernel Mode), 사용자 모드(User Mode), 시스템 호출(System Call), 프로세스(Process), 스레드(Thread)라는 핵심 개념들을 함께 살펴보겠습니다.

 

프로세스(Process)와 스레드(Thread)

프로세스(Process)

한 가지 알아둬야 하는 개념이 존재합니다.

우리가 흔히 말하는 프로그램(Program)은 사실 저장장치(Storage)에 저장된 실행 파일을 의미합니다.

이는 실행되지 않은 상태의 정적 코드와 데이터라고 볼 수 있습니다.

따라서 우리가 실행하기 위해서는 프로그램(Program)을 메모리(Memory)에 올려야(Load)합니다.

이렇게 메모리(Memory)에 올라가서 실행 중인 프로그램(Program)을 프로세스(Process)라고 합니다.

운영체제(OS)는 이러한 과정을 통해 프로그램(Program)을 프로세스(Process)로 만들어 관리합니다.

 

포함 정보

- 실행 중인 코드

- 데이터

- 할당된 메모리 공간

- CPU 상태 정보

- 파일 정보

- 입출력 자원 정보

 

스레드(Thread)

프로세스 내부에는 실제 실행 흐름을 담당하는 스레드(Thread)라는 존재들이 존재합니다.

스레드(Thread)는 실제 작업 수행 단위라고 볼 수 있으며 단일 여부에 따라 단일 스레드(Single Thread)와 멀티 스레드(Multi Thread)로 구분할 수 있습니다.

단일 스레드(Single Thread)의 경우, 작업이 하나의 흐름으로 순차적으로 실행됩니다.

반면 멀티 스레드(Multi Thread)의 경우, 여러 작업 흐름을 동시에 처리할 수 있습니다.

 

프로세스(Process)와 스레드(Thread)의 차이점

  프로세스(Process) 스레드(Thread)
독립성 각 프로세스(Process)는 서로 독립적 문제 발생 시 프로세스(Process) 전체 위험
자원 공유 IPC(Inter-Process-Communication) 통한 통신 메모리 공유
생성/전환 비용 무거움 (문맥 교환, Context Switching) 경량화 (Light weight)

 

왜 프로그램(Program)은 하드웨어(Hardware)에 직접 접근하지 못할까

우리가 사용하는 프로그램(Program)은 다양한 기능을 수행합니다.

파일(File)을 읽고 쓰거나, 화면에 출력을 하고, 네트워크를 통해 데이터를 주고받기도 합니다.

하지만 프로그램(Program)이 하드웨어(Hardware)를 직접 제어하도록 허용하면 여러 문제가 발생합니다.

 

1. 하나의 프로그램(Program) 오류가 시스템 전체에 영향

2. 악성 코드나 비정상 프로그램(Program)에 의한 보안 문제 발생

3. 여러 프로그램(Program)이 동시에 같은 자원 접근으로 인한 충돌

 

이런 문제들을 방지하기 위해 운영체제(OS)는 프로그램(Program)의 권한을 제어하고, 자원 제어는 운영체제(OS) 내부에서만 가능하도록 구조를 나누었습니다.

 

커널 모드(Kernel Mode)와 사용자 모드 (User Mode)

운영체제는(OS)는 시스템의 안정성과 보안을 위해 프로그램(Program) 실행 환경을 두 개의 영역으로 나누어 관리합니다.

커널 모드(Kernel Mode)

커널 모드(Kernel Mode)는 운영체제(OS)의 핵심 기능이 실행되는 영역입니다.

커널 모드(Kernel Mode)에서는 CPU, 메모리(Memory), 장치(Device)와 같은 하드웨어(Hardware) 자원에 직접 접근할 수 있습니다. (시스템 전체 제어 권한 소유)

운영체제(OS)의 핵심 구성요소인 커널(Kernel)은 이 모드에서 동작합니다.

 

사용자 모드(User Mode)

사용자 모드(User Mode)는 사용자 어플리케이션(Application)이 실행되는 영역입니다.

이 모드에서 실행되는 프로그램(Program)은 제한된 권한만 가지며, 하드웨어(Hardware)를 직접 제어하거나 시스템 전체 자원에 자유롭게 접근할 수 없습니다.

 

여기서 문제가 발생합니다.

만약 어떤 어플리케이션(Application)이 실행되었을 때, 실제로는 파일 열기, 화면 출력, 네트워크 사용 등의 기능을 사용해야한다고 가정합시다.

사용자가 어플리케이션(Application)을 실행했을 때, 운영체제(OS)는 사용자 모드에서 프로그램(Program)을 실행하게 될 것 입니다.

그럼 사용자 어플리케이션(User  Application)이 하드웨어를 다루려면 어떻게 해야할까요?

 

시스템 호출 (System Call)

해당 문제를 해결하기 위해 사용하는 방법이 시스템 호출(System Call) 입니다.

시스템 호출(System Call)은 이름에서 알 수 있듯이 사용자 모드(User Mode)에서 실행 중인 프로그램(Program)이 운영체제(OS)의 기능을 요청하는 방식입니다.

시스템 자원과 연결되어 있는 작업을 필요로 할 때 사용자 어플리케이션(User Appclication)은 시스템 호출(System Call)을 통해 운영체제(OS)에 요청을 전달합니다.

운영체제(OS)는 커널 모드(Kernel Mode)에서 해당 요청을 처리한 뒤 결과를 다시 프로그램(Program)에 반환합니다.

 

시스템 호출의 흐름

1. 프로그램(Program) 실행

2. 운영체제(OS)가 프로그램(Program)을 메모리(Memory)에 적재(Load)하고 프로세스(Process) 생성

3. 프로세스(Process) 안에서 스레드(Thread) 동작

4. 스레드(Thread)가 실행되는 동안 파일 접근, 화면 출력, 네트워크 요청 등 시스템 기능 요청

6. 시스템 호출(System Call)을 통해 운영체제(OS)에 요청

7. 운영체제(OS)는 커널 모드(Kernel Mode)에서 해당 요청 처리 (User Mode → Kernel Mode)

8. 처리 결과를 사용자 모드(User Mode)의 프로그램(Program)에 반환 (Kernel Mode → User Mode)

 

 

 

정리

운영체제(OS)는 사용자 어플리케이션(User Application)이 하드웨어(Hardware)에 접근하도록 두지 않습니다.

대신 사용자 모드(User Mode)와 커널 모드(Kernel Mode)로 권한을 나누고, 시스템 호출(System Call)을 통해 필요한 요청만 안전하게 처리합니다.
또한 실행 중인 프로그램(Program)을 프로세스(Process)단위로 관리하고, 그 안의 실제 실행 흐름은 스레드(Thread)단위로 다룹니다.

결국 운영체제(OS)는 권한 분리, 요청 처리, 실행 단위 관리를 통해 시스템이 안정적이고 효율적으로 동작할 수 있도록 만드는 핵심 소프트웨어라고 할 수 있습니다.

관련글 더보기