版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上2015-2016学年第一学期计算机操作系统实验报告专 业:计算机科学与技术班 级:学 号:姓 名:日 期:实验一 Windows多线程【开发语言及实现平台或实验环境】C+/C#Microsoft Visual Studio 6.0/ Microsoft Visual Studio .NET 【实验目的】(1) 进一步理解操作系统的并发性;(2) 了解Windows线程创建方法,并通过查阅资料理解各参数的含义;(3) 了解多线程程序设计方法,并进行简单应用。【实验要求】(1) 逐程序进行简要分析、运行各程序并仔细阅读注释;(2) 查阅MSDN或其他资料,掌握相关系统调
2、用使用方法和参数含义;(3) 完成实验报告。【实验结果与分析】(1)1-1.cpp程序 运行1-1.cpp结果:将main函数中注释掉的Sleep语句让其可用,运行结果为:分析原因: Sleep(0)的作用为语句可观察线程1和主线程并发执行。输出结果“main thread is running /thread1 is running”。没有添加的线程1运行结束只输出“main thread is running”。(2)1-2.cpp程序运行1-2.cpp结果:分析原因: 1-2.cpp文件使用的是时间片轮转方法调度的主线程、线程1、线程2.因此不需要sleep语句就可将主线程调度。因为在两
3、个线程中存在共享变量,因此执行结果出现不可再现性。(3)1-3.cpp程序运行1-3.cpp结果:将main函数中注释掉的Sleep语句让其可用,运行结果为:将两个子函数中注释掉的Sleep语句让其可用,运行结果:分析原因:加入两个sleep(1)后,有可能到thread1 is sell tickets:时间片就停了,tickets没-,还可以运行thread2 is sell tickets:LoadIcon(IDR_MAINFRAME);void CCDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AF
4、X_DATA_MAP(CCDlg)/ NOTE: the ClassWizard will add DDX and DDV calls here/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CCDlg, CDialog)/AFX_MSG_MAP(CCDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()/AFX_MSG_MAPEND_MESSAGE_MAP()/ CCDlg message handlersBOOL CCDlg:OnInitDialog()CDialog:OnInitDialog();/ Add Abou
5、t. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/
6、when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herereturn TRUE; / return TRUE unless you set the focus to a controlvoid CCDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_A
7、BOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CCDlg:OnPai
8、nt() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cx
9、Icon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CCDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;服务端:/ SDlg.cpp : implement
10、ation file/#include stdafx.h#include S.h#include SDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ C
11、lassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAbout
12、Dlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CSDlg dialogCSDlg:CSDlg(CWnd* pParent /*=NULL*/): CDialo
13、g(CSDlg:IDD, pParent)/AFX_DATA_INIT(CSDlg)/ NOTE: the ClassWizard will add member initialization here/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CSDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(
14、pDX);/AFX_DATA_MAP(CSDlg)/ NOTE: the ClassWizard will add DDX and DDV calls here/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CSDlg, CDialog)/AFX_MSG_MAP(CSDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()/AFX_MSG_MAPEND_MESSAGE_MAP()/ CSDlg message handlersBOOL CSDlg:OnInitDialog()CDialog:OnInitDialog();/
15、Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automat
16、ically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herereturn TRUE; / return TRUE unless you set the focus to a controlvoid CSDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0)
17、 = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CSD
18、lg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Widt
19、h() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CSDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon; 运行结果如下图:【实验思考及总结】
20、 (1)在VC+6.0中open已经编译好的程序,选择所有文件,线程之间通信的两个基本问题是互斥和同步。线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。线程互斥是指对于共享的操作系统资源(指的是广义的资源,而不是Windows的.res文件,譬如全局变量就是一种共享资源),在各线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。线程互斥是一种特殊的线程同步。(2)互斥和同步对应着线程间通信发生的两种情况:
21、1) 当有多个线程访问共享资源而不使资源被破坏时; 2) 当一个线程需要将某个任务已经完成的情况通知另外一个或多个线程时。 (3)在WIN32中,同步机制主要有以下几种: 1) 事件(Event); 2) 信号量(semaphore); 3) 互斥量(mutex); 4) 临界区(Critical section)。(4)全局变量因为进程中的所有线程均可以访问所有的全局变量,因而全局变量成为Win32多线程通信的最简单方式。实验四 银行家算法模拟【开发语言及实现平台或实验环境】C+/C#Microsoft Visual Studio 6.0/ Microsoft Visual Studio .
22、NET 2003【实验目的】(1)进一步理解利用银行家算法避免死锁的问题;(2)在了解和掌握银行家算法。(3)理解和掌握安全序列、安全性算法【实验内容】(1)编写安全性算法;(2)编写银行家算法,并编制银行家算法通用程序,将调试结果显示在计算机屏幕上,再检测和笔算的一致性。【源代码】#include #include #define M 3 /资源的种类数#define N 5 /进程的个数void output(int iMaxNM,int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN); /统一的输出格式bool safety(
23、int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN);bool banker(int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN);void main()int i,j;/当前可用每类资源的资源数int iAvailableM=3,3,2;/系统中N个进程中的每一个进程对M类资源的最大需求int iMaxNM=7,5,3,3,2,2,9,0,2,2,2,2,4,3,3;/iNeedNM每一个进程尚需的各类资源数/iAllocationNM为系统中每一类资源当前已分配给
24、每一进程的资源数int iNeedNM,iAllocationNM=0,1,1,2,0,0,3,0,2,2,1,1,0,0,2;/进程名char cNameN=a,b,c,d,e;bool bExitFlag=true; /退出标记char ch; /接收选择是否继续提出申请时传进来的值bool bSafe; /存放安全与否的标志/计算iNeedNM的值for(i=0;iN;i+)for(j=0;jM;j+)iNeedij=iMaxij-iAllocationij;/输出初始值output(iMax,iAllocation,iNeed,iAvailable,cName);/判断当前状态是否安全
25、bSafe=safety(iAllocation,iNeed,iAvailable,cName);/是否继续提出申请while(bExitFlag)coutnch;switch(ch) case y: /cout调用银行家算法;bSafe=banker(iAllocation,iNeed,iAvailable,cName);if (bSafe) /安全,则输出变化后的数据output(iMax,iAllocation,iNeed,iAvailable,cName);break; case n: cout退出。n; bExitFlag=false; break; default: cout输入有
26、误,请重新输入:n;/输出void output(int iMaxNM,int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN)int i,j;coutnt Max tAllocationt Need t Availableendl;couttA B CtA B CtA B Ct A B Cendl;for(i=0;iN;i+)coutcNameit;for(j=0;jM;j+)coutiMaxij ;coutt;for(j=0;jM;j+)coutiAllocationij ;coutt;for(j=0;jM;j+)coutiNee
27、dij ;coutt;cout ;/Available只需要输出一次if (i=0)for(j=0;jM;j+)coutiAvailablej ;coutendl;/安全性算法,进行安全性检查;安全返回true,并且输出安全序列,不安全返回false,并输出不安全的提示;bool safety(int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN)int i,j,flag,x=0;char NameN;int WorkM;bool FinishN; for(j=0;jM;j+)Workj=iAvailablej; for(i=0;i
28、N;i+) Finishi=false;while(true) flag=0; for(i=0;i=iNeedi0 & Work1=iNeedi1 & Work2=iNeedi2) for(j=0;jM;j+)Workj+= iAllocationij ; Finishi=true; flag+; Namex+=cNamei; for(i=0;iN;i+) if(Finishi=false)i=i; break;if(i=5) coutn;cout当前时刻系统的一个安全序列为:;for(x=0;xN;x+)coutNamex ;coutn;return true;if(flag=0)cout无
29、安全序列; return false; return true;/安全返回true,不安全返回falsebool banker(int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN)int iMaxNM=7,5,3,3,2,2,9,0,2,2,2,2,4,3,3;int i,j,RequestM,checkM;bool f=true;char x; while(f) coutx; for(i=0;iN;i+) if (cNamei=x) i=i; break; if (i=5) coutn您输入的进程名有误!请重新输入; else
30、f=false; cout请输入申请各类资源数量:n; for(j=0;jRequestj;for(j=0;jM;j+) checkj=Requestj+iAllocationij;for(j=0;jM;j+) if(iMaxij-checkj)0) coutn资源申请超过最大需求量!n; return false; for(j=0;jM;j+) if(iAvailablej-Requestj)0) coutn不能满足进程!n; return false; for(j=0;jM;j+) iAvailablej-=Requestj; iAllocationij+=Requestj; iNeedi
31、j-=Requestj; safety(iAllocation,iNeed,iAvailable,cName); return true;【实验结果与分析】【实验思考及总结】 银行家算法的安全算法不唯一,我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进
32、程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。实验五 页面置换算法模拟【开发语言及实现平台或实验环境】C+/C#Microsoft Visual Studio 6.0/ Microsoft Visual Studio .NET 2003【实验目的】(1)进一步理解利用页面调度算法实现虚拟内存的问题;(2)通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点。(3)掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。(4)了
33、解页面大小和内存实际容量对命中率的影响。【实验内容】(1)在了解和掌握页面调度算法的基础上,编制先进先出的算法(FIFO)、最近最少使用算法(LRU)、最佳淘汰算法(OPT)等各种页面置换算法。将调试结果显示在计算机屏幕上,再检测和笔算的一致性。(2)理解和掌握命中率的问题(3)会使用某种编程语言。【源代码】#include #define M 3#define N 20using namespace std;struct blockint iPageNum; /物理块里存储的页面号int iBlockFlag;/在三种算法中用到的标记。例如在FIFO中为在内存中的时间;/算法模拟移位寄存器原理void FIFO(int iTempPageN,int flagN,block myBlockM);void Optimal(int iTempPageN,int flagN,block myBlockM);void LRU(int iTe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度新能源汽车充电桩车位销售及售后服务协议4篇
- 2024绿植养护服务合同-住宅小区绿化带维护与管理3篇
- 2025年度棉被定制设计与生产合同4篇
- 2025年度车辆抵押担保融资租赁合同参考范本4篇
- 二零二五年度住宅小区停车位租赁及收费标准合同
- 二零二四年临时工劳动保障与劳动关系调整合同3篇
- 二零二五年度租赁型房屋租赁合同附带租客培训3篇
- 2025版微股东众筹入股协议书-科技创业领域专用3篇
- 2025年中国海产行业市场发展前景及发展趋势与投资战略研究报告
- 2025年中国无菌包装机行业市场全面调研及投资潜力预测报告
- 2024年公需科目培训考试题及答案
- 2024年江苏鑫财国有资产运营有限公司招聘笔试冲刺题(带答案解析)
- 2024年辽宁石化职业技术学院单招职业适应性测试题库含答案
- 广西桂林市2023-2024学年高二上学期期末考试物理试卷
- 财务指标与财务管理
- 部编版二年级下册道德与法治第三单元《绿色小卫士》全部教案
- 【京东仓库出库作业优化设计13000字(论文)】
- 保安春节安全生产培训
- 初一语文上册基础知识训练及答案(5篇)
- 血液透析水处理系统演示
- GB/T 27030-2006合格评定第三方符合性标志的通用要求
评论
0/150
提交评论