2017-02-25 11:11:26 wyg_031113 阅读数 910
  • Android 30分钟从零开始到HelloWorld

    Android是什么?   是一个针对移动设备的操作系统和软件平台 基于Linux内核 由 Google和开放手机联盟OHA开发的 容许使用Java 语言来开发和管理代码 Android开放源代码,Android遵从Apache Software License (ASL)2.0版本的协议 Android于 2007年11月5日开放手机联盟成立时发布 移动开发现状 Android发展历史 Android架构 Android学习资源

    136 人正在学习 去看看 Frank Lee

      Linux是开源的操作系统,其系统所有源代码都是开放的,这对研究操作系统是十分方便的。

        Linux内核发展至今,版本特别多,比较经典的是2.6内核。所以本文以研究 2.6内核为主。可是内核比较大,从哪里入手是一个十分重要的问题。显然,一开始就看内核源代码是不切实际的,是可能被细节搞晕的。在计算机专业的课程中我们都学习过操作系统课程,对操作系统的大概功能有所了解,而那些linux内核的书也对linux内核框架作了整体上的介绍,这些都是基础知识。也许我们没有时间去研究清楚操作系统的每一个细节,但是我们却可以研究我们感兴趣的部分。

 

        面对内核源码,最直接的一个问题就是如何编译内核,如何安装新内核到系统中? 内核编译安装好后, 就可以加载运行了。而grub是如何加载内核的?grub是怎么实现的?elf文件格式是什么样的?进而引出程序的编译、链接、加载等问题。研究一个开源程序的方法之一就是跟踪调试程序,然而内核不是一般程序,不能直接调试,因此需要搭建内核调试环境。

 

        操作系统分为进程管理、内存管理、设备管理、文件系统、网络等部分,针对某一模块学习时,又会提出更多的问题。研究某一确定模块时,可以假定其他模块是已知的,而不必要陷入其他模块的细节中去。

 

研究内核的深度也各有不同,有以下四 级别:

  1. 只看操作系统相关书藉,了解其原理,不看源码。
  2. 在源码中能找到对应模块的实现,了解部分技巧与细节。
  3. 可以修改源码以实现自己想要的功能。
  4. 可以在内核中实现一套独立的系统。

自顶向下的研究内核:

如进程管理这一部分,本打算从CPU加电起到进程相关数据结构初始化,进程创建,进程调度这样一步步研究,结果发现在对源码一无所知的情况下,看进程初始化,又陷入了中断、文件系统、内存的初始化细节中。所以打算从进程调度 进程创建开始研究。

 

另外,程序=数据结构+算法。

先研究数据结构(task_struct)中各字段的作用,再研究调度算法,并分析对应源代码,从宏观上把握进程调度框架,再从细节上逐步深究。

 

现在内核大多使用面向对象的思想,可以从对象的角度考虑问题。

内核代码较多,搞清楚内核代码组织的结构和原理。

 

内核设计思考:

为什么这么设计? 考虑了哪些因素? 有什么要求?

怎么设计? 这样设计有什么好处和坏处?

 

内核中的数据结构之间的关系:

同种数据结构之间如何组织?(树,链表,有个链表的初始化的头结点)

不同数据结构之间的关系?指针指向?用个数字标识符,然后用hash表关联数字与指针?


阅读源码的工具

内核源码

GDB GDBTUI DDD跟踪 source insight

SystemTap stap  kdb

静态阅读

修改源码验证一些问题

写一些应用


下面是Linux操作系统整体架构(图片来源于国嵌PPT中)


Linux内核架构



2009-05-06 09:51:00 LinuxKerneltravel 阅读数 946
  • Android 30分钟从零开始到HelloWorld

    Android是什么?   是一个针对移动设备的操作系统和软件平台 基于Linux内核 由 Google和开放手机联盟OHA开发的 容许使用Java 语言来开发和管理代码 Android开放源代码,Android遵从Apache Software License (ASL)2.0版本的协议 Android于 2007年11月5日开放手机联盟成立时发布 移动开发现状 Android发展历史 Android架构 Android学习资源

    136 人正在学习 去看看 Frank Lee
 上一篇日志写了“变-内核生命力之源”后,总觉得意犹未尽,有那么一些该表达的东西没有展现出来,它们似乎藏在大脑的神经末梢上。今天,在IBM的Linux技术专区上,读到M. Tim Jones写的这篇"Linux内核发展-2.6.28 和 2.6.29 版本中的新特性介绍",其中开篇的“生命的必然不仅包括死亡和纳税,还包括 GNU/Linux® 操作系统的发展”一句,犹如在迷茫星空中寻找那颗星星,它就是我想表达的意思。转载在此,希望能给大家以启迪。

--------------------------------------------------------------------------------------------------------------------------
生命的必然不仅包括死亡和纳税,还包括 GNU/Linux® 操作系统的发展,最新的两个内核发布的确没有让人失望。2.6.28 和 2.6.29 版本包含了大量新的功能,比如先进的企业存储协议、两个新的文件系统、WiMAX 宽带网络支持以及存储完整性检查。通过本文了解为何现在就应该升级 Linux 内核。

2008 年底,2.6.28 版本的内核出现。随后,通向下一版本 —2.6.29— 的通道也打开了。由于 Linux 内核采用的是一种分布式的开发过程,所以它并不总能清楚一个特定内核发布中会有什么(或集成了什么),但是这两个最新发布不管是从短期还是从长期来看都是很有意思的。2.6.28 中一个有趣的里程碑是该版本的 Linux 的源代码首次超过 1000 万行。


这两个发布引入了新的文件系统(一个已经稳定,一个尚在实验中)、对图形和可视化的新支持,以及新的企业存储特性。接下来,我先大致介绍 2.6.28 中的一些主要新特性,然后再介绍 2.6.29 带来的新特性。

2.6.28 中的新特性

Linux 内核 2.6.28 在 2008 年 12 月 24 日发布(2009 年 2 月已经是第 5 个发布版)。2.6.28 第一个的发布版包括大量更改,以至于它自身的更改日志文件大小已接近 6MB。最新的这个发布版很稳定,被用作 Ubuntu 9.04 Jaunty Jackalope 的内核。

第 4 扩展文件系统

第 4 扩展文件系统(The fourth extended file system)的名字 ext4 是由 ext4dev 改变而来的,这意味着它已经足够稳定,可以常规使用。Ext4 源自第 3 扩展文件系统(ext3),并具有更好的性能、特性和可靠性。Ext4 允许使用 exabyte 文件系统,这种系统支持的文件数量更多、体积更大、目录结构更深。它还包括多块和延迟块分配,以提升性能。Ext4 既具有前向兼容性又具有后向兼容性(这意味着根据所使用的特性,ext4 文件系统可挂载在 ext3 磁盘格式之上,反之亦然)。通过大规模的改变可以逐渐将文件系统从 ext3 迁移到 ext4。有关 ext4 文件系统的更多信息,请参见 参考资料

虽然 ext4 能够成为未来新的标准 Linux 文件系统,但是其他的文件系统也在不断出现,甚至能够提供更好的伸缩性和特性。Btrfs 就是这类文件系统之一,它现在已经成为了 2.6.29 内核中的一种试验文件系统。Btrfs 是一种兼容 Linux 的文件系统(参阅 GNU Public License [GPL]),它的特性与知名的 ZFS 不相上下。

Graphics Execution Manager 内存管理

过去一年的时间内,Linux 在图形堆栈领域取得了实质性进展。毫不奇怪,正是在该领域内,图形处理器(GPU)为呈现提供了有用协助。在很多情况下,GPU 比它们所协助的中央处理器(CPU)更为强大。

为了支持当前以及未来的 GPU,Linux 图形堆栈有一个领域需要提高,即内存管理,包括缓冲管理、页影射、放置和缓存。这一点极为必要,因为图形应用程序(尤其是三维应用程序)能够消耗大量内存。而借助 Graphics Execution Manager (GEM),就能够使用现有的内核子系统(比如使用共享内存文件系统或 shmfs 来管理图形对象)管理混入内核的图形数据。

引导跟踪器

虽然引导 Linux 所需的时间已经逐渐缩减,但是还是有人认为引导时间过长。因此,引导时间还需要不断地监查。此内核包含了这样一个新特性,即可以测量和记录 init 调用的时间。然后可以使用它们可视化引导的流程和性能。该过程是可配置的(要求必须启用收集数据的功能),但是一旦数据收集完毕,就可以使用离线脚本(包括图形描述)对这些数据进行分析,而这最终会导致更短的引导时间和更为优化的引导过程。此更新还融入了调用线程的过程标识符(PID)以便可以平行查看引导过程。

冻结器

为了在暂停操作系统期间将其迁移到一个新的主机(比如虚拟机 [VM]),我们专门设计了一个称为冻结(和解冻)的新功能。这个新特性能够让任务组或文件系统冻结并保持在冻结时状态,然后再解冻并重新引入这个任务组或文件系统。

任务在容器 的上下文中被冻结,这个模式能在用户空间级别(一个内核支持多个用户空间)虚拟化操作系统。这种新功能能够在主机之间迁移一组过程,这对均衡负载非常有用。也可以冻结文件系统来支持文件系统备份的快照。目前,文件系统冻结是通过具有参数 FIFREEZEFITHAWioctl 来实现的。

在容器的外面,这个新冻结/解冻模式还可以用于检查点。在这种应用中,可以以特定的间隔(检查点)冻结一组相关的进程,然后解冻特定的时间点以回到某个已知状态。

虚拟内存伸缩性的改进

由于 Linux 在虚拟系统中应用的增加 — 尤其是具有多处理器和大量内存的系统 — 扩展内存的使用对性能非常重要。Kernel 2.6.28 包含了与内存有关的大量的伸缩性改进。例如,这个内核维护分开的 Least Recently Used (LRU) 列表,一个用于文件支持的页,另一个用于交换支持的页。这就使得内核能够更多地集中于交互支持的页,而不是文件支持的页,因为前者更有可能被写入到磁盘。

另一项更改分离了可收回的页和不可收回的页(比如通过 mlock 锁定的页)。以这种方式,分页代码就无需迭代 LRU 内不可收回的页,这使具有大量页的系统的性能得到提高。







磁盘改进

2.6.28 内核包含很多针对磁盘的改进。本小节详细介绍固态硬盘(SSD)的改进和 ATA 设备的保护。

对 SSD 支持的改进

SSD 是对传统磁盘进行性能改善的一种很好的方式。SSD 的反应时间更短、随机读取更好,而且耗电少噪音低。但是 SSD 与一般的硬盘驱动(HDD)差别悬殊,所以必须更改 Linux 才能使用 SSD。SSD 最根本的一个问题是它们必须耗损其内部闪存中的块,而耗损会缩短 SSD 的寿命。减少这种影响的一种方式是告知 SSD 一个块何时不再有效(有可能是因为文件删除)。当某个块从此 SSD 释放后,它就不再是被耗损的对象了,进而能将此设备的总体耗损降至最低。但是为了支持此操作,文件系统必须要能将此信息传递给设备。

T13 标准委员会已经创建了一种新的 ATA 协议扩展来支持在 trim 命令上下文内传递这种消息。当 SSD 收到这个新命令后,它就可以将所定义的那些块添加到其释放列表,不会再担心这些块再成为损耗的一部分。Linux 的这个块层组件称为丢弃请求,它来自于更高级别的文件系统的文件删除。一个丢弃请求是此块层的一部分,提供了丢弃块的途径,并最终会导致向提供支持的 ATA 设备发出一个 trim 命令。更进一步的改进还包括智能地调度这些丢弃请求,以便它们能够与其他请求结合来执行块请求队列的重排序操作,从而更好地处理相关的丢弃和写请求。

改进 ATA HDD

ATA HDD 的一个非常有趣的可靠性改进就是震动保护,这种突然的晃动会破坏笔记本电脑的 HDD。ATAPI 规范定义了一个名为 IDLE IMMEDIATE 的命令,它可以闲置 HDD 并收回磁头以防止它们触及盘片。内核通过一个名为 /sys/block/*/device/unload_heads 的 proc 文件提供这个命令。当一个值写入到此文件且后续的 ATA 命令被写到各自的磁盘后,磁头就被收回,并且所有输入/输出(I/O)都会根据一个计时器延迟很短的一段时间。当计时器超时后,I/O 就会恢复正常。IBM 笔记本曾经实现这个特性,用于访问加速器以测量加速度(决定笔记本是否在坠落)。图1 是一个总体流程。


图 1 ATA 硬盘保护的总体流程
ATA 硬盘保护的总体流程






2.6.29 中的新特性

2.6.28 的一些有用的新特性在 2.6.29 中得到了进一步改善。

Btrfs

2.6.29 中最为重要的一个改进是添加了 Btrfs(或 B-tree FS),它最初是由 Oracle 开发的。Btrfs 是对应于 Sun 的 ZFS 开发的,用于构建带磁盘完整性保证的可大量伸缩的文件系统。除了 ext4 的很多先进特性之外,Btrfs 还支持对象级别的镜像和条带化、写时复制功能、 快照(及快照的快照)、完整性和内部压缩。它支持最多 16 exabyte 的卷和文件,并且每个卷内最多可以包含 264 个文件。为了协助转化,可以将文件系统从 ext3 升级到 Btrfs(反之亦然,但只能在实现转化之后)。

Btrfs 可以定义一种面向大量企业文件系统的新标准,包括具有在线修复的容错功能和简化的管理功能。虽然还处于测试阶段(还不适合用于查看之外的其他用途),但是 Btrfs 的确包括了一个特性集合,可让它更适合于未来可伸缩的 Linux 存储。

联网改进

除了对各种网络设备进行了大量改进之外,还有其他的几个改进很值得一提。第一个就是 Generic Receive Offload 架构,它卸载网络发送(类似于 Large Receive Offload,但独立于协议)。

还可以找到对后向堵塞通知(BCN)的支持,这以消息的方式加紧控制循环,从而改进了堵塞管理。在新数据中心部署以太网时,这个特性是必须具备的。

最后值得一提的是,2.6.29 在 Linux 中引入了一种 WiMAX 无线宽带网络堆栈(目前基于 i2400m USB 驱动程序)。请注意,它不同于 Wi-Fi,因为 WiMAX 的点对点连接使用的是得到许可的频段,而且服务质量更高。

内核模式设置

对内核引导过程和图像模式的一个有趣更改是基于内核的模式设置(KMS)。此特性允许在所需组件初始化后由内核控制图形硬件(比如 PCI 总线和显卡)。通过这种方式,内核能够在引导过程的更早时期输入理想的屏幕分辨率,这就减少了屏幕闪动和显示失败(由于重置图像芯片),并允许在服务器启动之前适当地设置显示器。

KMS 的另一个优势是在暂停之后能够改进重新初始化:由于初始化是在内核完成的,所以效率更高。最后,由于内核负责管理图像芯片,所以可能无需引导权限就能运行服务器。这样能够消除一组潜在的漏洞,从而加强了操作系统。






结束语

在撰写本文之时,2.6.29 已经处于稳定阶段,并在向 2.6.30 迈进。在 2.6.29 中,您可能还会发现 Squashfs(一个只读文件系统)终于出现在这个主流的内核中。该内核还多了一组能基于路径名进行强制访问控制的安全钩子。除了使用标准的 Data Integrity Field(T10-DIF)进行磁盘完整性检查之外(某些磁盘使用它进行端对端和空闲时完整性检查),该内核还添加了一种新的协议 Fibre Channel over Ethernet(FCoE)。

所以,随着 Linux 的不断进步,我们将会不断发现新的功能、改进的可伸缩性以及不断提高的安全性。像苏格兰威士忌一样,Linux 将随着时代的前进而不断进步,并且愈久弥香。关于内核更改和未来发展的更多信息,请参阅 参考资料 部分。



参考资料

学习
  • 第 4 扩展文件系统(ext4)将会成为桌面 Linux 系统的新标准。查阅 “剖析 ext4”(developerWorks,2009 年 2 月)了解 ext4 中的其他一些高级特性。对于既要求可伸缩性又要求效率的大型存储系统,Btrfs 很有可能成为未来的最佳选择。通过 Btrfs Wiki 可以了解有关 Btrfs 的更多信息。

  • 图像处理器不断演进并且给系统带来的新要求,这就要求以新的方式管理它们。过去常用转换表影射(TTM)进行一般用途的内存管理,现在我们经常使用 GEM 改进内存管理性能。从 lwn.netMemory management for graphics processors 更多地了解 GEM(以及更早的 TTM)。GEM 为对象管理使用了共享内存子系统。要了解更多有关共享内存(/dev/shm)及其使用的信息,请查阅 这个实用教程

  • 无论 Linux 引导过程有多快,似乎总是会有些人抱怨它们太慢。幸运的是,我们有办法改进它。了解引导过程的时间花在何处是优化它的第一步。这个 新的内核跟踪选项 提供了测量和改进 Linux 引导时间的方法。

  • 耗损是在 SSD 中使用闪存必须考虑的重要的方面。在 “Linux flash 文件系统剖析”(developerWorks,2008 年 5 月)中可以了解耗损的两个方面。耗损的一个重要要求就是丢弃与磁盘不再相关的块的能力。ATA 提供了新的磁盘级命令 trim 来进行 SSD 上的丢弃操作。Linux 通过 块层丢弃请求 对此提供了支持。

  • 在虚拟化方面,2.6.28(及其后来的 2.6.29)包含了大量新特性。其中最为有趣并且有可能支持过程组检查点的特性是 冻结容器和文件系统。2.6.28 内的另一项新特性是将 PCI 设备直接传递给客户操作系统,而不是将其交给系统管理程序管理。

  • 有关 Linux 容器的概览,可以参阅 “LXC:Linux 容器工具”(developerWorks,2009 年 2 月)。还可以阅读 “安全 Linux 容器实现指南”(developerWorks,2009 年 2 月)了解使用 SELinux 增强容器安全性的方式。

  • 要了解有关笔记本加速器的一些创新使用方式,可以阅读 “Linux 笔记本基于 “敲打” 的命令”(developerWorks,2006 年 7 月)、“通过振动向 Linux ThinkPad 传输信息”(developerWorks,2006 年 11 月)和 “ThinkPad 健身操:通过翻转和摇动笔记本电脑来控制应用程序”(developerWorks,2008 年 3 月)。

  • 下一代宽带无线技术 WiMAX 也即将添加到 Linux 内核(2.6.29)中。此技术将包含基于 Institute of Electrical and Electronics Engineers (IEEE) 802.16e 标准集的用户空间和内核组件。

  • Generic Receive Offload(GRO)是在很多 IP 网络堆栈内的随处可见的 Large Send Offload 特性的概括。有关 GRO 的更多信息,可以在 commit loglwn.net 上找到。

  • T10-DIF 是一个企业级数据完整性特性,在 Linux 已经可用。DIF 保护磁盘上的数据,并能通过向磁盘上的每个块添加完整性信息来解决无记载数据损坏的问题。将 DIF 引入到 Linux 内核是以 Oracle 为首的一种多厂商解决方案,并包含在 来自 Oracle 的开源文章 中。

  • developerWorks Linux 专区 寻找为 Linux 开发人员(包括 Linux 新手入门)准备的更多参考资料,查阅我们 最受欢迎的文章和教程

  • 在 developerWorks 上查阅所有 Linux 技巧Linux 教程

  • 随时关注 developerWorks 技术活动网络广播


获得产品和技术
  • 使用可直接从 developerWorks 下载的 IBM 试用软件 构建您的下一个 Linux 开发项目。


讨论


关于作者

M. Tim Jones 是一名嵌入式软件工程师,他是 Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming(现在已经是第 2 版)、AI Application Programming(第 2 版)和 BSD Sockets Programming from a Multilanguage Perspective 等书的作者。他的工程背景非常广泛,从同步宇宙飞船的内核开发到嵌入式系统架构设计,再到网络协议的开发。Tim 是位于科罗拉多州 Longmont 的 Emulex Corp. 的一名顾问工程师。


2007-11-01 14:25:00 rstevens 阅读数 952
  • Android 30分钟从零开始到HelloWorld

    Android是什么?   是一个针对移动设备的操作系统和软件平台 基于Linux内核 由 Google和开放手机联盟OHA开发的 容许使用Java 语言来开发和管理代码 Android开放源代码,Android遵从Apache Software License (ASL)2.0版本的协议 Android于 2007年11月5日开放手机联盟成立时发布 移动开发现状 Android发展历史 Android架构 Android学习资源

    136 人正在学习 去看看 Frank Lee
2010-11-19 13:53:00 sulliy 阅读数 442
  • Android 30分钟从零开始到HelloWorld

    Android是什么?   是一个针对移动设备的操作系统和软件平台 基于Linux内核 由 Google和开放手机联盟OHA开发的 容许使用Java 语言来开发和管理代码 Android开放源代码,Android遵从Apache Software License (ASL)2.0版本的协议 Android于 2007年11月5日开放手机联盟成立时发布 移动开发现状 Android发展历史 Android架构 Android学习资源

    136 人正在学习 去看看 Frank Lee

拨云见日 关注七项 Linux 内核发展方向

对于一个 Linux 的企业用户来说,它的内核开发可能显得过于复杂了,有许多人在维护不同的代码,而且有更多志愿者在提交代码,这种乱花渐欲迷人眼式的“热闹”景象却让我们很难看清未来将有什么样的新功能。

  就其本身而言,Linux 的发展没有路线图。为了对 Linux 发展方向有一个简单的认识,作者根据与开发者和内核维护者的交流,以及从 www.kernelnewbies.org 网站上了解的知识,提出了值得关注的七个开发领域。当然,这七个方面的发展也不会顺风顺水,和众多其他进入 Linux 内核的功能一样,会按照一条曲折的道路前进。

  1、虚拟化技术

  由于认识到虚拟化技术是本世纪最大的趋势,Linux 内核维护者已经破例以飞快的速度将虚拟化功能加入到它的内核中。由新兴公司 Qumranet的Avi Kivity 所贡献的系统管理程序 KVM 已经被在 2006 年底被加入到内核中,并在最近的版本中进行了更新。在迅速的内核版本发布和缓慢前进的企业版 Linux 之间之间存在鲜明对比,KVM 则是一个典型的例子。

  Novell 负责管理的副总裁 Holger Dryoff 表示,“企业还没有为很多功能做好接受的准备,KVM 就是非常好的例子,”在 KVM 进入 SUSE Linux 企业服务器版之前,它还需要更多的测试工作,以验证它将与内核其他子系统之间如何交互,同样的情况还有调度器,他表示。

  最近刚刚被 Citrix 系统以 5 亿美元收购的商业化开源虚拟技术公司 XenSource 一直在上下活动来让内核中的 Xen 管理程序使用它自己的体系架构。内核维护者认为,增加一个虚拟化功能是一个维护量很重的工作。XenSource 工程师已经让步,但是使 Xen 与内核操作结盟的工作依然在继续。它还没有真正成为内核组件,只是增加一些支持,可以让当 Linux 运行在一个虚拟化环境的时候可以识别它。

  其他虚拟化功能正在飞速的发展,其中包括 KVM 和 Lguest,后者是由 IBM 工程师 Rusty Russell 编写的迷你型管理程序,代码只有 5,000 行,它已经被包含在多数最近的内核中。和 KVM 一样,它可以利用来自英特尔和 AMD 最近芯片中的虚拟化技术。但是,与 VMware 的 ESX 服务器不一样的是,Lguest 创建了一个虚拟机器,它的操作系统能意识到它已经被虚拟化。这种体系架构让这个操作系统可以更高效的忽略某些针对CPU周期的呼叫,直接让其指向硬件,而不用扮演一个仲裁者使其速度变慢。

  2、实时操作

  在实时操作方面 Linux 已经取得了迅速的提高,已经成为一个在一些移动电话和其他设备中被频繁使用的嵌入式操作系统。但是,据商业化嵌入式 Linux 的作者之一,MontaVista 的创始人兼首席技术官 Jim Ready 表示,在最近发布的 2.6.23 内核中,在实时操作方面却显示出了“一点点倒退”的迹象。一个新的过程调度器开始更多的倾向于更“公平”,它主张由终端用户告诉处理器进行的任务应该获得更多的优先权。

  Ready 表示,“一个实时系统的用户并不需要这种公平,”因为实时系统主张其操作系统可以随时中断处理器正在进行的工作,并增加一个新的优先操作。一个简单的例子是,一个用于监视病人呼吸状况的医疗设备中的软件如果发现呼吸停止的情况,就应该中断这个软件正在做的任何工作,并立即发送一个紧急告警。MontaVista 不会将这个新的内核应用到它的产品线中,除非其性能被恢复,Ready 表示。Gartner 分析师 George Weiss 预测,在 2008 年标准Linux将作为一个具有竞争力的实时操作系统。

  3、中断处理程序

  Weiss 之所以如此说的原因之一是,内核开发人员正在研究让这个调度器具备又一个实时特点。这个操作系统的一个关键角色是用来管理中断的,来决定哪一个任务应该引起 CPU 的注意,以及如何比其他操作具有优先权。如果所有的中断处理器可以被结合到它们自己的线程中,那个线程可以被调度并设置优先,而不是不可预知的发生和延迟实时响应。

  在这个方向的研究已经进行了三年的时间。MontaVista 的 Sven-Thorsten Dietrich 在 2004 年提交了一个程序,希望防止中断处理程序因为常规任务中断内核,因为它们影响了实时响应。但是这个程序与内核调度器领域专家 Ingo Molnar 的观点分歧太大。这个程序影响了一个关键的内核功能,自旋锁 (spinlocks),当一个过程等待一个需要的数据或事件的时候它会阻挡 CPU。许多程序需要使用自旋锁功能。而 Dietrich 的代码将数百个自旋锁降低到 30 个; Molnar 的修订保留了 90 个自旋锁,是一个具有更少破坏性的改变。

  中断处理器集合到一个单独的线程的想法现在看上去已经做了进入内核的准备。Ready 表示,“Ingo 替换了我们所做的操作,但是他的工作是非常有效的,”MontaVista 不会在意是否因为它做的工作而得到多少荣誉,Ready 知道这就是开源协作的方式,因此他将接受正在进入内核的实时功能的修改。

  4、安全

  每一个人都希望使用更安全的系统。Novell 在其 SUSE Linux 企业服务器版 10 中集成了 AppArmor,作为限制一个应用程序可以访问多少操作系统功能的方法,因此如果一个应用程序未经授权被访问,可以限制其破坏性。不过,现在看来它还没有被加入到内核中的时间计划。

  Stephen Smalley 是一个关键的 Linux 安全权威,也是另一个安全方案 SELinux 的开发者,他认为 AppArmor 不能被合并到内核中,因为它的保护机制是基于“路径名”方式,实质上是一个白名单方式,AppArmor 只允许一个应用程序访问那些指定的文件,所有其他文件都被排除在外。根据去年 Jonathan Corbet 的一个报告,Smalley 认为一个狡猾的入侵者可以使用被认可的路径名来猜测其他名称,从而得到人们不想暴露的内容。

  内核维护者 Andrew Morton 对此表示认可,认为这种路径名方式是使 AppArmor 不能进入内核的最根本的理由。

  5、系统诊断

  Solaris 可以使用 DTrace 工具来探测在操作系统核心中正在进行的工作,但是 Linux 缺少一个具有友好用户界面的诊断工具。少数仅有的工具之一是 ptrace,它可以让一个过程跟踪另一个的行为。但是 ptrace 使用起来非常笨拙,且容易出错,现在有一个替代者 utrace,它已经成功进入 Morton 的内容管理树中,距离提交给 Linus Torvalds 只有一步之遥。在一个进程被一个程序执行执行的时候,Utrace 可以跟踪它的行为,而且不会发生 ptrace 的问题,但是它依然会导致内核锁定问题。Corbet 预测在下一个内核版本中还不会包含这个功能。

  6、文件系统

  Reiser4 文件系统目前已经被开始考虑加入到内核中,它已经包含了 30 个文件系统。根据 Hans Reiser 的文档,它是一个打星文件管理系统,擅长处理大量的小文件,而使用最小化的磁盘空间。

  这个文件系统要求一个文件操作或者被完成,或者被禁止,减少了文件被完成了一半操作所破坏的风险。对很多 Linux 用户它似乎非常不错,但是经过数年的争论,Reiser4 还有没有进入内核中。它不能很好的与内核的很多部分保持协调,而 Reiser 已经不再是一个领先的开发者。Corbet 在最近他的前景预测中写到,“如果它想最终成为传统 Linux 的一部分,它将需要一个新的支持者。”

  Sun 公司的 128 位文件系统 ZFS,除了满足今天正在使用的大型系统的需要外,正在引起 Linux 界的关注。支持它的团体指出它的开源代码应该被内核所考虑。但是它目前的许可协议与 Linux 通用公共许可 GPL 不兼容。

  7、电源管理

  在电源管理方面 Linux 已经落后了,在这方面 Windows 笔记本已经给人们留下了深刻的印象,这刺激着英特尔工程师、内核开发者 Molnar 和 Thomas Gleixner 和其他人正在这个领域努力。一年前,内核实现了“tick-less idle”机制,当没有工作可做的时候告诉处理器处于空闲状态。没有它,CPU 的时钟将会每秒询问内核 1,000 次是否有什么事情可做,从而浪费大量电能。

  英特尔的首席 Linux 技术专家 Dirk Hohndel 预计在电源管理方面会有更多的完善。但是在内核和系统时钟之间的任何改变会威胁许多其他的交互。他表示,“这些事情可能会非常困难,需要花费长期的时间来完成,但是我认为这是一个正确的发展方向。”

2019-10-28 09:41:12 qq_41453285 阅读数 178
  • Android 30分钟从零开始到HelloWorld

    Android是什么?   是一个针对移动设备的操作系统和软件平台 基于Linux内核 由 Google和开放手机联盟OHA开发的 容许使用Java 语言来开发和管理代码 Android开放源代码,Android遵从Apache Software License (ASL)2.0版本的协议 Android于 2007年11月5日开放手机联盟成立时发布 移动开发现状 Android发展历史 Android架构 Android学习资源

    136 人正在学习 去看看 Frank Lee

一、Linux内核的发展过程中的5个重要支柱

  • Linux操作系统是UNIX操作系统的一种克隆系统,是一种类UNIX操作系统,诞生于1991年10月5日 (第一次正式向外公布的时间),起初的作者是Linus Torvalds
  • Linux操作系统的诞生、发展和成长过程依赖着5个重要支柱:UNIX操作系统、Minix操作系统、GNU计划、POSIX标准和Internet

1.UNIX操作系统

  • UNIX操作系统是美国贝尔实验室的Ken.Thompson和Dennis Ritchie于1969年夏在DEC PDP-7小型计算 机上开发的一个分时操作系统。Linux操作系统可看作UNIX操作系统的一个克隆版本

2.Minix操作系统

  • Minix操作系统也是UNIX的一种克隆系统,它于1987年由著名计算机教授Andrew S.Tanenbaum开发完 成。有开放源代码的Minix系统的出现在全世界的大学中刮起了学习UNIX系统的旋风。Linux刚开始就是 参照Minix系统于1991年开发的

3.GNU计划

  • GNU计划和自由软件基金会(FSF)是由Richard M.Stallman于1984年创办的,GNU是“GNU's Not UNIX”的缩写。到20世纪90年代初,GNU项目已经开发出许多高质量的免费软件,其中包括emacs编辑系统、bash shell程序、gcc系列编译程序、GDB调试程序等。这些软件为Linux操作系统的开发创造了一个合 适的环境,是Linux诞生的基础之一。没有GNU软件环境,Linux将寸步难行。因此,严格来 说, “Linux”应该称为“GNU/Linux”系统

4.POSIX标准

  • POSIX(Portable Operating System Interface,可移植的操作系统接口)是由IEEE和ISO/IEC开发的一组 标准。该标准基于现有的UNIX实践和经验完成,描述了操作系统的调用服务接口,用于保证编写的应用 程序可以在源代码级上在多种操作系统中移植。该标准在推动Linux操作系统朝着正规化发展,是Linux前进的灯塔

5.互联网

  • 如果没有互联网,没有遍布全世界的无数计算机骇客的无私奉献,那么Linux最多只能发展到Linux 0.13(0.95)版本的水平。从Linux 0.95版开始,对内核的许多改进和扩充均以其他人为主了,而Linus以 及其他维护者的主要任务开始变成对内核的维护和决定是否采用某个补丁程序

二、Linux内核的历史版本

内核版本的更新周期规律

  • ①Linux内核通常以2~3个月为周期更新一次大的版本号,如Linux 2.6.34是在2010年5月发布的,Linux 2.6.35的发布时间则为2010年8月
  • ②Linux 2.6的最后一个版本是Linux 2.6.39,之后Linux内核过渡到Linux 3.0版本,同样以2~3个月为周期更新小数点后第一位
  • ③因此,内核Linux 3.x时代,Linux 3和Linux 2.6的地 位对等,因此,Linux 2.6时代的版本变更是Linux 2.6.N~2.6.N+1以2~3个月为周期递进,而Linux 3.x时代 后,则是Linux 3.N~3.N+1以2~3个月为周期递进

内核的修复与版本号的关系

  • 在Linux内核版本发布后,还可以进行一个修复bug或者少量特性的反向移植(Backport,即把新版本 中才有的补丁移植到已经发布的老版本中)的工作,这样的版本以小数点后最后一位的形式发布,如 Linux 2.6.35.1、Linux 2.6.35.2、Linux 3.10.1和Linux 3.10.2等
  • 此类已经发布的版本的维护版本通常是由 Greg Kroah-Hartman等人进行管理的。Greg Kroah-Hartman是名著LDD3(《Linux设备驱动(第3版)》的 作者之一

查看内核版本之间的变更信息

  • 关于Linux内核每一个版本具体的变更,可以参考网页http://kernelnewbies.org/LinuxVersions,比如 Linux 3.15针对Linux 3.14的变更归纳在:https://kernelnewbies.org/Linux_3.15
  • 下图显示了Linux 2.6.13以来每个内核版本参与的人、组织的情况以及每次版本演进的时候被改变的 代码行数和补丁的数量。目前每次版本升级,都有分布于200多个组织超过1000人提交代码,被改变的代 码行数超过100万行,补丁数量达1万个

三、Linux 2.6后的内核特点

  • Linux 2.6内核是Linux开发者群落一个寄予厚望的版本,Linux 2.6相对于Linux 2.4有相当大的改进,主要体现在如下几个方面:

新的调度器

  • Linux 2.6以后版本的Linux内核使用了新的进程调度算法,它在高负载的情况下有极其出色的性能, 并且当有很多处理器时也可以很好地扩展。在Linux内核2.6的早期采用了O(1)算法,之后转移到 CFS(Completely Fair Scheduler,完全公平调度)算法。在Linux 3.14中,也增加了一个新的调度类: SCHED_DEADLINE,它实现了EDF(Earliest Deadline First,最早截止期限优先)调度算法

内核抢占

  • 在Linux 2.6以后版本的Linux内核中,一个内核任务可以被抢占,从而提高系统的实时性。这样做最主要的优势在于,可以极大地增强系统的用户交互性,用户将会觉得鼠标单击和击键的事件得到了更快速的响应。Linux 2.6以后的内核版本还是存在一些不可抢占的区间,如中断上下文、软中断上下文和自旋锁锁住的区间,如果给Linux内核打上RT-Preempt补丁,则中断和软中断都被线程化了,自旋锁也被互斥体 替换,Linux内核变得能支持硬实时
  • 如下图所示,左侧是Linux 2.4,右侧是Linux 2.6以后的内核。在Linux 2.4的内核中,在IRQ1的中断 服务程序唤醒RT(实时)任务后,必须要等待前面一个Normal(普通)任务的系统调用完成,返回用户 空间的时候,RT任务才能切入;而在Linux 2.6内核中,Normal任务的关键部分(如自旋锁)结束的时 候,RT任务就从内核切入了。不过也可以看出,Linux 2.6以后的内核仍然存在中断、软中断、自旋锁等 原子上下文进程无法抢占执行的情况,这是Linux内核本身只提供软实时能力的原因

改进的线程模型

  • Linux 2.6以后版本中的线程采用NPTL(Native POSIX Thread Library,本地POSIX线程库)模型,操作速度得以极大提高,相比于Linux 2.4内核时代的LinuxThreads模型,它也更加遵循POSIX规范的要求。 NPTL没有使用LinuxThreads模型中采用的管理线程,内核本身也增加了FUTEX(Fast Userspace Mutex,快 速用户态互斥体),从而减小多线程的通信开销

虚拟内存的变化

  • 从虚拟内存的角度来看,新内核融合了r-map(反向映射)技术,显著改善虚拟内存在一定大小负载下的性能。在Linux 2.4中,要回收页时,内核的做法是遍历每个进程的所有PTE以判断该PTE是否与该页 建立了映射,如果建立了,则取消该映射,最后无PTE与该页相关联后才回收该页。在Linux 2.6后,则建 立反向映射,可以通过页结构体快速寻找到页面的映射

文件系统

  • Linux 2.6版内核增加了对日志文件系统功能的支持,解决了Linux 2.4版本在这方面的不足。Linux 2.6 版内核在文件系统上的关键变化还包括对扩展属性及POSIX标准访问控制的支持。ext2/ext3/ext4作为大多 数Linux系统默认安装的文件系统,在Linux 2.6版内核中增加了对扩展属性的支持,可以给指定的文件在 文件系统中嵌入元数据
  • 在文件系统方面,当前的研究热点是基于B树的Btrfs,Btrfs称为是下一代Linux文件系统,它在扩展 性、数据一致性、多设备管理和针对SSD的优化等方面都优于ext4

音频

  • 高级Linux音频体系结构(Advanced Linux Sound Architecture,ALSA)取代了缺陷很多旧的 OSS(Open Sound System)。ALSA支持USB音频和MIDI设备,并支持全双工重放等功能

总线、设备和驱动模型

  • 在Linux 2.6以后的内核中,总线、设备、驱动三者之间因为一定的联系性而实现对设备的控制。总线 是三者联系起来的基础,通过一种总线类型,将设备和驱动联系起来。总线类型中的match()函数用来 匹配设备和驱动,当匹配操作完成之后就会执行驱动程序中的probe()函数

电源管理

  • 支持高级配置和电源接口(Advanced Configuration and Power Interface,ACPI),用于调整CPU在不同 的负载下工作于不同的时钟频率以降低功耗。目前,Linux内核的电源管理(PM)相对比较完善了,包括 CPUFreq、CPUIdle、CPU热插拔、设备运行时(runtime)PM、Linux系统挂起到内存和挂起到硬盘等全套 的支持,在ARM上的支持也较完备

联网和IPSec

  • Linux 2.6内核中加入了对IPSec的支持,删除了原来内核内置的HTTP服务器khttpd,加入了对新的 NFSv4(网络文件系统)客户机/服务器的支持,并改进了对IPv6的支持

用户界面层

  • Linux 2.6内核重写了帧缓冲/控制台层,人机界面层还加入了对近乎所有接口设备的支持(从触摸屏 到盲人用的设备和各种各样的鼠标)
  • 在设备驱动程序方面,Linux 2.6相对于Linux 2.4也有较大的改动,这主要表现在内核API中增加了不 少新功能(例如内存池)、sysfs文件系统、内核模块从.o变为.ko、驱动模块编译方式、模块使用计数、模 块加载和卸载函数的定义等方面

Linux 3.0后ARM架构的变更

  • Linus Torvalds在2011年3月17日的ARM Linux邮件列表中宣称“this whole ARM thing is a f*cking pain in the ass” ,这引发了ARM Linux社区的地震,随后ARM社区进行了一系列重大修正。社区必须改变这种局 面,于是PowerPC等其他体系结构下已经使用的FDT(Flattened Device Tree)进入到了ARM社区的视野
  • 此外,ARM Linux的代码在时钟、DMA、pinmux、计时器刻度等诸多方面都进行了优化和调整,也 删除了arch/arm/mach-xxx/include/mach头文件目录,以至于Linux 3.7以后的内核可以支持多平台,即用同 一份内核镜像运行于多家SoC公司的多个芯片,实现“一个Linux可适用于所有的ARM系统” 

linux内核发展

阅读数 209

没有更多推荐了,返回首页