小引

​ 这子篇博客是个人笔记在Linux系统的全流程笔记的小引,也是这个系列的导览。这组博客将会从常用的Linux操作(以Arch为例)。如果是从0开始阅读我的博客,可以考虑按照

  1. 基础的Linux使用
  2. Linux System API
  3. 更加通用的操作系统概念
  4. 计算机组成原理
  5. Linux内核架构

​ 的顺序进行阅读,从看得见,摸得着,使用的最多的部分进行阅读。这里我们大胆的假设您的C语言基础功底尚可,关于疑难的部分将会给出相关的解释。

浅论

​ Linux的重要性无需多言,这也是为什么单独给他开一篇专门的博客集进行记录。

​ Linus从1991年发布了他的第一个Linux的版本,这个Linux运行在Intel 80836微处理器上(值得注意的是,后续我的研读Linux 0.11的部分源代码也就会基于这个计算机硬件环境展开深入的讨论),在直到我写下这篇博客的2024年4月3日的今天:Linux内核在全世界顶级的程序员的贡献下,发生了翻天覆地的变化.。3月31号,我们的Linux内核来到了6.9.rc2这个版本(关于内核是什么,如何理解版本号的含义我会在Linux内核的部分进行阐释),代码量也从开始的几千上万行到了几百万上千万行。

诸位如果在未来的时间里读到了我的博客也很迫不及待的查看Linux - Kernel版本,可以前往The Linux Kernel Archives浏览

​ 学习Linux,也是为了更好的理解操作系统和计算机组成概念。我们将会看到经典的,或者是革新的操作系统技术与思想是如何使用C语言复现的。这对我们的学习无疑大有帮助:

​ 在读之前,我们可以思考一些简单的问题:

在应用层次:

Linux的主流发行版有Debian,Ubuntu,RedHat,CentOS,Fedora,Arch等,这些又是什么?他们跟Linux Kernel的关系如何?我们开始我们的Linux之路应该如何选择这些发行版?如何下载他们?

我们如何从0开始熟悉Linux操作系统的使用,什么是命令行环境,如何使用shell?我们如何在GUI或者是命令行层级来安全的使用Linux系统达到我们的目的。这里存在大量的概念也许是我们那些之前之习惯在Window环境下工作的人所并不熟悉的。

我们如何更好的,更加便利的,更加少麻烦的管理我们的Linux?

在内核层次:

我们如何在程序语言的层次控制我们的操作系统帮助我们完成我们的工作?(这个问题很大很宽泛,事实上,关于Linux的API成百上千,我们应该如何学习主干的部分呢)

我们如何理解这些基础的问题:

进程是如何被创建的?在内存的排布如何?如何被调度的?

Linux的内核是分层的!为什么?为此派生出来的系统调用是如何实现的,如何使用的?他的另一个密切相关的问题就是:我们的User Application(用户应用)为了完成自身的任务要如何跟操作系统打交道呢?

现代的操作系统都是并发的,我们要如何处理并发?如何保证我们的程序流在我们希望有序的访问全局资源时真的按照我们的意愿有序的访问呢?(值得注意的是并发是真正流程随机的)

Linux是如何跟更加底层的设备进行交流的?CPU如何更加高效的与这些设备进行交互?

Linux是如何进行内存管理的?程序的使用在早期开始极其容易导致内存碎片化导致计算机的实际可分配内存被快速的消耗。

为什么会有“一切皆文件的”说法?如何做到的?这是一个叫做文件系统的内容,他们是如何辅助我们访问一切可以访问的设备的?如果发生意外,他会如何帮助我们最大限度的恢复日志?

​ 以上就是我们学习Linux操作系统的时候最要经常询问的几个问题。先不着急,我们的流程马上开始。