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

操作系统启动——前置知识预备

文章目录

  • 1. 理解冯诺依曼体系结构
    • 1.1 简单见一见冯诺依曼
    • 1.2 进一步认识
    • 1.3 为什么一定要有内存的存在?
  • 2. 操作系统
    • 2.1 概念
    • 2.2 设计OS的目的
    • 2.3 OS的核心功能
    • 2.4 如何理解“管理”二字?(小故事版)
    • 2.5 系统调用和库函数概念
  • 3. 进程简述
    • 3.1 基本概念
    • 3.2 描述进程 —— PCB
    • 3.3 task_struct
    • 3.4 查看进程
    • 3.5 第一个系统调用函数
    • 3.6 创建进程
    • 3.7 进一步探索
      • 3.7.1 三个问题:
    • 3.8 补充

1. 理解冯诺依曼体系结构

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器。这些计算机底层的硬件大多遵循冯诺依曼体系结构,那么冯诺依曼体系结构到底是什么呢?为什么要遵循冯诺依曼设计出来的体系结构,而不用其他体系结构呢?

1.1 简单见一见冯诺依曼

在这里插入图片描述
计算机是由一个个的硬件设备组成的,冯诺依曼体系结构下主要是这几种:

  • 输入设备:键盘、鼠标、话筒、摄像头……
  • 输出设备:显示器,打印机、投影仪、绘图仪……
  • 中央处理器(CPU) = 运算器 + 控制器
  • 存储器,也就是内存

其中输入与输出设备称为外设,存储器也叫内存,而外存也就是磁盘之类的。

1.2 进一步认识

我们知道,软件运行前,都是在磁盘中的,而软件运行则必须被加载到内存中,因为上述结构规定,CPU获取,写入只能从内存中来进行。此外软件运行,一般都有输出结果,也会对磁盘进行写入操作。

  • 什么叫软件运行?—— 即CPU执行我们的代码,访问我们的数据!
  • 什么叫加载与写入?—— 可以看成是一种IO(Input/Output)操作,也就是数据从一个设备“拷贝”到另一个设备。从中也可看出体系结构的效率是由设备的拷贝效率来决定的。
  • 怎么理解IO?—— 要理解IO得站在内存的角度来思考,比如说我是一个内存,软件运行会被加载,此时我接收输入设备的数据,这个过程就叫做Input。软件运行中会对磁盘写入和对显示屏等设备进行输出数据,那这个过程就叫Output。

格外强调:

    1. 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)。
    1. 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
    1. 即CPU在数据层面只和内存打交道,而外设只和内存打交道。也就是说所有设备都只能直接和内存打交道。

1.3 为什么一定要有内存的存在?

如下图,我们去掉内存后的体系结构是这样的:
在这里插入图片描述
似乎这样来看,我们自己设计出来的体系结构也不是不行。首先确实是可以这样设计的,但缺点是成本太大了。我们知道CPU的速度是最快的,其次是内存,最后是磁盘。因为CPU内部有寄存器这个硬件元件,在冯诺依曼体系下,它能够很有余力的去往内存缓冲区读取数据然后返回给CPU进行处理,而在我们这个体系结构下,为了应对外设与CPU之间的速度不对等,那我们只能把外设设备全部用寄存器给重组一遍,妥妥土豪行为。具体的,计算机世界里的存储结构大致呈现金字塔状,如下图所示:
在这里插入图片描述
给出结论: 当代计算机选择遵循冯诺依曼体系结构,实则是一种性价比行为的表现。也就是说当代计算机,是性价比的产物,正式因为有了性价比,才有计算机走入寻常人家,才有了操作系统以及与其相关生态的发展,才有了如今的互联网时代!

2. 操作系统

2.1 概念

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:

  • 内核(进程管理,内存管理,文件管理,驱动管理)
  • 其他程序(例如函数库,shell程序等等)

如下图所示:
在这里插入图片描述
换而言之,操作系统是一个基本的程序集合,是一款进行软硬件管理的软件

2.2 设计OS的目的

  • 对下,与硬件交互,管理所有的软硬件资源(这不是目的,是OS的手段)
  • 对上,为用户程序,即应用级程序,提供一个良好的执行环境(这才是OS的目的)

在这里插入图片描述
上图理解:

    1. 计算机软硬件体系结构是个层状结构,数据只能在层与层之间相邻流动,不能一下跨越多层
    1. 访问操作系统必须使用系统调用——其实就是函数,只不过是系统提供的
    1. 在我们的程序中,只要你判断它访问了硬件,那么它必然贯穿整个软硬件体系层
    1. 库(如lib库)可能在底层封装了系统调用

2.3 OS的核心功能

在整个计算机软硬件体系架构中,操作系统的定位就是:一款纯正的搞“管理”的软件

2.4 如何理解“管理”二字?(小故事版)

以学生,辅导员,校长之间的管理为例。在此例中,校长类似于管理者,学生类似于被管理者。从计算机的角度来看,校长是操作系统,辅导员是驱动程序,学生则是各个硬件。那么故事正式开始了。

你是一名A大学的校长,你的日常工作就是管理这个校园内的所有学生,但学生的数量是非常多的,你不能挨个去访问每个学生的情况,所以你招募了一些打工仔,给了他们一些职位,这个职位就叫辅导员。而你要做的事就是针对学生情况给辅导员们开会,你在会议上去颁布和通过一系列有关学生的文件,也就是说,你对某些事件拥有决策权。而辅导员们要做的就是根据你在会议上下发的文件去具体落实到学生中,也就是说辅导员对事件具有执行权。某天,你想对学生的学习情况有个基本的了解,此时你下发文件,要求辅导员们去统计各个学生的学习情况。然后,你让辅导员们把统计上来的数据都给放到excel表格中,表格中一行就是一个学生,分别顺序的对应者学生的各科情况。此时你对学生的管理就变成了对excel表格的管理,而这个过程可以抽象成先描述,再组织。也就是说,你发的文件是一个描述的过程,描述了你想要做的事以及想要这件事达到的效果是什么,而辅导员们根据下发的文件去统计学生的学习情况并填写在excel表格中的这一过程,称之为组织过程。于是你通过了下发文件这一先描述的过程,然后再让底下打工人具体实施这一文件内容的再组织的过程,你最终达到了自己想要的结果。
进一步,由现实世界向计算机世界靠拢,此时你依旧是A大学的校长,只不过你在当选校长之前是学习计算机的,你特别精通C语言,你发现excel表格固然很好,但这终究是别人开发的程序,你担心你们学校清北的料子被别人知道然后被挖走,于是你决定不用excel表格来管理学生数据,此时你发现C语言中有个结构体类型似乎非常适合管理学生数据,你只需先创建一个结构体类型,然后在结构体内部设置变量诸如:学生的姓名、学号以及各科的成绩等,此时你再根据辅导员们收集上来的数据,挨个去创建学生结构体对象,为了方便快速找到下一个学生对象,你在结构体内部还设置了一个指向下一个学生对象的结构体指针next,于是你用了一个链表把各个学生之间给链接了起来。最后你对学生的管理,就变成了对链表的管理。这个过程也可以抽象成先描述,再组织。你在设计结构体时就是一个 “先描述” 的过程,然后具体创建学生结构体对象,再把他们链接起来,就是一个 “再组织” 的过程。

总结: 无论在现实生活,还是在计算机世界里,你去做什么事都是 “先描述,再组织” 的过程。在计算机中,是由操作系统去实施管理硬件功能:

    1. 先描述起来,用struct结构体
    1. 再组织起来,用链表或其他高效的数据结构

2.5 系统调用和库函数概念

    1. 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用
    1. 系统调用在使用上很基础,需要去了解操作系统,对用户的要求比较高。所以,一些人就把部分的系统调用进行适度封装,从而形成了库函数。有了库,就很有利于更上层用户或者开发者进行二次开发。
    1. 操作系统要向上提供对应的服务,是通过系统调用的方式来提供的。换个角度,用户使用操作系统,只能是通过系统调用接口的方式来使用。也就是说,操作系统不相信任何的人,这同时也是操作系统对自身的一种保护。

3. 进程简述

3.1 基本概念

  • 课本概念:程序的一个执行实例,正在执行的程序等
  • 内核观点:担当分配系统资源(CPU时间,内存)的实体

3.2 描述进程 —— PCB

PCB的概念:(先描述)

  • 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
  • 术语上称之为PCB(process control block),Linux操作系统下的PCB是:task_struct。

task_struct —— PCB的一种 (在具体的操作系统下,具体的再组织)

  • 在Linux中描述进程的结构体叫做task_struct。
  • task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的属性信息。

如下图:
在这里插入图片描述
总结: 进程 = 内核数据结构对象 + 自己的代码和数据;
具体来说,进程 = PCB(task_struct) + 自己的代码和数据

3.3 task_struct

内容分类:

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。
  • 状态: 任务状态,退出代码,退出信号等。
  • 优先级: 相对于其他进程的优先级。
  • 程序计数器: 程序中即将被执行的下⼀条指令的地址。
  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
  • 上下文数据: 进程执行时处理器的寄存器中的数据。
  • I∕O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
  • 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
  • 其他信息。

具体以链接形式给出:task_struct

组织进程

Linux中进程的组织是依靠双向链表,把一个个的PCB(task_struct)给管理起来的。

在这里插入图片描述

3.4 查看进程

    1. 进程的信息可以通过/proc的系统文件夹来查看
      在这里插入图片描述
      比如说我还可以具体的查看PID为1的进程内容:
      在这里插入图片描述
    1. 利用工具来查看
  • top:可以实时、动态的查看当前进程的情况;
  • ps: 可以用来查看系统当前的进程状态,ps查看的进程信息是当前的一个快照,是静态的。

top:
在这里插入图片描述
ps:
在这里插入图片描述

从上述现象中,我们不难发现,其实系统中的指令和工具的运行,实质上,就是创建了一个进程。也从侧面说明了进程是操作系统进行资源分配的一个基本的单位。

3.5 第一个系统调用函数

  • 进程id(pid)
  • 父进程id(ppid)
  • 我们可以通过一个系统调用函数来获取进程的标示符,即getpid()。现在我们用man getpid 命令来查看一下它的使用。
    在这里插入图片描述
    现在我们已经了解了它如何使用,话不多说,直接打开vim 写下如下代码,看看运行效果。
    在这里插入图片描述
    运行效果:
    在这里插入图片描述
    再运行多次:
    在这里插入图片描述
    发现每次运行时,子进程的pid一直呈现递增的趋势,但其所对应的父进程却一直没变,那么它的父进程到底是谁呢?仔细阅读的小伙伴已经发现了,父进程的pid与ps运行下的其中一个bash进程的pid完全一样,如下图:
    在这里插入图片描述

直接给出结论:实际上,我们运行shell程序与远端服务器进行联系时,所呈现出了的命令行窗口也是一个进程,它就是bash进程。bash是一个命令行解释器,可以说,在命令行窗口下,我们大多数自己运行的程序,其父进程都是bash进程,而对应程序的进程,也就是子进程,可以说是由父进程进行创建而来的,怎么理解父进程创建子进程呢?接着看。

3.6 创建进程

可以用系统调用函数——fork,来自主创建进程,先来认识下fork。
在这里插入图片描述
看看fork的返回值:
在这里插入图片描述
编写如下代码:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
// 创建进程,并查看
int main()
{int ret = fork();printf("我是一个进程,我的pid是:%d!,我的返回值是:%d\n", getpid(), ret);return 0;
}

运行:
在这里插入图片描述

提出问题: 为什么程序中只有一条输出语句,也并没有循环控制语句,结果到头来却输出了两句呢?

解答:其实新创建的子进程没有自己的代码和数据,它被父进程创建出来,它是与父进程共享同一份数据和代码,如下图:

在这里插入图片描述
fork调用前只有父进程,调用后,子进程被创建,由于程序执行的顺序性,当子进程被创建时,此时产生了进程分流,也就是说在fork语句后,父与子进程各自执行他们的后续代码,也就是共享的那部分代码,此时两个进程就会各自分别执行printf语句,各自进行输出,最终呈现两个输出语句。

在这里插入图片描述

3.7 进一步探索

如下代码:

int main()
{int ret = fork();if (ret < 0) {perror("创建进程失败");return 1;}else if (ret == 0) {   //childwhile (1){sleep(1);printf("I am child : %d!, ret: %d\n", getpid(), ret);}}else {   //fatherwhile (1){sleep(1);printf("I am father : %d!, ret: %d\n", getpid(), ret);}}return 0;
}

运行:

在这里插入图片描述

3.7.1 三个问题:

  1. 为什么fork要给父子返回各自不同的返回值?
  2. 为什么一个函数会被返回两次?
  3. 为什么一个变量,既会等于0,又会大于0?从而导致if else 两个分支语句同时成立?

解答:

    1. 众所周知,父进程是可以创建子进程的,甚至创建多个子进程,那么父与子之间的对应关系就是 1:n 的数量关系。实质上这样设计只是为了更好的区分父子进程,并由父进程记录子进程以便后续操作。子进程返回0意思是只需要标记子进程被成功创建了,而父进程返回子进程的pid,可以直接用于后续操作(如等待子进程结束、向子进程发送信号等)。
    1. 依旧是上述进程分流与共享代码导致的,如下所示:
      在这里插入图片描述
    1. 我们之前说,子进程被新创建时会与父进程共享代码与数据。记住,这只限于新创建时,当后续代码中,如果子进程对父进程中的某个数据进行了修改,此时它们之间这个数据就不是数据共享了,但代码依旧共享,因为代码只读,具有常量性。换而言之,把父子任何一方,去进行了数据修改,OS会把被修改的数据在底层拷贝一份,让对应的目标进程去修改这个拷贝!这种策略叫做写时拷贝。

得出结论:进程间都是独立的,即进程具有独立性。

写时拷贝详见C++系列中的string类的深度剖析下与其模拟实现

3.8 补充

  • 实质上,我们执行的所有的指令,工具,自己的程序,运行起来,全部都是一个进程!
  • 有了进程的创建,自然也有进程的销毁,比如你写了个死循环程序在命令行窗口一直跑,你可以直接使用Ctrl+c来杀掉进程,也可以使用kill命令加上对应进程的pid来杀死进程

Ctrl+c方式:

在这里插入图片描述

kill命令方式:

在这里插入图片描述

  • 关于进程中的cwd与exe,如下:
    在这里插入图片描述
    当我们把在右边xshell下执行rm命令删除exe文件后:
    在这里插入图片描述

相关文章:

操作系统启动——前置知识预备

文章目录 1. 理解冯诺依曼体系结构1.1 简单见一见冯诺依曼1.2 进一步认识1.3 为什么一定要有内存的存在&#xff1f; 2. 操作系统2.1 概念2.2 设计OS的目的2.3 OS的核心功能2.4 如何理解“管理”二字&#xff1f;(小故事版)2.5 系统调用和库函数概念 3. 进程简述3.1 基本概念3.…...

Unity中VFX烟雾特效与场景中的碎片物体重叠时闪烁问题

双击Unity项目中vfx特效文件&#xff0c;选中VFX编辑器中的Output Particle节点&#xff0c;看右侧的Inspector窗口 这个图的BlendMode是Alpha, 意味着渲染队列是3000要关闭Z Write Mode, 其值设置为off最后一个属性Sorting Priorty 设置为50&#xff0c;意味着渲染队列在3000…...

[RN]React Native知识框架图详解

React Native 是一个基于 React 的跨平台移动应用开发框架。以下是 React Native 知识框架图的详细解析&#xff1a; React Native 知识框架 1. 核心概念 JSX&#xff1a;JavaScript XML 语法&#xff0c;类似 HTML 的语法&#xff0c;用于描述 UI 组件。组件&#xff08;Com…...

每日OJ_牛客_游游的字母串_枚举_C++_Java

目录 牛客_游游的字母串_枚举 题目解析 C代码 Java代码 牛客_游游的字母串_枚举 游游的字母串 描述&#xff1a; 对于一个小写字母而言&#xff0c;游游可以通过一次操作把这个字母变成相邻的字母。a和b相邻&#xff0c;b和c相邻&#xff0c;以此类推。特殊的&#xff0…...

解锁MacOS开发:环境配置与应用开发全攻略

✨✨✨这里是小韩学长yyds的BLOG(喜欢作者的点个关注吧) ✨✨✨想要了解更多内容可以访问我的主页 小韩学长yyds-CSDN博客 目录 引言 一、MacOS 开发环境配置 &#xff08;一&#xff09;必备工具安装 &#xff08;二&#xff09;集成开发环境&#xff08;IDE&#xff09;选…...

IDEA 2025最新版2024.3.3软件安装、插件安装、语言设置

IntelliJ IDEA是一款由JetBrains公司开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于Java语言的开发&#xff0c;它通过提供丰富的功能如智能代码补全、代码分析、版本控制集成等来提高开发效率。 IDEA有社区版和专业版两个版本&#xff0c;社区版是免费开…...

leetcode 0018 四数之和-medium

1 题目&#xff1a;四数之和 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#x…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_add_dump

ngx_conf_add_dump 定义在src\core\ngx_conf_file.c static ngx_int_t ngx_conf_add_dump(ngx_conf_t *cf, ngx_str_t *filename) {off_t size;u_char *p;uint32_t hash;ngx_buf_t *buf;ngx_str_node_t *sn;ngx_conf_dump_t *cd;has…...

家政预约小程序用例图分析

在和客户进行需求沟通的时候&#xff0c;除了使用常规的问答的形式&#xff0c;我还使用图形化工具更深入的沟通。比如借助UML的用例图来开展系统分析&#xff0c;并且按照角色详细拆解了家政预约小程序的各个用例。在分析阶段思考的越多&#xff0c;沟通的越多&#xff0c;在系…...

unity学习62,尝试做第一个小游戏项目:flappy bird

目录 学习参考 1 创建1个unity 2D项目 1.1 2D项目模板选择 1.1.1 2D(built-in-Render pipeline) 1.1.2 universe 2D 1.1.3 这次选择 2D(built-in-Render pipeline) 1.2 创建项目 1.2.1 注意点 1.2.2 如果想修改项目名 2 导入美术资源包 2.1 下载一个flappy bird的…...

Windows10下本地搭建Manim环境

文章目录 1. 简介2. Python环境3. uv工具4. Latex软件5. 安装Manim数学库6. 中文支持参考 1. 简介 manim是个一科普动画的库&#xff0c; 本文用到的是社区版本。 2. Python环境 这个不用多说&#xff0c;可以参考其他的文章。记得把pip也安上。 3. uv工具 上面的pip是老…...

zabbix“专家坐诊”第277期问答

在线答疑:乐维社区 问题一 Q&#xff1a;这个怎么解决呢&#xff1f; A&#xff1a;缺少这个依赖。 Q&#xff1a;就一直装不上。 A&#xff1a;装 zabbix-agent2-7.0.0-releasel.el7.x86 64 需要前面提示的那个依赖才可以装。 问题二 Q&#xff1a;大佬&#xff0c;如果agen…...

解决git clone下载慢或者超时问题

在网上找了很多办法&#xff0c;直接最简单的使用镜像网站下载。 国内可用的镜像网站有&#xff1a; https://github.com.cnpmjs.org # 服务器位于香港https://gitclone.com # 服务器位于杭州https://doc.fastgit.org # 服务器位于香港 例如&#xff1a;将 git clone https:…...

机器学习:强化学习的epsilon贪心算法

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是一种机器学习方法&#xff0c;旨在通过与环境交互&#xff0c;使智能体&#xff08;Agent&#xff09;学习如何采取最优行动&#xff0c;以最大化某种累积奖励。它与监督学习和无监督学习不同&#xff0c;强调试错…...

MySQL-高级查询

查询处理 排序&#xff08;默认不是按主键排序的&#xff09; order by 字段1[&#xff0c;字段2] [asc|desc] 默认是升序排序也可以指定 select 列表中列的序号进行排序如果是多个字段&#xff0c;那么在上一个字段排序完的基础上排序下一个 限制数量 limit 行数&#xff0…...

NModbus 连接到Modbus服务器(Modbus TCP)

1、在项目中通过NuGet添加NModbus&#xff0c;在界面中添加一个Button。 using NModbus.Device; using NModbus; using System.Net.Sockets; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Docu…...

value_counts()和unique()

我今天发现一个很有意思的问题哈 import scanpy as sc import numpy as npX np.random.randn(10,3) adata1 sc.AnnData(X) adata1.obs["sample"] "H1" print(adata1)X np.random.randn(20,3) adata2 sc.AnnData(X) adata2.obs["sample"] &…...

FinRobot:一个使用大型语言模型进行金融分析的开源AI代理平台

文章目录 前言一、生态系统1. 金融AI代理&#xff08;Financial AI Agents&#xff09;2. 金融大型语言模型&#xff08;Financial LLMs&#xff09;3. LLMOps4. 数据操作&#xff08;DataOps&#xff09;5. 多源LLM基础模型&#xff08;Multi-Source LLM Foundation Models&am…...

示例:在WPF中如何使用Segoe MDL2 Assets图标和使用该图标的好处

一、目的&#xff1a;分享在WPF中如何使用Segoe MDL2 Assets图标和使用该图标的好处 在WPF中使用Segoe MDL2 Assets字体&#xff0c;可以通过设置控件的FontFamily属性来实现。Segoe MDL2 Assets是一个包含许多图标的字体&#xff0c;通常用于Windows应用程序的图标显示。 二、…...

使用UA-SPEECH和TORGO数据库验证自动构音障碍语音分类方法

使用UA-SPEECH和TORGO数据库验证自动构音障碍语音分类方法 引言 原文:On using the UA-Speech and TORGO databases to validate automatic dysarthric speech classification approaches 构音障碍简介 构音障碍是一种由于脑损伤或神经疾病(如脑瘫、肌萎缩侧索硬化症、帕金森…...

容器与虚拟机:云时代的底层架构博弈

容器与虚拟机&#xff1a;云时代的底层架构博弈 在数字化浪潮席卷的当下&#xff0c;云技术已成为企业和开发者不可或缺的基础设施。在云环境中&#xff0c;容器和虚拟机作为两种关键的底层技术&#xff0c;犹如双子星般备受瞩目。它们究竟谁能在这场技术较量中脱颖而出&#x…...

解决android studio(ladybug版本) gradle的一些task突然消失了

今天不知道干了啥&#xff0c;AS&#xff08;ladybug版本&#xff09;右边gradle的task有些不见了&#xff0c;研究了半天解决了&#xff0c;这里记录下&#xff1a; 操作&#xff1a; File -->Settings-->Experimental--> 取消选项“Enable support for multi-vari…...

Wpf-ReactiveUI-Usercontrol交互

文章目录 1、使用属性绑定UserControl 部分(MyUserControl.xaml.cs)UserControl 视图模型部分(MyUserControlViewModel.cs)主界面部分(MainWindow.xaml)主界面视图模型部分(MainWindowViewModel.cs)2、使用消息传递UserControl 视图模型部分(MyUserControlViewModel.c…...

Unity插件-Mirror使用方法(四)组件介绍(​Network Manager HUD)

目录 一、插件介绍 二、主要组件 Network Manager 三、Network Manager HUD 1、组件介绍 2、NetworkManagerHUD 的核心功能 快速操作按钮 状态信息显示 场景切换支持 调试辅助 3、关键属性与配置 4、HUD 界面详解 【主机模式&#xff08;服务器客户端&#xff09;…...

UDP协议(20250303)

1. UDP UDP:用户数据报协议&#xff08;User Datagram Protocol&#xff09;&#xff0c;传输层协议之一&#xff08;UDP&#xff0c;TCP&#xff09; 2. 特性 发送数据时不需要建立链接&#xff0c;节省资源开销不安全不可靠的协议 //一般用在实时性比较高…...

【量化金融自学笔记】--开篇.基本术语及学习路径建议

在当今这个信息爆炸的时代&#xff0c;金融领域正经历着一场前所未有的变革。传统的金融分析方法逐渐被更加科学、精准的量化技术所取代。量化金融&#xff0c;这个曾经高不可攀的领域&#xff0c;如今正逐渐走进大众的视野。它将数学、统计学、计算机科学与金融学深度融合&…...

振弦采集仪多通道振弦采集终端 物联网振弦监测 智能振弦监测系统

振弦采集仪多通道振弦采集终端 物联网振弦监测 智能振弦监测系统 VD416_DIN 多通道振弦温度综合采集仪采用模块化设计&#xff0c;配备 32 通道传感器接口&#xff0c;支持两种高效工作模式&#xff1a;16 通道振弦频率与 16 通道温度同步采集&#xff0c;或 32 通道振弦频率专…...

Synchronized解析

一、底层原理&#xff1a;Monitor机制 对象锁与Monitor关联 synchronized通过对象锁实现互斥&#xff0c;每个Java对象都可以关联一个Monitor&#xff08;监视器&#xff09;&#xff0c;其底层由JVM用C实现。当线程进入synchronized代码块时&#xff0c;会尝试获取与锁对象关联…...

别再瞎学!C 语言入门看这篇就够了

目录 1. 如何学好C语言 2. C语言是什么&#xff1f; 3. C语⾔的历史和辉煌 4. 编译器的选择 4.1 编译和链接 4.2 编译器大比拼&#xff0c;VS2022 脱颖而出 4.3 VS2022 优缺点大揭秘 5. VS项⽬ 和 源⽂件、头⽂件介绍 6. 第一个C语言程序 7. main 函数&#xff1a;程序…...

Linux操作系统5-进程信号2(信号的4种产生方式,signal系统调用)

上篇文章&#xff1a;Linux操作系统5-进程信号1&#xff08;信号基础&#xff09;-CSDN博客 本篇Gitee仓库&#xff1a;myLerningCode/l25 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 本篇重点&#xff1a;信号的4种产生 目录 一. signal系统调用 …...

【Groovy】Array、List、Set、Map简介

1 Array 1.1 创建数组 1.1.1 创建一维数组 int[] arr1 new int[2] arr1[0] 1 arr1[1] 2float[] arr2 new float[] { 1f, 2f, 3f } String[] arr3 ["abc", "xyz"] as String[] 1.1.2 创建二维数组 int[][] arr1 new int[2][2] arr1[0][0] 1 arr…...

DeepSeek与数据分析:现状、挑战与未来展望

在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;的浪潮正以前所未有的速度席卷各个领域&#xff0c;数据分析作为众多行业决策的关键支撑&#xff0c;也不可避免地受到AI技术发展的深刻影响。近期&#xff0c;AI话题持续火热&#xff0c;不少企业老板要求员工…...

【通俗讲解电子电路】——从零开始理解生活中的电路(三)

实际应用案例&#xff1a;生活中的电子电路 ——拆解你身边的“隐形工程师” 1. 手电筒电路&#xff1a;最简单的直流系统 电路组成 电源&#xff1a;2节1.5V电池&#xff08;串联3V&#xff09;。 开关&#xff1a;按钮控制回路通断。 LED&#xff1a;发光二极管&#xff…...

JVM基本概念及内存管理模型

一、JVM基本概念 JVM&#xff08;Java Virtual Machine&#xff0c;Java 虚拟机&#xff09;是 Java 程序运行的核心组件。它负责将 Java 字节码转换为特定平台的机器指令&#xff0c;并提供内存管理、垃圾回收、安全性等功能。JVM 的主要功能包括以下&#xff1a; 加载和执行…...

【CPP面经】科大讯飞 腾讯后端开发面经分享

文章目录 C 面试问题整理基础问题简答1. 内存对齐2. this 指针3. 在成员函数中删除 this4. 引用占用内存吗&#xff1f;5. C 越界访问场景6. 进程通信方式7. 无锁队列实现8. ping 在哪一层&#xff1f;实现原理&#xff1f;9. HTTPS 流程10. GDB 使用及 CPU 高使用定位11. 智能…...

2.反向传播机制简述——大模型开发深度学习理论基础

在深度学习开发中&#xff0c;反向传播机制是训练神经网络不可或缺的一部分。它让模型能够通过不断调整权重&#xff0c;从而将预测误差最小化。本文将从实际开发角度出发&#xff0c;简要介绍反向传播机制的核心概念、基本流程、在现代网络中的扩展&#xff0c;以及如何利用自…...

使用Word时无法粘贴,弹出错误提示:运行时错误‘53‘:文件未找到:MathPage.WLL

报错说明 使用Word时无法粘贴&#xff0c;粘贴时弹出提示如下&#xff1a; 一般出现这种情况时&#xff0c;我想你是刚装完MathType不久&#xff0c;博主装的是MathType7版本&#xff0c;出现了这个问题。 出现这个问题的原因是"mathpage.wll"这个文件在Office的插…...

详解matplotlib隐式pyplot法和显式axes法

Python的matplotlib提供了pyplot隐式方法和显式Axes方法&#xff0c;这让很多人在选择时感到困惑。本文用9000字彻底解析两种方法的区别与适用场景&#xff0c;节选自&#x1f449;Python matplotlib保姆级教程 matplotlib隐式绘图方法&#xff08;pyplot&#xff09; matplot…...

100天精通Python(爬虫篇)——第113天:爬虫基础模块之urllib详细教程大全

文章目录 1. urllib概述2. urllib.request模块 1. urllib.request.urlopen()2. urllib.request.urlretrieve()3. urllib.request.Request()4. urllib.request.install_opener()5. urllib.request.build_opener()6. urllib.request.AbstractBasicAuthHandler7. urllib.request.…...

FPGA开发,使用Deepseek V3还是R1(2):V3和R1的区别

以下都是Deepseek生成的答案 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;1&#xff09;&#xff1a;应用场景 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;2&#xff09;&#xff1a;V3和R1的区别 FPGA开发&#xff0c;使用Deepseek V3还是R1&#x…...

Leetcode LRU缓存

LRU 缓存算法思想及代码解析 算法思想 LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;缓存 需要满足以下要求&#xff1a; 在 O(1) 时间复杂度内完成 get 和 put 操作。当缓存满时&#xff0c;删除最近最少使用的元素&#xff08;即最久没有被访问…...

结合PyMuPDF+pdfplumber,删除PDF指定文本后面的内容

🚀 一、需求场景解析 在日常办公中,我们经常会遇到这样的痛点: 合同处理:收到上百份PDF合同,需要找到"签署页"之后的内容并删除报表加工:批量移除财务报表中的敏感数据区域文档归档:快速提取技术文档的关键章节传统的手动操作方式存在三大致命缺陷: ❗ 耗时…...

【NLP 30、文本匹配任务 —— 传统机器学习算法】

目录 一、文本匹配任务的定义 1.狭义解释 2.广义解释 二、文本匹配的应用 1.问答对话 2.信息检索 3.文本匹配任务应用 三、智能问答 1.智能问答的基本思路 依照基础资源划分&#xff1a; 依照答案产出方式划分 依照NLP相关技术划分 四、智能问答的价值 1.智能客服 2.Faq知识库问…...

修改hosts文件,修改安全属性,建立自己的DNS

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

springboot + mybatis-plus + druid

目录架构 config MyMetaObjectHandler.java package com.example.config;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component;import java.util.Date;Com…...

【零基础到精通Java合集】第十一集:List集合框架与泛型

课程标题:List集合框架与泛型(15分钟) 目标:掌握泛型在List中的应用,理解类型安全的重要性,熟练操作泛型集合 0-1分钟:泛型List的意义引入 以“分类储物箱”类比泛型List:明确容器内元素类型(如只能放书籍)。说明泛型的核心作用——编译时类型检查,避免运行时类型…...

计算机网络——子网掩码

一、子网掩码是什么&#xff1f;它长什么样&#xff1f; 子网掩码的定义 子网掩码是一个32位的二进制数字&#xff0c;与IP地址“配对使用”&#xff0c;用于标识IP地址中哪部分属于网络地址&#xff0c;哪部分属于主机地址。 示例&#xff1a;IP地址 192.168.1.10&#xff0c;…...

[自然语言处理]pytorch概述--什么是张量(Tensor)和基本操作

pytorch概述 PyTorch 是⼀个开源的深度学习框架&#xff0c;由 Facebook 的⼈⼯智能研究团队开发和维护&#xff0c;于2017年在GitHub上开源&#xff0c;在学术界和⼯业界都得到了⼴泛应⽤ pytorch能做什么 GPU加速自动求导常用网络层 pytorch基础 量的概念 标量&#xf…...

18.5 ChatGLM2-6B 开源协议深度解读:自由与约束的平衡之道

ChatGLM2-6B 开源协议深度解读:自由与约束的平衡之道 关键词:ChatGLM2 开源协议, 模型授权合规, 商业使用限制, 技术伦理条款, 国产大模型治理 1. 协议核心条款全景解析 ChatGLM2-6B 采用 分层授权模式,其核心条款可归纳为三大维度: #mermaid-svg-xgEnsN0y2TMOR0Hf {font…...

javaweb自用笔记:Vue

Vue 什么是vue vue案例 1、引入vue.js文件 2、定义vue对象 3、定义vue接管的区域el 4、定义数据模型data 5、定义视图div 6、通过标签v-model来绑定数据模型 7、{{message}}直接将数据模型message展示出来 8、由于vue的双向数据绑定&#xff0c;当视图层标签input里的…...