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

进程概念~

进程概念

(冯诺依曼体系结构,操作系统,进程概念,进程状态,环境变量,程序地址空间)

冯诺依曼体系结构:(计算机硬件体系结构)
输入设备,输出设备,存储器,运算器&控制器(CPU)
CPU想要处理数据,要从内存中取出进行处理–CPU执行的一个程序,首先要把程序从硬盘加载到内存

操作系统:
本质:一个软件程序
功能:对计算机进行软硬件管理
目的:让计算机更好用
完整的操作系统:内核+外部应用(linux内核)
各个操作系统厂商,根据linux内核进行定制化开发,然后加上自己封装的应用,组成自己的操作系统(Redhat,Debian…)
操作系统如何管理硬件
用户
库函数
系统调用接口
操作系统
硬件驱动
硬件
自上而下,由操作系统进行串联,

进程:
运行中的程序,是程序运行过程的动态描述,这写描述在pcb-进程控制块中,在linux下是一个task_struct结构体
操作系统管理和调度程序的运行是通过pcb来实现
pcb描述的信息:标识符(进程ID),内存指针(程序数据在内存中的地址),程序计数器,上下文数据(切换cpu寄存器中的数据会保存下来,这是其一),进程状态,io信息,…

进程状态:
状态标记了当前进程该如何被操作系统进行调度管理(标识一个进程什么状态该做什莫事)
课本上:
就绪–准备好了,拿到时间片就能运行
运行–CPU在处理,获得CPU
阻塞–因为某些特殊原因,暂时不能运行,满足某种条件后,被置为就绪状态,拿到时间片可以运行

linux下进程状态:
查看进程:ps -aux | grep name 查看进程状态 ps -ef | grep name 查看进程的父进程
进程的六种状态
运行态–R:正在被执行,以及拿到时间片就能执行的进程,正在运行或在运行队列中等待
可中断休眠–S:(因为某种运行条件不足,暂时不能被调度运行的进程,sleep(3)),可以被kill -9 pid杀死
不可中断休眠态–D:无法被中断阻塞,只能等待阻塞的唤醒条件才能被调度执行,不可被kill
停止态–T:什么都不做,但还活着,可以被调度(与休眠不同,休眠是阻塞)
僵尸态–Z:进程退出运行,但是资源没有被完全释放,等待处理,pcb中还保存其信息

创建子进程:pid_t fork(void);–通过赋值调用进程(父进程)来创建一个新的进程(子进程)
返回值:在父进程中返回值是子进程的pid(大于0);在子进程中返回0;出错返回-1;
在在系统的角度进程就是pcb,咋linux下是task_struct 结构体
创建一个进程就是创建了一个task_struct 结构体,也就是创建了pcb
fork创建就是复制了父进程中大部分数据
它们都是进程,平等关系,不是子集关系

#include<stdio.h>
#include<unistd.h>
int main()
{printf("hello\n");//如果没有换行就不会清空缓冲区,那么下面fork子进程,子进程会把缓冲区内容一块复制,就会出现和父进程一样的输出hellobye,有'\n'则只有bye会输出两次pid_t child=fork();printf("bye\n");return 0;
}

僵尸进程:子进程先于父进程退出,为了保存退出原因,退出后没有完全释放资源成为僵尸进程
危害:资源泄露
避免:进程等待(等待子进程退出,获取退出子进程的返回值,释放子进程资源,避免产生僵尸进程)
僵尸进程存在的原因就是为了保存子进程退出原因给父进程看,只要父进程获取了退出原因,资源就会被释放

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{int ret=fork();if(ret==0){printf("child--%d\n",getpid());sleep(5);//子进程休眠五秒后退出,但是父进程没有接受其返回值,所以成为僵尸进程}else {printf("parent--%d\n",getpid());sleep(30);//让父进程休眠更长时间}return 0;
}

用ps查看进程
在这里插入图片描述

程序运行结果:
在这里插入图片描述

孤儿进程:父进程先于子进程退出,子进程成为孤儿进程
特性:运行在后台,父进程成为1号进程(以前叫init进程,现在是systemd)
fork创建子进程,父子进程的运行顺序是不一定的,在操作系统中,进程按照异步方式运行,按各自独立的、不可预知的速度向前推进

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main()
{int ret=fork();if(ret==0){printf("我是子进程:pid=%d\n",getpid());sleep(10);}else {printf("父进程:pid=%d,3秒后退出\n",getpid());sleep(3);exit(0);}while(1){sleep(1);}return 0;
}

子进程的ppid为1,状态为
在这里插入图片描述
1号进程systemd
在这里插入图片描述
孤儿进程会成为僵尸进程吗?—不会变成僵尸进程,会被1号进程收养

环境变量:保存当前程序运行环境参数的变量
优点:即时生效;让运行环境配置更加灵活;通过环境变量可以给运行的程序传递数据
终端shell有两种变量:环境变量(有继承性)、普通变量(无)
接口:char* getenv(char* name);
指令:env 查看所有环境变量 ; set 查看所有变量 ; echo 打印指定内容到终端
export 声明一个变量为环境变量 ; unset 删除变量
在程序中访问环境变量:
1.getenv接口;
2.main函数第三个参数 main(int agrc,char* argv[],char* env[])
3.全局变量:extern char**environ;

并发:独木桥,多个人,一次走一个,轮换着走
并行:更宽的桥,可以多个人同时一起走

程序地址空间:操作系统为每个进程描述的一个虚拟地址空间
内存地址:对存储区域的编号(以字节为单位)
程序地址空间更应称作:进程地址空间(运行起来的程序才会占据内存)
在一个进程中,所访问到的所有变量地址都是一个虚拟地址,(并不是真正的物理地址存储),虚拟地址经页表映射得到物理地址,从而访问物理内存
虚拟地址空间是一个结构体:linux下是mm_struct
系统通过mm_struct结构体向每个描述了一个虚拟的、连续的、完整的、线性的地址空间。
好处:1.每个进程都要一个完整独立的虚拟地址空间,贼地址可以随便使用,不用担心冲突(地址管理更加方便)
2.通过页表映射可以随机存储在物理地址的任意位置,实现数据离散式存储,提高内存利用率
3.在进行页表映射后可以进行访问权限的控制

内存管理方式:
分段式内存管理:将一整个的地址空间划分为多个段(代码段,数据段,栈区,堆区…)
作用:更加利于编译器对于地址的管理
段表:是一种数据结构,其中描述的信息,段号,物理内存的一个起始地址
虚拟内存地址:

段号偏移量

通过段号找到段表项,得到一块物理内存的起始地址,起始地址+偏移量=实际物理地址
分页式内存管理:将一整的地址空间划分为大量的小分页page(当前一般默认4k字节一页)
作用:实现数据的离散存储,提高内存利用率
页表:页号,物理内存地址起始,缺页中断位,访问权限位…
虚拟地址组成:页号+页内偏移
通过虚拟地址中的页号直到对应的页表项,得到了一个物理内存块的起始地址,加上页内偏移就是实际的访问位置,不同的地方在于应用方向不同,分段式利于地址管理,分页式更倾向于碎片化管理,提高内存利用率和内存访问控制
在这里插入图片描述
访问权限位:标记当前地址能够进行什么样的操作
比如:0号地址(NULL)不可读不可写,对其进行解引用或修改,会造成内存访问错误,程序崩溃
比如:const修饰的常变量,只读;代码段的所有地址都是只读
缺页中断:当进程要访问一块内存时经过页表映射法先缺页中断为被置位(意思是这个地址原先的数据现在不在内存中),则会触发缺页中断。
内存交换:一个程序运行就要占据大量内存,内存有限,耗尽时就无法进行任何操作,内存交换就是将内存中的某些数据从内存中移出,放到硬盘,腾出内存空间
当访问数据刚好是刚被移出的数据,就会发生缺页中断,而当发生缺页中断时,内存就又要重新进行内存置换。频繁的置换和缺页中断,会造成性能大大降低,硬盘吞吐量太小
内存置换算法:
LRU–最久未使用 ;LFU–最少使用
交换分区的大小一般是内存的两倍,无具体大小。

相关文章:

进程概念~

进程概念 &#xff08;冯诺依曼体系结构&#xff0c;操作系统&#xff0c;进程概念&#xff0c;进程状态&#xff0c;环境变量&#xff0c;程序地址空间&#xff09; 冯诺依曼体系结构&#xff1a;&#xff08;计算机硬件体系结构&#xff09; 输入设备&#xff0c;输出设备&a…...

三天吃透Java基础八股文

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址&#xff1a;https://github.com/…...

YOLOv8训练自己的数据集(超详细)

一、准备深度学习环境本人的笔记本电脑系统是&#xff1a;Windows10YOLO系列最新版本的YOLOv8已经发布了&#xff0c;详细介绍可以参考我前面写的博客&#xff0c;目前ultralytics已经发布了部分代码以及说明&#xff0c;可以在github上下载YOLOv8代码&#xff0c;代码文件夹中…...

【洛谷 P1088】[NOIP2004 普及组] 火星人 题解(全排列+向量)

[NOIP2004 普及组] 火星人 题目描述 人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言&#xff0c;但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样的&#xff0c;首先&#xff0c;火星人把一个非常大的数字告诉人类科学…...

基于混合蛙跳算法优化SVM的滚动轴承故障诊断python实现

1.混合蛙跳算法(SFLA)原理 混合蛙跳算法(SFLA)是一种受自然生物模仿启示而产生的基于群体的协同搜索方法,由局部搜索和全局信息交换两部分组成。 混合蛙跳算法中,每个青蛙的位置代表了一个可行解。青蛙在沼泽中跳跃,沼泽在离散的地方有很多石头,青蛙可以跳过这些石头来找…...

如何让AI帮你干活-娱乐(2)

背景&#xff1a;好容易完成朋友的任务&#xff0c;帮忙给小朋友绘画比赛生成一些创意参考图片。他给我个挑战更高的问题&#xff0c;是否可以帮他用AI生成一些视频。这个乍一听以现在AI技术根本不太可能完成。奈何他各种坚持&#xff0c;无奈被迫营业。苦脸接受了这个不可能完…...

文件异步多备常用方案

业务需求上经常存在需要对同一个文件进行双上传&#xff0c;上传到不同云存储桶&#xff0c;以防出现某一个云厂商因各种意外导致自身服务出现不可用的情况&#xff0c;当然&#xff0c;还有其他措施可以避免&#xff0c;现在只针对通过程序业务代码而双写存储的这个场景。 业务…...

java面试八股文之------Redis夺命连环25问

java面试八股文之------Redis夺命连环25问&#x1f468;‍&#x1f393;1.为什么redis这么快&#x1f468;‍&#x1f393;2.redis的应用场景&#xff0c;为什么要用&#x1f468;‍&#x1f393;3.redis6.0之前为什么一直不使用多线程&#xff0c;6.0为甚么又使用多线程了&…...

【数据结构】AVL平衡二叉树底层原理以及二叉树的演进之多叉树

1.AVL平衡二叉树底层原理 背景 二叉查找树左右子树极度不平衡&#xff0c;退化成为链表时候&#xff0c;相当于全表扫描&#xff0c;时间复杂度就变为了O(n) 插入速度没影响&#xff0c;但是查询速度变慢&#xff0c;比单链表都慢&#xff0c;每次都要判断左右子树是否为空 需…...

K8S篇-安装nfs插件

前言 有关k8s的搭建可以参考&#xff1a;http://t.csdn.cn/H84Zu 有关过程中使用到的nfs相关的nas&#xff0c;可以参考&#xff1a; http://t.csdn.cn/ACfoT http://t.csdn.cn/tPotK http://t.csdn.cn/JIn27 安装nfs存储插件 NFS-Subdir-External-Provisioner是一个自动配置…...

xmu 离散数学 卢杨班作业详解【4-7章】

文章目录第四章 二元关系和函数4.6.2911121618.120.222.1232834第五章 代数系统的一般概念2判断二元运算是否封闭348111214第六章 几个典型的代数系统1.5.6.7.11.12151618第七章 图的基本概念12479111215第四章 二元关系和函数 4. A{1,2,3} 恒等关系 IA{<1,1>,<2,2…...

多重背包问题中的二进制状态压缩

1.多重背包问题 经典的多重背包问题和01背包问题的相似之处在于二者的一维遍历顺序都是从右侧往左侧遍历。 同时多重背包的一维写法不比二维写法降低时间复杂度。 2.多重背包标准写法:(平铺展开形式&#xff09; class Solution {public int maxValue(int N, int C, int[] s…...

汇编语言程序设计(四)之汇编指令

系列文章 汇编语言程序设计&#xff08;一&#xff09; 汇编语言程序设计&#xff08;二&#xff09;之寄存器 汇编语言程序设计&#xff08;三&#xff09;之汇编程序 汇编指令 1. 数据传输指令 指令包括&#xff1a;MOV、XCHG、XLAT、LEA、LDS、LES、PUSH、POP、PUSHF、LA…...

Vant2 源码分析之 vant-sticky

前言 原打算借鉴 vant-sticky 源码&#xff0c;实现业务需求的某个功能&#xff0c;第一眼看以为看懂了&#xff0c;拿来用的时候&#xff0c;才发现一知半解。看第二遍时&#xff0c;对不起&#xff0c;是我肤浅了。这里侧重分析实现原理&#xff0c;其他部分不拓展开来&…...

【自然语言处理】【大模型】大语言模型BLOOM推理工具测试

相关博客 【自然语言处理】【大模型】大语言模型BLOOM推理工具测试 【自然语言处理】【大模型】GLM-130B&#xff1a;一个开源双语预训练语言模型 【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介绍 【自然语言处理】【大模型】BLOOM&#xff1a;一个176B参数…...

云桌面技术初识:VDI,IDV,VOI,RDS

VDI&#xff08;Virtual Desktop Infrastucture&#xff0c;虚拟桌面架构&#xff09;&#xff0c;俗称虚拟云桌面 VDI构架采用的“集中存储、集中运算”构架&#xff0c;所有的桌面以虚拟机的方式运行在服务器硬件虚拟化层上&#xff0c;桌面以图像传输的方式发送到客户端。 …...

基于本地centos构建gdal2.4.4镜像

1.前言 基于基础镜像构建gdal环境一般特别大&#xff0c;一般少则1.6G&#xff0c;多则2G甚至更大&#xff0c;这对于镜像的迁移造成了极大的不便。究其原因在于容器中有大量的源码文件以及编译中间过程文件&#xff0c;还要大量编译需要的yum库。本文主要通过在centos系统上先…...

生产环境线程问题排查

线程状态的解读RUNNABLE线程处于运行状态&#xff0c;不一定消耗CPU。例如&#xff0c;线程从网络读取数据&#xff0c;大多数时间是挂起的&#xff0c;只有数据到达时才会重新唤起进入执行状态。只有Java代码显式调用sleep或wait方法时&#xff0c;虚拟机才可以精准获取到线程…...

Day908.joinsnljdist和group问题和备库自增主键问题 -MySQL实战

join&snlj&dist和group问题和备库自增主键问题 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于join&snlj&dist和group问题和备库自增主键问题的内容。 一、join 的写法 join 语句怎么优化&#xff1f;中&#xff0c;在介绍 join 执行顺序的时候&am…...

算法 - 剑指Offer 丑数

题目 我们把只包含质因子 2、3 和 5 的数称作丑数&#xff08;Ugly Number&#xff09;。求按从小到大的顺序的第 n 个丑数。 解题思路 这题我使用最简单方法去做&#xff0c; 首先我们可以获取所有2n,3n,5*n的丑数&#xff0c;只是我们这里暂时无法排序&#xff0c;并且可能…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...