linux
各种linux系统比较
一、各种linux系统比较
在当今信息技术领域,Linux操作系统是一种非常常见且受欢迎的操作系统。它的开放源代码特性使其成为许多用户和开发人员的首选。Linux有许多不同的发行版,每个发行版都有其独特的特点和优势。在本文中,我们将对各种Linux系统进行比较,以帮助用户选择最适合他们需求的系统。
Ubuntu
Ubuntu 是一个基于Debian的开源操作系统,它以易用性和用户友好性而闻名。它具有强大的社区支持和丰富的软件包管理系统。对于那些刚刚开始使用Linux的用户来说,Ubuntu可能是一个很好的选择。它提供了直观的用户界面和大量的在线文档,使用户能够轻松上手。
CentOS
CentOS是一个企业级Linux发行版,它专注于稳定性和安全性。它是业界广泛使用的服务器操作系统之一,许多公司和组织选择在其服务器上部署CentOS。它具有长期支持(LTS)版本,可以保证系统的稳定性和可靠性。
Debian
Debian是一个非常稳定且可靠的Linux发行版,也是许多其他Linux发行版的基础。它以其稳定性和开源精神而著称,是许多服务器和桌面系统的首选。Debian的软件包管理系统非常强大,用户可以轻松地安装和更新软件包。
Fedora
Fedora是由红帽公司支持的一个社区驱动的Linux发行版,其更新速度较快,为用户提供了最新的软件和技术。Fedora适合那些对最新功能和创新感兴趣的用户,但也可能在稳定性方面稍逊一筹。
openSUSE
openSUSE是一款面向桌面和服务器的功能强大的Linux发行版,它具有易于使用的图形界面和广泛的软件选择。openSUSE还提供了专业版和社区版,满足不同用户群体的需求。
Arch Linux
Arch Linux 是一个面向高级用户和发烧友的Linux发行版,它提供了极大的灵活性和自定义性。用户可以根据自己的需求构建自己的系统,但这也需要用户具有一定的Linux经验。
Linux Mint
Linux Mint是一个基于Ubuntu和Debian的用户友好型Linux发行版,它专注于提供简单易用的桌面环境和大量的预装软件。Linux Mint适合那些从Windows系统转换到Linux的用户,因为它的用户界面与Windows相似。
总结
各种Linux系统各有特点,用户可以根据自己的需求和经验选择适合自己的系统。如果您是新手用户,Ubuntu或者Linux Mint可能是一个不错的选择;如果您是专业用户或者服务器管理员,CentOS或Debian可能更适合您。无论您选择哪种Linux系统,都可以通过不断学习和实践来熟悉和掌握它,从而充分发挥其优势。
二、Linux系统比较:哪个是最优秀的Linux发行版?
介绍
Linux是一种广泛使用的开源操作系统内核,许多发行版都基于它开发而成。尽管Linux本身只是一个内核,但不同的发行版在用户界面、软件包管理和功能特性等方面有所不同。本文将介绍几种备受认可的Linux发行版,帮助读者了解每个发行版的特点,这样可以更好地选择适合自己的Linux系统。
Ubuntu
Ubuntu是最受欢迎和广泛使用的Linux发行版之一。它致力于提供简单易用的用户界面,并提供大量的软件包供用户选择。Ubuntu有良好的社区支持和详细的文档,适合新手入门使用。
Debian
Debian是一种稳定且可靠的Linux发行版,被用于很多服务器环境。它注重软件包的稳定性和安全性,致力于提供一个稳定且可靠的操作系统。Debian也有庞大的软件包库,适合需要长期稳定工作环境的用户。
CentOS
CentOS是一种以企业级服务器为目标的Linux发行版。它是基于Red Hat Enterprise Linux(RHEL)的重建版本,提供类似的功能和兼容性。CentOS提供长期支持和更新,并在企业服务器领域享有良好的声誉。
Arch Linux
Arch Linux是一种面向有经验的用户的Linux发行版。它提供极简的设计、灵活性和定制性,允许用户完全自定义系统。Arch Linux采用滚动更新策略,保持系统始终更新。适用于技术爱好者和高级用户。
openSUSE
openSUSE是一个稳定和全面的Linux发行版,强调用户友好和易用性。它提供了包括GNOME和KDE在内的多个桌面环境选择。openSUSE也有一个强大的软件包管理系统和活跃的社区支持。
结论
没有一个Linux发行版可以被称为绝对最好的,因为它们都有各自的特点和适用场景。选择最合适的Linux系统取决于个人需求和偏好。对于新手用户,Ubuntu是一个不错的选择;对于追求稳定性和安全性的用户,Debian和CentOS是不错的选择;对于技术爱好者和高级用户,Arch Linux提供了极大的灵活性和定制性;对于注重易用性和全面性的用户,openSUSE是一个不错的选择。在选择时,请根据自己的需求和技术水平做出理性的决策。
感谢您阅读本文,希望对您的Linux系统选择有所帮助!
三、linux哪个系统比较好?
主要以下几种:
1、ubuntu桌面版系统:
对于不擅长系统操作命令的人员,使用比较方便。
2、SUSE网络服务功能强的系统:
如果想把服务器充当路由设备,或邮件服务器,可以关注。
3、Debian安全性较好系统:
有些对系统安全性要求高的企业会作为优选。
四、Linux系统哪个比较好用?
现在国内大多数Linux相关的图书都是围绕CentOS系统编写的,作者大多也会给出围绕CentOS进行写作的一系列理由,但是很多理由都站不住脚,根本没有剖析到CentOS系统与RHEL系统的本质关系。CentOS系统是通过把RHEL系统释放出的程序源代码经过二次编译之后生成的一种Linux系统,其命令操作和服务配置方法与RHEL完全相同,但是去掉了很多收费的服务套件功能,而且还不提供任何形式的技术支持,出现问题后只能由运维人员自己解决。
经过这般分析基本上可以判断出,选择CentOS的理由只剩下—免费!当人们大举免费、开源、正义的旗帜来宣扬CentOS系统的时候,殊不知CentOS系统其实早在2014年年初就已经被红帽公司“收编”,当前只是战略性的免费而已。再者说,根据GNU GPL许可协议,我们同样也可以免费使用RHEL系统,甚至是修改其代码创建衍生产品。
开源系统在自由程度上没有任何差异,更无关道德问题。
五、哪个版本的Linux系统桌面比较流畅?
流畅的话,debian,ubuntu,centos这些主流发行版都比较流畅,实在不行换一个轻桌面环境类似xfce会更流畅。电脑没有问题,一般不会出现卡死的问题。
国内的deepin也挺不错,易用性比较好,不过比较卡,电脑配置好可以试试。
六、深入比较Linux系统和Windows系统的区别
引言
Linux系统和Windows系统是目前最流行的操作系统之一。尽管它们都是操作系统,但它们在许多方面存在着显著差异。本文将深入比较Linux系统和Windows系统的区别,以帮助读者更好地了解两者之间的差异。
内核
Linux和Windows系统的最大区别之一就是它们的内核。Linux系统采用开源的Linux内核,而Windows系统采用专有的Windows NT内核。Linux的开放性使得任何人都可以查看和修改其源代码,这使得Linux拥有更大的灵活性和安全性。Windows的专有内核使其更容易使用,但也对用户的自定义和修改有一定限制。
图形界面
Linux和Windows系统的图形界面也有差异。Windows系统采用了直观、易于使用的图形用户界面(GUI),如Windows Explorer和开始菜单。Linux系统则采用了各种各样的图形界面,如GNOME、KDE和XFCE。这些图形界面可以根据用户的需求进行定制,使得Linux系统更加灵活和可扩展。
软件兼容性
Windows系统在软件兼容性方面占有明显优势,拥有广泛的软件支持。用户可以轻松地找到并安装各种应用程序和游戏。但是,Linux系统在近年来在软件库和兼容性方面也有了较大的改善。许多流行的开源软件和工具已经移植到了Linux平台上,且大多数日常使用的应用程序都可在Linux上找到合适的替代品。
安全性
安全性是Linux系统的一个重要优势。由于Linux的开源性质,任何人都可以审查其源代码并检测潜在的安全漏洞。此外,Linux系统有较少的病毒和恶意软件攻击,主要是因为它的用户群体相对较小。相比之下,Windows系统由于其普及程度,更容易成为攻击的目标。
性能
在性能方面,Linux系统通常被认为比Windows系统更出色。Linux的内核设计更加精简、高效,可以更好地利用系统资源。此外,Linux在服务器环境下的性能表现也比Windows好,这也是为什么许多服务器运行Linux系统的原因之一。
总结
Linux系统和Windows系统在内核、图形界面、软件兼容性、安全性和性能等方面存在显著差异。Linux系统的开放性和灵活性使得其适合有技术背景或对自定义需求较高的用户,而Windows系统的易用性和广泛软件支持使其适合一般用户。选择哪种操作系统取决于个人需求和偏好。
感谢阅读
感谢您阅读本文,希望通过本文您能更好地理解Linux系统和Windows系统之间的区别。无论您是专业人士还是普通用户,我相信这些信息对您在选择操作系统时会有所帮助。
七、Linux系统家族中下哪些系统比较好用?
1. 前言
图形子系统是linux系统中比较复杂的子系统之一:对下,它要管理形态各异的、性能各异的显示相关的器件;对上,它要向应用程序提供易用的、友好的、功能强大的图形用户界面(GUI)。因此,它是linux系统中少有的、和用户空间程序(甚至是用户)息息相关的一个子系统。
本文是图形子系统分析文章的第一篇,也是提纲挈领的一篇,将会从整体上,对linux显示子系统做一个简单的概述,进而罗列出显示子系统的软件构成,后续的文章将会围绕这些软件一一展开分析。
注1:本文所有的描述将以原生linux系统为例(如Ubuntu、Debian等),对其它基于linux的系统(如Android),部分内容会不适用。
注2:本文很多图片都是从网上搜集而来的(很多是从维基百科)。虽然蜗窝的宗旨是用自己的语言表述,尽量自己画图,但是linux图形子系统太复杂了,蜗蜗的理解有限,而老外的图画的实在太好了哈哈哈。
【文章福利】小编推荐自己的Linux内核源码交流群:【869634926】整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!前50名可进群领取,并额外赠送一份价值600的内核资料包(含视频教程、电子书、实战项目及代码)!
学习直通车:Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈
2. 概念介绍
2.1 GUI(Graphical User Interface,图形用户界面)
linux图形子系统的本质,是提供图形化的人机交互(human-computer interaction)界面,也即常说的GUI(Graphical User Interface)。而人机交互的本质,是人脑通过人的输出设备(动作、声音等),控制电脑的输入设备,电脑经过一系列的处理后,经由电脑的输出设备将结果输出,人脑再通过人的输入设备接收电脑的输出,最终实现“人脑<-->电脑”之间的人机交互。下面一幅摘自维基百科的图片(可从“这里”查看比较清晰的SVG格式的原始图片),对上述过程做了很好的总结:
该图以一个非常前卫的应用场景----虚拟现实(VR,Virtual Reality)游戏,说明了以图形化为主的人机交互过程:
1)人脑通过动作、声音(对人脑而言,是output),控制电脑的输入设备,包括键盘、鼠标、操作杆、麦克风、游戏手柄(包含加速度计、陀螺仪等传感器)。2)电脑通过输入设备,接收人脑的指令,这些指令经过kernel Input subsystem、Middleware Gesture/Speech recognition等软件的处理,转换成应用程序(Game)可以识别的、有意义的信息。3)应用程序(Game)根据输入信息,做出相应的反馈,主要包括图像和声音。对VR游戏而言,可能需要3D rendering,这可以借助openGL及其相应的用户空间driver实现。4)应用程序的反馈,经由kernel的Video subsystem(如DRM/KMS)、audio subsystem(如ALSA),输出到电脑的输出设备上,包括显示设备(2D/3D)、扬声器/耳机(3D Positional Audio)、游戏手柄(力的反馈)等。5)输出到显示设备上时,可能会经过图形加速模块(Graphics accelerator)。
注3:图中提到了VR场景的典型帧率(1280×800@95fps for VR),这是一个非常庞大的信息输出,要求图形子系统能10.5ms的时间内,生成并输出一帧,以RGBA的数据格式为例,每秒需要处理的数据量是1280x800x95x4x8=3.11296Gb,压力和挑战是相当大的(更不用提1080P了)。
2.2 Windowing system(窗口系统)
窗口系统,是GUI的一种(也是当前计算机设备、智能设备广泛使用的一种),以WIMP (windows、icons、menus、pointer) 的形式,提供人机交互接口。Linux系统中有很多窗口系统的实现,如X Window System、Wayland、Android SurfaceFlinger等,虽然形态各异,但思路大致相同,包含如下要点:
1)一般都使用client-server架构,server(称作display server,或者windows server、compositor等等)管理所有输入设备,以及用于输出的显示设备。2)应用程序作为display server的一个client,在自己窗口(window)中运行,并绘制自己的GUI。3)client的绘图请求,都会提交给display server,display server响应并处理这些请求,以一定的规则混合、叠加,最终在有限的输出资源上(屏幕),显示多个应用程序的GUI。3)display server和自己的client之间,通过某种类型的通信协议交互,该通信协议通常称作display server protocol。4)display server protocol可以是基于网络的,甚至是网络透明的(network transparent),如X Window System所使用的。也可以是其它类型的,如Android SurfaceFlinger所使用的binder。
有关Windowing system的详细解释,请参考:https://en.wikipedia.org/wiki/Windowing_system。
2.3 X Window System
似乎终于要进入正题了。
X Window System是Windowing System一种实现,广泛使用于UNIX-like的操作系统上(当然也包括Linux系统),由MIT(Massachusetts Institute of Technology,麻省理工学院)在1984年发布。下图(可从“这里”查看比较清晰的SVG格式的原始图片)是它的典型架构:
1)X Window System简称X,或者X11,或者X-Windows。之所以称作X,是因为在字母表中X位于W之后,而W是MIT在X之前所使用的GUI系统。之所以称作X11,是因为在1987年的时候,X Window System已经进化到第11个版本了,后续所有的X,都是基于X11版本发展而来的(变动不是很大)。为了方便,后续我们都以X代指X Window System。2)X最初是由http://X.org(XOrg Foundation)维护,后来基于X11R6发展出来了最初专门给Intel X86架构PC使用的X,称作XFree86(提供X服务,它是自由的,它是基于Intel的PC平台)。而后XFree86发展成为几乎适用于所有类UNIX操作系统的X Window系统,因此在相当长的一段时间里,XFree86也是X的代名词。再后来,从2004年的时候,XFree86不再遵从GPL许可证发行,导致许多发行套件不再使用XFree86,转而使用Xorg,再加上Xorg在X维护工作上又趋于活跃,现在Xorg由成为X的代名词(具体可参考“http://www.x.org/”)。3)X设计之初,制定了很多原则,其中一条----"It is as important to decide what a system is not as to decide what it is”,决定了X的“性格”,即:X只提供实现GUI环境的基本框架,如定义protocol、在显示设备上绘制基本的图形单元(点、线、面等等)、和鼠标键盘等输入设备交互、等等。它并没有实现UI设计所需的button、menu、window title-bar styles等元素,而是由第三方的应用程序提供。这就是Unix的哲学:只做我应该做、必须做的事情。这就是这么多年来,X能保持稳定的原因。也是Linux OS界面百花齐放(不统一)的原因,各有利弊吧,后续文章会展开讨论。4)X包括X server和X client,它们之间通过X protocol通信。5)X server接收X clients的显示请求,并输出到显示设备上,同时,会把输入设备的输入事件,转递给相应的X client。X server一般以daemon进程的形式存在。6)X protocol是网络透明(network-transparently)的,也就是说,server和client可以位于同一台机器上的同一个操作系统中,也可以位于不同机器上的不同操作系统中(因此X是跨平台的)。这为远端GUI登录提供了便利,如上面图片所示的运行于remote computer 的terminal emulator,但它却可以被user computer的鼠标键盘控制,以及可以输出到user computer的显示器上。注4:这种情况下,user computer充当server的角色,remote computer是client,有点别扭,需要仔细品味一下(管理输入设备和显示设备的是server)。7)X将protocol封装为命令原语(X command primitives),以库的形式(xlib或者xcb)向client提供接口。X client(即应用程序)利用这些API,可以向X server发起2D(或3D,通过GLX等扩展,后面会介绍)的绘图请求。
2.4 窗口管理器、GUI工具集、桌面环境及其它
前面讲过,X作为Windowing system中的一种,只提供了实现GUI环境的基本框架,其它的UI设计所需的button、menu、window title-bar styles等基本元素,则是由第三方的应用程序提供。这些应用程序主要包括:窗口管理器(window manager)、GUI工具集(GUI widget toolkit)和桌面环境(desktop environment)。
窗口管理器负责控制应用程序窗口(application windows)的布局和外观,使每个应用程序窗口尽量以统一、一致的方式呈现给用户,如针对X的最简单的窗口管理程序--twm(Tab Window Manager)。
GUI工具集是Windowing system之上的进一步的封装。还是以X为例,它通过xlib提供给应用程序的API,仅仅可以绘制基本的图形单元(点、线、面等等),这些基本的图形单元,要组合成复杂的应用程序,还有很多很多细碎、繁杂的任务要做。因此,一些特定的操作系统,会在X的基础上,封装出一些更为便利的GUI接口,方便应用程序使用,如Microwindows、GTK+、QT等等。
桌面环境是应用程序级别的封装,通过提供一系列界面一致、操作方式一致的应用程序,使系统以更为友好的方式向用户提供服务。Linux系统比较主流的桌面环境包括GNOME、KDE等等。
2.5 3D渲染、硬件加速、OpenGL及其它
渲染(Render)在电脑绘图中,是指:用软件从模型生成图像的过程。模型是用严格定义的语言或者数据结构对于三维物体的描述,它包括几何、视点、纹理以及照明信息。图像是数字图像或者位图图像。
上面的定义摘录自“百度百科”,它是着重提及“三维物体”,也就是我们常说的3D渲染。其实我们在GUI编程中习以为常的点、线、矩形等等的绘制,也是渲染的过程中,只不过是2D渲染。2D渲染面临的计算复杂度和性能问题没有3D厉害,因此渲染一般都是指3D渲染。
在计算机中,2D渲染一般是由CPU完成(也可以由专门的硬件模块完成)。3D渲染也可以由CPU完成,但面临性能问题,因此大多数平台都会使用单独硬件模块(GPU或者显卡)负责3D渲染。这种通过特定功能的硬件模块,来处理那些CPU不擅长的事务的方法,称作硬件加速(Hardware acceleration),相应的硬件模块,就是硬件加速模块。
众所周知,硬件设备是多种多样的,为了方便应用程序的开发,需要一个稳定的、最好是跨平台的API,定义渲染有关的行为和动作。OpenGL(Open Graphics Library)就是这类API的一种,也是最为广泛接纳的一种。
虽然OpenGL只是一个API,但由于3D绘图的复杂性,它也是相当的复杂的。不过,归根结底,它的目的有两个:
1)对上,屏蔽硬件细节,为应用程序提供相对稳定的、平台无关的3D图像处理API(当然,也可以是2D)。2)对下,指引硬件相关的驱动软件,实现3D图像处理相关的功能。
另外,openGL的一个重要特性,是独立于操作系统和窗口系统而存在的,具体可以参考后面软件框架相关的章节。
3. 软件框架
通过第2章的介绍,linux系统中图形有关的软件层次已经呼之欲出,具体如下:
该层次图中大部分的内容,已经在第2章解释过了,这里再补充说明一下:
1)该图片没有体现3D渲染、硬件加速等有关的内容,而这些内容却是当下移动互联、智能化等产品比较关注的地方,也是linux平台相对薄弱的环节。后续会在软件框架有关的内容中再着重说明。2)从层次结构的角度看,linux图形子系统是比较清晰的,但牵涉到每个层次上的实现的时候,就比较复杂了,因为有太多的选择了,这可归因于“提供机制,而非策略”的Unix软件准则。该准则为类Unix平台软件的多样性、针对性做出了很大的贡献,但在今天这种各类平台趋于整合的大趋势下,过多的实现会导致用户体验的不一致、开发者开发精力分散等弊端,值得我们思考。3)虽然图形子系统的层次比较多,但不同的人可能关注的内容不太一样。例如对Linux系统工程师(驱动&中间件)而言,比较关注hardware、kernel和display server这三个层次。而对Application工程师来说,可能更比较关心GUI Toolkits。本文以及后续display subsystem的文章,主要以Linux系统工程师的视角,focus在hardware、kernel和display server(可能包括windows manager)上面。
以X window为例,将hardware、kernel和display server展开如下(可从“这里”查看比较清晰的SVG格式的原始图片):
对于软件架构而言,这张来自维基百科的图片并不是特别合适,因为它包含了太多的细节,从而显得有些杂乱。不过瑕不掩瑜,对本文的描述,也足够了。从向到下,图中包括如下的软件的软件模块:
1)3D-game engine、Applications和Toolkits,应用软件,其中3D-game engine是3D application的一个特例。2)Display Server图片给出了两个display server:Wayland compositor和X-Server(http://X.Org)。X-Server是linux系统在PC时代使用比较广泛的display server,而Wayland compositor则是新设计的,计划在移动时代取代X-Server的一个新的display server。3)libX/libXCB和libwayland-clientdisplay server提供给Application(或者GUI Toolkits)的、访问server所提供功能的API。libX/libXCB对应X-server,libwayland-client对已Wayland compositor。4)libGLlibGL是openGL接口的实现,3D application(如这里的3D-game engine)可以直接调用libGL进行3D渲染。libGL可以是各种不同类型的openGL实现,如openGL(for PC场景)、openGL|ES(for嵌入式场景)、openVG(for Flash、SVG矢量图)。libGL的实现,既可以是基于软件的,也可以是基于硬件的。其中Mesa 3D是OpenGL的一个开源本的实现,支持3D硬件加速。5)libDRM和kernel DRMDRI(Direct Render Infrastructure)的kernel实现,及其library。X-server或者Mesa 3D,可以通过DRI的接口,直接访问底层的图形设备(如GPU等)。6)KMS(Kernel Mode Set)一个用于控制显示设备属性的内核driver,如显示分辨率等。直接由X-server控制。
4. 后续工作
本文有点像一个大杂烩,丢进去太多的东西,每个东西又不能细说。觉得说了很多,又觉得什么都没有说。后续蜗蜗将有针对性的,focus在某些点上面,更进一步的分析,思路如下:
1)将会把显示框架限定到某个确定的实现上,初步计划是:Wayland client+Wayland compositor+Mesa+DRM+KMS,因为它们之中,除了Mesa之外,其它的都是linux系统中显示有关的比较前沿的技术。当然,最重要的,是比较适合移动端的技术。2)通过单独的一篇文章,更详细的分析Wayland+Mesa+DRM+KMS的软件框架,着重分析图像送显、3D渲染、Direct render的过程,以此总结出DRM的功能和工作流程。3)之后,把重心拉回kernel部分,主要包括DRM和KMS,当然,也会顺带介绍framebuffer。4)kernel部分分析完毕后,回到Wayland,主要关心它的功能、使用方式等等。5)其它的,边学、边写、边看吧。
上文介绍了linux图形子系统基本的软件框架,以及GUI、Windowing system、3D渲染等基本概念。
我觉得,DRI在当前(或者说将来)的linux图形子系统中,有着举足轻重的地位,甚至可以说是新的linux图形框架核心思想的体现。本文将基于linux图形框架的发展历程,从Why、What和How三个角度,介绍DRI框架。
5.为什么需要DRI
在GUI环境中,一个Application想要将自身的UI界面呈现给用户,需要2个步骤:
1)根据实际情况,将UI绘制出来,以一定的格式,保存在buffer中。该过程就是常说的“Rendering”。不知道为什么,wowo一直觉得“Render”这个英文单词太专业、太抽象了,理解起来有些困难。时间久了,也就不再执著了,看到它时,就想象一下内存中的图像数据(RGB或YUV格式),Rendering就是生成它们的过程。通常来说,Rendering有多种表现形式,但可归结为如下几类:a)2D的点、线、面等绘图,例如,“通过一个for循环,生成一个大小为640x480、格式为RGB888、填充颜色为红色的矩形框”,就是一个2D rendering的例子。b)3D渲染。该过程牵涉比较复杂的专业知识,这里先不举例了。c)图片、视频等多媒体解码。d)字体渲染,例如直接从字库中抽出。
2)将保存在buffer中的UI数据,显示在display device上。该过程一般称作“送显”。
然后问题就来了:这两个步骤中,display server要承担什么样的角色?回答这个问题之前,我们需要知道这样的一个理念:
在操作系统中,Application不应该直接访问硬件,通常的软件框架是(从上到下):Application<---->Service<---->Driver<---->Hardware。这样考虑的原因主要有二:安全性和共享硬件资源(例如显示设备只有一个,却有多个应用想要显示)。
对稍微有经验的软件开发人员(特别是系统工程师和驱动工程师)来说,这种理念就像杀人偿命、欠债还钱一样天经地义。但直到X server+3D出现之后,一切都不好了。因为X server大喊的着:“让我来!”,给出了这样的框架:
先不考虑上面的GLX、Utah GLX等术语,我们只需要理解一点即可:基于OpenGL的3D program需要进行3D rendering的时候,需要通过X server的一个扩展(GLX),请求X server帮忙处理。X server再通过底层的driver(位于用户空间),通过kernel,访问硬件(如GPU)。其它普通的2D rendering,如2D绘图、字体等,则直接请求X server帮忙完成。
看着不错哦,完全满足上面的理念。但计算机游戏、图形设备硬件等开发人员不乐意了:请让我们直接访问硬件!因为很多高性能的图形设备,要求相应的应用程序直接访问硬件,才能实现性能最优[1]。
好像每个人都是对的,怎么办?妥协的结果是,为3D Rendering另起炉灶,给出一个直接访问硬件的框架,DRI就应运而生了,如下:
上面好像讲的都是Rendering有关的内容,那送显呢?还是由display server统一处理比较好,因为显示设备是有限的,多个应用程序的多个界面都要争取这有限的资源,server会统一管理、叠加并显示到屏幕上。而这里叠加的过程,通常称作合成(Compositor)。
6.软件架构
DRI是因3D而生,但它却不仅仅是为3D而存在,这背后涉及了最近Linux图形系统设计思路的转变,即:
从以前的:X serve是宇宙的中心,其它的接口都要和我对话。转变为:Linux kernel及其组件为中心,X server(如Wayland compositor等)只是角落里的一员,可有可无。
最终,基于DRI的linux图形系统如下
该框架以基于Wayland的Windowing system为例,描述了linux graphic系统在DRI框架下,通过两条路径(DRM和KMS),分别实现Rendering和送显两个显示步骤。从应用的角度,显示流程是:
1)Application(如3D game)根据用户动作,需要重绘界面,此时它会通过OpenGL|ES、EGL等接口,将一系列的绘图请求,提交给GPU。
a)OpenGL|ES、EGL的实现,可以有多种形式,这里以Mesa 3D为例,所有的3D rendering请求,都会经过该软件库,它会根据实际情况,通过硬件或者软件的方式,响应Application的rendering请求。b)当系统存在基于DRI的硬件rendering机制时,Mesa 3D会通过libGL-meas-DRI,调用DRI提供的rendering功能。c)libGL-meas-DRI会调用libdrm,libdrm会通过ioctl调用kernel态的DRI驱动,这里称作DRM(Direct Rendering Module)。d)kernel的DRM模块,最终通过GPU完成rendering动作。
2)GPU绘制完成后,将rendering的结果返回给Application。
rendering的结果是以image buffer的形式返回给应用程序。
3)Application将这些绘制完成的图像buffer(可能不知一个)送给Wayland compositor,Wayland compositor会控制硬件,将buffer显示到屏幕上。
Wayland compositor会搜集系统Applications送来的所有image buffers,并处理buffer在屏幕上的坐标、叠加方式后,直接通过ioctl,交给kernel KMS(kernel mode setting)模块,该模块会控制显示控制器将图像显示到具体的显示设备上。
7.DRM和KMS
DRM是Direct Rendering Module的缩写,是DRI框架在kernel中的实现,负责管理GPU(或显卡,graphics card)及相应的graphics memory,主要功能有二:
1)统一管理、调度多个应用程序向显卡发送的命令请求,可以类比为管理CPU资源的进程管理(process management)模块。
2)统一管理显示有关的memory(memory可以是GPU专用的,也可以是system ram划给GPU的,后一种方法在嵌入式系统比较常用),该功能由GEM(Graphics Execution Manager)模块实现,主要包括:
a) 允许用户空间程序创建、管理、销毁video memory对象(称作“"GEM objects”,以handle为句柄)。b)允许不同用户空间程序共享同一个"GEM objects”(需要将不唯一的handle转换为同一个driver唯一的GEM name,后续使用dma buf)。c)处理CPU和GPU之间内存一致性的问题。d)video memory都在kernel管理,便于给到display controller进行送显(Application只需要把句柄通过Wayland Compositor递给kernel即可,kernel会自行获取memory及其内容)。
KMS是Kernel Mode Setting的缩写,也称作Atomic KMS,它是一个在linux 4.2版本的kernel上,才最终定性的技术。从字面意义上理解,它要实现的功能比较简单,即:显示模式(display mode)的设置,包括屏幕分辨率(resolution)、颜色深的(color depth)、屏幕刷新率(refresh rate)等等。一般来说,是通过控制display controller的来实现上述功能的。
也许大家会有疑问:这些功能和DRI有什么关系?说实话,关系不大,之所以要在DRI框架里面提及KMS,完全是历史原因,导致KMS的代码,放到DRM中实现了。目前的kernel版本(如4.2之后),KMS和DRM基本上没有什么逻辑耦合(除了代码位于相同目录,以及通过相同的设备节点提供ioctl之外),可以当做独立模块看待。
参考文档[1]: https://en.wikipedia.org/wiki/Direct_Rendering_Infrastructure[2]: https://en.wikipedia.org/wiki/Wayland_(display_server_protocol)[3]: http://wayland.freedesktop.org/architecture.html[4]: Linux_kernel_and_daemons_with_exclusive_access.svg[5]: Wayland_display_server_protocol.svg
相关文章视频推荐:
深度:一文看懂Linux内核!Linux内核架构和工作原理详解
超细节!十年码农讲述Linux网络新技术基石——eBPF and XDP
【详细整理】数字通信中的同步技术:帧同步、载波同步、位同步 (建议收藏)
面对秋招,你准备好了吗?|简历梳理|offer选择|嵌入式开发|底层原理|Linux内核|驱动开发|架构师_哔哩哔哩_bilibili(版权归原作者所有,侵删)
八、linux系统?
一、什么是Linux
严格来说,单纯就一个Linux并不是操作系统,而是一个操作系统的内核,严谨一些可以说:linux 一般指 GNU 套件加上 linux 内核,因为在1991年linux内核发布时GNU完成除了系统内核之外各种必备软件的开发,在Linux Torvalds和其他开发人员努力下,GNU组件可以运行在linux内核上所以说他俩也可以统称为linxu内核,两者几乎不可分割。
二、linux分支有哪些
Linux系统是个统称,其发行版流派众多。目前有Red Hat、Debian、Suse、Ubuntu等发行版本,它们都是使用Linux内核编译的操作系统,都是Linux系统,却有各自的特点。总体来说,Linux的发行版本大体分可为两类,一类是商业公司维护的发行版本,一类是社区组织维护的发行版本。前者以Redhat(RHEL)为代表,后者以Debian为代表。
如下图所示:
2.1 Debian系列
Debian系列主要包含Debian和Ubuntu等。Debian最具特色的是apt-get/dpkg包管理方式,在二进制文件发行方式中,APT应该是最好的了。Debian的资料也很丰富,有很多支持的社区,比较方便找到解决问题的方法。Debian社区的网址:https://debian.cn/。
Debian自家纯净系统,一般来说Debian适合于服务器操作系统,它比Ubuntu要稳定得多。Debian这款操作系统派生出了多个Linux发行版,有37500多个软件包,使用方便,Debian使用apt或aptitude来安装和更新软件。
Ubuntu名称来源于非洲南部祖鲁语的“ubuntu”一词(译为吾帮托或乌班图), 意思是“人性”。Ubuntu是Debian的一款衍生版,基于Debian发行版和GNOME桌面环境,并在Debian系统上封装了许多工具。Ubuntu有着漂亮的用户界面,完善的包管理系统,强大的软件源支持,丰富的技术社区,广泛应用于桌面机、服务器、云计算等各领域。同时Ubuntu是免费的,是非常受欢迎的Linux系统。 Ubuntu使用 apt-get命令安装软件包,跟CentOS不同的是,它不支持rpm格式的安装。
2.2 Redhat系列
1. RHEL
RHEL(Red Hat Enterprise Linux):RHEL是面向企业客户的Linux发行版,是一款收费的操作系统。它支持虚拟化技术、多核处理等;安全性高,稳定可靠。
CentOS(Community ENTerprise Operating System),中文称作社区企业操作系统。它是一款企业级Linux发行版,是使用红帽Linux中的免费源代码重新构建而成。CentOS是免费的、开源的、可以重新分发的开源操作系统。CentOS人群数量大,资料非常多;包管理方式采用基于RPM包的YUM包管理方式,包分发方式是编译好的二进制文件;CentOS稳定性非常好,适合于搭建公司服务器使用。
2. Ubuntu和Debain属于一个系列都是基于linux内核的桌面PC操作系统,
下面我们深入一下下。首先,我们看看一个具有linux内核的操作系统包含哪些部分。一般包含四大部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以很轻松地运行应用程序、管理文件并使用整个系统。
1. Linux应用程序
一个好的操作系统会提供一套方便于用户使用系统的应用程序,如文本编辑器、办公套件、Internet工具、数据库等。
2. Linux文件系统
文件系统是文件存放在存储设备(如磁盘)上的组织方法。如EXT2、EXT3、FAT、FAT32、VFAT等。
3. Linux Shell
Shell是操作系统系统的用户界面,提供了用户与内核进行交互操作的一种接口,是一个命令解释器。它接收用户输入的命令并把它送入内核去执行。
4. Linux内核
内核是操作系统的核心。一个操作系统是需要执行一些任务,如请求内存资源、执行计算, 连接网络,等等. Linux内核就负责处理所有这样的请求,就像人的大脑一样。
Linux内核从功能上讲具有五大模块化功能:进程管理、内存管理、文件系统管理、设备控制和网络管理。
4.1 进程管理的体现:
Linux内核负责进程创建和销毁, 并完成进程之间的通信,以及进程的输入和输出.而且,进程管理控制了多个进程对Soc上的一个或者多个cpu资源的使用
4.2 内存管理
内存资源的使用策略对操作系统性能体现来说,尤为重要。 内核在有限的内存资源上,为每一个进程建立了一个虚拟地址空间。 内核的不同功能部分与内存管理子系统通过一套函数调用交互, 使得通信高效简单。
4.3 文件系统管理
Linux操作系统中,几乎任何东西都可看作为一个文件(一切皆文件). 内核中大量使用kobject等结构体,来把一堆非结构化的硬件组织成一种多层次的数据系统。另外, Linux 支持多个文件系统类型。如ext4等
4.4 设备控制
几乎任何一个操作系统最终都运行在一个物理平台上。内核中包含访问平台上硬件设备的驱动代码。
4.5 网络功能
大部分网络操作不会关联具体的进程,因为数据包的传输是异步事件。应用程序访问数据包之前,内核完成数据包的收集、标识和分发等任务。
自身感觉Ubunt用着是最舒服的,Ubuntu尊崇“免费开源和个性化”,拥有很人性化的亮丽的交互界面,强大的软件源支持,主流驱动大都可以在安装包中找到;另外因为Ubuntu是基于 debian 系列的,所以有 dpkg 套件可以在线获取安装软件,拥有完善的包管理机制,兼容性好,应用非常多,可以下载很多个性化小工具,个性化体验非常棒;
九、Linux系统?
Linux常用命令详解(两万字超长文)十、linux 什么系统?
Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
热点信息
-
在Python中,要查看函数的用法,可以使用以下方法: 1. 使用内置函数help():在Python交互式环境中,可以直接输入help(函数名)来获取函数的帮助文档。例如,...
-
一、java 连接数据库 在当今信息时代,Java 是一种广泛应用的编程语言,尤其在与数据库进行交互的过程中发挥着重要作用。无论是在企业级应用开发还是...
-
一、idea连接mysql数据库 php connect_error) { die("连接失败: " . $conn->connect_error);}echo "成功连接到MySQL数据库!";// 关闭连接$conn->close();?> 二、idea连接mysql数据库连...
-
要在Python中安装modbus-tk库,您可以按照以下步骤进行操作: 1. 确保您已经安装了Python解释器。您可以从Python官方网站(https://www.python.org)下载和安装最新版本...