6.操作系统多进程图像

【README】

本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐;

多进程图像定义:多个进程使用cpu的图像;

多进程图像是操作系统的核心图像


【1】概述

1) PCB:

  • 指的是  process control block, 进程控制块,是一个结构体(数据结构),用于记录进程状态,并按照顺序推进进程执行(分配资源,进行调度等);
  • pcb说的简单点,就是用于存储cpu物理寄存器的数据的结构体,当然还需要存储进程状态,内存映射表等信息;

2)多进程图像从启动开始到关机结束


【1.1】main函数中的fork()创建第1个进程

1)fork函数:启动一个进程;
2)Linux操作系统初始化函数main函数,调用fork启动了第1个进程,该进程执行init函数,init启动一个shell程序;(window操作系统创建一个进程,启动一个桌面)

3)对于linux操作系统,用户通过shell程序创建其他进程;

  • 可见,进程对于计算机的使用至关重要;因为我们每解决一个任务,计算机都会启动一个进程来执行这个任务;

4)window 打开任务管理器查看多个进程;

【补充】用户使用计算机本质

  • 用户使用计算机,就是启动了一堆进程;
  • 用户管理计算机,就是管理了一堆进程;

【2】多进程如何组织与存放

 1)操作系统感知与组织进程:

  • 全靠 PCB, process control block, 进程控制块;
  • 用PCB 形成一个链表(数组)来组织多进程;

2)    进程分类:

  • 正在执行的进程;
  • 等待执行的进程;
  • 需要等待某些事件完成后(如等待磁盘响应)再继续执行的进程;

【2.1】多进程如何组织 :PCB+状态+队列

 

1)进程状态:

  • 新建态;
  • 就绪态;
  • 运行态;
  • 阻塞态;
  • 终止态;

2)操作系统更新进程状态,利用状态对进程进行管理,有序推进进程执行进度
小结:

  • 操作系统用PCB存储进程,用进程状态推进进程执行,对进程进行管理;

【2.2】多进程交替执行

1)schedule函数,进程切换函数;

Schedule(){

  pNew = getNext(readQueue); // 获取下一个就绪进程;

  switch_to(pCur, pNew); // 从当前进程切换到就绪进程;

}

 补充: pCur, pNew 都是PCB,进程控制块;

2)getNext() ,进程调度算法;

  • 调度策略包括: FIFO-先进先出,Priority-优先级;

3)进程交替执行三个部分

  • 队列操作;
  • 调度;
  • 切换;

4)切换前,把物理cpu的信息,主要是寄存器内容,保存在PCB,PCB存储在内存;

(干货)可以这样理解,cpu物理寄存器内容,存储在pcb,pcb是所有物理寄存器内容存储的载体,即pcb是逻辑寄存器

 【补充】(汇编代码与C代码区别)

  • 汇编代码,可以指定变量存储到某个具体的内存地址;
  • 而C代码,无法做到;
  • 即汇编代码可以对程序进行精细控制;

【小结】操作系统支持多进程图像所做的工作;

  • 工作1)操作系统如何组织多个进程,用PCB,PCB形成队列
  • 工作2)如何完成进程切换?通过调度函数,选择下一个进程,得到下一个进程的PCB,最后把cpu中物理寄存器内容与下一个进程PCB内容(逻辑寄存器)进行交换,(需要注意的是PCB保存在内存中);
  • 工作3)如何处理进程间的相互影响;

5)多进程交替执行时,如何处理相互产生的影响? 即并发访问问题;
多进程的信息存储在内存中,这样cpu才能取指执行;

如进程1操作地址100的数据,地址100存储进程2的代码,这样就会产生相互影响;
如何解决?

  • 限制对地址100的读写;或 多进程的地址空间分离,即每个进程占用不同的内存地址空间;(从而可以看到,内存管理也为多进程服务的)
  • 这就进入了内存管理

【2.3】 进程管理和内存管理形成多进程图像

1) 进程的内存空间映射

  • 进程1的逻辑地址100映射到物理内存地址 780;
  • 进程2的逻辑地址100映射到物理内存地址 1260;
  • 进程1与进程2 相互不会影响;


【2.4】多进程合作

1)进程合作:

  • word进程,把word文件放入打印队列,打印进程从队列取出数据进行打印;

2)进程合作问题:

  • 进程合作问题1:因为进程1和进程2交替执行,则队列7号元素存储的数据既包括进程1,也包括进程2的数据;存在数据被错误覆盖或覆写的风险
  • 进程合作问题2:生产者-消费者实例 (多进程并发执行问题,因为counter被两个进程操作)

 

 

因为多进程的并发执行问题,导致Counter语义错误,多进程合作失败

 3)进程有序合作的核心在于进程同步
进程同步指的是: 写counter时,阻断其他进程访问counter;通过加锁来阻断其他线程来访问

 


【小结】

  • 1)    多进程图像: 包含 pid1, pid2, pid3 多个进程;
  • 2)    进程数据存储:存储在 PCB结构体,PCB存储在内存;
  • 3)    多进程交替执行:通过调度函数实现,如 fifo,优先级;
  • 4)    多进程合作: 每个进程都有一段独立的内存空间;若多个进程操作同一个变量,需要对变量上锁,操作完成后,解锁变量;

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

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

相关文章

骞云科技 python_骞云科技SmartCMP6.0版本正式发布!

骞云科技作为业内领先的云管理平台及服务提供商,秉持着强力助推企业客户全面提升IT管理水平的理念。历时106天的精细打磨,涵盖110个新功能用户故事,倾注上百位研发、产品、测试小伙伴的心血投入,累计完成4343次代码提交&#xff0…

Oracle入门(五E)之讲解show parameter命令模糊查询

转载自 讲解Oracle show parameter命令的小技巧Oracle参数查询命令show parameter的一个小技巧,可以使用模糊查询,比如我想查询包含db_的参数,那么我就可以用: SQL> show parameter db_; NAME TYPE VALUE --------------------…

.NET平台开源项目速览-最快的对象映射组件Tiny Mapper之项目实践

晚上浏览博客园 看到一篇非常实用的博客:.NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper,花了10分钟简单了解了一下。 看评论也是挺有价值,同时也看到许多新手同学问道在实际项目中使用的情况。 下面就原作者的代码的基础上略作调整…

myeclipse窗口布局控件任意_木辛老师的编程课堂:Python和Qt第2讲之布局管理初探(三)...

在主窗口中放置多个控件,最好的方法是使用布局。控件的布局是学习PyQt路上比较关键也也是比较难理解的部分,赶快跟着木辛老师一起去看看吧。请点击右上角“关注”按钮关注我们哟:跟着木辛老师学习Python编程知识,变身快乐的编程达…

7.用户级线程

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.本文会介绍进程与线程的区别,线程切换,用户态线程,内核级线程等; 【1】多进程回顾 问题&#xff1a…

Oracle入门(五D)之如何设置show parameter显示隐含参数

转载自 oracle如何设置show parameter显示隐含参数在sqlplus中show parameter是显示不了隐藏参数的,需要做一个处理,如下所示: 以SYS用户登录: C:\Documents and Settings\guogang>sqlplus / as sysdba; SQL> create or r…

使用VS Code 从零开始开发并调试.NET Core 应用程序

使用VS Code 从零开始开发并调试.NET Core 应用程序,C#调试。上一篇 使用VS Code开发 调试.NET Core 应用程序 得到了大家的支持。 现在为大家带来从零开始教程,让你更好的了解.NET Core 应用程序。使用VS Code 开发C# 程序 并调试程序。 并且也会解决上…

8.内核级线程(核心级线程)

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.为什么要讲线程呢。实际要讲进程的切换;进程的切换包括切换指令,切换资源;切换指令就是切换线程(简…

Oracle入门(五F)之11g show spparameter 命令的使用

转载自 oracle 11g show spparameter 命令的使用 当我们要获取oracle数据库当前的参数值时,可以通过查询v$parameter动态性能视图得到,当然了也可以使用show parameter p_name这样的方式得到。但是在Oracle11g以前,show parameter只能获得当前…

跨平台与云端创新,为企业和开发者开辟更广阔的未来

从制造业到零售业,从市场营销到客户关系,数字化转型正在给各行各业带来巨大的变革和冲击。面对云计算、大数据、社交和移动计算,企业需要更主动地加速自身业务模式的转变,而开发者和开发团队将在这一转变过程中发挥至关重要的作用…

注解@resource的作用_Bean基于Annotation(注解)的装配方式

在Spring中,尽管使用XML配置文件可以实现Bean的装配工作,但如果应用中有很多Bean时,会导致XML配置文件过于臃肿,给后续的维护和升级工作带来一定的困难。为此,Spring提供了对Annotation(注解)技术的全面支持。Spring中…

Oracle入门(十二H)之设置、恢复和删除不可用列

转载自 Oracle设置和删除不可用列一、不可用列的定义 1、不可用列是什么? 就是表中的1个或多个列被ALTER TABLE…SET UNUSED 语句设置为无法再被程序利用的列。 2、使用场景? If you are concerned about the length of time it could take to drop colu…

9.内核级线程代码实现

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 【说明】 本文中提到的父线程可以理解为父进程因为进程包括运行资源和执行指令,又执行指令表示为线程,所以也可以说 进程包括…

python 列表生成表格_【转】Python 列表生成式

原文:https://blog.csdn.net/heartyhu/article/details/509880071. 生成列表要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11):>>> range(1, 11)[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]但如果要生成[1x1, 2x2, 3x3, ……

Linux(CentOS 6.7)下配置Mono和Jexus并且部署ASP.NET MVC3、4、5和WebApi(跨平台)

1.开篇说明 a. 首先我在写这篇博客之前,已经在自己本地配置了mono和jexus并且成功部署了asp.net mvc项目,我也是依赖于在网上查找的各种资料来配置环境并且部署项目的,而其在网上也已有了很多这方面的文章,故而我就想我是写还是不…

10.操作系统演进过程

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》的《操作系统的那棵树》,内容非常棒,墙裂推荐; 2.思维僵化与发散 the mind is not a vessel that needs filing, but wood that needs igniting. 头脑不是需要归档的容器&am…

Oracle入门(十二I)之误删除数据的恢复方法

转载自 oracle误删除数据的恢复方法今天主要以oracle数据库为例,介绍关于表中数据删除的解决办法。(不考虑全库备份和利用归档日志)删除表中数据有三种方法:delete(删除一条记录)drop或truncate删除表格中数…

Oracle入门(七A)之表空间配额(quota)

转载自 oracle表空间配额(quota)一、quota相关视图 1)dba_ts_quotas(查看所有用户的表空间配额) BYTES字段表示用户已经使用的空间;MAX_BYTES如果为-1表示没有限制,其他值表示限制配额 --只有用alter user user_name quota on tab…

python嵌套列表字典_python中嵌套列表转为字典

题目:# 有一组用例数据如下:cases [[case_id, case_title, url, data, excepted],[1, 用例1, www.baudi.com, 001, ok],[4, 用例4, www.baudi.com, 002, ok],[2, 用例2, www.baudi.com, 002, ok],[3, 用例3, www.baudi.com, 002, ok],[5, 用例5, www.ba…

.NET之全平台一体化的体验

一、前言 近来利用空闲时间研究了一下Xamarin的技术,想想既然提供了如此好的支持,就该尝试一切可能,来一个”大小通吃“。 何为全平台:APP包括Android、IOS、WP,WEB可在Window和Linux部署运行(进可攻,退可守…