探究linux内核,超详细解析子系统_第1页
探究linux内核,超详细解析子系统_第2页
探究linux内核,超详细解析子系统_第3页
探究linux内核,超详细解析子系统_第4页
探究linux内核,超详细解析子系统_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

探究li超详细解析子系统Perf已经写过一篇《嵌入式li的五个子系统,概括性比较强,也比较简略,现在对其进行补充说明。仅留此笔记,待日后查看及补充!Li的子系统内核是操作系统的核心。Li提供很多基本功能,如虚拟内存、多任务、共享库、需求加载、共享写时拷贝(Copy-O能等。增加各种不同功能导致内核代码不断增加。Li把不同功能分成不同的子系统的方法通过一种整体的结构把各种功能集合在一起,提高了工作效率。同时还提供动态加载模块的方式,为动态修改内核功能提供了灵活性。系统调用接口用户程序通过软件中断后,调用系统内核提供的功能,这个在用户空间和内核提供的服务之间的接口称为系统调用。系统调用是Li提供的,用户空间无法直接使用系统调用。在用户进程使用系统调用必须跨越应用程序和内核的界限。Li向用户提供了统一的系统调用接口,但是在不同处理器上系统调用的方法各不相同。Li提供了大量的系统调用,现在从系统调用的基本原理出发探究Li调用的方法。这是在一个用户进程中通过GNU进行的系统调用示意图,系统调用通过同一个入口点传入内核。以i3系结构为例,约定使用EA寄存器标记系统调用。当加载了系统库调用的索引和参数时就会调用0x80软件中断,它将执行syste函数按照EAX寄存器内容的标示处理所有的系统调用。经过几个单元测试,会使用EA寄存器的内容的索引查system_cl_tabl到系统调用的入口然后执行系统调用从系统调用返回后,最终执行systexesume_upace用户空间。li系统调用的核心是系统多路分解表。最终通过EA寄存器的系统调用标识和索引值从对应的系统调用表中查出对应系统调用的入口地址,然后执行系统调用。li调用并不单层的调用关系,有的系统调用会由内核进行多次分解,例如soc,所有soc的系统调用都与_NR_soc在一起通过另外一个适当的参数获得适当的调用。进程管理子系统当用户使用系统提供的库函数进行进程编程,用户可以动态地创建进程,进程之间还有等待,互斥等操作,这些操作都是由li来实现的。li通过进程管理子系统实现了进程有关的操作,在li上,所有的计算工作都是通过进程表现的,进程可以是短期的(执行一个命令,也可以是长期(一种网络服务li是一种动态系统,通过进程管理能够适应不断变化的计算需求。(用户角度看一个P一个数字值可以唯一标识一个进程,一个P在进程的整个生命周期中不会更改但是PD以在进程销毁后被重新使用。创建进程可以使用几种方式,可以创建一个新的进程,也可以创建当前进程的子进程。在li空间,每个进程都有一个独立的数据结构,用来保存该进程的I构也被称做进程控制(Prcss进lk管理就是对进程控制块的管理。li程是通过fo统调用产生的调用fork()的进程叫做父进程,生成的进程叫做子进程。子进程被创建的时候除了进程I外其它数据结构与父进程完全一致。在fo用创建内存之后,子进程马上被加入内核的进程试列,后用ex用把序代码加入到子进程的地址空间,之后子进程就开始执行自己的代码。在一个系统上可以有多个进程,但是一般情况下只有一个CP在同一个时刻只能有一个进程在工作即使有多个CP都在CP上工作,这就是进程管理子系统的工作。liux核设计了存放进程队列的结构,在一个系统上会有若干队列,分别存放不同状态的进程。一个进程可以有若干状态,具体是由操作系统来定义的,但是至少包含运行态、就绪态和等待对控制。当一个用户进程被加载后,会进入就绪态,被加入到就绪态队列CP时间被轮转到就绪态队列后切换到进程的代码,进程被执行,当进程的时间片到了以后被换出。如果进程发生I作也会被提前被换出并且存放到等待队列,当I求返回后,进程又被放入就绪队列。li对进程队列的管理设计了若干不同的方法,主要的目的是提高进程调试的稳定性。内核管理子系统内存是计算机的重要资源,也是内核的的重要部分。使用虚拟内存技术的计算机,内存管理的硬件按照分页方式管理内存。分页方式是把计算机系统的物理内存按照相同大小等分,每个内存分片称作内存页,通常内存页大小是4Liux核的内存管理子系统管理虚拟内存与物理内存之间的映射关系,以及系统可用内存空间。内存管理要管理的不仅是4K缓冲区。Li了对4K缓冲区的抽象,例如sl配器。这种内存管理模式使用4K缓冲区为基数然后从中分配结构并跟踪内存页使用情况比如哪些内存页是满的哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动态调整内存使用。在支持多用户的系统上,由于内存占用的增大,容易出现物理内存被消耗尽的情况。为了解决物理内存被耗尽的问题,内存管理子系统规定页面可以移出内存并放入磁盘中,这个过程称为交换。内存管理的源代码可以在./liux/mm找到虚拟文件系统在不同格式的文件分区上,程序都可以正确地读写文件,并且结果是一样的。有时在使用linux系统的时候发现,可以在不同类型的文件分区内直接复制文件,对应用程序来说,并不知道文件系统的类型,甚至不知道文件的类型,这就是虚拟文件系统在背后做的工作。虚拟文件系统屏蔽了不同文件系统间的差异,向用户提供了统一的接口。虚拟文件系统,即VVirtualistem内核中的一个软件抽象层。它通过一些数据结构及其方法向实际的文件系统如e供接口机制。通过使用同一套文件I统调用即可对Li任意文件进行操作而无需考虑其所在的具体文件系统格式;更进一步,文件操作可以在不同文件系统之间进行。在li一当做文件进行处理,而且字符设备、块设备、套接字等都可以被当做文件进行处理。这些文件虽然类型不同,但是却使用同一种操作方法这也是UNIX/本哲学之一。虚拟文件系统简称VF实现“一切都是文件”特性的关键,是Li的一个软件层,向用户空间的程序提供文件系统接口;同时提供了内核中的一个抽象功能,允许不同类型的文件系统存在VF可以被理解为一种抽象的接口标准系统中所有的文件系统不仅依靠VF共存也依靠VFS协同工作。为了能够支持不同的文件系统,VF定义了所有文件系统都支持的、最基本的一个概念上的接口和数据结构,在实现一个具体的文件系统的时候,需要向VF提供符合VFS标准的接口和数据结构,不同的文件系统可能在实体概念上有差别,但是使用VF接口时需要和VF定义的概念保持一致,只有这样,才能实现对用户的文件系统无关性。VFS隐藏了具体文件系统的操作细节所以在VF这一层以及内核其他部分看来,所有的文件系统都是相同的。对文件系统访问的系统调用通过VF软件层处理,VFS根据访问的请求调用不同的文件系统驱动的函数处理用户的请求。文件系统的代码在访问物理设备的时候,需要使用物理设备驱动访问真正的硬件。网络堆栈编写网络应用用socTCP前面介绍的内核子系统相似soc的函数也是通过内核的子系统完成的,担当这部分任务的是内核的网络子系统,有时也把这部分代码称为“网络堆栈”。Li提供了优秀的网络处理能力和功能这与网络堆栈代码的设计思想是分不开的,Li络堆栈部分沿袭了传统的层次结构,网络数据从用户进程到达实际的网络设备需要四个层次。实际上,在每层里面还可以分为好多层次,数据传输的路径是按照层次来的,不能跨越某个层次。li子系统对网络层次采用了类似面向对象的设计思路,把需要处理的层次抽象为不同的实体,并且定义了实体之间的关系和数据处理流程。可以看出li网络子系统定义了个实体:网络协议网络协议可以理解为一种语言,用于网络中不同设备之间的通信,是一种通信的规范。套接字套接字是内核与用户程序的接口,一个套接字对应一个数据连接,并且向用户提供了文件I用户可以像操作文件一样在数据连接上收发数据,具体的协议处理由网络协议部分处理。套接字是用户使用网络的接口。设备接口设备接口是网络子系统中软件和硬件的接口,用户的数据最终是需要通过网络硬件设备发送和接收的,网络设备千差万别,设备驱动也不尽相同,通过设备接口屏蔽了具体设备驱动的差异。网络缓冲区(sk_系除了物理设备对传输数据的限(例如MM网络受到干扰、丢包、重传等,都会造成数据的不稳定,网络缓冲区通过对网络数据的重新整理,使业务处理的数据包是完整的。网络缓冲区是内存中的一块缓冲区,是网络系统与内存管理的接口。设备驱动随着现代计算机外部设备的不断增加,起来越多的设备被开发出来,计算机总线的发展也很迅速,操作系统的功能也在不断提升,系统软件越来越复杂,对于外部设备的访问已经不能像DO年代那样直接访问设备的硬件了,几乎所有的设备都需要设备驱动程序。现代操作系统几乎都提供了具体硬件无关的设备驱动接口,这样的好处是屏蔽了具体设备的操作细节,用户通过操作系统提供的接口就可以访问设备,而具体设备的操作细节由设备驱动完成,驱动程序开发人员只需要向操作系统提供相应接口即可。与其他的操作系统对设备进行复杂的分类不同,liux核把设备分成一了种不同的数据读写方式。块设备块设备的概念是一次I作可以操作多个字节的数据,数据读写有缓冲,当读写缓冲满以后才会传送数据,比如硬盘可以一次读取一个扇区的数据,同时,块设备支持随机读写操作,可以从指定的位置读写数据;字符设备字符设备的访问方式是线性的,并且可以按照字节的方式访问,比如串口设备,可以按照字符读写数据,但是只能按照顺序操作,不能指定某个地址访问;网络设备网络设备与前面的两种方式相比,比较特殊,内核专门把这类驱动单独划分出来,网络设备可以通过套接口读写数据。Li对设备按照主设备号和从设备号的方法访问,主设备号描述控制设备的驱动程序,从设备号区分同一个驱动程序的不同设备。也就是说,主设备号和设备驱动程序对应,代表某一类型的设备,从设备号和具体设备对应,代表用I号Li了mkn令创建设备驱动程序的描述文件。Li这种主从设备号的分类方法可以很好的管理设备。上图为用户程序从外部设备请求数据的流程,可以看出,用户进程访问外部设备是通过设备无关软件进行的,设备无关软件是内核中的各种软件抽象层如V通过设备无关软件会调用设备的相应驱动程序,驱动程序通过总线或者寄存器访问外部硬件设备,发起请求,驱动程序会在初始化的时候向系统的中断向量表注册一个中断处理程序,外部硬件有请求返回的时候会发出中断信号,内核会调用响应的中断处理程序,中断处理程序从硬件的寄存器读取返回的数据,然后转交给内核中的设备服务程序,由设备服务程序把数据交给设备无关的软件,最终到达用户进程。li备驱动涉及其他子系统,如内存管理、中断管理、硬件寄存器和总线访问等,此外,大多数的驱动程序为了使用方便被设计成模块,还需要设计到内核模块的处理。驱动的编写和调试是一个复杂的事情,驱动的代码占用了li代码量的一半以上。依赖体系结构的代码Li支持众多体系结构,内核把与设备无关的代码放在ar录,对应的头文件放在include-<&下。这样的划分代码结构清晰,同时提高了代码的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论