>  기사  >  운영 및 유지보수  >  5개 주요 모듈의 Linux 커널 소스 코드 및 전반적인 커널 아키텍처 설계(자세한 그래픽 및 텍스트 설명)

5개 주요 모듈의 Linux 커널 소스 코드 및 전반적인 커널 아키텍처 설계(자세한 그래픽 및 텍스트 설명)

WBOY
WBOY앞으로
2022-02-23 18:24:153751검색

이 기사는 커널의 전반적인 아키텍처 설계와 관련된 문제를 포함하여 Linux의 5개 주요 모듈의 커널 소스 코드에 대한 관련 지식을 제공합니다.

5개 주요 모듈의 Linux 커널 소스 코드 및 전반적인 커널 아키텍처 설계(자세한 그래픽 및 텍스트 설명)

관련 추천: "Linux 비디오 튜토리얼"

1. 소개

이 기사는 "Linux 커널 소스 코드 분석" 시리즈의 전문적인 부분입니다. 커널의 핵심 기능을 다음과 같이 사용합니다. Linux 커널의 전체 아키텍처와 아키텍처 아래의 주요 소프트웨어 하위 시스템을 설명하는 출발점입니다. 그 후, Linux 커널 소스 파일의 디렉토리 구조가 소개되고 각 소프트웨어 하위 시스템에 해당합니다.

참고: 이 기사 및 기타 "Linux 커널 분석" 기사는 다음 규칙을 기반으로 합니다.
a) 커널 버전은 Linux 5.6.18이며 다음 링크에서 얻을 수 있습니다:
https://mirrors.edge .kernel.org/pub/linux/kernel/v5.x/linux-5.6.18.tar.xz
b) 대부분의 임베디드 시스템은 ARM 프로세서를 사용하기 때문에 아키텍처 부분에 관련된 내용은 모두 ARM

II로 분석합니다. , Linux 커널의 핵심 기능

아래 그림에서 볼 수 있듯이 Linux 커널은 Linux 운영 체제의 일부일뿐입니다. 하위 측면에서는 시스템의 모든 하드웨어 장치를 관리하고, 다른 측면에서는 시스템 호출을 통해 라이브러리 루틴(예: C 라이브러리) 또는 기타 애플리케이션에 대한 인터페이스를 제공합니다.

5개 주요 모듈의 Linux 커널 소스 코드 및 전반적인 커널 아키텍처 설계(자세한 그래픽 및 텍스트 설명)

따라서 핵심 기능은 애플리케이션에서 사용할 하드웨어 장치를 관리하는 것입니다. 최신 컴퓨터(PC 또는 임베디드 시스템)의 표준 구성 요소는 CPU, 메모리(메모리 및 외부 메모리), 입력 및 출력 장치, 네트워크 장치 및 기타 주변 장치입니다. 따라서 이러한 장치를 관리하기 위해 Linux 커널은 다음 아키텍처를 제안합니다.

(코드는 배경 비공개 메시지 [코드]를 자유롭게 얻을 수 있음)

3. 리눅스 커널의 전체 아키텍처

3.1 전체 아키텍처 및 하위 시스템 구분

5개 주요 모듈의 Linux 커널 소스 코드 및 전반적인 커널 아키텍처 설계(자세한 그래픽 및 텍스트 설명)

위 그림은 Linux의 전체 아키텍처를 보여줍니다. 핵심. 커널의 핵심 기능에 따라 Linux 커널은 다음 기능을 담당하는 5개의 하위 시스템을 제안합니다.

1. 프로세스 관리 및 프로세스 스케줄링이라고도 알려진 프로세스 스케줄러. 각 프로세스가 가능한 한 공정한 방식으로 CPU에 액세스할 수 있도록 CPU 리소스를 관리하는 역할을 담당합니다.

2. 메모리 관리자, 메모리 관리. 다양한 프로세스가 머신의 메모리 자원을 안전하게 공유할 수 있도록 메모리 자원을 관리하는 역할을 담당합니다. 또한 메모리 관리는 프로세스가 시스템의 사용 가능한 메모리보다 더 많은 메모리를 사용할 수 있도록 하는 가상 메모리 메커니즘을 제공합니다. 사용되지 않은 메모리는 파일 시스템을 통해 외부 비휘발성 메모리에 저장되고 필요할 때 검색됩니다. 기억 속에.

3. VFS(가상 파일 시스템), 가상 파일 시스템. Linux 커널은 디스크 장치(하드 디스크, 자기 디스크, NAND 플래시, Nor Flash 등), 입출력 장치, 디스플레이 장치 등 다양한 기능을 가진 외부 장치를 통합된 파일 작업 인터페이스(오픈형)로 추상화합니다. , 닫기, 읽기, 쓰기 등)에 액세스합니다. 이것은 리눅스 시스템의 "모든 것이 파일이다"의 구현이다(사실 리눅스는 CPU, 메모리, 네트워크 등이 아직 파일이 아니기 때문에 철저하지 않다. 정말로 모든 것이 파일이 되어야 한다면, Bell Labs가 "Plan 9"을 개발하고 있는지 살펴봐야 합니다.)

4. 네트워크, 네트워크 하위 시스템. 시스템의 네트워크 장치를 관리하고 다양한 네트워크 표준을 구현하는 일을 담당합니다.

5. IPC(프로세스 간 통신), 프로세스 간 통신. IPC는 하드웨어를 관리하지 않으며 주로 Linux 시스템의 프로세스 간 통신을 담당합니다.

3.2 프로세스 스케줄러

프로세스 스케줄러는 Linux 커널에서 가장 중요한 하위 시스템으로 주로 CPU에 대한 액세스 제어를 제공합니다. 컴퓨터에서는 CPU 리소스가 제한되어 있고 많은 응용 프로그램이 CPU 리소스를 사용하기 때문에 CPU를 예약하고 관리하려면 "프로세스 예약 하위 시스템"이 필요합니다.

프로세스 스케줄링 하위 시스템에는 4개의 하위 모듈(아래 그림 참조)이 포함되어 있으며 해당 기능은 다음과 같습니다.

5개 주요 모듈의 Linux 커널 소스 코드 및 전반적인 커널 아키텍처 설계(자세한 그래픽 및 텍스트 설명)

1 프로세스 스케줄링을 구현하기 위한 전략으로 어떤 프로세스(또는 여러 개)가 실행될지 결정합니다. CPU를 가지고 있습니다.

2. 아키텍처 관련 부분인 아키텍처별 스케줄러는 다양한 CPU에 대한 제어를 통합 인터페이스로 추상화하는 데 사용됩니다. 이러한 제어는 주로 CPU 레지스터 액세스, 어셈블리 명령 작업 등과 관련된 일시 중지 및 재개 프로세스 중에 사용됩니다.

3. 아키텍처 독립적인 스케줄러, 아키텍처 독립적인 부분입니다. "스케줄링 정책 모듈"과 통신하여 다음에 실행할 프로세스를 결정한 다음 "아키텍처별 스케줄러 모듈"을 통해 지정된 프로세스를 재개합니다.

4. 시스템 호출 인터페이스, 시스템 호출 인터페이스. 프로세스 스케줄링 하위 시스템은 시스템 호출 인터페이스를 통해 사용자 공간에 제공해야 하는 인터페이스를 여는 동시에 사용자 공간 프로그램이 관리할 필요가 없는 세부 정보를 보호합니다.

3.3 메모리 관리자(MM)

메모리 관리는 Linux 커널에서 가장 중요한 하위 시스템이기도 하며 주로 메모리 리소스에 대한 액세스 제어를 제공합니다. Linux 시스템은 하드웨어 물리적 메모리와 프로세스에서 사용하는 메모리(가상 메모리라고 함) 사이에 매핑 관계를 설정합니다. 이 매핑은 프로세스별로 이루어지므로 서로 다른 프로세스가 동일한 가상 메모리를 사용할 수 있습니다. 서로 다른 물리적 기억에 매핑됩니다.

메모리 관리 하위 시스템에는 3개의 하위 모듈(아래 그림 참조)이 포함되어 있으며 해당 기능은 다음과 같습니다.

5개 주요 모듈의 Linux 커널 소스 코드 및 전반적인 커널 아키텍처 설계(자세한 그래픽 및 텍스트 설명)

1. 아키텍처 관련 관리자. 하드웨어 메모리에 액세스하기 위한 가상 인터페이스를 제공합니다.

2. 아키텍처 독립 관리자, 아키텍처 독립 파트. 프로세스 기반 메모리 매핑, 가상 메모리 스와핑을 포함한 모든 메모리 관리 메커니즘을 제공합니다.

3. 시스템 호출 인터페이스, 시스템 호출 인터페이스. 이 인터페이스를 통해 메모리 할당 및 해제, 파일 매핑 등의 기능을 사용자 공간 프로그램 응용 프로그램에 제공합니다.

3.4 가상 파일 시스템(VFS)

전통적인 의미의 파일 시스템은 컴퓨터 데이터를 저장하고 구성하는 방법입니다. 컴퓨터 디스크, 하드 드라이브 및 기타 장치의 콜드 데이터 블록을 이해하기 쉽고 사용자 친화적인 방식(파일 및 디렉터리 구조)으로 추상화하여 쉽게 찾고 액세스할 수 있습니다. 따라서 파일 시스템의 본질은 "데이터를 저장하고 정리하는 방법"이며, 파일 시스템의 구현은 "특정 장치에서 데이터를 읽고 특정 장치에 데이터를 쓰는 것"입니다.

컴퓨터 기술이 발전함에 따라 데이터를 저장하고 정리하는 방법도 지속적으로 개선되어 FAT, FAT32, NTFS, EXT2, EXT3 등과 같은 다양한 유형의 파일 시스템이 탄생하고 있습니다. 호환성을 위해 운영 체제나 커널은 동일한 표현 형식으로 여러 유형의 파일 시스템을 지원해야 하며, 이는 가상 파일 시스템(VFS)의 개념을 확장한 것입니다.

VFS의 기능은 다양한 파일 시스템을 관리하고 차이점을 보호하며 사용자 프로그램에 통합된 방식으로 파일에 액세스할 수 있는 인터페이스를 제공하는 것입니다.

디스크, 하드 드라이브, NAND 플래시 및 기타 장치에서 데이터를 읽거나 쓸 수 있으므로 원래 파일 시스템은 이러한 장치에 구축되었습니다. 이 개념은 메모리, 디스플레이(LCD), 키보드, 직렬 포트 등과 같은 다른 하드웨어 장치로 확장될 수도 있습니다.

하드웨어 장치에 대한 액세스 제어도 데이터 읽기 또는 쓰기로 요약될 수 있으므로 통일된 파일 작업 인터페이스를 사용하여 액세스할 수 있습니다. 이것이 Linux 커널이 수행하는 작업입니다. 기존 디스크 파일 시스템 외에도 장치 파일 시스템, 메모리 파일 시스템 등도 추상화합니다. 이러한 논리는 모두 VFS 하위 시스템에 의해 구현됩니다.

VFS 하위 시스템에는 6개의 하위 모듈(아래 그림 참조)이 포함되어 있으며 해당 기능은 다음과 같습니다.

5개 주요 모듈의 Linux 커널 소스 코드 및 전반적인 커널 아키텍처 설계(자세한 그래픽 및 텍스트 설명)

1 모든 외부 장치 및 컨트롤러를 제어하는 ​​데 사용되는 장치 드라이버. 서로 호환되지 않는 하드웨어 장치(특히 임베디드 제품)가 많기 때문에 장치 드라이버도 많습니다. 따라서 리눅스 커널의 소스코드 중 거의 절반이 디바이스 드라이버이다. 대부분의 리눅스 엔지니어(특히 국내 기업)는 디바이스 드라이버를 작성하거나 유지관리하고 있으며, 이것이 바로 리눅스의 핵심인 다른 내용을 추정할 시간이 없다. 커널).

2. 장치 독립적 인터페이스, 이 모듈은 하드웨어 장치(통합 장치 모델)를 설명하는 통일된 방법을 정의하므로 개발의 어려움을 줄일 수 있습니다. 동시에 인터페이스는 일관된 방식으로 위쪽으로 제공될 수 있습니다.

3. 논리 시스템, 각 파일 시스템은 특정 파일 시스템 논리를 구현하는 논리 시스템(논리 파일 시스템)에 해당합니다.

4. 시스템 독립 인터페이스, 이 모듈은 하드웨어 장치와 논리 파일 시스템을 통합 인터페이스(빠른 장치 및 문자 장치)로 표현하는 역할을 담당하므로 상위 계층 소프트웨어가 더 이상 특정 하드웨어 형태에 신경 쓰지 않습니다.

5. 시스템 호출 인터페이스는 파일 시스템 및 하드웨어 장치에 액세스하기 위한 통합 인터페이스를 사용자 공간에 제공합니다.

3.5 네트워크 하위 시스템(Net)

네트워크 하위 시스템은 주로 Linux 커널에서 다양한 네트워크 장치를 관리하고, 다양한 네트워크 프로토콜 스택을 구현하며, 궁극적으로 네트워크를 통해 다른 시스템을 연결하는 기능을 구현하는 역할을 담당합니다. Linux 커널에서 네트워크 하위 시스템은 5개의 하위 모듈을 포함합니다(아래 그림 참조). 해당 기능은 다음과 같습니다:

5개 주요 모듈의 Linux 커널 소스 코드 및 전반적인 커널 아키텍처 설계(자세한 그래픽 및 텍스트 설명)

1. 하위 시스템의 장치 드라이버는 동일합니다.

2. VFS 하위 시스템과 동일한 장치 독립적 인터페이스입니다.

3. 네트워크 프로토콜, IP, TCP, UDP 등 다양한 네트워크 전송 프로토콜을 구현합니다.

4. 프로토콜 독립 인터페이스는 다양한 하드웨어 장치와 네트워크 프로토콜을 보호하고 동일한 형식의 인터페이스(소켓)를 제공합니다.

5. 시스템 호출 인터페이스인 시스템 호출 인터페이스는 네트워크 장치에 액세스하기 위한 통일된 인터페이스를 사용자 공간에 제공합니다.

IPC 하위 시스템의 경우 기능이 비교적 간단하므로 여기서는 설명하지 않습니다.

4. Linux 커널 소스 코드의 디렉터리 구조

Linux 커널 소스 코드에는 세 가지 주요 부분이 포함됩니다.

1. 3장에 설명된 다양한 하위 시스템 및 하위 모듈과 전원 관리와 같은 기타 지원 하위 시스템을 포함한 커널 코어 코드 Linux 초기화 등

2. 라이브러리 파일과 같은 기타 비핵심 코드(Linux 커널은 독립형 커널이므로, 즉 커널은 다른 소프트웨어에 의존하지 않고 자체적으로 컴파일될 수 있습니다.) , 펌웨어 컬렉션, KVM(가상 머신 기술) 등

3. 컴파일 스크립트, 구성 파일, 도움말 문서, 저작권 고지 및 기타 보조 파일

ls 명령을 사용하여 본 커널 소스 코드의 최상위 디렉토리 구조 구체적인 설명은 다음과 같습니다.

5개 주요 모듈의 Linux 커널 소스 코드 및 전반적인 커널 아키텍처 설계(자세한 그래픽 및 텍스트 설명)

include/ ---- 内核头文件,需要提供给外部模块(例如用户空间代码)使用。
kernel/ ---- Linux内核的核心代码,包含了3.2小节所描述的进程调度子系统,以及和进程调度相关的模块。
mm/ ---- 内存管理子系统(3.3小节)。
fs/ ---- VFS子系统(3.4小节)。
net/ ---- 不包括网络设备驱动的网络子系统(3.5小节)。
ipc/ ---- IPC(进程间通信)子系统。
arch// ---- 体系结构相关的代码,例如arm, x86等等。
arch//mach- ---- 具体的machine/board相关的代码。
arch//include/asm ---- 体系结构相关的头文件。
arch//boot/dts ---- 设备树(Device Tree)文件。
init/ ---- Linux系统启动初始化相关的代码。
block/ ---- 提供块设备的层次。
sound/ ---- 音频相关的驱动及子系统,可以看作“音频子系统”。
drivers/ ---- 设备驱动(在Linux kernel 3.10中,设备驱动占了49.4的代码量)。
lib/ ---- 实现需要在内核中使用的库函数,例如CRC、FIFO、list、MD5等。
crypto/ ----- 加密、解密相关的库函数。
security/ ---- 提供安全特性(SELinux)。
virt/ ---- 提供虚拟机技术(KVM等)的支持。
usr/ ---- 用于生成initramfs的代码。
firmware/ ---- 保存用于驱动第三方设备的固件。
samples/ ---- 一些示例代码。
tools/ ---- 一些常用工具,如性能剖析、自测试等。
Kconfig, Kbuild, Makefile, scripts/ ---- 用于内核编译的配置文件、脚本等。
COPYING ---- 版权声明。
MAINTAINERS ----维护者名单。
CREDITS ---- Linux主要的贡献者名单。
REPORTING-BUGS ---- Bug上报的指南。
Documentation, README ---- 帮助、说明文档。

관련 추천: "Linux 비디오 튜토리얼"

위 내용은 5개 주요 모듈의 Linux 커널 소스 코드 및 전반적인 커널 아키텍처 설계(자세한 그래픽 및 텍스트 설명)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제