리눅스 커널
커널이란?
메모리에 상주하는 운영체제의 일부분을 커널이라 한다. 하여 좁은 의미의 운영체제라고도 한다. 즉 커널은 메모리에 상주하는 부분으로써 운영체제의 핵심적인 부분을 뜻한다. 이에 반에 넓은 의미의 운영체제는 커널뿐 아니라 각종 시스템을 위한 유틸리티들을 광범위하게 포함하는 개념이다.
유저 인터페이스(UI)가 OS의 가장 바깥쪽 부분이라면, 커널(Kernel)은 가장 안쪽에 위치한 부분이다. 커널은 시스템의 다른 모든 부분을 위한 기본적인 기능을 제공하고, 하드웨어를 관리하고, 시스템 자원을 분배한다. 즉 매우 핵심적인 역할을 한다는 것이다. 이런 연유로 커널을 운영체제의 관리자(supervisor) 혹은 핵심(core)이라고 부르기도한다.
커널은 일반적인 유저 응용 프로그램보다 높은 상태를 지니게 되는데, 여기서 높은 상태란 그 메모리가 보호되며 하드웨어에 자유로이 접근할 수 있는 것을 말한다. 이러한 시스템 상태와 메모리 영역을 커널공간(kernel-space)이라 한다. 이와 달리 유저 응용 프로그램은 유저공간(user-space)에서 실행된다. 이들은 가용자원 중에 일부만을 사용할 수 있으면, 일부 시스템 기능들은 작동시킬 수 없고, 하드웨어 직접 접근할 수 없다. 일반 응용프로그램을 실행할 때 시스템은 유저공간에 있지만, 커널이 실행될 때는 커널공간으로 이동한다. 시스템상에서 실행되는 응용 프로그램은 시스템 콜(System call)을 통하여 커널과 통신한다. (ex. write(), fork(), socket())
커널의 주된 구성 요소는 다음과 같다.
- -인터럽트 핸들러 (interrupt handler)
- -스케쥴러(schduler)
- -메모리 매니저(memory manager)
- -네트워크나 프로세스간 통신 서비스(networking service)
- -보호 메모리(protected memory)
>>> 책의 목차와 1장만을 읽고 느낀점
리눅스 커널을 떠올리며 막연하게 품었던 기대와는 달리 진부한 메모리관리, 프로세스 관리, 스케쥴링 같은 개념들이 나와서 조금은 실망했다.
운영체제와 커널이라고 하면 엄청 복잡하고 대단한 무언가가 있을 걸로 상상했는데, 막상 <리눅스 커널 심층분석>책을 들여다보니 <컴퓨터구조> 책에서 학습한 내용들을 sw적으로 구현해놓은 것이었다. (프로세스 관리, 스케줄링, 시스템 콜, 인터럽트, 타이머와 시간관리, 메모리 관리, 가상 파일시스템, 블록 I/O 레이어, 페이지 캐시 등)
우선 <운영체제> 를 먼저 공부한 다음, 리눅스 커널에 대해서도 공부해봐야겠다.
요즘 쓰이는 전자기기 중 운영체제를 필요로하는 기기는 MacOS, Windows, Linux 중 하나 아닌가? 이들의 조상님뻘 되는 UNIX를 가장 닮은 OS는 Linux 아닐까?
작은 임베디드 시스템, 안드로이드 부터 대형 클라우드 시스템까지 리눅스를 안 쓰는곳이 없기에, Linux에 대한 깊은 이해가 필요할 듯 하다.