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

操作系统概念(黑皮书)阅读笔记

操作系统概念(黑皮书)阅读笔记

进程和内存管理部分章节

  • 导论:

    • 操作系统类似于政府,其本身不能实现任何有用功能,而是提供一个方便其他程序执行有用工作的环境

      个人理解:os是government的作用,有着最高权限,去管理和分配资源,有效且公平

    • 计算机系统的根本目的是,执行用户程序并更容易解决用户程序。控制和分配I/O设备资源的共同功能被组成一个软件模块:os

    • os是一直运行在计算机上的程序(内核)

    • 除内核外,还有两类程序:

      1. 系统程序:与系统运行有关,但不是内核的一部分

      2. 应用程序:与系统运行无关的其他程序

        个人理解:系统程序是编译器、链接器那种性质的,但不是os;应用程序就是除开系统程序和os

    • os的运行:

      • 计算机开机后,先加载位于只读内存ROM上的引导程序,在通过引导程序去定位os内核并加载到内存,一旦内核加载到内存并执行,它就开始为系统和用户提供服务,除了内核,系统程序也提供了一些服务,他们在启动时加载到内存成为系统后台程序。一旦这个阶段完成,系统就完全启动了,等待事件发生
      • 事件发生通常硬件或软件的中断来通知。
        • 硬件通过系统总线发送信号到CPU,来触发中断
        • 软件可通过执行系统调用,来触发中断
    • CPU被中断时,它停止正在做的是事情,立即转到固定位置(中断服务程序的开始地址),执行该中断服务程序结束,再去重新执行中断的计算

    • 存储结构:

      • 内存,也称随机访问内存(Random Access Memory, RAM),通常为动态随机访问内存(DRAM)

        个人理解:内存中的数据就是随机分布并不连续,所以是随机访问

      • 只读内存(Read Only Memory, ROM),数据不可修改

      • 内存特点:易丢失,掉电丢失数据。但是ROM不是这样,ROM已经固化在内存上了

      • 外存,数据持久化

    • I/O结构:

      • 每个设备控制器管理一系列特定类型的设备
      • os为每个设备控制器提供了设备驱动程序
    • os是中断驱动的,事件是由中断或陷阱(或异常)引起的

      • 陷阱(或异常)是一种软件生成的中断,或源于出错,或源于用户程序的特定请求
    • 双重模式与多重模式的执行:

      • 为确保os的正确运行,必须区分操作系统代码和用户代码的执行
      • 用户模式和内核模式:
        • 计算机硬件可以通过模式位(mode bit)来表示当前模式:内核模式(0)和用户模式(1)
        • os执行用户应用时,系统处于用户模式,当用户通过系统调用,请求操作系统服务时,系统必须从用户模式切换为内核模式
    • 进程管理:

      • 执行中的程序称为进程
      • 程序本身不是进程,程序是被动实体,进程是主动实体
      • 进程是系统的工资单元。系统由多个进程组成,其中有操作系统进程和用户进程。所有进程并发执行。
    • 内存管理:

      • 内存是以一个大的字节数组
      • 如果CPU需要执行指令,那么这些数据必须首先通过CPU的IO调度从硬盘传到内存
      • 为了改进CPU的利用率和用户的计算机响应速度。计算机在内存中保留了多个程序,这就需要内存管理
    • 存储管理:

      • 操作系统对存储设备的物理属性进行了抽象,并定义了逻辑单元,即文件( File)。os映射文件到物理媒介,并通过存储设备来访问文件
  • 操作系统结构:

    • 用户与os的界面:命令解释程序和图形用户界面(GUI)

      • 有的os内核就包括命令解释程序。解释程序称为Shell(外壳),将用户输入的命令转换为机器指令
      • GUI消耗资源更多,系统更复杂,bug也更多
    • 系统调用提供os服务接口.这些API通常以c 、 cpp 、汇编写的

      • 开发人员根据API来设计程序
      • 系统调用大致分为六大类:
        • 进程控制、文件管理、设备管理、信息维护、通信、保护
    • 随着内核功能越来越多,内核变得更大和难以管理,采用微内核技术对内核进行模块化,即从内核中删除所有不必要的部件,将他们当作系统级与应用级的程序来实现,使得内核变小

    • 微内核的主要功能是为客户端程序和运行在用户空间的各种服务提供通信,通信是通过消息传递来提供的

    • 优点:便于拓展os,更安全,便于移植

    • 缺点:增加系统功能的开销,微内核性能受损

    • 个人理解:把很多原来在内核态运行的服务放出去了,导致调用时频繁切换状态

  • 进程

    • 现代os允许加载多个程序到内存,以便并发执行。这些需求导致进程这个概念的产生,进程即为执行中的程序

    • 程序本身不是进程。程序是被动实体。如存储在磁盘上的包含一系列指令的文件(可执行文件)

    • 而进程是活动实体。当一个可执行文件被加载到内存时,这个程序就成为进程

    • 进程是执行中的程序实体(这话不一定准确)

    • 进程是os进行资源分配和调度的基本单位

    • os中的每个进程采用进程控制块(Process Control Block, PCB)表示

      • PCB保存一系列信息,进程状态、进程编号、pc、寄存器、内存界限、打开文件列表。。。。。
      • PCB存在一个双向链表
      • 进程的上下文采用进程PCB表示
    • 分时系统的目的是在进程之间快速切换CPU,以便用户在程序运行时能与其交互

    • 进程在进入系统时,会被加入作业队列(job queue)

    • 驻留在内存中的,就绪的,等待运行的进程保存在就绪队列上,这个列表,通常用链表实现

    • 等待特定IO设备的进程列表,称为设备列表

    • 上下文切换的时间是纯粹的开销,在这个过程中,CPU没有做任何有用的工作

    • 大多数OS对进程的识别采用唯一的进程标识符(process identifier ,pid),通常是一个整数值。

    • 通过pid可以访问内核中的进程的各种属性

    • 进程间通信:

      1. Soket
        • Socket为通信的端点。通过网络通信的每对进程需要一对Socket,即每个进程各一个Socker
        • 每个Socket由 ip 和端口组成
        • 使用Socket通信,常用且高效,属于是分布式进程之间的一种低级形式的通信。因为通信进程之间交换的是无结构的字节流,客户端和服务器程序需要自己加上数据结构
      2. RPC
      3. 管道
  • 多线程编程:

    • 每个线程是CPU使用的一个基本单元

    • 线程包括线程ID,pc,寄存器组和堆栈。它与同一进程的其他线程共享代码段、数据段和os其他资源

    • 一个进程一般具有多个线程,那么进程能同时执行多个任务

    • 一个进程为什么要创建多个线程?

      1. OS创建多个进程比一个进程中创建多个线程开销大
      2. 进程间通信比线程间通信更复杂
    • 优点:

    • 响应性:如果一个交互程序采用多线程,那么即使部分阻塞或执行冗余操作,它仍然可以继续执行,从而增加对用户的响应速度

    • 资源共享:进程只能通过共享内存和消息传递之类的技术共享资源。而线程默认共享它们所属进程的内存和资源

    • 经济:进程创建所需的内存和资源分配非常昂贵

    • 可伸缩性:对于多处理器体系结构,多线程的优点更大,因为线程可在多处理器核上并行运行

    • 多线程模型:

      • 用户线程:位于内核之上,它的管理无需内核支持
      • 内核线程:由OS来直接支持与管理
  • 进程调度:

    • 调度程序是一个模块,用来将CPU控制权交给由短期调度程序选择的进程。

      • 功能包括:
        • 切换上下文
        • 切换到用户模式
        • 跳转到用户模式的合适位置,以便重启程序
    • 不同的调度算法具有不同的特点

    • 最简单的CPU调度算法是先到先服务(First - Come First - Served, FCFS)调度算法。先请求CPU的进程首先分配到CPU,通过FIFO队列简单实现

      • FCFS调度算法是非抢占的

      • 优点:实现简单

      • 缺点:平均等待时间往往很长

    • 最短作业优先(Shortest - Job - First, SJF)调度算法将每个进程与其下次CPU执行的长度关联起来。当CPU空闲时,它会被赋给具有最短CPU执行的进程

    • SJF算法是最优的,因为平均等待时间最小(CPU更忙碌)

    • SJF调度经常用于长期调度。对于批处理系统的长期调度,可以将用户提交作业指定的进程时限作为长度

    • SJF算法不能在短期CPU调度上加以实现,没法知道下次CPU执行的长度

    • FCFS调度算法是非抢占的或抢占式

    • 优先级调度算法

      • 优先级调度算法是非抢占的或抢占式
      • 它的主要问题是无穷阻塞或饥饿问题
      • 饥饿的解决方案之一是老化,就是说逐渐增加等待很长时间的优先级
    • 轮转(Round - Robin)调度算法专门为分时系统设计

      • 将一个时间单元(10ms ~ 100ms)定义为时间片。就绪队列作为循环队列,为每一个进程分配不超过一个时间片的CPU执行
      • 时间片一到,就会中断OS,进行上下文切换
      • RR调度的平均等待时间通常较长
    • 多级队列调度算法将就绪队列分成多个单独队列

      • 根据进程属性,如内存大小,进程优先级,进程类型等,一个进程永久分到一个队列。每个队列有自己的调度算法
      • 每个队列与更低层队列相比有绝对的优先
      • 缺点:可能存在饥饿问题
      • 允许进程在队列之间迁移
    • 之前讨论的是单处理器的调度问题,如果多个CPU,则负载均衡成为可能,但调度就更复杂

    • 多处理器调度:

      • 非对称多处理:
        • 让一个CPU去处理所有调度决定、IO处理以及其他系统活动,其他CPU只执行用户代码
        • 这样,因为只有一个CPU访问系统数据结构,减少了数据共享的需要
      • 多对称处理(SMP):
        • 每个CPU关系平等
        • 对SMP来说负载平衡很重要
    • 处理器亲和力:

      • 大多数OS避免将一个进程从一个cpu移到另一个cpu,而是试图让它始终运行在一个cpu上
      • 即一个进程对它运行的处理器具有亲和力
      • 个人理解:迁移进程,那么在原先CPU缓存中的数据还要删除和迁移,麻烦耗资源,所以要避免
    • 负载平衡:

      • 分为推迁移和拉迁移
      • 这两个迁移就是方向不一样,高负载CPU到低负载CPU就是推,反之就是拉
      • 在负载平衡中二者是并行实现
    • 实时CPU调度:

      • 软实时
      • 硬实时
    • 延迟:

      • 中断延迟
      • 调度延迟
    • 用于实时OS的调度程序应支持抢占的、基于优先级的算法

  • 同步:

    • 每个进程在执行一段代码可能修改公共变量,那这段代码称为临界区

      • 不能有两个进程在它们的临界区共同执行
    • 硬件同步

      • 基于加锁为前提,通过锁来保护临界区。通过硬件指令来解决临界区问题
    • 软件同步

      • 最简单的是使用互斥锁,防止竞争条件

        • 一个进程在进入临界区的时候得到锁,退出临界区的时候释放锁
        • 忙等待:当一个进程在临界区中,任何其他进程在进入临界区必须不断循环判断。这种互斥锁也叫自旋锁,进程不断旋转,等待锁变得可用
        • 忙等待浪费CPU周期,优点是没有切换上下文
      • 信号量

        • 一个信号量S是一个整形变量。它除了初始化只能通过两个标准原子操作:wait()和signal()来访问

        • wait()最初称为P原语(测试)减一

        • siganl()最初称为V原语(增加)加一

        • OS通常区分技术信号量与二进制信号量

        • 二进制信号量类似于互斥锁

        • 计数信号量可以用于控制访问具有多个实例的某种资源。信号量的初始值为可用资源数

        • 当进程需要使用资源时,对信号量执行wait()操作

        • 进程释放资源时,再对信号量执行signal()操作

        • 多个进程无限等待一个事件,而该事件只能由这些等待进程之一来产生。这种状态称为死锁

        • 内核数据通常是用保护的,较高优先级的进程不得不等待较低优先级的进程用完资源

        • 经典同步问题:

          1. 有界缓存问题:
          2. 哲学家就餐:
  • 死锁:

    • 如果所申请的资源被其他进程占有,那么该等待等待进程有可能再也无法改变状态。这种情况称为死锁
    • 多进程对共享资源的竞争可能导致死锁
    • 系统中可能产生死锁的四个条件:
      • 互斥:这个资源一次只能被一个进程使用
      • 占有并等待:一个进程占有至少一个资源,并等待另一个资 源 ,而该资源被其它进程所占有
      • 非抢占:资源不能被抢占,只能自己资源释放
      • 循环等待
    • 死锁恢复
      • 中止一个或多个进程来打破循环等待
      • 从一个或多个死锁进程那里抢占一个或多个资源
  • 内存管理:

    • 内存由一个很大的字节数组来组成,每个字节都有各自的地址(即内存地址)

    • CPU根据PC的值从内存中提取指令,这些指令可能引起对特定内存地址的额外加载与存储

    • 首先需要确保每个进程都有一个单独的内存空间,单独的空间才能保障不互相影响。

    • 需要确定一个进程可以访问的合法地址的范围,且确保该进程只能访问这个合法地址

    • 通过两个寄存器,通常为基地址和界限地址。

      • 基地址寄存器保存的时最小的合法的物理内存地址。
      • 界限寄存器保存的是范围的大小,也就是偏移量
    • 内存空间保护的实现是通过CPU硬件对在用户模式下产生的地址与寄存器的保存的地址比较来完成的

    • 大多数系统允许用户进程放在物理内存中的任意位置

    • 源程序中的地址通常是用符号表示

    • 编译器将这些符号地址绑定到可重定位的地址(如:“从本模块开始的第14字节”)

    • 链接程序或加载程序再将这些可重定位的地址绑定到绝对地址(如324312)

    • 每次绑定都是从一个地址空间到另一个地址空间的映射

    • 指令和数据绑定到存储器地址可在沿途的任何一步中进行

    • 逻辑地址:CPU生成的地址称为逻辑地址

      • 个人理解:代码加载运行时的变量的地址
      • 本书中,逻辑地址和虚拟地址
    • 虚拟地址到虚拟地址的映射是由MMU内存管理单元

    • 不连续内存分配:

      • 分段:

        • 根据段号去段表查询界限位置和基地址
      • 分页:

        • 避免了外部碎片
        • 分页就是将内存分成固定大小的块
        • 根据页码去页表查询基地址和偏移量,有TCL就先查TCL(缓存)
        • 分页优点之一是可以共享内存。多个分页可以指向同一块内存地址
  • 虚拟内存管理:

    • 虚拟内存将用户逻辑内存与物理内存分开

    • 虚拟内存允许执行进程不必完全处于内存

    • 允许进程轻松实现共享文件和内存

    • LRU算法(Least - Recent - Used)最近最少使用

相关文章:

操作系统概念(黑皮书)阅读笔记

操作系统概念(黑皮书)阅读笔记 进程和内存管理部分章节 导论: 操作系统类似于政府,其本身不能实现任何有用功能,而是提供一个方便其他程序执行有用工作的环境 ​ 个人理解:os是government的作用&#xff0…...

matlab gui下的tcp client客户端编程框架

GUI界面 函数外定义全局变量 %全局变量 global TcpClient; %matlab作为tcpip客户端 建立连接 在“连接”按钮的回调函数下添加以下代码: global TcpClient;%全局变量 TcpClient tcpip(‘192.168.1.10’, 7, ‘NetworkRole’,‘client’); %连接到服务器地址和端…...

Matplotlib : Python 的绘图库

Matplotlib 是一个 Python 的绘图库,广泛用于生成各种静态、动态、交互式的图表。它基于 NumPy,一个用于科学计算的 Python 库。Matplotlib 可以用于生成出版质量级别的图表,并且提供了丰富的定制选项,以适应不同用户的需求。以下…...

数据编织 VS 数据仓库 VS 数据湖

目录 1. 什么是数据编织?2. 数据编织的工作原理3. 代码示例4. 数据编织的优势5. 应用场景6. 数据编织 vs 数据仓库6.1 数据存储方式6.2 数据更新和实时性6.3 灵活性和可扩展性6.4 查询性能6.5 数据治理和一致性6.6 适用场景6.7 代码示例比较 7. 数据编织 vs 数据湖7.1 数据存储…...

CSS(十一)——CSS分组和嵌套,尺寸(Dimension)

CSS 分组 和 嵌套 选择器 分组选择器 举个例子,多个标签有同一个样式,就可以不一个一个分开写,使用分组选择器 比如: h1 {color:green; } h2 {color:green; } p {color:green; } 就可以写为: h1,h2,p {color…...

必备神器!三款优秀远程控制电脑软件推荐

嘿,各位职场小伙伴们,今儿个咱们来聊聊个挺实用又带点“科技范儿”的话题——电脑远程控制那点事儿。作为刚踏入职场不久的新人,我深刻体会到,在这信息爆炸的时代,掌握几招远程操作的技能,简直就是给自个儿…...

关于正运动学解机器人手臂算法

机器人正运动学是机器人学的一个分支,研究机器人的运动和位置之间的关系。它通过解析机器人的结构和关节参数,以及给定的关节角度,来计算机器人的末端执行器的位置和姿态。 机器人正运动学算法通常使用DH(Denavit-Hartenberg&…...

MySQL 约束 (constraint)

文章目录 约束(constraint)列级约束和表级约束给约束起名字(constraint)非空约束(no null)检查约束(check)唯一性约束 (unique)主键约束 (primary key)主键分类单一主键复合主键主键自增 (auto_increment) 外键约束外什…...

用python程序发送文件(python实例二十六)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.文件上传 3.1 代码构思 3.2 服务端代码 3.3 客户端代码 3.4 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具…...

最新源支付系统源码 V7版全开源 免授权 附搭建教程

本文来自:最新源支付系统源码 V7版全开源 免授权 附搭建教程 - 源码1688 简介: 最新源支付系统源码_V7版全开源_免授权_附详细搭建教程_站长亲测 YPay是专为个人站长打造的聚合免签系统,拥有卓越的性能和丰富的功能。它采用全新轻量化的界面…...

HTML:lang属性作用

lang作用 用法常见语言代码优点示例结构效果说明分析HTML 基础结构导航栏内容部分总结 扩展 用法 HTML 文档级别: 在 <html> 标签上使用 lang 属性&#xff0c;指定整个文档的语言。 <!DOCTYPE html> <html lang"en"> <head><meta charse…...

Android SurfaceFlinger——纹理的绘制流程(二十八)

在系统开机动画的播放流程中,会从给定的资源文件中加载纹理数据并初始化一个 OpenGL 纹理对象,这里我们就来解析软件模拟纹理的绘制流程。 一、纹理概述 在 Android 的 SurfaceFlinger 系统组件中,纹理(Texture)是一个核心概念,特别是在涉及到图形渲染和显示的过程中。 …...

深入解析Memcached:C#中的应用与实战案例

目录 Memcached简介Memcached的特点Memcached的工作原理Memcached的应用场景Memcached的安装和配置Memcached与C#的集成 引入依赖配置Memcached客户端C#代码示例 存储数据读取数据删除数据深入解析Memcached 数据存储和过期策略分布式架构性能优化实战案例 缓存数据库查询结果实…...

keyring 库

目录 安装 keyring 基本用法 1. 设置密码 2. 获取密码 3. 删除密码 4. 返回当前使用的默认密钥环 5. 列出所有密码 支持的后端 keyring 是一个 Python 库&#xff0c;用于将敏感信息&#xff08;如密码&#xff09;安全地存储在操作系统的密码管理器中。它支持多种平台…...

[css3] 如何设置边框颜色渐变

div {border: 4px solid;border-image: linear-gradient(to right, #8f41e9, #578aef) 1; }参考&#xff1a; 5种CSS实现渐变色边框&#xff08;Gradient borders方法的汇总...

Redux +Toolkit 工具包快速入门

您将学到什么 如何设置并使用 Redux Toolkit 和 React-Redux 先决条件 熟悉ES6 语法和功能了解 React 术语&#xff1a;JSX、State、Function Components 、 Props和Hooks理解Redux 术语和概念 1、基本使用 1.1、安装 Redux Toolkit 和 React- Redux 将 Redux Toolkit 和 Rea…...

【Python数据增强】图像数据集扩充

前言&#xff1a;该脚本用于图像数据增强&#xff0c;特别是目标检测任务中的图像和标签数据增强。通过应用一系列数据增强技术&#xff08;如旋转、平移、裁剪、加噪声、改变亮度、cutout、翻转等&#xff09;&#xff0c;生成多样化的图像数据集&#xff0c;以提高目标检测模…...

实时同步:使用 Canal 和 Kafka 解决 MySQL 与缓存的数据一致性问题

目录 1. 准备工作 2. 将需要缓存的数据存储 Redis 3. 监听 canal 存储在 Kafka Topic 中数据 1. 准备工作 1. 开启并配置MySQL的 BinLog&#xff08;MySQL 8.0 默认开启&#xff09; 修改配置&#xff1a;C:\ProgramData\MySQL\MySQL Server 8.0\my.ini log-bin"HELO…...

WINUI——Microsoft.UI.Xaml.Markup.XamlParseException:“无法找到与此错误代码关联的文本。

开发环境 VS2022 .net core6 问题现象 在Canvas内的子控件要绑定Canvas的兄弟控件的一个属性&#xff0c;在运行时出现了下述报错。 可能原因 在 WinUI&#xff08;特别是用于 UWP 或 Windows App SDK 的版本&#xff09;中&#xff0c;如果你尝试在 XAML 中将 Canvas 内的…...

C语言 | Leetcode C语言题解之第283题移动零

题目&#xff1a; 题解&#xff1a; void swap(int *a, int *b) {int t *a;*a *b, *b t; }void moveZeroes(int *nums, int numsSize) {int left 0, right 0;while (right < numsSize) {if (nums[right]) {swap(nums left, nums right);left;}right;} }...

WPF项目实战视频《二》(主要为prism框架)

14.prism框架知识&#xff08;1&#xff09; 使用在多个平台的MVVM框架 新建WPF项目prismDemo 项目中&#xff1a;工具-NuGet包管理&#xff1a;安装Prism.DryIoc框架 在git中能看Prism的结构和源代码&#xff1a;git链接地址 例如&#xff1a;Prism/src/Wpf/Prism.DryIoc.Wpf…...

【微信小程序实战教程】之微信小程序 WXS 语法详解

WXS语法 WXS是微信小程序的一套脚本语言&#xff0c;其特性包括&#xff1a;模块、变量、注释、运算符、语句、数据类型、基础类库等。在本章我们主要介绍WXS语言的特性与基本用法&#xff0c;以及 WXS 与 JavaScript 之间的不同之处。 1 WXS介绍 在微信小程序中&#xff0c…...

Android中Service学习记录

目录 一 概述二 生命周期2.1 启动服务startService()2.2 绑定服务bindService()2.3 先启动后绑定2.4 先绑定后启动 三 使用3.1 本地服务&#xff08;启动式&#xff09;3.2 可通信的服务&#xff08;绑定式&#xff09;3.3 前台服务3.4 IntentService 总结参考 一 概述 Servic…...

Elasticsearch:Java ECS 日志记录 - log4j2

ECS 记录器是你最喜欢的日志库的格式化程序/编码器插件。它们可让你轻松将日志格式化为与 ECS 兼容的 JSON。ECS 兼容的 JSON 日志记录可以帮我们简化很多分析&#xff0c;可视化及解析的工作。在今天的文章里&#xff0c;我来详述如何在 Java 应用里生成 ECS 相兼容的日志。 …...

MongoDB自学笔记(四)

一、前文回顾 上一篇文章中我们学习了MongoDB中的更新方法&#xff0c;也学了一部分操作符。今天我们将学习最后一个操作“删除”。 二、删除 原始数据如下&#xff1a; 1、deleteOne 语法&#xff1a;db.collection.deleteOne(< query >,< options >) 具体参…...

时序分解 | Matlab基于CEEMDAN-CPO-VMD的CEEMDAN结合冠豪猪优化算法(CPO)优化VMD二次分解

时序分解 | Matlab基于CEEMDAN-CPO-VMD的CEEMDAN结合冠豪猪优化算法&#xff08;CPO&#xff09;优化VMD二次分解 目录 时序分解 | Matlab基于CEEMDAN-CPO-VMD的CEEMDAN结合冠豪猪优化算法&#xff08;CPO&#xff09;优化VMD二次分解效果一览基本介绍程序设计参考资料 效果一览…...

新版海螺影视主题模板M3.1全解密版本多功能苹果CMSv10后台自适应主题

苹果CMS2022新版海螺影视主题M3.1版本&#xff0c;这个主题我挺喜欢的&#xff0c;之前也有朋友给我提供过原版主题&#xff0c;一直想要破解但是后来找了几个SG11解密的大哥都表示解密需要大几百大洋&#xff0c;所以一直被搁置了。这个版本是完全解密的&#xff0c;无需SG11加…...

汽车免拆诊断案例 | 2014 款上汽名爵 GT 车发动机无法起动

故障现象 一辆2014款上汽名爵GT车&#xff0c;搭载15S4G发动机&#xff0c;累计行驶里程约为18.4万km。该车因左前部发生碰撞事故进厂维修&#xff0c;更换损坏的部件后起动发动机&#xff0c;起动机运转有力&#xff0c;但无着机迹象。用故障检测仪检测&#xff0c;发现无法与…...

vue3前端开发-小兔鲜项目-登录功能的业务接口调用

vue3前端开发-小兔鲜项目-登录功能的业务接口调用!这次&#xff0c;正式调用远程服务器的登录接口了。大家要必须使用测试账号密码&#xff0c;才能验证我们的代码。 测试账号密码是&#xff1a;账号&#xff08;xiaotuxian001&#xff09;&#xff1b;密码是&#xff08;1234…...

【Linux】vim编辑器使用详解

目录 一、vim编辑器简介二、 vim编辑器使用指南1.基本操作1.进入与退出2.模式切换 2.命令模式1.移动光标2.选择文本&#xff08;可视模式&#xff09;3.删除文字4.复制粘贴5.替换6.撤销7.注释8.多文件窗口切换 3.底行模式1.列出每行的行号2.跳转到某行3.查找字符4.保存文件5.在…...

手机怎么设置不同的ip地址

在数字化日益深入的今天&#xff0c;智能手机已成为我们生活、工作和学习中不可或缺的设备。然而&#xff0c;随着网络应用的广泛和深入&#xff0c;我们有时需要为手机设置不同的IP地址来满足特定需求。比如&#xff0c;避免网络限制、提高网络安全、或者进行网络测试等。本文…...

SpringBoot读取配置的6种方式

在SpringBoot应用开发中&#xff0c;配置文件是不可或缺的一部分。它们帮助我们管理应用的运行时参数&#xff0c;使得应用的部署和维护变得更加灵活。SpringBoot提供了多种方式来读取配置文件&#xff0c;每种方式都有其适用场景和优缺点。本文将介绍六种常用的SpringBoot读取…...

1.1 openCv -- 介绍

OpenCV(开放源代码计算机视觉库:http://opencv.org)是一个开源库,包含了数百种计算机视觉算法。本文件描述了所谓的OpenCV 2.x API,这是一个本质上基于C++的API,与基于C的OpenCV 1.x API(C API已被弃用,并且自从OpenCV 2.4版本起不再使用“C”编译器进行测试)相对。 …...

探索PostgreSQL的GUI工具:提升数据库管理效率

在当今快速发展的技术世界中&#xff0c;数据库管理是任何软件开发项目的核心部分。PostgreSQL&#xff0c;作为一款功能强大的开源关系型数据库管理系统&#xff0c;因其稳定性、可靠性和高度的可扩展性而广受开发者和数据库管理员的青睐。然而&#xff0c;尽管PostgreSQL自带…...

【从零开始实现stm32无刷电机FOC】【实践】【5/7 stm32 adc外设的高级用法】

目录 采样时刻触发采样同步采样 点击查看本文开源的完整FOC工程 本节介绍的adc外设高级用法用于电机电流控制。 从前面几节可知&#xff0c;电机力矩来自于转子的q轴受磁力&#xff0c;而磁场强度与电流成正比&#xff0c;也就是说电机力矩与q轴电流成正相关&#xff0c;控制了…...

springcloud接入seata管理分布式事务

下载安装包 链接: seata 配置seata-server 文件上传Linux解压 压缩包我放在/usr/local/seata中 tar -zxvf seata-server-2.0.0.tar.gz修改配置文件 设置nacos为注册和配置中心 进入文件夹 cd /usr/local/seata/seata/conf修改application.yml文件 ...... ...... cons…...

Android APP 音视频(02)MediaProjection录屏与MediaCodec编码

说明&#xff1a; 此MediaProjection 录屏和编码实操主要针对Android12.0系统。通过MediaProjection获取屏幕数据&#xff0c;将数据通过mediacodec编码输出H264码流&#xff08;使用ffmpeg播放&#xff09;&#xff0c;存储到sd卡上。 1 MediaProjection录屏与编码简介 这里…...

java中log4j.properties配置文件浅析

Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的&#xff0c;它可按keyvalue格式的设置或xml格式的设置信息。通过配置&#xff0c;可以创建出Log4J的运行环境。 1、配置文件 Log4J配置文件的基本格式如下&#xff1a; #配置根Logger log4j.roo…...

RV1126 Linux 系统,接外设,时好时坏(二)排查问题的常用命令

在 RV1126 Linux 系统中,排查外设连接问题时,可以使用多种命令来诊断和调试。以下是一些常用的命令和工具: 1. 查看系统日志 dmesg: 显示内核环形缓冲区的消息,通常包含设备初始化、驱动加载和错误等信息。 dmesg | grep <设备名或相关关键字>journalctl: 查看系统…...

鸿蒙北向开发 DevEco Studio 4.1 下载安装傻瓜式教程

开篇 由于鸿蒙处于快速发展中,鸿蒙的api快速迭代更新,老版本的DevEco studio无法支持更新版本的api,因此华为官网放弃了老版本的维护.直接从华为开发者官网无法下载老版本,当前华为开发者官网已经推出next版本了 DevEco studio3.1安装教程 上述教程提供的华为开发者官网地址已经…...

pglogical扩展的基本用法介绍

瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;14 文档用途 本文翻译了pglogical扩展的官方文档,介绍了pglogical扩展的各类管理函数及使用限制,详情请看下文. 一、节点管理 节点可以使用以下…...

2024年虚拟主机转移教程

转移网站并不困难&#xff0c;但选择正确的选项和最佳程序才是关键。网站托管服务被视为当今数字世界的基石&#xff0c;全球有18 亿个网站。网站所有者可以通过下载备份、将其上传到新服务器并指向域名来手动转移网站。他们还可以通过新网站托管商的助手请求来移动网站。对于初…...

Python 函数对象和函数调用

Python 函数对象和函数调用 在 Python 中&#xff0c;函数是第一类对象&#xff08;first-class objects&#xff09;。这意味着函数可以像其他对象&#xff08;如整数、字符串、列表等&#xff09;一样被传递、赋值和操作。理解函数对象和函数调用的区别是学习 Python 的关键…...

sql注入的专项练习 sqlilabs(含代码审计)

在做题之前先复习了数据库的增删改查&#xff0c;然后自己用本地的环境&#xff0c;在自己建的库里面进行了sql语句的测试&#xff0c;主要是回顾了一下sql注入联合注入查询的语句和sql注入的一般做题步骤。 1.获取当前数据库 2.获取数据库中的表 3.获取表中的字段名 一、sql…...

淄博网站建设贵不贵

淄博网站建设的价格因各种因素而异&#xff0c;它可能会根据您对网站的需求、功能和设计复杂性等方面的要求而有所不同。虽然淄博网站建设的费用可能因需求的不同而有所变化&#xff0c;但是无论如何&#xff0c;它通常是值得的投资。 首先&#xff0c;对于个人和小型企业来说&…...

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(十)-无人机A2X服务

引言 3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及A2X&#xff08;Aircraft-to-Everything&#xff09;服务的支持。 3GPP TS 23.256 技术规范&#xff1a; 【免费】3GPPTS23.256技术报告-无人机系…...

基于迁移学习的手势分类模型训练

1、基本原理介绍 这里介绍的单指模型迁移。一般我们训练模型时&#xff0c;往往会自定义一个模型类&#xff0c;这个类中定义了神经网络的结构&#xff0c;训练时将数据集输入&#xff0c;从0开始训练&#xff1b;而迁移学习中&#xff08;单指模型迁移策略&#xff09;&#x…...

个性化音频生成GPT-SoVits部署使用和API调用

一、训练自己的音色模型步骤 1、准备好要训练的数据&#xff0c;放在Data文件夹中&#xff0c;按照文件模板中的结构进行存放数据 2、双击打开go-webui.bat文件&#xff0c;等待页面跳转 3、页面打开后&#xff0c;开始训练自己的模型 &#xff08;1&#xff09;、人声伴奏分…...

MFC列表框示例

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 目录 1.示例内容 2.程序步骤 3.运行结果 4.代码全文 1.示例内容 编写一个对话框应用程序CMFC_Li6_4_学生信息Dlg&#xff0c;对话框中有一个列表框&#xff0c;当用户…...

Android TabLayout的简单用法

TabLayout 注意这里添加tab&#xff0c;使用binding.tabLayout.newTab()进行创建 private fun initTabs() {val tab binding.tabLayout.newTab()tab.text "模板库"binding.tabLayout.addTab(tab)binding.tabLayout.addOnTabSelectedListener(object : TabLayout.On…...