写点什么

Linux 内核源码结构(2)

  • 2020-04-10
  • 本文字数:1304 字

    阅读完需:约 4 分钟

Linux内核源码结构(2)

在上一期中,我们按照 openEuler 内核的目录结构简要介绍了 openEuler 内核目录中各个子目录的功能,这一期我们将简要介绍 Linux 内核的基本功能和抽象层级。

一、Linux 内核 Kernel Map 简介

Linux 内核的 Kernel Map 从功能上将 Linux 内核划分为不同功能的区域,并展示了不同区域中函数互相之间的调用关系。下图展示了 Linux 2.6.36 版内核的 Kernel Map[1]:



从 Kernel Map 中我们可以看出,操作系统事实上提供了硬件资源的抽象,供用户程序调用,例如在图中操作系统管理的硬件资源有用户外设(如键盘、摄像头和图形卡等)、IO 端口(如 USB、PCI 接口等)、CPU、内存、磁盘和网络设备等。


针对所有硬件资源的使用,在用户态程序看来都是一系列的系统调用,这些系统调用展示在 user space interface 层,例如对于进程来说有 fork、execve 等系统调用,分别用于创建新的进程和运行可执行文件等;而对于文件系统则有 read 和 write 等系统调用,用于读写文件等。Linux 系统可以通过执行软中断将系统控制权交给内核,内核可以执行不同的系统调用再将结果返回[2]。下表列出了 Linux 内核各系统调用的基本功能[2]:



硬件设备之上是设备驱动程序,驱动程序能控制硬件设备上的微控制器,如磁盘的磁盘控制器,来达到控制硬件设备的目的。然而,在高层的系统调用和设备驱动程序之间有着很大的鸿沟,需要用不同级别的软件抽象来实现。以用于管理磁盘的文件系统为例,对用户程序来说,只需要关注一般的读写功能统一函数接口就可以了,而不需要关注具体使用的是什么样的文件系统,例如是 Ext2 还是 Ext4 文件系统,这是因为虚拟文件系统(VFS)对这些不同的文件系统进行了统一的抽象。虚拟文件系统与具体的文件系统的关系如下图所示[3]:



以 Ext2 文件系统的写数据为例,在调用用户态的 write()接口的时候,需要传入文件描述符。内核根据文件描述符找到 file,然后调用函数接口(file->fop->write)将数据写入文件。其中 file 结构体的 fop 指针就是在打开文件的时候通过 inode 初始化的[3]。这个过程如下图所示:



此外,从 Kernel Map 中可以看出,有一些对系统资源抽象的重要功能,如进程/线程的调度,也在 Kernel Map 的中间层实现。注意在 Linux 中,进程和线程都是由 task_struct 数据结构来管理的,它们的区别在于线程间共享虚拟地址空间而进程的内存资源互相独立[4]。内核从靠近硬件的底层到靠近用户程序的高层,抽象程度逐渐提升,实现了提供给用户程序的各种硬件资源抽象和使用它们所需要的公共功能,最终抽象为系统调用供用户程序使用。内核程序一般运行在 CPU 的特权级别,可以访问系统的所有资源,而用户态程序运行在 CPU 的用户级别下,只能访问其进程的资源,这种设计增加了系统的稳定性。

二、结语

本期我们结合 Linux 内核 Kernel Map 简要介绍了 Linux 内核的基本功能和抽象层级,从下一期开始我们将介绍 Linux 内核编程环境。




参考文献


[1]https://makelinux.github.io/kernel/map/


[2]https://baijiahao.baidu.com/s?id=1604601045858159778&wfr=spider&for=pc


[3]https://baijiahao.baidu.com/s?id=1621555464151870974&wfr=spider&for=pc


[4]https://blog.csdn.net/u012218309/article/details/81912074


2020-04-10 18:152107

评论

发布
暂无评论
发现更多内容

黑龙江等保测评公司选择关键维度:服务能力与适配性

等保测评

低代码高效搭建应用,轻松应对多场景需求

引迈信息

企业怎么挑合适的数据集成工具?

谷云科技RestCloud

Apache 数据同步 ETL 数据集成工具 informatica

自控学习历程系列 设备维护经验总结(4)

万里无云万里天

工厂运维

CSS 特异性控制:层叠层 vs. BEM vs. 工具类

qife122

CSS 样式管理

淘宝闪购实时分析黑科技:StarRocks + Paimon撑起秋天第一波奶茶自由

StarRocks

阿里巴巴 StarRocks 物化视图 paimon 实时湖仓架构

CAD二次开发的费用

北京木奇移动技术有限公司

软件外包公司 CAD二次开发 CAD开发

百度智能云「智能集锦」自动生成短剧解说,三步实现专业级素材生产

Baidu AICLOUD

视频云 智能剪辑

智能推荐新纪元:快手生成式技术对系统边界的消融与重建

老周聊架构

AICon

自控学习历程系列 设备维护经验总结(5)

万里无云万里天

工厂运维

哈尔滨二级等保办理全流程:从准备到完成的清晰指引

等保测评

qData 数据中台【开源版】发布 1.0.5 版本,全面提升规则治理、非结构化数据处理与部署体验

千桐科技

qData 开源数据中台 Java数据中台 千数平台 数据治理平台

基于 CoT 协调多 MCP Tool — 智能运维 Redshift

亚马逊云科技 (Amazon Web Services)

HyperMesh几何修复、清理和简化

智造软件

CAE软件 Hypermesh hyperworks

厌倦了日复一日?不如从升级鸿蒙5.1,换个手机主题开始!

最新动态

有了 AI 写代码,还缺什么?资深工程师:28 寸专业编程显示器 + Cursor 告别代码疲劳

鸽芷咕

显示器 明基RD320U 编码体验

LED显示屏校准流程详解

Dylan

LED显示屏 全彩LED显示屏 户外LED显示屏 led显示屏厂家 户内led显示屏

代码可读性与命名艺术:空间布局与命名的核心原则

qife122

代码可读性 命名约定

AI赋能汽车产业跃迁,2025百度云智大会 AI+汽车专题论坛成功举办

科技热闻

基于仓颉编程语言的四则运算解释器开发秘籍

华为云开发者联盟

CodeArts 仓颉 华为开发者空间

构建基于 Spring Boot 的 GaussDB 数据访问应用:数据的增删改查

华为云开发者联盟

springboot Gauss DB 华为开发者空间

基于开发者空间开发平台工作流构建旅行行程规划应用

华为云开发者联盟

人工智能 华为开发者空间 Versatile Agent.

来看低代码平台的“七十二变”

秃头小帅oi

AI Compass前沿速览:Nano Banana玩法教学、AgentScope、Hunyuan-MT-7B、HunyuanWorld-Voyager、AudioStory

汀丶人工智能

mybatis中<if>条件判断带数字的字符串失效问题

刘大猫

人工智能 算法 智慧城市 光电科学 材料科学

哈尔滨二级等保实施重点:安全建设与管理的关键环节

等保测评

基于华为开发者空间项目同步能力实现java电商项目部署

华为云开发者联盟

云主机 华为开发者空间 Gitcode

API管理进入新阶段:iPaaS如何统一接口治理与运维?

谷云科技RestCloud

数据治理 数据传输 API治理 API管理 ipaas

行业分享丨基于SimSolid的大型汽车连续冲压模具刚度分析

Altair RapidMiner

汽车 仿真 CAE SimSolid 无网格仿真

基于华为开发者空间实现花卉识别

华为云开发者联盟

神经网络 CodeArts 华为开发者空间

微信小程序端智能项目工程化实践

vivo互联网技术

微信小程序 AI 前端 端智能

Linux内核源码结构(2)_软件工程_华为云开发者联盟_InfoQ精选文章