第三章 Linux内核及内核编程

3.1 Linux内核的发展和演变

3.2 Linux2.6之后的内核特点

1. 新的调度器

Linux 2.6 以后版本的Linux 内核使用了新的进程调度算法,它在高负载的情况下有极其出色的性能,并且当有很多处理器时也可以很好地扩展。

2. 内核抢占

从linux2.6开始,一个内核任务可以被抢占,从而提高系统的实时性。

3.改进的线程模型

4.虚拟内存的变化

5.文件系统

6音频

高级Linux 音频体系结构(Advanced Linux Sound Architecture,ALSA)取代了缺陷很多旧的OSS(Open Sound System)。ALSA 支持USB 音频和MIDI 设备,并支持全双工重放等功能。

7.总线、设备、驱动模型

总线是三者联系起来的基础,通过一种总线类型,将设备和驱动联系起来。总线类型中的match() 函数用来匹配设备和驱动,当匹配操作完成之后就会执行驱动程序中的probe() 函数。

8.电源管理

支持高级配置和电源接口(Advanced Configuration and Power Interface,ACPI),用于调整CPU 在不同的负载下工作于不同的时钟频率以降低功耗。

9.联网和IPSec

10.用户界面层

11.linux3.0后ARM架构的变更

添加了设备数

此外,ARM Linux 的代码在时钟、DMA、pinmux、计时器刻度等诸多方面都进行了优化和调整,也删除了arch/arm/mach-xxx/include/mach 头文件目录,以至于Linux 3.7 以后的内核可以支持多平台,即用同一份内核镜像运行于多家SoC 公司的多个芯片,实现“一个Linux 可适用于所有的ARM 系统”

3.3 内核的组成

3.3.1 内核源代码的目录结构

arch:包含和硬件体系结构相关的代码,每种平台占用一个目录。

block:块设备驱动程序i/o调度

crypto:常用加密和散列算法

documenttation:内核各部分的解释

driver:设备驱动

fs:文件系统

include:头文件

init:内核初始化代码

ipc:进程间通信

kernel: 内核 的核心

lib:库文件

mm:内存管理代码

net:网络相关代码

script:用于配置内核的脚本文件

security:主要是SElinux模块

sound:音频设备驱动

usr:实现用于打包和压缩的cpio等

3.3.2 linux内核的组成部分

内核主要分为:

进程调度(SCHED):进程调度控制系统中的多个进程对CPU 的访问,使得多个进程能在CPU 中“微观串行,宏观并行”地执行。

内存管理(MM):内存管理的主要作用是控制多个进程安全地共享主内存区域。

虚拟文件系统(VFS):Linux 虚拟文件系统隐藏了各种硬件的具体细节,为所有设备提供了统一的接口。而且,它独立于各个具体的文件系统,是对各种文件系统的一个抽象。

网络接口(NET):网络接口提供了对各种网络标准的存取和各种网络硬件的支持。

进程间通信(IPC):进程间通信支持进程之间的通信,Linux 支持进程间的多种通信机制,包含信号量、共享内存、消息队列、管道、UNIX 域套接字等,这些机制可协助多个进程、多资源的互斥访问、进程间的同步和消息传递。

第三章 Linux内核及内核编程_第1张图片

3.3.3 用户空间和内核空间

内核空间和用户空间这两个名词用来区分程序执行的两种不同状态,它们使用不同的地址空间。Linux 只能通过系统调用和硬件中断完成从用户空间到内核空间的控制转移。


3.4 内核的编译与加载

3.4.1 内核的编译

3.4.2 Kconfig和Makefile

在内核中添加程序的步骤:

1)将程序源代码添加到内核源代码的相应目录中。

2)在目录的Kconfig文件中添加关于新源代码对应项目的编译配置选择项。

3)在目录中的Makefile文件中增加对新源代码的编译条目

3.4.3 Linux内核的引导

第三章 Linux内核及内核编程_第2张图片

3.5 Linxu下的C编程特点

3.5.1 Linux编码风格

Linux有其独有的编码风格

windows编码风格倾向于用大小写区分各单词,Linux编码风格倾向于用下划线。

linux代码缩进使用TAB

linux中“{“”}”的使用原则为:

1)对于结构体

前大括号不另起一行

2)循环只有一行,不加大括号

3)if...else套接中,else不另起一行

4)对于函数另起一行

即,函数另起一行,其他不。


在swithc/case语句方面,switch和case对齐。


scripts/checkpatch.pl提供了一个检查代码风格的脚本。


3.5.3 GUN C与ANSI C

...

你可能感兴趣的:(学习笔记)