Linux进程概念

本文详细介绍了Linux操作系统中的几种进程调度算法,包括先来先服务(FCFS)、最短作业优先(SJF)、最高响应比优先法(HRRN)、时间片轮转算法(RR)和多级反馈队列调度算法。每种算法的原理、优缺点进行了阐述,旨在帮助读者理解Linux进程调度的本质。此外,还讨论了环境变量和动态库路径的设置方法,包括export命令、修改profile和.bashrc文件等。
摘要由CSDN通过智能技术生成

进程的调度算法

  1. 先来先服务 (FCFS,first come first served) 
    在所有调度算法中,最简单的是非抢占式的FCFS算法。 
    算法原理:进程按照它们请求CPU的顺序使用CPU.就像你买东西去排队,谁第一个排,谁就先被执行,在它执行的过程中,不会中断它。当其他人也想进入内存被执行,就要排队等着,如果在执行过程中出现一些事,他现在不想排队了,下一个排队的就补上。此时如果他又想排队了,只能站到队尾去。 
    算法优点:易于理解且实现简单,只需要一个队列(FIFO),且相当公平 
    算法缺点:比较有利于长进程,而不利于短进程,有利于CPU 繁忙的进程,而不利于I/O 繁忙的进程

  2. 最短作业优先(SJF, Shortest Job First) 
    短作业优先(SJF, Shortest Job First)又称为“短进程优先”SPN(Shortest Process Next);这是对FCFS算法的改进,其目标是减少平均周转时间。 
    算法原理:对预计执行时间短的进程优先分派处理机。通常后来的短进程不抢先正在执行的进程。 
    算法优点:相比FCFS 算法,该算法可改善平均周转时间和平均带权周转时间,缩短进程的等待时间,提高系统的吞吐量。 
    算法缺点:对长进程非常不利,可能长时间得不到执行,且未能依据进程的紧迫程度来划分执行的优先级,以及难以准确估计进程的执行时间,从而影响调度性能。

  3. 最高响应比优先法(HRRN,Highest Response Ratio Next) 
    最高响应比优先法(HRRN,Highest Response Ratio Next)是对FCFS方式和SJF方式的一种综合平衡。FCFS方式只考虑每个作业的等待时间而未考虑执行时间的长短,而SJF方式只考虑执行时间而未考虑等待时间的长短。因此,这两种调度算法在某些极端情况下会带来某些不便。HRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。这样,即使是长作业,随着它等待时间的增加,W / T也就随着增加,也就有机会获得调度执行。这种算法是介于FCFS和SJF之间的一种折中算法。 
    算法原理响应比R定义如下: R =(W+T)/T = 1+W/T 
    其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。 
    算法优点:由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF法,从而采用HRRN方式时其吞吐量将小于采用SJF 法时的吞吐量。 
    算法缺点:由于每次调度前要计算响应比,系统开销也要相应增加。

  4. 时间片轮转算法(RR,Round-Robin) 
    该算法采用剥夺策略。时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法,又称RR调度。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。 
    算法原理:让就绪进程以FCFS 的方式按时间片轮流使用CPU 的调度方式,即将系统中所有的就绪进程按照FCFS 原则,排成一个队列,每次调度时将CPU 分派给队首进程,让其执行一个时间片,时间片的长度从几个ms 到几百ms。在一个时间片结束时,发生时钟中断,调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前的队首进程,进程可以未使用完一个时间片,就出让CPU(如阻塞)。 
    算法优点:时间片轮转调度算法的特点是简单易行、平均响应时间短。 
    算法缺点:不利于处理紧急作业。在时间片轮转算法中,时间片的大小对系统性能的影响很大,因此时间片的大小应选择恰当 。
    时间片大小的确定 

    1.系统对响应时间的要求 
    2.就绪队列中进程的数目 
    3.系统的处理能力

  5. 多级反馈队列(Multilevel Feedback Queue) 
    多级反馈队列调度算法是一种CPU处理机调度算法,UNIX操作系统采取的便是这种调度算法。 
    多级反馈队列调度算法描述: 
      1、进程在进入待调度的队列等待时,首先进入优先级最高的Q1等待。 
      2、首先调度优先级高的队列中的进程。若高优先级中队列中已没有调度的进程,则调度次优先级队列中的进程。例如:Q1,Q2,Q3三个队列,只有在Q1中没有进程等待时才去调度Q2,同理,只有Q1,Q2都为空时才会去调度Q3。 
      3、对于同一个队列中的各个进程,按照时间片轮转法调度。比如Q1队列的时间片为N,那么Q1中的作业在经历了N个时间片后若还没有完成,则进入Q2队列等待,若Q2的时间片用完后作业还不能完成,一直进入下一级队列,直至完成。 
      4、在低优先级的队列中的进程在运行时,又有新到达的作业,那么在运行完这个时间片后,CPU马上分配给新到达的作业(抢占式)。 
      在多级反馈队列调度算法中,如果规定第一个队列的时间片略大于多数人机交互所需之处理时间时,便能够较好的满足各种类型用户的需要。

使用代码模拟实现僵尸进程, 孤儿进程的场景. 

僵尸进程(Zombies):

(1)僵尸进程是一个比较特殊的状态,当进程退出父进程(使用wait()系统调用)没有没有读取到子进程退出的返回代码时就会产生僵尸进程。僵尸进程会在以终止状态保持在进程表中,并且会一直等待父进程读取退出状态代码。

(2)一个进程在其父进程没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。如果其父进程还存在而一直不调用wait(),则僵尸进程无法回收,等到其父进程退出后该进程将被init收回。

孤儿进程:

一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。



此时就创建了1个10s的孤儿进程。

练习使用setenv, export等环境变量相关的函数和命令. 

1.动态库路径的设置

Linux下调用动态库和windows不一样.linux 可执行程序是靠配置文件去读取路径的,因此有些时候需要设置路径 
具体操作如下

export LD_LIBRARY_PATH=/home/.....(动态库的目录)

不过这种设置方法只是在当前的session中有效

你可以修改配置文件实现任何session都有效

2.环境变量的设置

一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量。例如我的mips-linux-gcc编译器在“/opt /au1200_rm/build_tools/bin”目录下,build_tools就是我的编译工具,则有如下三种方法来设置环境变量:

2.1、直接用export命令:

#export PATH=$PATH:/opt/au1200_rm/build_tools/bin 
查看是否已经设好,可用命令export查看: 
可以看到,环境变量已经设好,PATH里面已经有了我要加的编译器的路径。

2.2、修改profile文件:

#vi /etc/profile 
在里面加入: 
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"

让环境变量立即生效需要执行如下命令:

#source /etc/profile

2.3. 修改.bashrc文件:

# vi /root/.bashrc 
在里面加入: 
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"

后两种方法一般需要重新注销系统才能生效,最后可以通过echo命令测试一下: 
# echo $PATH 
看看输出里面是不是已经有了/my_new_path这个路径了。 
-----------------------------------------------------------------------------------

“/bin”、“/sbin”、“/usr/bin”、“/usr/sbin”、“/usr/local/bin”等路径已经在系统环境变量中了,如果可执行文件在这几个标准位置,在终端命令行输入该软件可执行文件的文件名和参数(如果需要参数),回车即可。

如果不在标准位置,文件名前面需要加上完整的路径。不过每次都这样跑就太麻烦了,一个“一劳永逸”的办法是把这个路径加入环境变量。命令 “PATH=$PATH:路径”可以把这个路径加入环境变量,但是退出这个命令行就失效了。要想永久生效,需要把这行添加到环境变量文件里。有两个文件可选:“/etc/profile”和用户主目录下的“.bash_profile”,“/etc/profile”对系统里所有用户都有效,用户主目录下的“.bash_profile”只对这个用户有效。

“PATH=PATH:1:2:...:n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值