cmd 找到8080对应进程_多进程概括

多进程图像

操作系统记录进程,并按照合理的次序交替推进(分配资源,不断调度),提高CPU利用率和程序执行速度,这就是操作系统的多进程图像。

当操作系统启动时,多进程图像就出现了。 在linux内核源码main.c文件中,对操作系统初始化时,通过fork()系统调用启动了1号进程,进行初始化,再启动shell。 在shell中,我们输入命令时,会再调用fork()启动其他进程。

// main.c
if (!fork()) {init();
}// shell
while(1) {scanf("%s", cmd);if (!fork()) {exce(cmd);}wait();
}

在windows中我们可以通过任务管理器看到所有进程,Linux可以通过输入topps命令查看进程,这就实现了进程的可视化。

2b75d9267b9ad43b2e89cdba09b4e8f9.png

组织调度交替执行进程

进程队列

操作系统会将进程划分成不同的队列,并用PCB来记录进程信息。

比如有的进程正在执行的队列,有的进程在等待被执行的队列,有的进程在等待硬盘读取结果的队列,还有的进程在已经执行结束的队列。

其实跟我们在食堂排队一样,一条队伍排队等着打饭,一条队伍排队等着打菜,一条队伍排队等着打汤。

7aaa90bc489572304629c7e3231e6ea2.png

进程状态

操作系统通过进程的状态来划分不同的队列。

新建态,刚刚被创建,分配资源。

就绪态,进程已经可以被执行了,等待CPU中。

运行态,进程正在被CPU执行。

阻塞态,进程正在等待,磁盘等IO操作完成返回结果。

终止态,进程执行结束。

操作系统对通过状态的不同管理进程,将相同状态的进程连接成一个队列,通过调度算法不断交替执行进程,改变进程状态,从而推进多个进程不断向前推进。

2c402cdb39c9382236633feaa827122c.png

进程的管理和我们现实生活中处理方式一样,比如我们去政府大厅办事,不同窗口的工作人员就是CPU。 在机器正在扫码领取排队号的人就处于新建态,正在办理业务的人就处于运行态,坐在椅子上等的人就处于就绪态,而办理业务的时候发现身份证没带,去一边等朋友送身份证的人就是阻塞态,办理完了的人就处于终止态了。

调度算法

进程数量远大于CPU数量,操作系统就要对进程进行调度,如果调度不合理也会导致效率低的问题,极端情况下CPU无事可干,再比如有的进程比较重要需要优先执行完,操作系统还需要将CPU资源优先分配给这类进程。

总之一个好的调度算法非常重要,这也是很多计算机科学家在不断研究推进的一个课题。

最简单的调度算法就是FIFO+优先级。 FIFO就是先进先出算法,高优先级的先被执行,相同优先级下,先进入队列的先被执行,后进入队列的后执行。

其他调度算法有兴趣可以慢慢研究。

进程切换

进程切换首先修改PCB中的状态值,并插入到对应的状态队列中。

调用schedule()模块进行切换,getNext()可以理解成内部实现了一个调度算法,从就绪队列中取出下一个可被执行的进程。

e3280a27d22cb0ca35dac5347afef671.png

PCB信息切换,switch_to()就先保存被切换的进程信息,再初始化或恢复即将执行的进程信息。

代码只是简单描述,实际工作非常复杂。

其实对照我们上面的描述,先将资源,比如寄存器中的值保存到当前进程的PCB中。然后将即将执行的进程信息从PCB中恢复或初始化,比如PCB中保存的寄存器值赋值给寄存器。

33b16afe39a7074330a2c625e72f1d99.png

多进程的内存隔离

多进程执行过程可能遇到下图这个问题。

当进程1使用数据的内存地址是进程2代码的指令地址。 当进程1执行的过程中,有可能在0x100地址写入新值,导致进程2被破坏无法执行。

5c8c210735834c79bd04b9c208ccd67b.png

这个问题解决的办法就是将不同进程使用的内存进行空间分离。

因此需要有个中间带进行隔离,在进程和物理内存之间引入映射表。 进程使用的内存地址,通过映射表转换成物理内存地址,从而使不同进程的内存地址进行分离。

如下图所示,虽然进程1和进程2都使用了内存地址0x100,但是通过映射表获取的物理地址分别是0x7800x1260

32594686c71cb6523f87bb94436f2830.png

操作系统为每个进程的设置的映射表,是按照一定映射规则来的,具体细节不去研究,但是可以保证内存地址空间分离,每个进程都在自己的一亩三分地里面执行。

就好比南京和福州都有鼓楼区,虽然名字一样,但是南京和福州空间已经分离了,所以各地的人说到鼓楼区并不会冲突。

多进程合作

进程也可以相互合作,但是如果两个进程共同修改使用相同的数据,可能会导致数据错乱的问题。

比如一个传统模型-生产者消费者模型。

生产者进程负责生成数据,消费者进程负责使用数据。

如下图所示,生产者进程,生产一个数据count++,当count=10时,停止生产数据。消费者进程,消费一个数据count--,当count=0,停止消费数据。

消费者进程和生产者进程共享了count

395691403b48ae0589c827bcd342816d.png

由于进程是交替执行,有可能生产者进程生产了数据,但是count还没有+1,就切换到了消费者进程,导致消费者进程使用的count的值是错误的,从而导致合作结果产生错误。

c7d27812349237072fb73c59f403c4d5.png

如果要解决这个问题,就需要保证当一个进程正在使用count时,其他进程不会使用。 其他进程只有等到count被释放时,才能使用。

这就是多进程的锁机制,实现进程同步,后面会详细说。

7c838a5e8ff7f19db50e3f9541668962.png

总结

操作系统通过PCB保存进程信息。

操作系统根据进程的执行情况设置不同的状态,并划分到相应的状态队列中,通过调度算法交替切换执行进程。

每个进程通过映射表访问物理内存地址,实现了不同进程之间的空间隔离。

多进程合作共享数据会可能导致数据不一致等问题,通过锁机制实现进程同步,合理推进进程顺序。

PS: 以上图片来自MOOC的哈工大李老师的操作系统课程,李老师的课讲的非常好,推荐大家观看学习,如果文章有错误之处,欢迎指正,目前还处于学习阶段。

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

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

相关文章

Eclipse中安装Ext插件(Spket IDE)

在网上找了很多资料,这里重新整理一下。 Spket IDE是目前支持Ext 2.0最为出色的IDE。 它采用.jsb project file 文件并将继承于基类和所有文档的内容嵌入到生成代码提示的. doc中。由于Spket只是一个单纯的编辑器,没有其它格式的支持(如CSS&a…

python去噪音_python中的噪声是什么意思

你的序列均值为零吗? 方差随时间变化吗? 值与延迟值相关吗? 你可以用一些工具来检查你的时间序列是否为白噪音: 创建一个折线图。检查总体特征,如变化的平均值,方差或延迟变量之间的明显关系。 计算汇总统计。对照序列中有意义的连续块的均值和方差&a…

VC DLL学习

1 用VC创建DLL动态链接库1.1 创建dll项目1.2 为dll项目编写源文件头文件dllDemo.hextern"C"_declspec(dllexport) intSum(inta,intb);//加法函数。extern"C"_declspec(dllexport) intMax(inta, intb);//取较大值函数extern"C"_declspec(dllexpor…

乐在其中设计模式(C#) - 原型模式(Prototype Pattern)

[索引页][源码下载]乐在其中设计模式(C#) - 原型模式(Prototype Pattern)作者:webabcd介绍用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。示例有一个Message实体类,现在要克隆它。MessageModelusing System; using Syst…

java dump分析工具_Java 性能分析工具 (2):Java 内置监控工具

引言本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具。在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身。在 JDK 中有许多内置的工具,其中包括:jcmd:打印一个 Java 进…

Python面试题(第二篇)

第二部分 网络编程和并发(34题)1、简述 OSI 七层协议。2、什么是C/S和B/S架构?3、简述 三次握手、四次挥手的流程。4、什么是arp协议?5、TCP和UDP的区别?6、什么是局域网和广域网?7、为何基于tcp协议的通信…

noip模拟赛 radius

分析:这道题实在是不好想,一个可以骗分的想法是假定要求的那个点在中心点上,可以骗得不少分.但是在边上的点要怎么确定呢?理论复杂度O(﹢无穷).答案一定是和端点有关的,涉及到最大值最小,考虑二分最大值&…

c语言中int的取值范围_c语言入门(1)

c语言入门C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言,所以说学习C语言是进入编程世…

vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确, 然后再试一次。

vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确, 然后再试一次。 报错原因: 没有安装脚手架vue-cli 解决方法:安装脚手架vue-cli npm inst…

session的生命周期

session的生命周期分为创建、活动、销毁三个阶段 创建一个新的会话不代表旧的会话就销毁了 session.invalidate()方法可以销毁当前会话 在page1中写上这个方法再打开网页 说明该会话被销毁了出现了错误 我们把这个方法写在所有代码段的下面 再打开这个网页 刷新网页 这个sessio…

虚拟化与网络

本文转自Grodd51CTO博客,原文链接:http://blog.51cto.com/juispan/1959791,如需转载请自行联系原作者

算法基础之搜索和经典排序

目录 简介 搜索算法 二分法查找 排序算法 冒泡排序(Bubble Sort) 选择排序(Selection Sort) 插入排序(Insert Sort) 快速排序(Quick Sort) 归并排序(Merge Sort…

背景宽高随文本变化_中科大提出ContourNet:更准确的任意形状场景文本检测新方法...

点击上方“CVer”,选择加"星标"置顶重磅干货,第一时间送达本文转载自:CSIG文档图像分析与识别专委会本文简要介绍2020年被CVPR录用的论文“ContourNet: Taking a Further Step toward Accurate Arbitrary-shaped Scene Text Detect…

算法面试题汇总(更新中)

1、根据数字返回相应位置数字 def get_digit(num, i):# i0 个位 1 十位 2 百位...return num // (10 ** i) % 10# print(get_digit(12345, 6)) 2、列表反转,不用内置函数 def reverse_list(li):n len(li)for i in range(n // 2):li[i], li[n-i-1] li[n-i-1], …

使用Jmeter对mysql进行性能测试入门

使用Jmeter对mysql进行性能测试入门 第一步:测试环境准备: 1)、mysql> select version(); ----------- | version() | ----------- | 5.5.13 | ----------- ms数据库数据: mysql> select count(*) from account; ----------…

算法基础之数据结构

whats the 数据结构 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中。 比如:列表、集合与字典等都是一种数据结构。 通常情况下&#xff…

soap接口怎么不返回tuple python_Python 中的接口

Python 是动态类型语言, 只在运行时做 Duck Typing 检查.利: 灵活, 方便弊: 代码混乱, 缺少规范标准自带两类接口支持: abc 和 typing.Protocol, 有他们协助给天马行空的程序员套上枷锁, Python 的大工程才可以"上道"abcabc 就是 Abstract Base Class, 虚基类. 跟 Ja…

java 第11次作业:你能看懂就说明你理解了——this关键字

this 代表当前对象 转载于:https://www.cnblogs.com/qingyundian/p/7736699.html

c#多线程操作界面控件的简单实现

一个小功能,早有人实现了。自己在一个项目中用到,觉得有必要记录一下,写下来。代码 从上面你可能已经看出如何多线程操作同一个控件的,就是通过一个委托,然后定义委托方法,判断控件的InvokeRequired属性&am…

ssh 免密_Linux下配置SSH免密通信 “sshkeygen”的基本用法

利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。1 什么是SSH引用百度百科的说明:SSH 为 Secure Shell的缩写,由 IETF 的网络小组(Network Working Group)所制定;它是…