2004年自学考试《操作系统》
实践环节测试卷A
上机号 考号 姓名 分数
说明:1。本试卷分为两大部分,均为必做题。
2.考生考试用文件夹为d:\\ostest,其下有子文件夹os为TC编程专用(TC2.0位于d:\\下),其余为第一大题专用子文件夹。
一、 WINDOWS操作部分(字母不分大小写)
1、 在D盘ostest下创建如“王强A”格式的“考生姓名”+“试卷类别”的文件夹。 2、 改USER0下的文件TONGZHI.DOC为“通知A”。 3、 在本地查找文件夹“TEST”,并将其删除。
4、 将WINKT文件夹中第一个字母为A的所有文件复制到USERB中。 5、 将WINKT文件夹中第一个字母为B的所有文件移动到USERA中。
6、 在USERA中创建WINKT下CALC.EXE的快捷方式,名称为“计算器A”。 7、 修改WINKT\\LINK下的文件TEST.GIF的属性为“只读”。
二、操作系统编程部分
请仔细阅读下面编程题目,用TC2.0录入(注释部分不用输入)并调试所给程序,并以名osma.c保存到D:\\OSTEST\\OS子目录中,运行结果抄到试卷纸末。 编程题目:
下列程序为一个可变分区的主存分配模拟程序模块,其中分配函数ALLOCATE()没有完成,该函数参数只有需要的分区长度xk,函数完成查找一个满足条件的空闲区分配,并修改空闲区表(不用修改已分配区表),返回分区的起始地址。请考生填空完成横线部分,并填写在纸上。
#define minisize 100 /*空闲区_申请空间≤minisize 时,分配整个空闲区*/ #define m 20 /*假定系统允许的空闲区表最大为m*/ #include \"stdio.h\"
/*系统中主要数据结构*/ struct {
float address; /*空闲区起始地址*/
float length; /*空闲区长度,单位为字节*/
int flag; /*空闲区表登记栏标记,用0表示空栏目,用1表示未分配*/ }free_table[m]; /*空闲区表*/ float allocate(float xk) {
int i,k; float ad;
k=-1; i=0;
for(i=0;i=xk && free_table[i].flag==1) {k=i; break;}if(k==-1) /* 无可用空闲区,返回 */ {printf(\"no free space\\n\"); return(-1); }
if(free_table[k].length-xk<=minisize) /* 找到可用空闲区,开始分配 */
{
free_table[k].flag=0; ad=free_table[k].address; xk=free_table[k].length; } else {
free_table[k].length=free_table[k].length - xk; ad=free_table[k].address + free_table[k].length; }
return( ad ); }
main() {
float xk0,ad0; int i,n;
scanf(\"%f\运行时输入123 */ free_table[0].address=0; free_table[0].length=100; free_table[0].flag=1; for(i=1;i<20;i++) {
free_table[i].address=free_table[i-1].address+free_table[i-1].length; free_table[i].length=100+30*i*i; free_table[i].flag=1; }
printf(\"未分配表\\n\");
printf(\"起始地址: 长度: 标记:\\n\"); /* for(i=0;i<20;i++) {
printf(\"%8.2f \free_table[i].address); printf(\"%8.2f \ printf(\"%8d \\n\ }
printf(\"\\n \\n \\n\");*/
ad0=allocate(xk0); if(ad0>0) {
for(i=0;i<20;i++) {
printf(\"%8.2f \free_table[i].address); printf(\"%8.2f \ printf(\"%8d \\n\ }
}else {printf(\"sorry!\\n\");}
printf(\"sample main program A\\n\"); /*}运行结果:
主程序显示示范程序*/