进程概念~
进程概念
(冯诺依曼体系结构,操作系统,进程概念,进程状态,环境变量,程序地址空间)
冯诺依曼体系结构:(计算机硬件体系结构)
输入设备,输出设备,存储器,运算器&控制器(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–最少使用
交换分区的大小一般是内存的两倍,无具体大小。
相关文章:
进程概念~
进程概念 (冯诺依曼体系结构,操作系统,进程概念,进程状态,环境变量,程序地址空间) 冯诺依曼体系结构:(计算机硬件体系结构) 输入设备,输出设备&a…...
三天吃透Java基础八股文
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址:https://github.com/…...
YOLOv8训练自己的数据集(超详细)
一、准备深度学习环境本人的笔记本电脑系统是:Windows10YOLO系列最新版本的YOLOv8已经发布了,详细介绍可以参考我前面写的博客,目前ultralytics已经发布了部分代码以及说明,可以在github上下载YOLOv8代码,代码文件夹中…...
【洛谷 P1088】[NOIP2004 普及组] 火星人 题解(全排列+向量)
[NOIP2004 普及组] 火星人 题目描述 人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类科学…...
基于混合蛙跳算法优化SVM的滚动轴承故障诊断python实现
1.混合蛙跳算法(SFLA)原理 混合蛙跳算法(SFLA)是一种受自然生物模仿启示而产生的基于群体的协同搜索方法,由局部搜索和全局信息交换两部分组成。 混合蛙跳算法中,每个青蛙的位置代表了一个可行解。青蛙在沼泽中跳跃,沼泽在离散的地方有很多石头,青蛙可以跳过这些石头来找…...
如何让AI帮你干活-娱乐(2)
背景:好容易完成朋友的任务,帮忙给小朋友绘画比赛生成一些创意参考图片。他给我个挑战更高的问题,是否可以帮他用AI生成一些视频。这个乍一听以现在AI技术根本不太可能完成。奈何他各种坚持,无奈被迫营业。苦脸接受了这个不可能完…...
文件异步多备常用方案
业务需求上经常存在需要对同一个文件进行双上传,上传到不同云存储桶,以防出现某一个云厂商因各种意外导致自身服务出现不可用的情况,当然,还有其他措施可以避免,现在只针对通过程序业务代码而双写存储的这个场景。 业务…...
java面试八股文之------Redis夺命连环25问
java面试八股文之------Redis夺命连环25问👨🎓1.为什么redis这么快👨🎓2.redis的应用场景,为什么要用👨🎓3.redis6.0之前为什么一直不使用多线程,6.0为甚么又使用多线程了&…...
【数据结构】AVL平衡二叉树底层原理以及二叉树的演进之多叉树
1.AVL平衡二叉树底层原理 背景 二叉查找树左右子树极度不平衡,退化成为链表时候,相当于全表扫描,时间复杂度就变为了O(n) 插入速度没影响,但是查询速度变慢,比单链表都慢,每次都要判断左右子树是否为空 需…...
K8S篇-安装nfs插件
前言 有关k8s的搭建可以参考:http://t.csdn.cn/H84Zu 有关过程中使用到的nfs相关的nas,可以参考: 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.多重背包标准写法:(平铺展开形式) class Solution {public int maxValue(int N, int C, int[] s…...
汇编语言程序设计(四)之汇编指令
系列文章 汇编语言程序设计(一) 汇编语言程序设计(二)之寄存器 汇编语言程序设计(三)之汇编程序 汇编指令 1. 数据传输指令 指令包括:MOV、XCHG、XLAT、LEA、LDS、LES、PUSH、POP、PUSHF、LA…...
Vant2 源码分析之 vant-sticky
前言 原打算借鉴 vant-sticky 源码,实现业务需求的某个功能,第一眼看以为看懂了,拿来用的时候,才发现一知半解。看第二遍时,对不起,是我肤浅了。这里侧重分析实现原理,其他部分不拓展开来&…...
【自然语言处理】【大模型】大语言模型BLOOM推理工具测试
相关博客 【自然语言处理】【大模型】大语言模型BLOOM推理工具测试 【自然语言处理】【大模型】GLM-130B:一个开源双语预训练语言模型 【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介绍 【自然语言处理】【大模型】BLOOM:一个176B参数…...
云桌面技术初识:VDI,IDV,VOI,RDS
VDI(Virtual Desktop Infrastucture,虚拟桌面架构),俗称虚拟云桌面 VDI构架采用的“集中存储、集中运算”构架,所有的桌面以虚拟机的方式运行在服务器硬件虚拟化层上,桌面以图像传输的方式发送到客户端。 …...
基于本地centos构建gdal2.4.4镜像
1.前言 基于基础镜像构建gdal环境一般特别大,一般少则1.6G,多则2G甚至更大,这对于镜像的迁移造成了极大的不便。究其原因在于容器中有大量的源码文件以及编译中间过程文件,还要大量编译需要的yum库。本文主要通过在centos系统上先…...
生产环境线程问题排查
线程状态的解读RUNNABLE线程处于运行状态,不一定消耗CPU。例如,线程从网络读取数据,大多数时间是挂起的,只有数据到达时才会重新唤起进入执行状态。只有Java代码显式调用sleep或wait方法时,虚拟机才可以精准获取到线程…...
Day908.joinsnljdist和group问题和备库自增主键问题 -MySQL实战
join&snlj&dist和group问题和备库自增主键问题 Hi,我是阿昌,今天学习记录的是关于join&snlj&dist和group问题和备库自增主键问题的内容。 一、join 的写法 join 语句怎么优化?中,在介绍 join 执行顺序的时候&am…...
算法 - 剑指Offer 丑数
题目 我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。 解题思路 这题我使用最简单方法去做, 首先我们可以获取所有2n,3n,5*n的丑数,只是我们这里暂时无法排序,并且可能…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...
规则与人性的天平——由高考迟到事件引发的思考
当那位身着校服的考生在考场关闭1分钟后狂奔而至,他涨红的脸上写满绝望。铁门内秒针划过的弧度,成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定",构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...
