首页 > 其他分享 >王道--第五章 输入输出管理

王道--第五章 输入输出管理

时间:2023-05-24 15:25:23浏览次数:39  
标签:5.1 驱动程序 -- 输入输出 王道 传输速率 IO 寄存器 设备

5.1.1 IO设备的概念和分类

按使用特性分类:人机交互类外部设备(鼠标、键盘、打印机等,用于人机交互,数据传输速度慢);存储设备(移动硬盘、光盘等,数据传输速度快);网络通信设备(调制解调器、路由器等,用于网络通信,数据传输速度介于上述二者之间)

按传输速率分类:低速设备(鼠标、键盘等,传输速率为每秒几个到几百字节);中速设备(激光打印机等,传输速率为每秒数千个到上万个字节);高速设备(磁盘等,传输速率为每秒数千字节到千兆字节的设备)

按信息交换的单位分类:块设备(如磁盘等,数据传输的基本单位是“块”,传输速率较高,可寻址,即对它可随机地读/写任一块);字符设备(鼠标键盘等,数据传输的基本单位是字符,传输速率较慢,不可寻址,在输入/输出时常采用中断驱动方式)

 

 


5.1.2 IO控制器

一个I/O控制器可能会对应多个设备;

数据寄存器、控制寄存器、状态寄存器可能有多个(如每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便CPU操作。有的计算机会让这些寄存器占用内存地址的一部分,成为内存映像I/O;另一些计算机则采用I/O专用地址,即寄存器独立编址。

 

 


 

5.1.3 IO控制方式

程序直接控制方式

中断驱动方式

DMA方式

若想读入多个离散的块,CPU要发送多次命令。

通道控制方式

 

 


5.1.4 IO软件层次结构

为何不同的设备需要不同的设备驱动程序?不同设备的内部硬件特性不同,这些特性只有厂家才知道,因此厂家须提供与设备相对应的驱动程序,CPU执行驱动程序的指令序列,来完成设置设备寄存器,检查设备状态等工作。

中断处理程序和设备驱动程序都需要和硬件直接打交道。

 

 


 

5.1.5 输入输出应用程序接口&设备驱动程序接口

 

 


 

5.2.1 IO核心子系统

 

 

 


 

5.2.2 假脱机技术

脱机:脱离主机的控制进行输入/输出操作。

(因为还有用户进程)

 

 


5.2.3 设备的分配与回收

 

只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可启动I/O设备进行数据传送。

 

 


 

5.2.4 缓冲区管理

结论:采用单缓冲策略,处理一块数据平均耗时MAX(C,T)+M

结论:采用双缓冲策略,处理一个数据块的平均耗时为MAX(T,C+M)

 

标签:5.1,驱动程序,--,输入输出,王道,传输速率,IO,寄存器,设备
From: https://www.cnblogs.com/summerw/p/17426138.html

相关文章

  • geojson格式数据
    可以通过一下地址验证https://geojson.io/#map=11.2/38.2756/116.7917一个面数据的情况,features是一个数组,geometry的type=Polygon表示一个面数据,可以存放多个面数据,以下就存放了一个面{"type":"FeatureCollection","features":[{"type":&quo......
  • hive学习基础与调优
    一、Hive基础知识Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能(hive的HQL语法设计实际模仿Mysql的语法)。其本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储,说白了hive可以理解为一个将SQL转换为MapRedu......
  • 相机位姿比较
    单个相机旋转矩阵计算运动范围是否太大doublenormofTransform(cv::Matrvec,cv::Mattvec){returnfabs(min(cv::norm(rvec),2*M_PI-cv::norm(rvec)))+fabs(cv::norm(tvec));}计算旋转向量和平移向量的范数的函数:其中,旋转向量用rvec表示,平移向量用tvec表示。具体的,用......
  • Qt Creator按顺序编译多个子项目
    0.环境Qt5.3.2mingw482_321.创建子项目这个子项目类似于VisualStudio中解决方案一样的存在,用于管理多个其他子项目。点击文件->新建文件或项目->其他项目->子项目项目->Choose:之后下一步,选择需要的编译器,我这里只有mingw,若有msvc编译器也可选择msvc,不同的编译器生成的静......
  • Django 路由分发
    Django路由分发当一个url请求过来之后1、先到项目主目录下的urls内。2、由这个url做处理分发给其他app内的urls。一级路由:主目录urls内引入includefromdjango.conf.urlsimporturl,includeurlpatterns=[#指定分发的app目录名称url(r'^cmdb/',include("app0......
  • LinuxMint 安装 .NET 7 发生No SDKs were found.
    一、环境LinuxMint21.1二、安装方式1.通过系统软件管理器,搜索DotNetSDK安装.net7SDK2.dotnet--info查看.net信息,提示.NETSDKsInstalled:NoSDKswerefound.  3.查看安装程序(1)/usr/lib/dotnet检查/usr/lib/dotnet中,是否存在sdk,sdk-manifests,templates目录?(2)/us......
  • [React Typescript] useRef with HTML Elements
    Reactsetthereftonullinruntime.Itisalimitationnowforreact.import{useRef}from'react';exportconstComponent=()=>{constref=useRef<HTMLDivElement>(null);return<divref={ref}/>;}; ......
  • abap 宏的使用
    宏的使用宏(Macros)是一段独立的代码,能实现数据的运算和输出,功能与子程序类似,主要应用于同一程序中某些重复的运算,以简化代码。宏只能被本程序中定义于宏后面的语句调用。定义格式:DEFINEINCREMENT."INCREMENT是宏的名称.increment..."获取参数:第一个参数&1第......
  • Linux buffer/cache
    在Linux系统中,经常用free命令来查看系统内存的使用状态。在一个centos7的系统上,free命令的显示内容大概是这样一个状态:这里的默认显示单位是kb,可以通过添加-h参数,来让free命令显示的更为友好一些。[root@k8s-master-192~]#free-htotalused......
  • 三款Github Copilot的免费替代
    大家好我是费老师,提起GithubCopilot,相信很多读者朋友们都听说过甚至使用过,作为Github研发的一款先进的编程辅助插件,它可以在我们日常编写代码的过程中,根据代码的上下文内容、注释等信息自动推断生成高质量的代码,很大程度上提升我们的代码编写效率。而自从去年8月GithubCop......