热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux2.6内核的精彩世界全集

Linux2.6内核的精彩世界全集--Linux通用技术-Linux编程与内核信息,下面是详情阅读。
Linux 2.6内核的精彩世界(一)
2003年岁末,Linux社区最鼓舞人心的消息莫过于期盼已久的Linux内核2.6版正式推出。作为一个主要发布版本,2.6相对于2.4有很大的改动;它引入了许多新的特性,同样也去除很多过时的特性。

它在哪些方面有大的改动?它对Linux的开发人员以及其他层面的Linux用户可能有什么样的影响?阅读本文,您将得到答案。--译者

尽管我们第一次启动Linux 2.4似乎只是昨天的事,时间已经流走,内核开发团队的2.6版内核开发工作已经接近完成了。本文将试图描述2.6内核中的许多新特性(侧重i386平台的Linux)。和封闭源码的软件的预发布不一样的是,这里所描述的所有特性当前都是2.5版内核开发树中可用的(其中一些的bug少一些,另一些bug多一些)。(按照Linux的传统,偶数版本的内核是稳定的,奇数版本的只是开发用的)。也就是说,这里所描述的一些特性在实际的2.6版本中仍可能被去除或标志为"experimental"(试验性)。然而内核当前处于特性冻结(feature-freeze)时期,最终的发行版本应该不大可能过于偏离这里的描述。同时也应该清楚这里描述的一些"新"特性在第一次出现在2.6系列内核后,可能被向后移植到了官方的或者发行版供应商的2.4版内核之中。

或许使得这篇文章更为晦涩的是,即将到来的内核的版本号至今仍未确定。最可能使用的版本号是2.6,但是一些人提议版本号可以使用3.0,因为这个版本中包含了NUMA以及无MMU系统的支持。为论述方便,本文将一直使用2.6作为即将到来的内核的版本号。

您正在阅读的是本文档(《Linux 2.6内核的精彩世界》)非正式版的第一版,完稿于2003年7月13日,基于2.5.75开发版内核。随着Linux内核最后工作的完成,这份文档将发布其他非正式版,但是这份文档的正式版直到2.6的最后发布才宣告完成。由于本文是非正式版的第一版,其中可能有错误或者疏漏;如果您发现了它们,请告诉我,我将很高兴地去修正它们。

到目前为止的故事...

Linux内核始于1991年由Linus Torvalds为他的386开发的一个类Minix的操作系统。Linus初始曾想命名为这个系统为Freax,但很幸运的是最后他最后没有那样做。Linux 1.0的官方版发行于1994年3月,包含了386的官方支持,仅支持单cpu系统。Linux 1.2发行于1995年3月,它是第一个包含多平台(Alpha,Sparc,Mips等)支持的官方版本。Linux 2.0发行于1996年6月,包含很多新的平台支持,但是最重要的是,它是第一个支持SMP(对称多处理器)体系的内核版本。Linux 2.2在1999年1月到来,它带来了SMP系统上性能的极大提升,同时支持更多的硬件。最后,Linux 2.4于2001年1月发布,它进一步地提升了SMP系统的扩展性,同时它也集成了很多用于支持桌面系统的特性:USB,PC卡(PCMCIA)的支持,内置的即插即用,等等。Linux 2.6不仅包含了这些特性,同时也是一个无论对相当大的系统还是相当小的系统(PDA等)的支持都有很大提升的"大跨越"。

多种平台支持

能够支持相当广泛的硬件和平台,是采用Linux作为内核的操作系统(比如 GNU操作系统, 系统和环境常常是和Linux一块分发。Linux一般不被认为是独立的操作系统,只是操作系统的内核。)的优势之一。Linux自1.2版就开始包含对新的处理器类型和特性的支持,最新的Linux 2.6内核发布版本也不例外。这种趋势不会直接影响到Linux在Intel平台下的使用,同时使得Linux能在尽可能大的范围内被使用,这一点非常重要。

小规模 - 嵌入式系统中的Linux

Linux 2.6 扩展多平台支持的一个主要途径就是把uClinux的大部并入了主流内核(mainstream kernel)。uCLinux(可以发音为"you-see-Linux",但更正确的拼写,首字母应该式希腊字母"mu")是将Linux应用在微控制器平台的项目。很多年来,这个Linux分支为许多嵌入式芯片提供了支持,把它更多的集成到主流内核中是一件非常有意义的事。

不像通常的Linux移植版本,这里描述的嵌入式移植版由于硬件限制和通常的Linux相比,不具有所有类似的特性。主要的区别在于:这些移植版是针对于没有内存管理单元(MMU)的处理器的(Intel的CPU从386开始就有MMU了)。缺少MMU的支持,运行真正的多任务系统时,任务之间没有内存保护机制(因此任何程序都可以使得其他程序崩溃),一些有关进程派生的系统调用也无法实现。正是因为没有内存保护机制(或者说,没有任何安全性可言),它们不适用于多用户系统。

在对嵌入式处理器支持上,Linux 2.6有四个主要的新进步。首先是对Motorola的新型嵌入式m68k系列处理器移植。这些被命名为Dragonball或是ColdFire的处理器可以在Motorola,Lineo,Arcturus或是其他厂商生产的系统或是评估板上找到。大多数Linux用户应该对这些处理器相当熟悉,因为从Palm 1000到最新的Palm III,他们一直是Palm Pilots的心脏。不幸的是,对早期没有MMU的m68k处理器(比如早期苹果机上使用的68000系列)还没有支持。最新支持的嵌入式平台还包括日立(Hitachi)的H8/300系列(不包含H8S,但可能会尽快地集成进来)以及NEC v850处理器。

无论怎么强调Linux 2.6旨在支持无MMU系统的主要体系结构变化,都不为过分。所有Linux的前期版本,不论直接或是间接,都起源于Linus最初在Intel 80386上的工作,局限性是固有的。沿着这个方向(对无MMU系统的支持),将来也许会有更多的其他早期的硬件被支持(事实上,已经有关于此目的的项目启动)。但是,不像为现代的以及仍在生产中的嵌入式处理器的提供支持,对早期的硬件的支持被更多地认为是基于某种爱好,并且对于最终用户而言很可能是无用的(因此在今后的Linux的官方发布版本也许不会将其包含在内)。

最新的Linux版本包含了对Axis通信公司的ETAX CRIS("Code Reduced Instruction Set")处理器的支持(更确切地说,支持ETRAX 100LX及更新的产品),它从技术的角度而言不是uCLinux合并的一部分(因为它包含MMU单元)。实际上对这款处理器的支持在2.4开发周期就已经有了,但它在2.4.0以后才被引入,所以现在应该提到它。它是主要用于网络设备的嵌入式处理器。与此相关的ETRAX 100,是得到uClinux支持的无MMU处理器,但是在主流的Linux内核中相关支持却没有集成进来。

Opteron支持 - 消费级的64位Linux

另一个在2.4.x开发环节就已经并入但这里仍然值得提及的是对AMD Opteron芯片(基于AMD64体系结构)的支持。Opteron向后与Intel-clone的处理器兼容,并且,甚至可能得到微软的支持。是它还是Intel的Itanium家族的某一成员成为64位消费级产品的事实标准现在还很难下定论。

尽管2.4系列内核的后期版本已经可以在该芯片上运行,但作为产品应用仍受到了很大限制。对高端用户来说,最严重的问题是,每个应用程序的RAM的使用都被限制在512MB以内。另一方面,新内核对在该平台上运行x86(32位)的程序的支持得到了改进。

子体系结构(Subarchitecture)支持

Linux 2.6除了对许多新的处理器体系结构外,还包含了一个称为子体系结构(Subarchitecture)的新概念。以前,Linux通常假设处理器和其他硬件是配套的。也就是说,i386系列处理器只会在PC/AT服务器上使用。这条针对i386的假设在Linux 2.4中就被打破,因为i386的额外支持使其可以在SGI的视频工作站(Visual Workstation)中使用。(事实上,在其他非i386体系结构上,这个假设早被打破了。比如,m68k很早就支持Amiga,Michintosh等平台。)Linux 2.6对于此最大的变化就是,让这个特性以及概念成为标准,以便所有的体系结构都可以用相似而健全的方法来处理,以便更清晰地划分模块。

标准的确立使得i386可以运用于两个新的平台。第一个是NCR的Voyager体系。这是一个对称多处理器(SMP)系统(在Intel的MP规范标准确定之前就已经开发出来了),它支持多达32个486-686的处理器配置。实际采取这种体系结构的产品处理器的配置数目要相对少一些,而且目前并不是所有的型号都得到了Linux的支持(最早的就不支持)。第二种得到最新支持的体系结构是更为广泛使用的由NEC开发的PC-9800平台,它曾是日本市场占统治地位的PC平台,一直到最近几年。最初的PC-9800装载的是8086处理器,最终发展到奔腾级处理器和SMP支持。(当然,Linux对它的支持局限在386以上。)尽管在美国它完全不为人所知,微软的Windows 95之前的版本曾移植到这个平台上。该平台由于生产商对标准PC的偏爱,生产已经中止。

Linux对差异细微的硬件类型支持的形式化,使得操作系统能更容易的移植到其他平台上,比如移植到专为存储设计的硬件或者是使用在工业领域的主流处理器。需要澄清的是,子体系结构也不是任何时候都管用的,它能够发挥作用是因为这些可移植的系统非常底层构件(比如IRQ路由)有或多或少的不同。比起在X-box上运行Linux的差别来说,驱动程序等相对小的差别还不足以把它们从传统的i386系统中分开。Linux对X-box的支持,就不是子体系结构的问题。

大规模 - 非一致存储访问体系结构(NUMA)和大型机

除了以上所提及的新硬件类型的支持之外,新的Linux内核发行版也包含了对大型服务器(一些运行i386处理器,也有些运行其他处理器)更多的支持。对Linux来说,这样的特性是新近加入的,还有许多优化工作需要完成。这是一个Linux发展相当迅速的领域,我们能够预计在不久的将来,Linux将成为此领域的有力竞争者。

在此方面最大的改变就是Linux对NUMA服务器的最新支持。NUMA(非一致存储访问)在多进程世界里是超越SMP以及提升多处理器系统效率的一个进步。SMP系统的设计上有着许多和对应单处理器系统类似的局限性。其中最大的设计局限之一就是系统中只有唯一的一块内存区,所有的处理器对它都平等地对它进行访问。在多处理器系统里,这样会在同一条内存总线上的多处理器之间引起相当高的竞争,导致性能瓶颈。NUMA服务器,通过引入了以下的理念解决了这个问题:对于某个特定的处理器,一些内存比其他一些的更为接近(close)。可以这样简单地设想(同时技术上也不会有严重错误),你的系统有许多包含了处理器、内存以及其他元件(比如I/O扩展卡)。系统中有很多这样的卡,它们可以相互通讯;显而易见,相对其他卡上的内存,每块卡上的处理器能更快的访问本地内存(自己的卡上内存)。从许多角度上看,NUMA体系结构就是一个紧密耦合的集群特例。

为了给NUMA主机提供良好的支持,Linux十分必要在许多方面进行调整,以使新模型更具效率。首先,建立了一个内部拓扑API,以使内核知道处理器和内存以及其他IO设备间的相互关系。有了内部拓扑API的支持,Linux的进程调度器可以理解这些关系,并且会尝试优化任务以达到最佳的本地资源使用。此外,许多NUMA主机在各个节点(nodes)的线性内存区域之间存在空洞(holes)。新内核已经能够合理的处理这种不连续情况。内核还有许多其他使得Linux可以支持高端(high-end)主机的变化,这也是内核发展的一个明确方向。再过一年,我们可以期待Linux在高端机型上效率以及其他方面的进步。
推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
author-avatar
无聊人生918_644
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有