赞
踩
实 验 报 告 册
课 程 操作系统
批阅教师签名
学 院 信息工程学院
专 业 计算机科学与技术
班 级 2018计科2班
学 号 2018*********
姓 名 ******
地 点 个人电脑
指导教师 ******
学年学期 2019 年~ 2020 年第 2 学期
实验报告填写要求
1、实验报告填表说明
(1)实验名称:要求与实验大纲和实验指导书中的实验项目名称保持一致。
(2)实验学时:要求与实验大纲和实验指导书中完成该实验项目所需学时一致。
(3)实验类型:是指演示性、操作性、验证性、综合性、设计性。
演示性:教师操作,学生观察,验证理论、说明原理和方法。
操作性:学生按要求动手拆装、调试实验装置或上机操作,掌握其基本原理和方法。
验证性:按实验指导书(教材)要求,由学生通过操作验证所学理论,加深对理论知识的理解,掌握基本实验知识、方法、技能、数据处理等。
综合性:实验内容涉及本课程的综合知识或相关课程的知识,运用多种知识、多种方法,按要求或自拟实验方案进行实验。主要培养学生综合运用所学知识、实验方法和实验技能,以培养其分析、解决问题的能力。
设计性:给定实验目的、要求和实验条件,学生自己设计实验方案并加以实现的实验。学生独立完成从查阅资料、拟定实验方案、实验方法和步骤(或系统分析和设计)、选择仪器设备(或自行设计制作)进行实验并完成实验全过程,形成实验报告,培养学生自主实验的能力。
(4)若有必要,可在实验报告中粘贴打印内容,包含程序、原理图、图形、表格等
2、教师批改学生实验报告要求
(1)批改:要求用红色字迹笔全部批改,在错误的地方进行标注。
(2)评分:按百分制评分,不能评分为“优、良、中、差”或“A、B、C”。
(3)成绩:实验成绩标注在实验报告上,并填写学生实验成绩表,实验成绩作为学期成绩评定的依据。
实验名称 | 进程控制 | 成绩 |
| ||
实验类型 | 综合性 | 实验学时 | 2 | 日期 | 6.4 |
实验目的 | 1通过实验理解进程的概念,进程的组成,进程的并发执行和操作系统进行进程管理的相关原语2掌握进程状态的转变,理解进程调度的过程,用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。 | ||||
实验设备 | 1.运行Windows 7等操作系统的计算机;2.vc6.0 | ||||
一、 实验原理(要求、任务等) 操作系统课稈教学的主要目的,是学习计算机操作系统中资源管理的方法和技术,这些方法和技术,在以后的实际应用开发中加以借鉴,可以提高所开发的应用程序质量。为了加深对操作系统教材中所讲述的一些干要管理策略和算法的理解、掌握这些算法的思想、并能用已学习的程序设计语言实现之,在进行操作系统课程教学过程中必须安排若干实验。要完成这些实验,需要具有一定的C语言或其他编程语言的编程能力。 首先考虑如何组织进程,设定进程控制块的内容。进程块PCB记录各个进程执行时的情况。不同的操作系统,进程控制快记录的信息内容也不一样,无论信息量多少,大致分为:标识信息、说明信息、现场信息、管理信息。 确定讲程控制块内容后,要考虑的就是如何将进程控制块组织在一起多道程席设计 系统中,往往同时创建多个进程。在单处理器的情况下,每次只能有一个进程处于运行态、其他的进程处干就绪状杰或等待状杰。为了便于管理,通常把处于相同状态的进程的讲程控制块链接在一起单处理器系统中,正在运行的进程只有一个。因此,单处理器系统中进程控制块分成一个正在运行进程的进程控制块就绪进程的进程控制块组织成的就绪队列和等待讲程的讲程控制块组成的等待队列。由干实验模拟的是讲程调度,没有对等待队列的操作,所以实验中只有一个指向正在运行进程的进程控制块指针和一个就绪进程的进程控制块队列指针。
| |||||
二、 实验内容和步骤 PCB结构通常包括以下信息:进程名,进程优先数,轮转时间片,进程所占用的CPU时间,进程的状态,当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删。 主体程序 //进程PCB结构体 struct jincheng { int pid; int youxian; float luntime; float zhantime;//这2个时间,固定为3.5,3 char zhuangtai; //a表示执行,b表示动态就绪 Node *neirong; struct jincheng *next; }; typedef struct jincheng Jincheng;
int main() { init(); printf("——————————JinChengGuanLi——————————\n"); while(n==1) { printf("********************************************\n"); printf("* 进程演示系统 *\n"); printf("********************************************\n"); printf(" 1.创建新的进程 2.查看运行进程 \n"); printf(" 3.换出某个进程 4.杀死运行进程 \n"); printf(" 5.进程之间通信 6.退出系统 \n"); printf("********************************************\n"); printf("请选择(1~6)\n"); scanf("%d",&i); switch(i) { case 1:create(); break; case 2: chakan();break; case 3: huanchu(s); break; case 4: j=zhixing(); break; case 5: tongxing(s); break; case 6:exit(0); default:n=0; } } return 0; }
| |||||
三、实验结果与分析 ******************************************** * 进程演示系统 * ******************************************** 1.创建新的进程 2.查看运行进程 3.换出某个进程 4.杀死运行进程 5.进程之间通信 6.退出系统 ******************************************** 请选择(1~6)然后根据你选择的不同,出现不同的结果。
②进程通信:先创建2个进程,名字分别为1,2,优先级分别为5,6,进程内容分别为1abc,2abc,则因为进程2的优先级高,所以当前运行进程为进程2;此时,再进行进程通信(和进程1通信),可以看到当前运行的进程的内容从2abc变为了1abc | |||||
四、总结与心得体会 做进程控制实验时,首先要考虑如何组织进程,设定进程控制块的内容。进程块PCB记录各个进程执行时的情况。确定讲程控制块内容后,要考虑的就是如何将进程控制块组织在一起多道程批设计。 通过一个学期的学习,使我了解了操作系统的进程相关知识,认识了操作系统的重要性,使计算机系统所有资源最大限度地发挥作用,为用户提供方便的、有效的、友善的服务界面
| |||||
五、教师评语
| |||||
实验名称 | 进程通信 | 成绩 |
| ||
实验类型 | 综合性 | 实验学时 | 1 | 日期 | 6.4 |
实验目的 | 1、加深对进程概念的理解,明确进程和程序的区别。2、了解进程通信的基本原理3 、了解进程通信的4种方式:信号量通信, 共享存储器系统、消息传递系统以及管道通信系统 | ||||
实验设备 | 1.运行Windows 7等操作系统的计算机;2.vc6.0 | ||||
一、 实验原理(要求、任务等) 1.在Windows操作系统下,任何一个进程不允许读取、写入或是修改另一个进程的数据(包括变量、对象和内存分配等),但是在某个进程内创建的文件映射对象的视图却能够为多个其他进程所映射,这些进程共享的是物理存储器的同一个页面。因此,当一个进程将数据写入此共享文件映射对象的视图时,其他进程可以立即获取数据变更情况。具体实现步骤如下: ①、在服务器端进程中调用内存映射API函数Create File Mapping创建一个有名字标识的共享内存; ②、在创建文件映射对象后,服务器端进程调用Map View Of file函数映射到本进程的地址空间内; ③、客户端进程访问共享内存对象,需要通过内存对象名调用Open File Mapping函数,以获得共享内存对象的句柄 ④、如果客户端进程获得共享内存对象的句柄成功,则调用Map View Of File函数来映射对象视图。用户可以使用该对象视图来进行数据读写操作,以达到数据通讯的目的。 ⑤、当用户进程结束使用共享内存后,调用Unmap View Of File函数以取消其地址空间内的视图: 3. 要理解生产消费者问题,首先应弄清PV操作的含义:PV操作是由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下: P(S):①将信号量S的值减1,即S=S-1; ②如果S>=0 ,则该进程继续执行;否则该进程置为等待状态,排入等待队列。 V(S):①将信号量S的值加1,即S=S+1; ②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。 4. 分析进程的同步与互斥现象,编程实现经典的进程同步问题——生产者消费者问题的模拟,生产者--消费者问题表述: 有一环形缓冲池,包含n个缓冲区(0~n-1)。 有两类进程:一组生产者进程和一组消费者进程,生产者进程向空的缓冲区中放产品,消费者进程从满的缓冲区中取走产品。所有进程必须对缓冲区进行互斥的访问。生产者不能向满缓冲区写数据,消费者不能从空缓冲区取数据,即生产者与消费者必须同步。 计算机系统中对资源的分配与释放过程:计算机系统中的每个进程都可以消费或生产某类资源。当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者。而当某个进程释放资源时,则它就相当一个生产者。
| |||||
二、 实验内容和步骤 1、编制一段程序,实现进程的共享内存通信。 要求:进程 A 将数据写入到共享内存,进程 B 获取共享内存中的数据。 分析进程的同步与互斥现象,编程实现经典的进程同步问题——生产者消费者问题的模拟;同时也是2个进程间的通信(通信的数据为产品); 实验步骤如下: 进程 A 将数据写入到共享内存: #include <io stream> #include <windows.h> using name space std; #define BUF_SIZE 1025 char sz Name[] = "Name Of Mapping Object"; // 共享内存的名字
int main() { // 创建共享文件句柄 HANDLE h Map File = Create File Mapping( INVALID_HANDLE_VALUE, // 物理文件句柄 NULL, // 默认安全级别 PAGE_READWRITE, // 可读可写 0, // 高位文件大小 BUF_SIZE, // 地位文件大小 szName // 共享内存名称 ); char *pBuf = (char *)MapViewOfFile( hMapFile, // 共享内存的句柄 FILE_MAP_ALL_ACCESS, // 可读写许可 0, 0, BUF_SIZE ); while(1) { cout << "input..." << endl; char szInfo[BUF_SIZE] = {0}; gets(szInfo); // 其实gets并不安全 strncpy(pBuf, szInfo, BUF_SIZE - 1); pBuf[BUF_SIZE - 1] = '\0'; }
UnmapViewOfFile(pBuf); CloseHandle(hMapFile); return 0; } 进程 B 获取共享内存中的数据: #include <iostream> #include <windows.h> using namespace std; #define BUF_SIZE 1025 char szName[] = "NameOfMappingObject"; // 共享内存的名字 int main() { // 创建共享文件句柄 HANDLE hMapFile = CreateFileMapping( INVALID_HANDLE_VALUE, // 物理文件句柄 NULL, // 默认安全级别 PAGE_READWRITE, // 可读可写 0, // 高位文件大小 BUF_SIZE, // 地位文件大小 szName // 共享内存名称 ); char *pBuf = (char *)MapViewOfFile( hMapFile, // 共享内存的句柄 FILE_MAP_ALL_ACCESS, // 可读写许可 0, 0, BUF_SIZE );
while(1) { cout << "press any button to receive data..." << endl; getchar(); cout << pBuf << endl; }
UnmapViewOfFile(pBuf); CloseHandle(hMapFile); return 0; }
| |||||
三、实验结果与分析
| |||||
四、总结与心得体会 通过进程通信的实验,加深对进程概念的理解,明确进程和程序的区别。了解进程通信的基本原理,通过自己的动手实验,更容易了解进程通信的实验机制。 进程 A 将数据写入到共享内存,进程 B 获取共享内存中的数据。所谓的进程互斥,指 两个或两个以上的进程,不能同时进入关于同一组共享变量的临界区域,也就是说,一个进程正在访问临界资源,另一个要访问该资源的进程必须等待。通过编程,能够更好地理解这个概念。进程互斥通过lockf()来实现。
| |||||
五、教师评语
|
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。