一 选择题
1.按文件逻辑结构分,C语言源程序文件属于(C)
A.有结构文件 B 顺序文件 C 无结构文件 D 链接文件
有结构文件(记录式文件):由一组相似的记录组成数据库是由若干条记录组成的
无结构文件(流式文件):由一些二进制或字符流组成
2. 多道批处理主要设计目标是(C),分时操作系统主要设计目标是(B),实时操作系统主要设计目标是(A)
A.系统能及时响应并在规定时间内处理外部事件的请求
B.及时接受并处理用户的请求,将结果返回给用户
C.高资源利用率和系统吞吐量
D.资源共享和通信
多道批处理系统中用户提交的作业都先存放在外存并排成一个队列,该队列称为后备队列,然后由作业调度程序按一定算法从后备队列中选择若干个作业调入内存,使它们共享处理机和系统中的各种资源,以达到提高资源利用率和系统吞吐量的目的
分时系统是指一台主机连接了多个带有显示器和键盘的终端,同时允许多个用户共享主机中的资源,每个用户都可以通过自己的终端以交互方式使用计算机,解决的最关键问题是如何是用户能与自己的作业交互,即当用户在自己的终端输入命令时系统应能及时接收和处理该命令,并将加过返回给用户。
实时控制系统和和实时信息处理系统称为实时系统,实时系统指系统能及时(即时)响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致的运行
3.进程状态转换图
4.能执行所有指令的处理机状态是(C)
A.用户态 B.目态 C.核心态 D.目态或系统态
5.在引入线程执行的操作系统中,(C)是调度和分派的基本单位,(A)是资源拥有的基本单位
A.进程 B.程序 C.线程 D.管程
线程是进程的一个实体,是被系统独立调度和分派的基本单位,线程自己基本上不拥有系统资源,只在运行中有一点必不可少的资源(程序计数器,寄存器和栈)
进程是具有独立功能可并发执行程序在一个数据集合上的运行过程,是系统进行资源分派和调度的基本单位
7.时间片轮转进程调度算法通常应用于(A)
A.分时系统 B.实时系统 C.批处理系统 D.交互式系统
通常用于分时系统,他按照先进先出的原则轮流调度就绪队列中的进程,保证系统各个用户进程及时得到响应,又不要由于时间片太短增加调度的开销,降低系统的效率
8.在预防死锁的方法中,静态预分配法摒弃了 (B)
A. 互斥条件 B.请求和保持条件 C.不剥夺条件 D.环路等待条件
互斥条件是固有属性,不能改变
请求和保持:一次性的申请所需全部资源
不剥夺:对于一个已经保持了某些资源的进程,若新的进程要求不能立即得到满足,他必须释放已保持的所有资源,以后需要时再重新申请
环路等待:将所有资源按类型进行线性排队,并赋予不同的序号
9.虚拟页式存储管理中,存储器的容量受( )限制
虚拟存储器是指仅把程序的一部分装入内存便可以运行程序的存储器系统,具有请求调入和置换功能,能从逻辑上把对内存容量进行扩充的一种存储器系统
虚拟存储器并非可以无限大,容量受外存大小和指令中地址长度两方面的限制
10.SPOOLING系统组成包括
输入进程和输出进程,输入缓冲区和输出缓冲区,输入井和输出井
二 简答题
1.设备分配与哪些因素有关?p272
(1)设备的固有属性,不同属性设备的分配是不相同的,设备的固有属性可分为三种,独占共享虚拟
独占设备,把一个设备分配给一个用户进程后,只有等该用户进程使用完该设备,系统回收该设备后,才能把该设备分配给其他进程使用,缺点是设备得不到有效使用,可能发生死锁
共享设备,可供多个进程使用,所以该设备应注意对各个进程访问该设备的先后次序进行控制
虚拟设备,属可共享设备,因此也可以分配给多个进程使用,并对这些进程访问该设备的先后次序进行控制
(2)设备分配算法
先来先服务算法
优先权高者者优先算法
(3)设备分配的安全性
安全分配
不安全分配
(4)设备独立性
2. 某系统中磁盘的每个盘块大小为1KB,外存分配方法采用中的混合索引结构,其中索引节点中直接地址6项,一级索引地址2项,二级索引地址1项,每个盘块号占用4个字节,请问该系统中允许的文件最大长度是多少?
1KB /4=256个盘块
直接地址可用的磁盘空间为1KB*6=6KB
1级索引地址可用的磁盘空间1KB*256*2=512KB
2级索引地址可用的磁盘空间1KB*256*256=64MB
3.为了找到能够找到文件的位置,在采用连续文件、链接文件和索引文件时,在目录中需要登记哪些内容?
连续文件:第一个磁盘块的磁盘块号和文件长度
链接文件:第一个磁盘块的块号
索引文件:索引盘块号
4.某采用分页存储管理的系统中,物理地址占20位,逻辑地址中页号占6位,页大小1KB,该系统内存空间大小为多少?每块大小为多少?逻辑地址共几位?每个作业最大长度为多少?0页放在3块中,1页放在7块中,2页放在9块中,逻辑地址0420H对应的物理地址是多少?
内存空间:
每块大小:1KB
每个作业最大长度:
0000 0100 0010 0000
0001 1100 0010 0000 => 1C20H
5.述缺页中断与一般中断的主要区别
(1)指令执行期间产生和处理中断信号
(2)一条指令在执行期间,可能产生多次缺页中断
6.在一个批处理单道系统中,采用响应比高者优先的作业调度算法,当一个作业进入系统后就可以开始调度,假定作业都是仅计算。
作业 | 进入系统时间 | 需要计算时间 | 开始时间 | 完成时间 | 周转时间 |
1 | 9:00 | 60min | 9:00 | 10:00 | 60min |
2 | 9:10 | 45min | 10:25 | 11:10 | 20min |
3 | 9:15 | 25min | 10:00 | 10:25 | 70min |
三 算法设计
1.有一个可以存放n整数的循环缓冲,今有m个输入进程,每个输入进程每次读入一个数据放入缓冲区中,还有k个输出进程,每个输出进程每次可以从缓冲中读出一个数据输出,不允许有两个或两个以上的输入进程(输出进程)同时存(取)数据,但允许有一个输入进程在存数据时有一个输出进程可以取数据,使用信号量协调工作
semaphore mutexp = 1, mutexc = 1,empty = n, full = 0;
item buffer[n];
int in = out = 0;
void producer()
{
while(1)
{
输入一个数据放入x中;
wait(empty);
wait(mutexp);
buffer[in] = x;
in = (in + 1) mod n;
signal(mutexp);
signal(full);
}
}
void consumer()
{
while(1)
{
wait(full);
wait(mutexc);
y = buffer[out];
out = (out + 1) mod n;
signal(mutexc);
signal(empty);
输出y中的数据;
}
}
main()
{
cobegin
{
producer();
consumer();
}
}
2.写出一种可以避免死锁的资源分配算法
银行家算法
testsafety()
/* 检测系统是否安全,若安全返回 true,不安全返回 false*/
{int work[n];
int finish[m]
int i,k;
work=available.
/*finish[i]表示进程 i能否执行完,能执行完为 true,否则 false*/
for(i=0;i<m;i++) finish[i]=false;
k=0;
i=0;
while(k<m)
/*循环检测进程是否可以执行完,若检测中发现连续检测m个进程都不能找到新的能停止运行的进程,应停止检*/
{
if(work>=need&&finish[i]==false)
{
work=work+allocation;
finish[i]=true;
k=0
}
i=(i+1)%m;
k++;
}
flag=true;/*检测是否有进程没有执行完,若有 flag 为 false*/
for(i=0;i<m&&flag;i++)
if(finish[i]==false) flag=false;
return(flag);
}
banker_allocation(int request[n],int i)
/*银行家分配算法,分配成功返回 true,不成功返回 false*/
{
if(!(request<=need))
return(false);
if(!(request<=available))
return(false)
availble=available-request;
allocaition=allocaion+request;
need =need -request;
if(testsatefy( ))
return(true)
else
{
availble=available+request;
allocaition =allocaion-request;
need=need+request;
return(false)
}