Linux进程概念(下)

news2024/11/18 17:26:09

 僵尸进程

进程=内核数据结构PCB+进程的代码和数据,都要占据内存空间,那么进程退出的核心工作之一:即将PCB和自己的代码和数据释放掉

我们创建进程的目标一定是为了完成某种任务,父进程/OS要知道该进程把任务完成的怎么样,所以进程在退出的时候,要有一些退出信息(存在PCB中)表明自己把任务完成的怎么样(如main函数,都要有return),当一个进程在退出的时候退出信息会由OS写入到当前退出进程的PCB中,这样,OS/父进程读取退出进程的PCB中的退出信息,就可得知子进程退出的原因。可以允许进程的代码和数据空间被释放,但是不能允许进程的PCB立即被释放

那么此刻便有这样一种情况:进程退出了,但是还没有被父进程/OS读取退出信息,故而os必须要维护这个退出进程的PCB结构,此时,这个进程的状态就是Z:僵尸状态

如果一个进程Z状态了,但是父进程就是不回收它,PCB就会一直存在,所以,如果我们不及时回收,会导致内存泄漏,只有父进程/OS读取之后,PCB状态才会由Z状态(僵尸状态)改成X状态(死亡状态),才会被释放


孤儿进程

父进程如果提前退出,那么子进程后退出,进入Z之后,那该如何处理呢?
父进程先退出,子进程就称之为“孤儿进程”

孤儿进程被1号init进程(即操作系统)领养,有init进程回收
 

进程优先级
 

基本概念
 

1 cpu资源分配的先后顺序,就是指进程的优先权(priority)

2 优先权高的进程有优先执行权利,配置进程优先权对多任务环境的linux很有用,可以改善系统性能
3 还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能

多个进程在cpu的运行队列中排队等待被调度,排队的本质就是在确认优先级

优先级是什么?优先级是得到某种资源的先后顺序

为什么要有优先级?因为资源不足

其实优先级就是PCB中的一个int字段,数值越小,优先级越大

Linux中进程的优先级数值范围:60~99(共40个等级)

Linux中默认进程的优先级都是80

Linux支持动态优先级调整:linux中进程PCB里存在一个nice值(进程优先级的修正数据)

即新的优先级=默认优先级+nice值

nice调整最小是:-20 超过部分统一当成-20

nice调整最大是:19,超过部分统一当成19

那么为什么要把优先级限定在一定的范围内?为了较为公平

因为OS调度时,需要较为均衡地让每一个进程都要得到调度,如果不限制范围,容易导致优先级较低的进程长时间得不到CPU资源,导致进程饥饿

查看系统进程
 

在linux中,输入ps-la指令,会出现以下内容:

UID : 代表执行者的身份
PID : 代表这个进程的代号
PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号
PRI :代表这个进程可被执行的优先级,其值越小越早被执行
NI :代表这个进程的nice值

查看进程优先级的命令

用top命令更改已存在进程的nice
 

1 top

2 进入top后按“r”–>输入进程PID–>输入nice值

每一个进程不是占有cpu就一直运行,每隔一段时间(时间片),自动被从cpu上剥离下来,此外linux内核支持进程之间进行cpu资源抢占,即基于时间片的轮转式抢占内核

其他概念:

竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级
独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰
并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行
并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发
 

cpu中存在许多寄存器,如eax,ebx,ecx……

为什么我们函数内定义的栈临时变量会返回给外部?

因为eax寄存器保存了它的值,eax充当了代码的临时空间

为什么我们的进程/程序,它怎么知道我们当前运行到哪里?

因为cpu内的eip(程序计数器)它存储了下一条指令的地址

我们的进程在运行的时候,是会使用这些寄存器的,我们的进程会产生各种数据,在寄存器中临时保存,如果我们有多个进程,各个进程在CPU寄存器中形成的临时数据(即进程的硬件上下文)都应该是不一样的

cpu寄存器只有1套,若是有10个进程,那么进程的上下文数据就有10套,所以寄存器!=寄存器的内容

将cpu内的寄存器数据保存到进程pcb中(简单理解),本质就是cpu寄存器中的内容,保存到内存中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1118266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

轻松实现批量转换,将JPG图片一键转换为PNG格式!

在处理大量图片时,将JPG格式图片转换为PNG格式可能会耗费您大量的时间和精力。为了让您的工作更加轻松,我们为您推出了一款高效的批量图片处理工具,让您能够轻松将JPG图片一键转换为PNG格式,提高处理效率! 首先&#…

使用命令行cli脚手架创建uniapp项目(微信小程序、H5、APP)

除了使用HBuilderX工具可视化搭建项目外,DCloud官方还提供了一个脚手架用于命令行搭建项目。 uni-app项目支持 uni cli和 HBuilderX cli两种脚手架工具: uni cli:面向非HBuilderX的用户(如习惯使用vscode/webstorm的开发者&#…

【数据结构】八大排序

目录 1. 排序的概念及其作用 1.1 排序的概念 1.2 排序运用 1.3 常见的排序算法 2. 常见排序算法的实现 2.1 插入排序 2.1.1 基本思想 2.1.2 直接插入排序 2.1.3 希尔排序(缩小增量排序) 2.2 选择排序 2.2.1 基本思想 2.2.2 直接选择排序 2.2…

掌握Java中的volatile关键字

高速缓存 什么是高速缓存 高速缓存(Cache)是一种用于存储计算机数据的临时存储设备,用于加速数据访问速度,减少对主存储器(RAM)或磁盘的频繁访问。高速缓存通过将最常用的数据存储在更接近CPU的位置&…

使用Perl和WWW::Mechanize库编写

以下是一个使用Perl和WWW::Mechanize库编写的网络爬虫程序的内容。代码必须使用以下代码:jshk.com.cn/get_proxy 首先,确保已经安装了Perl和WWW::Mechanize库。如果没有,请使用以下命令安装: cpan WWW::Mechanize创建一个新的Pe…

【MATLAB源码-第52期】基于matlab的4用户DS-CDMA误码率仿真,对比不同信道以及不同扩频码。

操作环境: MATLAB 2022a 1、算法描述 1. DS-CDMA系统 DS-CDMA (Direct Sequence Code Division Multiple Access) 是一种多址接入技术,其基本思想是使用伪随机码序列来调制发送信号。DS-CDMA的特点是所有用户在同一频率上同时发送和接收信息&#xf…

抖音热搜榜:探索热门话题的独特魅力

在信息爆炸的时代,我们每天都会接收到大量的信息,而抖音热搜榜就像是一个窗口,让我们能够窥见当下最受欢迎、最具话题性的内容。作为全球最受欢迎的短视频平台之一,抖音凭借其海量的内容、独特的推荐算法,让越来越多的…

阿里低代码Low Code Engine快速上手

一、环境准备 在正式开始之前,我们需要先安装相应的软件:WSL、Node等。Window 环境需要使用 WSL 在 windows 下进行低代码引擎相关的开发。安装教程➡️ WSL 安装教程。对于 Window 环境来说,之后所有需要执行命令的操作都是在 WSL 终端执行的。 2.1 Node 推荐安装Node 1…

Topaz Photo AI forMac/win:革命性的图片降噪软件

Topaz Photo AI是一款革命性的图片降噪软件,它利用人工智能技术对图片进行降噪处理,让你的照片焕然一新。与传统的降噪软件不同,Topaz Photo AI不仅降噪效果更出色,而且操作简单,让你可以轻松地提升图片质量。 Topaz …

CUDA学习笔记6——事件计时

事件计时 CUDA事件是直接在GPU上实现的,因此它们不适用于对同时包含设备代码和主机代码的混合代码计时。 cudaEventCreate 创建一个事件cudaEventRecord 记录一个事件cudaEventElapsedTime 计算两个事件之间经历的时间,第一个参数为某个浮点变量的地址…

MS12_020 3389远程溢出漏洞

1.search ms12_020 搜索ms12_020 2.use auxiliary/scanner/rdp/ms12_020_check 检查是否存在ms12_020漏洞 show options 查看所需参数 set RHOSTS x.x.x.x 设置目标IP地址 run 执行 检测出来有Ms12_020漏洞 3.use auxiliary/dos/windows/rdp/ms12_020_maxchannelids 选择…

SMOS土壤水分产品下载

SMOS土壤水分产品下载 打开下载网站 打开网站 打开DATA下的SMOS 然后找到SMOS的L1和L2data 首先需要注册一下,在该网站 然后找到了SMOS的NRT土壤水分产品,该产品从2010年开始,一直发布到现在,是基于L波段。 这里就是每天的土…

卷积神经网络CNN学习笔记-MaxPool2D函数解析

目录 1.函数签名:2.学习中的疑问3.代码 1.函数签名: torch.nn.MaxPool2d(kernel_size, strideNone, padding0, dilation1, return_indicesFalse, ceil_modeFalse) 2.学习中的疑问 Q:使用MaxPool2D池化时,当卷积核移动到某位置,该卷积核覆盖区域超过了输入尺寸时,MaxPool2D会…

emqx 启动正常,但是1883端口无法telnet,emqx无法正常工作

emqx一直正常工作,后面突然就不工作了,查找日志,发现报错说设备空间不足,但是我记得华为云SSD从40G扩容到500G,不至于空间不足,于是运行df -Dh确实显示只有40G,运行lsblk确实有500G,…

2016-2023全国MPA国家A类线趋势图:浙大MPA要高多少?

公共管理硕士(MPA)项目的国家线这些年相对比较平稳,虽然以体制内考生为主的项目总体应试能力是比较强的,但因为全国mpa项目众多,能力参差不齐,导致每年的国家线划定也需要考虑综合情况。根据专注浙大的杭州…

Qt实现一个电子相册

一、要实现的功能 在窗口中可以显示图片,并且能够通过两个按钮进行图片的前进和后退的顺序切换。有一个按钮,通过这个按钮可以从所存图片资源中随机选取一个图片进行展示通过按钮可以控制图片自动轮播顺序切换的开始与停止,显示当前系统的时…

Spring framework day 03:Spring 整合 Mybatis(分页)

前言 在当今快速发展的软件开发领域,Java作为一种广泛使用的编程语言,以其强大的生态系统和丰富的框架而备受推崇。而在Java开发中,Spring框架几乎成为了事实上的标准,它为开发者提供了一种优雅且高效的方式来构建企业级应用程序…

CVE-2019-0708漏洞实战

使用命令:search 0708搜索exp脚本 搜索网段中主机漏洞 use auxiliary/scanner/rdp/cve_2019_0708_bluekeep 照例,show options 看一下配置 设置网段set RHOSTS x.x.x.x run运行就行了 使用攻击模块 use exploit/windows/rdp/cve_2019_0708_bluekee…

PAM从入门到精通(十八)

接前一篇文章:PAM从入门到精通(十七) 本文参考: 《The Linux-PAM Application Developers Guide》 PAM 的应用开发和内部实现源码分析 先再来重温一下PAM系统架构: 更加形象的形式: 六、整体流程示例 2.…