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

之前我们的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位,但人家传输的频率快啊,不光是显卡,现在的硬盘都是串口的,可见串行传输速率可是极高的。

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

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

【再续】

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

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

相关文章

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;你会发现…

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

接上篇 C socket网络编程笔记(服务端1)_m0_46480482的博客-CSDN博客 1. 用一个while循环来持续监听信道消息 int done 1; while(done) {.... } 2. 创建一个客户信箱来接受收到的消息 int client_sock;3. 创建一个客户信息的标签记录信息 struct sockaddr_in client; //…

【2019牛客暑期多校训练营(第五场)- E】independent set 1(最大独立集,状压dp)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/885/E 来源&#xff1a;牛客网 Note: For C languages, the memory limit is 100 MB. For other languages, the memory limit is 200 MB. In graph theory, an independent set is a set of nonadj…

Apollo进阶课程㉑丨Apollo规划技术详解——Basic Motion Planning and Overview

原文链接&#xff1a;进阶课程㉑丨Apollo规划技术详解——Basic Motion Planning and Overview 运动规划&#xff08;Motion Planning&#xff09;就是在给定的位置A与位置B之间为机器人找到一条符合约束条件的路径。这个约束可以是无碰撞、路径最短、机械功最小等。具体的案例…

ROS机器人导航仿真(kinetic版本)

准备工作&#xff1a; ubuntu 16.04系统;ROS kinetic版本;ROS包turtlebot,导航包rbx1,模拟器arbotix&#xff0c;可视化rviz 1、安装ubuntu 16.04系统与安装ROS kinetic版本自行百度安装。一下链接可作为参考。 http://blog.csdn.net/weicao1990/article/details/52575314 2…

【牛客 - 1080B】tokitsukaze and Hash Table(STLset,并查集,Hash)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/1080/B 来源&#xff1a;牛客网 tokitsukaze有n个数&#xff0c;需要按顺序把他们插入哈希表中&#xff0c;哈希表的位置为0到n-1。 插入的规则是&#xff1a; 刚开始哈希表是空的。 对于一个数x&a…

C++ socket网络编程笔记(服务端3) 完整代码

上篇&#xff1a; https://blog.csdn.net/m0_46480482/article/details/122995226 完整代码&#xff1a; #include<stdio.h> #include<unistd.h> #include<sys/types.h> #include<sys/socket.h> #include<string.h> #include<ctype.h> …

1.深度学习练习:Python Basics with Numpy(选修)

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization 目录 1 - Building basic functions with numpy 1.1 - np.exp(), sigmoid function 1.2 - Sigmoid gradient …

一步步编写操作系统 20 x86虚拟bochs一般用法 上

bochs一般用法 bochs是一个开源x86 虚拟机软件。在它的实现中定义了各种数据结构来模拟硬件&#xff0c;用软件模拟硬件缺点是速度比较慢&#xff0c;毕竟全是软件来模拟&#xff0c;您想&#xff0c;虚拟机还要在软件中模拟各种中断&#xff0c;能不慢吗。不过它的功能非常强…

【牛客 - 1080E】tokitsukaze and Segmentation(dp,递推,思维)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/1080/E 来源&#xff1a;牛客网 tokitsukaze有一个长度为n的字符串&#xff0c;字符串仅包含0-9。 tokitsukaze要把这个字符串切割成若干个子串&#xff0c;每个子串作为一个十进制的数&#xff0c;…