文档章节

Linux 图形化技术

itviewer
 itviewer
发布于 2015/11/25 07:32
字数 1659
阅读 109
收藏 2

图形化是一个复杂的技术,在 Linux 下面更是如此。本文尝试介绍 Linux 实现图形化的方方面面。

硬件

在介绍图形化技术之前,首先介绍一下图形化相关硬件的工作原理。

显示器

显示器屏幕上显示的内容由一系列的像素组成,这些像素信息由主机传输给显示器。通用的显示器接口有 VGA 和 HDMI 两种,这里以 VGA 为例。VGA 接口有 15 根针,传输的是模拟信号

显卡

集成显卡和独立显卡。集成显卡是主板的一部分,没有自己的存储器,而是使用系统内存工作。独立显卡拥有自己的专用内存、内部总线甚至包括风扇,是一个自主程度相当高的组件。独立显卡并不一定是可拆卸的,尤其是在笔记本电脑上。

现代的 GPU 的功能包括:

  • 将内容显示到屏幕上

  • 2D 加速

  • 3D 加速

  • 视频解码

  • 科学计算

显卡包含显示输出接口,如 VGA、HDMI 等。显示输出时,图像信息首先保存在 Framebuffer 中,显卡会根据显示器的刷新频率将图像信息转换成信号流,编码器将数字信号转换为 VGA 的模拟信号,通过插槽输送到显示器。这里说到的 Framebuffer 是显卡存储器中的一部分,里面存储的信息正式屏幕上最终显示的内容,具体的格式与显示器设置有关。

通常主板有集成显卡,因此具有显示输出接口。NVIDIA 和 AMD 的独立显卡也带有显示输出,当为电脑接上独立显卡之后,主板一般会关闭自带的视频输出,这时用户必须换成使用独立显卡上的输出接口连接显示器。

集显和独显的关系有两种:

  • 第一种称作 MUX 或 MUXed System。这种系统下,集显和独显都有视频输出接口,都可以向显示器输出信号,系统通过一个数据选择器(Multiplexer,简称 mux)控制哪一个显卡的输出信号传输到显示器上。

  • 另一种称作 MUXless System,只有集成显卡能够输出视频信号,而独立显卡只能进行渲染和计算,不负责视频输出。

向量显示器(vector display)是早期的一种显示器,这种显示器显示的图像不是由像素组成,计算机控制显示器的电子束从一个点移动到另一点,从而绘制一条线段。

显卡能够向显示器输出视频信号,但是显示器的显示模式需要操作系统进行设置。

总线

在冯诺依曼体系架构中,CPU 需要和周边设备通信,总线就是通信的媒介。

早期的计算机,设备类型和数量相对固定,因此设备之间使用专用的总线组成全连接结构。总线的出现使得设备全都连接到一根线缆上,使得组织更加简单,也让计算机更具有扩展性。


PC 遵循冯诺依曼架构,CPU 是计算机的核心组件,其他硬件作为周边设备存在,例如内存、显卡、网卡等。总线将 CPU 和周边设备连接起来,使 CPU 能够访问并控制其他设备,例如读写内存。然而,CPU 并不是唯一能够和周边设备进行数据通信的设备,某些设备自身就有主动能力,能够在没有 CPU 帮助的情况下进行数据交换。例如,硬盘能够主动将磁盘数据写入内存,这样的能力称为直接内存访问(DMA)。

GPU 需要访问内存,才能完成相应图形运算。CPU 通过分页机制管理内存,GPU 和其他设备同样有这种管理内存的能力,通过 IOMMU 实现。设备所使用的内存地址也不是物理地址,只有经过 IOMMU 翻译之后的才是最终地址。

现在的显卡结构非常复杂,俨然是计算机里的另一个计算机。显卡的核心——GPU,同样具有自己的指令集和寄存器,拥有自己的体系架构,AMD 甚至还公开了一些 GPU 的指令集,NVIDIA 的 GPU 指令集虽然不公开,但是 noveaou 项目一直致力于逆向 NV 驱动。AMD 的 GPU 基于 VLIW(Very Long Instruction Word,超长机器字),NVIDIA 的 GPU 基于超标量体系(这也是两种显卡在挖矿上相差悬殊的原因)。

History

计算机图形学起源很早,但是把图形作为用户界面,

X Server

1985 年的时候,Linux 还没有出现,当时主流的操作系统是 Unix。X 是 MIT 开发的 Unix 下的显示系统。当时的 Unix 系统没有动态链接库,因此要在图形应用之间共享绘图代码的唯一办法,就是使用协议通信,将所有绘图的代码全部放在 X Server 中。

后来在 X 的发展过程中,加入了一些网络不透明的协议,因此现在的 X 虽然仍然是 Client/Server 架构,但已经不能显示远程计算机上的应用了(但是现在已经有了更好的解决方案,如 VNC,或者直接使用 Web 应用)。

许多关于 X 的介绍都说 C/S 的架构非常灵活,但是如今这些已经成了 X 的历史包袱。

Linux 早期,系统中唯一能够与 显示设备

X 不仅负责绘图,还需要处理鼠标、键盘输入和内存管理。Linux 下 evdev 负责提供输入设备的支持,GEM 进行渲染和内存管理,KMS 负责模式设置(驱动中大量代码都是属于模式设置的)。

Key mapping –> libxkbcommon


Linux 下闭源显卡驱动往往采取不一样的架构。闭源驱动包含两个部分,一部分处在用户层,作为动态链接库与 3D 应用程序链接在一起,负责和内核中的驱动部分通信。内核模块部分负责与硬件进行交互和一些同步操作。用户部分和内核部分之间的交互方式是驱动开发者需要解 决的,闭源驱动往往采取独立的实现,在开源驱动中,这种机制就是 DRI。


本文转载自:

上一篇: 渲染管线
下一篇: 球形纹理贴图
itviewer
粉丝 20
博文 218
码字总数 44686
作品 0
海淀
技术主管
私信 提问
Linux服务器较Windows服务器优势比拼

我们知道家用系统中windows占据了大部分市场,但是在服务器端,有的说linux已经超过windows,也有人说windows远远多于linux,但是不管怎么说,两者在服务器端仍是有力的竞争者。 下面我们来对...

问题终结者
2018/07/28
817
10
Linux命令行是什么?Linux云计算运维学习

Linux是—个主要通过命令行来进行管理的操作系统,即通过键盘输入指令来管理系统的相关操作,这和Windows系统使用鼠标命击的可视化管理大不相同。 使用鼠标可视化管理的优势是简单、容易上手...

老男孩Linux培训
2018/06/22
7
0
xming + putty 搭建远程图形化ssh访问ubuntu 14.04

欢迎关注大数据和人工智能技术文章发布的微信公众号:清研学堂,在这里你可以学到夜白(作者笔名)精心整理的笔记,让我们每天进步一点点,让优秀成为一种习惯! putty下载:   http://ww...

李金泽
2018/04/01
0
0
共建开源生态系统 创造软件与服务新机遇

英特尔致 力于提供先进的平台和技术,不断改进人们的生活和工作方式。而软件则是英特尔平台的关键要素,让各种软件在英特尔处理器上发挥最优的性能、释放英特尔平台 的无限潜能是英特尔努力的...

红薯
2009/11/25
305
0
最简单的Linux图形编程课

主题:最简单的Linux图形编程课 时间:2018年3月13日 晚上7点 到 9点 地点:武昌首义学院图书馆总馆四楼电子阅览室 人物:对Linux编程感兴趣的用户均可参加 活动内容: 基于Linux操作系统的图...

tsuibin
2018/03/13
208
0

没有更多内容

加载失败,请刷新页面

加载更多

Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
26分钟前
2
0
CSS--属性

一、溢出 当内容多,元素区域小的时候,就会产生溢出效果,默认是纵向溢出 横向溢出:在内容和容器之间再套一层容器,并且内部容器要比外部容器宽 属性:overflow/overflow-x/overflow-y 取值...

wytao1995
45分钟前
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
6
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0
jenkins 插件下载加速最终方案

推荐做法 1、告诉jenkins 我哪些插件需要更新 jenkins插件清华大学镜像地址 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 1.进入jenkins系统管理 2.进入插件管...

vasks
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部