커널이란 무엇인가?
운영체제는 하드웨어와 프로그램을 어떻게 연결할까?
본 블로그 작성 글들은, 강의를 목표로 하고 제작되었습니다. 또한 작성된 글의 정보도 틀렸을 수 있으니, 주의해주세요.
게임, 브라우저, 메모장 같은 프로그램은 CPU와 메모리, 디스크를 직접 마음대로 다루지 않는다. 프로그램과 하드웨어 사이에서 자원을 관리하는 운영체제의 핵심 부분을 Kernel(커널)이라고 부른다.
커널은 자원 관리자다
컴퓨터에는 동시에 실행하려는 프로그램이 많지만 CPU 코어와 메모리는 한정되어 있다. 커널은 누구에게 CPU 시간을 줄지, 어느 메모리를 사용할 수 있는지, 파일과 장치에 어떻게 접근할지를 결정한다.
응용 프로그램
게임 / 브라우저 / 메모장
↓ 요청
커널
프로세스 / 메모리 / 파일 / 장치 관리
↓ 제어
CPU / RAM / SSD / 키보드 / 네트워크 카드
커널의 대표적인 역할은 다음과 같다.
- 프로세스와 스레드의 실행 순서를 관리한다.
- 프로그램마다 사용할 가상 메모리 공간을 만든다.
- 파일 시스템을 통해 파일과 디렉터리를 관리한다.
- 장치 드라이버를 통해 하드웨어와 통신한다.
- 네트워크 패킷을 처리한다.
- 프로그램이 다른 프로그램의 메모리를 함부로 건드리지 못하게 막는다.
프로그램은 커널에 요청한다
응용 프로그램이 파일을 읽고 싶다고 해서 SSD 제어 명령을 직접 만들지는 않는다. 운영체제가 제공하는 함수를 호출하면 커널이 권한과 인자를 검사한 뒤 실제 작업을 수행한다.
std::ifstream file("save.dat");
C++ 코드에서는 단순한 파일 객체처럼 보이지만, 더 아래에서는 운영체제의 파일 열기와 읽기 기능을 사용한다. 이처럼 응용 프로그램이 커널 기능을 요청하는 통로를 System Call(시스템 콜)이라고 한다.
커널이 멈추면 컴퓨터 전체가 영향을 받는다
일반 프로그램 하나가 잘못되면 보통 그 프로그램만 종료된다. 하지만 커널과 커널 모드 드라이버는 시스템 전체를 관리하므로 여기서 잘못된 메모리 접근이 발생하면 운영체제 전체가 멈출 수 있다.
그래서 커널 코드는 높은 권한을 가지는 만큼 검증과 안정성이 매우 중요하다. 커널은 단순히 운영체제 프로그램 중 하나가 아니라, 하드웨어를 안전하게 나누어 쓰도록 통제하는 중심 계층이다.