【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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:151690

评论

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

营销SaaS SemRush 2.9 亿美元年收入的五个经营数据分析

B Impact

DevOps|从腾讯TEG CDC解散聊技术中台价值和建设

laofo

DevOps 研发效能 技术中台 组织建设

[杂谈] pdfbox 2.0.28 文字水印移除操作(Acrobat/WPS)

alexgaoyh

Java PDF remove pdfbox text watermarker

Flink-Learning 实战营在升级!更多精美好礼等你来!

Apache Flink

大数据 flink 实时计算

复旦大学附属中山医院:利用明道云进行风险管理及器械溯源的实践案例分享

明道云

复杂的舆论场,企业该如何保障内容审核安全?

平平无奇爱好科技

数据挖掘18大算法实现以及其他相关经典DM算法:决策分类,聚类,链接挖掘,关联挖掘,模式挖掘。图算法,搜索算法等

汀丶人工智能

人工智能 数据挖掘 机器学习 深度学习 决策树

追击策略?微软云服务器业务2022年规模少于亚马逊AWS一半

B Impact

高性能存储SIG月度动态:io_uring支持nvme直通,DSMS完成开发测试

OpenAnolis小助手

开源 io_uring 高性能存储 anck 龙蜥sig

Spring Boot中如何优雅地实现异步调用?

快乐非自愿限量之名

前端 spring-boot

华为云视频封面&摘要服务:让视频内容更具吸引力

平平无奇爱好科技

自从前端用上了低代码,开发速度直接起飞

伤感汤姆布利柏

MQTT 性能测试入门:常见测试场景和指标

EMQ映云科技

物联网 性能测试 mqtt

人工智能泡沫:揭秘低代码开发平台的革命性崛起

快乐非自愿限量之名

人工智能 低代码 数智化 ChatGPT

算法复杂度介绍

宁静知行者

算法

5年经验,不会Java性能优化,面试原地翻车

程序员小毕

程序员 后端 JVM java面试 Java性能优化

国产软件崛起,用友引领企业数智化转型新风向

用友BIP

国产替代

低代码云里雾里,如何择优选择,且看这里

高端章鱼哥

低代码 低代码开发 JNPF

通过容器化实现前端微服务化架构设计

FinFish

小程序容器 小程序化 小程序技术 前端服务化

和鲸科技 ModelWhale 入选北京市人工智能行业赋能典型案例(2023)丨2023全球数字经济大会人工智能高峰论坛

ModelWhale

人工智能 AI 数字化 大模型 论坛

第十八届研电赛“安谋科技杯”上海赛区决赛成功举办

脑极体

AI

蓬勃发展的数智革命:低代码开发平台开启制造业繁荣新纪元!

EquatorCoco

人工智能 低代码 制造业 数智转型

​瓶颈期别挣扎了,低代码或许可以帮到你

伤感汤姆布利柏

华为开发者大会2023(Cloud):华为云邀您共话开源

华为云开源

开源 云原生 HDC.Cloud

华为云图像识别Image:技术服务提供商的首选

平平无奇爱好科技

想要快速上线网站?香港虚拟主机助你一臂之力!

一只扑棱蛾子

香港虚拟主机

华为云CodeArts Artifact 5大特性,揭秘大型企业制品管理面纱

华为云PaaS服务小智

云计算 华为云 华为开发者大会2023

创新引擎加速数字时代:揭秘JNPF平台与云计算的完美共舞!

不在线第一只蜗牛

云计算 低代码 数字化

多项目管理难在哪,多项目同时进行该如何做好进度管理?

优秀

项目管理 项目进度管理

基于低代码平台可视化搭建应用

这我可不懂

低代码 JNPF 可视化搭建

华为云语音交互服务SIS——与人打交道的智慧软件,非常值得一试

平平无奇爱好科技

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