With over 13 million lines of code, the Linux kernel is one of the largest open source projects in the world, but what is a kernel and what is it used for?
内核是与计算机中的硬件接口的易于更换的软件的最低级别。它负责将所有以“用户模式”运行的应用程序连接到物理硬件,并允许进程(称为服务器)使用进程间通信(IPC)从彼此获取信息。
当然,在从头开始构建内核时,有不同的方法来构建内核和体系结构方面的考虑。一般来说,大多数内核分为三种类型:单核、微核和杂交。Linux是单片内核,而OSX(XNU)和Windows7使用混合内核。让我们快速浏览一下这三个类别,以便稍后更详细地讨论。
Image by uptown popcorn
MicrokernelA microkernel只管理它所拥有的:CPU、内存和IPC。计算机中几乎所有的东西都可以看作是一个附件,可以在用户模式下处理。微内核具有可移植性的优势,因为只要操作系统仍尝试以相同的方式访问硬件,它们就不必担心您是否更换了显卡甚至操作系统。微内核占用的内存和安装空间也非常小,而且它们往往更安全,因为只有特定的进程在用户模式下运行,而用户模式没有管理模式那样的高权限。
赞成的意见
欺骗
单片内核单片内核与微内核相反,因为它们不仅包含CPU、内存和IPC,还包含设备驱动程序、文件系统管理和系统服务器调用等内容。单片内核往往更擅长访问硬件和多任务处理,因为如果一个程序需要从内存或运行的另一个进程获取信息,它有一条更直接的线路来访问它,而不必在队列中等待来完成任务。但是,这可能会导致问题,因为在管理模式下运行的事情越多,如果一个系统的行为不正常,那么会导致系统崩溃的事情就越多。
赞成的意见
欺骗
Image via schoschie on Flickr
Hybrid KernelHybrid kernels能够选择在用户模式下运行什么,在管理模式下运行什么。通常情况下,诸如设备驱动程序和文件系统I/O之类的操作将在用户模式下运行,而IPC和服务器调用将保持在监控模式下。这两方面都是最好的,但通常需要硬件**商做更多的工作,因为所有的驱动程序责任都由他们来承担。它也可能有一些微内核固有的延迟问题。
赞成的意见
欺骗
在Ubuntu中,内核文件存储在/boot文件夹中,称为vmlinuz version。vmlinuz这个名字来自于unix世界,60年代的时候,他们把内核简单地称为“unix”,所以Linux在90年代第一次开发内核时就开始把内核称为“Linux”。
当开发虚拟内存以实现更简单的多任务处理能力时,“vm”被放在文件的前面,以表明内核支持虚拟内存。有一段时间,Linux内核被称为vmlinux,但是内核太大,无法容纳可用的启动内存,因此内核映像被压缩,结尾的x被改为z,以显示它是用zlib压缩压缩的。这种压缩并不总是被使用,通常被LZMA或BZIP2代替,有些内核被简单地称为zImage。
版本编号将采用A.B.C.D格式,其中A.B可能是2.6,C是您的版本,D表示您的修补程序或修复程序。
在/boot文件夹中还有其他非常重要的文件,称为初始化.img-版本,系统地图-版本和配置版本。initrd文件用作一个小型RAM磁盘,用于提取和执行实际的内核文件。这个系统地图文件用于在内核完全加载之前进行内存管理,配置文件告诉内核在编译内核映像时要将哪些选项和模块加载到内核映像中。
因为Linux内核是单片的,所以与其他类型的内核相比,它的占用空间最大,复杂性最高。这是一个设计特性,在Linux的早期受到了相当多的讨论,仍然带有一些与单片内核固有的设计缺陷。
Linux内核开发人员为绕过这些缺陷所做的一件事就是**可以在运行时加载和卸载的内核模块,这意味着您可以动态添加或删除内核的特性。这不仅仅是向内核添加硬件功能,还包括运行服务器进程的模块(如低级虚拟化),但在某些情况下,它还允许替换整个内核而无需重新启动计算机。
想象一下,如果您可以升级到Windows service pack而不需要重新启动…
如果Windows已经安装了所有可用的驱动程序,而您只需打开所需的驱动程序,会怎么样?这基本上就是内核模块为Linux所做的事情。内核模块,也称为可加载内核模块(loadable Kernel module,LKM),对于在不消耗所有可用内存的情况下保持内核与所有硬件一起工作是必不可少的。
模块通常会向基本内核添加设备、文件系统和系统调用等功能。LKM的文件扩展名为.ko,通常存储在/lib/modules目录中。由于模块化的特性,您可以通过使用menuconfig命令在启动期间设置要加载或不加载的模块,或者通过编辑/boot/config文件,或者使用modprobe命令动态地加载和卸载模块,来轻松地自定义内核。
第三方和封闭源代码模块在某些发行版(如Ubuntu)中可用,并且在默认情况下可能不会安装,因为这些模块的源代码不可用。软件开发人员(例如nVidia、ATI等)不提供源代码,而是构建自己的模块并编译所需的.ko文件以供分发。虽然这些模块在beer中是免费的,但它们在speech中不是免费的,因此没有包含在一些发行版中,因为维护人员觉得它通过提供非免费软件“污染”了内核。
内核并不神奇,但它对任何正常运行的计算机来说都是必不可少的。Linux内核与OSX和Windows不同,因为它包含内核级的驱动程序,并使许多受支持的东西“开箱即用”。希望你能对你的软件和硬件是如何协同工作的,以及你需要什么样的文件来引导你的电脑有更多的了解。
内核.orgImage英格里德拉尔
...代码创建专有代码。这就是为什么那么多Linux软件,包括内核本身,几十年后仍然免费的部分原因。 ...
...目始于赫尔辛基大学的一名学生开始开发自己的操作系统内核。他叫莱纳斯·托瓦尔兹。 ...
在安装Gentoo的同时,编译自己的Linux内核也是被认为非常古怪和技术性的事情之一。我们已经讨论了一些您可能希望这样做的原因。在我们引导您完成这些步骤之前,下面是一些重要概念的简要概述。 ...
手动升级Linux内核并不是一件简单的事——它需要相当多的知识。我们之前已经讨论过如何做到这一点,但是如果您希望不必大惊小怪地获得最新和最棒的,并且您正在运行Ubuntu,那么您可能会喜欢一种更自动化的Ukuu形式的解决...
... 乍一看,Windows操作系统中的Linux内核似乎并不太重要。毕竟,如果你已经在使用Windows,为什么还要用Linux呢? ...
...应用程序,它接受用户的输入并执行相应的操作,通常与内核通信以实现该操作。这样,它就像内核周围的一个“壳”。 ...
...行统一可扩展固件接口(UEFI)。最后一个动作是启动Linux内核。 内核被加载到内存中,自我解压并初始化。临时文件系统通常由名为initramfs或initrd的实用程序在RAM中创建。这允许确定和加载所需的驱动程序。这反过来允许用户...
桌面Linux年终于到了!windows10正在获得一个Linux内核,所有新的chromebook都将运行Linux应用程序。未来购买的大多数台式机将包含Linux内核并运行Linux软件。 windows正在获得一个内置的linux内核 传统的Linux发行版可能不会占领世界...
...补。 但是这些缺陷是如何工作的呢? 相关:什么是Linux内核,它做什么? 计算机上运行的程序具有不同级别的安全权限。例如,操作系统内核Windows内核或Linux内核具有最高级别的权限,因为它运行show。桌面程序的权限较少,内...