Linux 内核概念和学习详解

news2024/7/6 20:51:03

e7bf19a92df3475fb9218fea80835113.jpg


 

 

1、前言

本文主要讲解什么是Linux内核,以及通过多张图片展示Linux内核的作用与功能,以便于读者能快速理解什么是Linux内核,能看懂Linux内核。

拥有超过1300万行的代码,Linux内核是世界上最大的开源项目之一,但是内核是什么,它用于什么?

879eb8c5683644fab9ef03472c4c70b3.png

 4985e20153b440b4bd4493764f5d9cd9.png

 

2、什么是内核

内核是与计算机硬件接口的易替换软件的最低级别。它负责将所有以“用户模式”运行的应用程序连接到物理硬件,并允许称为服务器的进程使用进程间通信(IPC)彼此获取信息。

 

3、内核还要分种类?

是的,没错。

3.1 微内核

微内核只管理它必须管理的东西:CPU、内存和IPC。计算机中几乎所有的东西都可以被看作是一个附件,并且可以在用户模式下处理。微内核具有可移植性的优势,因为只要操作系统仍然试图以相同的方式访问硬件,就不必担心您是否更改了视频卡,甚至是操作系统。

微内核对内存和安装空间的占用也非常小,而且它们往往更安全,因为只有特定的进程在用户模式下运行,而用户模式不具有管理员模式的高权限。

2ddeb553869f4134b6df0261707587fd.jpeg

3.1.1 Pros

  • 可移植性

  • 安装占用空间小

  • 小内存占用

  • 安全

3.1.2 Cons

  • 通过驱动程序,硬件更加抽象

  • 硬件可能反应较慢,因为驱动程序处于用户模式

  • 进程必须在队列中等待才能获得信息

  • 进程不能在不等待的情况下访问其他进程

3.2 单内核

单内核与微内核相反,因为它们不仅包含CPU、内存和IPC,而且还包含设备驱动程序、文件系统管理和系统服务器调用等内容。单内核更擅长于访问硬件和多任务处理,因为如果一个程序需要从内存或运行中的其他进程中获取信息,那么它就有一条更直接的线路来访问信息,而不需要在队列中等待来完成任务。但是,这可能会导致问题,因为在管理模式下运行的东西越多,如果行为不正常,就会有越多的东西导致系统崩溃。

3b7d513cb2fc4a5a998acc00c2c9b32e.png

3.2.1 Pros

  • 更直接地访问程序的硬件

  • 流程之间更容易通信

  • 如果支持您的设备,它应该不需要额外安装就可以工作

  • 进程反应更快,因为没有等待处理器时间的队列

3.2.2 Cons

  • 较大安装体积

  • 较大内存占用

  • 不太安全,因为所有操作都在管理模式下运行

 

4、混合的内核

混合内核能够选择在用户模式下运行什么,以及在管理模式下运行什么。通常情况下,设备驱动程序和文件系统I/O将在用户模式下运行,而IPC和服务器调用将保持在管理器模式下。这是两全其美,但通常需要硬件制造商做更多的工作,因为所有驱动程序的责任都由他们来承担。它还可能存在一些与微内核固有的延迟问题。

1ec42a5ece5544eb809d028580efe8fa.jpeg

4.1 Pros

  • 开发人员可以选择什么在用户模式下运行,什么在管理模式下运行

  • 比单片内核更小的安装占用空间

  • 比其他型号更灵活

4.2 Cons

  • 会遭受与微内核相同的进程延迟

  • 设备驱动程序需要由用户管理(通常)

 

5、Linux内核文件在哪里

Ubuntu中的内核文件存储在/boot文件夹中,称为vmlinux -version。vmlinuz这个名字来自于unix世界,早在60年代,他们就把内核简单地称为“unix”,所以当内核在90年代首次开发时,Linux就开始把内核称为“Linux”。

fa917e82cf0649d28dbb46fce7732e65.png

 当开发虚拟内存以便更容易地进行多任务处理时,将“vm”放在文件的前面,以显示内核支持虚拟内存。有一段时间,Linux内核被称为vmlinux,但是内核变得太大,无法装入可用的引导内存,因此压缩了内核映像,并将末尾的x更改为z,以显示它是用zlib压缩的。并不总是使用相同的压缩,通常用LZMA或BZIP2替换,一些内核简单地称为zImage。

在/boot文件夹中还有其他非常重要的文件,称为initrd.img-version、system.map-version, config-version。initrd文件用作一个小RAM磁盘,用于提取和执行实际的内核文件。这个系统。map文件用于内核完全加载之前的内存管理,配置文件告诉内核在编译内核映像时要加载哪些选项和模块。

 

6、Linux内核体系结构

因为Linux内核是单片的,所以它比其他类型的内核占用空间最大,复杂度也最高。这是一个设计特性,在Linux早期引起了相当多的争论,并且仍然带有一些与单内核固有的相同的设计缺陷。

b44e5852a150439c8e26742248facbcd.jpeg

 为了解决这些缺陷,Linux内核开发人员所做的一件事就是使内核模块可以在运行时加载和卸载,这意味着您可以动态地添加或删除内核的特性。这不仅可以向内核添加硬件功能,还可以包括运行服务器进程的模块,比如低级别虚拟化,但也可以替换整个内核,而不需要在某些情况下重启计算机。

想象一下,如果您可以升级到Windows服务包,而不需要重新启动……

 

7、内核模块

如果Windows已经安装了所有可用的驱动程序,而您只需要打开所需的驱动程序怎么办?这本质上就是内核模块为Linux所做的。内核模块,也称为可加载内核模块(LKM),对于保持内核在不消耗所有可用内存的情况下与所有硬件一起工作是必不可少的。

模块通常向基本内核添加设备、文件系统和系统调用等功能。lkm的文件扩展名是.ko,通常存储在/lib/modules目录中。由于模块的特性,您可以通过在启动时使用menuconfig命令将模块设置为load或not load,或者通过编辑/boot/config文件,或者使用modprobe命令动态地加载和卸载模块,轻松定制内核。

第三方和封闭源码模块在一些发行版中是可用的,比如Ubuntu,默认情况下可能无法安装,因为这些模块的源代码是不可用的。该软件的开发人员(即nVidia、ATI等)不提供源代码,而是构建自己的模块并编译所需的.ko文件以便分发。虽然这些模块像beer一样是免费的,但它们不像speech那样是免费的,因此不包括在一些发行版中,因为维护人员认为它通过提供非免费软件“污染”了内核。

内核并不神奇,但对于任何正常运行的计算机来说,它都是必不可少的。Linux内核不同于OS X和Windows,因为它包含内核级别的驱动程序,并使许多东西“开箱即用”。希望您能对软件和硬件如何协同工作以及启动计算机所需的文件有更多的了解。

 

8、Linux 内核学习经验总结

开篇

学习内核,每个人都有自己的学习方法,仁者见仁智者见智。以下是我在学习过程中总结出来的东西,对自身来说,我认为比较有效率,拿出来跟大家交流一下。

内核学习,一偏之见;疏漏难免,恳请指正。

为什么写这篇博客

刚开始学内核的时候,不要执着于一个方面,不要专注于一个子系统就一头扎到实际的代码行中去,因为这样的话,牵涉的面会很广,会碰到很多困难,容易产生挫败感,一个函数体中(假设刚开始的时候正在学习某个方面的某个具体的功能函数)很可能掺杂着其他各个子系统方面设计理念(多是大量相关的数据结构或者全局变量,用于支撑该子系统的管理工作)下相应的代码实现,这个时候看到这些东西,纷繁芜杂,是没有头绪而且很不理解的,会产生很多很多的疑问,

(这个时候如果对这些疑问纠缠不清,刨根问底,那么事实上就是在学习当前子系统的过程中频繁的去涉足其他子系统,这时候注意力就分散了),而事实上等了解了各个子系统后再回头看这些东西的话,就简单多了,而且思路也会比较清晰。所以,要避免 “只见树木,不见森林”,不要急于深入到底层代码中去,不要过早研究底层代码。

我的学习方法

刚开始,我认为主要的问题在于你知道不知道,而不是理解不理解,某个子系统的实现采用了某种策略、方法,而你在学习中需要做的就是知道有这么一回事儿,然后才是理解所描述的策略或者方法。

根据自己的学习经验,刚开始学习内核的时候,我认为要做的是在自己的脑海中建立起内核的大体框架,理解各个子系统的设计理念和构建思想,这些理念和思想会从宏观上呈献给你清晰的脉络,就像一个去除了枝枝叶叶的大树的主干,一目了然;

当然,肯定还会涉及到具体的实现方法、函数,但是此时接触到的函数或者方法位于内核实现的较高的层次,是主(要)函数,已经了解到这些函数,针对的是哪些设计思想,实现了什么样的功能,达成了什么样的目的,混个脸熟的说法在这儿也是成立的。

至于该主函数所调用的其它的辅助性函数就等同于枝枝叶叶了,不必太早就去深究。此时,也就初步建立起了内核子系统框架和代码实现之间的关联,关联其实很简单,比如一看到某个函数名字,就想起这个函数是针对哪个子系统的,实现了什么功能。

 

好了今天的分享就到这里,涉及到内核的东西一般都比较枯燥无味,一旦你吃透了,就会豁然开朗,加油吧!

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

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

相关文章

css 3个元素行排列,前2个元素靠左,第三个元素靠右

上效果&#xff1a; 实现方式&#xff1a; display:flex &#xff0c; 行排列&#xff0c;默认靠左对齐&#xff0c; 然后让第三个元素自动占满剩余的空间&#xff1a;flex-grow:1&#xff0c;text-align:end // wxml <!-- 支付方式--><view class"payment_…

尚无忧多门店自助宠物洗护系统美容宠物寄养系统小程序

技术框架&#xff1a;thinkphpmysql跨平台uniapp 完全开源无需授权 支持&#xff1a; 多门店商家入驻&#xff0c;管理 门店自助设备预约 电子门锁扫码开门 会员开购买&#xff0c;会员余额充值 自助订单和宠物预约订单管理 宠物添加管理 洗护知识文章设置 <templa…

套餐管理模块开发 -- 手把手教你做ssm+springboot入门后端项目黑马程序员瑞吉外卖(六)

文章目录 前言一、新增套餐1. 需求分析2. 数据模型3. 代码开发4. 功能测试 二、套餐信息分页查询1. 需求分析2. 代码开发3. 功能测试 三、删除套餐1. 需求分析2. 代码开发3. 功能测试 总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开始发布一些学习笔记类的博客&#x…

推荐模型——逻辑回归

文章目录 1. 逻辑回归特点2. 基于逻辑回归的推荐流程3. 逻辑回归模型的数学形式4. 逻辑回归模型的训练方法5. 逻辑回归模型的优势5.1 数学含义上的支撑5.2 可解释性强5.3 工程化的需要 6. 逻辑回归的局限性 1. 逻辑回归特点 逻辑回归是融合多种特征的推荐模型。 相比于协同过…

J Roulette(“范式杯”2023牛客暑期多校训练营1)

目录 题目描述&#xff1a; 解题思路&#xff1a; 解题代码&#xff1a; 题目描述&#xff1a; 解题思路&#xff1a; 注&#xff1a;其中对于取模过程中用到了费马小定理&#xff0c;可参考如下博客&#xff1a; (3条消息) 费马小定理及其应用_CTGU-Yoghurt的博客-CSDN博客 …

LiveGBS流媒体平台国标GB/T28181功能-国标级联到海康大华宇视华为等第三方国标平台上级不支持H265/HEVC支持强制推送H264编码

LiveGBS国标级联到海康大华宇视华为等第三方国标平台上级不支持H265/HEVC支持强制推送H264编码 1、背景2、什么是GB/T28181级联3、获取上级接入配置信息3.1、接入第三方国标平台3.2、接入LiveGBS示例 4、配置国标级联4.1、国标级联菜单4.2、添加上级平台4.3、编辑上级平台级联4…

微服务保护---Sentinel(雪崩问题/流量控制/隔离和降级)

目录 1.雪崩问题 1.1.解决雪崩问题的常见方式有四种 2.什么是Sentinel 2.1.安装Sentinel控制台 2.2.微服务整合Sentinel 3.流量控制 3.1.簇点链路 3.2.快速入门 3.2.1.示例 3.2.2.利用jmeter测试 3.3.流控模式 3.3.1.关联模式 3.3.2.链路模式 3.3.3.总结 3.4.流控…

如何在 Ubuntu 20.04 桌面上启用/禁用 wayland

Wayland 是一种通信协议&#xff0c;指定显示服务器与其客户端之间的通信。 默认情况下&#xff0c;Ubuntu 20.04 桌面不会启动 Wayland&#xff0c;而是加载 Xorg 显示服务器X11。 在本教程中您将学习&#xff1a; 如何启用 Wayland如何禁用 Wayland 类别要求、约定或使用的…

途乐证券-股票退市股民如何索赔?

股票退市股民能够经过以下途径来索赔&#xff1a; 1、团体诉讼 团体诉讼允许多个股民联合起来作为原告&#xff0c;以代表整个群体进行索赔。这种方式一般需求证明公司或其管理层存在违法行为或虚假陈说等&#xff0c;导致股民的丢失。 2、单个诉讼 在这种状况下&#xff0c…

el-table 鼠标悬浮时背景色改变

案例&#xff1a; /* css 鼠标悬浮时 */ ::v-deep .el-table tbody tr:hover > td {background-color: rgb(65, 111, 180) !important;color: #ffffff; } 表格背景色透明 ::v-deep .el-table tr {/* background-color: #10274c; */background-color: transparent;color: #f…

【gis插件】arcgis插件界址点编号工具、C#实现思路(附插件下载链接)

数据&#xff1a;界址点图层、宗地图层 要求&#xff1a;找出宗地对应的所有界址点号&#xff0c;对这些界址点号以J1开始按顺序排列 要找出宗地所对应的所有界址点号&#xff0c;这里只要执行一个标识 即可得到这样得到的结果。 难点在于对界址点的编号&#xff0c;经过检查…

【linux】\r 和 \n 的区别、缓冲区的刷新情况、实例:进度条(用 Makefile 自动化构建)

目录 1. \r 和 \n2. 通过一个小程序观察现象3. 进度条 1. \r 和 \n 回车和换行符在 linux 系统下的 gcc 编辑器中&#xff0c;是能观测出有明显区别的。 \n&#xff1a;换行 --> 光标去往下一行的相同位置 \r&#xff1a;回车 --> 光标回到该行最左侧 &#xff08;两步之…

综合案例:书籍购物车

待练习 记得写key <tbody><tr v-for"(item, index) in books":key"item.id"click"rowClick(index)":class"{ active: index currentIndex }"><td>{{ index 1 }}</td><td>{{ item.name }}</td>…

数据库应用:MySQL高级语句(二)

目录 一、理论 1.表连接查询 2.视图 3.联集 4.交集值 5.无交集值 6.CASE 7.空值&#xff08;NULL&#xff09;和无值&#xff08;’ &#xff09;的区别 8.正则表达式&#xff08;精确查询) 二、实验 1.表连接查询 2.视图 3.联集 4.交集值 5.无交集值 6.CASE 7…

Ollydbg(1)字符串解决

链接&#xff1a;https://pan.baidu.com/s/1BaROP5e9UbJMSN1sgOOKbA 提取码&#xff1a;z2i6 输入序列号&#xff0c;如果不正确&#xff0c;提示输入不正确 右键→中文搜索引擎→智能搜索→文本字符串→双击 流程&#xff1a; 一.找到关键处并且修改 两个均可以实现功能的修改…

电力市场经济与管理自学笔记

电力市场经济与管理自学笔记 第二章 电力经济学基本原理2.1 供给、需求与均衡2.1.1 需求曲线2.1.2 供给曲线2.1.3 供给需求的平衡 写本文主要是用于为以后可能从事的电力市场相关方向做点铺垫 第二章 电力经济学基本原理 这一章和高中政治时学的《经济生活》有点类似&#xf…

信息摘要 秘钥签名 数字签名 数字证书 数字验证 数字信封 这都是什么东西?

信息摘要 秘钥签名 数字签名 数字证书 数字验证 数字信封 这都是什么东西&#xff1f; 一下遇见这么多相近的名词&#xff0c;实在是难以区分理解&#xff0c;还是从这些概念产生的缘由理解吧 先看需求&#xff1a;如何保证 数据 在网络中传输时正确的&#xff1f;有没有被篡…

CentOS7安装Mysql8并进行主从复制配置

场景 CentOS7中安装Mysql8并配置远程连接和修改密码等&#xff1a; CentOS7中安装Mysql8并配置远程连接和修改密码等_霸道流氓气质的博客-CSDN博客 在上面实现安装Mysql8的基础上&#xff0c;克隆出两台机器&#xff0c;修改ip后进行mysql的主从复制搭建。 Mysql主从复制 …

vue组件 导出excel,并且可以合并单元格,设置宽度,字体颜色,换行等

需求:在开发后台管理系统中,经常会有导出表格的需求,本案例实现了在导出时,可以合并单元格,设置单元格字体颜色和宽度,并且可以根据 \n 自动换行 插件:xlsx(0.18.4),xlsx-style(0.8.13),file-saver(2.0.5) 效果如下: 注意:不同的版本之间可能方法不能共用 …

【蓝图】p28-p29按键+鼠标点击实现开关门

p28-p29按键鼠标点击实现开关门 p28&#xff0c;创建门的蓝图类创建一个Actor注意&#xff08;当门的中心点不在边角上时&#xff09; 蓝图三个旋转区别按E键开关门使鼠标点击也可以开门可能遇到的bug问题 p28&#xff0c;创建门的蓝图类 actor和组件的区别、门的轴心点修改 …