【期末复习】二、进程管理

1.进程的内存结构🍊

  1. 程序加载到内存之后就变成了一个进程,进程在内存当中的一个结构有:

文本段(text section):存放程序代码

栈(stack):存放局部变量和函数返回地址

数据段(data section):存放全局变量和静态变量(static)

堆(heap):程序运行时的动态内存分配

SP(Stack Pointer):堆栈指针

PC(Program counter):程序计数器

【程序分析题】

#include <stdio.h>
#include <stdlib.h>int global = 100;void f(int x, int y) {int local = 50;int *p = (int *)malloc(100);// 假设在此处进行一些操作free(p);
}int main() {static int s = 20;int a = 30;f(a, global);return 0;
}

①全局变量global存储在内存的哪个区域?

全局变量global存储在数据段(Data Segment)。

②函数f中的局部变量local存储在内存的哪个区域?

函数f中的局部变量local存储在栈(Stack)中。

③函数f中通过malloc分配的内存位于哪个区域?

函数f中通过malloc分配的内存位于堆(Heap)。

④函数main中的静态变量s存储在内存的哪个区域?

函数main中的静态变量s存储在数据段(Data Segment)。

⑤在函数f执行过程中,当调用malloc时,栈指针(SP)和程序计数器(PC)会如何变化?

当函数f调用malloc时,栈指针(SP)会向低地址方向移动(因为栈是从高地址向低地址生长),为局部变量local和指针p在栈上分配空间;程序计数器(PC)会指向malloc函数在内存中的代码位置(位于文本段,Text Segment),执行malloc函数的二进制指令,然后在堆上分配 100 字节的内存,堆指针会相应调整以指向新分配的内存块。

2.进程的状态

三状态

运行态 / 执行态(Running):此时进程的代码在CPU上运行

就绪态(Ready):进程具备运行条件,等待分配CPU

等待态 / 阻塞态(Waiting/Blocked):进程在等待某些事件的发生(比如IO操作结束或是一个信号),不具备运行条件

进程何时离开CPU

内部事件:进程主动放弃(yield)CPU,进入等待/终止状态;使用I/O设备,(非)正常结束(除零异常)。

外部事件:进程被剥夺CPU使用权,进入就绪状态,这个动作叫抢占(preempt);时间片到达,高优先权进程到达。

五状态

七状态

挂起状态可以分为两种:

阻塞挂起状态:进程在外存(硬盘)并等待某个事件的出现;

就绪挂起状态:进程在外存(硬盘),但只要进入内存,即刻立刻运行。


【简答题】进程的三状态/五状态/七状态具体是什么?

三状态模型是最简单的进程状态模型,包括:

(1)运行(Running): 进程正在使用CPU,其指令正在执行。

(2)就绪(Ready): 进程具备执行条件,可以获得CPU执行,但当前未被分配CPU。

(3)阻塞(Blocked/Waiting): 进程正在等待某个事件发生(如I/O操作完成),暂时不能执行。

五状态模型增加了对进程创建和终止的支持,包括:

(1)新建(New):进程正在被创建,系统尚未对其进行完全初始化。

(2)就绪(Ready):已准备好运行,但未获得CPU。

(3)运行(Running):正在使用CPU执行。

(4)阻塞(Blocked/Waiting):等待事件(如I/O)完成。

(5)终止(Terminated/Exit):进程执行完成或被终止,等待操作系统进行清理。

七状态模型详细描述了进程切换的多个转变状态,具体状态可能因设计而异,一般包括:

(1)新建(New):进程正在被创建,系统尚未对其进行完全初始化。

(2)就绪(Ready):已准备好运行,但未获得CPU。

(3)运行(Running):正在使用CPU执行。

(4)阻塞(Blocked/Waiting):等待事件(如I/O)完成。

(5)终止(Terminated/Exit): 进程执行完成或被终止,等待操作系统进行清理。

(6)挂起就绪(Ready Suspended): 进程已被挂起,但若从挂起中恢复即可直接运行。

(7)挂起阻塞(Blocked Suspended): 进程处于阻塞状态,并已被挂起。

3.进程的切换 

中断是触发事件,可能会导致上下文切换,而进程切换是上下文切换在进程层面的一种体现。

进程切换是上下文切换的一种特殊情况,它特指 CPU 从一个进程的执行切换到另一个进程的执行。而上下文切换是指在多任务操作系统中,CPU 从一个进程(或线程)的运行环境切换到另一个进程(或线程)的运行环境的过程。

切换时机

进程需要进入等待状态(主动)

进程被抢占CPU而进入就绪状态(被动)

切换过程

保存被中断进程的上下文信息(Context)

修改被中断进程的控制信息(如状态等)

将被中断的进程加入相应的状态队列

调度一个新的进程并恢复它的上下文信息

【简答题】进程的上下文都包含哪些具体的内容?

进程的上下文主要包含以下两个方面:

(1) 运行实体: 栈、堆、数据段和文本段以及与之相关联的程序计数器(PC)、栈指针(SP)、通用寄存器等。

(2) 进程控制块(PCB)信息: 进程标识符(PID)、进程状态、优先级、打开的文件列表等。

4.通过系统调用创建新进程

system()

fork()

exec()

5.进程通讯

什么是进程通信?进程通信是指在操作系统中,不同的进程之间交换数据和信息的方式。其主要目的是为了在多进程环境中实现同步、资源共享和数据共享。

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

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

相关文章

Type-C多口适配器:高效充电与连接解决方案

在科技飞速发展的今天&#xff0c;我们的生活已经离不开各种各样的电子设备&#xff0c;如智能手机、平板电脑、智能手表和无线耳机等。这些设备不仅丰富了我们的数字生活&#xff0c;也带来了更多的充电需求。传统的单一充电口已经难以满足现代人对于便捷性和效率的追求&#…

UCAS 24秋网络认证技术 CH10 SSL 复习

TLS字段、参数含义要了解每个消息是什么意思 基本方式只验证服务端&#xff0c;服务端有证书&#xff0c;变形方式加上验证客户端TLS1.3区别 协商过程 背景 Record层使用的各种加密算法参数&#xff0c;均由Handshake协议协商获得。 具体过程 随机数交换 Client/Server相互…

支付宝商家转账到账户余额,支持多商户管理

大家好&#xff0c;我是小悟 转账到支付宝账户是一种通过 API 完成单笔转账的功能&#xff0c;支付宝商家可以向其他支付宝账户进行单笔转账。 商家只需输入另一个正确的支付宝账号&#xff0c;即可将资金从本企业支付宝账户转账至另一个支付宝账户。 该产品适用行业较广&am…

c# 中Parallel.ForEach 对其中一个变量进行赋值 引发报错

在 C# 中使用 Parallel.ForEach 方法时&#xff0c;如果你尝试在并行循环中对共享变量进行赋值&#xff0c;很可能会遇到线程安全问题或竞争条件&#xff08;race conditions&#xff09;&#xff0c;这可能导致数据不一致、程序崩溃或其他不可预测的行为。 问题描述 假设你有…

基于Django的旅游信息管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着我国经济的高速发展与人们生活水平的日益提高&#xff0c;人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下&#xff0c;人们更趋向于足不出户解决生活上的问题&#xff0c;线上管理系统展现了其蓬勃生命力和广阔的前景。与此同时&#xff0c;随着…

常见的框架漏洞复现

1.Thinkphp Thinkphp5x远程命令执行及getshell 搭建靶场 cd vulhub/thinkphp/5-rce docker-compose up -d 首页 漏洞根本源于 thinkphp/library/think/Request.php 中method方法可以进行变量覆盖&#xff0c;通过覆盖类的核心属性filter导致rce&#xff0c;其攻击点较为多&…

UE5中实现右键开镜效果

右键之后添加时间轴&#xff0c;然后设置视野即可。Set Field Of View 时间轴设置&#xff0c;第一个点设置0,90度&#xff0c;因为默认的就是90度 第二个点看武器的类型或者倍境来设置&#xff0c;时间就是开镜时间&#xff0c;值越小开镜速度越快&#xff0c;第二个值就是视野…

关于华硕Armoury Crate(奥创中心)安装程序失败、卡进度条问题解决方案

关于华硕Armoury Crate(奥创中心&#xff09;安装失败解决方案 清理旧版本文件 如果之前安装过Armoury Crate&#xff0c;可能有残留文件导致冲突&#xff1a; 利用官方的卸载工具&#xff0c;卸载旧版本&#xff1a; https://www.asus.com.cn/supportonly/armoury%20crate/…

iOS18 上的 Genmoji

在 WWDC 2025 期间&#xff0c;一种名为Genmoji的新型表情符号问世。 许多用户可能仍然不确定 Genmoji 是什么、它与传统表情符号有何不同、如何使用它以及如何恢复丢失的数据。因此&#xff0c;在本文中&#xff0c;我们将介绍您需要了解的有关 iOS 18 上的 Genmoji 的所有信…

基于等保的安全审计运维系统

摘要 本文研究与设计一种基于等级保护&#xff08;等保&#xff09;要求的安全审计运维系统&#xff0c;以适应日益严峻的网络安全形势和不断提高的安全审计需求。随着信息技术的快速发展和应用广泛&#xff0c;信息系统安全面临的威胁也在不断增加&#xff0c;特别是在关键信…

C# 设计模式(结构型模式):装饰器模式

C# 设计模式&#xff08;结构型模式&#xff09;&#xff1a;装饰器模式 在软件开发中&#xff0c;面对需要扩展功能但又不想修改已有代码的情况时&#xff0c;装饰模式&#xff08;Decorator Pattern&#xff09;是一个非常有用的设计模式。装饰模式允许我们在不改变对象自身…

【OAuth2系列】如何使用OAuth 2.0实现安全授权?详解四种授权方式

作者&#xff1a;后端小肥肠 &#x1f347; 我写过的文章中的相关代码放到了gitee&#xff0c;地址&#xff1a;xfc-fdw-cloud: 公共解决方案 &#x1f34a; 有疑问可私信或评论区联系我。 &#x1f951; 创作不易未经允许严禁转载。 姊妹篇&#xff1a; 【OAuth2系列】集成微…

@Transcational注解为什么没有生效?

最近开发时遇到了需要使用事务的场景&#xff0c;之前的开发场景&#xff0c;都没有使用过事务&#xff0c;因此记录一下使用实践&#xff0c;以及踩坑。回想之前的开发经历&#xff0c;发现有一些场景是需要使用事务的&#xff0c;只不过当时开发经验有限&#xff0c;没想到使…

传感器与检测技术基础知识

传感器检测系统 检测系统的组成:传感器、信号调理、数握采集、信号处理、信号显示、信号输出、输入设备、稳压电源。 检测系统的基本误差分类&#xff1a;绝对误差、相对误差、引用误差&#xff0c;最大引用误差。 测量系统的误差分类&#xff1a;系统误差、随机误差、粗大误…

决定系数(R²分数)——评估回归模型性能的一个指标

目录 1.定义 2.计算举例 3. 结果分析 1.定义 R&#xff08;R平方&#xff09;分数&#xff0c;也称为决定系数&#xff0c;是用来评估回归模型性能的一个指标。它表示自变量解释因变量变异性的比例。R分数的取值范围通常在0到1之间&#xff0c;其值越接近1&#xff0c;说明…

stm32HAL库使LED闪烁

PC13引脚为开漏接法 生成代码时设置为out put open drain gpio out put level 设置为high 1表示熄灭 我们将pa9引脚连接为推挽接法 生成代码时设置为 out put push pull Gpio out put level 设置为low 0 表示熄灭 代码使其亮起再延时0.5秒再熄灭再延时0.5秒

对一个双向链表,从尾部遍历找到第一个值为x的点,将node p插入这个点之前,如果找不到,则插在末尾。使用C语言实现

以下是一个用C语言实现的双向链表&#xff08;Doubly Linked List&#xff09;插入操作的代码。该代码从尾部遍历找到第一个值为x的节点&#xff0c;并在其前插入新节点p&#xff0c;或者在未找到时将其插入链表末尾。 #include <stdio.h> #include <stdlib.h>// 定…

Linux(Centos 7.6)基础命令/常用命令说明

1.目录相关命令 命令命令说明pwd用于显示/打印当前目录位置。ls/ll 列出当前目录下的文件或者目录&#xff0c;ll是ls -l的别名&#xff0c;ls仅显示名称&#xff0c;ll会显示详细的目录文件信息。 cd目录切换&#xff0c;常见用法有&#xff0c;cd /切换到根目录&#xff0c;…

矩阵运算提速——玩转opencv::Mat

介绍:用Eigen或opencv::Mat进行矩阵的运算&#xff0c;比用cpp的vector或vector进行矩阵运算要快吗? 使用 Eigen 或 OpenCV 的 cv::Mat 进行矩阵运算通常比使用 std::vector<int> 或 std::vector<double> 更快。这主要有以下几个原因&#xff1a; 优化的底层实现…

python文件操作相关(excel)

python文件操作相关&#xff08;excel&#xff09; 1. openpyxl 库openpyxl其他用法创建与删除操作单元格追加数据格式化单元格合并单元格插入图片公式打印设置保护工作表其他功能 2. pandas 库3. xlrd 和 xlwt 库4. xlsxwriter 库5. pyxlsb 库应用场景参考资料 在 Python 中&a…