第四章 UNIX的设备管理.pptVIP

  1. 1、本文档共79页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章 UNIX的设备管理

第四章 UNIX的设备管理 设备管理的主要任务是管理系统中的所有外部设备。UNIX系统把设备分为两类: (1) 块设备。用于存储信息,其对信息的存取是以信息块为单位的,如通常的磁盘、磁带等; (2) 字符设备。用于输入/输出程序和数据,其对信息的存取是以字符为单位的,如通常的终端设备、打印机等。 4.1 设备缓冲管理 在现代操作系统中,无论是字符设备还是块设备,在进行I/O操作时,都须借助于缓冲,以缓和 CPU与 I/O设备速度不匹配的矛盾。在UNIX系统中也不例外,该系统分别为字符设备和块设备设置了缓冲池。 一 块设备缓冲队列的结构 UNlX系统在文件子系统和块设备驱动程序之间设置了大量的数据缓冲区,供磁盘和磁带机使用,以减少对磁盘的I/O操作次数。每个缓冲区的大小与盘块的大小相当,以便在一个缓冲区中存放一个或多个磁盘块内容。盘块的大小一般在512~4096字节之间。由于盘块缓冲区的容量较大,使用上也较复杂,因此UNIX系统中的盘块缓冲区的组成方式不同于字符缓冲区。 1 数据缓冲区及其首部 每一个数据缓冲区均由两部分组成:一部分是用于存放数据本身的数据缓冲区,另一部分是缓冲控制块,也称缓冲首部,用于存放缓冲区的管理信息。两者一一对应,但缓冲首部与缓冲区在物理上并不相连,只是在缓冲首部中用一个指向对应缓冲区的指针,把两者联系起来(如下图所示)。 1 数据缓冲区及其首部 每一个数据缓冲区均由两部分组成:一部分是用于存放数据本身的数据缓冲区,另一部分是缓冲控制块,也称缓冲首部,用于存放缓冲区的管理信息。两者一一对应,但缓冲首部与缓冲区在物理上并不相连,只是在缓冲首部中用一个指向对应缓冲区的指针,把两者联系起来(如下图所示)。 缓冲区头部结构 struct buf{ Int b_flags;//是个标志位,含状态信息,包括有B_READ,B_WRITE,等 struct buf *b_forw; /* 后面 */ struct buf *b_back; struct buf *av_forw; struct buf *av_back; int b_dev; /* 主设备号 */ int b_wcount; /* 传输数据 */ char *b_xmem; /* 核心地址高字节 */ char *b_blkno; /* 块号 */ char b_error; /* 返回字符 */ char *b_resid; /* 错误后,没有被传输的字 */ }buf[NBUF] 缓冲首部还包括设备号和块号,以分别指出对应的文件系统和磁盘上的数据块号。必须说明,在UNIX System V中,设备号并非物理设备号,而是逻辑设备号,核心把每一个文件系统看作一个逻辑设备。缓冲首部中的状态字段用于指出对应缓冲区的当前状态,用于表示缓冲区是否空闲、缓冲区是否为延迟写、是否有进程正在等待该缓冲区变为空闲、核心是否正在读或写该缓冲区等。缓冲首部还包括两个空闲链表指针及两个散列队列指针。前者分别指向空闲链表中的上一个和下一个缓冲区首部;后者分别指向散列队列中的上一个和下一个缓冲区首部。 struct devtab{ char d_active ; /*忙的标志设备状态信息 */ char d_errcnt; /* 错误返回的数目 */ struct buf *b_forw; /* 相应设备相关联的各缓存列表第一个缓冲区 */ struct buf *b_back; /* 相应设备相关联的各缓存列表最后一个缓冲区 */ struct buf *actf; /* 空闲链表的头指针 */ struct buf *actl; /* 空闲链表的尾指针 */ } 2、缓冲池结构 (1) 空闲链表。为了对缓冲区进行管理,在核心中设置一个双向链接的空闲链表。系统初启时,将所有的、缓冲首部都链入空闲链表中。当需要一空缓冲区时,从空闲链表的首部摘下一缓冲区;释放一缓冲区时,将它挂在空闲链的末尾。 (2) 散列队列。为了加速对缓冲区的查找,系统把所有的缓冲区分设备地、按其块号所计算的散列值的不同,组织

文档评论(0)

jiupshaieuk12 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档