Linux源码学习笔记01-Linux内核源码结构

news2024/11/25 6:38:22

Linux内核特性

是一个类Unix操作系统,但不是简化的Unix;不仅继承了Unix的特征,还有其他特性。

  • Linux内核的组织形式:整体式的结构,方便每个领域的开发人员参与开发;
  • Linux进程调度方式简单高效:采用动态优先级的调度方式,软中断保证内核进程的高效执行;
  • Linux支持内核线程(守护进程):内核线程在后台运行,不需要中端和Shell;
  • Linux内核支持多种平台的虚拟内存管理:和硬件平台紧密相关,为了保证通用性,统一接口,移植简单;
  • Linux内核另一个独具的特色是虚拟文件系统(VFS,Virtual File System):不仅可以为逻辑文件系统提供标准的文件接口,还可以为硬件设备提供了统一的标准接口。(硬件是特殊的文件);
  • Linux的模块机制是的内核保持独立而且容易扩充:有利于研发增加新设备和业务;
  • 增加系统调用主要是满足特殊的需求:允许设计自己的系统调用,加入到内核模块中;
  • Linux内核网络模块面向对象的设计思想:能够使得内核支持多种协议,多种网卡驱动程序等等。

为什么要学Linux内核

  1. 提升软件水平,研发出高水平软件;
  2. 开发自己的操作系统;
  3. 有助于计算机科学领域研究;
  4. Linux系统性能优化。

Linux操作系统结构

Linux内核在系统中的位置

  • 应用程序:运行在操作系统上的一个进程;
  • 系统调用接口(System call interface):由诺干指令构成的过程,实现特定的服务。但是与一般的过程不同:运行在内核态,一般过程运行在用户态;
  • Linux Kernel:实际就是抽象的资源操作到具体硬件操作的接口;
  • 硬件:内核赖以生存的条件。

Linux内核子系统之间关系

Linux内核五大主要子系统关系图:

  • 进程调度:控制进程对CPU的访问操作。Linux使用优先级调度算法来选择进程;
  • 内存管理(MM):允许多个进程共享主存区域;
  • 虚拟文件系统(VFS):设备驱动程序,逻辑文件系统(ext2、ext3、ext4…);
  • 网络管理:提供对各种网络标准协议的存取和网络硬件支持;
  • 进程间通信:支持进程之间各种通信机制。

Linux内核源码组织

Linux内核源码结构(5.6.18)

  • arch:不同平台体系结构的相关代码;
  • block:设备驱动;
  • certs:与认证和签名相关的代码;
  • crypto:内核常用的压缩算法,加密算法源代码;
  • Documentation:描述模块功能和协议规范的代码;
  • drivers:驱动程序(USB总线驱动程序。PCI总线,显卡,网卡);
  • fs:虚拟文件系统VFS代码;
  • include:内核源码依赖的绝大部分头文件;
  • init:内核初始化代码,直接关联到内存的各个组件入口;
  • ipc:进程间通信的实现,比如:信号量,构想内存等等;
  • kernel:内核核心代码,包括进程管理,IRQ等等;
  • lib:C标准库的子集
  • LICenSES:Linux内核根据Licenses/perferred/GPL-2.0中提供GNU通用公共许可版本
  • mm:内存管理的相关实现操作;
  • net:网络协议代码,比如TCP、Wifi、IPv6等等;
  • samples:内核实例代码;
  • scripts:编译和配置内核所需要的脚本;
  • security:内核安全模型相关代码;
  • sound:声卡驱动源码;
  • tools:与内核交互;
  • usr:用户打包盒压缩内核实现的源码;
  • virt:kvm虚拟化目录相关支持实现。

Linux内核目录下文件

  • .clang-format:开发团队合作时要注意的代码格式化;
  • COPYING:许可和授权信息;
  • CREDITS:贡献者列表;
  • Kbuild:内核设定脚本;
  • Kconfig:开发人员配置内核的时候用到的参数
  • MAINTAINERS:目前维护开发人员列表;
  • Makefile:编译内核主要文件;
  • README:编译内核信息。

本人站点欢迎友好交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1830105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

结构设计模式 - 桥接设计模式 - JAVA

桥接设计模式 一. 介绍二. 桥接模式示例2.1 定义实现部分和具体实现2.2 定义抽象部分和细化抽象部分2.3 测试2.4 解释 三. 结论 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 一.…

串口触摸屏分割字符串

分割字符串的方法1、split2、indexOf()3、substr(start,length) 分割字符串的方法 1、split:将一个字符串分割为子字符串,然后将结果作为字符串数组返回。 2、indexOf() :返回某个指定的字符串值在字符串中首次出现的位置(从左向右…

Vue55-TodoList案例-本地存储

一、TodoList案例-本地存储 此时,修改对象里面的属性,watch监视不到! 需要深度监视,就不能用简写形式! 二、jeecg-boot中的本地存储 jeecg-boot中,浏览器的本地存储,存储的是token!…

Vue56-组件的自定义事件

一、什么是自定义事件 二、子组件—【传值】—>父组件 2-1、prop属性 2-2、自定义事件 v-on在谁身上,就给谁绑定事件! 给谁绑定的事件,想触发就找谁! 2-3、prop属性VS自定义属性 2-4、简写形式 2-5、ref属性实现 加了ref属性…

Matlab自学笔记三十一:结构数组的创建、索引和预分配内存

1.概念 结构(structure array)是一种具有容器特性的数据类型,它使用称为字段的数据容器对相关数据进行分组,每个字段可以包含任何类型或大小的数据,所有元素都具有相同数量的字段和相同的字段名称。(与元胞…

【安装笔记-20240616-Windows-Gpg4win 证书管理器】

安装笔记-系列文章目录 安装笔记-20240616-Windows-Gpg4win 证书管理器 文章目录 安装笔记-系列文章目录安装笔记-20240616-Windows-Gpg4win 证书管理器 前言一、软件介绍名称:Gpg4win主页官方介绍 二、安装步骤测试版本:Gpg4win 4.3.1下载链接安装界面…

深入了解RSA加密算法

目录 前言 一、什么是RSA? 二、RSA加密的基本概念 1.非对称加密 2.密钥生成 3.加密和解密 三、RSA加密的工作原理 四、RSA的应用场景 五、RSA加密解密的实现 六、RSA算法的局限性及改进措施 前言 在当今的数字化时代,信息的安全性成为了人们关注…

课设--学生成绩管理系统(三)

欢迎来到 Papicatch的博客 文章目录 🍉报告目的 🍉总体设计 🍈 模块处理逻辑 🍉数据库设计 🍈总览表 🍈表设计 🍍管理员信息表 🍍课程基本信息表 🍍课程扩展信息…

浙大版PTA Python程序设计 题目与知识点整理(综合版)

目录 第一章 一、高级语言程序的执行方式 二、变量赋值与内存地址 三、字符编码 3.1 Unicode 3.2 ASCII(American Standard Code for Information Interchange) 四、编程语言分类按照编程范式分类 4.1 面向过程语言 4.2 面向对象语言 五、原码…

LabVIEW电子类实验虚拟仿真系统

开发了基于LabVIEW开发的电子类实验虚拟仿真实验系统。该系统通过图形化编程方式,实现了复杂电子实验操作的虚拟化,不仅提高了学生的操作熟练度和学习兴趣,而且通过智能评价模块提供即时反馈,促进教学和学习的互动。 项目背景 在…

飞书API 2-1:如何通过 API 创建文件夹?

本文探讨如何通过飞书的 API 来创建文件夹。通过 API 创建的文件夹,一般是放在共享空间,如果要放在个人空间,建议手动创建。 查看 API 文档 API 路径,可在飞书开放平台的服务端 API,依次查找云文档>云空间>文件…

多种方案图文并茂分分钟教你解决Kubernetes(k8s)容器安全问题(不断更新中)

文章目录 Kubernetes(k8s)Secrets in clear text environment variables 明文中的秘密环境变量问题详解 解决方案一STEP1: 创建Kubernetes Secret - 编写一个yaml文件STEP2: 部署执行上述yamlSTEP3: 将Secret作为卷挂载到Pod中-在项目部署K8S.yaml中挂载…

【Perl】与【Excel】

引言 perl脚本语言对于文本的处理、转换很强大。对于一些信息量庞大的文本文件,看起来不直观,可以将信息提取至excel表格中,增加数据分析的可视化。perl语言的cpan提供了大量模块。对于excel文件的操作主要用到模块: Spreadshee…

1970python高校教室管理系统mysql数据库Django框架bootstrap布局计算机软件工程网页

一、源码特点 python Django 高校教室管理系统是一套完善的web设计系统mysql数据库 ,对理解python编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 python Django 高校教室管理系统 开发环境pycharm mys…

2.华为配置静态路由

通过配置静态路由让PC1和PC2互通 AR1 [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 192.168.1.254 24 [Huawei]int g0/0/1 [Huawei-GigabitEthernet0/0/1]ip add 1.1.1.1 24 [Huawei]ip route-static 192.168.2.0 24 1.1.1.2AR2 [Huawei]int g0/0/0 [Huawei-Gig…

ARM Linux 设备树详细介绍(2)共二篇

承接上文,第一篇 3. Device&Tree 引发的 BSP 和驱动变更 有了 Device Tree 后,大量的板级信息都不再需要,譬如过去经常在 arch/arm/plat-xxx 和 arch/arm/mach-xxx 实施的如下事情: 1. 注册 platform_device,绑定 …

《人生海海》读后感

麦家是写谍战的高手,《暗算》《风声》等等作品被搬上荧屏后,掀起了一阵一阵的收视狂潮。麦家声名远扬我自然是知道的,然而我对谍战似乎总是提不起兴趣,因此从来没有拜读过他的作品。这几天无聊时在网上找找看看,发现了…

从xxl-job源码中学习Netty的使用

1. 启动与Spring实例化 com.xxl.job.core.executor.impl.XxlJobSpringExecutor.java类 继承SmartInitializingSingleton 类,在afterSingletonsInstantiated 实例化后方法中 调用initJobHandlerMethodRepository 把所有的xxljob任务管理起来; private…

ARM Linux 设备树详细介绍(1)

1. ARM&Device&Tree 起源 Linus Torvalds 在 2011 年 3 月 17 日的 ARM Linux 邮件列表宣称“this whole ARM thing is a f*cking pain in the ass”,引发 ARM Linux 社区的地震,随后 ARM 社区进行了一系列 的重大修正。 在过去的 ARM Linux 中&…

电子电气架构 --- 智能座舱功能应用

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…