Linux运作机制第二版 玩转开源系统的进阶指南! (how linux works 2nd)

Linux系统作为一个免费开源的操作系统,受到越来越多程序员和企业的青睐。伴随着与云计算的崛起,Linux在大数据处理、容器化、微服务等领域的应用逐渐被广泛使用。而Linux系统的运作机制正是其得以优化和应用的关键所在。

本文将介绍Linux运作机制的第二版,为读者提供一份进阶指南,解释Linux系统内核运作原理、I/O机制、内存管理、进程管理等重要内容,帮助读者更好地理解和利用Linux系统的性能。

之一部分:Linux系统内核运行原理

Linux内核是操作系统的核心,负责管理计算机硬件的所有资源,并支持用户程序对这些资源的访问。了解内核的运行原理对于理解操作系统的核心架构非常重要。

本节将介绍Linux内核的组成和内核启动过程。内核是由一系列C语言程序编写的,由多个子系统组成。每个子系统都有其特定的功能,但同时也与其他子系统或进程相互交互。

在Linux启动过程中,BIOS会在内存中加载GRUB,GRUB会选择启动哪个内核。然后,内核将被加载到物理内存中,并由GRUB创造的临时文件系统中的文件调用。内核启动后,它用以下顺序处理以下步骤:

1. 初始化硬件资源

2. 初始化虚拟内存

3. 创建IDLE进程

4. 启动进程调度器

操作系统会在内核启动后创建之一个进程,IDLE进程。这是一个特殊的进程,它只是等待其他任务分配给CPU而不进行任何其他操作。进程调度器则负责对多个进程进行管理,协调资源的分配和使用,确保CPU的高效利用。

第二部分: Linux I/O机制

输入/输出(I/O)是计算机系统中的基本操作之一。它涉及CPU与外部设备之间的相互交互。Linux系统提供了各种机制来处理I/O操作,包括阻塞和非阻塞I/O、同步和异步I/O、信号驱动I/O和I/O多路复用。

阻塞I/O是指当一个程序进行I/O等待时,它将进入睡眠状态,直到数据到达或I/O操作完成。但这种方法会导致CPU被占用时间过长,影响系统的性能。非阻塞I/O与其相反,它可以提供快速响应,但占用CPU时间和I/O一样长,只是在等待I/O数据返回的过程中不会睡眠。同步I/O要求应用程序等待I/O操作完成后再进行下一个操作,而异步I/O则允许应用程序在I/O操作的同时进行其他操作。

Linux还提供了信号驱动I/O和I/O多路复用两种机制,前者是当数据到达设备时会使进程接收到信号,后者则能监视多个文件描述符,以便在有数据输入时立即响应。这些I/O机制都可以通过系统调用进行访问。

第三部分:Linux内存管理

内存管理是Linux系统中的一个非常重要的组成部分。内存管理器负责将系统中的物理内存分配给已加载的驱动程序和进程。因此,内存管理器必须能够高效地管理可用内存以及在系统或进程需要时重新分配它。

Linux中内存管理的主要任务是地址空间分配和虚拟内存管理。地址空间分配是指将可用内存分配给驱动程序和进程。虚拟内存则允许进程在执行过程中请求从磁盘中通过页式调度算法检索内存块而非直接从物理内存中访问数据。

虚拟内存是Linux系统性能的一个关键因素。通过虚拟内存,进程可以使用系统的所有可用内存,而系统可以将存储器数据移动到SWAP空间,以腾出更多内存供其他进程使用。因此,系统的性能可以得到优化。

第四部分:Linux进程管理

进程是计算机中正在执行的程序的实例,Linux系统必须能够调度和管理多个进程。Linux内核采用分时多任务系统来分配给每个进程以机器上的一定量的时间。这种方法可以在更短的时间内为多个应用程序提供资源。

尽管Linux进程管理是由内核完成的,但也可以通过用户空间提供的进程控制机制进行访问。如何对进程进行管理和控制则受限于系统上运行的应用程序。通常,进程管理是通过系统日志和监控工具进行监控的。

在本文中,我们介绍了Linux运作机制的第二版,帮助读者更好地理解Linux系统的重要性及其运行原理。本文涉及了Linux内核原理、I/O机制、内存管理、进程管理等方面的内容,并简要介绍了这些方面对于Linux系统性能的重要作用。

我们相信,对于学习Linux系统的人来说,理解操作系统的原理和基础知识是至关重要的。本文提供了Linux系统进阶指南,并且希望读者通过本文的帮助更好地理解和实现Linux系统。

相关问题拓展阅读:

如何构建自己的 Linux 发行版

风格的书籍,深入研究了调度、内存管理、多进程和线程、文件系统,以及用户与内核之间的交互。写作 Linux 书籍的作家相对于 UNIX 作家来说有一个优势:尽管团体发生了剧变,但是 Linux 内核不可能分成几个相互竞争的分支,由于 GNU Public License (GPL)、集中式研究实验室 Open Source Development Lab (OSDL) 和 Linus Torvalds 不可动摇的地位,使得 Linux 有幸成为一个缓慢移动的目标(slow-moving target)。为什么 UNIX 内核很重要除了某些方面具有一定的相似性之外,不同的 Unix 内核并不怎么相同。各种 UNIX 风格也具有一个 Linux 所缺少的优点:所有 UNIX 风格都被假定是完全的操作系统。Linux 通常被描述为“只是一个内核”(如果有这样的定义的话,也是一个武断的定义),它给出公共功能和实现的核心,不管内核是运行在不太强大的 Pentium? II 机器上还是 Symmetric Multiprocessing (P) 系统上,这些公共功能和实现都不会发生本质上的改变。为了更加简化,有人可能会说,离 Linux 内核越远,就会发现更多的变化,而 UNIX 系统则趋向于是各种 UNIX/POSIX 标准的离散实现。事情并没有这么简单。检测 Linux 内核和系统级代码可能是一件很费时间的事情,并且在现实世界中会限制使用。LFS 项目旨在解决 Linux 上有限的系统级可理解性问题。关于内核需要大量的库和工具来让 Linux 系统猜没友执行最基本的任务这一事实,已经做过讨论了,但是如果一个比较熟练的用户具有一个 slim-line Linux 发行版,他不想下载几吉字节不让他优化系统、也不让他抛开所有这些麻烦且不必要的工具的二进制代码,那该怎么办?如果一个非常熟练的用户拒绝接受各种社团发行版的 苛刻条件(diktat),而想要运行一个来自 CD 的 Linux/Apache/MySQL/PHP (LAMP) 类型的应用程序堆栈,那该怎么办?LFS 可以解决这些问题。回页首Linux From ScratchLFS 项目显然建立于那些对于构成基本的 Linux 系统来说充分而不必要的源文件的基础之上。它已经超越了 Linux 内核和设备驱动程序,因为要产生一个可工作的 Linux 系统,您必须添加一个完整的编译器工具链、许多 Linux 汇编程序实用工具、glibc 系统库、系统配置工具和连接到 userland shell 访问的工具。LFS 建立在这样一个假设的基础之上,即 Linux 或 UNIX 允许具有一些脚本编写知识的用户,了解一个完全有用的系统的工作方式,而不用深入研究内核代码本身。为了了解 Linux 系统的工作方式,LFS 的创建者们确定,通过遵循模块依赖性来编译系统,可能是了解一般操作系统和特定的 Linux 的机制最自然的方式。用户掌握了编译过程之后,就可以开始消除依赖性树的那些连接到与支持操作系统基本目的无关的系统组件的部件。例如,在编译完成之后,消除编译器工具链本身是可行的。在没有的命令行实用工具时,可以凑合使用嵌入式 LAMP 堆栈。配置实用工具也可以被丢弃,大多数用户可以凑合着用一个而不是太多 Linux 将会支持的文件系统。Linux 部件LFS 系统的一个重要部件是,可以作为 tar ball 得察袜到的大量源文件。文档是另一个重要部件,并且是最重要的。实际上,很有可能利用一个最新的 LFS 书籍文件并创建一个 LFS 发行版,因为 LFS 书籍中详细描述了每个下载位置和每个源文件及其依赖性的特征。用于从内核到编译器到 shell 编译每组源文件的过程都是已经写好了的,如果可能,您也可以在描述具有不同特征的系统的 LFS 书籍中穗槐找到替代的例程。LFS 系统的另一个不太可能出现在一般用户工具箱中的部件是,在基本 LFS 系统组合在一起之后引导系统所需的引导脚本。现在对 LFS 发行版的更大警告是:勇敢的发行版构建者所需的是一个可工作的 Linux 发行版,包括一个完整的编译器工具链和一套文件系统创建实用工具。自然,所有基于源代码的 Linux 发行版都需要使用各个发行版都完全不同的特定编译器版本来引导。LFS 不是该领域的惟一系统,但它是惟一允许您直接处理单个源文件的系统。大多数其他基于源代码的 Linux 系统,比如 Sourcemage 和 MyGeOS,提供一个完整的下载,建议用户使用。LFS 不作这样的假设,并且鼓励拆开 LFS 框架。预先假设起作用的 Linux 发行版已安装在非外来的(nonexotic)硬件上,即使 LFS 可能没有配置工具和脚本那么受关注。要编译 LFS,您需要准备一个分区和一个文件系统,还需要编译一个编译器和系统库。如果用手工完成的话,这是一个相当伤脑筋的过程,但是也的确可以增加您在处理其余安装方面的自信。整个系统的编译要花一小时到四天的时间,具体时间取决于底层硬件的年代和您的命令行技术熟练程度。作一个相当大的假设,如果您愿意很大程度上保留书籍安装,并使对 LFS 书籍中提议的安装的更改保持最小,您也可以使用自动化的安装例程来安装基于 LFS 的发行版。安装例程没有在 LFS 书籍中给出,但是可以在名称 Automated Linux from Scratch (ALFS) 之下作为基于 XML 的发行版得到。活动安装可以作为基于 C 的脚本得到,该脚本使用 ncurses 来模拟图形安装。该安装也叫做 nALFS 并给出一个极为灵活的包安装框架。工作需要一个起作用的 Linux 系统,并带有可以工作的 C 编译器和 XML 解析器。一个可以工作的 LFS 系统就足够了。Automated Linux From ScratchALFS 的目的是超越 LFS 本身。LFS 自己指导基于 Linux 的操作系统的内部工作,但是它不具有单个图形用户界面 (GUI)。LFS 既不允许连接到网络,也不允许连接到 Internet。ALFS 可以简化系统的扩展,例如,通过添加支持 Internet 访问的库,或者通过安装图形桌面所需的 X 库。回页首超越LFSLFS 的创建者们认识到了对其他各种基于源代码的 Linux 系统的需求。为了这些想要超越 LFS 并添加 X Window System、GNOME 和网络支持的人,创建了另一个 LFS 派生物:Beyond Linux From Scratch (BLFS)。 第三版 LFS 书籍(让我们不会忘记是在谈论书籍而非发行版),形成一个以一个角为基础的三角形:对于自动化编译和完全的基于源代码的 Linux 发行版,基本的 LFS 版本是基础。BLFS 将基本的 Linux 系统转化成一个完全的用户广泛接受的 Linux 系统。AFLS 简化基于源代码的 Linux 安装的安装和扩展。整个基于源代码的系统的编译是由一个脚本指导的,您在针对运行脚本的硬件调整脚本之后,就可以让脚本自己运行了。在您(或安装工程师)确定需要运行哪些包,也即特定的办公应用程序套件之后,您就可以容易地扩展安装顺序了。ALFS 也迟早会派上用场,因为它适用于从源代码进行网络范围的安装。回页首Hardened LFSLFS 家族的最后一个成员解决基于源代码的 Linux 的一个特别重要的方面:安全性。对于不想依赖于所选的 Linux 发行版服务器交付的补丁的那些人,安全性的普通方法是,针对所选的核心库和应用程序跟踪安全报告。对于 LFS 实现人员来说,问题有些不同:尽管不是不可能,但是也难以审计 Linux 内核代码,也许还包括集中于基于 Linux 的操作系统的内部机能的很多库和实用工具。代码审计相当费时,并且只有当补丁服务器是由专门人员集中维护的时,添加大量补丁才是明智的。但是可以取代一些为反映安全问题的新方法而重新编写过的库。一个好的例子是,通过从一个适当大的随机数池中随机分配数字,使得猜测进程标识符极为困难。OpenBSD 项目更先采用了该方法,随后,各种 UNIX 风格和 Linux 发行版都采用了该方法。一个相当新的项目叫做 Hardened Linux From Scratch (HLFS),在 Linux 下采用了这一安全方法。该项目假设相当正规地掌握了 LFS 和 BLFS 的一些部件,并使用了不会成为大多数 Linux 系统中的标准的几个实用工具和库。添加到 HLFS 中的最重要的部件可能是 Stack-Smashing Protector (SSP),通过使用 gcc 指令可以启用该功能。SSP 开发来防御 stack-ashing 攻击,这类攻击属于影响 Linux 系统的一类最常见的安全威胁。其他安全措施包括一流的随机数生成器和位置独立的可执行程序的编译,其中通常转化成静态链接对象代码的可执行代码作为共享库出现,而位置独立的可执行库通过将地址随机化可以隐藏这些地址。当然,可从 HLFS Web 站点得到大量补丁,并可查看其源代码。回页首日益壮大的 LFS 家族在许多方面,Linux 版本的 LFS 家族是一个方法,给予黑客以构造基于 Linux 的操作系统的能力。但是对于 LFS 的创建者们来说,最重要的结果似乎是:通过 LFS,所有 Linux 发行版对于所涉及的用户都成了智能的了。通过允许用户一部分一部分地构建 Linux 发行版,并帮助用户将一个基于 Linux 的操作系统看作一个由许多部件组成的系统,还可以用另外的方法构建 Linux 发行版。更一般来说,用户要更改构建 Linux 发行版的方式,不必要是程序员:只要从构建 LFS 系统学到的一点脚本编写能力就足够了。LFS 专家可以改变和扩展 Linux 发行版的完美组合,而不会影响它的基本结构。对于有人员和专家维护 Linux 系统,但没有资金从咨询机构和公司购买商业支持的机构来说,该功能特别重要。已经针对教学目的和大型网络,演示了基于 LFS 的 Linux 系统。它们也有可能用于其他领域。参考资料 您可以参阅本文在 developerWorks 全球站点上的 英文原文。最新LFS 版本的门户是 LFS 下载站点。它提供从几个方面可用的 LFS 书籍。LFS 家族的最新成员是 HLFS 或Hardened LFS 风格。如果愿意,LFS 狂热者们可以创建 自动化的 安装。如果基本的 LFS 安装还不够,那么可以继续安装更加复杂的 extended Linux From Scratch,也叫做 BLFS。为了防御 stack-ashing 攻击,SSP 指令使得 gcc 可以编译针对该类型威胁而保护的代码。位置独立的代码在关于 position-independent executables 的一章中作了简短介绍。在developerWorks Linux 专区 可以找到更多为 Linux 开发者准备的资源。访问developerWorks 开放源码专区,获得广泛的 how-to 信息、工具和项目更新,以帮助您利用开放源码技术进行开发,并将它们与 IBM 产品一起使用。利用IBM 试用软件 革新您的下一个开放源码开发项目。可从下载或 DVD 得到试用软件。通过参与 developerWorks blogs 加入developerWorks 社区。关于作者Frank Pohlmann 以前研究的是中东宗教历史,后来各基金会认为研究宗教辩证历史与当今世界相去甚远,从此他便专攻自己热爱的领域 —— 免费软件。他获准成为英国的 LinuxUser and Developer 的技术编辑。您可通过 与他联系。关闭关于报告滥用的帮助报告滥用谢谢! 此内容已经标识给管理员注意。关闭关于报告滥用的帮助报告滥用报告滥用提交失败。 请稍后重试。关闭developerWorks:登录IBM ID:需要一个 IBM ID?忘记IBM ID?密码:忘记密码?更改您的密码 保持登录。单击提交则表示您同意developerWorks 的条款和条件。 使用条款 当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。所有提交的信息确保安全。关闭请选择您的昵称:当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。昵称:(长度在 3 至 31 个字符之间)单击提交则表示您同意developerWorks 的条款和条件。 使用条款. 所有提交的信息确保安全。为本文评分评论回页首关于how linux works 2nd的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux运作机制第二版 玩转开源系统的进阶指南! (how linux works 2nd)