过程掌握:过程的创立、终止、壅塞、叫醒和切换

过程掌握的次要功用是对零碎中的一切过程施行无效的治理,它具有创立新过程、撤销已有过程、完成过程形态转换等功用。在操作零碎中,普通把过程掌握用的程序段称为原语,原语的特色是履行时期不许可中缀,它是一个弗成联系的根本单元。

过程的创立

许可一个过程创立另一个过程。此时创立者称为父过程,被创立的过程称为子过程。子过程可以承继父过程所具有的资本。当子过程被撤销时,应将其从父过程那边取得的资本出借给父过程。此外,在撤销父过程时,也必需同时撤销其一切的子过程。
在操作零碎中,终端用户登录零碎、功课调剂、零碎供给效劳、用户程序的使用恳求等都邑惹起过程的创立。操作零碎创立一个新过程的进程如下(创立原语):

  1. 为新过程分派一个独一的过程标识号,并请求一个空白的PCB(PCB是无限的)。若PCB请求掉败则创立掉败。
  2. 为过程分派资本,为新过程的程序和数据、以及用户栈分派需要的内存空间(在PCB 中表现)。留意:这里假如资本缺乏(比方内存空间),并不是创立掉败,而是处于”等候形态“,或称为“壅塞形态”,等候的是内存这个资本。
  3. 初始化PCB,次要包含初始化标记信息、初始化处置机形态信息和初始化处置机掌握信息,以及设置过程的优先级等。
  4. 假如过程停当队列可以回收新过程,就将新过程拔出到停当队列,等候被调剂运转。

过程的终止

惹起过程终止的事情次要有:正常完毕,表现过程的义务曾经完成和预备加入运转。异常完毕是指过程在运转时,发作了某种异常事情,使程序无法持续运转,如存储区越界、维护错、合法指令、特权指令错、I/O毛病等。外界干涉是指过程应外界的恳求而终止运转,如操作员或操作零碎干涉、父过程恳求和父过程终止。
操作零碎终止过程的进程如下(撤销原语):

  1. 依据被终止过程的标识符,检索PCB,从中读出该过程的形态。
  2. 若被终止过程处于履行形态,立刻终止该过程的履行,将处置机资本分派给其他过程。
  3. 若该过程还有子过程,则应将其一切子过程终止。
  4. 将该过程所具有的全体资本,或出借给其父过程或出借给操作零碎。
  5. 将该PCB从地点队列(链表)中删除。

过程的壅塞和叫醒

正在履行的过程,因为等待的某些事情未发作,如恳求零碎资本掉败、等候某种操作的完成、新数据尚未抵达或无新任务做等,则由零碎主动履行壅塞原语(Block),使本人由运转形态变为壅塞形态。可见,过程的壅塞是过程本身的一种自动行动,也因而只要处于运转态的过程(取得CPU),才能够将其转为壅塞形态。
壅塞原语的履行进程是:

  1. 找到将要被壅塞过程的标识号对应的PCB。
  2. 若该过程为运转形态,则维护其现场,将其形态转为壅塞形态,中止运转。
  3. 把该PCB拔出到响应事情的等候队列中去。

当被壅塞过程所等待的事情呈现时,如它所启动的I/O操作已完成或其所等待的数据已抵达,则由有关过程(比方,供给数据的过程)挪用叫醒原语(Wakeup),将等候该事情的过程叫醒。
叫醒原语的履行进程是:

  1. 在该事情的等候队列中找到响应过程的PCB。
  2. 将其从等候队列中移出,并置其形态为停当形态。
  3. 把该PCB拔出停当队列中,等候调剂程序调剂。

需求留意的是,Block原语和Wakeup原语是一对感化刚好相反的原语,必需成对运用。 Block原语是由被壅塞过程自我挪用完成的,而Wakeup原语则是由一个与被叫醒过程相协作或被其他相干的过程挪用完成的。

过程切换

关于平日的过程,其创立、撤销以及请求由零碎装备完成的I/O操作多是应用零碎挪用而进入内核,再由内核中响应处置程序予以完成的。过程切换异样是在内核的支撑下完成的,因而可以说,任何过程多是在操作零碎内核的支撑下运转的,是与内核严密相干的。
过程切换是指处置机从一个过程的运转转到另一个过程上运转,这个进程中,过程的运转情况发生了本质性的变更。
过程切换的进程如下:

  1. 保管处置机上下文,包含程序计数器和其他存放器。
  2. 更新PCB信息。
  3. 把过程的PCB移入响应的队列,如停当、在某事情壅塞等队列。
  4. 选择另一个过程履行,并更新其PCB。
  5. 更新内存治理的数据构造。
  6. 恢复处置机上下文。

留意,过程切换与处置机形式切换是分歧的,形式切换时,处置机逻辑上能够还在统一过程中运转。假如过程因中缀或异常进入到中心态运转,履行完后又回到用户态刚被中缀的程序运转,则操作零碎只需恢复过程进入内核时所保管的CPU现场,无需改动以后过程的情况信息。但若要切换过程,以后运转过程改动了,则以后过程的情况信息也需求改动。

时间: 2024-08-01 23:42:18

过程掌握:过程的创立、终止、壅塞、叫醒和切换的相关文章

记录sqoop同步失败问题解决过程,过程真的是很崎岖。(1月6日解决)

记录sqoop同步失败问题解决过程,过程真的是很崎岖.事发原因:最近突然出现sqoop export to mysql时频繁出错.看了下日志是卡在某条数据过不去了,看异常.看sqoop生成的mr并未发现问题.最后把要export的原始数据拿notepad++打开发现中断的数据是奇怪的乱码,查了一下是二进制的数据. 乱码数据生成原因:我理解,api接口时接收流数据时长度和实际长度不符. 解决办法:两块要解决,一是接口时做好容错,二是同步时还是要对这种二进制做兼容,因为谁也无法保证二进制数据不会再出

NFS 共享过程脚本过程

#!/bin/bash#NFS 共享服务#2019-8-25#挂载光盘 d -p "请输入你的挂载点" direcho "正在挂载....."mount | grep -q "/dev/sr0" && umount /dev/sr0[ -d $dir ] || mkdir dirmount /dev/sr0 $dir &> /dev/nullecho "挂载成功"cd /etc/yum.repos

过程的概念和特点

过程的概念 在多道程序情况下,许可多个程序并发履行,此时它们将得到封锁性,并具有连续性及弗成再现性的特点.为此引入了过程(Process)的概念,以便更好地描绘和掌握程序的并发履行,完成操作零碎的并发性和共享性.为了使介入并发履行的程序(含数据)能自力地运转,必需为之设置装备摆设一个专门的数据构造,称为过程掌握块(Process Control Block, PCB).零碎应用PCB来描绘过程的根本状况和运转形态,进而掌握和治理过程.响应地,由程序段.相干数据段和PCB三局部组成了过程映像(过程

过程的组织:掌握块、程序段和数据段

过程是操作零碎的资本分派和自力运转的根本单元.它普通由以下三个局部构成. 过程掌握块 过程创立时,操作零碎就新建一个PCB构造,它之后就常驻内存,任一时辰可以存取, 在过程完毕时删除.PCB是过程实体的一局部,是过程存在的独一标记.当创立一个过程时,零碎为该过程树立一个PCB:当过程履行时,零碎经过其PCB 了 解过程的现行形态信息,以便对其停止掌握和治理:当过程完毕时,零碎发出其PCB,该进 程随之灭亡.操作零碎经过PCB表来治理和掌握过程.表2-1 PCB平日包括的内容 过程描绘信息 过程掌

软件项目与过程管理第八周作业

内容:软件项目与过程管理课程内容总结 经过八周时间的学习,软件项目与过程管理课程已经逐渐接近了尾声.通过这八周的学习,我对软件项目与过程管理课程有了更深的理解. 一.关于团队项目. 团队项目是本次软件项目与过程管理课程中最重要的一部分.我们团队项目是作业管理系统.在项目开发的整个过程中,我们在项目经理的带领下,项目团队的每一个成员团结合作.相互沟通,团队成员之间相互学习彼此的优点和技术,在每个成员的共同努力下,基本完成了此次软件开发项目. 通过这次团队项目, 我的总结如下: 1.在项目的开发过程

linux引导过程和服务控制

引导过程和服务控制 要求: ? 设置Linux系统每次开机后自动进入字符模式界面. 步骤: 编辑/etc/inittab文件,将默认运行级别修改为3.如图所示: ? 使用ntsysv工具同时调整2.3.4.5运行级别中的服务状态,关闭下列服务:anacron.atd.avahi-daemon.Bluetooth.cups.firstboot.hidd.hplip.ip6tables.iptables.isdn.mcstrans.mdmonitor.nfslock.pcscd.portmap.re

linux的引导过程和服务控制

引导过程和服务控制 要求: ? 设置Linux系统每次开机后自动进入字符模式界面. 步骤: 编辑/etc/inittab文件,将默认运行级别修改为3.如图所示: ? 使用ntsysv工具同时调整2.3.4.5运行级别中的服务状态,关闭下列服务:anacron.atd.avahi-daemon.Bluetooth.cups.firstboot.hidd.hplip.ip6tables.iptables.isdn.mcstrans.mdmonitor.nfslock.pcscd.portmap.re

Swift2-0基础_Initialization(构造过程)

import Foundation /*     构造过程是使用 类.结构体 或 枚举类型 一个实例的准备过程.         在新实例用前必须执行这个过程,具体操作包括 设置实例中每个存储型属性的初始值 和 执行其他必须的设置 或 初始化工作     通过定义构造器( Initializers )来实现构造过程,这些构造器可以看做是用来创建特定类型新实例的特殊方法.         与 Objective-C 中的构造器不同,Swift 的构造器无需返回值,它们的主要任务是保证新实例在第一次

SICP学习笔记及题解—构造过程抽象(三)

主要内容 高阶过程:以过程为参数和/或返回值的过程 lambda 表达式 let 表达式 用过程作为解决问题的通用方法 求函数的 0 点 求函数的不动点 返回过程值 过程是语言里的一等公民 (first-class object) 1.3.1高阶过程 过程是抽象,一个过程描述了一种对数据的复合操作,如求立方过程:(define (cube x) (* x x x)) 换个方式,也可以总直接写组合式:(* 3 3 3), (* x x x), 不定义过程,总基于系统操作描述,不能提高描述的层次,