- 1、本文档共78页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机操作系统之设备管理,操作系统设备管理,计算机操作系统,计算机操作系统pdf,计算机操作系统教程,计算机操作系统第四版,计算机操作系统原理,计算机操作系统是一种,计算机操作系统视频,计算机操作系统第三版
三、Getbuf和Putbuf过程 Getbuf(type) Begin wait(RS(type)); wait(MS(type)); B(number):=takebuf(type); signal(MS(type)); end Putbuf(type) Begin wait(MS(type)); addbuf(type,number); signal(MS(type)); signal(RS(type)); end 5.4 设备分配 包括:对设备、设备控制器、通道的分配 5.4.1 数据结构 一、设备控制表DCT: 二、控制器控制表(COCT),通道表(CHCT),系统设备表(SDT),图5-17 SDT:记录了系统中全部设备及其驱动程序地址。 设备控制表DCT DCTn DCT2 DCT1 设备队列的对首指针 重复执行次数或时间 指向控制器表的指针 设备状态:等/不等 忙/闲 设备标识符:deviceid 设备类型type 5.4.2 设备分配应考虑的若干因素 一、设备的固有属性: 共享+虚拟:注意调度的合理性; 独享:排它性分配,控制不好可能死锁。 二、分配算法: (1)FIFO; (2)优先权。 5.4.2 设备分配应考虑的若干因素 三、安全性: 安全分配(同步):每进程获得一I/O后,即block,直到其I/O完成。 即打破了死锁条件。 缺点:CPU、I/O对该进程是串行,进程进展缓慢。 不安全分配(异步):需进行安全性检查,进程执行效率高。 5.4.3 设备独立性 一、概念: 即设备无关性,指应用程序独立于具体使用的物理设备。 逻辑设备 物理设备 逻辑设备表(LUT): Driver入口 物理设备 逻辑设备 5.4.3 设备独立性 分配流程:进程给出逻辑名——通过LUT得到物理设备及其driver入口。 优点: 设备分配更灵活; 逻辑设备和物理设备间可以是多——多的映射关系。提高了物理设备的共享性,以及使用的灵活性。如: 某逻辑名可对应这一类设备,提高均衡性与容错性。 几个逻辑名可对应某一个设备,提高共享性。 5.4.3 设备独立性 易于实现I/O重定向。 不变程序,只需改变LUT表的映射关系。 二、设备独立性软件 执行所有设备的公有操作 分配回收 名字映射 保护 缓冲 差错控制 向用户层软件提供统一接口 read、write Struct general_op{ int (*read)(…) int (*write)(…) }; driver1: Struct general_op dev_op={ dev1_read, dev1_write }; driver2: Struct general_op dev_op={ dev2_read, dev2_write }; Gen_read(fd,…) { dev_op=map(fd); dev_op-read(…); } 5.4.3 设备独立性 三.名字映射 LUT的生成 在用户进程第一次请求设备时完成映射并在LUT中生成相应项 LUT的配置 (1)整个系统一张LUT表: 要求:逻辑名不重复,(一般用于单用户系统) (2)每个用户一张LUT表。 可重名/可限制用户对某些设备的使用。 Driver入口 物理设备 逻辑设备 5.4.4 独占设备分配程序 进程n请求设备: begin search (sdt, phdevice) if not busy (phdevice) then begin compute(safe)——对独占设备 if safe then alloc (n, phdevice); else begin insert (DL(phdevice), n);-----将n插入设备等待队列DL上 return end; end; 设备忙—else begin; insert (DL (phdevice), n); return; end; controllerid=controllerid (COCT ptr(dct)); ――device分配成功 if not busy (COCT (controllerid)) then alloc (n, controllerid); else begin insert (col, n); return; end; channeled=channeled(chatptr (controllerid)); ――控制器分配成功 if not busy (chct (channelid)) then allocation (n, channelid); else begin insert (chl, n) return; end; end; 优化: 1)增加设备的独立性 2)考虑多通路情况 5.
文档评论(0)