1. 리눅스 커널 구조
운영체제
- 자원관리자
- 사용자에게 서비스를 제공하기 위해 자원 관리
💡 운영체제는 시스템 호출을 통해 태스크가 자원을 사용할 수 있게 해주는 자원 관리자
자원이란?
- 물리적 자원
- CPU, 메모리, 디스크, 터미널, 네트워크 등 시스템을 구성하고 있는 요소들과 주변 장치 등
- 추상적 자원
- 물리적 자원을 운영체제가 관리하기 위해 추상화 시킨 객체들
- CPU를 추상화한 task, 메모리를 추상화한 세그먼트와 페이지, 디스크를 추상화한 파일, 네트워크를 추상화한 통신 프로토콜과 패킷 등
- 물리적 자원에 대응되지 않으면서 추상적인 객체로만 존재하는 자원도 있음
리눅스 커널 내부

- 물리적 자원을 추상적 자원으로써 제공해주는 관리자 존재
- 크게 태스크 관리자, 메모리 관리자, 파일시스템, 네트워크 관리자, 디바이스 드라이버 관리자로 나뉨
💡 커널은 자원 관리자이며 커널이 관리하는 자원에는 물리적인 자원과 추상적인 자원이 있다.
- 태스크 관리자
- 태스크 생성, 실행, 상태 전이, 스케줄링, 시그널 처리, 프로세스 간 통신 등의 서비스 제공
- 메모리 관리자
- 물리 메모리 관리, 가상 메모리 관리, 관리를 위한 세그멘테이션, ㅍ페이징, 페이지 부재 결함 처리 등의 서비스 제공
- 파일 시스템
- 파일의 생성, 접근 제어, inode 관리, 디렉터리 관리, 수퍼 블록 관리 등의 서비스 제공
- 네트워크 관리자
- 소켓 인터페이스, TCP/IP 같은 통신 프로토콜 등의 서비스 제공
- 디바이스 드라이버
- 디스크나 터미널, CD, 네트워크 카드 등과 같은 주변 장치들을 구동하는 드라이버들로 구성
리눅스 소스 레벨 구조

- kernel 디렉터리
- 태스크의 생성과 소멸, 프로그램의 실행, 스케줄링, 시그널 처리 등의 기능이 구현되어 있음
- arch 디렉터리
- 하드웨어 종속적인 부분들이 구현된 디렉터리
- CPU타입에 따라 하위 디렉터리도 구분됨
- fs 디렉터리
- 리눅스에서 지원하는 다양한 파일 시스템과 시스템 호출이 구현된 디렉터리
- mm 디렉터리
- 메모리 관리자가 구현된 디렉터리
- 물리 메모리 관리, 가상 메모리 관리, 태스크마다 할당되는 메모리 객체 관리 등의 기능이 구현되어 있음
- driver 디렉터리
- 디바이스 드라이버가 구현된 디렉터리
- 초기에는 블록 디바이스 드라이버, 문자 디바이스 드라이버, 네트워크 디바이스 드라이버로 구분 → 현재는 더 많음
- net 디렉터리
- 리눅스가 지원하는 통신 프로토콜이 구현된 디렉터리
- ipc 디렉터리
- 리눅스 커널이 지원하는 프로세스간 통신 기능이 구현된 디렉터리
- init 디렉터리
- include 디렉터리
- 리눅스 커널이 사용하는 헤더 파일들이 구현된 디렉터리
- 이외에도 다양한 디렉터리가 존재함
2. 리눅스 커널 컴파일
- 리눅스에서는 새로운 커널을 컴파일 하고 컴파일 된 커널로 재부팅하면 됨
- 컴파일 하여 실행파일을 만드는 것과 리눅스 커널을 만드는 것은 유사함
- 커널 만드는 과정
- 커널 구성
- 새로 만들어질 리눅스 커널에게 현재 시스템에 존재하는 하드웨어 특성, 커널 구성 요소, 네트워크 특성 등의 정보를 알려주는 과정
- 자신이 가지고 있는 시스템의 하드웨어 정보들에 대한 사전 지식이 필요함
- make menuconfig 명령어 사용
- 커널 컴파일
- 커널 소스 파일을 이용해 실행 가능한 커널을 만드는 과정
- make 명령을 통해 생성
- 커널 인스톨
- 생성된 커널로 시스템이 부팅될 수 있도록 만드는 과정
- make install 명령어 사용
이 글은 아래의 책을 공부 및 정리한 내용입니다.
리눅스 커널 내부구조 - 예스24