《编程用filesystem》PPT课件.ppt_第1页
《编程用filesystem》PPT课件.ppt_第2页
《编程用filesystem》PPT课件.ppt_第3页
《编程用filesystem》PPT课件.ppt_第4页
《编程用filesystem》PPT课件.ppt_第5页
已阅读5页,还剩229页未读 继续免费阅读

下载本文档

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

文档简介

第5章 文件系统,第5章 文件系统,文件系统概念 文件的逻辑组织与存取方法 文件的物理组织,北京美容院 ,第5章 文件系统,文件目录结构 文件存贮空间管理 对文件的主要操作 文件完整性 共享与安全 UNIX文件系统,文件系统的概念,文件系统概念,文件系统是操作系统中负责管理和存取文件信息的软件机构,它是由管理文件所需的数据结构和相应的管理软件以及访问文件的一组操作组成。 从系统的角度看:文件系统是一个负责文件存储空间管理的机构。 从用户的角度看:文件系统是用户在计算机上存储信息、和使用信息的接口。,文件系统任务,有效地分配文件存贮器的存贮空间:按块分配; 提供组织数据的方法; 提供合适存取方法; 提供一组操作服务.,文件系统功能,用户操作命令; 共享与合作控制; 存储体系的管理; 按名访问文件; 后备与复原能力; 保密 透明与友好的接口.,文件,文件:逻辑上具有完整意义的信息集合,是文件系统存贮和加工的逻辑部件. 文件是具有符号名的信息(数据)项的集合。 文件是具有符号名的记录的集合。,文件的分类,UNIX系统文件分类方法: 1、普通文件 普通文件是无结构的字符的集合。 2、目录文件 目录文件是由文件的目录项组成的文件。 3、特别文件 特别文件就是设备。,文件的属性,文件属性反映文件的类型、存取控制等 UNIX系统中文件属性: 普通文件 d 目录文件 p 管道文件 c 字符型设备文件 b 块设备文件,文件名,根据文件的定义,每个文件必须有一个唯一的文件名,不论是系统管理,还是用户使用文件都使用文件名。 文件名是一个有限长度的字符串。 DOS、WINDOWS系统中文件名: 文件名 文件扩展名 文件名是一个不大于8个字符的字符串,但WINDOWS系统中允许超长文件名,最多可有256个字符,不区分英文字母的大小写。,文件扩展名,不大于3个字符,一般用来表示文件的类型。 例如: C C语言源程序文件 COM 可执行文件(小模式) EXE 可执行文件(大模式) BAT 批处理文件 OBJ 目标文件 hust.txt ll.c ll.obj ll.exe,UNIX系统中的文件名,文件名是一个不大于14个字符的字符串。并且区分英文字母的大小写。 例如:unix linux ll.c a .out aa AA 注意:在UNIX系统中文件名就是一个字符串,没有文件名和文件扩展名之分,文件的类型由用户命名时确定。 例如,li.c,UNIX系统认为这个文件名的长度是4个字符。 而在DOS、WINDOWS系统中则解释这个文件名,li是文件名,c是文件扩展名,表示该文件是一个C语言的源程序文件,而是文件名和文件扩展名的分隔符。,文件的逻辑组织与存取方法,文件的组织: 逻辑形式:用户观点 物理形式:实现观点. 文件的逻辑结构 无结构(流式)文件 记录式文件 文件的存取方法 顺序存取 直接存取,文件的逻辑组织与存取方法,文件的逻辑结构 结构文件记录式文件。 无结构文件流式文件 流式文件 无结构的流式文件是相关的有序字符的集合。文件的长度为所含字符数。 UNIX、DOS、WINDOWS系统中的普通文件都是流式文件。,文件的逻辑组织与存取方法,记录式文件 记录式文件是一种结构式文件,文件是记录的集合. 每个记录由彼此相关的域构成。记录可按顺序编号为记录1,记录2,记录n。如果文件中所有记录的长度都相同,则这种文件为定长记录文件。 定长记录文件的长度 = 记录个数x记录长度。 变长记录文件的长度为各记录长度之和。 例如:学生登记表文件 xsdjb.dbf 姓名 学号 籍贯 通信地址 邮政编码 李铭 925678 武昌 武昌关山街125号 430074 司马乐 925679 北京 北京海军路88号 100034,文件的逻辑组织与存取方法,两种文件的比较 流式文件就象给一张白纸给用户,用户可将他的信息任意地写到纸上,没有任何格式上的限制。 记录式文件就象给一张表格给用户,用户要按表规定的格式填信息。 显然,结构式文件对用户的限制很大,使用起来就不方便,所以记录式文件被淘汰是理所当然的。,文件的逻辑组织与存取方法,存取方法 顺序存取: 后一次存取总是在前次存取的基础上进行的。每次存取不必给出存取开始的位置。 随机存取: 每次存取操作都要指定存取操作的开始位置。在系统中提供文件存取操作有: n = read(fd,buffer,size); m = write(fd,buffer,size); 这两个操作总是从当前位置开始读(或写),执行顺序存取操作。,文件的逻辑组织与存取方法,leek(fd,offset,mode) 调整文件的读写起始位置的系统调用,若在read、write之前执行leek操作,就调整了文件的读写指针(读写开始的位置),实现了随机存取。,文件的物理结构,一个文件存储介质,格式化后就分成许多大小相等的单位存储块(物理盘块),在现代计算机系统中,一般来说,每个物理块是一个磁盘的扇区,512字节。并给每个存储块有个编号,称为物理块号。 文件的物理结构指文件在存储介质上质结构,目前有三种基本结构,即连续文件结构、串联文件结构和索引文件结构。,文件的物理结构,文件的物理结构,连续文件,文件的物理结构,连续文件 评价: 优点:结构简单,实现容易,不需要额外的开销。 缺点:用户创建文件时要给出文件的大小; 不利于文件的动态增加和修改; 连续文件是一种连续结构的文件,对每个文件要求存放在存储介质上的连续的物理块中,存储空间利用率不高。类似于存储管理中的分区,适用于变化不大的顺序访问的文件,在流行的UNIX系统中仍保留了连续文件结构。,串联文件,一个串联文件结构是按顺序由串联的块组成的,即文件的信息按存储介质的物理特性存于若干块中。 每个物理块的最末一个字(或第一个字)作为链接字,它指出后继块的物理地址。链首指针存放在该文件目录中。文件的结尾块的指针为“”。 这种文件结构不要求连续存放。 对于记录式文件一块中可包含一个逻辑记录或多个逻辑记录,也可以若干物理块包含一个逻辑记录。,串联文件,串联文件,评价: 1.存储空间利用率高; 2.文件创建时用户不必指出文件的大小; 3.文件动态扩充和修改容易。 4.顺序存取效率高,随机存取效率太低,如果访问文件的最后的内容,实际上是要访问整个文件。 类似于存储管理中的页式,文件照映,为了克服链接文件的存取效率太低的问题,人们提出文件映照的技术,即把链接文件中的链接字集中在一结构中,这样既保持了链接文件的优点,也克服了其缺点,DOS、WINDOWS系统就采用了这样结构。,文件照映,FAT:文件分配表,磁盘格式化 后建立,从磁盘的第二个开始, 有两个相同的FAT。 磁盘的类型 : FDF,双面,FCH,单面(9扇 区/磁道) F8H,硬盘 000H:空闲簇 FFFH:文件的结尾簇 XXXH:文件的下一簇,随机文件,随机文件结构是另一种形式的非连续文件,文件数据存放的存储介质上的物理块号与文件的逻辑块号一一对应,并建立这样对应关系的数据结构文件索引表。 访问文件时,根据文件的逻辑块号查文件索引表,找到对应的物理块号,然后,进行访问。 随机文件有三种形式的结构:直接地址结构、索引结构、计算寻址结构。 索引结构是当代计算机操作系统中普遍采用的结构,如UNIX系统、LINUX系统。,索引文件结构,这种文件结构的数据结构是文件的索引表,每个文件有一个索引表,表中每个表目包括:逻辑块号,物理块号。 索引表位置:文件目录中,文件的开头等。 索引表大小:固定大小,非固定大小。,随机文件,UNIX系统采用索引文件结构,UNIX系统采用多级间接索引结构,对小型文件采用直接索引,对大型文件采用间接索引,从而,既保证绝大多数的文件有高的存取效率,又能适应存取一些大型文件。(既保证了文件系统的高效率,又使其有很宽的适应面)。,文件物理结构的比较,连续文件的优点是不需要额外的空间开销,只要在文件目录中指出文件的大小和首块的块号即可,对顺序的访问效率很高。适应于顺序存取。缺点是动态地增长和缩小系统开销很大;文件创建时要求用户提供文件的大小;存储空间浪费较大。 串联文件克服了连续文件的不足之处,但文件的随机访问系统开销较大。适应于顺序访问的文件。DOS系统中改造了串联文件的结构,使其克服了串联文件的不足,但增加了系统的危险性。,文件物理结构的比较,索引文件既适应于顺序存访问,也适应于随机访问,是一种比较 好的文件物理结构,但要有用于索引表的空间开销和文件索引的时间开销。UNIX系统是使用索引结构成功的例子。 在当前流行的一些UNIX操作系统的版本中,同时支持连续文件结构和索引文件结构。DOS、WINDOWS系统支撑类似于文件映照结构。,文件目录,按名访问、重名、多名 文件目录: 文件目录即文件名址录。它是一张记录所有文件名及其存放地址、文件的说明和控制信息的表格。 一般情况下,每个文件占用一个表目,即每个文件有一个文件的目录项。,文件目录及内容,文件目录项: 1.文件名 2.文件的大小,单位:字节 3.文件在物理存储介质中的位置。取决于文件的物理结构 。 对于连续文件:文件起始块号(即文件的第一个物理块块号); 对于串联文件:指向第一个物理块的指针; 对于索引文件:索引表。 4.存取控制信息 文件主和其它用户对该文件的访问权限。 5.管理信息 包含文件创建的日期和时间,最近修改该文件的日期和时间等。 6.文件的类型,文件目录及内容,文件目录操作: 1.查找 2.建立文件 3.删除文件 4.列出目录清单 5.后备,一级目录结构,最简单的文件目录结构是在系统中建立一张线性表,每个文件占一表目,由文件名和文件的说明和管理信息组成。这样的表称为一级文件目录. 一级文件目录的主要功能是实现“按名存取”, 并且实现容易。 主要问题是“重名”问题 所谓“重名”是指不同用户对不同文件起了相同的名字,即两个或多个文件只有一个相同的符号名,一级目录结构,二级目录结构,建立逻辑用户目录 部分重名 用户间无法共享,多级目录结构(树型目录结构),目录文件 由文件的目录项组成的文件称为目录文件。 系统中有一个根目录(或根目录文件),在这个目录中可登记一般文件,也可以登记目录文件,在每个目录文件中可以登记一般文件,也可以登记目录文件。 根据这个递归定义就形成了一个倒立的树的结构。对于一棵树,它有一个树根(只有一个,根目录),在树根上可以长树叶(一般文件),也可以长树枝(子目录文件);对于每个树技又可以长树枝,也可以长树叶。,多级目录结构,路径名: 一个文件的路径名是由根目录 到该文件的通路上所有目录文件名 和该文件的符号名组成的。 DOS WINDOWS系统中文件路径名 ART BIUI D BP NIX系统中文件路径名 /A/R/T /B/IU/I /D /B/P,文件存贮空间管理,按块分配辅存空间 组织方法:空闲空间表、空白块链、位示图、空闲块成组连接; 已分配空间管理:文件目录。,文件存储空间管理,UNIX系统的空闲块的管理 在UNIX系统中每个子文件系统(一片软盘、一个硬盘的分区,一卷磁带)格式化后的结构如图所示,其中特别块是存放该子文件系统的管理信息,其中,包括空闲块管理信息。 s-nfree :空闲块数 s_free100:空闲块块号 s_flock:锁位,文件存储空间管理,UNIX系统的空闲块的管理,文件存储空间管理,UNIX系统的空闲块的管理,对文件的主要操作,文件系统调用的层次 创建和删除文件 打开与关闭文件 读写文件 连接与解除连接,文件系统的可靠性,坏块管理 后备 周期性转贮; 增量转贮 一致性检查:盘块与文件检查,文件共享与保护,命名 口令; 存取控制; 密码; 硬保护。,UNIX文件系统,文件的静态结构 UNIX系统中,一个文件存 在要占用如下资源: 至少占用一个文件目录项; 仅占用一磁盘I节点; 占用一个或多个磁盘块 (物理块)。,UNIX文件系统,文件的静态结构 i_uid:文件主的用户名 i-gid:用户组名 i-mode:文件的类型和文件的存 取控制权限 IALLOC:此I节点被占用 IFDIR目录文件 IFCHR字符文件 IFBLK块文件 IREAD读 IWRITE写 IEXEC执行,共分三组,表示文件主、同组用户和其它用户的权限 i_mode0表示该I节点空闲 i_nlink文件的联接数,在UNIX系统中一个文件可以登记在不同的目录文件中,目的是为不同的用户共享文件提供支持。 i_atime最近使用时间 i_mtime最近修改时间 i_addr文件索引表,文件的索引结构,文件的静态结构,文件的索引结构,文件的静态结构,文件的索引结构 在结构中的索引表有个表目, 前10个表目存放文件数据块的地址,采用直接索引;如果文件的长度超过10个数据块; 第11个表目登记的是一次间接索引块的物理块号,该块存放索引表,而不是文件的内容,采用一次间接索引; 第12个表目登记二次间接索引块的物理块号,该块存放二次间接索引表,每个表目中登记的是一次间索引表的物理块号;,文件的静态结构,文件的索引结构 第13个表目登记的是三次间接索引块的物理块号,该块存放三次间接索引表,每个表目中登记的是存放二次间接索引表的物理块号。 这种结构对于小于等于10个物理块的文件采用直接索引,可从结构的索引表中直接取到文件数据块的物理块号,不需要进行任何转换和计算,加快文件存取的速度,提高文件系统的使用效率;对于一些大型文件或巨型文件,系统采用间接索引的方法也可以方便的管理和使用,只不过要付出些代价。因此,不论是几仍至几个字节的文件,还是几十、甚至更大的文件都能存在于系统中。,文件的静态结构,文件的索引结构 系统中采用这种方法主要是照顾小型文件,保证对小型文件的存取高效快速,同时又兼顾大型文件和巨型文件。这与系统的环境有关,系统的设计者提供以下的统计资料说明他采用这种结构的理由。其统计资料说:在系统的环境下,小于个物理块的文件约占所有使用文件的,其它文件约占,其中巨型文件不到。在实际应用中的文件大小的分布情况与这个统计结果是相符的。,UNIX树型目录结构,整个系统有个根目录文件(DOS、WINDOWS系统中有一个根目录区),相当于一棵树的树根, 并有多级目录文件(与DOS概念相同,WINDOWS中叫做文件夹),相当于树枝。 还有许多文件(普通文件和特别文件),相当于树叶。,文件的安装和拆卸,UNIX系统采用树型目录结构,整个文件系统由根文件系统和若干个子文件系统所组成 。 根文件系统是基本文件系统,在系统生成时产生。 子文件系统是驻留其它文件存储介质上的文件系统,例如,一片软盘、一盘的逻辑分区、一卷磁带、一个磁鼓等,在UNIX环境下格式化后成为一个子文件系统,经过UNIX系统提供的安装命令装到系统中,与根文件系统和已经安装在系统中的其它子文件系统一起形成一个完整的文件系统,当某个子系统不再使用时,用拆卸命令将该子文件系统拆卸下来。 踪上所述,在UNIX环境下总只有一个完整的树型目录结构。所以,在UNIX系统环境下使用文件只要给出文件的路径名即可。,打开文件的结构,用户在使用文件之前必须要使打开文件操作,为什么? 文件是存放在磁盘上的。磁盘属于外存储器,它是CPU不能直接访问的存储器,当然,用户就不能直接存取存放在磁盘上的文件。但用户又要使用文件,这样,在使用文件之前,就要在内存中建立存取文件的结构,然后,通过对这个结构的访问来达到对文件的访问。,打开文件的结构,内存中建立的存取文件的结构,称为文件控制块(FCB),包含文件目录的信息和对文件存取的有关信息。 该结构是在打开文件操作中建立的,并向用户返回FCB的首地址,用户以后使用文件(如读、写)就使用FCB首址。显然,用户要使用具体的内存地址,这对用户来说是非常困难的。 UNIX系统中打开文件的结构包括活动I节点表,系统打开文件表和用户文件描述符表。,打开文件的结构,活动I节点 i_flag打开文件的标志 ILOCK:锁位 IUPD:修改标志 IMOUNT:安装点 IWANT:有进程等待 ITEXT:纯正文段 i_count:访问计数 i_dev:文件所在设备号 i_number:I节点号,打开文件的结构,打开文件表 f_flag:标志 FREAD:读 FWRITE:写 FPIPE:管道 f_count:访问计数 f_inode:指向活动I节点指针 f_offset:读写指针,打开文件的结构,用户文件描述符表(进程打开文件表) 每个进程有一个用户文件描述符表,存放在进程的user结构中,u.u_ofileNOFILE。 NOFILE15是一常数,表示一个进程最多能同时打开15个文件。 这一个结构类似于一般操作系统中的FCB。,打开文件的结构,打开文件结构之间的关系,打开文件的结构,打开文件结构之间的关系 文件共享的三个层次:1.父子进程共享同一文件,子进程在创建时继承了父进程的所有打开的文件,体现在对某个打开文件表目的共享;,打开文件的结构,2.不同的用户打开了同一个文件(以不同的文件名) 进程2 open(“/unix/li.c”,READ) 进程3 open(“/user/ll.i”,WRITE) 文件/unix/li.c和/user/ll.i是同一个文件;,打开文件的结构,3.不同的进程以不同的用途打开同一个文件 进程1 open(“/user1/ll”,READ) 进程3 open(“/user1/ll”,WRITE),文件操作系统调用,文件系统调用及其它算法的关系,文件操作系统调用,系统调用 open 使用文件之前必须使打开文件操作,UNIX系统中打开文件的系统调用是open,其调用格式是: fd=open(pathname,flags); 功能:打开一个指定的文件; 输入参数:pathname 要打开文件的路径名 flags 指示打开文件的类型(读或写) 返回参数:fd 文件描述符(一个小的正整数) 若fd=-1则表示系统调用失败,对所有系统 调用都是。,文件操作系统调用,系统调用 open 执行过程: 调用namei()将文件的路径名转换成I节点; 文件不存在或非法访问,返回1; 申请打开文件表项,f_count+;f_offset置0; f_inode指向I节点; 分配用户文件描述表项,将打开文件表首地址填入; 若打开文件的类型是清文件,则释放该文件占用的所有磁盘块; 返回用户描述表项的编号。,文件操作系统调用,系统调用 open,文件操作系统调用,系统调用 creat 调用格式: fd=creat(pathname,modes); 功能:创建一个新文件; 输入参数:pathname 要创建文件的路径名 modes 指示创建文件的类型(读或写) 返回参数:fd 文件描述符(一个小的正整数),文件操作系统调用,系统调用 creat 执行过程: 调用namei()取得文件路径名的I节点; 文件存在且不允许访问,则释放I节点,返回1; 文件不存在,则申请分配一I节点; 在其父目录中建立目录项,包括文件名和I节点号; 分配用户文件描述表项,打开文件表首地址填入; 若文件在创建时已存在,则释放该文件占用的所有磁盘块; 返回用户描述表项的编号。,文件操作系统调用,系统调用 close 调用格式: fd=creat(pathname,modes); 功能:关闭文件; 输入参数:fd 文件描述符 返回参数:无,文件操作系统调用,执行过程:if(f_count- 0) return; 释放该表目; if(i_count- 0) return; 如果活动I节点修改,则将有关盘上I节点的内存写回到相应盘上I节点;释放此I节点,return; 如果活动I节点未修改,释放此I节点,return。,文件操作系统调用,系统调用read,write Read 读文件; write写文件。 调用格式: n=read(fd,buffer,size); n=write(fd,buffer,size); 输入参数 fd 文件描述符; buffer 缓冲区,对于读是将读文件的信息存放在缓冲区中; 对于写是将缓冲区中的信息写到文件中;,文件操作系统调用,size 读(或写)信息的长度,单位字节。 返回值: 对于读操作 n0 读到文件尾 n 0 实际读的字节数。 对于写操作 n 0 实际写的字节数,n与size应相等。,文件操作系统调用,系统调用read,write 执行过程: 读(或写)操作先按文件表中的位移量设置U区中的位移量,然后调用低层读(或写)磁盘块的操作,读完指定的字节数后,返回实际读的字节数。 低层读磁盘块的操作 计算出文件的逻辑块号; 查活动I节点中的文件索引表,找到相应的物理块号; 读磁盘块。,第6章 设备管理,除cpu,内存外的其他设备管理 概述 缓冲技术 设备分配技术 I/O软件构造原则 磁盘调度 UNIX的设备管理,外设特点,分类:存储设备,输入输出设备 投入价值高 独立性与并行性 使用复杂 管理复杂,I/O管理概念,目标:代码独立、设备独立、效率、 处理一致性 功能:缓冲区管理、地址转换和设备驱动、I/O调度、中断管理,缓冲技术,CPU与各种外部设备的速度上的差异很大,设备与设备之间的速度的差异也很大。 系统有时会产生大量的数据需要I/O,有时又会很长时间没有I/O。造成I/O负荷的不均匀 要解决这两个方面的问题就要引入缓冲的概念。 缓冲是用来在两种不同速度的设备之间传输信息时平滑传输过程的常用手段。 缓冲技术是用来匹配CPU与设备之间速度差异和负荷的不均匀。 常用的缓冲技术有三种:双缓冲、环形缓冲、缓冲池,设备分配技术,独占、共享和虚拟技术 SPOOLING系统及特点,I/O软件构造原则,I/O软件目标 设备无关性(独立性) 出错处理 同步与异步传输 共享与独占设备,设备独立性,设备独立性是指用户在编程序时所使用的设备与实际 设备无关。 两类设备独立性: 一个程序应独立于分配给它的某类设备的具体设备。即在用户程序中只指明I/O使用的设备类型即可。如在系统中配备了两台打印机,用户要打印时只要告诉系统要将信息送到打印机即可。 程序要尽可能地与它使用的设备类型无关。即在用户程序中只要指出要输入或输出信息,至如信息I/O使用的设备不需用户指明。,设备独立性,设备独立性的实现 在UNIX系统中,把设备与文件统一处理,这比前两种设备独立性又算了一步,对于用户来说,就没有设备的概念。,I/O软件结构设计,中断处理 设备驱动 与设备无关的OS软件 用户软件,设备控制块,设备控制块是设备管理的数据结构,用来存放设备的管理和控制信息,每类设备有一个设备控制块。,设备控制块,设备转换表(设备开关表) 设备开关表存放设备驱动和控制程序人口地址。,设备控制块,设备控制块,磁盘调度,磁盘的物理特性 驱动器与控制器 磁盘的存取时间 磁盘调度算法,UNIX系统的设备管理,UNIX系统设备管理的特点 1.外部设备看作文件,由文件系统统一处理; 2.系统设备配置改变灵活、方便; 3.有效地使用了块设备缓冲技术,大大地提高了块设备存取操作的速度。,UNIX设备驱动程序接口,设备管理数据结构,1.主设备号和次设备号 在系统内部使用的设备名称为设备号。它由两个部分组成,主设备号和次设备号。 主设备号:设备的类型编号; 次设备号:同类设备的设备台号。,设备管理数据结构,2.设备开关表(块设备) Struct bdevsw int (*d_open)(); int (*d_close)(); int (*d_strategy)(); int *d_tab; bdevsw ;,字符设备开关表 struct cdevsw int (*d_open)(); int (*d_close)(); int (*d_read)(); int (*d_write)(); int (*d_sgtty)(); cdevsw;,设备管理数据结构,3.块设备表 Struct devtal char d_active; /* 执行一个I/O请求的标志 */ char d_errcnt; /* 出错计数器 */ struct buf *b_forw; /* 设备缓冲队列前指针 */ struct buf *b_back; /* 设备缓冲队列后指针 */ struct buf *b_actf; /* I/O请求队列头指针 */ struct buf *b_actl; /* I/O请求队列尾指针 */ ,设备管理数据结构,4.设备管理数据结构的关系,缓冲区管理,缓冲区结构 在UNIX系统中采用缓冲池的缓冲技术,系统中设置一个有15个缓冲区的缓冲池。每个缓冲区占514个字节,其中512个字节用来存放数据,2个字节用作校验用。 为了管理缓冲区,系统还设置了一个数据结构,称为缓冲区首部,其结构如下:,缓冲区管理,缓冲区结构 Struct buf int b_flags; /* 标志 */ struct buf *b_forw; /* 设备缓冲队列前指针 */ struct buf *b_back; /* 设备缓冲队列后指针 */ struct buf *av_forw; /* 空闲缓冲队列前指针 */ struct buf *ac_back; /* 空闲缓冲队列后指针 */ int b_dev; /* 设备号 */ int b_wcount; /* 请求传送的字节数 */ char *b_addr; /* 缓冲区的首地址 */ char *b_blkno; /* 设备的物理块号 */ char b_error; /* 出错信息 */ char *b_resid; /* 出错时尚末传送的剩余字数 */ bufNBUF;,缓冲区管理,缓冲区结构 b_flags包括: B_WRITE 写(将信息写到磁盘上去) B_READ 读(从磁盘上读取信息到缓冲区中) B_DONE I/O操作结束 B_ERROR 因I/O出错而中止 B_BUSY 相应的缓冲区正在使用中 B_WANTED 有进程正在等待使用该buf,清B_BUSY 时要唤醒这种进程 B_ASYNC 异步I/O标志 B_DELWRI 延迟写,在相应缓存移作它用时,要将缓存中的内容写到相应的磁盘块中。,缓冲区管理,自由缓冲队列和设备缓冲队列 空闲缓冲区队列 当系统中某个进程释放缓冲区时,将释放的缓冲区的buf挂到该队列的队尾。分配缓冲区是从该队列队首取出一个buf,分配给申请者。,缓冲区管理,自由缓冲队列和设备缓冲队列 当某个设备使用缓冲区时,将该缓冲区的buf挂入到相应的设备缓冲队列,并且一直保留在该队列中,直至该缓冲区分配给其它设备为止。这种处理的目的是让缓冲区中的信息尽可能长时间地保留在缓冲区中,以便以后重用。,自由缓冲队列和设备缓冲队列,三、缓冲区管理算法,三、缓冲区管理算法,读操作的过程 以读的磁盘块号和设备号找到相应的设备缓冲队列; 若已读过(缓冲区中仍保存已读的磁盘块),则把缓冲区的内容复制到用户指定的内存中;(假读) 若相应设备缓冲队列中无,说明没有读过,则申请一个空闲缓冲区,作读磁盘块的操作,然后,把读入缓冲区中的内存复制到用户指定的内存区中;(真读) 释放缓冲区,把释放的缓冲区挂到空闲缓冲区队列的尾部。,三、缓冲区管理算法,写操作 以用户申请的写的磁盘块号和设备号查相应设备的缓冲队列; 找到相应的块(原来写过),则将该缓冲区从空闲缓冲队列中摘出,将指定内存的内容写到缓冲区中; 若写满缓冲区,则将该缓冲区的内容写到磁盘中去,然后,释放缓冲区, 若没有写满一个缓冲区,则将缓冲区置为延迟写标志,并释放该缓冲区。 若没有找到,则申请一个空闲的缓冲区,操作同前。,四、缓冲队列的初始状态,缓冲区管理的初始化: 1.空闲缓冲区队列 2.设备缓冲队列,每类设备都有一个设备缓冲区队列。 按UNIX系统的规定,每个空闲缓冲区同时要存在于两个队列中,空闲缓冲队列和某个设备缓冲队列(也有的系统在实现时,不设设备缓冲队列,而是设置一个全系统的设备缓冲的散列)。 为了保证上述规定,在系统初启时,系统设置了一个特别设备,NODEV。,四、缓冲队列的初始状态,五、缓冲区分配与释放,缓冲区的分配总是先查相应的设备缓冲队列,若存在于设备缓冲队列中,说明该缓冲区中的内容已经有用户使用过,可重复使用,减少物理读、写磁盘的物理操作,加快I/O的速度。 释放一个缓冲区时,把释放的缓冲区首部插入空闲缓冲队列的尾部,仍然留在相应的设备缓冲队列中。 缓冲区的分配和释放有五种情况。,四、缓冲队列的初始状态,用户申请读(或写)的块在某个设备缓冲队列中(散列中),且该缓冲区空闲。 把buf中的b_flags置为“忙”,并将该缓冲首部从空闲缓冲队列中摘出。 使用缓冲区中的信息: 用户要求读:则把缓冲区中的内容复制到用户指定的内存中;释放该缓冲区,即将其buf 挂到空闲缓冲队列尾; 用户要求写:则把用户指定的内容写到缓冲区中,缓冲区满,则把其内容写到磁盘上,然后释放;没有写满,则把b_flags置延迟写,释放该磁盘块。,五、缓冲区分配与释放,设备缓冲队列中没有找到申请的块,因此,要为申请者分配一个空闲的缓冲区。 从空闲缓冲队列的队首取出一个空闲的缓冲区,并且,b_flags中“延迟写” 的标志没有置上。 把该缓冲区的buf从原设备缓冲队列中移人申请的设备缓冲队列。 使用该缓冲区: 读操作:把申请的磁盘块读入缓冲区,然后,释放该缓冲区; 写操作:把申请指定的内容写入缓冲区中,写满则写到相应设备中去,否则,b_flags置上“延迟写”的标志,然后释放该缓冲区。,五、缓冲区分配与释放,设备缓冲队列中没有找到申请的块,因此,要为申请者分配一个空闲的缓冲区,但b_flags有“延迟写”的标志。 把该缓冲区的buf从空闲缓冲队列中摘去,然后以异步写的方式把缓冲区中的内容写到设备上去,去掉“延迟写”标志,将其挂到空闲缓冲队列的头部。 继续取空闲缓冲队列中的空闲缓冲区,直到,找到一个没有“延迟写”写标志的空闲缓冲区为止。然后作读(或写)操作。,五、缓冲区分配与释放,没有空闲缓冲区,在等待空闲缓冲区事件上睡眠。 多个进程共享某个缓冲区 例如:A进程申请的缓冲区 “忙”,即B进程正在使用该缓冲区。A进程进入睡眠状态;B进程使用完后,释放该缓冲区,并唤醒A进程。A进程得到处理机时,而检查该缓冲区。这是一个非常复杂的过程。,UNIX的设备I/O控制,I/O请求队列 I/O请求块:操作类型(读或写) 信息地址(读:指源地址,写:指目的地址) 传送的字节数 将这些信息形成一个I/O请求块,并将该请求块挂到相应设备的I/O请求队列,若有进程等待在这个队列上,则唤醒该进程。,UNIX的设备I/O控制,设备驱动 设备驱动程序对应的进程是在系统初启时创建的,当时没有I/O请求,进入睡眠状态,一旦有I/O请求块挂入该队列,将唤醒它,得到处理机后,取出队列中的一个请求块,做I/O工作,完成后发出完成中断信号。然后取下一个I/O请求块,若无则进入睡眠状态。,中断、陷入和信号机构,中断对于操作系统的重要性 就像机器中的驱动齿轮一样 所以有人把操作系统称为是由 “中断驱动”或者 “(中断)事件驱动”,概述,中断机制是操作系统得以正常工作的最重要的手段 它使得OS可以捕获普通程序发出的系统功能调用 及时处理设备的中断请求 防止用户程序中破坏性的活动等等,什么是中断? 指CPU对系统中或系统外发生异步事件的响应 异步事件是指无一定时序关系的随机发生事件 如外部设备完成数据传输,实时设备出现异常等 “中断”名称源于: 当异步事件发生后,打断了对当前程序的执行 而转去处理该异步事件 直到处理完了后,再转回原程序中断点继续执行,1、中断的概念,中断定义,CPU对系统发生的某个事件作出的一种反应 CPU暂停正在执行的程序,保留现场后自动转去执行相应事件的处理程序,处理完成后返回断点,继续执行被打断的程序,从用户角度看中断,引入中断的目的 解决主机与外设的并行工作问题 提高可靠性 实现多机联系 实现实时控制 特点: 1) 中断随机的 2) 中断是可恢复的 3) 中断是自动处理的,中断源:引起中断发生的事件 中断寄存器:记录中断 中断字:中断寄存器的内容 系统堆栈: 在内存开辟的一块区域,用于临时保存现场,中断系统的概念,中断类型(1),强迫性中断 正在运行的程序所不期望的,由于某种硬件故障或外部请求引起的 自愿性中断 用户在程序中有意识安排的中断,是由于用户在编制程序时因为要求操作系统提供服务,有意使用“访管”指令或系统调用,使中断发生,中断类型(2),强迫性中断 输入/输出(I/O)中断:主要来自外部设备通道 程序性中断:运行程序中本身的中断 (如溢出,缺页中断,缺段中断,地址越界) 时钟中断 控制台中断 硬件故障,中断类型(3),自愿性中断 执行I/O,创建进程,分配内存 信号量操作,发送/接收消息,微机中的中断,1.可屏蔽中断(IO中断) 2.不可屏蔽中断(机器内部故障、掉电中断) 3.程序错误中断(溢出、除法错等中断) 4.软件中断(Trap指令或中断指令INT),IBM370中的中断,1. 机器故障中断:如电源故障,机器电路检验错等 2. 输入输出中断:输入输出设备和通道数据传输状态 3. 外部中断:时钟中断,操作员控制台中断,多机系统中其它机器的通信要求中断,各种外设或传感器发来的实时中断等 4. 程序中断:程序中的问题引起的中断,如错误地使用指令或数据、溢出等问题,存储保护等 5. 访管中断:访管指令或陷阱指令(Trap指令)中的操作数规定了要求服务的类型。每当CPU执行访管指令或陷阱指令时,即引起中断并调用操作系统相应的功能模块为其服务,2、中断系统,中断系统的两大组成部分:硬件中断装置和软件中断处理程序 中断系统的硬件中断装置-中断系统的机制部分,负责捕获中断源发出的中断请求,以一定方式响应中断源,然后将处理器控制权交给特定的中断处理程序 软件中断处理程序-中断系统的策略部分 负责辨别中断类型并做出相应的操作,中断装置的基本功能,提供识别中断源的方法 提供查询中断状态的方法,通常使用一个寄存器存储有关中断的状态信息,称为中断字 提供中断现场保护的能力 提供中断处理程序寻址能力,找到恰当的中断处理程序 具有预定义的系统控制栈和中断处理程序入口地址映射表(中断向量表)等数据结构和它们在主存中的位置,以辅助OS定制中断处理策略和中断调度机制,3、中断逻辑与中断寄存器(1),如何接受和响应中断源的中断请求,因机器而异 如,在PC中: 有可屏蔽的中断请求INTR:主要是输入输出设备的I/O中断, 通过建立在PSW中的中断屏蔽位加以屏蔽,即使再有I/O中断,处理器也不响应 不可屏蔽的中断请求:属于机器故障中断,包括内存奇偶校验错以及掉电等中断源 程序中的问题所引起的中断(如溢出、除法错都可以引起中断)和软件中断等 由于可能有很多中断源请求同时发生 由中断逻辑按中断优先级加以判定响应哪个中断请求,中断寄存器: 有的计算机中,为了区分和不丢失中断信号 对应每个中断源分别用一固定触发器寄存中断信号 规定值为1时,表示有中断信号,为0时表示无 这些触发器的全体称为中断寄存器 每个触发器称为一个中断位 所以中断寄存器是由若干个中断位组成,中断逻辑与中断寄存器(2),处理器如何发现中断信号? 处理器的控制部件中设一个能检测中断的机构 称为中断扫描机构 在每条指令执行周期的最后时刻扫描中断寄存器,询问是否有中断信号 若无中断信号,继续执行下一条指令 若有中断,中断硬件将该中断触发器内容按规定编码送入PSW的相应位,称为中断码,中断逻辑与中断寄存器(3),4、多级中断和中断屏蔽,多级中断: 多数微型处理器有着多级中断系统,可以有多根中断请求线(级)从不同设备连接到中断逻辑 如M 68000有七级,PDP11有11级 具有相同特性和优先级的设备可连到同一中断级上 中断优先级: 在多级中断系统中,可能同时有多个中断请求,CPU接受中断优先级为最高的那个中断 忽略其中断优先级较低的那些中断,5、中断响应,CPU如何响应中断, 两个问题: CPU何时响应中断? 通常在CPU执行了一条指令以后,更确切地,在指令周期最后时刻接受中断请求,或此时扫描中断寄存器 如何知道提出中断请求的设备或中断源? 因为只有知道中断源或中断设备,才能调用相应的中断处理程序,开始,取下一条指令,执行指令,检查指令 处理中断,停止,取周期,执行周期,中断周期,不允许中断,允许 中断,用软件指令去查询各设备接口 这种方法比较费时 多数微型机对此问题的解决方法: 使用一种“向量中断”的硬件设施 “向量中断”: 当CPU接受某中断请求时,该设备接口给处理器发送具有唯一性的“中断向量”,以标识该设备 “中断向量”在各计算机上实现方法差别比较大,两种解决方法,中断向量表,在有的机器中: 将主存最低位128个字保留作为中断向量表,每个中断向量占两个字 中断请求的设备接口为了标识自己,向处理器发送一个该设备在中断向量表中表目的地址指针,中断优先级,在一些机器中,中断优先级按中断类型划分: 以机器故障中断的优先级最高 程序中断和访问管理程序中断次之 外部中断更次之 输入输出的优先级最低,中断屏蔽,在CPU上运行的程序,有时由于种种原因,不希望其在执行过程中被别的事件所中断,称为中断屏蔽 在PSW中设置中断屏蔽码以屏蔽某些指定的中断类型 如果其PSW的中断禁止位建立后,则屏蔽中断 (不包括不可屏蔽的那些中断) 如果PSW中的中断禁止位未建立 则可以接受其中断优先级高于运行程序中断优先级的那些中断 各设备接口中也有中断禁止位,以禁止该设备的中断,6、中断处理(1),简单的中断处理 - 典型的处理过程: (1)设备给处理器发一个中断信号 (2)处理器处理完当前指令后响应中断,延迟非常短(要求处理器没有关闭中断) (3)处理器处理完当前指令后检测到中断,判断出中断来源并向发送中断的设备发送了确认中断信号,确认信号使得该设备将中断信号恢复到一般状态 (4)处理器开始为软件处理中断做准备: 保存中断点的程序执行上下文环境,这通常包括程 序状态字PSW,程序计数器PC中的下一条指令位置,一些寄存器的值,它们通常保存在系统控制栈中, 处理器状态被切换到管态,(5)处理器根据中断源查询中断向量表,获得与该中断相联系的处理程序入口地址,并将PC置成该地址,处理器开始一个新的指令周期,控制转移到中断处理程序 (6)中断处理程序开始工作,包括检查I/O相关的状态信息,操纵I/O设备或者在设备和主存之间传送数据等等 (7)中断处理结束时,处理器检测到中断返回指令,被中断程序的上下文环境从系统堆栈中被恢复,处理器状态恢复成原来的状态。 (8)PSW和PC被恢复成中断前的值,处理器开始一个新的指令周期,中断处理结束,中断处理(2),简单的中断处理过程,多个中断的处理(1),若中断处理过程中又发生中断,引起多中断处理问题 两种策略方法: 第一种: 处理一个中断时禁止中断,对任何新中断置之不理,在这期间发生的中断将保持挂起状态,当再次允许中断时,新中断信号被处理器检测到 软件实现方法: 在任何中断处理前使用禁止中断指令 在处理结束后开放中断指令 所有中断严格按照发生顺序处理 不考虑中断紧急程度,无法达到较严格时间要求,多中断处理第一种策略方法,第二种: 中断按照优先度分级 允许优先级高中断打断优先级低的中断处理过程 这样中断优先级技术将引起中断处理的嵌套 只要合适地定义中断的优先级别 方法一的弊端大都可以克服,多个中断的处理(2),多中断处理第二种策略方法,典型的中断处理(1):I/O中断,由I/O设备的控制器或者通道发出 两类I/O中断: I/O操作正常结束 如果要继续I/O操作,需要在准备好以后重新启动I/O,若请求I/O程序正处于等待I/O状态,则应将其唤醒 I/O异常 需要重新执行失败的I/O操作 重试次数有上限,次数过大,系统将判定硬件故障,系统多道能力的重要推动力量,时钟中断处理程序通常做与系统运转、管理和维护相关的工作,包括: 维护软件时钟:系统有若干个软件时钟,控制定时任务以及进程的处理器时间配额,时钟中断需要维护、定时更新这些软件时钟 处理器时间调度:维护当前进程时间片软件时钟,并在当前进程时间片到时以后运行调度程序选择下一个被调度的进程 控制系统定时任务:通过软件时钟和调度程序定时激活一些系统任务,如监测死锁、系统记帐、系统审计等 实时处理,典型的中断处理(2):时钟中断,典型的中断处理(3):硬件故障中断,硬件故障中断处理程序一般需要做的工作: 保存现场,使用一定警告手段,提供些辅助诊断信息 在高可靠系统中,中断处理程序还要评估系统可用性,尽可能恢复系统 如Windows 2000/XP,关键硬件发生故障时,如显示卡损坏,出现系统蓝屏,系统实际上进入相应故障处理程序,发现故障不可恢复,则在屏幕上打印出发生故障时程序位置,并开始进行内存转储(将一定范围的内存内容写上磁盘,是系统故障时的全系统“快照”),备日后故障诊断,程序指令出错、指令越权或者指令寻址越界而引发 两类处理方法: 只能由操作系统的相关扩展功能模块完成 多为程序试图作不能做的操作引起的系统保护 如访问合法的、但不在内存虚地址内,引发页故障页故障一般会引发OS虚存模块作一个页面换入 可由程序自己完成,如一些算术运算错误 不同程序可有不同处理方法,所以很多OS提供由用户自己处理这类中断的“绿色通道” 系统调试中断(断点中断、单步跟踪)也可被用户程序处理,用以支持各种程序调试,典型的中断处理(4):程序性中断,典型的中断处理(5):系统服务请求(自愿性中断),系统服务请求由处理器专用指令(访管指令)激发 如x86处理器提供int指令,用来激发软件中断 其他不少处理器则提供系统调用指令syscall 执行专用指令的结果是系统被切换到管态,并且转移到一段专门OS程序处开始执行 指令格式通常是指令名加请求服务识别号(中断号) OS利用处理器提供的这种接口建立系统服务体系 处理器一般不负责定义系统调用所传递的参数格式,DOS:21h号中断的系统服务功能以及参数列表 现代操作系统一般不提供直接使用系统调用指令的接口,通常做法:提供一套方便、实用的应用程序函数库(应用程序设计接口API) 从应用层面重新封装系统调用 屏蔽复杂的系统调用传参问题 高级语言接口,有助于快速开发 有的系统在更高层面提供系统程序设计模板库和类库 如Windows 2000/XP提供封装系统

温馨提示

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

评论

0/150

提交评论