《操作系统》实验(训)要求
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
for( int j =0 ;j < MaxCount;j++){
i++;
}
return 0;
}
DWORD __stdcall fun2( LPVOID p1)
{
for( int j =0 ;j < MaxCount;j++){
i--;
}
return 0;
}
3、观察两个线程执行后的情况,可以发觉最后i的值不一定是0,有时是很大的正数,有时是很大的负数,这就是多个线程在操作同一个变量i时,未同步时带来的严重问题。
2、创建两个线程,一个对i执行加1操作,另一个对i执行减1操作。两个线程执行相同的次数。
显然,正常情况下,i的仍然保持为0。
#include<stdio.h>
#include<windows.h>
#define MaxCount 9000000 //循环次数要很大,可多次尝试一些值
DWORD __stdcall fun1( LPVOID p1)
1、掌握死锁产生的原因和必要条件。
2、掌握银行家算法的实现
二、实验理论基础
1、处理机调度与死锁。
2、死锁的产生与预防。
3、银行家算法。
三、实验内容与步骤
1、创建C语言工程项目,按照教材上的有关说明,定义相应的数据结构。
int AllocMatrix[5][4]//已经分配资源矩阵
int RequestMatrix[5][4]//需求矩阵
实验
一、实验目的
1、掌握Windows中线程的操作。
2、熟悉线程不同步时的现象及环境因素。
3、掌握一种同步对象的使用。
二、实验理论基础
1、线程和线程不同步的认识。
2、线程间的同步和通信。
3、本实验内容主要对应于教材第2章中关于线程的各节。
三、实验内容与步骤
1、定义全局变量int i = 0;初始值置为0。
{1,3,5,4},
{0,3,3,2},
{0,0,1,4}
};
注意:步骤1、2可同时进行,即利用C语言中的定义变量就可同时初始化的方式进行数值初设。
3、依据银行家算法的描述依次进行资源的试探性分配,直至成功或失败,成功则说明当前状态是安全的;失败后,还应该将资源回到初始状态,并进行另一次试探;只有所有的试探都失败了,才能说明当前状态是不安全的。
还应该了解,在多个线程操作共享的变量时,才需要考虑同步问题。
5、给这两个线程加上同步代码,再来观察对 i 值的影响。步骤2的函数稍微改动即可:
CRITICAL_SECTION cs;
DWORD __stdcall fun1( LPVOID p1)
{
for( int j =0 ;j < MaxCount;j++){
3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。
实验
一、实验目的
1、加深对线程的理解、掌握Windows中线程的操作。
2、掌握死锁产生的原因。
3、掌握信号量、互斥量、事件、临界区等同步对象的使用。
步骤1、创建一个基于MFC的应用程序。
步骤2、在应用程序类型中选取“基于对话框”的选项。
步骤3、直接点击完成,系统将为你创建一个工程项目。
步骤4、然后在“资源视图”中,打开对话框“IDD_MY_DIALOG”,将出现以下对话框:
步骤5、打开界面上的“工具箱”,放置一个“按钮”,如下图:
步骤6、双击上面的“Button1”按钮,切换到代码的编写处:
2、实验源程序一份,请表明题号(电子版)
备注:做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。
3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。
实验
一、实验目的
输入以下语句:
步骤7、编译并运行此工程项目,看看运行的结果。
四
1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)
2、实验源程序一份,请表明题号(电子版)
备注:做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。
3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。
(1)、当有“读者”的绿灯亮时,其余的“读者”灯的状态是、其余的“写者”灯的状态是。
(2)、当有“写者”的绿灯亮时,其余的“写者”灯的状态是、其余的“读者”灯的状态是。
这说明“读者”间的关系是、“读者”之间的关系是、“读者-写者”之间的关系是。(填相容、互斥)
4、打开工程文件“Reader_Writer”,查找下列函数的用法:
《操作系统》实验指导书
华南理工大学教学二部
2011.12
实验一
实验二
实验三
实验四
实验五
实验六
实验七
实验八
实验九
实验十
实验
一、实验目的
1、熟悉Windows2000/XP中任务管理器的使用。
2、通过任务管理器识别操作系统中的进程和线程的相关信息。
3、掌握利用spy++.exe来察看Windows中各个任务的更详细信息。
int AvailResource[4]//可用资源向量
int TryProcess[5]//尝试序列
2、给各个数据结构设定合适的初始值。
按照教材课后习题22的内容给上述数据结构设定初始值。
如:int AllocMatrix[5][4]={//已经分配资源矩阵
{0,0,3,2},
{1,0,0,0},
2、依次改变上图中“下拉组合框”的选项,读出界面中显示的各项信息,并完成下表(填满即可):(统计中要包含winlogon.exe、lsass.exe、csrss.exe、smss.exe等应用程序)
表一:统计进程的一些信息
序号
进程名称
进程ID
父进程ID
优先级
线程数
Heaps数量
模块数量
1
2
3
4
5
6
7
i--;
::LeaveCriticalSection(&cs);
}
}
加入的同步代码的两个线程,无论如何执行,i 的值总是 0 ,结果是正确的。
6、主函数的写法
int main()
{
DWORD id1,id2;
HANDLE hThread[2];
::InitializeCriticalSection(&cs);
二、实验理论基础
1、实验理论基础:
(1)操作系统中的进程和线程的概念;
(2)进程PCB的各项指标含意;
2、本实验内容主要对应于教材第2章。
三、实验内容与步骤
1、启动操作系统自带的任务管理器:
方法:直接按组合键Ctrl+Alt+Del,或者是在点击任务条上的“开始”“运行”,并输入“taskmgr.exe”。如下图所示:
1、进一步掌握进程的相关概念
2、掌握Windows2000/XP有关进程操作的API函数的使用。
3、了解进程的地址空间的含义。
二、实验理论基础
1、实验理论基础:
(1)操作系统中的进程和线程的概念;
(2)进程的各种控制;
2、本实验内容主要对应于教材第2章和第3章的内容。
三、实验内容与步骤
1、启动应用程序“ProcessInformation.exe”,应出现下面的界面:
(1)AfxBeginThread();创建线程。ResumeThread();让线程恢复运行。
(2)CreateMutex();创建互斥量。ReleaseMutex();删除互斥量。
(3)CreateSemaphore();创建信号量。ReleaseSemaphore()删除信号量。
(4)WaitForSingleObject();等待同步对象。
::EnterCriticalSection(&cs);
i++;
::LeaveCriticalSection(&cs);
}
}
DWORD __stdcall fun2( LPVOID p1)
{
for( int j =0 ;j < MaxCount;j++){
::EnterCriticalSection(&cs);
2、调整任务管理器的“查看”中的相关设置,显示关于进程的以下各项信息,并完成下表(填满即可):
表一:统计进程的各项主要信息
序号
进程名称
进程ID
线程数量
占用内存
优先级
占CPU时间
虚拟内存
1
2
3
4
5
6
7
8
3、从桌面启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结束掉。再从任务管理器中分别找到下列程序:winlogon.exe、lsass.exe、csrss.exe、smss.exe,试着结束它们,观察到的反应是,
表二:统计线程的各项信息
进程:explorer.exe中的各个线程
序号
进程ID
线程ID
基本优先级
当前优先级
CPU时间
上下文开关
1
2
3
4
5
6
7
8
9
10
11
12
13
14
6、注意某些线程前有“+”,如图所示: ,说明二者之间的差异是。
四
1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)
hThread[0] = ::CreateThread(0,0,fun1,0,0,&id1);
hThread[1] = ::CreateThread(0,0,fun2,0,0,&id2);
::WaitForMultipleObjects(2,hThread,1,INFINITE);
printf("i = %d\n",i);
二、实验理论基础
1、进程和线程的关系。
2、线程间的同步和通信。
3、本实验内容主要对应于教材第2章中关于线程的各节、第3章中关于死锁的各节。
三、实验内容与步骤
1、运行实验程序“Reader_Writer.exe”,出现如下界面:
2、交替点击“创建读者线程”和“创建写者线程”按钮,出现如下界面:
3、观察第二步的实验现象,多次试验,可总结为:
8
3、从上表中观察“进程ID”和“父进Baidu NhomakorabeaID”两栏,总结并画出下列程序间的亲缘关系:winlogon.exe、lsass.exe、csrss.exe、smss.exe。
4、打开“ProcessInfo”工程文件,打开文件“ProcessInfo.cpp”,找到函数:CreateProcess()的使用方法。按下列步骤建立一个工程项目,将记事本应用程序运行起来,即创建了一个新的进程。
《操作系统》实验(训)要求:
1、阅读教材并参考以下《操作系统》实验指导书十个实验以及参考操作系统实验个人总结.DOC文档,或者上网浏览有关资料;
2、选择其中的两个题目;
3、按照“华南理工大学教学二部实验(训)报告格式”填写两份报告书;
4、并且打印两份《华南理工大学教学二部实验(训)报告》,第17周上课时统一交给任课老师。
原因是。
4、在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开的所有窗口最小化,看看你的计算机系统起来什么样的变化、得到的结论是(说出explorer.exe进程的作用)。
5、运行“spy++.exe”应用软件,点击按钮“ ”,切换到进程显示栏上,查看进程“explorer.exe”的各项信息,并填写下表:
(5)CloseHandle();关闭内核对象的句柄。
5、运行“Dining.exe”应用程序,观察线程间“死锁”时的状态。
6、创建一个“Console”应用程序,在main()函数中创建4个线程,线程的工作就是向屏幕输出几个字符后,就自己结束掉。
四
1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)
2、实验源程序一份,请表明题号(电子版)
备注:做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。
3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。
实验
一、实验目的
通常,这种试探性算法采用递归的方法是很合适的,程序也是很简洁的。
代码片段:
if(AvailResource[0] >= RequestMatrix[k][0]
&& AvailResource[1] >= RequestMatrix[k][1]
::DeleteCriticalSection(&cs);
getchar();
return 0;
}
四
1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)
2、实验源程序一份,请表明题号(电子版)
备注:做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。
for( int j =0 ;j < MaxCount;j++){
i++;
}
return 0;
}
DWORD __stdcall fun2( LPVOID p1)
{
for( int j =0 ;j < MaxCount;j++){
i--;
}
return 0;
}
3、观察两个线程执行后的情况,可以发觉最后i的值不一定是0,有时是很大的正数,有时是很大的负数,这就是多个线程在操作同一个变量i时,未同步时带来的严重问题。
2、创建两个线程,一个对i执行加1操作,另一个对i执行减1操作。两个线程执行相同的次数。
显然,正常情况下,i的仍然保持为0。
#include<stdio.h>
#include<windows.h>
#define MaxCount 9000000 //循环次数要很大,可多次尝试一些值
DWORD __stdcall fun1( LPVOID p1)
1、掌握死锁产生的原因和必要条件。
2、掌握银行家算法的实现
二、实验理论基础
1、处理机调度与死锁。
2、死锁的产生与预防。
3、银行家算法。
三、实验内容与步骤
1、创建C语言工程项目,按照教材上的有关说明,定义相应的数据结构。
int AllocMatrix[5][4]//已经分配资源矩阵
int RequestMatrix[5][4]//需求矩阵
实验
一、实验目的
1、掌握Windows中线程的操作。
2、熟悉线程不同步时的现象及环境因素。
3、掌握一种同步对象的使用。
二、实验理论基础
1、线程和线程不同步的认识。
2、线程间的同步和通信。
3、本实验内容主要对应于教材第2章中关于线程的各节。
三、实验内容与步骤
1、定义全局变量int i = 0;初始值置为0。
{1,3,5,4},
{0,3,3,2},
{0,0,1,4}
};
注意:步骤1、2可同时进行,即利用C语言中的定义变量就可同时初始化的方式进行数值初设。
3、依据银行家算法的描述依次进行资源的试探性分配,直至成功或失败,成功则说明当前状态是安全的;失败后,还应该将资源回到初始状态,并进行另一次试探;只有所有的试探都失败了,才能说明当前状态是不安全的。
还应该了解,在多个线程操作共享的变量时,才需要考虑同步问题。
5、给这两个线程加上同步代码,再来观察对 i 值的影响。步骤2的函数稍微改动即可:
CRITICAL_SECTION cs;
DWORD __stdcall fun1( LPVOID p1)
{
for( int j =0 ;j < MaxCount;j++){
3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。
实验
一、实验目的
1、加深对线程的理解、掌握Windows中线程的操作。
2、掌握死锁产生的原因。
3、掌握信号量、互斥量、事件、临界区等同步对象的使用。
步骤1、创建一个基于MFC的应用程序。
步骤2、在应用程序类型中选取“基于对话框”的选项。
步骤3、直接点击完成,系统将为你创建一个工程项目。
步骤4、然后在“资源视图”中,打开对话框“IDD_MY_DIALOG”,将出现以下对话框:
步骤5、打开界面上的“工具箱”,放置一个“按钮”,如下图:
步骤6、双击上面的“Button1”按钮,切换到代码的编写处:
2、实验源程序一份,请表明题号(电子版)
备注:做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。
3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。
实验
一、实验目的
输入以下语句:
步骤7、编译并运行此工程项目,看看运行的结果。
四
1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)
2、实验源程序一份,请表明题号(电子版)
备注:做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。
3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。
(1)、当有“读者”的绿灯亮时,其余的“读者”灯的状态是、其余的“写者”灯的状态是。
(2)、当有“写者”的绿灯亮时,其余的“写者”灯的状态是、其余的“读者”灯的状态是。
这说明“读者”间的关系是、“读者”之间的关系是、“读者-写者”之间的关系是。(填相容、互斥)
4、打开工程文件“Reader_Writer”,查找下列函数的用法:
《操作系统》实验指导书
华南理工大学教学二部
2011.12
实验一
实验二
实验三
实验四
实验五
实验六
实验七
实验八
实验九
实验十
实验
一、实验目的
1、熟悉Windows2000/XP中任务管理器的使用。
2、通过任务管理器识别操作系统中的进程和线程的相关信息。
3、掌握利用spy++.exe来察看Windows中各个任务的更详细信息。
int AvailResource[4]//可用资源向量
int TryProcess[5]//尝试序列
2、给各个数据结构设定合适的初始值。
按照教材课后习题22的内容给上述数据结构设定初始值。
如:int AllocMatrix[5][4]={//已经分配资源矩阵
{0,0,3,2},
{1,0,0,0},
2、依次改变上图中“下拉组合框”的选项,读出界面中显示的各项信息,并完成下表(填满即可):(统计中要包含winlogon.exe、lsass.exe、csrss.exe、smss.exe等应用程序)
表一:统计进程的一些信息
序号
进程名称
进程ID
父进程ID
优先级
线程数
Heaps数量
模块数量
1
2
3
4
5
6
7
i--;
::LeaveCriticalSection(&cs);
}
}
加入的同步代码的两个线程,无论如何执行,i 的值总是 0 ,结果是正确的。
6、主函数的写法
int main()
{
DWORD id1,id2;
HANDLE hThread[2];
::InitializeCriticalSection(&cs);
二、实验理论基础
1、实验理论基础:
(1)操作系统中的进程和线程的概念;
(2)进程PCB的各项指标含意;
2、本实验内容主要对应于教材第2章。
三、实验内容与步骤
1、启动操作系统自带的任务管理器:
方法:直接按组合键Ctrl+Alt+Del,或者是在点击任务条上的“开始”“运行”,并输入“taskmgr.exe”。如下图所示:
1、进一步掌握进程的相关概念
2、掌握Windows2000/XP有关进程操作的API函数的使用。
3、了解进程的地址空间的含义。
二、实验理论基础
1、实验理论基础:
(1)操作系统中的进程和线程的概念;
(2)进程的各种控制;
2、本实验内容主要对应于教材第2章和第3章的内容。
三、实验内容与步骤
1、启动应用程序“ProcessInformation.exe”,应出现下面的界面:
(1)AfxBeginThread();创建线程。ResumeThread();让线程恢复运行。
(2)CreateMutex();创建互斥量。ReleaseMutex();删除互斥量。
(3)CreateSemaphore();创建信号量。ReleaseSemaphore()删除信号量。
(4)WaitForSingleObject();等待同步对象。
::EnterCriticalSection(&cs);
i++;
::LeaveCriticalSection(&cs);
}
}
DWORD __stdcall fun2( LPVOID p1)
{
for( int j =0 ;j < MaxCount;j++){
::EnterCriticalSection(&cs);
2、调整任务管理器的“查看”中的相关设置,显示关于进程的以下各项信息,并完成下表(填满即可):
表一:统计进程的各项主要信息
序号
进程名称
进程ID
线程数量
占用内存
优先级
占CPU时间
虚拟内存
1
2
3
4
5
6
7
8
3、从桌面启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结束掉。再从任务管理器中分别找到下列程序:winlogon.exe、lsass.exe、csrss.exe、smss.exe,试着结束它们,观察到的反应是,
表二:统计线程的各项信息
进程:explorer.exe中的各个线程
序号
进程ID
线程ID
基本优先级
当前优先级
CPU时间
上下文开关
1
2
3
4
5
6
7
8
9
10
11
12
13
14
6、注意某些线程前有“+”,如图所示: ,说明二者之间的差异是。
四
1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)
hThread[0] = ::CreateThread(0,0,fun1,0,0,&id1);
hThread[1] = ::CreateThread(0,0,fun2,0,0,&id2);
::WaitForMultipleObjects(2,hThread,1,INFINITE);
printf("i = %d\n",i);
二、实验理论基础
1、进程和线程的关系。
2、线程间的同步和通信。
3、本实验内容主要对应于教材第2章中关于线程的各节、第3章中关于死锁的各节。
三、实验内容与步骤
1、运行实验程序“Reader_Writer.exe”,出现如下界面:
2、交替点击“创建读者线程”和“创建写者线程”按钮,出现如下界面:
3、观察第二步的实验现象,多次试验,可总结为:
8
3、从上表中观察“进程ID”和“父进Baidu NhomakorabeaID”两栏,总结并画出下列程序间的亲缘关系:winlogon.exe、lsass.exe、csrss.exe、smss.exe。
4、打开“ProcessInfo”工程文件,打开文件“ProcessInfo.cpp”,找到函数:CreateProcess()的使用方法。按下列步骤建立一个工程项目,将记事本应用程序运行起来,即创建了一个新的进程。
《操作系统》实验(训)要求:
1、阅读教材并参考以下《操作系统》实验指导书十个实验以及参考操作系统实验个人总结.DOC文档,或者上网浏览有关资料;
2、选择其中的两个题目;
3、按照“华南理工大学教学二部实验(训)报告格式”填写两份报告书;
4、并且打印两份《华南理工大学教学二部实验(训)报告》,第17周上课时统一交给任课老师。
原因是。
4、在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开的所有窗口最小化,看看你的计算机系统起来什么样的变化、得到的结论是(说出explorer.exe进程的作用)。
5、运行“spy++.exe”应用软件,点击按钮“ ”,切换到进程显示栏上,查看进程“explorer.exe”的各项信息,并填写下表:
(5)CloseHandle();关闭内核对象的句柄。
5、运行“Dining.exe”应用程序,观察线程间“死锁”时的状态。
6、创建一个“Console”应用程序,在main()函数中创建4个线程,线程的工作就是向屏幕输出几个字符后,就自己结束掉。
四
1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)
2、实验源程序一份,请表明题号(电子版)
备注:做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。
3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。
实验
一、实验目的
通常,这种试探性算法采用递归的方法是很合适的,程序也是很简洁的。
代码片段:
if(AvailResource[0] >= RequestMatrix[k][0]
&& AvailResource[1] >= RequestMatrix[k][1]
::DeleteCriticalSection(&cs);
getchar();
return 0;
}
四
1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)
2、实验源程序一份,请表明题号(电子版)
备注:做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。