当前位置: 首页 > 科技观察

深入Linux内核,看看它是什么

时间:2023-03-21 19:20:18 科技观察

Linux内核,经常听到这个,但不知道是什么。是不是觉得很神秘?Linux内核是看不见摸不着的,对于这种东西,我们往往无从下手。本文将以通俗易懂的语言带你走进Linux内核,一睹究竟。内核是Linux操作系统的核心组成部分。它向上连接应用程序,向下直接处理硬件。其代码主要用C语言和少量汇编语言编写,能适应多种不同的硬件架构。内核并发运行一系列进程,管理硬件的各种资源。具体来说,由于系统的资源是有限的,内核会为每个进程分配CPU时间、内存空间、网络连接等资源。Linux操作系统架构下图是一个典型的Linux操作系统架构图。Linux操作系统主要分为两部分:用户空间内核空间1.用户空间所有的用户应用程序都运行在用户空间。它们不能直接访问内存和其他硬件资源,而是通过内核间接访问。GNUC库(glibc)提供了一种从用户空间切换到内核空间的机制。2、内核空间内核直接管理着系统的CPU、内存、输入输出设备、网络设备等外围设备。它分为不同的模块来管理系统的不同操作,例如:文件管理、内存管理、进程管理等等。用户空间的应用程序可以通过调用内核提供的API来访问硬件资源。比如对于文件操作,我们可以调用open()、read()、write()等接口。内核直接管理硬件,独立于硬件。它可以配置然后运行在Intel、ARM、Atemel等芯片架构上。Linux内核的主要子系统根据内核的核心功能,Linux内核提出了五个子系统,分别是:系统调用、进程管理、内存管理、文件系统和网络管理,如下图所示:1.系统调用接口系统调用接口。进程调度子系统通过系统调用接口开放了需要提供给用户空间的接口,同时屏蔽了不需要用户空间程序关注的细节。SCI其实是一个非常有用的函数调用复用和解复用服务。在./linux/kernel中,您将找到SCI实现,并在./linux/arch中找到体系结构相关的部分。2、进程管理(ProcessManagement)用户空间的进程非常多,如何让它们有序的运行,正是进程管理要做的事情。每个进程都需要使用CPU资源(比如CPU、内存),但是CPU资源毕竟是有限的,不可能某个进程一进来就独占资源。因此,流程管理充当管理员的角色,对所有流程进行调度。当需要选择下一个进程运行时,调度算法会选择最需要运行的进程。如果一个进程正在等待其他硬件资源,它就会被挂起。因此,内核通过一系列的调度算法,让每个进程尽可能公平地使用CPU资源。3.内存管理(MemoryManagement)内存管理主要提供对内存资源的访问控制,让各个进程可以安全的共享机器的内存资源。它提供了物理内存和虚拟内存之间的映射关系,所以不同的进程可以使用相同的虚拟内存,而这些相同的虚拟内存可以映射到不同的物理内存。这种映射关系主要是由MMU来完成的。此外,内存管理将为虚拟内存提供一种机制,允许进程使用比系统可用内存更多的内存。未使用的内存会通过文件系统存储在外部非易失性内存中,需要时再调取到内存中。中间。4.虚拟文件系统(VirtualFileSystem)内核将硬盘、输入输出设备、显示设备等具有不同功能的外部设备的具体细节隐藏起来,抽象成统一的文件操作接口(open、关闭、读取、写入等),也就是我们所说的“一切皆文件”。随着计算机技术的发展,历史上出现了各种文件系统,如:FAT、FAT32、NTFS、EXT2、EXT3等。为了兼容这些文件系统,内核将它们抽象成统一的表现形式,这就是虚拟文件系统的概念。虚拟文件系统可分为逻辑文件系统和设备驱动程序。逻辑文件系统是指Linux支持的文件系统,如ext2、fat等,设备驱动是指为各个硬件控制器编写的设备驱动模块。5、网络管理(NetworkStack)网络子系统主要负责管理Linux内核中的各种网络设备,并实现各种网络协议栈,最终实现通过网络连接到其他系统的功能。网络接口提供对各种网络标准协议的访问和对各种网络硬件的支持。网络接口可以分为两部分:网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议,网络设备驱动负责与硬件设备进行通信,每一种可能的硬件设备都有对应的设备驱动。总结以上就是Linux内核的一些非常基础的知识。内核要学的东西还有很多,绝不是一篇可以写的文章。所以对于核心的学习,需要多看书,多看视频,自己动手实践,才能真正掌握。本文经授权转载自公众号“良墟Linux”。世界500强外企Linux开发工程师梁旭,在公众号分享大量Linux干货,欢迎关注!