커널과 시스템 콜
커널
정의
프로그램이 실행되기 위해서는 메모리에 상주해야하며, 운영체제 또한 프로그램이기 때문에 메모리에 상주해야한다. 하지만, 운영체제처럼 큰 프로그램이 메모리에 올라가면 메모리 공간이 부족할 것이다. 그렇기 때문에 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려놓으며, 이 부분을 커널이라고 한다.
구성
- 프로세스 관리 : 프로세스에 CPU를 분배하고 작업에 필요한 제반 환경 제공
- 메모리 관리 : 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상공간 제공
- 파일 시스템 관리 : 데이터 저장하고 접근할 수 있는 인터페이스 제공
- 입출력 관리 : 필요한 입출력 서비스 제공
- 프로세스 간 통신 관리 : 공동 작업을 위한 각 프로세스 간 통신 환경 제공
구조
-
단일형 구조 커널 (Monolithic)

- 초창기 운영체제의 구조이며, 모듈들이 구분 없이 하나로 구성
- 하나로 구성되기 때문에 모듈 간의 통신 비용 절감
- 하지만, 하나로 구성되기 때문에 버그나 오류 처리의 어려움 발생
-
계층형 구조 커널 (Layered)

- 비슷한 기능을 가진 모듈을 묶어서 하나의 계층으로 만듦
- 계층 간의 통신을 통해 운영체제를 구현
- 오류가 발생한 계층만 수정 가능
인터페이스
정의
사용자와 커널의 중간다리 역할을 한다. 즉, 커널에게는 사용자의 명령을 전달하고 사용자에게는 커널의 실행 결과를 전달한다.
시스템 콜
정의
응용 프로그램이 하드웨어를 사용하기 위해서는 운영체제가 제공하는 인터페이스를 사용해야한다. 이때, 이 인터페이스를 시스템 콜이라고 한다.
시스템 콜을 직접적으로 사용하기 보다는, 라이브러리에서 제공하는 API를 사용한다.
종류
- 프로세스 제어 : exit, wait time, wait event 등
- 파일 조작 : open, create, close 등
- 장치 관리 : ioctl, read, write 등
- 정보 유지 : getpid, alarm, sleep 등
- 통신 : pipe, mmap 등
- 보호 : chmod, umask, chown
드라이버
정의
사용자의 명령을 인터페이스를 통해 전달받은 커널은 명령을 수행하기 위해 하드웨어에 접근을 해야할 일이 발생할 수 있다. 이때, 하드웨어와 커널 사이에서 중간다리 역할을 하는 것이 드라이버이다.
하드웨어의 종류는 다양하고 직접 각 하드웨어에 맞는 인터페이스를 개발하기는 어렵기 때문에 커널은 입출력의 기본적인 부분만 제작하고, 하드웨어의 특성을 반영한 소프트웨어를 하드웨어 제작자에게 받아 커널이 실행될 때 함께 실행되도록 한다. 해당 소프트웨어를 디바이스 드라이버라고 한다.
CPU 모드

CPU는 사용자 애플리케이션이 시스템을 손상시키는 것을 방지하기 위해 두가지 모드를 제공한다. CPU에 있는 Mode bit로 모드를 구분하여 0은 커널모드, 1은 사용자모드로 나뉘어서 구동한다.
사용자 모드
사용자 모드에서 사용자 애플리케이션 코드가 실행된다. 사용자가 접근할 수 있는 영역에 제한이 있기 때문에 해당 모드에서는 하드웨어에 접근할 수 없다. 하드웨어에 접근하기 위해서는 시스템 콜을 사용해야 한다.
커널 모드
운영체제가 CPU를 사용하는 모드이다. 시스템 콜을 통해 커널모드로 전환이 되면 운영체제는 하드웨어를 제어하는 명령어를 사용한다.
인터럽트
정의
프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 중단하고 발생된 상황을 처리한 후 다시 실행중인 작업으로 복귀하는 것이다.
종류
- 외부 인터럽트 : 전원 이상, 기계 착오, 외부 신호, 입출력
- 내부 인터럽트 : 잘못된 명령, 잘못된 데이터 사용, 프로그램 검사(Division by zero 등)
- 소프트웨어 인터럽트 : 프로그램을 실행시키거나 감시프로그램을 호출하는 동작을 수행
동작 순서
- 인터럽트 요청
- 프로그램 실행 중단
- 현재의 프로그램 상태 보존 (PCB, PC)
- 인터럽트 처리루틴 실행 : 인터럽트를 요청한 장치를 식별
- 인터럽트 서비스 루틴 실행 : 인터럽트 원인을 파악하고 실질적인 작업을 수행
- 상태 복구 : 인터럽트 발생 시 저장해둔 PC를 복수
- 중단된 프로그램 실행 재개 : PC의 값을 이용하여 이전에 수행중이던 프로그램 재개
우선순위
전원 이상 > 기계 착오 > 외부 신호 > 입출력 > 명령어 잘못 > 프로그램 검사 > 감시프로그램 실행