26

钻进 Linux 内核看个究竟

 4 years ago
source link: https://segmentfault.com/a/1190000022862642
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Linux 内核,这个经常听见,却不不知道它具体是干嘛的东西,是不是觉得非常神秘?

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

内核是 Linux 操作系统的核心组件,它向上连接应用程序,向下直接与硬件打交道。其代码主要由 C 语言及少量汇编语言写成,并且它可以适配多种多样不同的硬件架构。

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

Linux 操作系统架构

下图是一个典型的 Linux 操作系统架构图。

ZNRJFz6.png!web

Linux 操作系统主要分成两部分:

  • 用户空间
  • 内核空间

1. 用户空间

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

2. 内核空间

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

用户空间的应用程序可以通过调用内核提供的 API 来访问硬件资源。比如,对于文件操作,我们可以调用 open() ,read() ,write() 等接口。

内核直接管理着硬件,又与硬件相互独立,它可以通过简单配置然后运行在 Intel,ARM ,Atemel 等芯片架构上。

Linux 内核主要子系统

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

aY3Ujqq.jpg!web

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、FAT32、NTFS、EXT2、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开发学习路线图

也希望有小伙伴能加入我,把这份电子书做得更完美!

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK