
커널(kernal)이란, 운영체제의 핵심기능을 구현한 프로그램으로써, 운영체제의 성능은 커널에 의해 좌우됩니다.
유닉스 계열 커널 VS 윈도우 계열 커널(사용자 인터페이스)
유닉스 계열 커널 : 문자 사용자 인터페이스 기반인 '셸(shell)' 사용.
윈도우 계열 커널 : 그래픽 사용자 인터페이스 기반.
커널 내부는 다음과 같이 시스템 호출과 디바이스 드라이버로 구성되어 있습니다.
시스템 호출은 커널이 자원을 보호하기 위해 만든 인터페이스입니다. 컴퓨터 자원을 이용하기 위해서는 시스템 호출 인터페이스를 이용해야 접근 가능하며, 커널이 제공하는 시스템 관련 서비스를 모아 놓은 곳이며, 함수형태로 제공됩니다.
디바이스 드라이버는 커널과 하드웨어의 인터페이스를 말합니다. 시스템 호출과 달리 하드웨어 제작사 자체에서 제공하는 드라이버도 존재하여, 사용자가 사용 시 해당 디바이스 드라이버 소프트웨어를 직접 설치해야 사용이 가능합니다.
커널의 역할과 종류
커널의 역할
1. 프로세스 관리 - 프로세스에 CPU를 배분하고 작업에 필요한 제반 환경 제공.
메모리 관리 - 프로세스에 작업 공간을 제공.
파일 시스템 관리 - 데이터를 저장하고 접근할 수 있는 인터페이스 제공.
입출력 관리 - 필요한 입력과 출력 서비스 제공.
프로세스 간 통신 관리 - 공동작업을 위한 각 프로세스 간 통신환경을 지원.
커널의 종류
(1) 단일형 구조 커널(monolithic architecture)
초창기 운영체제 구조.
커널의 핵심기능을 구현하는 모듈 하나로 구성.
장점 : 모듈이 하나로 되어 있어 통신 비용이 줄어 효율적인 운영이 가능.
단점
버그나 오류처리가 어렵다.
상호 의존도가 높아 기능 한 곳의 작은 결함이 시스템 전체의 문제로 확산될 수 있다.
다양한 환경의 시스템에 적용이 어렵다.
현대의 운영체제는 크고 복잡하여 단일형 구조를 적용하기 힘들다.
(2) 계층형 구조 커널(layered architecture)
단일형 구조의 발전된 형태.
비슷한 기능들을 묶어 모듈화하여 하나의 계층으로 만들고 계층간의 통신을 통해 운영체제를 구현하는 방식.
단일형 구조 커널보다 버그나 오류 처리가 쉽다.
오늘날 대부분의 운영체제가 이 구조로 이뤄져 있다.
(3) 마이크로 구조 커널(micro architecture)
등장 배경
다양한 하드웨어와 사용자의 요구 수용으로 크기가 점차 커짐에 따라 하드웨어 용량이 커지고 소스코드 량이 많아 오류 잡기가 어려워졌다.
운영체제에서는 가장 기본적인 기능만 제공하고 이외의 기능은 사용자 영역에서 구현되도록 한 형태.
각 모듈이 독립적으로 작동하기 때문에 하나의 모듈이 실패하여도 전체 운영체제에 영향을 미치지 못한다.
커널이 작고 이식이 쉬워 CPU 용량이 작은 시스템에도 적용이 가능하다.
멀티 프로세스는 여러 개의 프로세스들이 독립적인 메모리 공간을 가지고 동시에 실행되는 방식을 말합니다. 멀티 스레드는 하나의 프로세스 내에 여러개의 스레드가 메모리를 공유하며 실행되는 방식을 말합니다.
멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 미치지 않습니다. 하지만 ContextSwitching을 위한 오버헤드(캐시 초기화, 인터럽트 등)가 발생하며, 프로세스이므로 서로 간의 통신 비용이 크다는 단점이 있습니다.
멀티스레드는 프로세스보다 생성 비용이 낮으며, 통신 비용이 낮습니다. 하지만 공유 자원으로 인해 스레드 간에 동기화 문제가 발생할 수 있다는 단점이 있습니다.
CPU 스케줄러에 의해서 정해진 시간 내에 작업을 수행하지 못할 경우, 스레드가 어디까지 작업을 수행했는지 기억할 필요가 있습니다. 이를 위해서 PC 레지스터라는 공간에 수행했던 정보를 저장하며, 각 스레드마다 독립적으로 실행단위가 존재하므로 스레드마다 독립적으로 해당 공간을 할당합니다.
PC는 프로그램 카운터를 말하며, 다음으로 실행할 명령어의 주소를 저장하는 레지스터를 말합니다. 즉, 코드가 실행 중 다음 줄에 있는 코드를 수행한다고 가정하면 다음 줄의 주소가 PC 레지스터에 저장됩니다.
SP는 스택 포인터이며, 스택의 마지막 프로그램 요청 주소를 저장합니다. 스택에서 최상단의 주소를 가지고 있다라고 생각하면 간단합니다.