首页 > 系统相关 >半期复习——第二章:进程管理(2.3)

半期复习——第二章:进程管理(2.3)

时间:2023-04-16 12:44:10浏览次数:57  
标签:半期 复习 pid 阻塞 进程 printf 2.3 就绪 终止

2.3 进程控制(创建,终止,状态转换)一般由OS内核的原语实现

一、操作系统内核

    1.OS内核包含与硬件紧密相关的模块(如中断处理程序),常用设备驱动、运行频率高的模块(如时钟管理、进程调度)。安排在紧靠硬件的软件层次,常驻内存。

    2.OS内核两大功能

        ①支撑功能(中断处理,时钟管理,原语操作)

        ②资源管理功能(进程管理,存储器管理,设备管理)

二、进程的创建

    1.进程的层次结构(Linux):父进程,子进程

    2.引起创建进程的事件

        ①用户登录。在分时系统中,用户在终端键入登录命令后,如果是合法用户,系统将为该终端建立一个进程,并把它插入就绪队列中。

        ②作业调度。在批处理系统中,当作业调度程序按一定的算法调度到某作业时,便将该作业装入内存,为它分配必要的资源,并立即为它创建进程,再插入就绪队列中。

        ③ 提供服务。当运行中的用户程序提出某种请求后,系统将专门创建一个进程来提供用户所需要的服务。

        ④应用请求。在上述三种情况下,都是由系统内核为它创建一个新进程;而第4类事件则是基于应用进程的需求,由它自己创建一个新进程,以便使新进程以并发运行方式完成特定任务。

    3.进程创建creat()

        ①申请空白PCB,申请pid

        ②为新进程分配资源,从OS或从父进程获得

        ③初始化进程控制块,包括标识信息,处理机状态信息,处理机控制信息

        ④将新进程插入就绪队列

三、进程的终止

     1. 引起终止进程的事件

          ①正常结束

          ②异常结束

          ③外界干预

    2.终止过程

         ①根据被终止进程的标识符ID,从PCB集合中检索出该进程的PCB,从中读出该进程的状态

         ②若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度

         ③若该进程还有子孙进程,还应先将其所有子孙进程予以终止,以防他们成为不可控的进程

         ④将被终止进程所拥有的全部资源,或者归还给其父进程,或者归还给系统

         ⑤将被终止进程(它的PCB)从所在队列(或链表)中移出,等待其他程序来搜集信息 

四、进程的阻塞与唤醒

      1.引起进程阻塞的事件 

          ①请求系统服务:提出I/O服务时,并不立即满足该进程的要求时,转变为阻塞状态来等待

          ②启动某种操作:当进程启动某种操作后,在该操作完成之后才能继续执行

          ③新数据尚未到达:对于相互合作的进程而言,交互时

          ④无新工作可做。如发送进程

      2.阻塞过程block()

          ①进程便通过调用阻塞原语block( )把自己阻塞 

          ②阻塞程序把进程控制块中的现行状态由“执行”改为“阻塞”,并将PCB插入阻塞队列

          ③转调度程序进行重新调度,将处理机分配给另一就绪进程,并进行切换

    3.唤醒过程wakeup()

          相关进程调用wakeup(),把被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪 (2)然后再将该PCB插入到就绪队列中 

*block()和wakeup()必须成对使用

五、进程的挂起与激活

    1.suspend():检查被挂起进程的状态,若处于活动就绪状态,便将其改为静止就绪;对于活动阻塞状态的进程,则将之改为静止阻塞

    2.active():将进程从外存调入内存,检查该进程的现行状态。 若是静止就绪,便将之改为活动就绪;若为静止阻塞,便将之改为活动阻塞

六、Linux进程控制

    1.进程的创建

int main(void){
  pid_t pid;
  pid=fork();
  if(pid==-1)
  printf(“fork error\n”);
  //在子进程中返回值为0(不合法的PID,提示当前运行在子进程中)
  else if(pid==0){
     printf(“the returned value is %d\n”,pid);
     printf(“In child process!!\n”);
     printf(“My PID is %d\n”,getpid());
  }
  //在父进程中返回值为子进程ID(让父进程掌握所创建子进程的ID号)
  else{
     printf(“the returned value is %d\n”,pid);
     printf(“In father process!!\n”);
     printf(“My PID is %d\n”,getpid());
  }
return 0;
}

     2.进程的退出

          ①exit 是一个函数,执行完后把控制权交给系统

          ②return 是函数执行完后的返回。return 执行完后把控制权交给调用函数 

          ③exit 是正常终止进程;abort 是异常终止进程

          ④_exit 执行后立即将控制权返回给内核;exit 执行后要先执行一些清除操作,然后才将控制权交给内核 

    3.进程的等待与睡眠

          ①孤儿进程

          ②僵尸进程:已经终止但父进程尚未对其调用wait或waitpid函数的进程 

   

          ③wait():父进程一旦调用了wait就立即阻塞自己。如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个子进程出现为止。

    4.进程的执行:exec函数簇

标签:半期,复习,pid,阻塞,进程,printf,2.3,就绪,终止
From: https://www.cnblogs.com/05-ReFrain-19/p/17323104.html

相关文章

  • [Windows] 单文件制作工具 7.0.2.38_x86_x64
    单文件制作工具7.0.2.38_x86_x64最初由无忧527104427开发,到V7.0.1.1版停止更新,源码赠与有缘人,后续版本由无忧JexChan接手继续更新。本工具是一款小巧自定义功能强大的PECMD/7zSFX单文件制作工具,简化单文件制作程序步骤,默认四步即可制作出一个单文件,可制作出强大功能的单文件程序......
  • 半期复习——第二章:进程管理(2.1 2.2)
    2.1前趋图和程序执行一、前趋图图(a)所示的前趋图,关系:P1→P2,P1→P3,P1→P4,P2→P5,P3→P5,P4→P6,P4→P7,P5→P8,P6→P8,P7→P9,P8→P9或表示为二元关系<P,→>P={P1,P2,P3,P4,P5,P6,P7,P8,P9}→={(P1,P2),(P1,P3),(P1,P4),(P2,P5),(P3,P5),(P4,P6),(P4,P7),(P5,Ps),(P6,P8),(......
  • 半期复习——第一章:操作系统引论
    1.1操作系统的目标和作用一、目标(4)  1.方便性:操作系统使计算机更易于使用。   2.有效性(2):操作系统允许以更有效的方式使用计算机系统资源。提高系统资源利用率;提高系统的吞吐量。  3.可扩展性:在操作系统中,允许有效地开发,测试和引进新的系统功能。  ......
  • 快速复习Java
    //数据类型//1.整数型bytea=127;//范围-128~127shortb=29999;//范围正负三万intc=999999999;//范围正负21亿//赋值long类型时,数值如果比int类型表述范围大时,必须要在数值后面加l/L.longd=999;longe=9999999999L;//范围很大很大//2.浮点型f......
  • 新概念2册L86笔记(复习过去时态)
    L86Outofcontrol单词理解语法理解过去时过去时态:did#仅表述事情、动作发生在过去如果事情、动作发生在过去,又需要展开细致分类wasdoing+did#给出过去具体的时间,没有做完且正在做haddone+did#给出过去的......
  • (之前的项目复习)我的Java项目实战--校园餐饮商户外卖系统06
    开发笔记六导入用户地址簿相关功能代码需求分析地址簿,指的是移动端消费者用户的地址信息,用户登录成功后可以维护自己的地址信息。同一个用户可以有多个地址信息,但是只能有一个默认地址。数据模型用户的地址信息会存储在address_book表,即地址簿表中。具体表结构如下:导入功......
  • Angular 复习与进阶系列 – Component 组件 の Lifecycle Hooks
    前言我们在这篇和 这篇中已经学习了几个基本的LifecycleHooks.分别是constructorOnInitAfterContentInitAfterViewInitOnDestroyOnChanges这篇我们会把其余的LifecycleHooks都学完. InitGroupandChangesGroupAngular的Lifecycle可以分为两组.第一组......
  • C++复习第六天(继承、多态)
    vector.clear()将size设置为0,capacity不变 继承//公共页面classBasePage{public:voidheader(){cout<<"首页、公开课、登录、注册...(公共头部)"<<endl;}voidfooter(){cout<<"帮助中心、交流合作、站内地图...(......
  • 多元函数微积分期中复习复盘笔记
    多元微积分期中目录多元微积分期中极限与连续定义重极限与累次极限的关系例题多元函数的泰勒公式可微、全微分与偏导数向量值函数的可微性标量函数的可微性、全微分与偏导数雅各比矩阵可微与偏导数连续的关系例题方向导数与梯度方向导数梯度方向导数与梯度的关系例题多元复合函数......
  • 2.3 Go语言从入门到精通:数据类型
    文章目录1、基本数据类型1.1布尔型1.2数值型1.2.1整型1.2.2浮点型1.2.3复数1.3字符串型2、派生数据类型2.1指针2.2数组2.3结构体2.4通道(channel)2.5切片(slice)2.6函数2.7接口(interface)2.8Map3、其他3.1数据类型转换3.2类型别名4、小结Go语言是一种静态类型的......