现代操作系统:输入/输出(5)

I/O硬件原理

I/O设备

I/O设备大致可以分为两类:块设备字符设备
块设备把信息存储在固定大小的块中,每个块有自己的地址,所有传输以一个或多个完整的块为单位。硬盘、CD-ROM和U盘是最常见的块设备。
字符设备以字符为单位发送或接收一个字符流,而不考虑任何块结构。字符设备是不可寻址的,打印机、网络接口、鼠标都可看做是字符设备。
但这种分类并不完美,比如时钟和内存映射的显示器就不属于这两类。

设备控制器

I/O设备一般由机械部件和电子部件两部分组成,电子部件称作设备控制器或适配器,它常以主板上的芯片的形式出现,或者以插入拓展槽中的PCB的形式出现。
控制器与设备之间的接口通常是一个很低层次的接口,控制器的任务是把串行的位流转换为字节块,并进行必要的错误校正。

内存映射I/O

每个控制器有几个寄存器用来与CPU进行通信。除了控制寄存器外,许多设备还有可供操作系统读写的数据缓存区
那么,CPU如何与设备的控制寄存器和数据缓存区进行通信呢?

方法一:单独的I/O和内存空间

每个控制寄存器被分配一个I/O端口号,所有I/O口形成I/O端口空间;CPU可以通过指令读取控制寄存器的内容并将结果存入到CPU寄存器中,或者反之。

方法二:内存映射I/O

将每个控制寄存器映射到唯一的内存空间中。

直接存储器存取(DMA)

DMA控制器独立于CPU访问系统总线,它包含若干个可以被CPU读写的寄存器,其中包括一个内存地址寄存器、一个字节计数寄存器和一个或多个控制寄存器。控制寄存器指定要使用的I/O端口、传送方向、传送单位等。
使用DMA时:

  1. CPU设置DMA控制器的寄存器,确定将什么数据传送到什么地方。DMA再通知I/O设备(如磁盘)读数据到其自身的缓冲区中;
  2. DMA在总线上发出读请求到设备,发起DMA传送;
  3. 要写入的内存地址在总线的地址线上,设备将缓冲区中的数据写入内存;
  4. 写操作完成时,设备在总线上发送一个应答信号大DMA;
  5. DMA步增内存地址,步减字节计数,如果没传完,继续第2到4步;
  6. 字节计数为0时,说明设备向内存写完成,DMA向CPU发送中断。

I/O软件原理

I/O软件的目标

在设计I/O软件时一个关键的概念是设备独立性,即能够编写无需指定设备的通用的程序。
另一个问题是同步(阻塞)和异步(中断驱动)传输。大多数I/O是异步的——CPU启动传输后便转去做其他工作,直到中断发生。
另一个问题是缓冲,数据离开一个设备后通常并不能直接存放到其最终的目的地,因为需要消除缓冲区填满速率和缓冲区清空速率之间的相互影响。
最后是共享设备和独占设备的问题,有的设备可以同时让多个用户使用,有的则只能让一个用户独占。

方法一:程序控制I/O

有三种不同的控制I/O的方法,首先是让CPU做全部工作,即程序控制I/O。
程序控制I/O的最根本方面在于:输出一个单位数据后,CPU要不断地查询设备以了解它是否就绪准备接收另一个字符。这一行为常称为轮询忙等待
该方法十分简单,但是会在任务完成前占用CPU的全部时间。

方法二:中断驱动I/O

允许CPU在等待打印机变为就绪的同时做某些其他事情的方式是使用中断。

方法三:使用DMA的I/O

中断驱动I/O的一个明显缺点是中断发生在每个字符上,中断要花费时间,所以这一方法将浪费一定数量的CPU时间。此处的思路是让DMA控制器一次给打印机提供一个字符,而不必打扰CPU。本质上DMA也是程序控制I/O,但DMA承担了这个工作。

I/O软件层次

I/O软件通常组织成四个层次:

硬件->中断处理程序->设备驱动程序->与设备无关的操作系统软件->用户级I/O软件。

设备驱动程序

每个连接到计算机上的I/O设备都需要某些设备特定的代码来对其进行控制,这样的代码称为设备驱动程序。每个操作系统都需要自己的驱动程序。
为了访问设备的硬件(设备控制器的寄存器),设备驱动程序通常必须是操作系统的一部分。
驱动程序不允许进行系统调用,但它们经常要和内核的其余部分进行交互。对某些内核过程的调用通常是允许的。

与设备无关的I/O软件

与设备无关的软件的基本功能是执行对所有设备公共的I/O功能,并且向用户层软件提供一个统一的接口。

设备驱动程序的统一接口

对于每一种设备类型,如磁盘或打印机,操作系统定义一组驱动程序必须支持的函数。如读和写、开关机、格式化等。

缓冲

考虑从设备读入数据,一种方式是在用户空间设置一个缓冲区,然后在内核空间设置两个缓冲区。当第一个内核缓冲区填满之后,在它被清空之前,使用第二个缓冲区;当第二个缓冲区填满时,就可以将它复制给用户;当第二个缓冲区正在复制到用户空间时,第一个缓冲区接收输入。
两个缓冲区轮流使用:当一个缓冲区正在被复制到用户空间的时候,另一个缓冲区正在收集新的输入。这样的缓冲模式称为双缓冲
缓冲是一种广泛采用的技术,但如果数据被缓冲太多次,性能就会降低。

现在我们开始研究某些实际的I/O设备。先从盘开始。
盘具有多种多样的类型,如磁盘、光盘等。

盘的硬件

磁盘

磁盘被组织成柱面,每个柱面包含若干磁道,磁道数与垂直堆叠的磁头数相同。磁道又被分成若干扇区。现代磁盘被划分成环带,外层的环带比内层的环带拥有更多的扇区。
为了隐藏每个磁道有多少个扇区的细节,大多数现代磁盘都有一个虚拟几何规格呈现给操作系统。软件在工作时仿佛存在着x个柱面,y个磁头,每磁道z个扇区,而控制器则将对(x,y,z)的请求进行重映射到实际的柱面、磁头和扇区。

RAID

RAID的基本思想是将一个装满了磁盘的盒子安装到计算机(通常是大型计算机)上,用RAID控制器替换磁盘控制器卡,将数据复制到整个RAID上,然后继续常规的操作。
RAID将数据分布在全部驱动器上,这样就可以并行操作。

CD-ROM

CD-ROM拥有巨大的容量和低廉的生产成本,但其速度远不如磁盘。CD-ROM拥有自己的文件系统。

可刻录CD

物理上,可刻录CD在开始的时候是像CD-ROM一样的120mm的聚碳酸酯空盘,不同的是前者包含一个0.6mm宽的凹槽来引导激光进行写操作。

可重写CD

可重写CD也使用与CD-ROM相同尺寸的介质,但使用合金取代染料。

DVD

DVD是10家消费性电子公司的联盟在主要的好莱坞制片厂的紧密协作下设计的,主要用来存储电影。

磁盘格式化

硬盘由一叠铝的、合金的或玻璃的盘片组成,在每个盘片上沉积着薄薄的可磁化的金属氧化物。
在使用磁盘之前,每个盘片必须经受由软件完成的低级格式化
格式化的结果是磁盘容量减少,减少的量取决于前导码、扇区间间隙等。通常格式化的容量比未格式化的容量低20% 。
在低级格式化完成后,要对磁盘分区。在逻辑上,每个分区就像是一个独立的磁。分区对多个操作系统共存是必需的。
最后,对每个分区进行一次高级格式化。这一操作要设置一个引导块、空前存储管理、根目录和一个空文件系统,还要讲一个代码放在分区表项中,以表明在分区中使用了那种文件系统。

时钟

时钟硬件

时钟由三个部件构成:晶体振荡器、计数器和存储寄存器。

时钟软件

时钟软件通常包括下面的大多数任务:

  • 维护日时间
  • 防止进程超市运行
  • 对CPU的使用情况记账
  • 处理用户进程提出的alarm(报警)系统调用
  • 为系统本身的各个部分提供看门狗定时器
  • 完成概要剖析、监视和统计信息收集

用户界面:键盘、鼠标和显示器

输入软件

用户输入主要来自键盘和鼠标,在个人计算机上,键盘包含一个嵌入式微处理器,通过一个串行端口(或USB)与主板上的控制芯片通信。每当一个键被按下时会产生一个中断,当键被释放时还会产生第二个中断。当发生中断时,键盘驱动程序都会从相关I/O口提取信息。
虽然键盘与显示器在逻辑上是两个独立的设备,但用户已经习惯于看到他们刚刚键入的字符出现在屏幕上,即回显
光学鼠标在其底部装有一个或多个发光二极管和光电探测器,并有图像处理芯片可以处理处于他们下方的连续的低分辨率照片,寻找从图像到图像的变化。

输出软件

X窗口系统

几乎所有UNIX系统的用户界面都以X窗口系统为基础,在Linux系统上,流行的Gnome和KDE桌面环境就运行在X之上。
当X在一台机器上运行时,从键盘或鼠标采集输入并且将输出写到屏幕上的软件称为X服务器(X server),它跟踪当前选择了哪个窗口(鼠标指针所在处),这样它就知道将新的键盘输入发送给哪个客户。它与称为X客户(X client)的运行中的程序进行通信,它将键盘与鼠标输入发送给X客户,并且从X客户接收显示命令。
X服务器总是在用户的机器上,但X客户有可能在远方的远程计算服务器上。
X只是一个窗口系统,而不是一个完全的GUI。
与Windows类似,X是高度事件驱动的。

图形用户界面(GUI)

GUI拥有WIMP四个基本要素。分别代表窗口(windows)、图标(icon)、菜单(menu)和定点设备(pointing device)。窗口是一个矩形块状的屏幕区域,用来运行程序。图标是小符号,可以在其上点击导致某个动作发生。菜单是动作列表,可以让用户从中选择。定点设备是鼠标等,用来在屏幕上移动光标以便选择项目。
GUI可以在用户级代码中实现(如UNIX),也可以在操作系统中实现(如Windows)。
GUI的输入仍然是键盘、鼠标,但输出几乎总是送往特殊的硬件电路:图形适配器(显卡)。显卡包含特殊的内存,称为视频RAM


窗口可以包含一个标题条、一个菜单条、一个工具条、一个垂直滚动条和一个水平滚动条。
Windows程序是面向消息的,键盘和鼠标的操作被Windows捕获并转换成消息,送到正在被访问的窗口所属于的程序。每个程序都有一个消息队列,与程序的所有窗口相关的信息都被发送到该队列中。
Windows程序通常创建一个或多个窗口,每个窗口具有一个类对象。
对屏幕的实际绘图是由包含几百个过程的程序包处理的,这些过程统称为图新设备接口(GDI)

瘦客户机

大多数用户想要高性能的交互式计算,但不想管理一台计算机,这就导致了瘦客户机的出现。基本思想是从客户机剥离一切智能和软件,而只是将其作为一台显示器,使所有计算都在服务器端完成。客户机和服务器之间的协议只是通知显示器如何更新视频RAM。

                    <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
                        </div>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值