js css html

【Linux】内核简介

2023-04-24  本文已影响0人  熊本极客

1.Linux 的体系结构

User Space 是用户空间即应用程序执行的地方。Kernel Space 是内核空间,分为 3 层:① 最上层实系统调用接口,即内核向用户提供服务的接口,例如 io read 和 write。应用程序通过软件中断后,调用系统内核提供的功能。② 内核程序。③ 最下层是体系结构的代码,通常称为 BSP。

image.png

Linux 内核简介
内核是操作系统最基本的部分,提供了安全访问计算机硬件的基本能力。这种访问是有限的,并且内核决定应用程序在什么时候对某部分硬件操作多长时间。内核负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性

问题 1:内核的实质是什么?
答:内核的实质也是一种应用程序,只不过它是直接操作硬件的。内核直接面对硬件,调用硬件接口即硬件厂商提供的指令集。内核是直接面向硬件的,故可用资源权限很大,但内核是工作在有限地址空间内的,例如 Linux 的32位系统在线性地址空间中,内核只认为自己有 1G 的空间,剩下的 3G 给用户态的应用程序。

说明:编写内核级应用程序的时候,为了避免过于底层,因此内核可以动态编译后,重启加载该程序,例如驱动程序通过动态编译生成可执行文件,然后系统重启后加载该驱动就可以使用相应的设备。

问题 2:从动态角度如何分析 Linux 主机的运行状态
答:用户态的应用程序逻辑上是运行在内核,但实际是直接工作在硬件上的。简单来说,任意应用程序数据都在内存中,数据处理都是在 CPU,只是应用程序不能随意使用这些硬件资源,需要接受内核的管理。当用户态的应用程序需要访问硬件资源时,首先通过系统调用接口向 CPU 发起特权请求,一旦 CPU 收到特权请求就会唤醒内核,从而执行内核中的某段代码,然后将结果返回给应用程序。接着内核代码退出,内核程序暂停。

问题 3:CPU 占用与内核的关系
答:内核将 CPU 虚拟化提供给进程,使得内存中每一个进程都以为直接是独占 CPU。内核将 CPU 切成时间片,随着时间流逝完成了在进程之间分配计算能力,即内核把 CPU 以时间的方式提供了计算能力。

2.内核的整体架构与子系统

image.png

2.1 Process Scheduler 进程管理

进程调度是 Linux 内核中最重要的子系统,主要提供对 CPU 的访问控制。进程调度子系统的 4 个模块,如下图所示。

image.png

2.2 Memory Manager 内存管理

内存管理也是 Linux 内核中最重要的子系统,主要提供对内存资源的访问控制。Linux 系统会在硬件物理内存和进程所使用的内存(虚拟内存)之间建立一种映射关系。这种映射是以进程为单位,不同的进程可以使用相同的虚拟内存,而这些相同的虚拟内存,可以映射到不同的物理内存上。内存管理子系统包括 3 个子模块,如下图所示。

image.png

2.3 VFS 虚拟文件系统

虚拟文件系统 VFS 就是管理各种各样的文件系统,屏蔽其差异,以统一的方式为用户程序提供访问文件的。VFS 子系统包括 6 个子模块,如下图所示。

image.png

2.4 Network 网络系统

网络子系统在 Linux 内核中主要负责管理各种网络设备,并实现各种网络协议栈,最终实现通过网络连接其它系统的功能,包括 5 个子模块,如下图所示。

image.png

3.内核源代码的目录结构

Linux 内核源代码包括三个主要部分。

include/ ---- 内核头文件,需要提供给外部模块(例如用户空间代码)使用。

kernel/ ---- Linux 内核的核心代码,包含了 2.1 小节所描述的进程调度子系统,以及和进程调度相关的模块

mm/ ---- 内存管理子系统 2.2 小节

fs/ ---- VFS 子系统 2.3 小节。

net/ ---- 不包括网络设备驱动的网络子系统 2.4 小节)。

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 ---- 帮助、说明文档。
上一篇 下一篇

猜你喜欢

热点阅读