Linux环境变量以及进程虚拟地址原理
目录
一、介绍进程优先级
1.什么是优先级
2.为什么会有优先级
3.Linux中的优先级是怎么确定的
1)查看Linux中的优先级
2)计算优先级和更改优先级
二、环境变量
1.什么是环境变量
2.环境变量有什么作用
3.环境变量怎么做到的
1)查看系统已有的环境变量
2)以PATH具体认识环境变量
引入
①PATH环境变量的作用
②查看PATH中的存储的地址
3)介绍一些其他的环境变量
4)set
①普通全局变量与环境变量的区别
4.如何通过代码获取环境变量
1)main函数的命令行参数
①int argc和 char *argv[ ]
②char *env[ ]
2)getenv接口获取
3)extern char ** environ
4)一些奇怪的问题
①操作系统是如何得知你是否有某文件权限的?
②我们说非环境变量不能被子程序获取,那shell里定义的全局变量为什么能被echo读取并打印?
三、进程地址空间
1.引出问题
2.逻辑地址、虚拟地址、物理地址的概念
3.内核数据结构mm_struct
4.页表:虚拟地址到物理地址的映射
5.写时拷贝
6.再一次理解虚拟地址:从编译到执行
7.总结进程地址空间
1)进程地址空间是什么
2)为什么会存在逻辑地址、虚拟地址、物理地址三个地址而不是一步到位?
3)虚拟地址是如何做到的
总结
一、介绍进程优先级
1.什么是优先级
简单来说优先级是一种约定,进程都有优先级,优先级决定一个进程何时运行和接收多少 CPU 时间——优先级高的先做,优先级低的后做。
往简单说,优先级就是进程PCB中存储的一个数字,越小的优先级越高(跟成绩排名一样)
注意:
2.为什么会有优先级
系统中运行的进程可由用户决定多少,但硬件的数目却是电脑出厂后就决定的。
简单来说就是内存中的进程数目远多于硬件等资源的数目,导致的资源不足。所以引入了优先级这个概念以确保计算机的顺利运行
3.Linux中的优先级是怎么确定的
1)查看Linux中的优先级
ps -la指令可以查看目前所有用户的进程的信息,如优先级等。
2)计算优先级和更改优先级
优先级= PRI + NI
系统中的优先级是看pri决定的,pri越小越先被执行,但用户可以通过更改ni的值来改变进程的优先级。
你可以输入任意大小的数字,但操作系统只允许ni的值位于[ -20,19],多出的部分舍弃。
所以Linux中进程的优先级共有40个等级:[ 60 ,99]
二、环境变量
1.什么是环境变量
具有全局属性,就是可以被子进程继承下去(有些类似于C中的局部变量与全局变量的关系)
每当用户登录时,操作系统便会默认初始化系统中的环境变量,环境变量本质上就是一串字符串。
2.环境变量有什么作用
如环境变量HOME,当用户登录上Linux后,系统便通过识别用户名以初始化HOME环境变量,进而导致不同身份的用户登录家目录不同:
3.环境变量怎么做到的
1)查看系统已有的环境变量
env指令:在屏幕上打印出系统已有的环境变量
节选的一些
2)以PATH具体认识环境变量
引入
通过file pwd等指令,再file 我们自己写的程序,发现都是x86_64可执行程序(是的,指令也就是写好的程序),可为什么我们的程序不能像系统指令一样执行,而是得加" ./ "呢?
①PATH环境变量的作用
②查看PATH中的存储的地址
echo $PATH
如果我们将自己写的程序的地址加入PATH后,是不是就可以像使用指令一样在任何目录都可以调用我们的程序?
注意:
猜想是正确的!
此时再查看PATH中记录的地址发现有myproc程序的地址:
当我们重新登入Linux后,发现PATH的值又恢复初始状态:
3)介绍一些其他的环境变量
4)set
这里的全局变量就是C语言中的局部变量,环境变量就是全局变量,区别是这个全局变量只能在创建它的程序中使用,如下图中的hello,而环境变量可以继承给子进程。
①普通全局变量与环境变量的区别
在shell中定义一个普通全局变量hello=10,在set中可以看到hello。
但在环境变量中查找不到hello
通过export将hello变为全局变量后即可查找
②删除环境变量或者普通全局变量
关于环境变量相关的一些指令总结:
① echo: 显示某个环境变量值,如echo $PATH
② export: 设置一个新的环境变量,如export hello(自定义的)
③ env: 显示所有环境变量
④ unset: 清除环境变量
⑤ set: 显示本地定义的shell变量和环境变量
4.如何通过代码获取环境变量
1)main函数的命令行参数
不知你是否曾在某些书本当中见过main函数是带参数的,如下:
现在让我们来详细了解这些参数
①int argc和 char *argv[ ]
int argc的作用是存储在调用该程序时的选项数目;
而char *argv存储的则是每一个额外选项。
比如我们常用的ls -al—>ls -a -l,在包括ls指令本身后argc=ls + a + l ==3,而char *argv[ ]则存储着这些选项。
我们用自定义的test_main.c来观察argc和argv[ ]。
若gcc编译不通过,则按提示在gcc后添加-std=c99:
在调用test_main时我们附加了-a -b -c三个选项,如上图。可以看到被成功打印出。
②char *env[ ]
在有了对argc和argv[ ]的理解后,再来理解env[ ],便容易的多。
首先要明确的是:每个程序在运行时都会收到操作系统给的一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串。而char * env[ ],便是那张环境表。
2)getenv接口获取
作用:在程序内通过代码获取环境变量。
3)extern char ** environ
直接在代码中额外声明char ** environ环境变量表,依然可以打印出环境变量。
小结:
在程序中获取环境变量有三种方式
①getenv;
②char *env[ ];
③extern char ** environ;
4)一些奇怪的问题
①操作系统是如何得知你是否有某文件权限的?
②我们说非环境变量不能被子程序获取,那shell里定义的全局变量为什么能被echo读取并打印?
如上图中所示:
已知:myenv是个shell定义的普通全局变量,echo是一个指令(本质上也是一种程序),当在shell运行echo时本质创建了一个子进程,但按照环境变量的定义这应该是不被允许的。
echo能读取非环境变量的本质:
三、进程地址空间
1.引出问题
我们编写一段代码,定义一个全局变量glo_x=100,再通过fork调用生成一个子程序。
我们尝试在子进程中修改glo_x,而父进程什么都不做,两个再打印glo_x会有什么现象。
1 #include<stdio.h>2 #include<stdlib.h>3 #include<unistd.h>4 int glo_x=100;5 int main()6 {7 pid_t id=fork();8 int cnt=1;9 if(id<0)10 {11 printf("创建子进程失败\n");12 exit(1);13 }14 else if(id>0)15 {16 //父进程17 while(1)18 {19 printf("我是父进程,我的id是:%d,glo_x=%d,&glo_x=%p\n",getpid(),glo_x,&glo_x);20 sleep(1);21 }22 }23 else24 {25 //子进程 26 while(2)27 {28 printf("我是子进程,我的id是:%d,glo_x=%d,&glo_x=%p\n",getpid(),glo_x,&glo_x);29 cnt++;30 if(cnt==3)31 {32 glo_x=700;33 printf("子进程已经修改了glo_x的值…\n");34 }35 sleep(2);36 }37 }38 return 0;39 }
结果如图:
此时,同一个地址的glo_x变量居然有两个值!!
2.逻辑地址、虚拟地址、物理地址的概念
在学习C语言时,我们认为内存划分为这么几个区域:代码段、数据段、堆区、栈区,如下图所示
上面的理解是正确的但不完全正确,真正理解进程地址空间还需要理解:逻辑地址、虚拟地址、物理地址这三种地址之间的区别与联系。
1)逻辑地址
①逻辑地址是程序视角下的地址空间;
②编译器编译的时候是从0开始编址的;
③代码中的指针值就是就是逻辑地址;
④逻辑地址空间存在于进程当中,每个进程都有自己的逻辑地址空间。换言之,每个进程认为自己独享整个系统的资源。
2)虚拟地址
①虚拟地址是站在cpu的视角的地址空间
②经过分段机制转换后的地址,是分页机制的输入。
由于技术的进步,在现代操作系统中,逻辑地址几乎等同于虚拟地址。
3)物理地址
真实内存硬件上的地址,CPU 最终通过总线访问的地址,内存访问的最终目标。
所以不管是在编译器中调试看到的逻辑(虚拟)地址,还是物理地址,都是用32位二进制来描述这2^32个地址。
从程序到物理内存的地址转换分为两个阶段:
逻辑地址 → 虚拟地址 → 物理地址,由于现在的操作系统中逻辑地址几乎等同于虚拟地址,为方便理解,我们暂时认为是从虚拟地址→ 物理地址。
3.内核数据结构mm_struct
通过上面三种地址空间的描述,我们可以得出一个信息:就是进程都认为自己独占整个系统资源,并且编译器在编译时也是从地址0开始编译。但是内存中的进程不只一个,肯定不可能让一个进程独占,且物理地址只有一条,让所有进程都从0地址开始编址也显然不可能,并且各个进程中代码段需要多少内存,数据段需要多少内存,堆栈又各自需要多少内存又是不尽相同。
于是,操作系统为了方便管理,创建了另一种内核数据结构mm_struct。
操作系统管理的核心思路是:先整理,在管理。
先整理:mm_struct中的数据成员正是代码段、数据段、堆栈的起始地址与终止地址。
再管理:通过为每一个进程创建一个mm_struct对象,直接管理各个进程所需的内存。
所以,在代码中的malloc 或者 new其实就是mm_struct中的数据更改变动,本质上就是start 或者end的更改。
注意:
故下图其实描述的是进程的虚拟(逻辑)地址空间:
4.页表:虚拟地址到物理地址的映射
在已经知道虚拟地址的概念即如何通过mm_struct存储后,那么操作系统是如何通过虚拟地址精确找到物理地址的呢?
这里笔者画了个草图以帮助读者理解从虚拟地址——>物理地址的转换。
同样的从物理地址到虚拟地址也要经过页表的转换。
值得注意的是:
5.写时拷贝
现在让我们回到“引出问题”中观察到的现象——为什么同一个地址的glo_x却有两个值。
还记得fork()调用的作用吗,fork调用父子进程会共享之后的代码。这里再给出写时拷贝的概念:
6.再一次理解虚拟地址:从编译到执行
1)编译器从0地址开始编址逻辑(虚拟地址)地址,若是32位环境下则每一位地址由32位二进制表示。64位同理;
2)当编译好的程序加载到内存后又获得物理地址;
3)操作系统将进程的虚拟地址与物理地址填入页表中;
4)当调用该进程的执行代码时:
①cpu通过查看task_struct(PCB)中的mm_struc,得到虚拟地址,然后前往页表查询物理地址;
②得到物理地址后,再前往物理地址中寻找该进程的代码和数据;
③得到具体的可执行代码和数据后再带回cpu内计算。
7.总结进程地址空间
1)进程地址空间是什么
进程地址空间 是指一个进程在运行时所能“看到”和使用的所有内存地址的集合。其核心内容就是虚拟地址。操作系统通过让每个进程都认为自己独占整个内存资源,实际物理内存由操作系统动态分配和管理。
2)为什么会存在逻辑地址、虚拟地址、物理地址三个地址而不是一步到位?
如果只存在一个地址,也就是让进程直接访问物理内存会有诸多隐患:
①防止进程越界非法操作(野指针),保证操作系统的安全;
——使用页表进行映射能有效拦截进程的非法请求
②防止恶意程序扫描内存而导致的数据泄露;
③减少内存碎片化,如果进程必须占用连续的物理内存,会是内存碎片化加剧:
比如:若物理内存剩余 1GB 但碎片化为多个 100MB 块,则无法运行需要 500MB 的程序。
整体是以空间换安全的设计思想。
3)虚拟地址是如何做到的
操作系统通过页表映射,将进程的虚拟地址与物理地址联系起来,以实现每个进程的虚拟地址空间。
总结
本文先介绍了进程的优先级,以及Linux中的优先级是如何确定的,之后介绍了什么是环境变量及其作用,最后介绍了什么是地址进程地址空间、mm_struct,以及为什么要使用虚拟地址。
笔者水平浅薄,难免有疏忽大意的地方,若有错误还请读者多多指出。
文章读完可否给笔者一个免费的赞呢,笑(*^_^*)。
相关文章:
Linux环境变量以及进程虚拟地址原理
目录 一、介绍进程优先级 1.什么是优先级 2.为什么会有优先级 3.Linux中的优先级是怎么确定的 1)查看Linux中的优先级 2)计算优先级和更改优先级 二、环境变量 1.什么是环境变量 2.环境变量有什么作用 3.环境变量怎么做到的 1)查看系统已有的…...
基于非递归求解的汉诺塔超级计算机堆栈与数据区设计方案
基于非递归求解的汉诺塔超级计算机堆栈与数据区设计方案 一、设计背景与目标 汉诺塔问题存在非递归直接求解方法,相较于递归法具有明确移动规律和潜在性能优势。本设计旨在利用非递归求解规律,优化汉诺塔超级计算机的堆栈与数据区结构,降低…...
【Linux应用】在PC的Linux环境下通过chroot运行ARM虚拟机镜像img文件(需要依赖qemu-aarch64、不需要重新安装iso)
【Linux应用】在PC的Linux环境下通过chroot运行ARM虚拟机镜像img文件(需要依赖qemu-aarch64、不需要重新安装iso) qemu提供了运行ARM虚拟机的方法 具体的操作方式就是建立一个硬盘img 然后通过iso安装到img 最后再运行img即可 这种方式教程很多 很简单 …...
CISC与RISC详解:定义、区别及典型处理器
一、CISC(复杂指令集计算机) Complex Instruction Set Computer 核心思想:通过设计复杂的指令,减少程序指令数量,以硬件复杂度换取编程便利性。 主要特点: 指令复杂度高: 单条指令可完成多步操…...
数据库中DDL、DML、DCL的区别是什么?
数据库中DDL、DML、DCL的区别是什么? 在数据库的使用过程中,SQL(结构化查询语言)常常被用来执行不同的操作,主要分为三类:DDL(数据定义语言)、DML(数据操纵语言…...
【东枫电子】AI-RAN:人工智能 - 无线接入网络
太原市东枫电子科技有限公司,翻译 文章目录 1.概述1.1 什么是AI-RAN?1.2 为什么是AI-RAN?1.3 AI-RAN有哪些好处?1.4 为什么 AI-RAN 会给通信服务提供商 (CoSP) 带来变革?1.5 AIRAN 的构建模块是什么? 2. 参…...
实习技能记录【5】-----项目中消息传递到ui层的方法
代码 while (1){osEvent evt;evt osMailGet(ui_msg_mailbox, 0);if (evt.status osEventMail){UI_MSG_APP_T *msg (UI_MSG_APP_T *)evt.value.p;if (msg->cmd_type CMD_TYPE_INNER){if (msg->cmd_code CMD_CODE_INNER_REFRESH_NOW){lv_obj_invalidate(lv_scr_act()…...
4.29【Q】paraCompute
还是同样的要求,我要写实验报告,如何组织描述运行时间,加速比,效率等随数据规模,进程数,线程数变化的语言和逻辑,从而显得不冗余和精简?为我生成合理排版,布局的文字&…...
什么是布林带?
什么是布林带? 布林带是约翰布林格在20世纪80年代开发的一种广泛使用的技术分析工具。布林带由价格图表上的三条线组成:中轨、上轨和下轨。中轨通常是20天简单移动平均线(SMA),代表资产在此期间的平均价格。上轨和下轨…...
爬虫学习笔记(四)---request入门
例1 例1:写一个爬取百度搜索页面的程序,以搜索一个喜欢的明星为例(如在搜索框中输入周杰伦) 正常搜索 页面 爬虫思路: 1.用一个query变量,在控制台输入的方式更加灵活的输入想爬取的明星的百度搜索页面 …...
JSON配置文件格式全解析与多语言实战指南
JSON配置文件格式全解析与多语言实战指南 摘要 本文全面解析JSON配置文件的核心语法规范,深入探讨数据类型、转义机制及JSON5扩展特性,提供JavaScript/Python/Java等多语言解析方案。通过典型应用场景案例演示JSON的最佳实践,帮助开发者高效…...
JavaScript 中的类型转换机制?
一、类型转换的两种模式 1. 显式转换(手动翻译) 你主动告诉 JavaScript 如何转换类型,比如: let num Number("123"); // 字符串 → 数字:123 let str String(123); // 数字 → 字符串:&qu…...
【分享】音频音乐剪辑[特殊字符]人声分离伴奏提取[特殊字符]拼接合并
音频音乐剪辑是一款专业的剪辑软件。在剪辑过程中,它可以对音频进行拼接合成、音乐裁剪、变调变速、格式转换,同时音频音乐剪辑还是一款支持高清录音、音频降噪等众多功能于一体的音频制作软件。 【应用名称】:音频剪辑 【应用版本】…...
关于 const a 定义的数据 与 其渲染 的问题。即通过const定义的常量,会不会导致渲染不及时。
情况1 (同2、4结论一致) 定义:使用子hook,将数据 const a 【对stateX的一系列操作】 封存到子hook里。并return出去。结果:此种情况不影响实时渲染。缺点:只要stateX变更,一定展示c的最新数据…...
开源Kotlin从零单排0基础完美入门教程
🚀 Kotlin 从零单排 一个让你欲罢不能的 Kotlin 入门教程! 教程仓库地址 👋 Hey,你好啊! 如果你: 🤔 听说 Kotlin 很香,但不知道香在哪?😅 Java 写得头大&a…...
主流微前端框架比较
主流微前端框架比较 以下表格列出了当前主流微前端框架的核心对比信息,包括基本介绍、核心特性、适用场景、技术栈兼容性、优缺点、社区维护情况和典型应用案例等: 框架基本介绍核心特性与机制适用场景技术栈兼容性优缺点社区维护情况典型应用案例qiankun蚂蚁金服推出的生产…...
DOM 事件的处理通常分为三个阶段:捕获、目标、冒泡【前端示例】
如果神明还不帮你,说明他相信你。 目录 引言:捕获阶段:目标阶段:冒泡阶段:事件传播示意图:示例:代码:解读:输出: 引言: DOM 事件的处理通常分为三…...
C#实现对达索(Dassault)SolidWorks中3D图纸转化为手机可直接查看预览图纸格式
转化环境无需安装SolidWorks。 代码更新:暂不公开。 实现效果:...
Twitter 工作原理|架构解析|社交APP逻辑
这是对Twitter 工作原理|架构解析|社交APP逻辑_哔哩哔哩_bilibili的学习,感谢up小凡生一 在两年半前,埃隆马斯克收购了Twitter,并且进行了一系列重大改革。今天我们来解析一下这个全球知名社交平台的架构。首先&#x…...
模拟集成电路设计与仿真 : Feedback System
前情提要 此為作者針對迴授系統,進行資料統整,以便日後查詢 原理 1. The Whole System 更正 : V - V feedback 是 並 - 串 迴授 2. Feedback Block Beta 更正 : ,所以 the whole systemfeedback block左 2右 1 feedback block feed…...
Linux权限管理进阶:文件归属、特殊权限与ACL详解
一、文件归属管理:chown命令 1. 基础语法与作用 chown 命令用于修改文件或目录的 属主(Owner) 和 属组(Group),是Linux权限管理中调整资源归属的核心工具。 chown [选项] 新属主:新属组 文件/目录 常用…...
MyBatis、MyBatis-Plus、Hibernate、Spring Data JPA 等 Java 持久层技术的理解和对比
一、基本概念 1. MyBatis 是一个 半自动的 ORM 框架(Object-Relational Mapping),用于简化 JDBC 开发。它允许你通过 XML 或注解配置 SQL 语句,将 Java 对象与 SQL 查询结果进行映射。 2. MyBatis-Plus(MPÿ…...
如何用vivado导出pin delay
目录 简介: Vivado工具导出pin delay步骤: 简介: 通过在一些等长要求比较严格的场合,会考虑到FPGA内部的走线,这时候就需要用到方法去导出fpga的pin delay。本文以xinlinx 的UltraScale系列的XCKU060-2FFVA1156I为例…...
【图片识别改名】批量读取图片区域文字识别后批量改名,基于Python和腾讯云的实现方案
项目场景 办公文档管理:将扫描的发票、合同等文档按编号、日期自动重命名。例如,识别“编号:2023001 日期:20230403”生成“2023001_20230403.jpg”。产品图片整理:电商产品图片按产品编号、名称自动命名。例如,…...
数字中国浪潮下:Coremail AI赋能邮件办公,筑牢安全防线引领转型
4月28日,在第八届数字中国建设峰会新产品新技术发布会上,Coremail分享了AI在邮件产品领域的最新应用成果和实践经验。 作为互联网之后的又一波技术浪潮,人工智能(AI)已成为推动各行业变革的核心力量,为企业…...
软件设计师-软考知识复习(1)
写在前面 复习软考,把一些忘记了的知识整理一下,方便后续查看。 设码长为8,补码为11111111,其真值是多少( ) A.1 B.-1 C.127 D.128 参考答案:B 解题步骤 1. 理解补码表示法 在计算机中&…...
快速安装Arduino IED的STM32 MCU开发包
从github安装STM32 MCU开发包非常慢,很难安装成功。因此我将Arduino IED的TM32 MCU开发包上传到国内网站,亲测安装成功。 1.打开Arduino IED,文件--首选项--其它开发板管理地址,添加http://www.aluoyun.cn/BoardManagerFiles-mai…...
Html 2
一,表单 1.概念:在一个区域中,拥有许多输入和最终组件,可以让用户输入、选择信息,最终将信息传入服务器端 2.常用组件: (1)<form action " " methon "get&qu…...
业务层在事务中高频创建动态表然后删除或者回滚导致 pg_dump 概率出现备份失败问题分析
文章目录 测试环境,业务层在事务中高频创建动态表然后删除或者回滚导致 pg_dump 概率出现备份失败职责划分应用层对 DDL 事务的滥用 导致的目录污染怎么理解?应用层在事务中大量高频新建动态表, 然后删除表, 有啥隐患目录版本风暴…...
图漾官网Sample_V1版本C++语言完整参考例子---单相机版本
文章目录 1.参考例子 主要梳理了图漾官网Sample_V1版本的例子 1.参考例子 主要增加了从storage区域读取相机参数的设置,使用图漾PercipioViewer软件,如何将相机参数保存到srorage区,可参考链接:保存相机参数操作 保存参数设置 注…...
SSM书籍管理(业务编写)
查询书籍功能 编写Controller类 Controller RequestMapping("/book") public class BookController {//controller调用service层AutowiredQualifier("BookServiceImpl")private BookService bookService;//查询全部的书籍,并且返回到书籍展示…...
kafka消息的顺序性如何保持一致的
目录 背景: 原理: 情况一:如果只有一个分区 情况二:如果有多个分区 总结 背景: 最近面试总是被问这个问题,然后总感觉答得不好就写博客总结一下,可以先看总结 原理: Kafka 中&#…...
在Java中基于Geotools对PostGIS数据库的空间查询实践
目录 前言 一、相关技术背景介绍 1、评价对象AOI 2、数据处理流程 二、对AOI空间范围查询实践 1、空间查询构建 2、空间样式创建 3、成果出图 三、总结 前言 在当今数字化浪潮下,空间数据的应用价值日益凸显,从城市规划到环境监测,从…...
生活需要一些思考
总分总 写文章、做事情、写邮件、写信,都是要【总分总】。 先总【因为没人有耐心一上来就看细节,先总结,别人感兴趣才会看分】 然后分【分中包括多个子部分,或子章节、子目标,他们之间层层递进,最终引出最…...
Scrapy框架之CrawlSpider爬虫 实战 详解
CrawlSpider 是 Scrapy 框架中一个非常实用的爬虫基类,它继承自 Spider 类,主要用于实现基于规则的网页爬取。相较于普通的 Spider 类,CrawlSpider 可以根据预定义的规则自动跟进页面中的链接,从而实现更高效、更灵活的爬取。 Scr…...
DeepSeek主动学习系统:低质量数据炼金术的工程化实践
文章目录 一、技术体系架构升级1.1 四层协同系统架构1.2 关键技术组件解析(1) 跨模态特征对齐引擎(2) 动态采样策略库 二、低质量数据治理全流程2.1 数据清洗与增强流水线2.2 主动学习迭代流程 三、工业级部署方案3.1 分布式计算架构3.2 动态环境应对策略(1) 概念漂移检测(2) 持…...
学习记录:DAY20
技术探索之旅:YAML配置,依赖注入、控制反转与Java注解 前言 最近有点懒了,太松懈可不行。为了让自己保持学习的动力,我决定将最近的学习内容整理成博客,目标是让未来的自己也能轻松理解。我会尽量以整体记录的方式呈…...
[AI]browser-use + web-ui 大模型实现自动操作浏览器
[AI]browser-use web-ui 大模型实现自动操作浏览器 介绍 官方地址:https://github.com/browser-use/web-ui browser-use主要作用是将 AI Agent 与浏览器链接起来从而实现由 AI 驱动的浏览器自动化。今天会给大家介绍如何通过browser-use web-ui来搭建并操作browse…...
使用LangChain连接远程Oracle数据库尝试LLM 提供的SQL智能助理
使用LangChain连接远程Oracle数据库尝试LLM 提供的SQL智能助理 为完成此次数据库连接实验,笔者用自己的笔记本电脑搭建了一台linux虚机,安装了oracle 23C,并借助deepseek创建了若干与电商业务有关的表并插入了一些记录。 接着在windows实体…...
训练神经网络的批量标准化(使用 PyTorch)
构建神经网络是一门艺术,而非一个结果固定的过程。你无法预知最终能否得到有效的模型,而且有很多因素可能导致你的机器学习项目失败。 然而,随着时间的推移,您还将学会一套特定的笔触,这将大大提高您成功的几率。 在…...
阿里Qwen3 8款模型全面开源,免费商用,成本仅为 DeepSeek-R1 的三分之一
想要掌握如何将大模型的力量发挥到极致吗?叶梓老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具(限时免费)。 1小时实战课程,您将学习到如何轻松上手并有效利用 Llama Factory 来微调您的模型,以发挥其…...
Vue常用的修饰符有哪些有什么应用场景(含deep seek讲解)
Vue.js 事件修饰符的功能与具体应用场景 一、事件修饰符 .stop .stop 的主要作用是 阻止事件冒泡,防止事件从子元素传播到父元素。这在处理嵌套组件或多层 DOM 结构时非常有用。 <div click"parentClick">Parent<button click.stop"chi…...
案例分享|20倍提效!水力设备电磁仿真的云端实战
在现代水力设备制造领域,电磁仿真是贯穿设计、研发到故障诊断的核心技术之一。而随着"双碳"目标驱动下清洁能源设备的迭代加速,水轮机、水泵等设备研发的多物理场耦合特性对仿真精度提出前所未有的挑战。传统仿真工具在处理复杂多物理场耦合等…...
ShenNiusModularity项目源码学习(25:ShenNius.Admin.Mvc项目分析-10)
本文学习并分析ShenNiusModularity项目中的留言管理页面、回收站页面。 1、留言管理页面 留言管理页面用于检索、删除系统中的留言数据,该页面对应的文件Index.cshtml位于ShenNius.Admin.Mvc项目的Areas\Cms\Views\Message内。页面使用的控制器类MessageController…...
github使用记录
1. 首次上传本地项目到 GitHub 1.1 准备 GitHub 仓库 登录 GitHub,点击右上角 → New repository输入仓库名称(建议与本地目录同名)选择公开(Public)或私有(Private)不要勾选 "Initiali…...
NFS-网络文件系统
NFS介绍 NFS ( Network File System ) 即网络文件系统 ,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样NFS的好…...
Andorid车机UI适配,AndroidUI图px的单位,如何适配1920x720,PPI100的屏幕设备
在 Android 开发中,针对 1920720 分辨率、PPI 100 的屏幕设备进行 UI 适配,需要综合考虑 像素密度(PPI)、屏幕尺寸 和 Android 的密度无关像素(dp) 体系。以下是完整的适配方案: 📌 …...
4.2.4 MYSQL的缓存策略
文章目录 4.2.4 MYSQL的缓存策略1. MYSQL缓存方案用来干什么 2. 缓存相关知识1. mysql主从复制2. 为什么需要缓冲层3. 还有哪些类型数据库 3. 那些方式会提升MYSQL读写性能1. mysql读写分离2. 连接池3. 异步连接 4. 缓存方案是怎么解决的1. redis和MYSQL一致性状态分析1. 流程&…...
省科学技术奖申报答辩PPT设计制作美化
自然科学奖、技术发明奖和科技进步奖是科学技术奖励体系中的三大核心奖项 省科学技术奖的含金量极高,主要体现在经济激励、社会认可、创新驱动及资源整合等方面。其价值不仅在于奖金和荣誉,更在于对科研生态的长远影响,国家科学技术奖的敲门…...
基于 ARM 的自动跟拍云台设计
标题:基于 ARM 的自动跟拍云台设计 内容:1.摘要 摘要:随着摄影和监控需求的不断增长,自动跟拍云台的应用越来越广泛。本设计的目的是开发一款基于 ARM 的自动跟拍云台,以实现对目标的精准跟拍。采用 ARM 微控制器作为核心控制单元࿰…...