浅析Linux下的子系统

纸上得来终觉浅,绝知此事要躬行。——陆游《冬夜读书示子聿》


        开始接触的驱动程序代码不长,而且结构体和重要函数基本在一个文件内,而后来遇见的内核自带的驱动程序就比较坑了,大部分结构体都分布在各种各样的文件中,在分析驱动代码时必须要一个一个地去找对应的结构体,跳来跳去的让人不厌其烦,后来了解到这原来是“子系统”的概念,此时不得不想,为什么要搞子系统?

        我个人的理解是因为很多驱动都要用到一样的系统调用和结构体,为了方便以及减少内核的负担,就把一些通用的结构体和系统调用函数放在几个单独的文件下,这样在驱动程序调用时就可以直接使用其头文件,为内核节省了很多空间,结合网上资料以及自己的理解,接下来深入研究一下子系统。


         内核是OS的核心,内核功能之强大让人望而生畏,而这些功能当然要用代码来实现,比如我们的各种驱动,还有虚拟内存以及网络功能,因此内核的代码也不断增加。内核也因此把不同的功能分成不同的子系统,将各种功能集合在一起,这样不但可以提高工作效率,还能提供动态加载模块的方式,为动态修改内核功能提供了灵活性。


Linux内核主要由五个子系统组成:进程调度内存管理虚拟文件系统网络接口,进程间通信。


1.进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级进程调度算法选择新的进程。


2.内存管理(MM)允许多个进程安全的共享主内存区域。Linux 的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。


3.虚拟文件系统(Virtual File System,VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。


4.网络接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。


5.进程间通讯(IPC) 支持进程间各种通信机制。


         现在操作系统几乎都提供了具体硬件无关的设备驱动接口,屏蔽了具体设备的操作细节,用户通过操作系统提供的接口就可以访问设备,而具体设备的操作细节由设备驱动完成,驱动程序开发人员只需要向操作系统提供相应接口即可。linux内核对设备按照主设备号和从设备号的方法访问,可以很好管理设备。


         现在分析下用户程序从外部设备请求数据的流程:用户进程访问外部设备是通过设备无关软件进行的,设备无关软件是内核中的各种软件抽象层,当用户向外部设备发起数据请求时,通过设备无关软件会调用设备的相应驱动程序,驱动程序通过总线或者寄存器访问外部硬件设备,发起请求,驱动程序会在初始化的时候向系统的中断向量表注册一个中断处理程序,外部硬件有请求返回的时候会发出中断信号,内核会调用响应的中断处理程序,中断处理程序从硬件的寄存器读取返回的数据,然后转交给内核中的设备服务程序,由设备服务程序把数据提交给设备无关的软件,最终到达用户进程。

          在Linux中,输入子系统是由输入子系统设备驱动层、输入子系统核心层(Input Core)和输入子系统事件处理层(Event Handler)组成。其中设备驱动层提供对硬件各寄存器的读写访问和将底层硬件对用户输入访问的响应转换为标准的输入事件,再通过核心层提交给事件处理层;而核心层对下提供了设备驱动层的编程接口,对上又提供了事件处理层的编程接口;而事件处理层就为我们用户空间的应用程序提供了统一访问设备的接口和驱动层提交来的事件处理。所以这使得我们输入设备的驱动部分不在用关心对设备文件的操作,而是要关心对各硬件寄存器的操作和提交的输入事件。

          输入子系统主要在input.h中,而LCD的子系统是framebuff子系统,其他的鼠标、触摸屏等都是基于输入子系统。


          子系统的概念就说到这里,因为对于它的应用我们只需要加个头文件就行了,其具体的细节我们也不必深究。

   

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值