感谢支持
我们一直在努力

Linux2.6驱动程序《三》 Linux内核及内核编程

一、Linux2.6相对于Linux2.4有相当大的改进,主要体现在如下几个方面:


<1>新的调度器:使用了新的进程调度算法,它在高负载的情况下执行得很好,并且有很多处理器时可以进行很好的扩展


<2>内核抢占:内核任务可以被抢占,从而提高系统的实时性


<3>改进的线程模型:线程操作速度提高,可以处理任意数目的线程


<4>虚拟内存的变化:融合了r-map(反向映射)技术


<5>文件系统:对扩展属性和POSIX标准访问控制的支持


<6>音频:新的音频体系结构ALSA替代旧的OSS,支持USB音频和MIDI设备,并支持全双工


<7>总线、电源管理、网络(IPv6)、用户界面等


在设备驱动程序方面主要变化有:


<1>内核模块从.o 变成.ko


<2>驱动模块编译方式


<3>模块使用计数


<4>模块加载和卸载函数的定义等方面


二、内核目录介绍:


arch:包含和硬件体系结构相关的代码


block:块设备驱动程序I/O调度


crypto:常用加密和散列算法


Documentation:内核各部分的通用解释和注释


drivers:设备驱动程序,每个不同的驱动占用一个子目录,如char、block、net、mtd、i2c等


fs:支持的各种文件系统


include:头文件,与系统相关的头文件被放置在include/linux子目录下


init:内核初始化代码


ipc:进程间通信的代码


kernel:内核的最核心部分,包括进程调度、定时器等,与平台相关的放在 arch/*/kernel目录下


lib:库文件代码


mm:内存管理代码,与平台相关的一部分代码放在 arch/*/mm目录下


net:网络相关代码,实现了各种常见的网络协议


scripts:包含用于配置内核的脚本文件


security:主要包含SELinux模块


sound:ALSA、OSS音频设备驱动核心代码和常用设备驱动


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


三、Linux内核的组成部分


Linux内核主要由进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS)、网络接口(NET) 和进程间通信IPC等5个子系统组成


1、进程调度:进程调度处于系统的中心位置,内核中其他子系统都依赖它,Linux进程中如果所请求的资源不能得到满足,驱动一般会调度其他进程执行,并驱动对应的进程进入睡眠状态。睡眠分为可打断睡眠和不可打算睡眠,区别在于可打断睡眠在收到信号后会醒来


进程状态转换图如下:



设备驱动中,如果需要几个并发执行的任务,可以启动内核线程,该函数为:


int kernel_thread(int (*fd)(void *), void *arg,unsigned long flags);

2、内存管理


内存管理主要作用是控制多个进程安全地共享内存区域,当CPU提供内存管理单元(MMU)时,Linux内存管理完成为每个进程进行虚拟内存到屋里内存的转换,Linux2.6支持无MMU CPU


Linux的每个进程享有4GB的内存空间,0~3GB属于用户空间,3~4GB为内核空间


3、虚拟文件系统(VFS)


隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,而且,独立于各个具体的文件系统,使用超级块super block粗放文件系统相关信息,使用索引节点inode存放文件的物理信息,使用目录项 dentry 存放文件的逻辑信息



4、网络接口


网络接口可分为网络协议和网络驱动程序,网络协议部分负责实现每一种可能的网络传输协议,网络设备驱动程序负责与硬件设备进行通信


5、进程通信


<1>进程调度与内存管理之间的关系:这两个子系统相互依赖,创建进程第一步就是将程序和数据装入内存


<2>进程通信与内存管理的关系:内存管理支持共享内存机制


<3>VFS与网络接口的关系:虚拟文件系统利用网络接口支持NFS,利用内存管理支持RAMDISK设备


<4>内存管理与VFS之间的关系:内存管理利用VFS支持交换,交换进程定期由调度程序调度

赞(0) 打赏
转载请注明出处:服务器评测 » Linux2.6驱动程序《三》 Linux内核及内核编程
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏