当前位置: 首页 > article >正文

操作系统高频(六)linux内核

操作系统高频(六)linux内核

1.内核态,用户态的区别⭐⭐⭐

内核态和用户态的区别主要在于权限和安全性。

  1. 权限:内核态拥有最高的权限,可以访问和执行所有的系统指令和资源,而用户态的权限相对较低,只能访问受限的指令和资源。内核态能够执行特权指令,如修改内存映射、管理硬件设备等,而用户态不能直接执行这些特权指令。
  2. 安全性:由于内核态具有较高的权限,错误的操作或滥用权限可能会导致系统崩溃或不安全。为了保护系统的稳定性和安全性,将操作系统的核心部分放在内核态下运行,限制用户态的权限。用户态的应用程序必须通过系统调用的方式向内核请求操作系统提供的服务和资源,这样可以有效地控制用户程序对系统的影响范围。
  3. 进入内核态的方式:进入内核态有三种方式,分别是系统调用、异常和设备中断系统调用是应用程序主动向内核请求服务的方式;异常是由应用程序中的错误或异常情况触发的,如非法指令、内存访问越界等;设备中断是外部设备产生的中断信号,需要内核处理。

2.段页式内存管理有何优点?⭐⭐⭐

段页式内存管理结合了段式内存管理和页式内存管理的优点,提供了灵活性、保护性、共享性和虚拟化支持。

灵活性:
  • 将内存划分为段和页的组合,既可以方便地管理不同类型的程序和数据,又可以细致地进行内存分配和利用。
保护性:
  • 通过设置段和页的访问权限,可以对内存进行精细的访问控制,保护数据的安全性。
共享性:
  • 段页式内存管理支持多个程序共享同一段或同一页面,减少内存重复存储,提高内存利用效率。
虚拟化支持:
  • 通过页表和页面地址转换,实现虚拟地址到物理地址的映射,为虚拟内存提供支持,提高系统的内存容量和隔离性。

3.Linux内核的组成⭐⭐

  1. 进程管理:负责创建、管理和调度进程,包括进程的创建、销毁和调度等功能。
  2. 内存管理:负责管理内存资源,包括物理内存的分配与释放、虚拟内存的映射与管理等。
  3. 文件系统:提供对存储设备和文件的访问接口,支持各种文件系统格式。
  4. 设备驱动:提供对硬件设备的抽象和控制接口,支持各种设备驱动程序。
  5. 网络协议栈:实现了各种网络协议,提供网络通信的功能。
  6. 系统调用:提供用户空间程序与内核之间的接口,允许应用程序调用内核提供的功能和服务。

4.系统调用的作用⭐⭐

提供资源访问:
  • 应用程序可以通过系统调用请求访问操作系统提供的资源,如文件的读写、网络通信和设备访问等。
实现用户态与内核态切换:
  • 应用程序通常运行在用户态,而某些操作需要在内核态执行。通过系统调用,应用程序可以将控制权切换到内核态,让操作系统核心来完成特权操作。
提供操作系统服务:
  • 系统调用封装了操作系统提供的各种服务和功能,如进程管理、内存管理、文件系统操作和网络通信等。应用程序可以通过系统调用使用这些服务。
实现进程间通信:
  • 系统调用提供了进程间通信的机制,允许不同的应用程序进行数据交换和协作。应用程序可以通过系统调用进行消息传递、共享内存访问等操作。

5.系统调用read()/write(),内核具体做了哪些事情?⭐⭐⭐

  1. 用户空间发起read()/write()系统调用,并将参数传递给内核。
  2. 内核根据系统调用号找到相应的内核函数进行处理,如sys_read()/sys_write()。
  3. 内核根据文件描述符找到对应的文件对象,并执行读取或写入操作。
  4. 在读取操作中,内核将数据从文件或设备读取到内核空间,并通过页缓存层进行管理。
  5. 在写入操作中,内核将数据从用户空间拷贝到内核空间,并通过文件系统层将数据写入文件或设备。
  6. 内核可能会通过缓存管理、块设备管理和驱动程序等层次对数据进行处理和传输。
  7. 处理完成后,内核将结果返回给用户空间,并用户空间继续执行下一步操作。

6.bootloader内核和根文件的关系⭐

嵌入式Linux系统从软件角度可以分为四个主要部分:引导加载程序(Bootloader)、Linux内核、文件系统和应用程序。这些部分共同构成了完整的嵌入式系统。

  1. 引导加载程序(Bootloader):引导加载程序是系统启动的第一个执行代码,负责系统的引导和初始化。它可以包括固化在固件中的boot代码和Bootloader程序。引导加载程序的主要任务是初始化硬件、加载Linux内核、配置系统参数,并将控制权传递给内核。
  2. Linux内核:Linux内核是嵌入式系统的核心,负责管理系统的硬件资源、提供各种设备驱动程序和执行系统的核心功能。它提供了任务管理、内存管理、进程调度、设备管理等基本功能,并提供了丰富的系统调用接口供应用程序使用。
  3. 文件系统:嵌入式系统通常会有一个或多个文件系统。根文件系统是其中最重要的,它包含了操作系统所需的基本文件和目录结构。此外,嵌入式系统还可以建立在闪存或其他存储设备上的文件系统,用于存储应用程序、配置文件和数据等。
  4. 应用程序:应用程序是嵌入式系统中运行在用户空间的程序,利用Linux内核提供的服务和资源完成特定的功能需求。应用程序可以包括各种应用、服务和驱动程序,用于实现各种功能,如通信、控制、数据处理等。

7. Bootloader多数有两个阶段的启动过程。⭐⭐⭐

预引导阶段(Pre-boot Stage):
  • 第一阶段:该阶段也被称为硬件初始化阶段。在此阶段,Bootloader负责进行硬件初始化和基本系统设置。这包括检测和初始化处理器、内存、时钟、总线和其他外设的操作。
  • 第二阶段:在此阶段,Bootloader负责加载第二阶段的Bootloader代码。此代码位于存储介质上(例如闪存、硬盘等),并负责执行更高级的系统配置和初始化,包括加载文件系统驱动程序等。这一阶段还可以提供用户界面、bootloader配置和固件升级等功能。
操作系统加载阶段(Operating System Load Stage):
  • 该阶段是引导加载程序加载并启动操作系统(通常是Linux内核)的阶段。Bootloader会加载操作系统内核的映像文件,并执行一系列操作,例如设置内核参数、初始化设备树等。然后,它将控制权转移到操作系统的入口点,使操作系统接管系统的控制和管理。

通过这两个阶段的启动过程,引导加载程序能够在启动过程中对硬件进行初始化和配置,并加载操作系统,以使嵌入式系统能够正常运行。这种分阶段的启动过程为系统提供了灵活性和可扩展性,使Bootloader能够在不同的硬件平台和应用场景中进行自定义配置和操作。

8.linux的内核是由bootloader装载到内存中的?⭐⭐⭐

Linux内核是由引导加载程序(Bootloader)装载到内存中的。在系统启动过程中,引导加载程序负责加载Linux内核,将其从存储介质(如磁盘或闪存)读取到内存中的指定位置。

具体的步骤如下:

  1. 引导加载程序首先初始化硬件环境,例如处理器、内存和外设等。
  2. 引导加载程序根据特定规则(如配置文件或参数)确定Linux内核的位置,通常是指定内核映像文件在存储介质上的位置。
  3. 引导加载程序从存储介质中加载Linux内核的映像文件到内存中的指定位置。这个过程涉及到读取映像文件的内容,并将其复制到内存中的指定位置。
  4. 引导加载程序还可能对内核进行一些预处理或修正,如设定内核启动参数、修改映像文件的头部信息等。
  5. 加载完成后,引导加载程序将控制权转移到Linux内核的入口点,以开始内核的执行。

9.为什么需要BootLoader⭐⭐

  1. 硬件初始化:Bootloader负责初始化嵌入式系统的硬件环境。它通过设置处理器、内存、时钟和外设等硬件的初值,确保它们处于正确的状态以便后续的系统操作。
  2. 加载操作系统:Bootloader的主要任务是加载操作系统,如Linux内核,将其从存储介质(如闪存、磁盘等)中读取到内存中。这个过程包括读取映像文件、解压缩(如果有必要)以及将内核映像文件复制到内存的指定位置。
  3. 系统配置和参数设置:Bootloader可以提供用户界面或配置文件,允许用户或系统管理员对系统进行配置和参数设置。这包括设置内核启动参数、设置设备树、选择启动选项等。通过这些配置和参数设置,Bootloader可以根据特定需求进行个性化定制。
  4. 多引导选择:在某些情况下(如双重引导或多系统引导),系统可能有多个可选的操作系统或内核映像文件。Bootloader可以提供菜单或交互界面,允许用户选择启动哪个操作系统或内核映像文件。这提供了灵活性和可扩展性,使系统能够根据需求选择不同的操作系统或配置。
  5. 系统维护和升级:Bootloader还可以用于系统维护和固件升级。它可以提供功能,如备份和还原系统、加载和更新固件等。通过这些功能,系统的维护和升级可以更加方便、安全和可靠。

10. Linux内核同步方式总结⭐⭐

  1. 中断屏蔽:通过屏蔽系统中断来避免竞态条件的发生,在进入临界区之前屏蔽中断,保证期间不会被其他进程或中断打断。
  2. 原子操作:执行过程中不会被其他代码路径中断的操作,确保对共享资源的访问是原子级别的,避免竞态条件。
  3. 自旋锁:用于保护临界区的同步机制,线程在获取自旋锁时循环自旋等待,直到成功获取锁为止。
  4. 读写自旋锁:优化的自旋锁,适用于读操作和写操作的并发访问场景,允许多个线程进行读操作,只有一个线程可以进行写操作。
  5. 顺序锁:保护共享数据的同步机制,适用于读操作频繁且写操作相对较少的场景,提供了更高效的读写操作。
  6. 信号量:用于线程间同步和互斥的机制,允许设置计数器,并提供等待(P)和释放(V)操作,控制同时访问共享资源的线程数量。
  7. 读写信号量:用于读操作和写操作的线程同步和互斥的机制,允许多个线程进行读操作,只有一个线程可以进行写操作。
  8. BKL(大内核锁):大粒度的内核锁,用于整个内核的互斥保护,但可能导致系统整体性能下降,逐渐被其他同步机制所替代。
  9. Seq锁:用于保护共享数据的同步机制,适用于并发读和单个写操作的场景,通过维护计数器并循环自旋等待实现读写同步。

相关文章:

操作系统高频(六)linux内核

操作系统高频(六)linux内核 1.内核态,用户态的区别⭐⭐⭐ 内核态和用户态的区别主要在于权限和安全性。 权限:内核态拥有最高的权限,可以访问和执行所有的系统指令和资源,而用户态的权限相对较低&#x…...

位置编码汇总 # 持续更新

看了那么多还没有讲特别好的,GPT老师讲的不错关于三角函数编码。 一、 手撕transformer常用三角位置编码 GPT说:“低维度的编码(例如,第一个维度)可以捕捉到大的位置差异,而高维度的编码则可以捕捉到小的细…...

电阻(Resistor)详解

一、电阻的定义与核心作用 电阻是电子电路中用于 限制电流、分压、调节信号电平、消耗功率 的基础被动元件,其阻值(Resistance)单位为欧姆(Ω)。其核心作用可归纳为: 限流保护:防止元器件过电流…...

DaVinci Resolve19.1下载:达芬奇调色中文版+安装步骤

如大家所了解的,DaVinci Resolve中文名为达芬奇,是一款专业视频编辑与调色软件。它最初以调色功能闻名,但经过多年发展,已扩展为一套完整的后期制作解决方案,涵盖了剪辑、视觉特效、动态图形和音频后期制作等多个模块。…...

文件IO 2

补充一些用到前面没提到的方法 isDirectory()方法,检查一个对象是否是文件夹,是true不是false isFile()方法,检测一个对象是否为文件,是true不是false 文件的读写操作实践 上一篇大致讲了文件读写操作的基本操作,下面是实践时…...

【Word】批注一键导出:VBA 宏

📌 VBA 宏代码实现 下面是完整的 VBA 代码,支持: 自动创建新文档,并将当前 Word 文档的所有批注导出。批注格式清晰,包括编号、作者、日期和批注内容。智能检测,如果当前文档没有批注,则提示用…...

《深度洞察:MySQL与Oracle中游标的性能分野》

在数据库管理的复杂领域中,游标作为一种强大的工具,用于对数据进行逐行处理,为许多复杂的数据操作提供了解决方案。然而,当涉及到MySQL和Oracle这两大主流数据库时,游标在性能表现上存在着显著的差异。深入理解这些差异…...

LINUX 1

快照 克隆:关机状态下:长时间备份 uname 操作系统 -a 获取所有信息 绝对路径 相对路径 -a -l 列表形式查看 -h 查看版本 相对路径这个还没太搞懂 LS -L LL 简写 显示当前路径 pwd cd 切换到目录 clear 清屏 reboot 重启操作系统...

高效定位 Go 应用问题:Go 可观测性功能深度解析

作者:古琦 背景 自 2024 年 6 月 26 日,阿里云 ARMS 团队正式推出面向 Go 应用的可观测性监控功能以来,我们与程序语言及编译器团队携手并进,持续深耕技术优化与功能拓展。这一创新性的解决方案旨在为开发者提供更为全面、深入且…...

【Windows】win10系统安装.NET Framework 3.5(包括.NET 2.0和3.0)失败 错误代码:0×80240438

一、.NET3.5(包括.NET 2.0和3.0)安装方式 1.1 联网安装(需要联网,能访问微软,简单,很可能会失败) 1.2 离线安装-救急用(需要操作系统iso镜像文件,复杂,成功几率大) 二、联网安装 通过【控制面板】→【程序】→【程序和功能】→【启用或关闭Windows功能】 下载过程…...

蓝桥杯训练士兵

思路:其实每次就是要比较士兵单独训练的价格之和SUM与S的大小,如果 SUM大,那么就减去所有士兵都要训练的次数的最小值,SUM再更新一下,继续比较。 先对士兵的次数按从小到大的次序排序(很重要)&…...

Java基础-27-多态-多态好处和存在的问题

在面向对象编程(OOP)中,多态是一个非常重要的概念。它能够让我们用统一的方式处理不同类型的对象,提升代码的灵活性和可扩展性。Java 作为一种面向对象的编程语言,充分支持多态,并在实际开发中提供了巨大的…...

循环神经网络 - 简单循环网络

本文我们来学习和了解简单循环网络(Simple Recurrent Network,SRN), SRN是一个非常简单的循环神经网络,只有一个隐藏层的神经网络。 简单循环神经网络,也常称为 Elman 网络,是最基本的循环神经网络(RNN&am…...

Linux 企业项目服务器组建(附脚本)

一、架构概述​ 本方案旨在为企业搭建一套高效、安全的 Linux 服务器架构,包含一台 DNS 服务器,以及一台同时承载 FTP 和 Samba 服务的服务器,满足公司在域名解析、图片存储与共享、文件共享等方面的业务需求。​ 二、服务器部署​ DNS 服…...

Linux 2021韩顺平网课笔记:shell编程

基本介绍 Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。 Shell脚本的执行方式 格式要求 脚本以 #!bin/bash 开头,表明以bashell…...

软考 中级软件设计师 考点知识点笔记总结 day09 操作系统进程管理

文章目录 4、操作系统基本原理4.1 、进程管理**4.1.1 、进程同步机制****4.1.2 、进程互斥机制****4.1.3 、信号量机制****4.1.4 、PV操作实现前驱操作****4.1.5 、死锁**4.1.6 、银行家算法 4、操作系统基本原理 进程管理 存储管理 文件管理 设备管理 微内核操作系统 操作系…...

大模型和AIGC同质化浪潮下的信息困局与破局之道,面向未来的认知革命

欢迎来到涛涛聊AI。看到网上太多雷同的内容有感后,让AI批判下AI。 一、技术趋同引发的信息生态危机 当前互联网正被海量AI生成内容淹没,这种现象的根源在于技术底层的高度同质化。全球主流大模型90%以上基于相同算法架构开发,采用近似的训练…...

⼆、Kafka客户端消息流转流程

这⼀章节将重点介绍Kafka的HighLevel API使⽤,并通过这些API,构建起Kafka整个消息发送以及消费的主线流程。 Kafka提供了两套客户端API,HighLevel API和LowLevel API。 HighLevel API封装了kafka的运⾏细节,使⽤起来⽐较简单&…...

es 3期 第28节-深入掌握集群组建与集群设置

#### 1.Elasticsearch是数据库,不是普通的Java应用程序,传统数据库需要的硬件资源同样需要,提升性能最有效的就是升级硬件。 #### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性&#xff…...

如何在 SwiftUI 视图中使用分页(Paging)机制显示 SwiftData 数据(三)

概述 小伙伴们都知道,自从有了 SwiftData 的加持,现在 SwiftUI 可以非常惬意的利用描述型命令创建以数据驱动为本的视图了。这在测试或演示小项目中工作的完美无缺,不过真实世界要“残酷”的多。 实际情况是,我们无法一次性将海量数据统统拉入内存以便在 SwiftUI 中显示,…...

git和VScode

游戏存档保存的是游戏的进度 git保存的是代码的进度 Vscode和git 要正常的使用git首先要设置姓名和邮箱 要配合gitee(也可以是其他平台,以gitee举例)使用,首先创造一个gitee账号,复制邮箱和用户名 在VScode中找到…...

Linux Vim 编辑器的使用

Vim 编辑器的使用 一、安装及介绍二、基础操作三、高级功能四、配置与插件 一、安装及介绍 Vim是一款强大且高度可定制的文本编辑器,相当于 Windows 中的记事本。具备命令、插入、底行等多种模式。它可通过简单的键盘命令实现高效的文本编辑、查找替换、分屏操作等…...

NLP语言模型训练里的特殊向量

1. CLS 向量和 DEC 向量的区别及训练方式 (1) CLS 向量与 DEC 向量是否都是特殊 token? CLS 向量([CLS] token)和 DEC 向量(Decoder Input token)都是特殊的 token,但它们出现在不同类型的 NLP 模型中&am…...

利用Canvas在紫微斗数命盘上画出三方四正

许多紫微斗数排盘程序都会在命盘上画出三方四正的指示线&#xff0c;便于观察命盘。本文用Canvas在一个模拟命盘上画出三方四正指示线。 模拟命盘并画出“子”宫三方四正的HTML文件如下&#xff1a; <!doctype html> <html lang"en"> <head><…...

传统汽车 HMI 设计 VS 新能源汽车 HMI 设计,有何不同?

一、设计理念与目标的差异 传统汽车HMI设计的核心目标是辅助驾驶&#xff0c;强调功能的简洁性和操作的便捷性。其设计侧重于提供基础的车辆信息&#xff08;如车速、转速、油量等&#xff09;&#xff0c;并确保驾驶员在操作时能够快速获取关键信息。相比之下&#xff0c;新能…...

【JavaWeb】前端基础

JavaWeb 前端三大件&#xff1a;HTML&#xff08;主要用于网页主体结构的搭建&#xff09;&#xff0c;CSS&#xff08;页面美化&#xff09;&#xff0c;JavaScript&#xff08;主要用于页面元素的动态代理&#xff09; 1. HTML 1.1 html概述 HTML&#xff1a;Hyper Text …...

SpringMVC组件解析

SpringMVC的执行流程 ① 用户发送请求至前端控制器DispatcherServlet。 ② DispatcherServlet收到请求调用HandlerMapping处理器映射器 ③ 处理器映射器找到具体的处理器(可以根据xm|配置、注解进行査找)&#xff0c;生成处理器对象及处理器 拦截器(如果有则生成)一…...

使用 Provider 和 GetX 实现 Flutter 局部刷新的几个示例

1. 使用 Provider 实现局部刷新 示例 1&#xff1a;ChangeNotifier Consumer 通过 ChangeNotifier 和 Consumer 实现局部刷新。 import package:flutter/material.dart; import package:provider/provider.dart;void main() {runApp(ChangeNotifierProvider(create: (_) &g…...

数据结构C语言练习(两个栈实现队列)

一、引言 在数据结构的学习中&#xff0c;我们经常会遇到一些有趣的问题&#xff0c;比如如何用一种数据结构去实现另一种数据结构的功能。本文将深入探讨 “用栈实现队列” 这一经典问题&#xff0c;详细解析解题思路、代码实现以及每个函数的作用&#xff0c;帮助读者更好地…...

Java 基础-28- 多态 — 多态下的类型转换问题

在 Java 中&#xff0c;多态&#xff08;Polymorphism&#xff09;是面向对象编程的核心概念之一。多态允许不同类型的对象通过相同的方法接口进行操作&#xff0c;而实际调用的行为取决于对象的实际类型。虽然多态提供了极大的灵活性&#xff0c;但在多态的使用过程中&#xf…...