操作系统之进程篇2

1.进程调度主要要解决的问题是什么?

任意时刻到底由哪个进程执行,那些不执行。正在进展中的程序使用CPU的模式有3种:程序大部分时间在CPU上执行(CPU导向,又称计算密集型程序);程序大部分时间在进行输入输出(I/O导向,又称输入输出密集型程序);程序介入前两种模式之间(平衡型程序)。

2.进程调度的目标?

达到极小化平均响应时间,极大化系统吞吐率,保持系统各个功能部件均处于繁忙的状态,并提供某种貌似公平的机制。

3.调度算法有哪些?各算法的利弊?

1)先来先服务FCFS(First Come First Serve):不存在抢占,程序一旦允许运行,就一直运行到结束。用户交互体验差。

2)时间片轮询:主要目的是改善短程序的响应时间,周期性的进行程序切换。系统的平均响应时间取决于时间片的大小。如果时间片过大,时间片轮询将越来越像FCFS算法,如果选择的时间片过小,则进程切换所带来的系统消耗将变多,会降低系统效率。

3)短任务优先算法:改善短任务排在长任务后面轮询而造成响应时间和交互体验下降的办法就是短任务优先算法(Shorted Time to Completion First STCF)。这里开始出现优先级的概念。给予短进程最高优先级。

4)优先级调度算法:它的缺点是多所有的进程响应时间并不能很好的保证。不能将所有的进程优先级都设为最高,那样就毫无意义了。

5)混合调度算法:将所有进程分为不同的大类,每个大类为一个优先级。如果两个进程属于不同的大类,则处于高优先级大类的进程优先执行,如果两个进程处于同一个大类,则采用时间片轮询来执行。

6)保证调度算法:目的是保证每个进程占用的CPU的时间完全一样,每次给的时间片不一定要一样。

7)彩票调度算法:是一种概率调度算法。

8)实时调度算法。

4.时间轮询算法中如何选择合适的时间片?

根据不同的CPU,我们需要知道进行一次进程切换所带来的CPU消耗时间。假如每次进程切换需要消耗0.1ms的CPU时间,则选择10ms的时间片将浪费约1%的CPU时间在上下文切换上,20ms则将浪费约0.5%的CPU时间在上下文切换上。如果我们能承受这1%的CPU上下文切换时间,则这个时间片选择就是合理的。

5.时间轮询算法还需要考虑有多少进程在系统运行,如果运行的进程多,可能时间片就需要短点,不然,用户的交互体验又会变差,进程数少,时间片就可以适当长一点。

6.时间片的长度综合取决于进程切换的时间和进程数。

7.时间片轮询不一定一定比FCFS好。

9.STCF算法的缺陷:第一可能造成长程序长时间无法得到CPU时间而导致饥饿。第二,如何预测每个进程的执行时间?当很多进程时,预测变得很耗时,而且不同的CPU可能执行相同的进程时间还不同。

10.实时调度算法必须考虑每个任务必须在什么时间之前完成,而整个系统的响应时间和吞吐率放在其次。

11.实时调度算法常见的两种:最早截止任务优先(Earliest Deadline First EDF)和最短周期优先(Rate Monotonic Scheduling RMS).

12.实时性比较简单的理解:程序需要执行多长时间?程序所完成的任务的截止时间?程序必须在任务的截止时间之前执行完成。

时间: 2024-08-10 00:03:45

操作系统之进程篇2的相关文章

操作系统之进程篇(1)

1.进程介绍: 1.1 进程模型: 进程是一个程序的实际执行,包含了程序计数器的状态,寄存器和变量等等! 程序可以看成是一个状态的序列,程序在不同时刻呈现出不同的状态,而这种状态的前后交替过程可以看成是程序的执行过程.概念上来说,每个程序有自己的虚拟CPU,但在现实中CPU在不同的进程间来回切换,又称这种切换为伪并行! 进程和程序差别看似微小,实际上却是十分精妙; 可以将计算机执行程序的过程看成一次有趣的烹饪过程.食谱就是程序,厨师就是CPU,而食材是输入,得到的输出是鲜美可口的美食. 当厨师在

操作系统之进程篇(3)

1. 信号量机制的缺陷问题: 在上面的生产者消费者实例中,信号量的工作机制如下(我们以生产者的代码为例): 1 down(&empty); 2 down(&mutex); 3 enter_item(item); 4 up(&mutex); 5 up(&full); 如果交换1号和2号语句,变成: 1 down(&mutex); 2 down(&empty); 那么可能会出现下面的情形: mutex变成0,此时empty == 0,那么生产者阻塞; 此时消费者

操作系统之进程篇(2)

进程间通信(InterProcess Communication,IPC): 进程通信中遇到的三个问题: a) 进程之间如何进行信息的传递? b) 多个进程在执行自己的核心代码时如何能够不相互影响? c) 当进程之间出现相互依赖关系时,如何才能合理的调度进程的执行顺序! 1. 竞争情形: 当两个或多个进程同时读写某个共享资源的时候,程序运行的最终结果由各个进程的具体执行的情况所决定! 如何避免竞争情形的出现,那么我们首先引入关键代码区的定义: 程序中访问共享内存或其他共享资源的代码区被称为关键代

操作系统之进程篇(4)--经典进程间通信(IPC)问题

1. 哲学家进餐问题: 问题描述: 五个哲学家在一个圆桌上进餐,每人的面前放了一盘意大利面,两个盘子之间有一个叉子,但是由于盘子里面的面条十分光滑,需要两个叉子才能进行就餐行为.餐桌的布局如下图所示: 假设哲学家的生活中只有两个活动:吃饭和思考[吃饭维持自身之生存,思考探究生存之意义],当然这样的哲学家在现实之中是不存在的.当一个哲学家在殚精竭虑之时,饥饿感随之而来,这是他会拿起左右手边的两个叉子来想享用这俗世之中的美味.酒足饭饱之后,又"躲进小楼成一统,管他春夏与秋冬"去了.问题是:

操作系统之进程篇1

1.进程的出现,让我们需要对进程进行分离存储,而有了内存管理:需要不同进程有条不紊的往前推进而有了进程调度. 2.为什么要有进程?什么是进程? 为了实现程序的并发执行,我们发明了进程.一个程序加载到内存后就变成了进程. 3.注意不是所有进程都一定要终结,实际上,许多系统进程是不会终结的,除非强制终止或关闭计算机. 4.什么时间造成进程的产生? 1)系统初始化:在一个系统初始化时,将有许多进程产生,产生的这些进程是系统正常运行必不可少的. 2)执行进程创立程序:如双击了一个可执行文件. 3)用户请

进程篇(1: 进程运行环境)--请参照本博客“操作系统”专栏

2014年5月30日  下午1:40:59 1. Unix 进程执行环境: 1.1 终止处理程序: ISO C 规定,一个程序可以登记多达32个函数,这些函数将由exit自动调用.我们称这些函数为终止处理程序(exit handler),并调用atexit函数来登记这些函数.该函数的原型如下: 1 #include <stdlib.h>2 3 int atexit(void (*function)(void)); exit调用这些终止程序的顺序与他们登记时的顺序相反(先登记后调用).同一个函数

进程篇(4: 基本进程控制:其他相关控制)--请参照本博客“操作系统”专栏

1. 更改进程的用户ID和组ID:为什么我们要更改用户ID和组ID的呢? 在UNIX系统中,特权是基于用户和组ID的.当用户需要增加特权,或要访问某个当前没有能力访问的文件时,我们需要更改自己的权限,以让新的ID具有合适的特权或访问权限.与此类似,当程序需要降低其特权或阻止对某些资源的访问时,也需要跟换用户ID或组ID;一般而言,在设计应用程序时,我们总是试图使用"最小特权"模型.依照此模型,我们的程序应当值具有为完成特定的任务所需要的最小特权. NAME getuid, geteui

进程篇(2: C程序的存储空间布局)--请参照本博客“操作系统”专栏

1.  C程序的存储空间布局: C 程序由下面几个部分组成: 正文段(即是代码段): 这是由CPU执行的机器指令部分.通常,正文段是可以共享的,并常常是可读的,以防止程序因为意外原因而修改自身的代码! 初始化数据段(即数据段): 它包含了程序中需要明确的赋初值的变量. 非初始化数据段(bss段):在程序开始执行之前,内核将此段中的数据初始化为0或空指针. 栈.自动变量以及每次函数调用时所需保存的信息都存放在此段中.每次调用函数时,返回地址以及调用者的环境信息(如某些寄存器的值)都存放在栈中.然后

进程篇(3: 基本进程控制:进程的退出)--请参照本博客“操作系统”专栏

1. exit函数: 进程的五种正常的结束方式: 在main函数中执行return语句,这等效于exit; 调用exit函数.此函数由ISO C定义,其操作包括运行各终止处理程序,然后关闭所有标准I/O流等. 调用_exit或_Exit函数,ISO C定义了_Exit函数,目的是为了为进程提供一种无需运行终止处理程序和信号处理程序而终止的方法.并不处理标准I/O流! 进程的最后一个线程在其启动例程中执行返回语句,然后该进程以终止状态0返回. 进程的最后一个线程调用pthread_exit函数.