How Linux Works: Linux内核概述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wang7807564/article/details/86746657

Linux内核概述

Linux内核大家或许都不陌生,这是Linux操作系统中最核心和关键的部分,也是最为复杂的部分。Linux操作系统具有稳定/高系能/容易维护等优点,这与Linux优秀的内核实现是分不开的,我们在这里以How Linux Works这本书中的主要内容为依据,对Linux内核做一个整体的阐述。

Linux 的抽象层次

Linux把系统层和用户层分开,硬件系统之上便是内核,直接负责与底层硬件进行交互,用户应用则通过内核直接或间接与硬件打交道。内核进行资源管理的单位是任务(task), 这主要是指进程(process). 它是由内核统一管理的,称为用户空间或用户进程,在用户模式(user mode)中运行。而操作系统内核则运行在内核空间,内核空间所占用的内存与用户空间是隔离开的,这在后面我们会讲。

内核的职责

内核主要负责这么几个部分:

  1. 管理进程:决定那个进程可以使用CPU
  2. 管理内存:分配与回收,共享内存等
  3. 设备驱动程序:提供应用与硬件之间的接口
  4. 提供系统调用和其他支持

对进程的管理

Linux对进程的管理主要就是上下文切换,涉及到进程的启动/暂停/恢复与终止。其实更准确地来说应该是对任务的管理,因为管理的不仅仅是进程,还有线程,在Linux上我们将进程与线程统一称之为任务。早期的Linux上对线程支持不好,二者区别并不是很大。随着CPU的升级以及内核的改进,Linux上的线程也比原先性能改进很多。
上下文切换(context switch)其实就是CPU时间片轮换的过程,内核提供了任务调度器,保障每个任务都能够获得其应有的CPU时间片,而内核会在上下文切换的时间间隙中获得CPU.
在多核CPU系统中,如果新的进程在另外的一个CPU上执行,那么内核就不会让出当前的CPU使用权,与此同时,内核会采用一些其他方法来提高CPU的使用率。

对内存的管理

当前CPU基本都已经实现了一种叫做MMU的机制,该机制提供了虚拟内存的内存访问机制。举个例子,如果你所分配的内存表面上看即便是连续的,在物理内存上也有可能不是连续的,因为整个过程都是虚拟的,用户无法直接感知。这相当于在物理内存之上抽象出来一个中间的映射层,通过这个”中间层“来访问实际的内存空间。这与JAVA虚拟机的感觉是类似的,只不过MMU要比JAVA虚拟机这种简单一些,可以理解为一个MAP映射一样的东西,称之为内存映射表。
通过这里的虚拟内存机制,可以保障内核空间与用户空间隔离,在内核进行上下文切换时,将MMU的内存映射表转交给获得CPU使用权的新进程使用,同时也便于内存管理。

提供系统调用

系统提供应用程序不能直接实现的API,例如打开文件,读取文件内容,创建套接字等等,这些都需要在内核中实现。举个例子,如果创建套接字需要进行通信,则内核需要将接受到的数据拷贝到用户空间中,当前进程才可以使用,这个过程需要内核进行维护。于此同时,内核还需要维护设备驱动,这样用户就可以通过访问文件系统的方式来与设备进行IO通信。

猜你喜欢

转载自blog.csdn.net/wang7807564/article/details/86746657
今日推荐