Linux——内核概念

一、内核

什么是内核?

计算机是由各种外部硬件设备组成的,如内存、cpu、硬盘等。如果每个应用都要和这些硬件对接通信协议,就太麻烦了,所以这个工作就由内核来负责。内核作为软件连接硬件设备的桥梁,使应用开发者只需关心如何与内核交互,而不是与硬件交互。

内核的任务?

内核一般会具有以下能力:

  • 执行流调度:管理进程、线程,决定哪个进程、线程占用CPU;
  • 内存管理:决定内存资源的分配和回收;
  • 设备驱动:为进程与硬件设备之间提供通信能力;
  • 系统调用:如果应用程序要运行更高权限运行的服务,就需要系统调用,它是用户程序与操作系统之间交互的接口。

内核是怎么工作的?

内核具有最高的权限,可以控制各种硬件。而用户程序具有的权限很小,因此操作系统把内存分成了两个区域:内核空间和用户空间。

内核空间和用户空间

  • 内核空间只有内核程序可以访问;
  • 用户空间专门给应用程序使用,当然内核程序也可以使用。

用户程序只能访问局部的内存空间,而内核程序可以访问所有内存空间。

内核态和用户态

当程序使用用户空间时,我们常说该程序在用户态执行;当程序使内核空间时,程序则在以内核态执行。

应用程序如果需要进入内核空间,就需要通过系统调用,下面来看看系统调用的过程:(参考信号处理)

当程序使用系统调用时会产生中断,CPU 会中断当前在执行的程序,跳转到中断处理程序,也就是开始执行内核程序。内核处理完后,主动触发中断,把 CPU 执行权限交回给用户程序,回到用户态继续执行后面的代码。

二、Linux的设计

Linux 内核的设计理念主要有以下几点:

  • MultiTask,多任务
  • SMP,对称多处理
  • ELF,可执行文件链接格式
  • Monolithic Kernel,宏内核

MultiTask

MultiTask 的意思是多任务,Linux 是一个多任务的分时操作系统。多任务意味着可以有多个任务并行运行。

  • 对于单核 CPU:可以基于时间片轮转,每个任务执行一小段时间后就切换另一个任务。从宏观角度看,一段时间内执行了多个任务,称为串行

  • 对于多核 CPU:多个任务可以同时被不同核心的 CPU 同时执行,这被称为并行

SMP (Symmetric Multi-Processor)

对称多处理。表示每个 CPU 的地位和对资源的权限是相等的,多个 CPU 共享内存,每个 CPU 都可以访问完整的内存和硬件资源。

这个特点决定了 Linux 不会有某个 CPU 独占程序,每个程序都可以被分配到任意一个 CPU 上被执行。

ELF (Executable and Linkable Format)

可执行文件链接格式。它是 Linux 中可执行文件的存储格式,可以从下图看到它的结构:

ELF 把文件分成了一个个分段,每一个段都有自己的作用。

ELF 文件有两种索引,Program header table 中记录了「运行时」所需的段,而 Section header table 记录了二进制文件中各个「段的首地址」。

ELF文件是如何生成的?

代码首先经过编译器编译成汇编代码,然后通过汇编器变成目标代码,也就是目标文件,最后通过链接器把多个目标文件以及调用的各种函数库链接起来,形成可执行文件,也就是 ELF 文件。

ELF文件是如何被执行的?

执行 ELF 文件的时候,会通过装载器把 ELF 文件加载到内存,CPU 去读取内存中的指令和数据,程序就被执行起来了。

Monolithic Kernel

宏内核。Linux 内核架构就是宏内核,意味着 Linux 的内核是一个完整的可执行程序,且拥有最高的权限。宏内核的特征是内核的所有功能,比如进程调度等,都运行在内核态。

Linux 也实现了动态加载内核模块的功能,例如大部分设备驱动是以可加载模块的形式存在的,与内核其他模块解藕,让驱动的开发和加载更灵活。

与宏内核对应的是微内核。微内核架构的内核只保留最基本的能力,比如进程调度、虚拟机内存、中断等,把一些应用放到了用户空间,比如驱动程序、文件系统等。这样服务与服务之间是隔离的,单个服务出现故障或者完全攻击,也不会导致整个操作系统挂掉,提高了操作系统的稳定性和可靠性。

微内核内核功能少,可移植性高。但是相比宏内核的缺点是,由于驱动程序不在内核中,而驱动程序一般会频繁调用底层,于是驱动和硬件设备交互就需要频繁切换到内核态,这样会带来性能损耗。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(ARM)7/5

1.串口发送单个字符 2.串口发送字符串 uart4.h #ifndef __UART4_H__ #define __UART4_H__#include "stm32mp1xx_uart.h" #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h"//初始化相关操作 void hal_uart4_init();//发送一个字符 v…

云计算——虚拟化层架构

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 前言 本章将会讲解云计算的虚拟化层架构,了解云计算虚拟化层都有哪些架构模式…

Java POI excel单元格背景色(填充)、字体颜色(对齐)、边框(颜色)、行高、列宽设置

文章目录 1、Excel Cell单元格背景色颜色名称对照关系2、Excel Cell单元格背景填充样式颜色填充对照关系3、Excel Cell字体样式设置对照图4、Excel 行高、列宽设置5、Excel单元格边框设置边框类型图片对比附一:一些问题1、关于列宽使用磅*20的计算方式2、关于行高使…

开发抖音短视频账号矩阵系统技术实现能解决一机一号实名认证问题?

一、短视频账号矩阵系统解决一机一号实名认证问题? 目前站在开发者角度来看问的比较多,做开发技术类矩阵saas工具,需要的多账号怎么解决,这需要从两个方面来做开发解决。 第一、从开发角度来看技术开发首先解决代理ip分发问题&a…

DAY38:贪心算法(五)K次取反后最大数组和+加油站

文章目录 1005.K次取反后最大化的数组和思路直接升序排序的写法最开始的写法:逻辑错误修改版时间复杂度 自定义sort对绝对值排序的写法sort的自定义比较函数cmp必须声明为static的原因std::sort升降序的问题(默认升序)时间复杂度 总结 134.加…

N天爆肝数据库——MySQL(1)

数据库概念理解 数据库 DB 存储数据的仓库 数据库管理系统 DBMS 操纵和管理数据库的大型软件 SQL 操作关系型数据库的编程语言,定义了用一套操作关系型数据库同意标准 学习 SQL 的作用 SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统。S…

前端优化的一些方向

对于浏览器来说,加载网页的过程可以分为两部分,下载文档并响应(5%左右),下载各种组件(95%左右)。 而对比大部分优秀网页来说下载文档(10%~ 20%),下载组件&…

Mac OS装Windows系统开启虚拟化

目录 引言前提macOS开启虚拟化mac下的Windows开启虚拟化双系统开启虚拟化修改启动管理程序开启虚拟化 注意事项 引言 在开发工作中,很多软件需要用到virtual box,但是使用virtual box需要开启虚拟化,而有些苹果笔记本虚拟化是关闭的&#xf…

Day_61-62 决策树

目录 Day_61-62决策树(准备工作) 一. 算法的基本概念 1. 决策树的定义 2. 如何构建决策树? 2.1 熵 2.2 信息增益原则 2.3 计算步骤 二. 示例演示 1. 第一次节点决策分类: 2. 后续节点的决策分类 3. 决策分类的结束条件 三. 代码实现 1. 主函数 2. 两个构…

Presto之内存池管理

一. 前言 在Presto 之GENERAL POOL & RESERVED POOL_王飞活的博客-CSDN博客 的文章中,我们介绍了在Presto中,内存分成了保留区和通用区两个内存池区进行管理。本文则主要介绍Presto是是如何实现内存池管理的。 二. Presto内存池大小控制管理 Presto的…

异地远程访问本地SQL Server数据库【无公网IP内网穿透】

文章目录 1.前言2.本地安装和设置SQL Server2.1 SQL Server下载2.2 SQL Server本地连接测试2.3 Cpolar内网穿透的下载和安装2.3 Cpolar内网穿透的注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 转发自CSDN远程穿透的文章:无需公网…

将迷你世界的蓝图导出成表格

将迷你世界的蓝图导出成表格 使用方法为编译此代码&#xff0c;然后将游戏存档的vbp文件拖入编译出的exe上即可导出csv文件 #include<iostream> #include<Windows.h> #include<direct.h> #include<io.h> using namespace std; #define N_L 4 //这个改…