写点什么

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

评论

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

第七模块总结

张靖

#架构实战营

王者荣耀商城异地多活架构设计

张靖

#架构实战营

揭开神秘面纱,如何组织一次分布式压测

博睿数据

Python爬虫实战,pymysql模块,Python实现抓取音乐评论

Java全栈架构师

Python MySQL 数据库 程序员 面试

三年磨一剑,高德体验优化总结

阿里巴巴终端技术

ios android 性能优化 移动开发 客户端

如何写好代码?

阿里技术

技术管理 技术人生 内容合集

多行内容超出...显示的终极解决方案

CRMEB

如何优雅的关闭 Java 线程池

淡泊明志、宁静致远

线程池

恒源云(GPUSHARE)_文本数据扩增时,哪些单词 (不) 应该被选择?

恒源云

深度学习 语音识别 语义

架构实战 - 模块七

唐敏

架构实战营

一周信创舆情观察(12.13~12.19)

统小信uos

EMQ X 企业版 v4.4.0 发布:新增三项集成支持、增强异常诊断能力

EMQ映云科技

云原生 物联网 IoT mqtt 规则引擎

一种播放远程TS格式媒体文件的新方案

Changing Lin

12月日更

2021年SASE融合战略路线图(一)

devpoint

SD-WAN sase 12月日更

技术三板斧:关于技术规划、管理、架构的思考

阿里技术

技术管理 技术人生 内容合集

关于写文章的一点经验

阿里技术

技术管理 技术人生 内容合集

高质量的缺陷分析:让自己少写 bug

阿里技术

技术管理 技术人生 内容合集

百度API接口智能化测试探索与实践

百度开发者中心

自动化测试 API测试 智能化测试

【12月日更】浅谈Golang两种线程安全的map

小梁编程汇

golang 缓存 高性能 并发 多线程安全

PMI 的野望

Franklin 许峰

DevOps 敏捷 Lean 规范敏捷 PMI

安装TortoiseGit教程 手把手教学

Z.

git 工具 安装 Tortoisegit

Flutter 高性能、多功能的全场景滚动容器原理与实践

阿里巴巴终端技术

flutter 移动开发 客户端

【浅谈黑客与学习思路】黑客的种类和行为,初学者应该怎样学习

H

黑客 网络安全 信息安全

阿里技术 技术人成长| 内容合集

阿里技术

技术管理 技术人生 技术专题合集

联想企业科技集团与京东耀弘签订战略合作协议 实现合作发展新跨越

科技大数据

让“美”势不可挡,DataPipeline助力全球知名化妆品企业数字化营销再提速

DataPipeline数见科技

大数据 中间件 数据融合 数据迁移 数据管理

Flutter 应用程序中使用 GridTile 小部件

坚果

28天写作 12月日更

热门招聘丨 XTransfer史上最全产品技术岗位公开招聘

XTransfer技术

产品 技术 招聘 XTransfer

技术人如何自我成长?

阿里技术

技术管理 技术人生 内容合集

计算机网络体系结构

淡泊明志、宁静致远

TCP 网络结构

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