现代操作系统之输入输出(三)

来源:互联网 发布:java gui编程 对话框 编辑:程序博客网 时间:2024/05/18 02:28

时钟

时钟硬件

时钟又称为定时器,时钟负责维护实际,并且防止一个进程垄断CPU,此外还有其它的功能。

计算机中有两种类型的时钟,一种是连接到110V或220V的电源线上,这样每个电压周期产生一个中断,频率是50GHZ或60HZ。
另一种类型的时钟由三部分组成:晶体振荡器,计数器和存储寄存器。

可编程时钟通常具有几种操作模式——一次完成模式;方波模式(不停地循环),周期性产生的中断是时钟滴答。

可编程时钟芯片通常与包含两个或三个独立的可编程时钟,并且还具有许多其他选项。

大多数计算机都有一个电池供电的备份始终。

时钟软件

时钟硬件的全部工作是根据已知的时间间隔产生中断。
时钟的第一个功能是维护日时间,唯一要小心的就是越界。
第二个功能则是防止进程超时运行。最精确的记账方法就是每当一个进程启动时,便启动一个不同主席团定时器的辅助定时器。

进程可以请求操作系统在一定时间间隔之后向他们报警。警报通常是信号,中断,消息或类似的东西。

如果时钟驱动程序拥有足够的时钟,它就可以为每个请求设置一个单独的时钟。如果不是这样的情况,就必须用物理时钟来模拟多个虚拟实在。一种办法是维护一张表。

操作系统的组成部分也需要设置定时器,这些定时器被成为监视定时器。软盘在使用时是不旋转的。当数据要从如哪怕读出时,点击必须首先启动。只有当软盘以全速旋转时,IO才可以开始。

软定时器

一般而言,由两种方法管理IO——中断和轮询。
中断具有很短的等待时间,但是切换代价巨大。

软定时器避免中断。无论当内核因何种原因在运行时,在它返回到用户态前,都要检查实时时钟以了解软定时器是否到期。若到期,指向被调度的事件,而无需切换到内核态(因为已经在内核态)

如果软定时器未出现预定事件,则可以安排一个时间最大值。
如果应用程序对于偶然的时间间隔能够忍受美妙只有1000个数据包,那么软定时器和低频硬件定时器的组合可能比纯粹的中断驱动IO或纯粹的轮询要好。

用户界面:键盘,数据和监视器

输入软件

每当一个键被按下的时候都会产生一个中断,并且每当一个键被是否的时候还会产生第二个中断。


键盘软件

IO端口的数字是键编号,称为扫描码,而不是ASCII码。键盘按键不超过128个,一年次只需7位表示键编号。
当键按下时,第8位置零,当键释放时,第8位置1.跟踪每个键的状态是驱动的任务。

驱动程序可以断定哪些键被按下而位释放,尽管键盘接口将所有负担都加在软件之上,但是机器灵活。

键盘驱动程序可以采取两周可能的处理方法——在第一种中,驱动程序的工作只是接受输入并且不加修改的向上传递,这样,从键盘读数据的程序得到的是ASCII码的原始序列。
第二种方法是键盘都懂程序处理全部行内编辑,并且只将校正后的行传送给用户程序。

第一种处理方法是面向字符的,第二种处理方法是面向行的。最初它们分别被称为原始模式和加工模式。非规范模式与原始模式是等价的。

如果键盘处于规范模式,则字符必须存储起来直到积累完整的一行,因为用户随后可能决定删除一行中的一部分。即使键盘处于原始模式,程序也可能尚未请求输入,所以字符必须缓冲起来。
可以用专用的缓冲区(有固定的限制)或从池中分配(无限制)


将用户刚刚键入的信息显示在屏幕上称为回显。

鼠标软件

鼠标仅仅指出位置的变化,而不是绝对位置本身。

输出软件

文本窗口

当输出是连续的单一字体,大小和颜色的形式时,输出比输入简单。

为了更为复杂的更新屏幕,大多数驱动沉痼支持一系列命令来移动光标,在光标处插入或删除字符或行。这些命令常常被称为转义序列。

X窗口系统

当X在一台机器运行时,从键盘或鼠标采集输入并且将输出写到屏幕上的软件称为X服务器。他必须跟踪当前选择按个串口。这样就知道新的键盘输入发送个给哪个X客户,并从X客户接受显示命令。

X服务器总是位于用户的计算机内部,而X客户有可能在缘分的远程计算服务器上。X服务器的主要工作是在屏幕上显示位,所以让它靠近用户。

在单机上或通过网络咋iUNIX上运行X串口系统都是可行的。

X只是一个窗口系统,而不是完全的GUI。要获得完整的GUI,要在其上运行其他软件层。

X提供了一个工具包,组成了本征函数集。并以此为基础可以构建GUI。

大多数应用程序利用的是对Motif的调用,而不是对Xlib的调用。

窗口管理不是X本身的组成部分。一个单独的用户进程称为窗口管理器控制着屏幕上窗口的创建,删除以及移动。为了管理窗口,窗口管理器要发送命令到服务器噶偶是它作甚,。矿口管理器经常运行在X客户相同的机器上,但是理论上可以运行哎任何地方。


从程序到工作站大多数绘图命令都是单项发送的,不期望应答。其原因是传送时间长,会降低执行速度。

事件匆匆工作站流向程序,通常是为了相应人的某些行为。存在许多类时间,但是发送给一个沉痼的只有那些它宣传愿意处理的Windows事件。
事件是拍成队列的,程序从队列中读取数据,而操作系统不会主动调用应用程序中的过程。

X的一个关键概念是资源,资源是一个保存一定信息的数据结构。次元可以在多个进程之间共享。图形上下文将属性和窗口,在概念上与Windows的设备上下文相类似。

主循环由两条语句构成,并且在逻辑上比Windows中对应的循环要简单得多。第一个语句得一个事件,第二条语句对事件类型进行分配从而进行处理。


图形化用户界面

WIMP代表着窗口,图标,菜单和顶点设备。

GUI软件可以在用户级代码中实现(如UNIX系统中做的那样),也可以在操作系统中实现(Windows)

GUI系统的输入仍然使用键盘和鼠标,但是输出几乎总是送往特殊的硬件电路板,称为图形适配器。

Windows是面向消息的。每个程序都有一个消息队列,与程序的所有窗口相关的消息都被发送到该队列中。程序的主循环包括提取下一条信息,并且通过调用针对该消息类型的内部国产对其进行处理。在某些情况下,windows本身可以绕过消息队列而之间调用这些过程。

Windows由两种方法可以让一个程序做某些事情,一种方法是投递一条消息到消息队列,而另一种方法是发送一调消息到窗口,从而使Windows直接调用WndProc本身。

位图

GDI过程是矢量图形学的实力。

每一个网个方块的平均红,绿,蓝取值被采样并且保存为一个像素的值。这样的文件被称为位图。

位图具有一个问题是不能缩放。
Windows支持DIB(设备无关位图),扩展名bmp。在像素之前具有文件与信息头以及一个颜色表,这样的信息使得在不同的设备直接移动位图非常容易。

字体

TrueType字体不是位图而是字符的轮廓。每个TrueType字符数通过围绕其周界的一些列点来定义。