实验题目.docx
《实验题目.docx》由会员分享,可在线阅读,更多相关《实验题目.docx(10页珍藏版)》请在冰豆网上搜索。
实验题目
题目1:
Windows进程的创建与销毁
内容及要求:
①掌握Windows进程的创建和销毁API的调用方法;编程代码,在程序中创建和销毁一个Word进程;
②能够挂起和激活被创建进程的主线程;
③通过Windows进程管理器查看系统进程列表的变化。
实验指导:
①创建进程的API
BOOLCreateProcess(
LPCTSTRlpApplicationName,
LPTSTRlpCommandLine,
LPSECURITY_ATTRIBUTESlpProcessAttributes,
LPSECURITY_ATTRIBUTESlpThreadAttributes,
BOOLbInheritHandles,
DWORDdwCreationFlags,
LPVOIDlpEnvironment,
LPCTSTRlpCurrentDirectory,
LPSTARTUPINFOlpStartupInfo,
LPPROCESS_INFORMATIONlpProcessInformation
);
例程:
voidmain(VOID){
STARTUPINFOsi;
PROCESS_INFORMATIONpi;
ZeroMemory(&si,sizeof(si));
si.cb=sizeof(si);
ZeroMemory(&pi,sizeof(pi));
//Startthechildprocess.
if(!
CreateProcess(NULL,//Nomodulename(usecommandline).
"MyChildProcess",//Commandline.
NULL,//Processhandlenotinheritable.
NULL,//Threadhandlenotinheritable.
FALSE,//SethandleinheritancetoFALSE.
0,//Nocreationflags.
NULL,//Useparent'senvironmentblock.
NULL,//Useparent'sstartingdirectory.
&si,//PointertoSTARTUPINFOstructure.
&pi)//PointertoPROCESS_INFORMATIONstructure.
){
ErrorExit("CreateProcessfailed.");
}
//Waituntilchildprocessexits.
WaitForSingleObject(pi.hProcess,INFINITE);
//Closeprocessandthreadhandles.
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
②销毁进程API
BOOLTerminateProcess(
HANDLEhProcess,
UINTuExitCode
);
③挂起进程的主线程API
DWORDSuspendThread(
HANDLEhThread
);
④激活进程的主线程API
DWORDResumeThread(
HANDLEhThread
);
⑤进程查看器
题目2:
Windows线程间的通信与互斥
内容及要求:
①理解Windows线程的管理方式,掌握线程创建和管理API的调用方法;
②理解Windows的信号量机制,掌握信号量编程API的调用方法;
③用Windows信号量机制,解决读者-写者问题。
实验指导:
MFC提供了一组同步和同步访问类来解决线程同步问题。
其中,同步对象包括:
CSyncObject、CSemaphore、CMutex,CCriticalSection和CEvent;同步访问对象包括:
CMultiLock和CSingleLock。
同步类用于访问资源时保证资源的整体性。
其中CSyncObject是其他四个同步类的基类,不直接使用。
信号同步类CSemaphore通常用于当一个应用程序中同时有多个线程访问一个资源的情况(例如n,应用程序允许对同一个Document有多个View);事件同步类CEvent通常用于在应用程序访问资源之前应用程序必须等待的情况(比如,在数据写进一个文件之前数据必须从通信端口得到);互斥同步类CMutex和临界区同步类CCriticalSection都是用于保证一个资源一次只能有一个线程访问,二者的不同之处在于前者允许有多个应用程序使用该资源,例如,该资源在一个DLL当中,而后者则不允许对同一个资源的访问超出进程的范畴,而且使用临界区的方式效率比较高。
同步访问类用于获得对这些控制资源的访问。
CMultiLock和CSingleLock的区别仅在于是需要控制访问多个还是单个资源对象。
信号量对象的构造函数:
CSemaphore(
LONGlInitialCount=1,
LONGlMaxCount=1,
LPCTSTRpstrName=NULL,
LPSECURITY_ATTRIBUTESlpsaAttributes=NULL
);
单锁的构造函数:
explicitCSingleLock(
CSyncObject*pObject,
BOOLbInitialLock=FALSE
);
多锁的构造函数:
CMultiLock(
CSyncObject*ppObjects[],
DWORDdwCount,
BOOLbInitialLock=FALSE
);
题目3作业调度
一、实验目的
1、对作业调度的相关内容作进一步的理解。
2、明白作业调度的主要任务。
3、通过编程掌握作业调度的主要算法。
二、实验内容及要求
1、对于给定的一组作业,给出其到达时间和运行时间,例如下表所示:
作业名
A
B
C
D
E
F
到达时间
0
2
5
5
12
15
服务时间
6
50
20
10
40
8
2、分别用先来先服务算法、短作业优先和响应比高者优先三种算法给出作业的调度顺序。
3、计算每一种算法的平均周转时间及平均带权周转时间并比较不同算法的优劣。
三、实验报告
1、程序中使用的数据结构及符号说明。
2、给出主要算法的流程图。
3、给出程序清单并附上注释。
4、给出测试数据和运行结果。
题目4基于优先数的时间片轮转调度算法调度处理器
一、实验目的
在采用多道程序设计的系统中,同时处于就绪态的进程往往有多个,当就绪态的进程数大于处理器的个数时,就需按照某种策略进行分配处理器。
本次设计模拟在单处理器情况下采用基于优先数的时间片轮转调度算法进行处理器调度,加深了解处理器调度工作过程。
二、实验内容及要求
1、设计一个程序实现基于优先数的时间片轮转调度算法调度处理器。
2、假定系统有5个进程,每个进程用一个进程控制块PCB开代表,进程控制块的结构如下图1.2所示:
进程名
指针
到达时间
要求运行时间
已运行时间
优先数
进程状态
图1
其中:
进程名:
作为进程的标识。
指针:
进程按顺序排成循环链表,用指针指出下一个进程的进程控制块首地址,最后一个进程中的指针指出第一个进程的进程控制块首地址。
要求运行时间:
假设进程需要运行的单位时间数。
已运行时间:
假设进程已经运行的单位时间数,初值为0。
状态:
可假设有两种状态,就绪状态和结束状态。
进程的初始状态都为就绪状态。
3、每次运行所设计的处理器调度程序调度进程之前,为每个进程任意确定它的要求运行时间。
4、此程序是模拟处理器调度,因此,被选中的进程并不实际启动运行,而是执行
已运行时间+1
来模拟进程的一次运行,表示进程已经运行过一个单位时间。
.5、在所设计的程序中应有显示或打印语句,能显示或打印每次被选中的进程名以及运行一次后进程队列的变化。
6、为进程任意确定要求运行时间,运行所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。
7、设有一个就绪队列,就绪进程按优先数(优先数范围0-100)由小到大排列(优先数越小,级别越高)。
当某一进程运行完一个时间片后,其优先级应下调(如优先数加2或3)。
8、例如一组进程如下表:
进程名
A
B
C
D
E
F
G
H
J
K
L
M
到达时间
0
1
2
3
6
8
12
12
12
18
25
25
服务时间
6
4
10
5
1
2
5
10
4
3
15
8
三、实验报告
1、程序中使用的数据结构及符号说明。
2、给出主要算法的流程图
3、给出程序清单并附上注释
4、打印程序运行时的初值和运行结果。
(运行一个进程输出一次结果)
题目5银行家算法
一、实验目的
1、对死锁避免中的银行家算法作进一步理解。
2、加深理解死锁的概念。
3、加深理解安全序列和安全状态的概念。
4、通过编程,掌握银行家算法分配资源的一步步实现过程。
二、实验内容及要求
1、给出系统可用资源向量(例如:
系统可用资源=(5,3,8,2,10))。
2、若干进程最大需求矩阵如下表所示:
3、采用时间片轮转法调度进程。
4、进程执行时提出资源请求(可利用随机数给出或从键盘输入)。
5、判断资源是否可以安全分配,要求进程每提出一个资源请求,都要进行安全判断并给出安全序列,否则给出提示。
三、实验报告
1、程序中使用的数据结构及符号说明。
2、给出主要算法的流程图。
3、给出程序清单并附上注释。
4、给出测试数据和运行结果。
题目6内存管理
一、实验目的
1、对内存管理的相关内容做进一步的理解。
2、了解内存管理的主要任务。
3、了解内存管理任务的主要实现方法。
4、通过编程加深理解内存的分配、回收等主要算法的原理。
二、实验内容及要求
1、在该实验中,采用可变分区方式完成对存储空间的管理(即存储空间的分配与回收工作)。
2、设计用来记录主存使用情况的数据结构:
已分区表和空闲分区表。
3、在设计好的数据结构上设计一个主存分配算法,要求实现的基本功能操作有:
寻找空闲分区,空闲分区表的修改,已分区表的修改。
4、在设计好的数据结构上设计一个主存回收算法。
其中,若回收的分区有上邻空闲分区和(或)下邻空闲分区,要求合并为一个空闲分区登记在空闲分区表的一个表项里。
三、实验报告
1、程序中使用的数据结构及符号说明。
2、给出主要算法的流程图。
3、给出程序清单并附上注释。
4、给出测试数据和运行结果,要求系统每进行一次分配或回收,都要给出内存映像图或已分配表及未分配表以观察内存的变化。
题目7页面置换
一、实验目的
1、对页面置换做进一步的理解。
2、了解页面置换的任务。
3、通过编程掌握页面置换算法及缺页率。
4、了解Belady现象和抖动现象。
二、实验内容及要求
1、任意给出一组页面访问顺序(如页面走向是1、2、5、7、5、7、1、4、3、5、6、4、3、2、1、5、2)。
2、分配给该作业一定的物理块(如3块、4块等)。
3、利用某几种页面置换算法模拟页面置换过程并计算其缺页率并分析结果。
4、通过给出特殊的页面访问顺序,分配不同的物理块,利用FIFO算法计算其缺页率,进一步理解Belady现象。
三、实验报告
1、程序中使用的数据结构及符号说明。
2、给出主要算法的流程图。
3、给出程序清单并附上注释。
4、给出测试数据和运行结果,要求系统每进行一次页面置换,都要给出换进和换出的页面号。
5、通过测试数据观察Belady现象。
题目8磁盘调度
一、实验目的
1、对磁盘调度的相关知识作进一步的了解,明确磁盘调度的原理。
2、加深理解磁盘调度的主要任务。
3、通过编程,掌握磁盘调度的主要算法。
二、实验内容和要求
1、对于如下给定的一组磁盘访问进行调度:
请求服务到达
A
B
C
D
E
F
G
H
I
J
K
访问的磁道号
30
50
100
180
20
90
150
70
80
10
160
2、要求分别采用先来先服务、最短寻道优先以及电梯调度方法进行调度。
3、要求给出每种算法中磁盘访问的顺序,计算出平均移动道数。
4、假定当前读写头在90号,向磁道号增加的方向移动。
三、实验报告
1、程序中使用的数据结构及符号说明。
2、给出主要算法的流程图。
3、给出程序清单并附上注释。
4、给出测试数据和运行结果。