운영체제는 컴퓨터 자원을 효율적으로 관리하고 사용자와 하드웨어 간의 중재자 역할을 하는 소프트웨어다.
크게 커널(Kernel) 과 운영체제의 기능으로 나눌 수 있다.
운영체제의 큰 그림과 핵심 개념들을 공부해보자
커널(Kernel)
커널은 운영체제의 핵심 부분으로, 하드웨어와 애플리케이션 사이에서 중재자 역할을 한다.
애플리케이션이 하드웨어에 직접 접근하지 않고, 커널을 통해 간접적으로 접근하게 하여 안정성과 보안을 유지한다.

커널의 주요 역할
-
프로세스 관리
- 여러 프로그램이 동시에 실행될 때 프로세스를 생성하고 종료하며, CPU 시간을 분배한다.
- 문맥 교환(Context Switching) 을 통해 여러 프로세스가 CPU를 효율적으로 사용할 수 있도록 한다.
-
메모리 관리
- 각 프로세스가 메모리를 안전하고 효율적으로 사용할 수 있게 메모리 할당 및 회수를 한다.
- 가상 메모리 기술을 이용해 실제 메모리보다 더 큰 메모리를 사용하는 것처럼 보이게 한다.
-
디바이스 관리
- 키보드, 마우스, 하드디스크 등 하드웨어 장치에 접근하고 입출력(I/O) 작업을 관리한다.
- 디바이스 드라이버를 통해 하드웨어와 소프트웨어가 원활하게 통신할 수 있도록 한다.
-
파일 시스템 관리
- 데이터를 파일 단위로 저장하고 관리한다.
- 파일 생성, 삭제, 읽기, 쓰기, 이동 등을 처리한다.
운영체제의 역할
운영체제는 컴퓨터 하드웨어와 사용자 간의 중재자 역할을 한다.
하드웨어 자원을 효율적으로 관리하고, 사용자와 애플리케이션이 편리하고 안전하게 시스템을 사용할 수 있게 해준다.
운영체제의 주요 역할은 다음과 같다.

1. 프로세스 관리
- 프로세스는 실행 중인 프로그램의 인스턴스다.
- 운영체제는 프로세스를 생성하고 종료하며, CPU 시간을 분배하고 자원을 할당한다.
- 여러 프로세스가 동시에 실행될 때 문맥 교환(Context Switching) 을 통해 공정하게 CPU를 사용할 수 있게 한다.
예시: 놀이공원에서 놀이기구 타기
- 여러 사람이 놀이기구를 타려면 순서를 정해야 한다.
- 각 사람에게 정해진 시간만큼 놀이기구를 타게 하고, 순서대로 바꿔가며 탄다.
- 운영체제도 여러 프로세스가 공평하게 CPU를 사용할 수 있도록 관리한다.
2. 메모리 관리
- 메모리는 프로그램이 실행되는 공간으로, RAM을 의미한다.
- 운영체제는 프로세스마다 필요한 메모리를 할당하고, 사용이 끝나면 회수한다.
- 가상 메모리(Virtual Memory) 기술을 사용해 물리 메모리보다 더 큰 메모리를 사용하는 것처럼 보이게 할 수 있다.
- 가상 메모리(Virtual Memory) 는 실제 물리 메모리 크기와 상관없이 더 큰 메모리 공간을 사용하는 것처럼 보이게 한다.
- 페이징(Paging) 과 세그멘테이션(Segmentation) 기법을 사용해 프로세스에 필요한 메모리만 나누어 할당한다.
페이지 교체 알고리즘
- FIFO (First In First Out): 가장 먼저 들어온 페이지를 교체한다.
- LRU (Least Recently Used): 가장 오랫동안 사용하지 않은 페이지를 교체한다.
- LFU (Least Frequently Used): 사용 빈도가 가장 적은 페이지를 교체한다.
예시: 책상 공간 관리
- 여러 사람이 한 책상에서 공부할 때, 한 사람씩 필요한 책만 펼치고 나머지 책은 책장에 보관한다.
- 필요할 때만 책장에서 가져와 보는 것처럼, 운영체제는 필요한 메모리만 효율적으로 관리한다.
3. 파일 및 디렉터리 관리
- 데이터를 파일 단위로 저장하고, 디렉터리(폴더) 를 통해 체계적으로 관리한다.
- 파일 생성, 삭제, 읽기, 쓰기, 복사, 이동 등을 처리하며, 권한 설정으로 보안을 강화한다.
파일 시스템 종류
- FAT (File Allocation Table): DOS와 Windows에서 사용되며, 구조가 단순하지만 대용량 파일 관리에 비효율적이다.
- NTFS (New Technology File System): Windows NT 계열에서 사용하며, 보안과 대용량 파일 처리가 뛰어나다.
- ext (Extended File System): 리눅스에서 주로 사용되며, 버전에 따라 성능과 안정성이 다르다.
예시: 서류철 관리
- 회사에서 문서를 종류별로 서류철에 정리하고, 필요할 때 찾아보고 수정하거나 폐기한다.
- 운영체제도 데이터를 파일과 디렉터리 구조로 체계적으로 관리한다.
4. 장치 관리 (입출력 관리)
- 키보드, 마우스, 프린터, 하드디스크 등 입출력 장치(I/O Device) 를 관리한다.
- 디바이스 드라이버를 통해 하드웨어와 소프트웨어가 원활하게 통신할 수 있게 한다.
예시: 공용 장비 예약 시스템
- 회사에서 공용 프린터나 회의실을 예약하고 사용하는 순서를 정하는 것처럼,
운영체제는 여러 프로그램이 장치를 사용할 때 충돌 없이 순서대로 사용하게 관리한다.
5. 사용자 인터페이스 제공
- 사용자가 컴퓨터를 쉽게 사용할 수 있도록 그래픽 사용자 인터페이스(GUI) 와 명령줄 인터페이스(CLI) 를 제공한다.
- GUI는 아이콘과 창을 사용한 직관적인 조작을 가능하게 하고, CLI는 명령어를 입력해 작업을 수행한다.
예시: 자동차 대시보드
- 자동차 대시보드에서 속도계, 연료 게이지 등을 보면서 운전자가 쉽게 차량 상태를 확인하고 조작할 수 있다.
- 운영체제도 사용자에게 직관적인 화면을 제공하여 컴퓨터를 쉽게 조작할 수 있게 한다.
6. 보안 및 권한 관리
- 사용자 계정마다 권한을 설정하고, 인증(로그인)과 인가(권한 부여)를 통해 보안을 강화한다.
- 악성 코드(바이러스, 해킹) 로부터 시스템을 보호하고, 데이터 무결성을 유지한다.
예시: 회사 사무실 출입 관리
- 사무실에 들어갈 때 출입증을 확인하고, 등급에 따라 접근 가능한 방이 정해져 있다.
- 운영체제도 사용자마다 접근 권한을 설정해 보안을 강화한다.
7. 네트워크 관리
- 컴퓨터 간의 데이터 통신을 관리하고, 인터넷 연결 및 파일 공유 등을 지원한다.
- 프로토콜(예: TCP/IP)을 통해 안정적이고 효율적인 데이터 전송을 가능하게 한다.
예시: 우편 시스템 관리
- 우편물을 보내려면 주소를 확인하고, 정해진 규칙에 따라 배달해야 한다.
- 운영체제는 네트워크 프로토콜을 통해 데이터가 정확한 주소로 안전하게 전달되게 한다.
시스템 콜과 이중 모드
1. 이중 모드: 왕국과 시민의 이야기
- 왕국 (커널 모드): 운영체제가 사는 곳! 모든 권력을 가지고 있어서 컴퓨터의 모든 자원을 마음대로 사용할 수 있다.
- 시민 (사용자 모드): 우리가 사용하는 프로그램들이 사는 곳. 왕국의 허락 없이는 중요한 일을 할 수 없다.
왜 이중 모드가 필요할까?
만약 시민들이 왕국처럼 모든 권력을 가진다면? 컴퓨터는 금방 엉망진창이 될 거다. 그래서 왕국(커널 모드)이 시민(사용자 모드)을 감시하고, 필요한 일만 허락하는 것이다.
2. 시스템 콜: 시민의 SOS 요청
- 시스템 콜: 시민(사용자 모드)이 왕국(커널 모드)에게 도움을 요청하는 방법. "왕님, 저 파일 좀 읽어주세요!" 또는 "왕님, 저 메모리 좀 빌려주세요!"처럼 필요한 일을 부탁하는 거다.
시스템 콜은 어떻게 작동할까?
- 시민의 SOS: 프로그램이 필요한 작업을 시스템 콜을 통해 왕국에 요청한다.
- 왕국의 출동: 왕국(커널 모드)이 시민의 요청을 확인하고, 필요한 일을 처리해준다.
- 시민의 행복: 왕국이 일을 마치면 시민(사용자 모드)에게 결과를 알려준다.
시스템 콜이 왜 필요할까?
- 안전: 시민들이 직접 왕국의 자원을 사용하면 위험하니까, 왕국을 통해서만 안전하게 사용할 수 있도록 하는 것이다.
- 효율: 왕국이 시민들의 요청을 한 번에 처리해주면, 시민들은 더 효율적으로 일할 수 있다.
시스템 콜(System Call)
시스템 콜은 프로그램(애플리케이션) 이 커널에 요청을 보낼 때 사용하는 인터페이스 다.
애플리케이션이 직접 하드웨어에 접근할 수 없기 때문에, 시스템 콜을 통해 커널에게 요청하고 커널이 대신 작업을 수행한다.
시스템 콜의 종류 및 예시
-
프로세스 제어
fork()
: 새로운 프로세스를 생성한다.
exec()
: 새로운 프로그램을 실행한다.
exit()
: 프로세스를 종료한다.
-
파일 조작
open()
: 파일을 연다.
read()
: 파일을 읽는다.
write()
: 파일을 쓴다.
close()
: 파일을 닫는다.
-
장치 조작
ioctl()
: 장치의 제어 및 상태 정보를 얻는다.
read()
/ write()
: 장치에서 데이터를 읽거나 쓴다.
-
정보 유지
getpid()
: 현재 프로세스의 ID를 얻는다.
alarm()
: 일정 시간이 지나면 시그널을 보낸다.
소프트웨어 인터럽트 (Software Interrupt)
소프트웨어 인터럽트는 CPU에서 실행 중인 프로그램의 흐름을 명시적으로 변경시키는 메커니즘이다. 하드웨어 인터럽트와 달리, 소프트웨어적으로 특정 명령이나 조건에 의해 발생한다.
주요 특징
- 동기적 발생: 특정 프로그램 코드 실행 중 예측 가능하게 발생한다.
- 다양한 목적: 시스템 호출, 예외 처리, 타이머 이벤트 등 여러 가지 용도로 사용된다.
- 우선순위: 하드웨어 인터럽트와 마찬가지로 우선순위를 가질 수 있다.
작동 방식
- 인터럽트 발생: 프로그램 실행 중 특정 명령 (예:
INT
명령어)이나 조건 (예: 0으로 나누기)이 발생하면 소프트웨어 인터럽트가 트리거된다.
- 인터럽트 벡터: CPU는 인터럽트 벡터 테이블을 참조하여 해당 인터럽트를 처리하는 핸들러의 주소를 찾는다.
- 핸들러 실행: CPU는 현재 실행 중인 프로그램의 상태를 저장하고, 해당 인터럽트 핸들러로 제어 흐름을 옮겨 인터럽트를 처리한다.
- 복귀: 인터럽트 처리가 완료되면, 저장된 상태를 복구하고 원래 프로그램으로 복귀하여 실행을 계속한다.
주요 용도
- 시스템 호출 (System Call): 사용자 프로그램이 운영체제의 기능을 호출할 때 사용된다. (예: 파일 입출력, 네트워크 통신)
- 예외 처리 (Exception Handling): 프로그램 실행 중 오류 (예: 0으로 나누기, 잘못된 메모리 접근)가 발생했을 때 처리한다.
- 타이머 인터럽트 (Timer Interrupt): 주기적인 작업을 수행하기 위해 특정 시간 간격으로 발생한다.
- 프로세스 간 통신 (Inter-Process Communication): 프로세스 간에 데이터를 주고받을 때 사용될 수 있다.
장점
- 유연성: 다양한 상황에 맞춰 인터럽트 핸들러를 작성하여 처리할 수 있다.
- 효율성: 특정 작업을 수행하기 위해 운영체제에 직접 접근하는 것보다 효율적이다.
단점
- 오버헤드: 인터럽트 발생 및 처리 과정에서 일정 정도의 오버헤드가 발생할 수 있다.
소프트웨어 인터럽트는 시스템의 효율적인 작동을 위해 필수적인 메커니즘이며, 다양한 방식으로 활용된다.