版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章Linux内核主要内容
Linux内核的结构进程和线程的概念、进程调度和进程通信文件系统的结构和管理内存管理设备驱动及中断处理5.1Linux内核概述Linux系统大致可分为三层:①靠近硬件的底层是内核,即Linux操作系统常驻内存部分。②中间层是内核之外的shell层,即操作系统的系统程序部分。③最高层是应用层,即用户程序部分Linux系统结构一般来说,可以将操作系统划分为内核和系统程序两部分。内核是Linux操作系统的主要部分,它实现进程管理、内存管理、文件系统、设备驱动和网络系统等功能,从而为核外的所有程序提供运行环境。系统程序及其他所有程序都在内核之上运行内核之外的所有程序必须通过系统调用才能进入操作系统的内核。Linux系统内核结构5.2进程管理5.2.1进程和线程的概念1.进程及其状态进程的引入:程序这个静态概念已不能如实反映“并发、动态及互相制约”等新特征进程就是程序的一次执行过程进程三种基本状态:运行态、就绪态和封锁态(或等待态)进程的状态可依据一定的条件和原因而变化2.Linux进程状态在Linux系统中,进程有下述5种状态:①运行态(TASK_RUNNING)②可中断等待态(TASK_INTERRUPTIBLE)③不可中断等待态(TASK_UNINTERRUPTIBLE)④停止态(TASK_STOPPED)⑤僵死态(TASK_ZOMBIE)Linux进程状态的变化3.进程的模式和类型Linux系统中,进程的执行模式划分为用户模式和内核模式按照进程的功能和运行的程序来分,进程划分为两大类:系统进程:只运行在内核模式用户进程:可运行在用户模式和内核模式4.Linux线程线程是和进程紧密相关的概念线程可以看成是进程中指令的不同执行路线Linux系统中,线程有三个组成部分:一段可执行的程序专用的系统堆栈空间私有的“线程控制块”线程没有自己的存储空间5.2.2进程的结构1.task_struct结构相当于进程控制块task_struct结构包含下列信息::
①进程状态②调度信息③标志符④内部进程通信
⑤链接信息⑥时间和计时器⑦文件系统⑧虚拟内存
⑨处理器信息2.进程系统堆栈每个进程都有一个系统堆栈,保存中断现场信息和进程进入内核模式后执行子程序(函数)嵌套调用的返回现场信息。5.2.3对进程的操作1.创建进程除初始化进程外,其他进程都是用fork()和clone()创建调用fork()和clone()的进程是父进程,被生成的进程是子进程。fork()是全部复制,clone()可以将资源有选择地复制给子进程创建新进程时,系统从物理内存中为它分配一个task_struct数据结构和进程系统堆栈,新的task_struct结构加入到进程向量中,并为该进程指定唯一的一个PID号,然后进行基本资源复制2.等待进程父进程创建子进程往往让子进程替自己完成某项工作。父进程可用系统调用wait3()等待它的任一个子进程终止,也可以用系统调用wait4()等待某个特定的子进程终止。3.终止进程系统调用exit()实现算法如下:①撤销所有的信号量。②释放所有的资源,包括存储空间、已打开的文件、工作目录、信号处理表等。③置进程状态为“终止态(TASK_ZOMBIE)”。④向它的父进程发送子进程终止信号。⑤执行进程调度。4.更换进程映像改变子进程的映像,使其执行另外的特定程序由系统调用execve()实现,它用一个可执行文件的副本来覆盖该进程的内存空间。基本算法如下:①验证文件的可执行性,即用户有权执行它。②读文件头,检查它是一个可装入模块。③释放原有的内存空间。④按照可执行文件的要求分配新的内存空间,并装入内存。5.2.4进程调度任何进程要占有CPU,真正处于执行状态,就必须经由进程调度操作系统的进程调度机制需要兼顾如下三种不同类型的进程需要①交互进程②批处理进程③实时进程进程调度机制主要涉及调度方式、调度时机、调度策略和调度算法1.调度方式:抢占式优先级2.调度策略:针对不同类别的进程提供三种不同的调度策略SCHED_FIFO适合于实时进程,它们对时间性要求比较强SCHED_RR适合于每次运行需要较长时间的实时进程SCHED_OTHER是传统的UNIX调度策略,适合于交互式的分时进程3.调度时机
核心进行进程调度的时机有5种情况(见教材)4.调度算法:应该比较简单,以便减少频繁调度时的系统开销5.2.5shell基本工作原理
①读取用户从键盘输入的命令行
②解析命令
③终端进程通过系统调用fork()创建子进程。
④终端进程自身调用系统调用wait4()等待子进程终止
⑤若命令末尾有“&”(后台命令符),则终端进程无须执行系统调用wait4(),而是立即显示“&”,让用户输入下一条命令,返回步骤①。若命令末尾没有“&”,则终端进程需要一直等待,直到子进程(运行命令的进程)完成工作并终止,此时子进程会向父进程(终端进程)报告。
5.3文件系统Linux支持多种不同的文件系统,如FAT,ext,ext2,ext3,ext4,Reiser,JFS,XFS等。目前,Linux使用的主要文件系统是ext4。
ext2,被称作Linux标准文件系统,是一种十分优秀的文件系统ext3是ext2的升级版本,加入了记录数据日志的功能ext4是ext3文件系统的后继版本,是扩展日志式文件系统当Linux引进ext文件系统时,有一个重大的改进,就是引入了虚拟文件系统VFS(VirtualFileSystem)5.3.1ext2文件系统ext2文件系统支持标准UNIX文件类型ext2文件系统可以管理特别大的分区ext2文件系统支持长文件名ext2文件系统为超级用户保留了一些数据块,约为5%1.ext2文件系统的物理结构2.数据块组的构造每个块组重复保存着一些有关整个文件系统的关键信息、真正的文件和目录的数据块。每个块组中包含超级块、数据块组描述结构、数据块位示图、索引节点位示图、索引节点表和数据块。(1)超级块(Superblock)包含文件系统的大小和形式的基本信息。(2)数据块组描述结构(BlockGroupDescriptor):每个数据块组都有一个描述自身的数据结构3.索引节点索引节点(Inode)又称I节点,每个文件都有唯一一个索引节点。ext2文件系统的索引节点起着文件控制块的作用,利用这种数据结构可对文件进行控制和管理。索引节点有两种形式:盘索引节点(如ext2_inode)和内存索引节点(如inode)盘索引节点和内存索引节点的基本内容是相同的。当然,二者也存在显著差别。4.多重索引结构单一索引表结构无法满足灵活性和节省内存的要求,引入多重索引结构直接指针指向的盘块放有该文件的数据一级间接指针所指向的盘块(间接块)放有直接块的块号表二级间接指针所指向的盘块放有一级间接块号表三级间接指针所指向的盘块放有二级间接块号表如果盘块的容量为1KB,每个盘块号用4B表示,那么该块号表中可以存放256个盘块号对于一般的小型文件来说,其大小不超过12KB,则可以利用前12个直接指针立即得到存放该文件的盘块号。对于大于12KB且小于268KB的中型文件来说,其超出12KB的部分要采用一级间接索引形式存放。对于大于268KB且小于(12+256+2562)=65804KB的大型文件来说,其超出268KB的部分要用二级间接索引形式。以此类推,对于巨型文件要采用三级间接索引形式,最大的文件可以是16GB。5.ext2中的目录项包含如下信息:①索引节点号:相应文件在数据块组中的索引节点的号码②目录项长度:记载该目录项占多少字节③名字长度:记载相应文件名的字节数④文件类型:用一个数字表示文件的类型,如1表示普通文件,2表示目录⑤文件名字:文件名(不包括路径部分)的最大长度为255个字符6.位示图利用一串二进制位的值来反映该块组中数据块的分配情况,也称位向量(BitVector)法。如果数据块是空闲的,则其对应位是0;如果数据块已经分配出去,则对应位是1。例如,设下列数据块是空闲的:2,3,4,5,8,9,10,11,12,13,17,18,25,26,27,…,则块位示图表示为
100001100000011100111111000…5.3.2虚拟文件系统VFSVFS将不同文件系统的实现细节隐藏起来,因而从外部看上去,所有的文件系统都是一样的。1.VFS系统结构2.VFS超级块每个安装的文件系统都有一个VFS超级块,其中包含以下主要信息:①设备标志符②索引节点指针③数据块大小④超级块操作集⑤文件系统类型⑥文件系统的特殊信息3.VFS索引节点VFS中每个文件和目录都有一个且只有一个VFS索引节点。VFS索引节点仅在系统需要时才保存在系统内核的内存及VFS索引节点缓存中4.Linux文件系统的逻辑结构Linux系统中,每个进程都有两个数据结构用来描述进程与文件相关的信息:fs_struct结构files_struct结构fs_struct结构:两个指向VFS索引节点的指针*root和*pwdfiles_struct结构:指针数组,fd[0]~fd[255],每个进程能够同时打开的文件最多256个。文件描述符(如0,1,2)就是fd指针数组的下标。file结构:f_mode是文件打开的模式,如“只读”、“只写”、“读写”等;f_pos是文件当前的读写位置;f_flag包含许多标志位,表示文件的一些属性;f_count表示对该文件的共享计数;f_inode指向VFS中该文件的索引节点;f_op是指向file_operations结构的指针,该结构中包含对该文件进行操作的各种例程5.文件系统的安装与拆卸系统初启时,往往只有一个文件系统安装完成,即根文件系统其他的文件系统可以根据需要,作为子系统动态地安装到主系统中,构成一个有完整目录层次结构的、容量更大的文件系统。这种安装可以高达几级:若干子文件系统可以并联安装到主文件系统上,也可以一个接一个地串联安装到主文件系统上。已安装的子文件系统也可从整个文件系统上卸载,恢复安装前的独立状态文件系统的动态安装6.VFS索引节点缓存和目录缓存为了加快对系统中所有已安装文件系统的存取,VFS提供了索引节点缓存—把当前使用的索引节点保存在高速缓存中为了能很快地从中找到所需的VFS索引节点,采用散列(Hash)方法为了加速对常用目录的存取,VFS还提供一个目录高速缓存目录缓存也采用散列表的方法进行管理VFS采用LRU算法(最近最少使用算法)来替换缓存中的目录项7.数据块缓冲区平滑和加快文件信息从内存到磁盘的传输当从盘上读数据时,如果数据已经在缓冲区,则核心就直接从中读出,而不必从盘上读取仅当所需数据不在缓冲区时,核心才把数据从盘上读到缓冲区,然后再从缓冲区读出核心尽量让数据在缓冲区停留较长时间,以减少磁盘I/O的次数。对数据块缓冲区的管理也采用LRU算法5.4内存管理对内存的有效管理仍是现代操作系统十分重要的问题。Linux系统采用虚拟内存管理机制,使用交换和请求分页存储管理技术。5.4.1请求分页机制1.分页概念①逻辑空间分页。将一个进程的逻辑地址空间划分成若干大小相等的部分,每一部分称为页面或页。每页都有一个编号,称为页号,页号从0开始依次编排,如0,1,2,…。②内存空间分页。把内存也划分成与页面相同大小的若干存储块,称为内存块或内存页面。同样,它们也要编号,内存块号从0开始依次排列,如0#块,1#块,2#块,…。页面和内存块的大小是由硬件决定的,它一般选择为2的若干次幂。不同机器中页面大小是有区别的。在x86平台上,Linux系统的页面大小为4KB。③逻辑地址表示它由两部分组成:前一部分表示该地址所在页面的页号p;后一部分表示页内位移d,即页内地址。图中所示两部分地址长度为32位。其中,0~11位为页内位移,即每页的大小为4KB;12~31位为页号,表示地址空间中最多可容1M个页面④内存分配原则。在分页存储情况下,系统以内存块为单位把内存分给作业或进程,并且一个进程的若干页可分别装入物理上不相邻的内存块中----离散分配技术⑤页表。为了找到每个页面在内存中对应的物理块,系统又为每个进程设立了一张页面映像表,简称页表。记载相应页面在内存中对应的物理块号、页表项有效标志,以及相应的内存块的访问控制属性页表的作用是实现从页号到物理块号的地址映射。2.请求分页的基本思想在简单分页存储技术基础上发展起来,请求分页提供虚拟存储器基本思想是:部分装入、对换在页表项中增加一个状态位,用Y表示该页对应的内存块可以访问;用N表示该页未装入内存如果地址转换机构遇到一个具有N状态的页表项,便产生一个缺页中断缺页中断操作系统必须处理请求分页存储管理示意图3.Linux的多级页表Linux系统中页面的大小为4KB,因此进程虚存空间要划分为220个页面。如果直接用页表描述这种映射关系,那么每个进程的页表就要有220个表项。很显然,用大量的内存资源来存放页表的办法是不可取的。为此,Linux系统采用三级页表方式PGD表示页面目录,PMD表示中间目录,PT表示页表三级页表地址映射示意图4.内存页的分配与释放Linux系统采用两种方法来管理内存页:位图和链表。①位图可以记录内存单元的使用情况。用一个二进制位(bit)记录一个内存页的使用情况:1表示空闲;0表示已分配。②链表可以记录已分配的和空闲的内存单元。采用双向链表结构将内存单元链接起来,可以加速空闲内存的查找或链表的处理。Linux系统的物理内存页分配采用链表和位图相结合的方法空闲内存的组织示意图分配时:如果系统有足够的空闲内存页,首先在free_area数组中搜索满足数量要求的最小页组的信息,然后在对应的list双向链表中查找空闲页组;如果在free_area数组的某个元素对应的链表中没有满足所需数量的空闲内存页组,则继续查找下一个元素对应的链表。如果找到的页组不小于所要求的页数的2倍,则把该页组等分为两部分:一部分返回调用者;剩余部分作为空闲块链入前一个空闲页组队列中。释放时:检查是否存在与它邻接的空闲页组。如果有,则把该页组与所有邻接的空闲页组合并成一个大的空闲页组,并修改有关队列。5.4.2内存交换当系统中出现内存不足时,Linux内存管理子系统就需要释放一些内存页由内核的交换守护进程kswapd完成交换守护进程所做的工作主要分为两部分:1、发现可用的内存页面已经短缺,找出若干不常用的内存页面,使它们从活跃状态变为不活跃状态,为页面换出做好准备。2、把那些已经处于不活跃状态的“脏”页面写入交换设备,使它们成为不活跃的“干净”页面继续缓冲,或者回收一些内存页,使之成为空闲的内存页。作为交换空间的交换文件实际上就是普通文件,但它们所占的磁盘空间必须是连续的,即文件中不能存在“空洞”交换分区和其他分区没有本质区别,可像建立其他分区一样建立交换分区。交换分区中不能包含任何文件系统。通常,最好将交换分区的类型设置为LinuxSwap。5.5进程通信Linux系统支持多种内部进程通信机制(IPC),最常用的方式是信号、管道和UNIX系统支持的SystemVIPC机制。5.5.1信号机制1.信号概念信号(Signal,也称软中断)机制是在软件层次上对中断机制的一种模拟与硬件中断的处理方式有不少相同之处,但二者又不同信号的设置、检测等都是由软件实现的利用信号实现进程间通信的过程2.信号分类表5-1
在x86平台上Linux内核定义的常用信号信号编号符号表示含
义信号编号符号表示含
义1SIGHUP远程用户挂断信号10SIGUSR1用户自定义信号2SIGINT输入中断信号(通常按快捷键Ctrl+C触发)11SIGSEGV越界访问内存信号3SIGQUIT输入退出信号(通常按快捷键Ctrl+\触发)12SIGUSR2用户自定义信号4SIGILL非法指令信号13SIGPIPE管道文件只有写进程,没有读进程信号5SIGTRAP遇到调试断点信号14SIGALRM定时报警信号6SIGIOTIOT指令信号15SIGTERM软件终止信号7SIGBUS总线超时信号17SIGCHLD子进程终止信号8SIGFPE浮点异常信号19SIGSTOP进程暂停运行信号9SIGKILL要求终止进程信号(不可屏蔽)20SIGPWR电源故障信号3.进程对信号可采取的处理方式①忽略信号,但不能忽略SIGKILL和SIGSTOP信号。②阻塞信号。进程可以选择对某些信号予以阻塞。③由进程处理该信号。④由系统默认处理4.对信号的检测和处理流程图中的①~⑤标出了处理流程的顺序。可以看出,信号的检测是在系统空间进行的,而对信号的处理却是在用户空间进行的。5.5.2管道机制一个管道线就是连接两个进程的一个打开文件。例如:$ls|more“|”对应管道文件;命令ls对应一个进程,它向该文件中写入信息,称为写进程;命令more对应另一个进程,它从文件中读出信息,称为读进程由系统自动处理二者间的同步、调度和缓冲管道文件允许两个进程按“先入先出(FIFO)”方式传送数据系统调用pipe()创建无名管道;mkfifo命令可创建一个命名管道管道的实现机制5.5.3SystemVIPC机制为了与其他UNIX系统保持兼容,Linux系统也支持UNIXSystemV版本中的三种进程间通信机制:消息通信共享内存信号量5.6设备管理Linux系统采用设备文件统一管理硬件设备,从而将硬件设备的特性及管理细节对用户隐藏起来,实现用户程序与设备的无关性。在Linux系统中,硬件设备分为三种:块设备字符设备网络设备5.6.1设备管理概述用户是通过文件系统与设备交互的。所有设备都作为特别文件,从而在管理上具有下列共性:①每个设备都对应文件系统中的一个索引节点,都有一个文件名。设备文件名一般由两部分构成:
主设备号:代表设备的类型
次设备号:代表同类设备中的序号②通过系统调用open()打开设备文件,通过read(),write(),ioctl()等文件操作对目标设备进行操作。③设备驱动程序是系统内核的一部分,它们必须为系统内核或者它们的子系统提供标准接口。④设备驱动程序利用一些标准的内核服务设备驱动的分层结构5.6.2设备驱动程序和内核之间的接口1.可安装模块是可以在系统运行时动态地安装和拆卸的内核模块,即经过编译但尚未连接的目标文件(后缀为.o)根据需要在不必对内核重新编译连接的条件下,将可安装模块动态插入运行中的内核,成为其中一个有机组成部分或者从内核卸载已安装的模块。通常情况下,用户利用系统提供的插入模块和移走模块工具来装卸可安装模块2.字符设备作为字符特别文件出现在用户面前,用户对字符设备的使用就和存取普通文件一样。字符设备驱动程序示意图:3.块设备与对文件的存取方式一样,其实现机制也与字符设备使用的机制相同与字符设备不一样,块设备有几种类型,如SCSI设备和IDE设备。每类块设备都在Linux系统内核中登记,并向内核提供自己的文件操作。块设备驱动程序数据结构示意图5.7中断处理和系统调用中断是CPU对系统发生的某个事件做出的一种反应,CPU暂停正在执行的程序,保留现场后,自动地转去执行相应的处理程序,处理完该事件后,再返回断点继续执行被“打断”的程序。中断可分为下列3类:①由CPU外部引起的,称为中断,如I/O中断、时钟中断等。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铁路运输物资调度主任的工作规划及执行
- 三年(2023-2025)湖南中考语文真题分类汇编:专题03 文化文学常识(解析版)
- 国家电网变电检修主管面试解析
- 介绍藕粉圆子的演讲稿
- 党课:坚守师德底线 赋能学校高质量发展
- 装备工作演讲稿标题
- 称赞张桂梅的演讲稿
- 演讲稿生命的绿色故事
- 恐龙宝贝主题曲演讲稿
- 2026年中级经济师《保险专业知识与实务》题库(含答案解析)
- 国际业务审计课件
- 电池化成工作业指导书
- 小型酒厂扩产项目商业计划书范文
- 泉州美食课件
- 2024人教版八年级英语上册单词表(附默写版)
- GB/T 311.11-2025绝缘配合第11部分:高压直流系统绝缘配合的定义、原则和规则
- 2026届广东省深圳市南山区中考数学仿真试卷含解析
- 商场团购管理办法
- 2025员工试用期合同模板范本
- 冠心病分类及护理
- 系统稳定性与安全性-洞察阐释
评论
0/150
提交评论