进程调度算法解决以何种次序对各就绪进程进行处理机的分配以及按何种时间比例让进程占用处理机。
常见的的调度算法有:先进先出FIFO(按照进程进入就绪队列的的先后次序选择)、时间片轮转RR(进程轮流运行一个时间片)、最高优先级HPF(分配给具有最高优先级的就绪进程)。
在实际系统中,调度模式往往是几种调度算法的结合。某系统按优先级别设置若干个就绪队列,对级别较高的队列分配较小的时间片Si(i=1,2,…,n),即有S1<S2<…n。除第n级队列是按RR法调度之外,其他各级队列均按FIFO调度。系统总是先调度级别较高的队列中的进程,仅当该队列为空时才去调度下一级队列中的进程。当执行进程用完其时间片时便被剥夺并进入下一级就绪队列。当等待进程被唤醒时,它进入其优先级相应的就绪队列,若其优先级高于执行进程,便抢占CPU执行进程。
现有五个进程P1、P2、P3、P4、P5,它们同时依次进入就绪队列,它们所需的CPU时间和优先级如图4-2所示。注意,优先数越大优先级越低。
[图4-2]
在该系统中,假定不同级别的时间片为S1=2i-1(i为优先数),请给出五个进程的CPU占用序列,并注明每次占用所用的时间。
(5)
(3)
(4)
阅读以下函数说明和Java代码,将应填入(n)处的字句写在对应栏内。
[说明]
很多时候,希望某些类只有一个或有限的几个实例,典型解决方案是所谓单身(Singleton)模式。但在多线程情况下,Singleton模式有可能出现问题,需要进行同步检查。如果对“检查singleton对象是否已经创建”进行同步,则存在严重的瓶颈,所有的线程都必须等待检查对象是否存在。解决方式是一种称为Double-Checked-Locking模式,其意图是将非必须的锁定优化掉,同步检查最多只发生一次,因此不会成为瓶颈。以下是Java语言实现,能够正确编译通过。
[Java代码]
public class USTax {
private static USTax instance=null;
(1) USTax(){}
private (2) static void doSync(){
if(instance==null){
System.out.println("实例不存在,创建实例..");
instance=(3);
System.out.println("实例创建成功");
}else{
System.out.println("实例已被创建了");
}
}
public static USTax getInstance(){
if(instance==null){
System.out.println("实例暂时不存在");
(4);//同步控制
}else{
System.out.println("实例已经存在");
}
return (5);
}
}
(1)
(5)
(2)
(3)
(4)
(5)
阅读以下说明和c++代码,将应填入(n)处的字句写在答题纸对应栏内。
[说明]
很多时候,希望某些类只有一个或有限的几个实例,典型解决方案是所谓单身(Singleton)模式。但在多线程情况下,Singleton模式有可能出现问题,需要进行同步检查。如果对“检查Singleton对象是否已经创建”进行同步,则存在严重的瓶颈,所有的线程都必须等待检查对象是否存在。解决方式是一种称为Double-Checked-Locking模式,其意图是将非必须的锁定优化掉,同步检查最多只发生一次,因此不会成为瓶颈。以下是c++语言实现,能够正确编译通过。
[C++代码]
class USTax{
(1):
USTax(){};//构造函数
public:
static USTax* getInstance();
private:
static USTax*instance;
};
(2)=NULL;
USTax*USTax::get Instance(){
if(instance==NULL){
//进行某种同步
cout<<"实例暂时不存在"< if( (3) ){
cout<<"实例不存在,创建实例..."< instance=(4);
cout<<"实例创建成功"< }
else{
cout<<"实例已被创建了"< }
}
else{
cout<<"实例已经存在"< }
return (5);
}
(1)
高级经济师考试试题精选练习(1)
高级经济师考试模拟练习题之单选题(1
高级经济师考试试题精选练习(2)
高级经济师考试试题精选练习(3)
高级经济师考试试题:经济法案例试题精
高级经济师考试模拟试题及答案
高级经济师考试试题及答案:单选练习题
高级经济师考试试题:经济法案例试题精
高级经济师考试模拟题及答案练习(1)
高级经济师考试模拟题及答案练习(2)