一日一题-September

09-26

【31】设当前工作目录的主要目的是( )。
A.节省外存空间B.节省内存空间
C.加快文件的检索速度D.加快文件的读写速度
【解析】C。分析:设置当前目录的作用就是为了加快文件的检索速度,因为设置了当前
目录情况下不需要从根目录出发进行检索,只需要从当前目录出发即可。至于A、B 节省空
间和此无关。文件的读写速度仅和硬件本身以及文件存储方式有关,与目录无关。



【26】下列选项中, 降低进程优先权级的合理时机是( )。
A.进程的时间片用完B.进程刚完成I/O, 进入就绪列队
C.进程长期处于就绪列队D.进程从就绪状态转为运行状态
【解析】A。分析:B 选项中,进程完成I/O 后,进入就绪队列时,已经是优先级最低的
进程,不能再降低其优先级,为了让其及时处理I/O 结果,也应该提高优先级;C 中,进程
长期处于就绪队列,也需要增加优先级,使其不至于产生饥饿(所谓饥饿就是进程长期得不
到处理机,无法执行);D 中,当进程处于运行状态时,不可提高或降低其优先级。而A 选
项中,采用时间片算法处理进程调度时,如果进程时间片用完,则需要排到就绪队列的末尾,
也就是优先级最低,所以降低优先级的合理时机是时间片用完时。另外如果采用多级反馈调
度算法时,当时间片用完,进程还未结束,则放到下一级队列中。



09年29题

【29】假设磁头当前位于第105 道,正在向磁道序号增加的方向移动.现有一个磁道访问请求序列为35,45,12,68,110,180,170,195,采用SCAN 调度(电梯调度)算法得到的磁道访问序列是( )。
A.110,170,180,195,68,45,35,12 B.110,68,45,35,12,170,180,195
C.110,170,180,195,12,35,45,68 D.12,35,45,68,110,170,180,195
【解析】A。SCAN 算法的基本思想:磁头从磁盘的一端开始向另一端移动,沿途响应访问请求,直到到达了磁盘的另一端,此时磁头反方向移动并继续响应服务请求,其运动轨迹类似于电梯的运行。根据SCAN 算法,可以得到访问序列是A。



09年28题

【28】下列文件物理结构中,适合随机访问且易于文件扩展的是( )。
A.连续结构B.索引结构
C.链式结构且磁盘块定长D.链式结构且磁盘块变长
【解析】B。

1. 根据外存储分配方法,链式存储结构将文件按照顺序存储在不同盘块中,
因此适合顺序访问,不适合随机访问(需从文件头遍历所有盘块);

2. 连续结构(数据位置可计算得到)和索引存储结构(只需访问索引块即可知道数据位置)适合随机访问,但连续存
储结构如果要在中间增加数据,则要整体移动后面的所有数据,因此不适合文件的动态增长,而索引存储结构适合随机访问,因为索引结构可以单独将新增数据放在一个新盘块,只需修改索引块即可。


09年24题

【24】下列进程调度算法中,综合考虑进程等待时间和执行时间的是( )。
A.时间片轮转调度算法B.短进程优先调度算法
B.先来先服务调度算法D.高响应比优先调度算法
【解析】D。高响应比优先调度算法中,计算每个进程,响应比最高的先获得CPU,响
应比计算公式:响应比=(进程执行时间+进程等待时间)/进程执行时间。高响应比优先调
度算法综合考虑到了进程等待时间和执行时间,对于同时到达的长进程和短进程相比,短进
程会优先执行,以提高系统吞吐量;当某进程等待时间较长时,其优先级会提高并很快得到
执行,不会产生有进程调度不到的情况。
补充:
时间片轮转调度算法(RR)使每个进程都有固定的执行时间,但对于长进程来说,等
待时间也相对较长

短进程优先调度算法(SJF/SPF)对于短进程有很大的优势,但对于长进程来说,如果不
断有短进程请求执行,则会长期得不到调度。
先来先服务(FCFS)实现最简单,但如果有一个长进程到达之后,会长期占用处理机,
使后面到达的很多短进程得不到运行。


09-21

09年45题

【45】三个进程P1、P2、P3 互斥使用一个包含N(N>0)个单元的缓冲区。P1 每次用produce()
生成一个正整数并用put()送入缓冲区某一空单元中;P2 每次用getodd()从该缓冲区中取出
一个奇数并用countodd()统计奇数个数;P3 每次用geteven()从该缓冲区中取出一个偶数并
用counteven()统计偶数个数。请用信号量机制实现这三个进程的同步与互斥活动,并说明
所定义的信号量的含义。要求用伪代码描述。

My answer:

semaphore s_produce=N;

semaphore s_even;

semaphore s_odd;

if(produce)

{

  produce()

  put()

  s_produce.p();

  if(odd)

    s_odd.p();

  else

    s_even.p();

}

if( geteven)

{

  s_even.v();

  s_produce.v();

}

else if(getOdd)

{

  s_odd.v();

  s_produce.v();

}



09-20

09年第25题-OS

某计算机系统中有8 台打印机,有K 个进程竞争使用,每个进程最多需要3 台打印机,
该系统可能会发生死锁的K 的最小值是( )。

假设n 为每个进程所需的资源
数,m 为进程数,A 为系统的资源数。则满足(n - 1)×m ≥ A 的最小整数m 即为可能产
生死锁的最小进程数,该公式同样可以用于求出每个进程需要多少资源时可能会产生死锁。

该公式可以这样理解:当所有进程都差一个资源就可以执行,此时系统中所有资源都已
经分配,因此死锁



11年42题

一个长度为L(L>=1)的升序序列S,处在第L/2个位置的数称为S的中位数。例如,若序列S1=(11,13,15,17,19),则S1的中位数为15。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2=(2,4,6,8,10),则S1和S2的中位数为11.现有两个等长升序序列A和B,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列A和B的中位数。要求:

(1)给出算法的基本设计思想;

(2)根据设计思想,采用C或C++或JAVA语言描述算法,关键之处给出注释;

(3)说明你所设计算法的时间复杂度和空间复杂度。



09年第7题

下列关于无向连通图特性的叙述中,正确的是()。

I 所有顶点的度之和为偶数

II 边数大于顶点个数减1

III 至少有一个顶点的度为1

解析:II显然不对,当图是一棵树的时候,正好有边数等于顶点个数减1. 

III也不对,例如一个连接所有顶点的环,边数等于顶点个数,每个顶点的度都是2



09年第42题

已知一个带有表头结点的单链表,结点结构为|data|link|,假设该链表只给出了头指针list。在不改变链表的前提下,设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点。若查找成功,算法输出该结点的data值,并返回1;否则返回0。

要求:

(1)描述算法的基本设计思想;

(2)描述算法的详细实现步骤;

(3)根据设计思想和实现步骤,采用程序设计语言描述算法(c,c++或java),关键之处给出简要注释。













09年第5题

已知一颗完全二叉树的第六层有8个叶节点,则该完全二叉树节点个数最多是()。

 解析:根据完全二叉树的定义,次树的前6层为满二叉树,共有2¥6-1=63个结点。第6层有8个叶子结点,

说明另外32-8个结点不是叶子结点,故63+24*2=111。




0910--2010统考第41题

(41)(10 分)将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中,散列表的存储空间是一个下标从0 开始的一个一维数组散列,函数为:H(key)=(key×3)MOD T,处理冲突采用线性探测再散列法,要求装载因子为0.7.问题:
(1)请画出所构造的散列表.
(2)分别计算等概率情况下,查找成功和查找不成功的平均查找长度.


【参考答案】
(1)因为装填因子为0.7,数据总数为7,所以存储空间长度为L = 7/0.7 = 10

可见装载因子就是指仓库储货暂用比例
因此可选T=10,构造的散列函数为H(key) = (key×3) MOD 10

散列函数的作用是将1,2,3,4,5,6,7变成一组貌似随机的数列,我不禁要问,这样有什么意义?
线性探测再散列函数为:Hi(key)= ( H(key)+ di ) MOD 10 , (di = 1,2,3...9)
因此,各数据的下标为

H(7) = (7×3) MOD 10 = 1
H(8) = (8×3) MOD 10 = 4
H(30) = (30×3) MOD 10 = 0
H(11) = (11×3) MOD 10 = 3
H(18) = (18×3) MOD 10 = 4
H1(18) = (H(18)+1) MOD 10 = 5
H(9) = (9×3) MOD 10 = 7
H(14) = (14×3) MOD 10 = 2
由上述计算所得Hash 表如下:
下标      0 1  2   3   4  5   6 7 8 9
关键字30 7 17 11 8 18 空9 空空
(2)由上表可以得:
查找成功的平均查找长度为:
ASL1=(1+1+1+1+2+1+1)/7=8/7
查找不成功的平均查找长度为:

这个没看懂
ASL2=(7+6+5+4+3+2+1+2+1+1)/10=3.2



2010统考42题

(42)(13 分)设将n(n>1)个整数存放到一维数组R 中.设计一个在时间和空间两方面尽可能
高效的算法.将R 中的序列循环左移P(0<P<n)个位置,即将R 中的数据由(X0,X1,…,Xn-1)变换
为(Xp,Xp-1,…,Xn-1,X0,X1,…,Xp-1).要求:
(1)给出算法的基本设计思想.
(2)根据设计思想,采用C 或C++或JAVA 语言描述算法,关键之处给出注释.
(3)说明你所设计算法的时间复杂度和空间复杂度.

1) 用一长度为p的数组放0到p的数据

    将a[0]到a[n-p]赋值到a[p]到a[n]

    a[n-p]到a[n-1]赋值为tmp[0]到tmp[p-1]

2)

#include <iostream>
using namespace std;
const int p=3;
const int n=8;
int a[n]={2,3,4,5,6,7,8,9};
int tmp[p];

void shift(int a[], int n, int p)
{
for(int i=0; i<p; i++)
tmp[i]=a[i];


for(int j=0;j<8-p;j++)
   a[j]=a[p+j];
for(int j=0;j<p;j++)
a[8-p+j]=tmp[j];
}

int main()
{
for(int i=0; i<8; i++)
cout<<"a "<<i<<"= "<<a[i]<<endl;
shift(a,n,p);
for(int i=0;i<8;i++)
cout<<"a "<<i<<"= "<<a[i]<<endl;


        return 0;
}

3) 时间复杂度O(n) 空间复杂度O(p)

空间复杂度指除正常占用内存开销以外的辅助存储空间大小。


0902

11年统考45题

45.某银行提供1 个服务窗口和10 个供顾客等待的作为。顾客到达银行时,若有空座位,则
到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用。当营业员空闲时,通
过叫号选取一位顾客,并为其服务。顾客和营业员的活动过程描述如下;
cobegin
{

Process 顾客;

{

   从取号机获取一个号码;

   等待叫号;

   获取服务;

}

Process 营业员

{

   While(TRUE)

   {

      叫号;

      为顾客服务;

   }

}

}coend
请添加必要的信号量和P、V(或wait()、signal())操作,实现上述过程中的互斥与同步。要
求写出完整的过程,说明信号量的含义并赋初值。

参考答案:

Semaphore seets = 10; //表示空余座位数量的资源信号量,初值为10
Semaphore mutex = 1; //管理取号机的互斥信号量,初值为1,表示取号机空闲。
Semaphore custom = 0; //表示顾客数量的资源信号量,初值为0

Process 顾客
{

P(seets); //找个空座位先

P(mutex); //再看看取号机是否空闲

从取号机上取号;

V(mutex); //放开那个取号机!

V(custom); //取到号,告诉营业员有顾客

等待叫号;

V(seets); //被叫号,离开座位

接受服务;

}
Process 营业员
{

While(true)

{

P(custom); //看看有没有等待的顾客

叫号;

为顾客服务;

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值