10 | 输入和输出设备:交互的演进

这篇具有很好参考价值的文章主要介绍了10 | 输入和输出设备:交互的演进。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前面我们已经介绍了操作系统的存储管理:内存和外存。今天,让我们来聊一聊操作系统是如何管理输入和输出设备的。

输入和输出设备有非常非常多。例如输入设备除了你常见的键盘、鼠标、触摸屏外,还有一些采集信息的传感器,如 GPS 位置、脉搏、心电图、温度、湿度等。我们会把关注点收敛在人机交互相关的设备管理上。

交互的演进

在计算机外部设备的演进上,人机交互设备的演进毫无疑问是最为剧烈的部分。

计算机刚出现的时候,人们使用“打孔卡 + 打印机”作为人机交互方式。这个时期还没有操作系统,表达意图非常痛苦,只能在打孔卡上打孔来发送指令。

但很快,人们找到了 “键盘 + 显示器”, 这对最为经典的人机交互设备。而随着计算机使用人群越来越多,以及使用场景的变化,人机交互的方式也相应地发生了一次又一次的改变。

10 | 输入和输出设备:交互的演进,架构2,交互

总结这些改变,我们会发现,人机交互在往越来越自然的方向发展。所谓自然,就是越来越接近于两个人直接的面对面沟通。

那么,这些人机交互的改变,对于操作系统来说又意味着什么呢?

输入设备

我们先看输入设备:键盘、鼠标、麦克风、摄像头。

键盘

键盘输入的管理机制和窗口系统的设计密切相关。为了让用户清楚键盘输入的目的地,窗口系统往往会有一个焦点窗口。

在窗口系统里面,窗口间还有父子关系,焦点窗口还会有父窗口,还有父窗口的父窗口,这些窗口属于活动窗口。

大部分情况下,键盘输入的事件会先发给焦点窗口,焦点窗口不处理则发给其父窗口,按此传递,直到有人处理了该按键事件,或者直到顶层窗口。

键盘从功能上来说,有两个不同的能力:其一是输入文本,其二是触发命令。从输入文本的角度来说,要有一个输入光标(在 Windows 里面叫 Caret)来指示输入的目的窗口。目的窗口也必然是焦点窗口,否则就会显得很不自然。

这个交互的呈现方式非常稳定,从 DOS 到 Windows/Mac,到 iOS/Android 都是如此。但是从触发命令的角度来说,命令的响应并不一定是在焦点窗口,甚至不一定在活跃窗口。

比如 Windows 下就有热键(HotKey)的概念,能够让非活跃窗口(Inactive Window)也获得响应键盘命令的机会。一个常见的例子是截屏软件,往往需要一个热键来触发截屏。

到了移动时代,键盘不再是交互主体,但是,键盘作为输入文本的能力很难被替代(虽然有语音输入法),于是它便自然而然地保留下来。

不过移动设备不太会有人会基于键盘来触发命令,只有常见的热键需求比如截屏、调大或调小音量、拍照等等,被设计为系统功能(对应的,这些功能的热键也被设计为系统按键)保留下来。

鼠标

鼠标输入的管理机制和键盘一样,和窗口系统的设计密切相关。但鼠标因为有位置,确定鼠标事件的目的地相比键盘事件要简单的多,大部分情况下,鼠标事件总是交给鼠标位置所属的窗口来处理,但也会有一些例外的场景,比如拖放。

为了支持拖放,Windows 操作系统引入了鼠标捕获(Mouse Capture)的概念,一旦鼠标被某个窗口捕获,哪怕鼠标已经移出该窗口,鼠标事件仍然会继续发往该窗口。

到了移动时代,鼠标已经完全消失(虽然在智能手机之前还是出现过 WinCE 这样的支持鼠标的移动操作系统),取而代之的是触摸屏。窗口系统也和 PC 时期完全不同,在屏幕可见范围内只有单个应用程序占满整个屏幕,这让交互的目的地确认不再是个问题。

麦克风

麦克风是一个非常有潜力的下一代输入设备。今天 IoT 领域如汽车、智能音箱都是很好的发展语音交互能力的场景。包括今天大行其道的手机,语音交互也是一个很好的补充。

交互方式不管怎么变化,其核心需要实现的都是这样的两大能力:输入文本和触发命令,这一点是不变的。

语音交互今天仍然还很不成熟,究其原因,语音交互在 IoT 领域还停留在触发命令为主,且哪怕是触发命令这一件事情,也还有重重关卡需要去突破。

在手机软件中,语音输入文本在部分软件中已经有较多应用,但是主要优势还在日常用语和长文本,在个性化场景如“输入人名之类”,较难达到好的结果。

从更本源的角度看,语音交互今天仍然在相对封闭的应用技术场景里面发展为主,而作为操作系统的主体交互手段,其能力必须是开放的。因为操作系统是开放的,场景是开放的。

摄像头

摄像头作为交互设备,除了引入语音,也引入了手势、表情。从表达能力来说,这是最为丰富也是最为自然的一种表达方法。但是技术所限,这种交互方式还只在萌芽阶段。微软的 Kinect 是一个非常经典的案例,它能够让玩家通过语音和手势发指令来玩游戏。

输出设备

输出设备主要负责向用户反馈信息。比如:显示器(显卡)、音箱(声卡)、打印机。输出设备的演化并不大,最主要的输出设备还是以显示器为主。

显示器

显示器虽然经历了 CRT 到液晶屏多代更新,但也只是支持的色彩更多(从黑白到彩色到真彩色),分辨率越来越高。实际上,从操作系统的软件治理角度来看,显示器并没有发生过实质性的变化。

为了让不同软件可以在同一显示器屏幕上呈现,操作系统引入了窗口系统的概念。每个软件有一个或多个窗口(Window,有时候也叫视图,即 View)。在 PC 操作系统中,不同窗口还可以层叠(Cascade)或平铺(Tile)。

通过引入窗口,操作系统在逻辑上把显示器屏幕这个有限的设备资源,分配给了多个软件。和 PC 不同的是,移动设备由于屏幕过小,所以操作系统选择了让软件的顶层窗口全屏占据整个屏幕。这让显示器屏幕的管理变得更为简单。

除了窗口系统,显示设备管理的另一大挑战是绘制子系统。窗口里面的内容是什么,呈现成什么样子,完全是软件来决定的,这就意味着软件需要绘制能力。

绘制能力牵涉面非常之广,在操作系统里面,往往有一个独立的子系统(通常叫 GDI)与之对应。这里我们简单罗列一下 GDI 子系统会涉及哪些东西。

2D 图形相关。包含 Path(路径)、Brush(画刷)、Pen(画笔) 等概念。

3D 图形相关。包含 Model(模型)、Material(材质)、Lighting(光照) 等概念。

文本相关。包含 Font(字体) 等概念。而字体又分点阵字体和 TrueType 字体。TrueType 字体的优势是可以自由缩放。今天我们见到的大部分字体都是 TrueType 字体。

图像处理相关。包含 Bitmap(位图) 对象及常见图像格式的编解码器 (Encoder/Decoder)。

窗口系统结合输入设备对应的事件管理系统、绘制 (GDI) 系统,我们就可以随心所欲地实现各类用户体验非常友好的视窗软件了。

但是,为了进一步简化开发过程,操作系统往往还提供了一些通用的界面元素,通常我们称之为控件 (Control)。常见的控件有如下这些:

静态文本 (Label);

按钮 (Button);

单选框 (RadioBox);

复选框 (CheckBox);

输入框 (Input,也叫 EditBox/EditText);

进度条 (ProgressBar);

……

不同操作系统提供的基础控件大同小异。不过一些处理细节上的差异往往会成为跨平台开发的坑,如果你希望一份代码多平台使用,在这方面就需要谨慎处理。

音箱

相比显示器的管理,音箱的设备管理要简单得多。我们很容易做到多个软件同时操作设备,而有合理的结果。

例如,调整音量我们遵循覆盖原则即可,谁后设置音量就听谁的。而声音的播放则可进行混音处理,多个软件播放的声音同时播放出来,让人听起来像是同时有多个人在说话。

当然,特定情况下要允许某个软件禁止其他软件播放出来的声音,比如接听电话的软件,需要在电话接通的时候屏蔽掉所有其他软件播放的声音。

打印机

打印机的管理方式又很不一样,软件使用打印机的过程基本上是互斥的。一个软件在打印文档的时候,其他的软件只能等待它打印完毕后,才能进行打印。

打印机的使用是以文档为互斥的单位。为了避免软件之间出现长时间的相互等待,操作系统往往在打印机的管理程序中引入很大的打印缓冲。

软件操作打印机的时候,并不是等待打印机真把内容打印出来,而是把文档打印到打印缓冲中就完成打印。这样,在大部分情况下多个软件不需要因为使用打印机而出现相互等待。

结语

后面我们在谈“桌面开发”一章中,还会涉及人机交互的更多细节,这一章侧重点在于领域无关的通用操作系统相关的问题域,相关的内容这里仅做概要性的阐述。

但是,仅通过简单对比所有输入和输出设备的管理方式,我们就可以看出,不同输入和输出设备的管理方法差异非常大,没有太大的共性可言。

尽管对 CPU 而言,所有外部设备有着相同的抽象,但这些设备的业务逻辑却如此不同,并不能统一抽象它们。正是因为有了操作系统这样的基础软件,这些设备业务逻辑的复杂性才从我们的软件开发过程中解放出来。

人机交互演化的核心变化是输入设备的变化。我们看到,输入手段的变化是非常剧烈的,且每一次演变都是颠覆性的变化。

事实上输入意图的理解越来越难了,因为交互在朝着自然(Nature)和智能(Intelligence)的方向发展。我们不可能让每一个软件都自己去做输入意图的理解(今天的现状是每个软件自己做),在未来,必然将由操作系统来实现智能交互的基础架构文章来源地址https://www.toymoban.com/news/detail-784965.html

到了这里,关于10 | 输入和输出设备:交互的演进的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机组成原理-外部设备(输入 输出 显示器)

    键盘按键产生电信号,电信号翻译成主机能接收的编码 鼠标光电式是光传感器 分辨率前面是宽后面是高 灰度级:根据比特位的不同对应的像素点颜色不同 灰度级位数:每个像素点对应的位数 显示存储器:存储接下来要在显示器上面播放的一帧的图像的信息 帧缓存深度就是

    2024年02月02日
    浏览(52)
  • 【C++图形化界面】使用HiEasyX优化黑框输入输出交互界面

    实现一份不错的课程设计,往往需要利于进行实现良好交互的图形化界面。 在这学期的课程设计中,我发现了一套可以通用的图形化界面,适合需要界面,但不需要多高级的界面的,并且像我一样图形化知识基础为0的C/C++小白。 现记录如下: ①在编辑框内可以输入内容(能

    2024年02月11日
    浏览(37)
  • 第五章 I/O管理 五、输入/输出应用程序接口&设备驱动程序接口

    目录 一、应用程序接口 二、阻塞和非阻塞I/O 阻塞I/O: 非阻塞I/O: 三、设备驱动程序 以前的统一接口不适用了,现在改为了几种不同的接口 阻塞I/O: 应用程序发出I/O系统调用,进程需转为阻塞态等待。 eg:字符设备接口―一从键盘读一个字符get 非阻塞I/O: 应用程序发出I/O系统调

    2024年02月07日
    浏览(46)
  • 正负10V电压输入±电流输出伺服阀控制器

    ±10V、4~20mA模拟指令输入伺服阀放大器是一种控制元件,用于控制液压系统中的比例阀或伺服阀。它主要由三个部分组成:比例阀或伺服阀、放大器。 比例阀或伺服阀是控制流量或压力的元件,它的输出信号通常是电压或电流。放大器用于将实际值转换为模拟信号,以便将其

    2024年02月08日
    浏览(45)
  • Win10 操作系统如何让不同的音频输出设备播放不同的声音

    应用案例:我做题时蓝牙音箱播放音乐,其他应用通过电脑扬声器播放声音。 鼠标左键点击 Windows 微标健,再点击设置按钮。 在搜索框中搜索“混音器选项”,按下回车。 打开混音器选项后就可以进行修改了。 右键点击任务栏右下角的声音图标,点击“打开声音设置”。

    2024年01月21日
    浏览(46)
  • C语言二——依次将10个数输入,要求将其中最大的数输出

    这是一个简单的C语言程序,它会接受用户输入的10个整数,然后找出最大值并输出。 程序的执行步骤如下: 声明一个数组  n ,用于存储用户输入的10个整数,声明一个变量  i  和  t 。 提示用户输入10个数。 使用  for  循环,从用户输入中逐个读取并存储到数组  n  中。

    2024年02月08日
    浏览(52)
  • 【云计算学习教程】云计算技术与应用学习教程_资源所在地称为云端(也称云基础设施),输入输出设备称为云终端,将两者连接在一

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新大数据全套学习资料》,

    2024年04月27日
    浏览(38)
  • 互联网应用架构的演进(八大架构的演进过程)

    博主最近在学中间件,理解互联网应用架构的演进过程,对于理解中间件在整体结构中的定位是十分重要的 应用(Application)/系统(System) 完成某种服务的一个/一组程序 模块(Module)/组件(Component) 系统中,一个独立的功能称之为一个组件 分布式(Distributed) 系统中的模

    2024年02月07日
    浏览(51)
  • 技术架构的演进-八大架构

    目录: 常见概念 评价指标 单机架构 应用数据分离架构 应用服务集群架构 读写分离 / 主从分离架构 引入缓存 —— 冷热分离架构 垂直分库 业务拆分 —— 微服务 容器化引入——容器编排架构 总结 1.常见概念: 应用(Application) / 系统(System) :为了完成一整套服务的一个

    2024年02月15日
    浏览(47)
  • 架构演进及常用架构

          部署 CDN 节点: 用户访问量的增加意味着用户地域的分散请求,如果所有请求都直接发送中心服务器的话,距离越远,响应速度越差,这时就需要用到 CDN 技术,通过 CDN 加速,保证用户访问每次都从最近的服务器获取数据.  分布式数据库: 分布式数据库是网站数据库

    2024年02月12日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包