12_Linux内核结构

Linux内核结构

1.内核的主要组成部分

  • Linux 内核主要的 5 个部分:进程调度、内存管理、虚拟文件系统、网络接口、进程通信。在系统移植的时候,它们是内核的基本元素,这 5 个部分之间的关系,如图所示:

    image-20240317103615156

    • 进程调度(管理):进程是在计算机系统中资源分配的最小单元,而进程调度就是负责控制进程对 CPU 的访问。 内核负责创建和销毁进程, 而且由调度程序采取合适的调度策略,实现进程间的合理且实时的处理器资源的共享,从而实现多个进程在一个或多个处理器上的抽象。内核还负责实现不同进程间、进程和其他部件之间的通信。
    • 内存管理:内存是计算机系统中最主要的资源,内存管理就是负责多个进程安全地共享主内存区域,为每个进程在有限的物理资源上建立一个虚拟地址空间。内存管理部分代码可分为硬件无关部分和硬件有关部分:硬件无关部分实现进程和内存之间的地址映射等功能;硬件有关部分实现不同体系结构上的内存管理相关功能并为内存管理提供虚拟接口。
    • 虚拟文件系统(VFS):在 Linux 系统中的任何一个概念几乎都可以看做一个文件,虚拟文件系统隐藏了不同类型硬件的具体细节,为所有的硬件设备提供了一个标准的接口 ,从而在整个系统的几乎所有机制中使用文件的抽象。VFS支持数十种不同类型的文件系统,如 ext3、ext4等。
    • 设备管理:Linux 系统中几乎每个系统操作最终都映射到一个或多个物理设备上。 除了处理器、内存等少数的硬件资源之外,任何一种设备控制操作都由设备特定的驱动代码来进行。内核中必须提供系统中可能要操作的每一种外设的驱动。
    • 网络管理:内核支持各种网络标准协议和网络设备。网络管理部分可分为网络协议栈和网络设备驱动程序。网络协议栈负责实现每种可能的网络传输协议(TCP/IP 协议等),网络设备驱动程序负责与各种网络硬件设备或虚拟设备进行通信。
  • 五部分间的关系

    • 进程调度与内存管理:二者互相依赖,在多道程序环境下,程序要运行必须为之创建进程,而创建进程首先就是要将程序和数据装入内存。另外,内存管理子系统也存在进程的挂起和恢复过程。
    • 进程间通信与内存管理:进程间通信子系统要依赖内存管理支持共享内存通信机制,通过对共同的内存区域进行操作来达到通信的目的。
    • 虚拟文件系统与网络接口:虚拟文件系统通过依赖网络接口支持网络文件系统(NFS),也通过依赖内存管理支持 RAMDISK 设备。
    • 内存管理与虚拟文件系统:内存管理利用虚拟文件系统支持交换,交换进程定期地由调度程序调度,这也是内存管理依赖于进程调度的唯一原因。当一个进程存取的内存映射被换出时,内存管理将会向文件系统发出请求,同时,挂起当前正在运行的进程。

2.内核源码目录结构

  • Linux 内核代码以源码树的形式存放,如果在安装系统的时候已经安装了源码树,其源码树就在/usr/src/linux 下,源码树结构如图所示:

    ![image-20240317105826865](https://img-blog.csdnimg.cn/img_convert/6e8aeb8a60c3c8e70d8b3925a24c1a1b.png)
    
  • 目录功能介绍

    内核源码的顶层有许多子目录,分别组织存放各种内核子系统或者文件。具体的目录说明如下表所示:

    目录作用
    arch包括了体系结构相关的代码,每一个子目录都代表一种支持的体系结构,如 arch/i386、arch/arm、arch/ppc
    crypto常用加密和散列算法(如 AES、SHA 等),以及一些压缩和 CRC 校验算法
    drivers放置系统所有的设备驱动程序(包括硬件相关和硬件无关),如 drivers/char、drivers/block等
    documentation/内核文档
    fs列出了Linux 支持的所有文件系统,目前 Linux 支持 ext3、 vfat、 ntfs、 yaffs2、ramfs、 cramfs 和 romfs 等多种文件系统。在嵌入式系统中常用的闪存设备的文件系统有cramfs、 romfs、 ramfs、 jffs2、 yaffs 等文件系统。
    include包括内核编译时所需要的大部分头文件。与平台无关的头文件在include/linux 子目录下, include/scsi 目录则是有关 scsi 设备的头文件目录,与 arm 相关的头文件在 include/asm-arm 子目录下
    init包含核心的初始化代码(注意,不是系统的引导代码)。它包含两个文件main.c 和 version.c,这是研究核心如何工作的一个非常好的起点。
    ipc包含核心进程间的通信代码。 Linux 下进程间通信机制主要包括管道、 信号、消息队列、共享内存、信号量、套接口。
    kernelLinux 内核管理的核心代码,与处理器结构相关代码都放在 arch/*/kernel目录下
    lib含了核心的库代码,如 zlib、crc32。与处理器结构相关的库代码被放在 arch/*/lib/目录下。
    mm包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/mm 目录下。
    net包括Linux核心的网络部分代码, 其每个子目录存放一个具体的网络协议或者网络模型代码。
    sound声音驱动的支持
    scripts包含用于配置核心的脚本文件(内部或者外部使用的脚本)
    usr用户的代码
                                             |
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

V-JEPA模型,非LLM另外的选择,AGI的未来:迈向Yann LeCun先进机器智能(AMI)愿景的下一步

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

小怂爱水洼DFS

分析: 非常明显的搜索问题,当时我在写的时候遇到了两个问题,就一直没过。 1.忘记判断临界条件,x,t不能越界的问题; 2.最后有两个案例一直不能过,就是因为我用的int型的接受结果范围太小了&#…

前端学习从0到1第一天:初见html

阅读须知: 探索者安全团队技术文章仅供参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作,由于传播、利用本公众号所提供的技术和信息而造成的任何直接或者间接的后果及损失,均由使用者 本人负责,作者不为此承担任何责任,如…

【C++中日期类的实现】

一路,一路,一路从泥泞到风景............................................................................................... 目录 前言 一、【什么是日期类】 二、【代码实现】 1.【Date.h】部分: 2.【Date.cpp】部分:…

关于ffmpeg height not divisible by 2的错误

在我们线上视频生产过程中,我们用ffmpeg对视频做了resize,讲原有的分辨率resize到1280p,使用了参数 -vf "scale1280:-1",作用是将原始视频宽度缩放成1280,-1是指高度等比例缩放。 之前一直运行的好好的&…

储能技术发展

一、政策背景 “十三五”是我国储能产业化发展的起点。自“十四五”之后,各类储能支持政策更是以极快的速度不断更新完善。 2023年1月17日,工业和信息化部等六部门发布了《关于推动能源电子产业发展的指导意见》,其中明确提出要在2025年实现…

吴恩达prompt 笔记2:迭代提示开发(Iterative Prompt Develelopment)

1 前言 我们很难在初次尝试中就设计出最佳的提示,因此需要根据ChatGPT的反馈进行分析,分析输出具体在哪里不符合期望,然后不断思考和优化提示。如果有条件的话,最好是利用批量的样本来改善提示,这样可以对你的优化结…

代码随想录阅读笔记-哈希表【三数之和】

题目 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a b c 0 ?请你找出所有满足条件且不重复的三元组。 注意: 答案中不可以包含重复的三元组。 示例: 给定数…

Python之Web开发中级教程----搭建虚拟环境

Python之Web开发中级教程----搭建Web框架二 搭建虚拟环境 虚拟环境的作用 虚拟环境可以搭建独立的python运行环境, 使得单个项目的运行环境与其它项目互不影响. 搭建虚拟环境 (1)安装 sudo pip install virtualenv sudo pip install virtualenvwra…

一起学数据分析_2

写在前面:代码运行环境为jupyter,如果结果显示不出来的地方就加一个print()函数。 一、数据基本处理 缺失值处理: import numpy as np import pandas as pd#加载数据train.csv df pd.read_csv(train_chinese.csv) df.head()# 查看数据基本…

Vue3-响应式基础:单文件和组合式文件

单文件&#xff1a;html <!DOCTYPE html> <html> <head><title>响应式基础</title> </head> <body><div id"app" ><!-- dynamic parameter:同样在指令参数上也可以使用一个 JavaScript 表达式&#xff0c;需要包…

简易版 RPC 框架实现 1.0 -http实现

RPC 是“远程过程调用&#xff08;Remote Procedure Call&#xff09;”的缩写形式&#xff0c;比较通俗的解释是&#xff1a;像本地方法调用一样调用远程的服务。虽然 RPC 的定义非常简单&#xff0c;但是相对完整的、通用的 RPC 框架涉及很多方面的内容&#xff0c;例如注册发…

离散时间傅里叶变换和离散傅里叶变换

离散时间傅里叶变换和离散傅里叶变换 { X ( k ) DFT [ x ( n ) ] ∑ n 0 N − 1 x ( n ) W N n k k 0 , 1 , . . . , N − 1 x ( n ) IDFT [ X ( k ) ] 1 N ∑ n 0 N − 1 x ( n ) W N − n k n 0 , 1 , . . . , N − 1 \begin{cases} X(k)\textbf{DFT}[x(n)]\sum\limi…

解决:IDEA编译Java程序时报编译失败

1、问题展示&#xff1a; 2、解决方法&#xff1a;

Magical Combat VFX

这个包包含30个可供游戏使用的VFX,有各种口味,为您的游戏增添趣味! 所有VFX都经过了很好的优化,可以在所有平台上使用。 这个包特别有一堆闪电魔法,有两种主要的变体,一种是深色的,另一种是浅色的。但它也提供了一系列其他视觉效果,如神圣咒语、音乐主题等等! 我们提供…

【CSP】2021-09-2 非零段划分 索引+递推/差分+前缀和

2021-09-2 非零段划分 索引递推/差分前缀和 2021-09-2 非零段划分 索引递推/差分前缀和索引递推思路差分前缀和思路遇到的问题索引递推完整代码差分前缀和完整代码 2021-09-2 非零段划分 索引递推/差分前缀和 一开始写的时候没有发现直接从a数组求q的规律&#xff0c;怎么也想…

NCV8705MTADJTCG稳压器芯片中文资料规格书PDF数据手册引脚图图片价格功能

产品概述&#xff1a; NCV8705 是一款低噪音、低功耗和低泄漏线性电压稳压器。该器件具有卓越的噪音和 PSRR 规格&#xff0c;适用于使用视频接收器、成像传感器、音频处理器或需要外部洁净电源的任何部件的产品。NCV8705 使用创新的自适应接地电流电路 可确保轻负载调节下的超…

基于DFA敏感词查询的算法简析

基于DFA敏感词查询的算法简析 1.背景 项目中需要对敏感词做一个过滤&#xff0c;首先有几个方案可以选择&#xff1a; a.直接将敏感词组织成String后&#xff0c;利用indexOf方法来查询。 b.传统的敏感词入库后SQL查询。 c.利用Lucene建立分词索引来查询。 d.利用DFA算法…

3.python安装Selenium框架

1. 命令安装 pip install selenium下载慢,可以换源: pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/查看是否换源成功 pip config get global.index-url安装好后,查看版本信息: pip show selenium2.下载对应的浏览器驱动 https://registry.npmm…

【Elasticsearch】windows安装elasticsearch教程及遇到的坑

一、安装参考 1、安装参考&#xff1a;ES的安装使用(windows版) elasticsearch的下载地址&#xff1a;https://www.elastic.co/cn/downloads/elasticsearch ik分词器的下载地址&#xff1a;https://github.com/medcl/elasticsearch-analysis-ik/releases kibana可视化工具下载…