之前我们的mbr中我们刚刚向屏幕输出了“1 MBR”这几个字符,这种喜悦还没有过去,我就要给大家泼冷水了:这种打印字符的方法马上就用不了啦。

mbr是运行在实模式下,所以在实模式下也可以用bios的0x10中断打印字符串,这是因为:首先中断向量表只在实模式下存在,bios中断是要依赖于中断向量表的。可是,将来的世界是由保护模式罩着的,保护模式下就没有中断向量表了,所以也就无法用bios中断。其次,不希望有更多的依赖,好不容易脱离了对操作系统的依赖,又引入了一个新的依赖,这不科学。最后,难道大家不想直接同显卡说几句话吗。

万变不离其宗,肯定的是,bios的中断例程中凡是涉及到向屏幕打印之类的功能,必然也是通过操作显卡来实现,只是通过封装成中断处理程序给大家方便调用而已,我们也不用关心显卡操作的细节。等下,往屏幕上输出信息操作的对象不是显示器吗?你这一直说显卡是怎么回事?如果您也有这样的疑问,我这稍带着说解释一下。

某些IO接口也叫适配器,适配器是驱动某一外部设备的功能模块。显卡也称为显示适配器,不过归根结底它就是IO接口,专门用来连接cpu和显示器。我们想操作显示器,没有直接的办法,只能通过它的IO接口——显卡。

稍微说一下显卡的江湖吧,自从几年前AMD把ATI收购之后,世面上的显卡就分为两大类了,A卡和N卡,A卡是指以AMD为阵营的显卡厂商,N卡是以nvidia为阵营的显卡厂商。大家平时见到的七彩虹、技嘉、昂达之类的显卡,他们用的核心要么是A卡,要么是N卡,有的厂商都两个核心都用,开发各自的版本。他们不自己研发GPU(显卡的cpu称为GPU),只是在人家的基础上做本地化开发。这种关系就像安卓手机和安卓原生系统一样。

话说我在2003年的时候见过一块特别霸气的显卡,这块显卡一看就是发烧级的。为什么呢,一般的显卡是要插在主板上的,由于这块显卡做得特别大,看上去感觉像是主板插在了显卡上。

显卡是pci设备,所以是安装在主板上pci插槽上的,pci总线是共享并行架构,并行数据就要保证数据发送后必须同时到达目的地,因为这关系到数据的顺序,不能发过去后成一团乱麻。如8位并行总线就需要同时发送这8位,接收方也要同时接收这8位才行。虽然貌似并行传输是高效的,但对于要保证同时接收n位数据,这是有困难的,随着并行数据的位宽越来越大,这种困难也越来越明显。于是串行传输很好的解决了这一问题,一次只发一位,这样顺序问题解决了,数据到目的地看再组合到一起就成了。于是就有了PCI Express总线,这就是串行设备,简称pcie。现在的显卡都是串口的了。包括上面说的A卡和N卡。有同学会问吧,一次一位地传输,那多慢啊,听上去不如并行传输快。但大家不要忘记了,传输速度一部分取决于并行的数据量,还要取决于传输频率呢。串口显卡一次虽然只传输1位,但人家传输的频率快啊,不光是显卡,现在的硬盘都是串口的,可见串行传输速率可是极高的。

背景相关知识再说就啰嗦了,总之以后我们的输出都是通过直接操作显卡来实现的,而显卡给我们的输入接口是显存和端口,我们主要用的是显存。显存做为接口,说白了,就是它把显存直接给我们用,说:“把你要输出的内容写到这里面,我照着往屏幕上打印”。

好啦,本节到这儿结束了,客官再来玩哦。

【再续】

一步步编写操作系统 16 显卡概述相关推荐

  1. 一步步编写操作系统 71 直接操作显卡,编写自己的打印函数71-74

    一直以来,我们在往屏幕上输出文本时,要么利用bios中断,要么利用系统调用,这些都是依赖别人的方法.咱们还用过一个稍微有点独立的方法,就是直接写显存,但这貌似又没什么含量.如今我们要写一个打印函数了, ...

  2. 一步步编写操作系统 69 汇编语言和c语言共同协作 70

    由于有了上一节的铺垫,本节的内容相对较少,这里给大家准备了两个小文件来实例演示汇编语言和c语言相互调用. 会两种不同语言的人,只是掌握了同一件事物的两种表达方式.人在学习一种新语言时,潜意识里是建立了 ...

  3. 一步步编写操作系统 62 函数调用约定

    由于我们要将c语言和汇编语言结合编程啦,所以一定会存在汇编代码和c代码相互调用的问题,有些事情还是要提前交待给大家的,本节就是要给大家说下函数调用规约中的那些事儿. 函数调用约定是什么? 调用约定,c ...

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

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

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

    接上回,大家看下显卡各种模式的内存分布. 各外部设备都是通过软件指令的形式与上层接口通信的,显卡(显示适配器)也不例外,所以它也有自己的bios.位置是0xC0000到0xC7FFF.显卡支持三种模式 ...

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

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

  7. 一步步编写操作系统 75 从显卡读取光标位置1

    我们在打印字符时,通常都不用指定字符显示的坐标位置,大家也没觉得有什么奇怪,原因是字符是在当前光标的位置处显示的,而且光标的位置会一直更新顺延,我们的字符一直跟着光标走,似乎光标就是字符的导航一样,而 ...

  8. 一步步编写操作系统 09 写个mbr

    有点不好意思了,说了好久,才说到实质性的东西,好了,赶紧给客官上菜. 代码2-1(c2/a/boot/mbr.S)1 ;主引导程序2 ;-------------------------------- ...

  9. 一步步编写操作系统 2 部署工作环境 2

    1.22汇编语言编译器新贵,NASM "新"是相对于旧来说的,老的汇编器MASM和TASM已经过时了,从名称上可以看出字母n是在m之后,其功能必然有所超越才会被大家接受. 请用一句 ...

最新文章

  1. CodeForces - 1326E Bombs(线段树+思维)
  2. 服务器此时无法接受控制信息,您无法修改域或信任信息,因为无法联系一个主域控制器(PDC)仿真器,请确认当前域的PDC仿真器和网络都联机并正常运行。...
  3. 浙江省计算机二级excel函数,浙江省计算机二级excel练习5操作要求
  4. BestCoder Round #39 解题报告
  5. c语言程序兔子反之问题,C语言解决兔子产子问题代码及解析
  6. CSS 兼容浏览器的方法 CSS Hack
  7. node npm cnpm 全局安装淘宝NPM 镜像
  8. android 下载多个文件怎么打开,从android的下拉框中下载多个文件或文件夹?
  9. JQueryDOM之创建节点
  10. Origin_8.0_crack(origin8.0序列号(origin8.0破解补丁))
  11. 加权平均数的例子_加权平均值和算术平均值的区别与公式
  12. 【浏览器】【vue】修改网页上的页签图标
  13. 软件工程之QA管理(好软件系列二)
  14. linux循迹程序,基于ARM和Linux的路径记忆循迹小车
  15. 添加背景,如何把一个视频插入到另一个视频中
  16. Unity鼠标滚轴缩放大小
  17. 【PHP】随机生成名字
  18. iOS- JSPatch 热更新
  19. 电子邮件礼仪(E-Mail Etiquette)
  20. MySQL讲义第 41 讲——select 查询之函数(4):流程控制函数

热门文章

  1. Vue父子组件间的通信
  2. 如何获取枚举字符串,值及遍历枚举(转)
  3. coco2dx c++ HTTP实现
  4. UIView常见方法总结
  5. app 图标规格参考表
  6. 对cookie和子cookie操作的封装
  7. 解决问题:HTTP 错误 401.1 - 未授权:登录失败【转】
  8. [Leetcode][第63题][JAVA][不同路径2][动态规划][压缩路径]
  9. C语言的fgets 与 gets
  10. world文档粘贴图片进去看不到