共计 3445 个字符,预计需要花费 9 分钟才能阅读完成。
1. Linux 内核简介
内核: 在计算机科学中是一个用来管理软件收回的数据 I/O(输出与输入)要求的计算机程序,将这些要求转 译为数据处理的指令并交由中央处理器 (CPU) 及计算机中其余电子组件进行解决,是古代操作系统中最根本 的局部。它是为泛滥应用程序提供对计算机硬件的平安拜访的一部分软件,这种拜访是无限的,并由内核决定 一个程序在什么时候对某局部硬件操作多长时间。间接对硬件操作是非常复杂的。所以内核通常提供一种硬件 形象的办法,来实现这些操作。通过过程间通信机制及零碎调用,利用过程可间接管制所需的硬件资源(特地 是处理器及 IO 设施)。
2. GNU/Linux 操作系统与 Linux 内核关系
咱们通常说的 Linux 实际上指的是内核,即 Linux 内核。而 Linux 的操作系统理论是 GNU/Linux 操作系统, 即应用 Linux 内核的 GNU 零碎。
3.GNU/Linux 操作系统的根本体系结构
3.1 用户空间
最下面是用户 (或应用程序) 空间。
这是用户应用程序执行的中央。用户空间之下是内核空间,Linux 内核正是位于这里。GNU C Library (glibc)也在这里。它提供了连贯内核的零碎调用接口,还提供了在用户空间应用程序和内核之间进行转换 的机制。这点十分重要,因为内核和用户空间的应用程序应用的是不同的爱护地址空间。每个用户空间的过程 都应用本人的虚拟地址空间,而内核则占用独自的地址空间。
3.2 Linux 内核的体系结构
内核是操作系统的外围,具备很多最基本功能,它负责管理系统的过程、内存、设施驱动程序、文件和网络系统,决定着零碎的性能和稳定性。
Linux 内核由如下几局部组成: 内存治理、过程治理、文件系统、设施驱动程序和网络接口程序等。
3.2.1 零碎调用接口(System Call Interface 简称 SCI)
SCI 层提供了某些机制执行从用户空间到内核的函数调用。这个接口依赖于体系结构,甚至在雷同的处 理器家族内也是如此。SCI 实际上是一个十分有用的函数调用多路复用和多路合成服务。
在 ./linux/kernel 中您能够找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的局部。
3.2.2 内存治理
对任何一台计算机而言,其内存以及其它资源都是无限的。为了让无限的物理内存满足应用程序对内存 的大需求量,Linux 采纳了称为“虚拟内存”的内存治理形式。Linux 将内存划分为容易解决的“内存页”(对于大部分体系结构来说都是 4KB)。Linux 包含了治理可用内存的形式,以及物理和虚构映射所使 用的硬件机制。不过内存治理要治理的可不止 4KB 缓冲区。Linux 提供了对 4KB 缓冲区的形象
例如 slab 分配器。这种内存管理模式应用 4KB 缓冲区为基数,而后从中调配构造,并跟踪内存页应用情 况,比方哪些内存页是满的,哪些页面没有齐全应用,哪些页面为空。这样就容许该模式依据零碎须要来动静 调整内存应用。
为了反对多个用户应用内存,有时会呈现可用内存被耗费光的状况。因为这个起因,页面能够移出内存 并放入磁盘中。这个过程称为替换,因为页面会被从内存替换到硬盘上。内存治理的源代码能够在 ./linux/mm 中找到。
3.2.3 过程治理
过程理论是某特定应用程序的一个运行实体。在 Linux 零碎中,可能同时运行多个过程,Linux 通过 在短的工夫距离内轮流运行这些过程而实现“多任务”。这一短的工夫距离称为“工夫片”,让过程轮流运 行的办法称为“过程调度”,实现调度的程序称为调度程序。
过程调度管制过程对 CPU 的拜访。当须要抉择下一个过程运行时,由调度程序抉择最值得运行的过程。
一个可运行的过程是指该过程的过程状态为 TASK_RUNNING,意味着这个过程是可运行的:要么它正在运行,要么在 runqueue 中期待运行。
对于「用户空间」(指内存上用户过程运行的空间)正在运行的过程来说,它只可能是可运行的。
对于「内核空间」(内存上内核运行并提供服务的空间)正在运行的过程来说,可运行状态也是可能的。
一个 runqueue(运行队列)是 scheduler(调度器)外面的根本数据结构,它保留了可运行过程的列表,这些列表中的过程随后会被 CPU 执行。
scheduler(调度器)也被称为 process scheduler(过程调度器),是内核的一部分,它会为不同的可运行过程调配 CPU 工夫,Linux 应用了比较简单的基于优先级的过程调度算法抉择新的过程。
通过多任务机制,每个过程可认为只有本人独占计算机,从而简化程序的编写。
每个过程有本人独自的地址空间,并且只能由这一过程拜访,这样操作系统防止了过程之间的相互烦扰以及“坏”程序对系统可能造成 的危害。
为了实现某特定工作,有时须要综合两个程序的性能,例如一个程序输入文本,而另一个程序对文本进行排序。为此,操作系统还提供过程间的通信机制来帮忙实现这样的工作。
Linux 中常见的过程间通信 机制有信号、管道、共享内存、信号量和套接字等。
内核通过 SCI 提供了一个应用程序编程接口 (API) 来创立一个新过程(fork、exec 或 Portable Operating System Interface [POSIX] 函数),进行过程(kill、exit),并在它们之间进行通信 和同步(signal 或者 POSIX 机制)。
3.2.4 文件系统
和 DOS 等操作系统不同,Linux 操作系统中独自的文件系统并不是由驱动器号或驱动器名称 (如 A: 或 C: 等) 来标识的。相同,和 UNIX 操作系统一样,Linux 操作系统将独立的文件系统组合成了一个层 次化的树形构造,并且由一个独自的实体代表这一文件系统。s Linux 将新的文件系统通过一个称为“挂装”或“挂上”的操作将其挂装到某个目录上,从而让不同的文件 零碎联合成为一个整体。Linux 操作系统的一个重要特点是它反对许多不同类型的文件系统。Linux 中最广泛应用的文件系统是 Ext2,它也是 Linux 土生土长的文件系统。但 Linux 也可能反对 FAT、VFAT、FAT32、MINIX 等不同类型的文件系统,从而能够不便地和其它操作系统替换数据。因为 Linux 反对许多不同的文件系统,并且将它们组织成了一个对立的虚构文件系统.
虚拟化文件系统:
虚构文件系统 (VFS) 是 Linux 内核中十分有用的一个方面,因为它为文件系统提供了一个通用的接口抽 象。VFS 在 SCI 和内核所反对的文件系统之间提供了一个替换层。即 VFS 在用户和文件系统之间提供了一 个替换层。
虚拟化文件系统暗藏了各种硬件的具体细节,把文件系统操作和不同文件系统的具体实现细节拆散了开来,为 所有的设施提供了对立的接口,VFS 提供了多达数十种不同的文件系统。虚构文件系统能够分为逻辑文件系统 和设施驱动程序。逻辑文件系统指 Linux 所反对的文件系统,如 ext2,fat 等,设施驱动程序指为每一种硬件 控制器所编写的设施驱动程序模块。
3.2.5 设施驱动程序
设施驱动程序是 Linux 内核的次要局部。和操作系统的其它局部相似,设施驱动程序运行在高特权级的处理器环境中,从而能够间接对硬件进行操作,但正因为如此,任何一个设施驱动程序的谬误都可能导 致操作系统的解体。
设施驱动程序理论管制操作系统和硬件设施之间的交互。设施驱动程序提供一组操作系统可了解的形象接口实现和操作系统之间的交互,而与硬件相干的具体操作细节由设施驱动程序完 成。
一般而言,设施驱动程序和设施的管制芯片无关,例如,如果计算机硬盘是 SCSI 硬盘,则须要应用 SCSI 驱动程序,而不是 IDE 驱动 程序。
3.2.6 网络接口程序
提供了对各种网络规范的存取和各种网络硬件的反对。网络接口可分为网络协议和网络驱动程序。网络 协定局部负责实现每一种可能的网络传输协定。家喻户晓,TCP/IP 协定是 Internet 的标准协议,同时 也是事实上的工业规范。Linux 的网络实现反对 BSD 套接字,反对全副的 TCP/IP 协定。Linux 内核的网 络局部由 BSD 套接字、网络协议层和网络设备驱动程序组成。
网络设备驱动程序负责与硬件设施通信,每一种可能的硬件设施都有相应的设施驱动程序。
Linux 内核视频学习材料 +qun720209036 获取
更多 Linux 服务器高级开发内容包含 C /C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,P2P,K8S,Docker,TCP/IP,协程,DPDK 多个高级知识点分享。点击链接:C/C++Linux 服务器开发 / 后盾架构师 - 学习视频