- 1 什么是Linux内核
- 2 Linux内核发展历史
- ▪ 开发者辩论
- ▪ Linux内核的普及
- 3 Linux内核结构
- ▪ 编程语言
- ▪ 编译器兼容性
- ▪ 界面
- ▪ 内核用户空间 API
- ▪ 内核-用户空间 ABI
- ▪ 内核内API
- ▪ 内核 ABI
- ▪ 功能历史记录
- 4 Linux内核开发版本
- ▪ 版本历史记录
- 5 CPU 可移植性
什么是Linux内核
编辑Linux内核(英语:Linux kernel)是一个开源的单片类Unix计算机操作系统内核,通常以Linux发行版的形式部署在各种嵌入式设备中,如盒子、FTA接收器、智能电视、PVR、NAS用于平板电脑、智能手机和智能手表的 Android 操作系统提供 Linux 内核提供的服务来实现功能。台式计算机的就业率较低,但基于 Linux 的操作系统几乎主导了所有其他计算领域,从从移动设备到大型机,截至 2017 年 11 月,全球最强大的 500 台超级计算机全部都在运行 Linux。
Linux 内核是由 Linus Torvalds 于 1991 年为他的个人计算机构思和开发的,并不是为了跨平台,而是经过扩展以支持比任何其他操作系统或内核更多种的计算机体系结构。吸引了开发人员和用户将其用于软件项目,特别是 GNU 操作系统。Linux 内核已收到来自 1,200 多家公司的近 12,000 名程序员的贡献,其中包括一些最大的软件和硬件供应商。
Linux Kernel API 是用户程序与内核进行通信的 API,这意味着它非常稳定并且不会破坏用户空间程序(某些具有 GUI 并依赖于其他 API 的程序)。作为内核功能的一部分,设备驱动程序控制硬件。这意味着主流设备驱动程序非常稳定。但是,与许多其他内核和操作系统不同,这并不意味着内核和可加载内核模块(LKM)之间的接口设计得非常稳定。
Linux 内核由世界各地的贡献者开发,是自由开源软件的一个突出例子,根据版本的不同,支持时间长达六年。每日开发讨论都在 Linux 内核邮件列表 (LKML) 上进行。 Linux 内核在 GNU 公众中可用,它是在许可证版本 2 (GPLv2) 下发布的,并包含一些在多个许可证下发布的固件映像,其中一些不是免费的。
Linux内核发展历史
编辑1991 年,21 岁时,作为芬兰赫尔辛基大学计算机科学专业的学生,Linus Torvalds 开始研究操作系统的简单概念。他从 x86 汇编器的上下文切换器和终端驱动程序开始。 25 日,Torvalds 在 Usenet 新闻组 comp.os.minix 上发布了以下内容:
我正在为我的 386(486)AT 克隆制作一个(免费)操作系统(这只是一个爱好,不像 gnu 那么大和专业)。我从 4 月份就开始致力于它,并且开始准备它.由于文件系统的物理设计相同),我很想听听人们的意见,他们喜欢什么,不喜欢什么。
我目前已经移植了 bash (1.08) 和 gcc (1.40),它似乎正在工作。这意味着我将在几个月内做一些实际的事情。这是不可能的(使用 386 任务交换等)并且不会'不支持除 AT 硬盘以外的任何硬盘,因为我只有这些。
大部分是用C写的,但是大多数人不会调用我用C写的东西。这也是教会我关于386的项目,所以我使用了我能找到的386的每一个可能的功能。不是)和使用MMU进行分段。它确实是依赖于386的分段。(每个任务需要64兆字节的代码和数据段,最多64个任务适合4Gb)
从那时起,许多人为该项目贡献了代码。最初,MINIX 社区为 Linux 内核贡献了代码和想法。当时,GNU 项目生产了许多自由操作系统所需的组件,但它自己的内核, GNU Hurd,完全是 BSD 操作系统,并没有摆脱法律问题,尽管早期版本的功能有限,但 Linux 很快就吸引了开发者和用户。
1991年9月,Linux内核版本0.01发布到芬兰大学和FUNET(研究网)的FTP服务器(ftp.funet.fi),代码为10,239行。1991年10月,Linux内核版本0.02发布被释放了 已经被释放了
1991年12月,Linux内核0.11发布,该版本是第一个自托管的,Linux内核0.11可以由运行相同内核版本的计算机编译,Torvalds于1992年2月发布0.12版本,超出其范围采用GNUGPL过去有自己的草稿许可证,发布时不允许商业发行。
1992年1月19日,第一篇帖子被提交到新的新闻组alt.os.linux。1992年3月31日,新闻组名称更改为comp.os.linux。
X Window 系统被移植到 Linux,1992 年 3 月,Linux 0.95 版成为第一个能够运行 X 的版本。1.0 版预计即将推出,从 0.1 到 0.9x 的大版本号跳跃并没有明显的缺失。然而,事实证明这是不真实的,从 1993 年到 1994 年初,出现了 15 个 0.99 的开发版本。
1994年3月14日,Linux内核1.0.0发布,代码176,250行;1995年3月,Linux内核1.2.0发布,代码310,950行。
Linux 内核版本 2 于 1996 年 6 月 9 日发布,随后在版本 2 标头下发布了其他主要版本:
- 1999 年 1 月 25 日 – Linux 内核 2.2.0 版本(1,800,847 行)
- 1999 年 12 月 18 日 - IBM 大型机补丁(2.2.13)发布。允许 Linux 内核在企业级机器上使用
- 2001 年 1 月 4 日 – Linux 内核 2.4.0 版本(第 3,377,902 行)
- 2003 年 12 月 17 日 – Linux 内核 2.6.0 版本(第 5,929,913 行)
从 2004 年开始,发布流程发生了变化,新内核开始定期每 2-3 个月发布一次,编号为 2.6.0、2.6.1 到 2.6.39。
2011年7月21日,Torvalds宣布发布Linux内核3.0:“Gonearethe2.6.days”。与Linux 2.6.39相比,这次版本升级并不是重大技术变化。它代表着20周年。基于时间的发布过程保持不变。
Linux 内核版本 3.10 于 2013 年 6 月发布,包含 15,803,499 行,版本 4.1 于 2015 年 6 月发布,代码已超过 19,500,000 行,其中包括约 14,000 名程序员的贡献。
开发者辩论
MINIX 开发者 Andrutanenbaum 和 Linus Torvalds 之间争论 Linux 是一个整体内核而不是一个微内核。Tannenbaum 认为微内核优于整体内核,因此 Linux 已经过时了。与传统的整体内核不同,Linux 的设备驱动程序很容易配置为可加载的内核模块,可以在系统运行时加载或卸载。这个话题在2006年5月9日讨论过,Tannenbaum在2006年5月12日写了一句肯定的话。
Linux内核的普及
包括 Linux 内核在内的 Android 操作系统的日益普及,使该内核成为移动设备最受欢迎的选择,在安装量上与所有其他操作系统竞争。智能手机估计已售出。
许多消费类路由器也使用 Linux 内核,以及其他各种时基设备,例如智能电视、机顶盒和网络摄像头。有许多包含 Linux 内核的桌面 Linux 发行版,但在使用方面存在不同的操作系统Linux 发行版中,Ebi Sea 偏低。
Linux内核结构
编辑Linux 内核提供真正的抢占式多任务处理(用户模式,对于 2.6 系列及更高版本,甚至是内核模式)、虚拟内存、共享库、按需加载、共享 copylight 可执行文件(由 KSM 共享)、内存管理、Internet 协议套件,它是一个支持线程的单片内核。
设备驱动程序和内核扩展在内核空间中运行(许多 CPU 结构中的环 0),并且具有对硬件的完全访问权限,但在用户空间中运行,但有一些例外,例如基于 FUSE/CUSE 的文件系统,它是 UIO 的一部分。大多数人使用 Linux 的图形系统并不在内核中运行。与标准单片内核不同,设备驱动程序很容易由模块组成,并在系统运行时加载和卸载。与标准单片内核不同,设备驱动程序可以在以下情况下被抢占:一定条件下,即添加该功能是为了正确管理硬件中断,更好地支持对称多处理。Linux内核本身有自己的二进制内核接口,并不存在。
硬件也集成到文件层中,设备驱动程序通过/dev或/sys目录中的条目与用户应用程序进行通信,进程信息也通过/proc目录映射到文件系统。
编程语言
Linux 内核是用 GCC 支持的 C 编程语言版本编写的(它对标准 C 引入了许多扩展和更改),以及用汇编语言(GCC 的 AT&T 风格语法)编写的大量短代码。为此,GCC 一度是唯一能够正确构建 Linux 内核的编译器。
编译器兼容性
GCC是Linux内核源代码的默认编译器。2004年,Intel声称修改了内核,使其C编译器可以编译它。2009年,2.6.22内核的修订版又取得了成功。
从2010年开始,人们开始努力使用另一种C语言编译器Clang来构建Linux内核。截至2014年4月12日,大多数官方内核都可以使用Clang进行编译。这些努力之后的项目名称是LLVMLinux ,这意味着它遵循基于 Clang 的 LLVM 编译器的结构。LLVMLinux 并不旨在 fork Linux 内核或 LLVM,因此它可以被视为由提交给上游项目的补丁组成的元项目。 Clang 能够做到这一点的好处包括与 GCC 相比更快的编译速度,允许内核开发人员利用更短的编译时间带来的更快的工作流程。
界面
遵守标准是 Linux 内核内部功能的一项综合策略。另一个规则是,如果存在使用该组件的专有用户空间软件,则该内核组件不被 Linux 内核接受。
内核用户空间 API
源代码可移植性保证了按照标准编写的C程序可以在符合相同标准的系统上成功编译并运行,相关标准有POSIX和Single Unix规范。
Linux内核的Linux内核API,代表了内核的系统调用接口,由可用的系统调用组成。
内核-用户空间 ABI
二进制可移植性可以保证为给定硬件平台编译的程序能够以编译的形式运行在其他符合标准的硬件平台上,是读者生存的本质要求,二进制兼容性的要求远远超过源代码可移植性,换句话说截至 2014 年 2 月,唯一与二进制兼容性相关的标准是 Linux 基本规范 (LSB)。
内核内API
有几个内核内 API 被不同的子系统以及子系统之间的子系统利用。其中一些已通过多个版本保持稳定,其他则不然。对于内核内 API 没有保证。维护者和贡献者是可以随时自由扩展或更改这些内容。
内核内 API 的示例包括用于以下设备驱动程序系列的软件框架/API:
- Video4Linux - 用于视频硬件捕获
- 适用于声卡的高级 Linux 声音架构 (ALSA)
- 用于网络接口控制器的新 API
- 直接渲染管理器 - 用于图形加速器
- KMS 驱动程序 - 用于显示控制器
- mac80211-无线网络接口控制器
- WEXT - 用于无线网络接口控制器(已弃用)。
内核 ABI
一些团体通过多个版本一直坚定支持内核中 ABI 的定义和维护。这有利于发布专有内核模块和分发纯二进制软件(例如设备驱动程序)的硬件制造商。然而,Linux 内核开发人员选择不这样做维护稳定的内核 ABI,这允许 Linux 内核的进一步开发。
技术特点
抢占
Linux内核在一定条件下提供了抢占式调度,直到Linux内核2.4,只有用户进程是抢占式的,例如除了timeQuantumExpiration之外,当前进程在用户态执行会导致更高动态优先级的进程处于TASK_RUNNING状态进入2.6系列Linux内核时,增加了中断执行内核代码的任务的功能,但即使这样,也不是所有部分的内核代码都可以被抢占。
Linux内核包含不同的调度器类.默认情况下,内核使用名为CompletelyFairScheduler的调度器机制,在2.6.23版本的内核中引入.在内部,此默认调度器类称为SCHED_OTHER,但内核还使用POSIX它包含SCHED_FIFO (实时调度类,或实时 FIFO)和 SCHED_RR(实时轮询),符合 ,两者的优先级都高于基类。
通过使用实时Linux内核补丁PREEMPT_RT,可以支持临界区、中断处理程序和中断禁用代码序列的完全抢占。实时Linux内核补丁的部分主线集成允许内核主线中已有的一些功能。这是介绍了一种情况。抢占改善了延迟,提高了响应能力,使 Linux 更适合桌面和实时应用。较旧的内核具有所谓的大内核锁,用于跨整个内核进行同步,最终被 ArndBergmann 删除。
内核版本 3.14 中添加了一个名为 SCHEDDEADLINE 的附加调度策略,该策略实现了最短截止时间优先算法 (EDF),并于 2014 年 3 月 30 日发布。
可移植性
虽然Linux最初并不是为了可移植性而设计的,但它是目前移植最广泛的操作系统内核之一,运行在从ARM架构到IBMz/架构大型机的各种系统上,该移植是由Amiga在Motorola 68000平台上完成的用户,他们通过替换内核的主要部分来做到这一点。尽管 Torvalds 认为摩托罗拉版本是一个分支而不是真正的移植,但它是一个“类似 Linux 的操作系统”。这个修复非常重要。它服务了作为 Torvalds 要求重组内核代码以促进可移植性到竞争计算架构的推动力。它于 2008 年 5 月在 DECUS 上进行了演示,并从单一源树支持 386 和 Alpha。DEC 的任务是为同年,Torvalds 将 Linux 移植到 64 位。
Linux作为主要操作系统运行在IBM的BlueGene和其他最快的超级计算机(包括中国顶级的超级计算机)上。Linux也被移植到许多便携式设备上,例如苹果的iPod和iPhone。一些为手机开发的操作系统使用修改后的Linux内核版本,包括Google的Android、Firefox OS、HP WebOS,包括Nokia Maemo和Jola Sale Fish OS。
内核恐慌和糟糕
在 Linux 中,panic 是指由内核检测到的不可恢复的系统错误,而不是由用户空间代码检测到的类似错误。内核代码通过调用位于头文件 sys/system.h 中的panic 函数来检测这种情况。恐慌是内核代码中未处理的处理器异常的结果,例如对无效内存地址的引用。这些通常被识别为调用链中导致恐慌的错误。它也可以被识别为硬件故障,例如问题RAM 单元、由进程错误、处理器过热/损坏以及软件错误引起的进程内算术函数错误。
内核中非致命错误的报告称为 oops。也就是说,源自 Linux 内核的正确行为的报告可以允许在有保证的可靠性下继续运行。这些崩溃报告由各种软件自动收集和升级。报告是可用的。示例包括 KernelOops、ABRT (Fedora)、Apport (Ubuntu) 等。KernelOops.org 收集这些报告并在其网站上发布统计数据。
在某些情况下,例如使用图形桌面时,内核恐慌消息可能不会输出可见的信息。要在这些情况下进行调试,可以使用其他手段,例如附加串行端口控制台。
实时补丁
Ksplice、kpatch、kGraft等无需重启的更新也可以应用于内核。2015年4月12日发布的内核版本4.0中,实时内核修补的最小基础被纳入Linux内核主线。主要是内核的ftrace根据功能命名为“livepatch”,这些基础形成了一个通用核心,能够通过 kGraft 和 kpatch 支持热补丁、包含热补丁的内核模块的 API 以及用户空间管理实用程序的应用程序。这是通过提供程序二进制接口 (ABI) 来完成的但Linux内核4.0包含的通用核心仅支持x86架构,并没有提供即使打热补丁也能保证功能级一致性的机制,2015年4月作为基线,正在进行kpatch和kGraft 到 Linux 内核主线提供的通用实时补丁核心。
安全
计算机安全是与 Linux 内核相关的一个广为人知的话题,因为大多数内核错误都揭示了潜在的安全缺陷,例如允许权限升级或创建拒绝服务攻击 (DoS) 向量。已经发现并修复了许多此类缺陷通常会实现新的安全功能来提高 Linux 内核的安全性。
批评者指责内核开发人员掩盖安全缺陷或至少不公开它们。即,2008 年,Linus Torvalds 回应道:
我个人将安全错误视为“正常错误”。我不会掩盖这些错误,但我不确定追踪它们并将它们宣布为特殊错误是否是一个好主意。
Linux发行版通常会发布安全更新来修复Linux内核中的漏洞,许多发行版提供长期支持版本并允许针对特定Linux内核版本进行长期安全更新。
功能历史记录
2012 年 12 月,Torvalds 决定通过取消对 i386 处理器的支持来降低内核复杂性,从而使 3.7 内核系列成为最后一个支持原始处理器的版本,该系列还纳入了 ARM 处理器的支持。
版本 3.11 于 2013 年 9 月 2 日发布,并添加了许多新功能,例如新的 O_TMPFILE 以减少 open(2) 中的临时文件漏洞、实验性 AMD Radeon 动态电源管理、低延迟网络轮询和 zswap。(压缩交换)缓存)。
从 2.6.39 到 3.0 以及从 3.19 到 4.0 的数字更改不会带来任何重大技术差异。主要版本号会递增,以避免出现较大的次要版本号。
Linux内核开发版本
编辑版本历史记录
CPU 可移植性
编辑- 版本 1.0 (1994.3.14) Intel i386 系列
- 版本 1.2 (1995.3.7) Alpha 处理器、Sparc 处理器、MIPS
- 版本2.0(1996.6.9)SMP等
- 版本 2.2 (1991.20) M68K (Motorola 68000) 系列,PowerPC
- 版本 2.4 (2001.1.4)PA-RISC
- 2.6.x版本(2003.12.17)稳定64位支持更新
- 支持稳定ARM版本3.0的ARM架构(2011.7.22)
- 版本 3.11 (2013.9.2)AMDRadeon 扩展实验支持
- 版本4.0.1(2015.4.29)持续实验性地追求安全
- 版本 4.11 (2017.2.26) 支持虚拟 GPU
百科词条作者:小小编,如若转载,请注明出处:https://glopedia.cn/263730/