7.8 显示管理

目录

一 概述

二 GUI系统的基本原理

三 进一步细化


一 概述

   显示管理主要跟图形用户界面相关。早期的操作系统,用户交互界面,主要是通过命令行方式,也就是常说的字符界面进行的。这对于科学计算够用了,对于简单的管理系统也能满足。最近还有消息说,美国一个机场还在使用六十年代IBM开发的一款字符界面的管理系统。不过,不管怎么说,字符界面的交互友好性还是差点,且对于不了解计算机原理的普通消费者而言,存在使用门槛。当然了,早期的硬件条件也不允许图形用户界面,CPU的速度太慢,内存太小。

   随着各方面的发展,图形用户界面逐渐的流行起来,计算机产品也从专业人士使用逐渐转向普通大众。技术的发展,带动了一批新的产业,甚至行业。

   图形用户界面系统简称GUI系统。这并不是操作系统内核必备的,Linux内核并不包含GUI系统,只是有最底层的显存管理驱动,开发者可以在内核提供的驱动基础上自行开发自己的图形用户界面系统。这种情况衍生出来的结果就是,基于Linux的许多产品,都有其自己独特的图形用户界面。像Linux桌面发行版,每一种发行版,都有其自己的图形用户管理系统。比如,流行的Ubuntu发行版,使用了叫Gnome的GUI系统,RedHat发行版、Fedora发行版等也都有各自的GUI系统。嵌入式领域,就更加百花齐放了。像国产飞漫科技开发了一款嵌入式系统上流行的轻便GUI系统,叫MiniGUI,还有其他多种流行的GUI系统。

   不同于Linux核心系统,自从Windows3.0开始带有图形界面后,其系统并不单独区分核心和GUI,用户不可能离开图形界面而单独运行核心。但不管如何实现,GUI模块的基本原理都是差不多的。

   不过,话又说回来,GUI系统虽然原理上差不多,但是实现上,差别不小。有复杂的、有简单的、有好的、也有差的。好的GUI系统设计,是一款消费类电子产品能否打入市场的基础,是获得市场青睐的重要因素。通过漂亮的用户界面,给用户充满惊喜的第一感觉,从而吸引用户使用。当年,微软视窗系统的流行就是因为简单好用。所以任何时候,简单都不过分。因为只要是大众产品,面对多样的用户群,那就不能复杂。这里说不能复杂,并非具体的实现,而是使用上。产品内部的实现技术可以很复杂,用户也不会关心这一点,功能也可以很强大,可以很多,这一点用户倒挺在乎,但是,所有功能的使用上,则都必须要很简单,不要给用户一大堆选择和配置。而且,不仅使用要简单,体验也要好。所以说,做到简单,其实是很不容易的。如何把背后复杂的技术的东西隐藏起来,同时又能展现技术成果的预期目标,是要下一番功夫的。苹果产品的流行,就与它具备强大的功能,同时又有简单、易用又漂亮的界面分不开的。

   这里举一个例子。《软件随想录》中有一章介绍了有关iPod的设计,是关于音量控制滚轮的。作者提到,那种齿轮滑动过程中,视觉和声响的联动设计,令用户爱不释手。最终形成视觉第一冲击力,且炫而不空。

二 GUI系统的基本原理

   上面,我们提到了,GUI系统的基本原理是一样的,具体实现上则不同。那么,这里我们就看看,它的基本原理是什么。

   从基本的表现上来看,无论是电脑屏幕,还是手机屏幕,亦或是其他带显示的设备的屏幕,在正常运行过程中,都可能存在多个可点击的地方,而不管这种点击是鼠标点击还是按键移动点击,亦或是触摸方式。以大家最熟悉的window的运行屏幕来讲,我们可以做到这样一点:在屏幕的一小块看电影,另一块运行其他软件,屏幕下方可以编辑文本,等等。如下图所示:

 

   如上图所示电脑运行环境,如果我想调整电影的播放进度,则在左上角区域点击鼠标,操作播放器即可。如果想要在记事本里写文档,点击右下角即可。当然也可以一边编辑文本,一边看电影。之所以能够做到这一点,从我们前面的介绍来看,是因为操作系统支持多个进程同时运行。这次,我们从显示的角度来看,要做到这一点,操作系统必须还要支持多进程的输出,并且可以调整输出区域,即在屏幕上所占据的大小。跳过中间的过程,所有这些程序的界面展示数据,是需要输出到最终的一个显卡的显存中才能展示出来的,而且每次都要是完整的。大家可以回忆一下显存模型部分的内容。虽然,显存可以足够大,因为它的属性类似内存,但是,显卡只有一个,其内容是要输出到物理显示屏幕上。为了实现连续输出,我们这里可以认为,显存能够保存多屏的数据,就是说,CPU可以将当前以及未来一个小时间段内,要输出到屏幕的数据,都保存到显存中,这就如照相用的胶卷,显存中预存了几片,如下图所示:

 

   从图中也可以看出,虽然可以保存多帧,但是每一帧,都是一个完整的输出,而不是说这一次输出左上角部分,下一次输出右下角部分,不是这样的。所以,我们说,CPU需要将一次要输出的内容,完整的存放到显存中。那这样一来,就如最开始的屏幕截图,某一个时刻,显存中的内容,显然同截图是一样的。就如胶卷的一小幅。当这一帧一帧的图像,不断的输出到屏幕上时,我们就看到了整体的效果,左上角图像在动,右下角编辑框内容在更新,整个过程类似放电影那样。

   如此一来,我们再还原中间跳过的部分。每一个进程有自己的输出,操作系统知道输出的数据在内存的什么地方,也知道输出区域的大小和位置。每一个进程的,操作系统都清楚。而且,操作系统也知道那些在最上层展示,那些是被盖住的。这样,在最终展示前,操作系统就可以按照这种前后覆盖的关系,按照大小和位置,将每一部分要显示的数据,叠加到显存中,组合出最终要输出的那一帧。如下图所示:

 

   上图展示的过程,就是GUI系统的基本原理。说白了,最终从屏幕上看到的,就是叠加组合的结果。

   关于叠加,并不是随意的叠加。GUI的设计者们,将其抽象为数学模型,最终产生了Z序的概念。如下图所示(图片来自网络):

 

   简单来说,所谓Z序,就是将要显示的小区域,暂且称为窗口,按照前后叠加关系,在以垂直屏幕的方向作为Z轴的三维空间里放置。当我们关闭我们直接能看到的窗口时,后面被其遮住的窗口就显示出来了。这块相关的实现,是GUI系统的核心部分。

三 进一步细化

   正如我们刚才提到的窗口概念,单纯实现Z序,并不能作为一个完整的GUI系统。在屏幕上,我们不仅看到了多个程序的输出,而且,每一个程序的输出窗口都是完整的。可能包含了按钮,输入框,选择框等等。这些东西也是组成GUI系统必不可少的。我们把这种相对独立展示的显示元素,称为控件。一套完整的GUI系统,并不只是单个图像的输出,而是一整套控件的输出。控件,起到了方便信息传递的作用,简化了用户的使用,丰富了交互手段。一个按钮,很形象的展示,用户一看,就知道它可以点一下,起到了跟实际生活中的按钮相同的效果和作用。进一步的,一套完整的GUI系统,不仅要关心显示输出,还需要关心输入,关心事件。就如按钮,点一下就应该有反应,有响应。也就是说,它要对点击事件有响应。只有这一整套概念都配置齐全了,才可以称得上是一个GUI系统。而只有这一整套都完美结合,才可以称得上是一个好的GUI系统。

   补充一个说明。用户点击的鼠标位置,实际上是一个虚拟的数据,要理解这一点,需要排除我们眼睛直观的感受,来理解GUI系统。当我们在屏幕上点击鼠标时,鼠标驱动模块就可以拿到鼠标点击的位置(比如,鼠标初始化在某一个点,后续的位置,都可根据移动计算出来)。此时,这个位置只是一个孤立的点,跟显示部分还关联不上。然后,系统将这个点的坐标交给GUI,GUI就如同我们的眼睛,对屏幕上什么位置有什么东西,一清二楚。GUI查找屏幕上鼠标点击坐标所在位置是什么,可能是一个按钮的部分,可能是一个编辑文本,等等。接着,GUI将坐标交给所在位置的控件,该控件响应事件,做出反应。比如,按钮的话,就改变颜色,让人看着就像是被按下去那样。整个过程一气呵成,直观感受就是点了一个按钮,按钮就被按下去了。这整个过程就如下图所示:

 

   最后,我们再从GUI系统回到显示管理上。读者可以更深入的体会软件设计的精妙之处。从底层最基础的显示管理模块,到一套完整的图形用户界面,中间真可谓是翻山越岭,山路十八弯。最后,我们看到的效果,则是虚虚实实,实实虚虚,像变魔法一般。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙赤子

你的小小鼓励助我翻山越岭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值