进程调度、僵尸进程和孤儿进程、linux环境变量

一、进程的调度方式,调度算法总结。

进程的三种状态

1.等状态:等待某个事件的完成。
2.就绪态:等待系统分配处理器以便运行。
3.运行态:占有处理器正在运行。

三种状态的转化

这里写图片描述

调度方式

剥夺方式:当一个进程正在运行的时候,系统可以基于某种原则,剥夺已分配给他的处理机,将处理机分配给其他进程,剥夺原则有:优先权原则、短进程优先原则、时间片原则。
非剥夺方式:分配程序一但把处理机分配给某进程后就让该进程一直运行下去,直到该进程完成或发生事件而阻塞时,才把处理机分配给另一个进程。

进程调度算法

进程调度算法有:先来先服务调度算法(FCFS)、短作业优先调度算法(SJF)、最高响应比优先法(HRRN)、时间片轮转算法(RR)。

先来先服务调度算法(FCFS)
(1)概念:首先来得进程最先被执行,直到执行完最先来得进程再去执行次先来的进程,依次顺序执行。
(2)优缺点:
1.比较有利于长作业(进程),而不利于短作业(进程)
2.有利于CPU繁忙型作业(进程) ,而不利于I/O繁忙型作业(进程)
3.用于批处理系统,不适于分时系统

短作业优先调度算法(SJF)
(1)概念:对预计执行时间短的进程优先分配处理机。通常后来的短作业不抢先正执行的作业,而是等在就绪队列中。
(2)优缺点
1.对长作业不利。严重的是,若一长作业(进程)进入系统的后备队列(就绪队列),由于调度程序总是优先调度那些(即使是后进来的)短作业(进程),将导致长作业(进程)长期不被调度——饥饿
2.完全未考虑作业(进程)的紧迫程度,因而不能保证紧迫性作业(进程)会被及时处理
3.由于作业(进程)的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意地缩短其作业的估计运行时间,致使该算法不一定能真正做到短作业优先调度。

最高响应比优先法(HRRN)
(1)概念:HRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。
(2)优缺点
1.等待时间相同的作业,则要求服务的时间愈短,其优先权愈高,——对短作业有利
要求服务的时间相同的作业,则等待时间愈长,其优先权愈高,——是先来先服务
长作业,优先权随等待时间的增加而提高,其等待时间足够长时,其优先权便可升到很高, 从而也可获得处理机——对长作业有利
2.是一种折衷,既照顾了短作业,又考虑了作业到达的先后次序,又不会使长作业长期得不到服务。
3.要进行响应比计算,增加了系统开销

时间片轮转算法(RR)
(1)概念:将系统中所有的就绪进程按照FCFS原则,排成一个队列,每次调度时将CPU分派给队首进程,让其执行一个时间片。在一个时间片结束时,发生时钟中断,暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前的队首进程。
(2)优缺点
1.紧迫任务响应慢
2.时间片选取太小,会频繁发生中断、进程上下文切换,增加系统开销,但利于短作业太大,退化成FCFS

二、模拟实现僵尸进程、孤儿进程的场景

僵尸进程:
(1)当子进程退出,父进程没有读取到子进程退出的退出码时就会产生僵尸进程。僵尸进程会在以终止状态保持在进程表中,并且会一直等待父进程读取退出码状态。
(2)一个进程在其父进程没有调用wait()或者waitpid()的情况下退出,这个子进程就是僵尸进程。如果其父进程还存在而一直不调用wait(),则僵尸进程无法回收,等到其父进程退出后该进程将被init收回。
僵尸进程的代码模拟实现:
这里写图片描述
**运行结果**
孤儿进程:
一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将会成为孤儿进程。孤儿进程将会被1号进程init进程收养,并由init进程对它们完成状态收集工作。
孤儿进程的代码模拟实现:
这里写图片描述
运行结果

三、linux中的环境变量

linux中两个重要的环境变量:
1)PATH:可执行程序的查找路径,echo $PATH来查看。
设置方法:

  • export PATH = PATH:xxx 但是登出后即失效。(多用在bash)
  • setenv PATH = PATH:xxx 该子shell执行后即失效。(多用在csh,tcsh)
  • 将export PATH = PATH:xxx 写在~/bashrc, ~/.bash_profile,
    /etc/profile等皮配置文件中,然后执行source shell。

2)LD_LIBRARY_PATH:动态库的查找路径,设置方式与PATH类似。

setenv函数:改变或增加环境变量,相关的函数getenv, putenv, unsetenv。通过此函数不能增加或修改shell进程的环境变量或者说通过setenv函数设置的环境变量只在本进程而且是本次执行中有效。一般写在执行的C shell/TC shell文件中。

export命令:export [-n]变量名 = 变量值;当子进程被触发时,export命令使得父进程的变量可以通过复制传递给子进程。执行一个脚本时会先开启一个子shell的环境,将父shell中的环境变量和使用export的变量,复制给子shell。一个shell中的系统环境变量只对该shell或它的子shell有效,子shell执行结束后,变量消失并不能返回到父shell。所以子shell中的变量变化不会反映到父shell。不用export的命令只对该shell有效,对子shell也没效果。 -n可以取消变量输出。

set命令:bash内建的命令,显示当前shell中的变量。unset命令来清除某个变量。

env命令:显示当前shell中的环境变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值