一步步编写操作系统 14 CPU与外设通信——IO接口 上

介绍显卡之前,必须得和大家交待清楚,那么多的外部设备,cpu是如何与他们交流。

大家都学过微机接口技术吧?没学过也没关系,反正我也只是笼统地说说^_^,保证大家一定能看得懂。

按理说,如果硬件种类较少,让cpu直接同硬件进行IO操作也不是很过分,但现实不是这样的,计算机能发展到今天这样兴盛,是和诞生各种各样的硬件分不开的。微型计算机通过外部设备与外面的世界互换信息,外部设备种类繁多,原理各异,有机械式、电动式、电子式,输出的信号也多种多样,有模拟量、数字量、开关量。它们都有自己特性,数据格式不相同,有的外设是用串行数据,有的是并行数据,并且它们都在自己的时序下工作,无论它们的速度如何,在cpu看来都太慢了。

让cpu小朋友与每个“个性不同,脾气迥异”的硬件大大们打交道,这也太为难cpu了,您看,通过执行jmp $这样的死循环语句就能看得出,人家cpu可是个踏实低调的主,所以,“交际”这类活动对它还是少点好。再说,同任何一个设备打交道,cpu那么速度那么快,它不得嫌弃别人慢吗,为了减少自己的等待时间,还得为低速设备准备数据缓冲区。cpu用的信号都是TTL电平,外设大多数都是机电设备,机电设备可不能用TTL电平驱动,这还不算完呢,cpu系统总线上传送的都是并行数据(所以你听到的都是8位、16位、32位cpu…),外设可是并行、串行都有,还得转换格式,想想就麻烦啊。看来,不可能让cpu一一适应它们,否则cpu要做的工作太多了。

cpu面临的问题,就像校长面临一群学生一样,让校长亲自管理每个学生的学习,即使是肌肉男施瓦辛格也得累倒,于是,班主任的出现帮了大忙,每个班主任负责一批学生,由他们了解学生的情况后再向校长汇报,这样校长他不需要过人的体格,工作起来也会游刃有余了。人创造出来的东西必然脱离不了人的思维,cpu工程师们也给cpu找了“班主任”,在cpu和外设之间加了个代理,总之,以后cpu有什么事就同它接触就行了。什么速度不匹配,缓冲区之类的,全都由代理来搞定。举个例子,如果是串行设备,cpu就同串行接口通信,把数据发给它后,数据再经由串行接口发给串行设备,串行设备有了反馈后,把数据发送给串行接口,再经串行接口返回给cpu,并行设备也是如此。

任何不兼容的问题,都可以通过增加一“层”来解决。在cpu和外设之间的这一层就是IO接口。IO接口形式不限,它可以是个电路板,也可以是块芯片,甚至可以是个插槽,它的作用就是在cpu和外设之间相互做协调转换,如cpu和外设速度不匹配,它就是变速箱,cpu和外设信号不通用,它就是翻译机。

这样通过加了中间层后,工作就被划分成多个部分,每个部分都有专人负责,大家都轻松了,多好啊。

不过,说的还是有点抽象是吗?那就整点具体的,机箱里的声卡就是驱动音响设备的IO接口,本章介绍的显卡也同样是一种IO接口,它是用来驱动显示器的。也许您打开机箱后也未发现我说的声卡和显卡,那是不是就没有它们呢?当然不会,要是听不到声音看不到图像,人们买电脑干吗?用来学习的?哈哈,你懂的。其实它们被集成在主板芯片组中了,您用的就是传说中的集成声卡和集成显卡。这下清楚多了吧,下面咱们还是继续说点抽象的。

IO接口是连接cpu与外部设备的逻辑控制部件,既然称为逻辑,就说明可分为硬件和软件两部分。硬件部分所做的都是一些实质具体的工作,其功能是协调cpu和外设之间的种种不匹配,如双方由于速度不匹配,那IO接口就实现数据缓冲以减少等待时间,数据格式不匹配,IO接口就在这两种格式间互相转换。IO接口内部实际上也是由软件来控制运作的,这就是所谓的“逻辑”部分,所以软件是指用来控制接口电路工作的驱动程序以及完成内部数据传输所需要的程序。

既然提到了软件,这就意味着编程,这样一来,IO接口芯片又可按照是否可编程来分类,可分为可编程接口芯片和不可编程接口芯片。

接口的作用是连接处理器和外部设备,如果外部设备很简单,傻瓜型的、不需要设定就直接能用,就可以用不可编程接口芯片与处理器连接,不可编程接口芯片是种非常简单的IO接口。

当然物理设备还是很贵重的,并且计算机中的IO接口数量也是有限的,所以我们当然希望IO接口功能越多越好,可以设置多种工作模式,甚至允许多个外部设备通过同一个IO接口芯片与处理器连接。计算机与IO接口的通信是通过计算机指令实现的,当我们需要定制某些功能时,我们也必须用计算机指令告诉IO接口:哪些设备连接在此IO接口上、此IO接口的工作模式等。这种通过软件指令选择IO接口上的功能、工作模式的做法,称为“IO接口控制编程”。这通常是用端口读写指令in/out来实现的,后面会说到。

cpu太忙了,它的时间特别宝贵,为了简化cpu访问外部设备的工作,能够轻松地同任何硬件通信,大家就约定好IO接口的功能:

1.设置数据缓冲,解决cpu与外设的速度不匹配。

cpu和外设速度上的差异可以通过设置缓冲区来解决,也就是说,数据先存储在缓冲区里,等需要的时候(无论缓冲区是否满了)就传送出去。

2.设置信号电平转换电路。

cpu和外设的信号电平不同,如cpu所用的信号是TTL电平,而外设大多数是机电设备,故不能使用TTL电平驱动,可以在接口电路中设置电平转换电路来解决。

3.设置数据格式转换

外设是多种多样的,输出的信息可能是数字信号、模拟信号等,而cpu只能处理数字信号。数字信号需要经过数/模转换(D/A)成模拟量才能被送到外设以驱动硬件,模拟量也同样需要经过模/数(A/D)转换成数字量才能被cpu处理。所以接口电路中需要包括A/D转换器和D/A转换器。另外,即使双方使用的都是数字信号,这也牵涉到格式和字长的问题,如cpu使用的是8位或16位或32位并行数据,而外设用并行或串行数据都有可能,所以IO接口中必须能够识别格式并且转换成对方需要的形式才行。

4.设置时序控制电路来同步cpu和外部设备

硬件的工作也是按照某种时序,它们都有自己的时序系统,就像cpu工作在自己的晶振时序上一样。双方时序不同,接口电路就要协调这两种不同的时间计法。如,cpu发控制信号、定时信号给IO接口电路,IO接口用它们来控制和管理硬件。随后硬件有了反馈后,其应答信号也需要通过接口返回给cpu,这样cpu先“问”,硬件后“回答”,就实现了一次握手,之后便可以实现IO的同步操作。

5.提供地址译码

cpu同多个硬件打交道,每个硬件要反馈的信息很多,所以一个IO接口必须包含多个端口(即IO接口上的寄存器)来存储这些信息内容。但同一时刻,只能有一个端口和cpu数据交换,这就需要IO接口提供地址译码电路,使cpu可以选中某个端口,使其可以访问数据总线。

在后来新加入的硬件只要符合此约定就能同cpu数据交换,这样cpu就可以轻松应对种类万千的硬件啦。

后面的内容下半场再说。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2.2)深度学习笔记:优化算法

目录 1)Mini-batch gradient descent(重点) 2)Understanding mini-batch gradient descent 3)Exponentially weighted averages 4)Understanding exponetially weighted averages 5)Bias c…

【POJ - 2019】Cornfields(二维st表,模板)

题干: FJ has decided to grow his own corn hybrid in order to help the cows make the best possible milk. To that end, hes looking to build the cornfield on the flattest piece of land he can find. FJ has, at great expense, surveyed his square fa…

虚拟机安装Linux(vmware + ubuntu)

VMWare 提取码:7zph 建议官网下载比较新,还快一点 https://www.vmware.com/products/workstation-pro.htmlubantu 下载地址 安装过程都差不多可以参考 VMware下安装Ubuntu系统图文详细教程_master-CSDN博客_vmware安装ubuntu系统 出现蓝屏问题可以参考…

Apollo进阶课程⑱丨Apollo感知之旅——传感器标定

目录 传感器标定 标定的目的 传感器标定算法 标定案例解析 3D标定间制作 Cmaera-to-Camera外参标定 Lidar-to-Camera外参标定 Lidar-to-Lidar外参标定 Lidar内参标定 Lidar-to-GPS外参标定 自然场景的Lidar-to-Camera外参标定 自然场景的Bifocal Camera外参标定 C…

一步步编写操作系统 15 CPU与外设通信——IO接口,下

既然都说到IO接口了,不知道各位有没有疑问,cpu是怎样访问到IO接口呢?肯定得有个链路吧?什么?有隐约听到有同学开玩笑说:cpu用无线访问其它设备。哈哈,不知道各位听说过没有,无线的终…

Telnet端口连接Linux服务器失败

在ubuntu写了个服务器端口号是666 ,ip地址是192.168.96.129 在windows用telnet无法连接上 首先检查windows telnet服务是否打开 Windows 10操作系统上使用telnet命令(图文)_时间-CSDN博客_windows使用telnet命令 测试网络是否通:…

*【2019牛客暑期多校训练营(第三场)- G】Removing Stones(分治)

题干: 链接:https://ac.nowcoder.com/acm/contest/883/G 来源:牛客网 Summer vacation is coming and Mark has returned home from his university having successfully survived the exam week. Today, he is very bored. So his frien…

重磅 | 完备的 AI 学习路线,最详细的资源整理!

本文转自微信公众号:Datawhale(强烈推荐) 原创: AIUnion Datawhale 今天 【导读】 本文由知名开源平台,AI技术平台以及领域专家:Datawhale,ApacheCN,AI有道和黄海广博士联合整理贡献…

一步步编写操作系统 16 显卡概述

之前我们的mbr中我们刚刚向屏幕输出了“1 MBR”这几个字符,这种喜悦还没有过去,我就要给大家泼冷水了:这种打印字符的方法马上就用不了啦。 mbr是运行在实模式下,所以在实模式下也可以用bios的0x10中断打印字符串,这是…

Windows/Linux 下使用telnet发送消息

Windows下使用telnet 1.首先打开cmd命令行连接上服务器端口 连不上可以参考这篇 Telnet端口连接Linux服务器失败_m0_46480482的博客-CSDN博客 telnnt <ip地址> <端口号> 2. 连接成功后&#xff0c;会发现是一片黑的 按住 ctrl ] 可以招出提示 输入 &#x…

【2019牛客暑期多校训练营(第六场)- D】Move(随机化二分)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/886/D 来源&#xff1a;牛客网 After the struggle of graduating from college, TangTang is about to move from a student apartment to his new home. TangTang has n items to move, the i-th …

Apollo进阶课程⑲丨Apollo感知之旅——感知算法

目录 点云感知 启发式方法&#xff1a;NCut 深度学习方法&#xff1a;CNNSeg 视觉感知 CNN检测 CNN分割 后处理 红绿灯感知 基于深度学习的红绿灯感知模块 Radar感知 超声波感知 原文链接&#xff1a;进阶课程⑲丨Apollo感知之旅——感知算法 感知是自动驾驶的第一环…

一步步编写操作系统 17 显存,显卡,显示器 上

为了能够看到图像&#xff0c;我们需要显示器。无论是哪种显示器&#xff0c;它都是由显卡来控制的&#xff0c;我们没必要了解液晶显示器和普通CRT显示器的差别。无底是哪种显卡&#xff0c;它提供给我们的可编程接口都是一样的&#xff1a;IO端口和显存。 显存是由显卡提供的…

C++ socket网络编程笔记(服务端1)

1. 创建一个信箱 int sock; // 创建一个信箱 sock socket(AF_INT,SOCK_STREAM,0) 2. 创建一个标签&#xff0c;写上地址和端口号 struct sockaddr_in server_addr; // 创建一个标签server_addr.sin_family AF_INET; // 标签--协议族 (AF_INET表示IPV4)ser…

动手学PaddlePaddle(0):新版本PaddlePaddle安装

目录 0.引言 1.环境 2.Windows下安装 安装Python 安装PaddlePaddle 0.引言 今天介绍如何安装新版本的PaddlePaddle&#xff0c;现在最新版的PaddlePaddle是指Fluid版&#xff0c;Fluid可以让用户像Pytorch和TensorFlow Eager Execution一样执行程序&#xff0c;也就是说P…

一步步编写操作系统 18 操作显卡,显存,显示器 下

接上回&#xff0c;大家看下显卡各种模式的内存分布。 各外部设备都是通过软件指令的形式与上层接口通信的&#xff0c;显卡&#xff08;显示适配器&#xff09;也不例外&#xff0c;所以它也有自己的bios。位置是0xC0000到0xC7FFF。显卡支持三种模式&#xff0c;文本模式、黑白…

【2019牛客暑期多校训练营(第六场)- J】Upgrading Technology(dp)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/886/J?&headNavacm&headNavacm&headNavacm&headNavacm 来源&#xff1a;牛客网 Rowlet is playing a very popular game in the pokemon world. Recently, he has encountered a p…

VMware 安装VMware Tools

想要在linux和windows之间复制粘贴&#xff0c;把之前一直没有下的vmwaretools的下载过程记录一下。 1.左上角菜单 ->虚拟机 ->安装 vmware tools (我已经点过了所以是取消安装) 2.桌面多了一个VMware tools &#xff0c;点进去看一下位置&#xff0c;复制一下tar.gz的文…

Apollo进阶课程⑳丨Apollo感知之旅——机器学习与感知的未来

目录 1机器学习 可解释性是否需要 其它算法 2感知的未来 Sensor迭代 深度学习仿真数据AI芯片 智能交通设施 3思考 原文链接&#xff1a;进阶课程⑳丨Apollo感知之旅——机器学习与感知的未来 自动驾驶感知中的机器学习最大问题在于系统对模块的要求与普通的机器学习不同…

一步步编写操作系统 19 改进MBR,直接操作显卡

到目前为止&#xff0c;说了一部分有关显存的内容&#xff0c;这对于一般的输出来说已经足够了&#xff0c;下面咱们可以尝试写显存啦。我们将之前MBR改造一下&#xff0c;保留滚屏的操作&#xff0c;只修改有关输出的部分。即把通过bios的输出改为通过显存&#xff0c;你会发现…