计算机原理-Linux内核体系结构

【计算机基础】计算机内核原理 计算机内核(Computer Kernel)是操作系统的核心部分,也被称为操作系统内核。它是操作系统的基本组成部分,负责管理计算机的硬件资源和提供各种系统服务,以支持应用程序的运行。 阅读详情

大家都知道源理君很多期的文章都是关于Linux内核的功能,本着公众号的原则,只讲原理,将复杂的代码转换为通俗易懂的文字,图片。最后呈现给大家。可是源理君一直没有从大框架上系统的给各位梳理Linux内核体系结构。那本文就一个目的,站在山顶向下看。

 

Linux系统的层次框架

从图中我们可以分为两个层次:

  1. 用户空间

  2. 内核空间

在最上层是用户空间,也就是运行应用程序。用户空间的下层就是经常使用的gblic库,它的作用就是封装系统调用接口。不使用gblic库,而大量的直接使用系统调用接口是非常不明智的选择。用户空间运行的进程,他们各自拥有独立的虚拟地址空间,而内核则有单独的地址空间。

 

下层就是内核空间了。Linux内核空间又分为了三层:

  1. 系统调用层;它是属于最上层,它提供了用户空间和内核空间通信的方式。

  2. Linux内核,应该更加确切的说是独立于体系结构的内核代码,这些通用的代码适用于任何体系结构。

  3. 依赖体系结构的代码:这部分我们通常称之为BSP,这些代码主要是为了兼容不同平台或者处理器而引入的。

Linux 内核实现了很多重要的体系结构属性。在或高或低的层次上,内核被划分为多个子系统。Linux 也可以看作是一个整体,因为它会将所有这些基本服务都集成到内核中。这与微内核的体系结构不同,后者会提供一些基本的服务,例如通信、I/O、内存和进程管理,更具体的服务都是插入到微内核层中的。每种内核都有自己的优点,不过这里并不对此进行讨论。
    随着时间的流逝,Linux 内核在内存和 CPU 使用方面具有较高的效率,并且非常稳定。但是对于 Linux 来说,最为有趣的是在这种大小和复杂性的前提下,依然具有良好的可移植性。Linux 编译后可在大量处理器和具有不同体系结构约束和需求的平台上运行。一个例子是 Linux 可以在一个具有内存管理单元(MMU)的处理器上运行,也可以在那些不提供 MMU 的处理器上运行。Linux 内核的 uClinux 移植提供了对非 MMU 的支持。

 

Linux内核体系结构

Linux内核的主要组件有:

  1. 系统调用接口

  2. 进程管理

  3. 内存管理

  4. 虚拟文件系统

  5. 网络堆栈

  6. 设备驱动程序、硬件架构的相关代码。

 

(1)系统调用接口
系统调用层提供了某些机制执行从用户空间到内核的函数调用。它是依赖真个体系结构的。在这一层提供多路复用和多路分解服务。

(2)进程管理
进程管理的核心就是进程的调度。在Linux内核中,进程调度的单元是进程,线程对与调度来说相当于进程概念。内核通过系统调用提供了应用程序编程接口。例如:创建新进程(fork,exec),结束进程(kill, exit),并且提供了控制进程,同步进程和进程间通信的接口。

进程管理还包括处理活跃进程之间共享CPU的需求。内核使用的是CFS完全公平调度器,在我之前文章《Linux完全公平调度器CFS》有详细阐述。

(3)内存管理
内核所管理的另外一个重要资源是内存。为了提高效率,如果由硬件管理虚拟内存,内存是按照所谓的内存页 方式进行管理的(对于大部分体系结构来说都是 4KB)。Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。不过内存管理要管理的可不止 4KB 缓冲区。Linux 提供了对 4KB 缓冲区的抽象,例如 slab 分配器。这种内存管理模式使用 4KB 缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动态调整内存使用。为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。由于这个原因,页面可以移出内存并放入磁盘中。这个过程称为交换,因为页面会被从内存交换到硬盘上。内存管理的源代码可以在 ./linux/mm 中找到。

(4)虚拟文件系统
虚拟文件系统(VFS)是 Linux 内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽象。VFS 在 系统调用 和内核所支持的文件系统之间提供了一个屏蔽层。如下图所示:

 

在 VFS 上面,是对诸如 open、close、read 和 write 之类的函数的一个通用 API 抽象。在 VFS 下面是文件系统抽象,它定义了上层函数的实现方式。它们是给定文件系统(超过 50 个)的插件。文件系统的源代码可以在 ./linux/fs 中找到。文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。这个缓存层通过将数据保留一段时间(或者随即预先读取数据以便在需要是就可用)优化了对物理设备的访问。缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。

(5)网络协议栈
网络协议栈在设计上遵循模拟协议本身的分层体系结构。回想一下,Internet Protocol (IP) 是传输协议(通常称为传输控制协议或 TCP)下面的核心网络层协议。TCP 上面是 socket 层,它是通过系统调用层进行调用的。socket 层是网络子系统的标准 API,它为各种网络协议提供了一个用户接口。从原始帧访问到 IP 协议数据单元(PDU),再到 TCP 和 User Datagram Protocol (UDP),socket 层提供了一种标准化的方法来管理连接,并在各个终点之间移动数据。内核中网络源代码可以在 ./linux/net 中找到。
(6)设备驱动程序
Linux 内核中有大量代码都在设备驱动程序中,它们能够运转特定的硬件设备。Linux 源码树提供了一个驱动程序子目录,这个目录又进一步划分为各种支持设备,例如 Bluetooth、I2C、serial 等。设备驱动程序的代码可以在 ./linux/drivers 中找到。
(7)依赖体系结构的代码
尽管 Linux 很大程度上独立于所运行的体系结构,但是有些元素则必须考虑体系结构才能正常操作并实现更高效率。./linux/arch 子目录定义了内核源代码中依赖于体系结构的部分,其中包含了各种特定于体系结构的子目录(共同组成了 BSP)。对于一个典型的桌面系统来说,使用的是 x86 目录。每个体系结构子目录都包含了很多其他子目录,每个子目录都关注内核中的一个特定方面,例如引导、内核、内存管理等。这些依赖体系结构的代码可以在 ./linux/arch 中找到。

 

Linux 还是一个动态内核,支持动态添加或删除软件组件。被称为动态可加载内核模块,它们可以在引导时根据需要(当前特定设备需要这个模块)或在任何时候由用户插入。

 

参考

源理君参考了这篇文章 https://blog.youkuaiyun.com/zhoudaxia/article/details/7172192 

计算机操作系统内核原理与实现 大学课程 电子科技大学教授讲解windows 内核原理与实现方式有助于帮助新人理解内核操作系统的原理,属于大学生正规课程, 立即下载

相关推荐

别再死记硬背了!用Wireshark抓包实战,5分钟搞懂GRE、L2TP、IPsec的区别

本文通过Wireshark抓包实战,详细解析GRE、L2TP和IPsec三大隧道协议的核心差异与应用场景。从报文结构到配置示例,帮助网络工程师快速掌握这些协议的本质,提升VPN部署与故障排查能力。特别适合准备HCIP认证的工程师深化理解。

weixin_30352645的博客 439

操作系统——内核原理

对于很多计算机从业者来着,提及内核,大家都是一头雾水,感觉涉及到内核的东西就很神秘,本博文主要分享一些对内核的简单基础的知识,帮助大家更好的学习和了解操作系统相关原理。从抽象角度来看,内核就是计算机资源的管理者,当然管理资源是为了让应用使用资源。既然内核是资源的管理者,我们先来看看计算机中有哪些资源,然后通过资源的归纳,就能推导出内核这个大黑盒中应该有什么。在目前的来看,内核设计的演进貌似和软件系统架构演进惊人的相似。宏内核和单体架构一致,微内核和SOA架构一致,而课程里面讲的第三种架构更像是微服务架构。从

庄小焱 4789

在Proteus中用80C51模拟4线SPI点亮OLED屏幕

在Proteus里用80C51模拟4线SPI控制OLED屏幕使其显示图案(汇编实现)。

Connor3093的博客 5002

珍藏多年的计算机内核结构大全笔记,掌握计算机工作原理真不难

1. 冯诺依曼体系 2. CPU的重点知识 3. CPU执行指令的流程 4. 操作系统的核心概念 5. 进程的概念 6. 进程的调度

mgzdwm的博客 3947

51单片机也能玩转GC9A01彩屏?超详细移植指南与性能优化技巧

本文详细介绍了如何在51单片机上高效驱动GC9A01彩屏,包括硬件连接优化、SPI模拟驱动、内存管理策略及高级刷新技术。通过分段缓冲、颜色压缩和差异化刷新等技巧,显著提升显示性能,使51单片机也能流畅运行240x240分辨率的彩色TFT屏幕。

hp777的博客 189

封装POD与PinMap文件总结学习-20250516

芯片封装外形图(POD)和PinMap是芯片设计和制造中的关键文档。POD详细描述了芯片的物理尺寸、引脚布局和封装类型,而PinMap则提供了芯片封装上各个引脚的位置、名称和功能的详细信息。这些文档在芯片设计、制造和应用过程中起到“地图”的作用,帮助设计人员理解芯片的物理和电气特性。在PCB设计中,POD用于确定socket的footprint和pogo的选型,而PinMap则用于器件的合理布局和布线。这些信息对于确保芯片的正确安装和功能至关重要。

歌颂苦难的行为是无耻的; 2365

Linux系统认知——Linux内核认知

linux内核认知

weixin_54794458的博客 993

ABAP Development Tool for Visual Studio Code 里使用 MCP server

本文讨论了SAP ABAP开发环境中,除GitHub Copilot外,其他可作为MCP客户端接入ABAP开发工具(MCP server)的编码代理(coding agent)。GitHub Copilot是官方确认可用的工具,而其他代理如Claude Code、Cursor、Windsurf Cascade、Cline和Continue虽然理论上支持MCP协议,但要实际用于ABAP开发还需满足两个关键条件:兼容MCP协议,并能处理VS Code虚拟工作区文件系统。这些工具需要单独验证是否支持ABAP开发工

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 255

《Linux内核 》MOOC 课程

姬梦馨 原创微博 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 学习笔记 一:什么是冯诺依曼体系结构? 就是指存储程序计算机。 两个层面:1.从硬件的角度上来说: ...

JAYA1111的博客 444

游戏大厂如何解析引擎技术

本文系统解析了游戏大厂如何评估和定制游戏引擎。游戏引擎作为游戏开发的核心基础,大厂会从性能、跨平台支持、渲染能力、网络模块等8个维度进行技术解析,通过文档查勘、源码阅读、Demo测试等7个步骤深度评估。解析后通常有三种决策:直接使用、深度定制或自研重构。文章以腾讯、网易、米哈游等为例,展示了不同厂商的引擎定制策略,并分析了技术解析面临的挑战和未来趋势。最终指出,体系化的引擎技术解析是打造高质量游戏的关键,需要持续的技术投入和团队协作。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 535

在 SAP ECC 中定义 ledger 时遇到 “Define exactly one leading ledger“(消息号 FAGL_LEDGER_CUST012)的错误

摘要:SAP系统要求必须且只能定义一个主导分类账(Leading Ledger)。当出现错误消息FAGL_LEDGER_CUST012时,需通过事务码FINSC_LEDGER或SPRO路径检查分类账配置,确保仅有一个分类账被标记为"LeadingLedger",其余设为"Non-leadingLedger"。主导分类账是SAP默认用于标准报表的核心分类账,修改配置需谨慎以免影响已有数据。若问题未解决,建议检查未完成配置或查阅SAP Notes获取解决方案。

金牌架构师 802

计算机系统架构 Linux(1-12)

介绍计算机系统架构的基本知识,包括计算机组成、发展历史、CPU、内存、硬盘、输入输出设备、GPU、声卡等各方面内容。介绍了程序运行原理和操作系统的综述,包括个人电脑操作系统、服务器操作系统以及对 Linux 系统的简述

CH0ico's Blog 1200

BLDC控制实验:方波、霍尔、开环、定速、正转

本文记录博主学习BLDC控制软件的过程。 文章目录1 概述2 软件架构及工具链2.1 软件架构2.2 工具链3 底层代码生成3.1 时钟配置3.2 按键输入配置 1 概述 本文是博主第一次做BLDC控制实验,目的仅仅是写代码让BLDC转起来,而暂时不考虑其他复杂的需求。 控制的方法是比较简单的六步换相法。利用电机内部的霍尔传感器,通过参考电机厂家给出的二二导通换相表,生成方波来控制电机。第一次实验为了简化需求,只考虑开环、定速、正转的情况: 开环:不考虑速度反馈,直接给PWM让电机转起来; 定速:不考虑速

u013288925的博客 1万+

Linux内核分析第一周——计算机是如何工作的

Linux内核分析第一周——计算机是如何工作的 李雪琦 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 冯诺依曼体系结构结构,就是存储程序计算机。 1.数字计算机的数制采用二进制; 2.计算机通常是顺序执行一条一条的指令,如果有必要就通过寄存器跳转到特定的地址,再执行,然后通...

weixin_30564785的博客 86

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ARM体系结构(一)

ARM体系结构存储模型:32位架构、小端字节序、字节对齐等工作模式:arm为8个基本的工作模式(User、FIQ、IRQ、SVC、Abort、Undef、System、Monitor)寄存器:CPU内部存储单元,使用名字访问。异常机制:异常机制、中断处理、中断向量表等流水线:借助指令重叠执行提高效率…指令集:处理器所能识别的指令的集合接口技术GPIO:General Purpose Input Output,通用输入输出。输入输出,就是说既能当输入口使用,又能当输出口使用。

m0_73492050的博客 169

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Linux内核学习—基础知识(一)

一.存储程序计算机工作原理: 冯诺依曼体系结构:即存储程序计算机;  从物理结构上来描述: CPU中的IP寄存器,通过总线获取内存中CS(代码段)的一条指令来执行;IP自增1;取下一条指令; ABI:程序二进制接口;程序指令与CPU的接口; 在X86,32位计算机上,EIP总是指向一条即将执行的指令;EIP可以自增1;该1不是指字节或者32个字节;是指一条指令;每条指令占的存储空间可能不同

William的blog 920

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

如何快速掌握底层编程:lowlevelprogramming-university完整学习指南

底层编程是接近计算机硬件的开发领域,涉及汇编、C语言和系统架构等核心知识。lowlevelprogramming-university项目提供了从理论到实践的完整学习路径,帮助初学者系统掌握底层开发技能,成为Linux内核工程师或嵌入式系统专家。 ## 📚 底层编程核心理论基础 底层开发需要两大理论支柱:**计算机体系结构**与**操作系统原理**。建议通过在线课程建立知识框架,重点理解CP

gitblog_00727的博客 682

免费跨平台手写笔记与 PDF 批注工具 Xournal++:新手十分钟上手的完整指南

Xournal++ 是一款免费开源的跨平台手写笔记软件,用 C++ 开发,可在 Windows、macOS、Linux 三端运行,核心能力是手写输入、PDF 批注、图层管理和录音同步。笔记保存在开放的 .xopp 文件中,跨设备迁移不受软件锁定。 [![Xournal++ 主界面:手写笔记、工具栏与页面预览](https://raw.gitcode.com/gh_mirrors/xo/xourn

gitblog_00586的博客 865

x86从实模式到保护模式 pdf_Linux内核浅析-X86体系结构

预想了解Linux内核的一些原理,必先了解X86体系结构。x86体系基本等同于cpu的使用说明书,Linux的底层就是cpu,如果不了解底层提供的功能点,很多实现方式都搞不懂。就好像我们做一个需求,不知道底层有哪些接口可用,那需求做起来就太困难了。x86架构起源于intel8086处理器,是intel公司70年代生产的16位处理器,推出前几年都不温不火,直到找到自己的业务方:ibm pc。ibm ...

weixin_39970668的博客 211

openEuler 内核解读(三):分层递进的基础知识

基础知识├── Linux 系统原理(进程/内存/文件/网络)├── C 语言(指针、宏、内存)├── 计算机体系结构(CPU/中断/ARM64)└── 工具链(gcc, git, perf, qemu)↓Linux 内核通识├── 五大子系统概览├── 内核配置与编译└── /proc /sys 调试接口↓openEuler 特色├── 鲲鹏 ARM64 优化└── 安全与实时性增强只要你具备Linux 基础 + C 语言 + 求知欲,就可以开始。

软件行业技术文化交流。 790

Linux内核分析-计算机汇编程序分析

黄仁义 原创作品 转载请注明出处 《Linux内核分析》MOOC课程:在线课程链接http://mooc.study.163.com/course/USTC-1000029000  第一讲 计算机是如何工作的? 课堂笔记   @2015.03 ------------------------------------------------------分割线-------

ChrisHuang的博客 748

2019-2020-20199316《Linux内核原理与分析》第三周作业

操作系统是如何工作的 (一)计算机的三大法宝 存储程序计算机 函数调用堆栈机制 中断机制 (二)堆栈 (1)堆栈相关寄存器 ESP:堆栈指针 EBP:基址指针,在c语言中用作记录当前函数调用基址。 对于x86体系结构来讲,堆栈空间是从高地址向低地址增长的。 (2)堆栈操作 push:栈顶地址减少4个字节(32位),然后将操作数亚茹栈顶存储单元; pop:栈顶地址增加4个字节(...

a117567702的博客 210

Linux操作系统与冯·诺依曼体系结构详解

冯·诺依曼体系结构作为现代计算机的基础架构,其核心思想在Linux操作系统中得到了充分的体现和发展。Linux通过其强大的内核功能,实现了对计算机硬件资源的高效管理,并通过各种优化技术,缓解了冯·诺依曼瓶颈带来的性能限制。理解冯·诺依曼体系结构与Linux操作系统的关系,有助于我们更深入地掌握计算机系统的工作原理,为系统编程和性能优化提供理论基础。同时,Linux作为一个开源操作系统,也为我们提供了研究和实践计算机科学理论的绝佳平台。

m0_74319933的博客 1074

AssetRipper:三步完成Unity资源提取

如果你的任务是Unity资源提取——把一款已发布的游戏里的模型、贴图、声音、脚本变回可使用的文件——AssetRipper 能直接处理游戏文件和资产包(打包后的资源文件),不需要拿到原始工程。无论你是检查构建内容的游戏开发者、迁移素材的技术美术,还是研究游戏的逆向工程师,下面的流程都一样。 ## 📦 你能从游戏里拿走什么 AssetRipper 的产出基本覆盖 Unity 工程的几类主要资源

gitblog_00062的博客 321

如何成为底层程序员:lowlevelprogramming-university 完整指南

想要成为一名底层程序员吗?lowlevelprogramming-university 项目为你提供了从零开始学习底层编程的完整路线图。底层编程是指接近硬件层面的编程,使用 C 语言或汇编等低级语言,涵盖计算机体系结构、操作系统内核、设备驱动等核心领域。本文将详细介绍如何使用 lowlevelprogramming-university 资源,系统学习底层编程技术,帮助你从新手成长为专业的底层开发

gitblog_00025的博客 619
上一篇: 计算机原理-Linux 网络I/O模型
下一篇: 计算机原理-CPU到底有多快?内存:是我的250倍
shankusu2017
博客等级 码龄15年 155粉丝 155原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值