详解Linux内核
嵌入式工程师成长日记 2025-01-14

Linux 内核是一个开源的、类 Unix 操作系统的核心。它主要负责硬件资源管理、进程调度、内存分配、文件系统管理、设备驱动以及网络通信等诸多关键功能。

一、进程管理 进程的概念:进程是正在执行的程序的实例,它包括程序代码、数据、栈空间以及进程控制块(PCB)等。在 Linux 中,每个进程都有一个唯一的进程标识符(PID)用于标识。

进程调度调度算法 Linux内核采用了完全公平调度算法。这种算法基于红黑树数据结构,根据进程的虚拟运行时间来分配 CPU 时间片。虚拟运行时间考虑了进程的优先级和实际运行时间等因素。例如,一个高优先级的进程在相同的实际时间内,其虚拟运行时间增长相对较慢,从而能够获得更多的 CPU 时间。

调度时机 当一个进程由于等待 I/O 操作完成、时间片用完或者主动放弃 CPU(如执行了阻塞式系统调用)等情况时,内核会进行进程调度。例如,当一个进程发起了一个读取磁盘文件的系统调用,在等待磁盘数据返回的过程中,CPU 就会被调度给其他就绪进程。

进程创建与终止 创建进程:通过fork()系统调用创建新进程。fork()会复制父进程的地址空间,包括代码段、数据段和堆等。子进程和父进程几乎完全相同,只是它们有不同的 PID。在fork()之后,父子进程可以通过返回值来区分自己的身份。例,在父进程中fork()返回子进程的PID,而在子进程中fork()返回 0。 终止进程:进程可以通过exit()系统调用正常终止,也可以由于收到某些信号(如SIGKILL)而异常终止。当一个进程终止后,内核会释放该进程所占用的资源,如内存空间、打开的文件描述符等。但是如果一个进程创建了子进程,并且子进程还没有终止,那么父进程需要等待子进程结束或者使用一些机制(如wait()系统调用)来处理子进程的终止状态。

二、内存管理物理内存管理 内存分区(Zones):Linux 将物理内存划分为不同的区域,如直接内存访问(DMA)区域、普通区域和高端内存区域。DMA 区域用于支持设备的直接内存访问操作,因为某些设备(如老式的 ISA 设备)只能访问物理内存的低地址部分。普通区域是最常用的内存区域,用于存储进程的数据和代码等。高端内存区域用于处理物理内存大于虚拟地址空间所能直接映射的内存部分。 页面管理(Page Management):物理内存被划分为固定大小的页面,通常为 4KB(在某些体系结构下可能不同)。内核使用页帧(Page Frame)来描述物理内存中的页面。通过页表(Page Table)来实现虚拟地址到物理地址的映射。页表由多级组成,如在 x86 架构下的二级页表或四级页表,这种多级结构可以有效地管理大量的内存页面,并且减少页表本身占用的内存空间。 内存分配算法(Allocation Algorithms):采用伙伴系统(Buddy System)来分配内存。当需要分配内存时,伙伴系统会从合适大小的空闲内存块中分配。如果没有合适大小的内存块,它会尝试合并相邻的内存块(伙伴)来形成更大的内存块。例如,当需要分配一个 2MB 的内存块,而系统中没有直接可用的 2MB 内存块时,它会查看是否有两个相邻的 1MB 内存块可以合并成一个 2MB 内存块来满足分配需求。

虚拟内存管理 虚拟地址空间(Virtual Address Space):每个进程都有自己独立的虚拟地址空间,这个空间对于 32 位系统来说通常是 4GB(在不同的体系结构和配置下可能不同)。虚拟地址空间被划分为用户空间和内核空间。用户空间用于进程自己的代码和数据,内核空间用于内核代码和数据以及共享的系统资源。这样划分的好处是可以保护内核不受用户进程的错误操作影响,同时也使得每个进程感觉自己拥有独立的全部地址空间。 页面置换(Page Replacement):当物理内存不足时,内核需要将一些页面置换到磁盘上的交换空间(Swap Space)。Linux 采用了一些页面置换算法,如最近最少使用(LRU - Least Recently Used)的近似算法。内核会记录页面的访问情况,当需要选择页面置换时,会选择那些长时间未被访问的页面。例如,如果一个进程加载了一个很大的文件到内存中,但是之后很长时间没有访问其中的某些页面,这些页面就可能会被置换到交换空间,以腾出物理内存给其他更需要的进程。

三、文件系统文件系统类型 ext 系列(ext2、ext3、ext4):ext2 是 Linux 中比较经典的文件系统,它提供了基本的文件存储功能,如文件和目录的存储、权限管理等。ext3 在 ext2 的基础上增加了日志功能,日志可以记录文件系统的更改操作,当系统出现故障(如突然断电)时,可以通过日志来恢复文件系统的一致性。ext4 是 ext3 的进一步改进,它支持更大的文件和文件系统容量、更快的文件系统检查速度等。 其他文件系统:除了 ext 系列,Linux 还支持许多其他文件系统,如 XFS(主要用于高性能计算和企业级存储),它在处理大文件和高并发 I/O 操作方面表现出色;Btrfs(具有先进的存储管理功能,如快照、数据校验等);以及各种网络文件系统,如 NFS(Network File System)和 CIFS(Common Internet File System),用于实现不同计算机之间的文件共享。

文件系统结构 超级块(Superblock):是文件系统的核心元数据结构,它包含了文件系统的基本信息,如文件系统类型、大小、块大小、inode 数量等。超级块对于文件系统的挂载和操作非常关键,如果超级块损坏,可能会导致整个文件系统无法正常使用。 inode(索引节点):每个文件和目录在文件系统中都对应一个 inode。inode 存储了文件的元数据,如文件所有者、权限、大小、时间戳以及指向文件数据块的指针。通过 inode 可以找到文件的数据内容。例如,当访问一个文件时,首先会通过文件名在目录的 inode 中查找对应的文件 inode,然后根据文件 inode 中的指针来获取文件的数据。 数据块(Data Blocks):文件的数据内容存储在数据块中。文件系统会根据文件的大小分配相应数量的数据块来存储文件。数据块的大小通常是固定的,不同的文件系统可能有不同的数据块大小设置。

文件操作 系统调用(System Calls):内核提供了一系列文件操作的系统调用,如open()用于打开文件,它返回一个文件描述符(File Descriptor),这个文件描述符用于后续的文件操作;read()用于从文件中读取数据;write()用于向文件写入数据;lseek()用于移动文件指针,改变读写位置;close()用于关闭文件,释放文件描述符等资源。 缓存机制(Caching Mechanisms):为了提高文件操作的效率,内核采用了缓存机制。例如,页缓存(Page Cache)会缓存文件系统中的页面数据,当再次访问相同的页面时,可以直接从缓存中获取,而不需要从磁盘重新读取,大大提高了文件访问速度。

四、网络网络协议栈 链路层(Link Layer):主要负责处理物理网络接口相关的操作,如以太网帧的发送和接收。它会检查以太网帧的目的 MAC 地址是否为本机,如果是,则将帧中的数据向上传递给网络层。同时,链路层也会处理一些底层的错误检测和纠正,如 CRC 校验。 

网络层(Network Layer):实现了 IP(Internet Protocol)协议,主要功能是进行路由选择。当收到一个数据包时,网络层会根据数据包的目的 IP 地址,通过查找路由表来确定数据包的下一跳地址,然后将数据包发送到相应的下一跳。例如,在一个具有多个子网的局域网中,网络层会根据子网掩码和目的 IP 地址来判断数据包是应该发送到本地子网的其他主机还是发送到网关,以便转发到其他网络。

传输层(Transport Layer):主要包括 TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)协议。TCP 是一种面向连接的、可靠的传输协议,它通过建立连接、使用序列号和确认号来保证数据的可靠传输。例如,在进行文件传输等对数据完整性要求较高的应用场景中,通常会使用 TCP 协议。UDP 是一种无连接的、不可靠的传输协议,它的优点是开销小、传输速度快,适用于一些对实时性要求高但对数据完整性要求相对较低的应用,如实时视频流和音频流的传输。 

应用层(Application Layer):基于传输层协议,提供了各种网络应用服务的协议,如 HTTP(Hypertext Transfer Protocol)用于网页浏览、FTP(File Transfer Protocol)用于文件传输、SMTP(Simple Mail Transfer Protocol)用于电子邮件发送等。这些协议通过调用传输层提供的接口来实现网络通信功能。


声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • RF
  • 射频
  • 通信
  • 无线
下载排行榜
更多
评测报告
更多
EE直播间
更多
广告