운영체제란?
운영체제(OS, Operating System)는 사용자와 컴퓨터 간의 인터페이스 역할을 하며, 하드웨어를 관리하고 응용 프로그램이 실행될 수 있도록 지원하는 소프트웨어이다.
운영체제의 목표
- 컴퓨터 시스템을 효율적이고 안정적으로 운영하기
- 사용자에게 편리한 환경을 제공하기
컴퓨터 시스템 구조

- 하드웨어 (Hardware) CPU, 메모리, 디스크, I/O 장치 등 컴퓨터를 구성하는 물리적 장치
- 운영체제 (Operating System) 하드웨어를 관리하고 프로그램이 실행될 수 있도록 제어
- 시스템 및 응용 프로그램 (System & Application Programs) 워드 프로세서, 컴파일러, 웹 브라우저 등
- 사용자 (Users) 사람, 자동화된 시스템, 네트워크 서버 등
운영체제의 정의
- 자원 할당자 (Resource Allocator)
- CPU, 메모리, 디스크, 입출력 장치 등 컴퓨터 자원을 효율적으로 관리하고, 공정하게 분배하는 역할 수행
- 제어 프로그램 (Control Program)
- 프로그램 실행을 관리하며, 에러를 방지하고 부적절한 사용을 제어
- 커널 (Kernel)과 운영체제
- 운영체제 전체를 가리킬 수도 있지만, 핵심 기능을 담당하는 커널(Kernel) 만을 의미할 수도 있음
- 컴퓨터가 실행할 때 도는 것이 커널이다. 커널은 핵심이 되는 객체라고 볼 수 있다.
- 커널은 운영체제의 핵심 부분으로, 하드웨어와 소프트웨어 간의 인터페이스를 제공하며 프로세스 관리, 메모리 관리, 파일 시스템 등을 담당
Computer Startup
파워 버튼을 눌렀을 때 부팅 과정이 시작됨
- 펌웨어 (Firmware): 하드웨어에 내장된 저수준 소프트웨어 전원이 공급되면 부트스트랩 프로그램이 실행됨 하드웨어를 초기화하고 커널을 메모리에 로드
Computer System organization

- 공통 버스 구조 (Common Bus Architecture) [Shared Bus]
- CPU, 메모리, I/O 장치 등이 공유된 버스를 통해 데이터를 주고받음
- 일반적으로 하나의 메모리를 공유
- 주소 지정 방식
- 각 데이터(워드) 단위로 주소가 할당됨
- CPU는 주소값을 통해 메모리에 접근
- 입출력 장치 (I/O Devices)와 디스크 컨트롤러
- 디스크 컨트롤러는 하드디스크(HDD, SSD)와 CPU 간 데이터 전송을 담당
- CPU는 I/O 장치와의 데이터 교환을 위해 인터럽트 사용
- 인터럽트란 실행 중인 작업을 멈추고, 더 중요한 작업을 우선 처리하도록 하는 신호
인터럽트 동작 방식
- 인터럽트가 발생하면, 인터럽트 벡터를 통해 해당 인터럽트에 맞는 서비스 루틴(ISR)으로 제어가 이동한다. 인터럽트 벡터에는 모든 인터럽트 서비스 루틴의 주소가 저장되어 있음.
- 인터럽트 아키텍처는 인터럽트가 발생한 시점의 명령어 주소를 저장해야 한다. 이를 통해 인터럽트 처리가 끝난 후 원래 실행하던 프로그램으로 돌아갈 수 있음.
- 인터럽트가 처리되는 동안 새로운 인터럽트가 들어오는 것을 막기 위해, 현재 인터럽트를 처리하는 동안 다른 인터럽트를 비활성화한다. 이를 통해 “인터럽트 손실(lost interrupt)“을 방지할 수 있음.
- 트랩(Trap)은 소프트웨어가 발생시키는 인터럽트로, 오류 발생이나 사용자 요청으로 인해 생성된다. 예시: 0으로 나누기 오류, 시스템 호출(syscall)
- 운영체제는 인터럽트 기반으로 동작한다. 시스템은 인터럽트가 발생할 때마다 적절한 처리를 수행하면서 운영됨.
인터럽트 핸들링

- 운영체제는 CPU의 상태를 보존해야 한다. 인터럽트가 발생하면, 현재 CPU의 레지스터 값과 프로그램 카운터(PC)를 저장하여 이후 원래 작업으로 복귀할 수 있도록 한다.
- 운영체제는 어떤 종류의 인터럽트가 발생했는지 판별해야 한다. 이를 위해 두 가지 방법이 존재함.
-
Polling(폴링)
CPU가 여러 인터럽트 소스를 차례로 확인하여 어떤 인터럽트가 발생했는지 판단. 여러 장치를 반복적으로 확인.
-
Vectored Interrupt System(벡터 인터럽트 시스템)
인터럽트가 발생하면 인터럽트 벡터를 통해 해당 인터럽트 처리 루틴(ISR)으로 직접 이동. 조금 더 더 빠르고 효율적임.
- 각 인터럽트 유형에 따라 적절한 처리 루틴(Interrupt Service Routine, ISR)이 실행된다. 인터럽트의 종류에 따라 별도의 코드 세그먼트(ISR)가 실행되어 적절한 조치를 수행한다.
- 키보드 입력 → 키보드 인터럽트 핸들러 실행
- 하드웨어 오류 → 오류 처리 인터럽트 실행
- 시스템 호출 → OS에서 해당 요청을 처리
인터럽트 타임라인

- I/O 요청 (I/O Request) CPU는 사용자 프로세스를 실행하다가 I/O 요청을 보냄. 이때, I/O 장치는 작업을 수행하기 시작하고 transferring(데이터 전송 중) 상태가 됨. CPU는 I/O 작업을 기다리지 않고 다른 사용자 프로세스를 실행할 수 있음.
- 데이터 전송 완료 (Transfer Done) I/O 장치가 작업을 완료하면, CPU에게 인터럽트를 발생시킴. CPU는 현재 실행 중인 사용자 프로세스를 잠시 멈추고, 인터럽트 처리 루틴(ISR)을 실행하여 I/O 완료를 처리함.
- 인터럽트 처리 (I/O Interrupt Processing) CPU는 인터럽트 핸들러를 실행하여 I/O 완료를 확인하고 필요한 후속 작업을 수행함. 인터럽트 처리가 끝나면 다시 원래 실행하던 사용자 프로세스로 복귀.
- 새로운 I/O 요청 반복 이후 또 다른 I/O 요청이 발생하면, 같은 과정이 반복됨. CPU는 사용자 프로세스를 실행하다가, I/O 요청을 보내고, I/O 작업이 완료되면 인터럽트 핸들링을 수행하는 방식으로 동작함.
I/O 구조

운영체제에서 I/O(입출력) 처리 방식에는 동기식(Synchronous) I/O와 비동기식(Asynchronous) I/O가 있다.
- 동기식 I/O (Synchronous I/O) I/O 작업이 끝날 때까지 CPU가 대기하는 방식. I/O 작업이 시작된 후, 완료될 때까지 제어가 사용자 프로그램으로 돌아오지 않음 Wait 명령어가 CPU를 대기 상태로 만듦 (CPU가 놀고 있음) Wait loop 방식 → CPU가 반복해서 메모리에 접근하면서 I/O 완료 여부를 확인함 (비효율적) 동시에 여러 개의 I/O 요청을 처리할 수 없음 (하나의 I/O 작업이 끝나야 다음 I/O 요청 가능)
- 비동기식 I/O (Asynchronous I/O) I/O 작업이 끝나지 않아도, 사용자 프로그램이 계속 실행됨. CPU가 다른 작업을 수행할 수 있으므로 효율적 시스템 콜(System Call)을 통해 운영체제에 I/O 요청을 보냄 장치 상태 테이블(Device-Status Table) 사용 각 I/O 장치의 타입, 주소, 현재 상태 정보를 저장 운영체제는 I/O 장치 테이블을 조회하여 I/O 상태를 확인하고, 완료되면 CPU에 알림
Device-Status Table

Device-Status Table (장치 상태 테이블) 운영체제는 각 I/O 장치의 상태를 저장하는 테이블을 관리함
운영체제는 이 테이블을 참조하여 I/O 장치가 어떤 상태인지 확인하고 적절한 처리를 수행함
Direct Memory Access Structure (직접 메모리 접근)

고속 I/O 장치를 위한 메커니즘
CPU 개입 없이, 장치 컨트롤러가 데이터를 메모리로 직접 전송
보통 메모리 속도에 가까운 속도로 데이터 전송 가능
DMA의 장점
- CPU가 I/O 작업에 직접 개입하지 않아도 됨 → CPU가 다른 작업을 수행할 수 있음
- 기존 I/O 방식은 1바이트 전송마다 인터럽트가 발생하지만, DMA는 한 블록(Block) 단위로 전송 후 한 번만 인터럽트 발생 → 인터럽트 오버헤드 감소
DMA 데이터 전송 과정
- CPU가 DMA 컨트롤러에게 데이터 전송 요청
- DMA 컨트롤러가 데이터를 메모리로 직접 전송
- 전송 완료 후, CPU에게 인터럽트 발생