我想知道,既然Linux是100%开源的,是否可以按照Linux的逐行说明来观察操作系统的整个工作原理,以便更好地了解操作系统是如何启动、加载过程的、管理时间片进程/多任务、加载驱动程序、进行系统调用、通过 API 操作、访问驱动程序的用户模式线程、GUI/X Window 系统连接以及驱动程序到驱动程序的交互。
是否有可能从源头做到这一点,即线性追踪源头的可行性如何,是否是线性的?
答案1
我怀疑这比 Michael Kjörling 和 OP 想象的还要困难。
OP 似乎将 CPU 的操作视为一条直线、单个时间线,其中任务按顺序执行。 Michael Kjörling 进一步强调了这一印象,他指出任何给定的内核每个周期都严格按顺序执行一条指令。
这在微观层面上肯定是不完整的(当今的个人电脑有多个CPU),并且在中观/宏观层面上毫无帮助。
我们用宏观变量来描述所有复杂的系统;有时这是因为这些只是我们可以访问的变量,但它们的用处并不主要在于易于访问。我们不会通过陈述所有相关粒子的位置和速度来描述气体,而是使用压力/体积/温度/熵。
同样,我们不是通过 CPU 指令来表征机器状态,而是通过正在执行的任务和服务来表征机器状态。因此,在任何给定时间都有多个进程在运行和交换信息,通常协同行动(遗憾的是,有时甚至是竞争)以实现共同目标。
计算机科学中的压力/体积/熵/温度相当于抽象层,是机器执行的任务的简化表示,而不考虑执行任务的代理的实际实现。 AL 存在于整个计算机科学中,从 HAL 到 OSI 层等等。
要求计算机操作的逐步表示就像放弃湍流理论中的奇怪吸引子而支持多粒子流体描述。或者尝试通过研究化学键来解码人类基因组。一个建立在另一个之上,但新的抽象层提供了其他方式难以想象的见解。
答案2
您可以查看源代码并了解系统的工作原理(如果您熟悉 C/C++ 和汇编)。据我所知,代码不是线性的。
答案3
也许您能得到的最多的是一些在线调试和 systemd 的日志守护进程,它从很早开始就记录所有内容(远远早于传统的日志记录工具)。
如果这还不够,并且您想要在较低级别跟踪系统,您可以在虚拟环境(如 QEMU)中运行 linux,这将允许深入了解内部结构,在实时内核上使用 gdb 等等。有一些教程如何为实时内核及其整个图像调试设置 QEMU:http://www.cs.rochester.edu/~sandhya/csc256/assignments/qemu_linux.html
另请参阅 stackowerflow 问题,了解内核内部用于调试的工具:https://stackoverflow.com/questions/4943857/linux-kernel-live-debugging-how-its-done-and-what-tools-are-used
答案4
我想向您指出bootchart
。bootchart
作为第一个进程而不是 init 启动,并监视执行的内容以及运行的时间。
这不是您想要监视的所有内容,但它具有非常好的图形输出,值得尝试。
例如,要监视系统调用,您可以perf record
在早期启动时执行,但这取决于您如何解释数百万行。