컴퓨터에서 항상 실행되는 핵심 프로그램. 하드웨어와 직접 상호작용하면서 자원을 제어하고 관리한다.
직접 손대게 두면 생기는 일
응용 프로그램이 하드웨어를 직접 건드리게 두면 시스템 전체가 위험해진다. 잘못 짠 프로그램 하나가 다른 프로세스의 메모리를 망가뜨리거나 장치를 멈춰 세울 수 있다.
시스템 자원은 한정되어 있는데 그것을 쓰겠다는 응용 프로그램은 많다. 여럿이 동시에 같은 버퍼에 쓰면 엉뚱한 데이터가 남는다. 자원을 공유하는 프로세스가 여럿일 때 한 번에 하나만 읽고 쓰도록 통제하는 것이 커널이 하는 일이다.
유저 모드와 커널 모드
프로그램이 도는 상태는 둘로 나뉜다. 유저 모드에서 응용 프로그램은 자기 메모리 안에서만 돌고 하드웨어에 직접 손댈 수 없다. 커널 모드는 통제권이 커널로 넘어가 커널이 실행하는 상태이고, 이때는 모든 자원에 접근할 수 있다.
그래서 응용 프로그램은 필요할 때 시스템 콜로 커널에 부탁한다. 그 순간 커널 모드로 전환된다. 컨텍스트 스위칭이 언제나 커널 모드에서 일어나는 것도 같은 이유다.
운영체제와의 범위 차이
운영체제와 커널은 같은 말이 아니다. 운영체제는 커널에 시스템 프로그램을 더한 것이고, 시스템 프로그램은 운영체제와 관련은 있지만 반드시 커널의 일부일 필요는 없는 것들이다.
범위로 보면 운영체제가 넓다. 운영체제는 시스템 전체를 관리하며 사용자와 응용 프로그램을 상대하고, 커널은 그 안에서 하드웨어와 맞닿아 기능을 실제로 구현한다.