钻进 Linux 内核看个究竟

Linux 内核,这个常常听见,却不不知道它具体是干吗的东西,是否是以为很是神秘?linux

Linux 内核看不见摸不着,而对于这类东西,咱们常常无从下手。本文就以浅显易懂的语言,带你钻进 Linux 内核,看它到底长啥样。程序员

内核是 Linux 操做系统的核心组件,它向上链接应用程序,向下直接与硬件打交道。其代码主要由 C 语言及少许汇编语言写成,而且它能够适配多种多样不一样的硬件架构。面试

内核并发运行着一系列的进程,并管理着硬件的各类资源。具体来说,由于系统的资源有限,内核就为各个进程分配着诸如 CPU 时间、内存空间、网络链接等各方面的资源。算法

Linux 操做系统架构

下图是一个典型的 Linux 操做系统架构图。安全

Linux 操做系统主要分红两部分:微信

  • 用户空间
  • 内核空间
1. 用户空间

全部的用户应用程序都是在用户空间运行,它们不能直接访问内存等硬件资源,而是间接经过内核来访问。GNU C 库(glibc)提供了从用户空间切换至内核空间的机制。网络

2. 内核空间

内核直接管理着系统的 CPU、内存、输入输出设备、网络设备和其它的外围设备,它被分为不一样模块来管理系统的不一样操做,好比:文件管理,内存管理,进程管理等等。架构

用户空间的应用程序能够经过调用内核提供的 API 来访问硬件资源。好比,对于文件操做,咱们能够调用 open() ,read() ,write() 等接口。并发

内核直接管理着硬件,又与硬件相互独立,它能够经过简单配置而后运行在 Intel,ARM ,Atemel 等芯片架构上。异步

Linux 内核主要子系统

根据内核的核心功能,Linux 内核提出了 5 个子系统,分别为:系统调用、进程管理、内存管理、文件系统、网络管理,以下图示:

1. 系统调用(System Call Interface)

系统调用接口。进程调度子系统经过系统调用接口,将须要提供给用户空间的接口开放出去,同时屏蔽掉不须要用户空间程序关心的细节。

SCI 其实是一个很是有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您能够找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。

2. 进程管理(Process Management)

用户空间有那么多进程,如何让他们有条不紊地进行着正是进程管理所要作的事。每一个进程都要使用到 CPU 资源(如 CPU ,内存),但 CPU 资源毕竟有限,不可能让某个进程一进独占着资源。

所以,进程管理就充当着管理员的角色,它调度着全部的进程,当须要选择下一进程运行时,会由调度算法来选择最须要运行的进程。若是某个进程在等待其它硬件资源,则它就会被挂起。

所以,经过一系列的调度算法,内核尽量地公平地让各个进程使用到 CPU 资源。

3. 内存管理(Memory Management)

内存管理主要提供对内存资源的访问控制,以便让各个进程能够安全地共享机器的内存资源。它提供了物理内存与虚拟内存的一种映射关系,于是不一样的进程可使用相同的虚拟内存,而这些相同的虚拟内存,能够映射到不一样的物理内存上。这个映射关系主要由 MMU 来完成。

另外,内存管理会提供虚拟内存的机制,该机制可让进程使用多于系统可用的内存,不用的内存会经过文件系统保存在外部非易失存储器中,须要使用的时候,再取回到内存中。

4. 虚拟文件系统(Virtual File System)

内核隐藏了不一样功能的外部设备,例如硬盘、输入输出设备、显示设备等等的具体细节,将它们抽象为能够经过统一的文件操做接口(open、close、read、write等)来访问,也就是咱们所熟知的「一切皆文件」。

随着计算机技术的发展,历史上出现了多种文件系统,好比:FAT、FAT3二、NTFS、EXT二、EXT3 等等。为了兼容这些文件系统,内核将它们抽象为统一的表现形式,这就是虚拟文件系统的概念。

虚拟文件系统可分为逻辑文件系统和设备驱动程序。逻辑文件系统指 Linux 所支持的文件系统,如ext2, fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。

5. 网络管理(Network Stack)

网络子系统在 Linux 内核中主要负责管理各类网络设备,并实现各类网络协议栈,最终实现经过网络链接其它系统的功能。

网络接口提供了对各类网络标准协议的存取和各类网络硬件的支持。网络接口可分为网络协议和网络驱动程序两部分。网络协议部分负责实现每一种可能的网络传输协议,网络设备驱动程序负责与硬件设备进行通讯,每一种可能的硬件设备都有相应的设备驱动程序。

小结

以上就是 Linux 内核的一些很基础的知识,对于内核的学习还有很是多的内容,决不是一篇文章可以写完的。因此,对于内核的学习,须要多看书,多看视频,并本身动手去实践,才能真正掌握。


昨天是良许公众号运营一周年的日子,本想在昨天就发福利的,但昨天的文章写得太长了,怕朋友们翻不到最后,因此就换到今天来。

为了答谢良许的读者朋友们一直以来的支持与帮助,本次为你们送出两个福利:1. 内核书籍;2. 现金红包

1. 书籍赠送

其中内核书籍是《Linux内核深度解析》,是由异步社区所赞助,在此感谢异步社区的大力支持!该书籍比较优质,且售价比较贵 138 元,因此本书赠送 10 本。书籍介绍以下:

由于我不但愿真正想获得这本书的人没抽到,而只是过来打酱油的人却获得了这本书,这样书本就发挥不了它的做用。因此为了让书籍送给真正有须要的人,赠书规则以下:

  1. 在评论区留言,写下你想要获得这本书的理由。要走心哦,不走心不上墙哦;
  2. 邀请好友为你的评论点赞,赞数前 10 名者中奖;
  3. 为防止刷赞,赞数超过 100 的朋友必须提供拉票证据,不然失去获奖资格;
  4. 活动时间即日起至 6 月 5 日晚 8:00 ,中奖者需在 24 小时内联系良许提供地址。良许有多个微信,联系其中一个便可,尚未良许微信的,请在公众号后台回复 良许 二字便可获得良许的最新微信。
2. 现金红包

没错,就是那么粗暴,直接发红包!直接点击如下连接便可领取,先到先得哦!因为良许还比较穷,不能发很大的红包,还请见谅!


最后,最近不少小伙伴找我要Linux学习路线图,因而我根据本身的经验,利用业余时间熬夜肝了一个月,整理了一份电子书。不管你是面试仍是自我提高,相信都会对你有帮助!目录以下:

免费送给你们,只求你们金指给我点个赞!

电子书 | Linux开发学习路线图

也但愿有小伙伴能加入我,把这份电子书作得更完美!

有收获?但愿老铁们来个三连击,给更多的人看到这篇文章

推荐阅读:

相关文章
相关标签/搜索