李彤《操作系统原理》第6章-设备管理.pptVIP

李彤《操作系统原理》第6章-设备管理.ppt

  1. 1、本文档共174页,可阅读全部内容。
  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文档。上传文档
查看更多
【算法6.19 ttclose】 功能:关闭终端tp,释放输入输出缓冲区,切断进程与tty的联系。 调用格式:ttclose (tp)。 输入:终端tty结构指针tp。 输出:无。 返回 清tp对应的进程组名 ttclose( tp) N Y ttioctl(tp,LDCLOSE,0,0) tp没被打开? 清tty的内部状态ISOPEN标志 图6.46 ttclose算法流程 【算法6.20 ttread】 功能:把在标准输入队列t_canq中的数据传送到调用进程的用户数据区u_base。 调用格式:ttread(tp)。 输入:指向tty结构的指针tp。 输出:无。 ttread(tp) 标准输入队列t_canq为空? 字符未传送完且未出错? 要传送字符数≥一块? tp的t_state 为TBLOCK且t_rawq字符计数小于低水平标志? 调用canon(tp)将原始输入队列t_rawq的数据加工传送到t_canq队列中 从t_canq队列中取一字符,并送入当前用户数据区u_base u_count-- 返回 启动终端tp读入字符 调用getcb从t_canq队列中取一缓冲区cp(未取到则退出循环) 将cp中字符数与要传送字符数u_count的最小值计入n中 调用copyout将cp中数据复制到用户数据区u_base 释放cp所指的缓冲区到cfreelist,u_base=u_base+n,u_count=u_count-n N N N N Y Y Y Y 图6.47 ttread算法流程 【算法6.21 ttwrite】 功能:当输出队列中字符足够多时,启动终端将其输出;把要输出的字符从用户数据u_base取出加工,然后传到输出队列中。 调用格式:ttwrite (tp)。 输入:指向tty结构的指针tp。 输出:无。 把字符逐个取出送入输出队列中 返 回 返 回 终端逻辑上不活动? 数据没传输完u_count0? 输出队列中字符足够多? 提高处理机运行级别 输出队列中字符足够多? 启动输出,置t_state为OASLP 睡眠,直到输出完成 降低处理机运行级 提高处理机运行级 启动终端输出 降低处理机运行级 u_count输出缓冲区能存字符的一半? 从cfreelist中申请一空闲缓冲区cp(申请不到则退出循环),并把用户数据区u_base中要传送的字符复制到cp中 n=min(u. u_count,cp→c_last), u_base=u_base+n, u_count=u_count-n 把字符从cp排入输出队列t_outq中 N Y Y Y Y Y N N N N ttwrite(tp) 图6.48 ttwrite算法流程 【算法6.22 ttioctll】 功能:根据cmd的要求,完成以下功能: (1)当cmd = LDOPEN时,为输入缓冲区t_rbuf分配一个空闲缓冲区。 (2)当cmd = LDCLOSE时,释放输出缓冲区t_tbuf和输入缓冲区t_rbuf。 (3)当cmd = LDCHG时,将原始输入队列变为原始输入队列接入加工队列之后的队列。 调用格式:ttioctl(tp,cmd,arg,mode) 输入: 指向tty结构的指针tp;cmd;arg:状态改变码; mode:空缺不用。 输出:无。 提高处理机运行级 启动终端输出 降低处理机运行级 等待输出完成 冲刷终端tty各队列 t_tbuf指针不空? t_rbuf指针不空? 释放t_rbuf所指缓冲区,置t_rbuf的指针为空 释放t_tbuf所指缓冲区,置t_tbuf的指针为空 返 回 返 回 返 回 switch(cml) t_rbuf指针空? 未收到吗? 从cfreelist中取一空闲缓冲区分配给t_rbuf t_rbuf指针置空,cfreelist的标志c_flag置1,睡眠等待cfreelist可用 为t_rbuf的c_count和c_size置初值为cfreelist c_size 启动终端输入 提高处理机运行级 t_canq不空? t_rawq不空? t_canq队列计数加上t_rawq队列计数,t_rawq队列连接到t_canq队列尾部 t_rawq队列指向t_canq队列,t_canq队列指向空 分隔符计数置为t_rawq队列字符计数,降低处理机运行级 ttioctl(tp,cmd,arg,mode) LDCLOSE LDCHG LDOPEN Y Y Y Y Y Y N N N N N 图6.49 ttioctl算法流程 6.11UNIX系统块设备驱动 UNIX System Ⅴ对块设备的管理分为三个层次。 最低层是设备驱动程序和适配器的管理; 中间一层为缓冲区队列管理; 最

文档评论(0)

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

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

版权声明书
用户编号:8135026137000003

1亿VIP精品文档

相关文档