Linux 0.11-shell命令的执行预热篇-41

Posted 热爱编程的大忽悠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 0.11-shell命令的执行预热篇-41相关的知识,希望对你有一定的参考价值。

Linux 0.11-shell命令的执行预热篇-41


Shell命令的执行

新建一个非常简单的 info.txt 文件。

name:flash
age:28
language:java

在命令行输入一条十分简单的命令。

[root@linux0.11] cat info.txt | wc -l
3

这条命令的意思是读取刚刚的 info.txt 文件,输出它的行数。

我们的第五部分,就是抽丝剥茧般地解释这条命令,从你敲击键盘的那一刻开始,一直到它输出到屏幕 3 这个数字为止的全部过程。

阅读这个部分的同学,应该有一种所有知识都被串起来的爽。因为前四个部分已经把操作系统启动流程的全部秘密讲出来了,而在启动过程中必然伴随着系统各个模块的运作,而我们的第五部分正是想通过这一条命令的执行过程来解读系统各模块的原理与协作方式。

比如在启动过程中,进程 0 创建进程 1 进行 init 的过程,就需要 fork 函数的支持,这也就涉及到了进程调度模块。

再比如在加载根文件系统,并打开 /dev/tty0 等文件时,就需要文件系统的支持,比较直观的函数就是 open,close,read,write 等。

再比如加载并执行 shell 程序的时候,是通过 execve 配合 fork 函数来实现的,这里又涉及到了内存管理系统与中断机制,当然,这俩东西在任何地方都有体现。

这里的有些部分讲解的较为详细,比如进程调度这块,在启动流程中就直接有调用 fork 函数,如果不讲清楚了,启动流程的理解将会受到阻碍。

有些部分的讲解就没有那么详细了,因为不影响启动流程的理解,比如说从硬盘中读取数据到内存,其实中间涉及到文件系统,以及文件系统这个抽象层下方的块设备驱动程序,这部分非常复杂,不但分层和抽象层次较多,且涉及到阻塞与唤醒等操作。

所以从硬盘中读取数据到内存这块就没有展开太多,因为从硬盘读取数据到内存,本身不考虑细节,是一件非常容易理解的事情,就没有在启动流程里展开,以免影响大家对主流程的整体把控。

不过不用担心,整个第五部分,我将会通过这一个命令的执行过程,将操作系统各模块的全部核心细节都展开了讲解。

一个命令的执行,可以说调用了操作系统所有模块的运作,就光键盘输入命令到 shell 进程读取到这个命令,就涉及到了文件系统以及其下方的字符设备驱动程序。

以及字符设备队列读取时的阻塞与唤醒机制。

可以说是非常精彩。

当你通过前四部分理解了操作系统启动流程,再继续通过第五部分理解了一条命令的执行流程,那么你对操作系统的原理就真的不再畏惧了,因为操作系统一共就这两件事,一个是把自己启动起来,另一个是不断接收用户的命令并且执行它,就这么简单。

好的,那就让我们看看,这条命令的执行,到底经历了些什么吧!


转载

本文转载至闪客图解操作系统系列文章

以上是关于Linux 0.11-shell命令的执行预热篇-41的主要内容,如果未能解决你的问题,请参考以下文章

Linux 0.11-shell 程序读取你的命令-43

Linux 0.11-shell 程序读取你的命令-43

Linux 0.11-shell 程序跑起来了-38

Linux 0.11-shell 程序跑起来了-38

MySQL逻辑架构存储引擎和SQL预热 --MySQL高级篇1

ASP.NET CORE Linux发布工具(文件对比 只上传差异文件;自动启停WebServer命令;上传完成自动预热WebServer)