- 1、本文档共30页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[其它]5-设备管理学位考 - 操作系统
第五章 设备管理 5.1 引言 有关外设的驱动、控制、分配等技术问题都统一由设备管理程序负责。 5.1.1 设备的概念和分类 (1)按功能分类,可以分为输入设备、输出 设备、存储设备、供电设备、网络设备等。 (2)从设备的数据组织方式分类,可以分为块设备和字符设备。 (3)从设备的管理模式分类,可以分为物理设备和逻辑设备。 (4)从设备的资源属性分类,可以分为独占设备、共享设备和虚拟设备。 UNIX中的系统调用 与进程管理和控制有关的系统调用 fork、exit、wait、signal、kill。 semget、semop、semctl。 与文件系统有关的系统调用 creat、open、close、read、write。 其它系统调用 times 5.3.2 UNIX系统中的时钟管理 每隔20ms处理的工作如下: 计算当前进程在用户态或核心态下的累计运行时间,将u.u_utime++或u.u_stime++。 当前运行进程p_cpu加1。 处理延时启动终端打印机的工作。clock若发现延迟时间到了,则重新启动对应的输出驱动程序。 每秒一次处理的工作如下: 日历时钟变量time加1。 所有进程的内存或对换区的驻留时间p_time++, 所有目前未运行进程的p_cpu除以2。 5.4.2 I/O通道技术 I/O通道是一种硬件设施,带有专用处理器的、有很强I/O处理功能的智能部件。 可以独立地完成系统处理器交付的I/O操作任务,通道具有自己专门的指令集,即通道指令。 通道执行来自处理器的通道程序,完成后只需向系统处理器发出中断,请求结束。 字节多路通道主要用于连接大量低、中速、以字节作为传输单位的I/O设备。 选择通道主要用以支持高速设备(如磁盘),每次只对一个设备进行数据传输。 成组多路通道以分时方式同时执行几道通道程序,每条通道指令可以传送一组数据, 5.6.2 磁盘调度算法 先来先服务调度(FCFS) 最短寻道时间优先法(SSTF) 5.6.2 磁盘调度算法(续) 扫描法(SCAN和C-SCAN) 5.7 UNIX系统V的设备管理 1.缓冲控制块buf 在系统初启时,核心根据内存大小和系统性能要求分配若干缓冲区。一个缓冲区由两部分组成:存放数据的内存数据(一般称为缓冲区)和一个缓冲控制块。缓冲区和缓冲控制块是一一对应的。系统通过缓冲控制块实现对缓冲区的管理。 struct buf { int b_flags; /* 缓冲区标志 */ struct buf *b_forw; /* 设备队列前向指针 */ struct buf *b_back; /* 设备队列后向指针 */ struct buf *av_forw; /* 自由队列前向指针 */ struct buf *av_back; /* 自由队列后向指针 */ dev_t b_dev; /* 逻辑设备号 */ unsigned b_bcount; /* 传送数据字节数 */ union { caddr_t b_addr; /* 缓冲区内存首地址 */ struct filsys *b_filsys; /* 超级块 */ } b_un; daddr_t b_blkno; /* 在磁盘上数据的块号 */ } buf[NBUF]; b_flags反映缓冲区的使用情况和I/O方式,如忙或闲、数据有效性、“延迟写”、正在读/写、等待缓冲区空闲等。 从buf的组成可见,它不仅包含了与使用缓冲区有关的信息,也记录了I/O请求及其执行结果。所以一般而言,buf既是缓存控制块,同时又可以是针对该缓存进行的I/O请求块。 为管理方便,系统还设置了自由缓存队列控制块bfreelist和进程图象传送控制块swbuf。这两个块结构与buf结构相同,但只用部分项,其余则弃之不用。 2.块设备表 struct iobuf { int b_flags; /* 该设备队列的状况标志 */ struct buf *b_forw; /* 指向本设备的第一个缓冲区 */ struct buf *b_back; //指向本设备的最后一个缓冲区 struct buf *b_actf; /* 指向本设备I/O请求队列 中第一个缓冲区 */ struct buf *b_actl; /* 指向本设备I
文档评论(0)