《操作系统》实验指导手册Word下载.docx
- 文档编号:19857657
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:26
- 大小:1.22MB
《操作系统》实验指导手册Word下载.docx
《《操作系统》实验指导手册Word下载.docx》由会员分享,可在线阅读,更多相关《《操作系统》实验指导手册Word下载.docx(26页珍藏版)》请在冰豆网上搜索。
序号
进程名称
进程ID
线程数量
占用内存
优先级
占CPU时间
虚拟内存
1
2
3
4
5
6
7
8
3、从桌面启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结束掉。
再从任务管理器中分别找到下列程序:
winlogon.exe、lsass.exe、csrss.exe、smss.exe,试着结束它们,观察到的反应是,
原因是。
4、在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开的所有窗口最小化,看看你的计算机系统起来什么样的变化、得到的结论是(说出explorer.exe进程的作用)。
5、运行“spy++.exe”应用软件,点击按钮“
”,切换到进程显示栏上,查看进程“explorer.exe”的各项信息,并填写下表:
表二:
统计线程的各项信息
进程:
explorer.exe中的各个线程
线程ID
基本优先级
当前优先级
CPU时间
上下文开关
9
10
11
12
13
14
6、注意某些线程前有“+”,如图所示:
,说明二者之间的差异是。
四、实验材料的提交与成绩评定
1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)
2、实验源程序一份,请表明题号(电子版)
备注:
做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。
3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。
1、进一步掌握进程的相关概念
2、掌握Windows2000/XP有关进程操作的API函数的使用。
3、了解进程的地址空间的含义。
(1)操作系统中的进程和线程的概念;
(2)进程的各种控制;
2、本实验内容主要对应于教材第2章和第3章的内容。
1、启动应用程序“ProcessInformation.exe”,应出现下面的界面:
2、依次改变上图中“下拉组合框”的选项,读出界面中显示的各项信息,并完成下表(填满即可):
(统计中要包含winlogon.exe、lsass.exe、csrss.exe、smss.exe等应用程序)
统计进程的一些信息
父进程ID
线程数
Heaps数量
模块数量
3、从上表中观察“进程ID”和“父进程ID”两栏,总结并画出下列程序间的亲缘关系:
winlogon.exe、lsass.exe、csrss.exe、smss.exe。
4、打开“ProcessInfo”工程文件,打开文件“ProcessInfo.cpp”,找到函数:
CreateProcess()的使用方法。
按下列步骤建立一个工程项目,将记事本应用程序运行起来,即创建了一个新的进程。
步骤1、创建一个基于MFC的应用程序。
步骤2、在应用程序类型中选取“基于对话框”的选项。
步骤3、直接点击完成,系统将为你创建一个工程项目。
步骤4、然后在“资源视图”中,打开对话框“IDD_MY_DIALOG”,将出现以下对话框:
步骤5、打开界面上的“工具箱”,放置一个“按钮”,如下图:
步骤6、双击上面的“Button1”按钮,切换到代码的编写处:
输入以下语句:
步骤7、编译并运行此工程项目,看看运行的结果。
1、掌握Windows中线程的操作。
2、熟悉线程不同步时的现象及环境因素。
3、掌握一种同步对象的使用。
1、线程和线程不同步的认识。
2、线程间的同步和通信。
3、本实验内容主要对应于教材第2章中关于线程的各节。
1、定义全局变量inti=0;
初始值置为0。
2、创建两个线程,一个对i执行加1操作,另一个对i执行减1操作。
两个线程执行相同的次数。
显然,正常情况下,i的仍然保持为0。
#include<
stdio.h>
windows.h>
#defineMaxCount9000000//循环次数要很大,可多次尝试一些值
DWORD__stdcallfun1(LPVOIDp1)
{
for(intj=0;
j<
MaxCount;
j++){
i++;
}
return0;
}
DWORD__stdcallfun2(LPVOIDp1)
i--;
3、观察两个线程执行后的情况,可以发觉最后i的值不一定是0,有时是很大的正数,有时是很大的负数,这就是多个线程在操作同一个变量i时,未同步时带来的严重问题。
还应该了解,在多个线程操作共享的变量时,才需要考虑同步问题。
5、给这两个线程加上同步代码,再来观察对i值的影响。
步骤2的函数稍微改动即可:
CRITICAL_SECTIONcs;
:
:
EnterCriticalSection(&
cs);
LeaveCriticalSection(&
加入的同步代码的两个线程,无论如何执行,i的值总是0,结果是正确的。
6、主函数的写法
intmain()
DWORDid1,id2;
HANDLEhThread[2];
:
InitializeCriticalSection(&
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);
DeleteCriticalSection(&
getchar();
1、加深对线程的理解、掌握Windows中线程的操作。
2、掌握死锁产生的原因。
3、掌握信号量、互斥量、事件、临界区等同步对象的使用。
1、进程和线程的关系。
3、本实验内容主要对应于教材第2章中关于线程的各节、第3章中关于死锁的各节。
1、运行实验程序“Reader_Writer.exe”,出现如下界面:
2、交替点击“创建读者线程”和“创建写者线程”按钮,出现如下界面:
3、观察第二步的实验现象,多次试验,可总结为:
(1)、当有“读者”的绿灯亮时,其余的“读者”灯的状态是、其余的“写者”灯的状态是。
(2)、当有“写者”的绿灯亮时,其余的“写者”灯的状态是、其余的“读者”灯的状态是。
这说明“读者”间的关系是、“读者”之间的关系是、“读者-写者”之间的关系是。
(填相容、互斥)
4、打开工程文件“Reader_Writer”,查找下列函数的用法:
(1)AfxBeginThread();
创建线程。
ResumeThread();
让线程恢复运行。
(2)CreateMutex();
创建互斥量。
ReleaseMutex();
删除互斥量。
(3)CreateSemaphore();
创建信号量。
ReleaseSemaphore()删除信号量。
(4)WaitForSingleObject();
等待同步对象。
(5)CloseHandle();
关闭内核对象的句柄。
5、运行“Dining.exe”应用程序,观察线程间“死锁”时的状态。
6、创建一个“Console”应用程序,在main()函数中创建4个线程,线程的工作就是向屏幕输出几个字符后,就自己结束掉。
1、掌握死锁产生的原因和必要条件。
2、掌握银行家算法的实现
1、处理机调度与死锁。
2、死锁的产生与预防。
3、银行家算法。
1、创建C语言工程项目,按照教材上的有关说明,定义相应的数据结构。
intAllocMatrix[5][4]//已经分配资源矩阵
intRequestMatrix[5][4]//需求矩阵
intAvailResource[4]//可用资源向量
intTryProcess[5]//尝试序列
2、给各个数据结构设定合适的初始值。
按照教材课后习题22的内容给上述数据结构设定初始值。
如:
intAllocMatrix[5][4]={//已经分配资源矩阵
{0,0,3,2},
{1,0,0,0},
{1,3,5,4},
{0,3,3,2},
{0,0,1,4}
};
注意:
步骤1、2可同时进行,即利用C语言中的定义变量就可同时初始化的方式进行数值初设。
3、依据银行家算法的描述依次进行资源的试探性分配,直至成功或失败,成功则说明当前状态是安全的;
失败后,还应该将资源回到初始状态,并进行另一次试探;
只有所有的试探都失败了,才能说明当前状态是不安全的。
通常,这种试探性算法采用递归的方法是很合适的,程序也是很简洁的。
代码片段:
if(AvailResource[0]>
=RequestMatrix[k][0]
&
&
AvailResource[1]>
=RequestMatrix[k][1]
AvailResource[2]>
=RequestMatrix[k][2]
AvailResource[3]>
=RequestMatrix[k][3])//若资源能使进程ProcessID结束
for(inti=0;
i<
4;
i++)
AvailResource[i]-=AllocMatrix[k][i];
//恢复资源
intSearchSecurity(intlevel)//递归函数
{
if(level==4){
……
}
else{
SearchSecurity(level+1);
//有条件递归调用自己
……
}其余由大家自行完成。
1、熟悉程序的运行时动态链接。
2、熟悉Windows中内存的分页管理方式。
3、了解虚拟内存的用法,熟悉Windows中相应的API函数。
1、应用程序的动态链接。
2、内存的分页管理、虚拟内存的技术。
3、本实验内容主要对应于教材第4章。
1、运行“SystemInfo.exe”应用程序,出现如下界面:
从该界面上可以看到Windows2000/XP系统中的分页大小(PageSize)是:
4,096,即4K字节,也可以看到本机所安装的处理器的个数是:
1个。
打开工程文件,熟悉信息获取函数的使用:
SYSTEM_INFOsinf;
GetSystemInfo(&
sinf);
2、运行“VMSTATE.exe”应用程序,出现如下界面:
从界面上可以看到,本计算机中所安装的物理内存的大小“TotalPhys”,可用物理内存的大小“AvailPhys”。
打开源文件,熟悉或者信息函数的使用:
MEMORYSTATUSms={sizeof(ms)};
GlobalMemoryStatus(&
ms);
3、运行“VMAlloc.exe”应用程序,掌握其用法和功能:
打开源文件,熟悉以下操作虚拟存储空间函数的使用:
VirtualAlloc()、VirtualQuery()、VirtualFree()。
4、运行“VMMap.exe”应用程序,了解程序的功能,读懂其显示的每一行信息的含义:
从上面显示的信息中,谈谈自己对虚拟储存空间的认识(100字以内)。
1、熟悉基本分页存储管理。
2、建立描述分页内存管理中的页目录表、页表结构。
3、实现进行虚拟内存到物理内存的映射算法。
1、操作系统中内存管理。
2、基本分页内存、分段内存管理。
3、页目录表、页表的作用,以及虚拟地址到物理地址的映射关系。
题目:
分页存储管理的设计与实现。
某系统采用了两级页表机制,可使页表所占用内存尽量少,分页地址变换机构如下图所示:
分页地址变换机构
页目录表共1024项,每个页表1024项,每页的大小是4K个字节。
地址转换时,先由分段部件生成线性地址,再由上面所述的分页部件,根据线性地址中的页目录索引在页目录表中找相应的项,该项值为所需页表在内存的块号,找到该页表后,然后按第21-12位的页表索引找到所需页的物理内存起始地址,把它与12位偏移直接相加得到32位的物理地址。
设系统有如表1中所示的10个段,已知:
1-8段从内存的200000H处开始由低地址到高地址连续存放,映射到3G+4M开始的线性地址空间;
9段(缓冲区)放在400000H开始的内存,映射的线性地址同物理地址;
显存从B8000H开始,映射到3G开始的线性地址空间。
表1
(1)、请设计并填写页目录表和页表(需说明每张表的内存地址)
(2)、线性地址为:
C0401010H、C0404010H、C0414010H,则物理地址是多少,所在段的段名是什么?
(需写出计算的详细步骤)
实验步骤:
1、定义页目录表、页表的数据结构,以及必要的数据。
#definePage_Size4096//页面大小
#definePages26//本题定义的总的页面个数
#defineFirstLinearAddr0xC0000000+0x400000//线性地址3G+4M
#defineSecondLinearAddr0x400000//线性地址0x400000
#defineThirdLinearAddr0xC0000000//线性地址3G
#defineIDT0
#defineTSS1
#defineGDT2
#definePDT3//页目录表的下标
#definePT14//第1个页表的下标
#definePT25//第2个页表的下标
#definePT36//第3个页表的下标
#definePT47//第4个页表的下标
//......省略其它页表
#defineCODE20
#defineSTACK21
#defineDATA22
#defineBUFFER23
#defineDISPLAYMEM24
2、初始化页目录表、页表中的数据
p=(unsignedint*)PysicalMemAddr[PDT];
//p指向页目录表
p[FirstLinearAddr>
>
22]=(unsignedint)PysicalMemAddr[PT1];
//将第1个页表的地址填入页目录表中
p=(unsignedint*)PysicalMemAddr[PT1];
//p指向第1个页表
p[(FirstLinearAddr+4096*IDT)>
12&
0x3FF]=(unsignedint)PysicalMemAddr[IDT];
//将IDT页的起始地址填入页表
p[(FirstLinearAddr+4096*TSS)>
0x3FF]=(unsignedint)PysicalMemAddr[TSS];
//将TSS页的起始地址填入页表
p[(FirstLinearAddr+4096*GDT)>
0x3FF]=(unsignedint)PysicalMemAddr[GDT];
//将GDT页的起始地址填入页表
p[(FirstLinearAddr+4096*PDT)>
0x3FF]=(unsignedint)PysicalMemAddr[PDT];
//将PDT页的起始地址填入页表
p[(FirstLinearAddr+4096*PT1)>
0x3FF]=(unsignedint)PysicalMemAddr[PT1];
//将PT1页的起始地址填入页表
p[(FirstLinearAddr+4096*PT2)>
0x3FF]=(unsignedint)PysicalMemAddr[PT2];
//将PT2页的起始地址填入页表
p[(FirstLinearAddr+4096*PT3)>
0x3FF]=(unsignedint)PysicalMemAddr[PT3];
//将PT3页的起始地址填入页表
p[(FirstLinearAddr+4096*PT4)>
0x3F
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 指导 手册