操作系统原理--Linux篇(摘录) 本文共有9164个字,关键词: 太多设计内核代码段,特别是数据结构相关,没有进行仔细阅读,仅挑了部分浅显易懂的部分记录,还需要加强学习。正在阅读《深入理解Linux内核》,不求能看懂多少,像看小说那样打发时间就挺好。 操作系统原理(Linux篇) LInux内核主要由5个子系统组成: 进程管理 存储管理 文件管理 网络管理 进程间通信 Linux进程组成: 正文段: 存放进程要执行的代码,只读。 用户数据段: 进程直接操作的所有数据,包括进程运行处理的数据段和进程使用的堆栈。 系统数据段: 存放一个反应进程状态和运行环境的所有数据,这些数据只能由内核访问和使用,在系统数据段中包括进程控制块PCB。(PCB是一个名为task_struct的结构体,成为任务结构体,task_struct大约1000B,成员和功能归纳为9个方面) 1. 进程状态标志state和flags 2. 进程的标识,标识进程标识的成员:pid、uid、gid等 3. 进程的族亲关系,p_opptr,p_pptr,p_vsptr,p_cptr,p_osptr 4. 进程间的链接信息:Next_test,Prev_task..... 5. 进程间调度信息 6. 进程间时间信息 7. 进程的虚拟信息 8. 进程的文件信息 9. 与进程通信有关的进程 进程的上下文: 进程的运行环境是动态变化的,在Linux中把进程的动态变化的环境总和成为进程上下文。 1. 当前进程 2. 进程切换 3. 上下文切换 4. 进程通过系统调用执行内核代码时,内核运行是为进程服务,所以此时内核运行在进程的上下文中。 系统上下文: 内核除了为进程服务,也需要为操作系统本身任务服务,如响应外部设备的中断,更新相关定时器,重新计算进程优先级等。故把系统在完成自身任务时的运行环境成为系统上下文。 Linux中的进程都是由当前进程使用系统调用fork()创建的,而实际上fork()中进一步调用内核函数do_fork()来完成。 Linux信号的作用和种类: 信号机制 采用信号机制在进程间通信时传送的只是一个成为信号的数据,他不能传递更多的其他信息。 1. 信号的主要作用是把系统中发生的某些事件通知给进程。 2. 信号的主要特征是它的异步性,即什么时候出现信号是不可预知的。 3. 信号的数量与机器平台等有关,它与硬件平台的字长对应,如80x86的字长为32位,则信号有32种。 4. 系统中的每个信号都是一个整数,称为信号值,Linux通过宏定义给每个信号量定义了一个符号常量,称为信号名,以SIG开头。 5. 进程可以同时处理多个信号。 6. 每种信号在signal中只有一位,故不能识别接收了一个还是多个信号。 7. 信号没有优先级,可以以任意顺序处理接收到的信号 进程接收到信号处理的两种方式: 1. 交给内核进行处理 2. 有进程自行处理 Linux管道的概念 管道是Linux进程间通信的手段,管道实际上就是一种共享文件,所以管道的机制是以文件系统为基础实现的,数据在管道中以先进先出的方式,并以字符流的形态传送。 管道有两种: 匿名管道:只能在父子进程间通信 匿名管道与一般的文件不同,它没有纳入文件系统的目录,不占用外存空间,仅适用内存作为数据传输的缓冲区。缓冲区的大小决定每次写入管道的字节数,该值由全局符号常量PIPEBUF确定,缺省值为一个物理页面。 命名管道:可以在任意进程间通信 对称FIFO管道,与匿名管道的区别是,命名管道有文件名,在文件系统中可见,可以实现任意进程间通信。 ~]# mkfifo myfifo #创建一个命名的管道文件 分页存储管理: 把进程的地址空间划分为大小相等的片段,成为页或页面,相应的内存空间也分为页面相同大小的若干块,成为物理块或帧。 内存页面大小必须适中,若页面太小,减少了内存碎片的总空间,有利于提高内存的利用率,但是会使每个进程要求较多的页面,从而引起页表过长,占用大量内存,此外还会降低页面换进换出的效率。若选择较大页面,虽然可以提高页面换进换出的效率,但是会使页面碎片增大,因此页面的大小选择适中,X86架构中默认是4K 页表: OS为每个进程建立一张页面与物理块号的对照表,以便实现地址映射。页表在内存中占有一块固定的存储区,页表的大小由进程或作业的长度决定。 用于控制和历内存的硬件机制成为存储器管理单元MMU(Memory manage Unit) 80x86具有两种存储管理模式 1. 实时地址模式 2. 受保护的虚拟地址模式 内存的最大容量由物理地址长度决定,80x86机器的地址总线为32bit,2^32约为4GB 文件与文件系统 文件:具有文件名的一组信息组合,包括两部分 文件体:文件本身的信息 文件说明:文件存储和管理信息;如文件名、文件内部标识、文件存储地址、访问权限、访问时间等 文件的种类: 1. 按用途分类: 系统文件 库文件 用户文件 2. 按保护级别分类(根据限定的使用文件的权限) 执行文件 只读文件 读写文件 3. 按信息流向分类(物理设备的特性决定了文件信息流向) 输入文件 输出文件 输入输出文件 4. 按文件的性质分类 普通文件 目录文件 块设备文件 5. 按文件的组织结构分类 由用户组织的文件称为逻辑文件:流式文件、记录文件 文件在存储介质上的组织方式称为文件的物理结构(物理文件)、顺序文件、链接文件、索引文件 文件系统的三个部分: 管理软件 被管理软件 相关的数据结构 文件的逻辑结构: 用户观察到的文件组织形式,是用户可以直接处理的数据结构,它独立于物理特性,又称为文件组织 分类: 1. 有结构记录式文件(数据库):包含若干顺序、排列的记录 变长记录:数据项、字段不同;数据项本身不同 定长记录:文件长度=记录总个数X记录长 2. 无结构字符流式文件:文件的信息不组成记录,文件的长度即为字符总个数(源程序、文本文件) 文件的物理结构: 物理结构:文件在外存上实际的组织形式 物理块:以物理块为基本单位分配和传输信息,物理块大小由存储设备和OS确定。 物理块的大小与逻辑记录大小之间不一定一致 文件物理结构的几种形式 1. 顺序结构(顺序文件或连续文件) 一个文件在逻辑上连续的信息被存储在磁盘上相邻的块上,逻辑记录与磁盘块的顺序相一致 #####优点 存取速度快,结构简单,支持顺序存取和随机存取。 #####存在的问题: 磁盘的存储空间利用率不高,容易产生磁盘碎片 对输出文件很难估计需要多少磁盘块 影响文件的扩展 2. 链接结构(链接文件或者串联文件) 基本思想:将文件存放在外存中若干个物理块中,这些块不必连续,每个块的最后一个单元用作指针指向下一个物理地址,最后块的指针使用特殊字符标识文件结束,从而将同一个文件的物理块链接起来。 优点:解决了顺序结构中的所有问题,监理文件不必考虑文件的长度,文件可以继续扩展,便于在文件的任何位置插入或删除一个记录。 缺点: 1. 采用随机存取的方式是低效的,文件只能按指针链接 2. 可靠性问题,如指针出错 3. 链接指针占用一定空间 4. 读一块信息时,应将其中的指针分离出来,保证用户信息的正确性。 3. 索引结构(索引文件) 基本思想:为每个文件建立一张索引表,每一表相记录文件所在的一个物理块。 优点:能方便的实现文件的扩展,记录的插入和删除。 缺点:必须增加索引表占用的空间和读写索引表的时间,索引表的查找策略对文件系统效率影响很大。 索引表的管理: 当索引表非常大的时候,需要多个磁盘块存放,个磁盘块之间可以使用指针串联起来,当随机存取某个记录时,可能要沿链接文件搜索才能找到该记录的存放地址,很费时间。 EXT2文件系统构造 一个文件系统一般使用块设备的一个独立逻辑分区。EXT2文件系统把它所用的磁盘逻辑分区划分为若干块组(Block Group),并从0开始编号,每个块组包含若干数据块,每个块组除了数据块之外,包括5种用于管理和控制的信息块:超级块、组描述符表、块位图、inode位图、inode表。这些信息位于块组的前部,后面是文件的数据块。 EXT2的超级块(Super Block)用来描述EXT2文件系统整体信息的数据结构,主要描述文件在逻辑分区中的静态分布情况,以及描述文件系统的各个组成结构的尺寸、数量等。所有块组中包含块的内容是需要把超级块的内容复制到内存缓冲区内。 EXT2超级块由两部分组成 1. 基本超级块:EXT2文件系统的整体静态信息 2. 扩充块:反应所在块组的某些动态特性 超级块本身占用一个物理块1024B 基本块占84B 扩充块占20B 剩余的920B定义为元素长度为4B的数组reserved[230],作为备用 组描述符 记录每个块组的描述信息(在文件分配磁盘空间时需要使用到这些信息),这些组描述符集中在一起就形成了组描述符表。组描述符表可能占用多个物理块,和超级块一样的是,每个快中组块中,块组描述符的信息是完全相同的,而且它的内容也要读入内存。 块位图:记录块组的数据块的使用情况,它占用一个物理块。 因此,一个块组中数据块的最大数量是一个物理块的8倍,对于1024的物理块而言,其块位图就有1024*8位,表示8K个数据块,也就是说,一个块组的数据区最大容量是8M,如果EXT2文件系统使用的逻辑分区为100M,则它可以划分为12个块组,系统运行后,块位图装载进一个高速缓冲中,但是由于高速缓存空间有限,故只能装入常用的8块(缺省值)位图。 inode表和inode位图 inode表:一个块组的所有文件的inode集合,他可能占据多个物理块,每个块组可以包含的inode数目由超级块成员项s_inoders_per_group给出。 inode位图:反应了inode表中各项的使用情况,它的每一位表示inode表的一项,1为使用,0为空闲,与块位图相似。inode位图也装入一个高速缓冲中。 EXT2文件系统的物理结构 EXT2文件系统系统默认的物理块尺寸为1K,EXT2的块地址长度4B,所以每个间接块的索引表可以包括1024/4=256个物理地址。 直接地址:允许文件不大于12K 一次间接地址:当文件大于12K时使用,允许文件长达256K+12K 二次间接地址:当文件大于256K+12K时使用,允许的文件长达256*256K+256K+12K 三次间接地址:当文件大于256*256*K+256K+12K时使用,允许文件长达256*256*256K+256*256K+256K+12K=16G+64M+256K+12K 实际上,32bit操作系统单个文件最大支持到4G EXT2文件系统按照文件的逻辑块号为索引值查找数据块,逻辑块依次从0开始编号。 虚拟文件系统VFS(虚拟文件转换技术) VFS屏蔽了各种文件系统的差异,为处理各种不同文件系统提供了统一的接口,在VFS的管理下,Linux能访问各种文件系统而且实现了各种文件系统间的互访。 VFS的工作原理 物理文件系统:Linux支持各种文件系统如minix、ext2、ISO、nfs等被称为物理文件系统。 虚拟转换机制(VFS) 不同的物理文件系统有不同的组织结构和不同的处理方式,为了能够处理各种不同的物理文件系统,操作系统需要把他们的特性进行抽象,把各种不同物理文件系统转换为一个具有统一共性的虚拟机文件系统,这种转换机制称为虚拟文件系统转换,即VFS。 VFS不是实际的文件系统,它提供了处理各种物理文件系统的公共接口,通过这个接口使得不同的文件系统看起来都是相同的。 VFS超级块和VFS inode结构 1. VFS超级块的作用是把在各种文件系统中的表示文件在逻辑分区中的静态分布情况转换成统一的格式。 2. VFS inode作用是吧不同文件系统的活动文件管理信息,如文件类型、文件尺寸等转成统一的格式。 3. 公共操作函数接口,当进程向系统发出文件操作请求时,该文件可能是某个物理文件系统中的一个文件,内核通过VFS公共操作函数接口转换到该文件系统的相应操作函数。 VFS超级块 VFS超级块是在文件系统安装时由系统在内存中建立的,对于每一种已安装的文件系统,在内存中都有与其对应的VFS超级块,各种文件系统的超级块都是一个super_block结构体。里面的数据是在安装时由读取超级块的例程read_super()把某种文件系统的管理信息写入它的VFS超级块中。 VFS超级块主要包含以下几种信息 1. 文件系统的组织信息,如文件系统所在的设备号、块大小、块位数、文件系统署名等。 2. 文件系统的注册和安装信息 3. VFS超级块的前面各个成员项表示的是各种文件系统的公共信息,不同文件系统的特有信息则由联合体u的各个成员表示。 4. 指向对超级块进行操作的函数指针。 I/O控制方式 CPU控制方式 1. 程序直接控制方式 CPU一直对控制干预 2. 中断控制方式 CPU以字节为单位对I/O控制干预 3. DMA方式(Direct Memory Access) CPU以一组数据块干预I/O控制 DMA方式又称为直接存取方式 其基本思想是在外围设备和内存之间开辟直接的数据交换通道,在DMA方式中,I/O控制器具有比中断方式和程序直接控制方式更强的功能,DMA控制器中还包括传送字节计数器,内存地址寄存器等。 通道控制方式 1. I/O通道:一种硬件机制,指专门用于I/O工作的处理机,它有自己的简单与I/O操作相关的指令系统,如数据传输、设备控制等,通道执行的程序为通道程序。 2. 通道方式的处理过程:CPU向通道发出一条I/O指令,通道接收到指令后,从内存中取出本次要执行的通道程序,然后执行该通道程序,仅当通道完成了规定的I/O任务后,才向CPU发出中断信号,可以提高CPU与I/O的并行处理能力。 3. 通道分类,按信息交换的方式分为三类: a. 字节多路通道(中低速)(分时):字节为单位 b. 数据选择通道(高速):以块为单位 c. 数组多路通道(中高速)(分时):以块为单位 4. 瓶颈问题(通道不足)措施 a. 提高I/O设备的独立性,减少通道占用的时间,通常的方法是在设备和控制器间增设缓冲。 b. 增加通路,增加设备到知己之间的通路是解决瓶颈问题的有效方法,即把一个设备连到多个控制器上,而一个控制器又被连接到多个通道上。 缓冲技术 缓冲技术的引进解决了以下问题 1. CPU与I/O设备间速度不匹配 2. 减少CPU的中断频率 防止每接收一次数据就中断一次,先将数据放入缓冲区内,待满时再中断CPU,从而减少了中断次数。 3. 提高CPU和I/O设备的并行性 例如将打印机工作时CPU继续进行计算工作 缓冲的种类 1. 硬件方式 一般采用硬件缓冲器,如I/O控制器中的数据缓冲寄存器,成本较高,除关键部件外一般不采用。 2. 软件方式 在内存中开辟出一个具有N个单元的专用缓冲区,以便存放输入输出数据。 操作系统为每一个缓冲区建立一个数据结构,成为缓存控制块BCB(buffer control block),操作系统通过BCB对没一个缓存实施具体的管理。 缓冲的使用方式 专用缓冲:为某设备/进程专门设置的。 公用缓冲:为所有设备/进程设置的,为所有的设备/进程所共享。 缓冲的组织形式 单缓冲 双缓冲 循环缓冲 缓冲尺 设备处理程序与I/O进程 设备处理程序包括驱动程序和I/O中断处理程序。I/O处理程序通常是由I/O进程完成的 设备处理程序 设备处理程序是负责直接控制设备完成实际的I/O操作程序,设备驱动程序直接和硬件打交道。设备驱动程序包括对硬件的各种操作,在操作系统的控制下,CPU通过执行驱动程序来实现对设备底层硬件的处理和操作。 I/O进程 为了能够在处理机上执行设备处理程序,当前许多操作系统都设置了专门完成I/O操作的进程,属于系统进程。在不同的操作系统中,处理I/O操作和配置I/O进程的方式不同,大体可以分为三种 1. 为每一类设备设置一个进程,它专门执行这类设备的I/O操作。 2. 在整个系统中设置一个功能进程,专门负责对系统中所有的各类设备的I/O操作,也可以设置一个输入进程和一个输出进程,分别处理系统中的所有的各类设备的输入或输出操作。 3. 系统为每台设备建立一个I/O进程,它们分别执行设备各自的处理程序,被大多数操作系统采用。 I/O进程一般在系统生成的时候被创建,平时处于睡眠等待状态。I/O进程在两种情况下呗唤醒。 1. 当用户进程发出设备请求(I/O请求) 2. 出现I/O中断 Linux设备分类 字符设备:以字符为单位,输入输出数据的设备,并且以字符为单位对设备中的信息进行组织和管理。如显示器或者键盘等。 块设备:以一定大小的数据盘为单位输入输出数据,并且设备中的数据也是以物理块为单位进行组织管理的,如硬盘等。 网络设备:通过网络与外部进程或远程计算机进行通信的设备,如网卡等。 Linux设备的管理特点:物理设备抽象化,把物理设备看成文件,采用文件系统的接口和系统调用来管理和控制设备,Linux设备就是一种特殊文件,成为设备文件。 设备驱动程序 1. 功能 对设备进行初始化 启动停止设备的运转 把设备上的数据传到内存 把数据从内存传入到设备 检测的状态 2. 驱动程序虽然是在设备生产厂家开发的,但是装入系统后统一由内核进行管理,处于内核态,成为内核的一部分。 3. Linux对设备的管理和控制是使用VFS提供的各种数据结构和操作系统函数实现的。 设备注册 当一种设备安装到系统时,必须向系统进行注册,注册之后才能够进行使用,设备的注册是将驱动程序加载到系统中。 设备驱动实在系统启动时装载到系统中的 对于即插即用的设备,驱动程序作为程序模块可以随时加载到系统中。 两个设备注册表 1. 字符设备注册表 2. 块设备注册表 每个注册表都有255个表项,每个表项表示一个设备,都是一个device_struct结构,成为设备描述符。 注:设备注册表的下标时某种设备的主设备号,使用主设备号作为索引就可以从设备注册表中得到这种设备的驱动程序, 两个注册表的第一个表项通常为null,因为系统中不存在主设备号为0的字符设备和块设备。 设备注册是通过系统调用注册函数实现的,当设备需要撤销时,可以使用注销函数从设备注册表中删除。 Linux的I/O控制方式 Linux对设备的输入、输出过程实际上是在CPU的控制下主机(内存)与外部设备之间传送数据的过程,因此Linux的I/O控制有三种 1. 查询等待方式(轮训方式) 驱动程序不断控制设备状态,当设备准备好传送数据时,CPU执行驱动完成一次I/O过程,若设备未准备好,则驱动程序反复检测该设备状态,直到设备准备好。 适用于不支持设备中断的系统,系统支持的中断数目有限时,例如并行接口(打印机接口)的驱动程序中默认的控制方式就是轮训方式。 2. 中断方式 当进程向设备提出I/O请求时并不等待设备完成I/O操作,而是把CPU让给其他进程使用,自己则进入睡眠状态。在设备完成I/O操作时发出中断信号,系统根据中断信号调用相应的中断服务唤醒等待的进程继续后面的操作。 在机器支持中断的情况下,涉笔驱动程序就可以使用中断方式控制设备的I/O操作。因此,设备中断程序中处理包含各种操作函数外,同时还要进行各种中断处理的中断服务例程。CPU接收到来自硬件的中断请求后,则通过中断请求就能够执行设备驱动程序例程。 3. DMA方式 DMA方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和回复现场的过程,通过硬件为RAM和I/O之间开辟一条直接传输数据的通路,减少CPU直接操作数据的时间。 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 几人行 (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 随手笔记 2019-05-11 1 条评论 9271 次浏览
凯哥哇,继续更新,学习学习