操作系统实验2

合集下载

操作系统实验二实验报告

操作系统实验二实验报告

操作系统实验二实验报告一、实验目的本次操作系统实验二的主要目的是深入理解和掌握进程管理的相关概念和技术,包括进程的创建、执行、同步和通信。

通过实际编程和实验操作,提高对操作系统原理的认识,培养解决实际问题的能力。

二、实验环境本次实验使用的操作系统为 Windows 10,编程环境为 Visual Studio 2019。

三、实验内容及步骤(一)进程创建实验1、首先,创建一个新的 C++项目。

2、在项目中,使用 Windows API 函数`CreateProcess`来创建一个新的进程。

3、为新进程指定可执行文件的路径、命令行参数、进程属性等。

4、编写代码来等待新进程的结束,并获取其退出代码。

(二)进程同步实验1、设计一个生产者消费者问题的模型。

2、使用信号量来实现生产者和消费者进程之间的同步。

3、生产者进程不断生成数据并放入共享缓冲区,当缓冲区已满时等待。

4、消费者进程从共享缓冲区中取出数据进行处理,当缓冲区为空时等待。

(三)进程通信实验1、选择使用管道来实现进程之间的通信。

2、创建一个匿名管道,父进程和子进程分别读写管道的两端。

3、父进程向管道写入数据,子进程从管道读取数据并进行处理。

四、实验结果及分析(一)进程创建实验结果成功创建了新的进程,并能够获取到其退出代码。

通过观察进程的创建和执行过程,加深了对进程概念的理解。

(二)进程同步实验结果通过使用信号量,生产者和消费者进程能够正确地进行同步,避免了缓冲区的溢出和数据的丢失。

分析结果表明,信号量机制有效地解决了进程之间的资源竞争和协调问题。

(三)进程通信实验结果通过管道实现了父进程和子进程之间的数据通信。

数据能够准确地在进程之间传递,验证了管道通信的有效性。

五、遇到的问题及解决方法(一)在进程创建实验中,遇到了参数设置不正确导致进程创建失败的问题。

通过仔细查阅文档和调试,最终正确设置了参数,成功创建了进程。

(二)在进程同步实验中,出现了信号量使用不当导致死锁的情况。

操作系统实验二:银行家算法

操作系统实验二:银行家算法

操作系统实验⼆:银⾏家算法实验⼆银⾏家算法⼀、实验⽬的1、了解什么是操作系统安全状态和不安全状态;2、了解如何避免系统死锁;3、理解银⾏家算法是⼀种最有代表性的避免死锁的算法,掌握其实现原理及实现过程。

⼆、实验内容根据银⾏家算法的基本思想,编写和调试⼀个实现动态资源分配的模拟程序,并能够有效避免死锁的发⽣。

三、实验原理进程申请资源时,系统通过⼀定的算法判断本次申请是否不可能产⽣死锁(处于安全状态)。

若可能产⽣死锁(处于不安全状态),则暂不进⾏本次资源分配,以避免死锁。

算法有著名的银⾏家算法。

1、什么是系统的安全状态和不安全状态?所谓安全状态,是指如果系统中存在某种进程序列<P1,P2,…,Pn>,系统按该序列为每个进程分配其所需要的资源,直⾄最⼤需求,则最终能使每个进程都可顺利完成,称该进程序列<P1,P2,…,Pn,>为安全序列。

如果不存在这样的安全序列,则称系统处于不安全状态。

2、银⾏家算法把操作系统看作是银⾏家,操作系统管理的资源相当于银⾏家管理的资⾦,进程向操作系统请求分配资源相当于⽤户向银⾏家贷款。

为保证资⾦的安全,银⾏家规定:(1) 当⼀个顾客对资⾦的最⼤需求量不超过银⾏家现有的资⾦时就可接纳该顾客;(2) 顾客可以分期贷款,但贷款的总数不能超过最⼤需求量;(3) 当银⾏家现有的资⾦不能满⾜顾客尚需的贷款数额时,对顾客的贷款可推迟⽀付,但总能使顾客在有限的时间⾥得到贷款;(4) 当顾客得到所需的全部资⾦后,⼀定能在有限的时间⾥归还所有的资⾦。

操作系统按照银⾏家制定的规则设计的银⾏家算法为:(1)进程⾸次申请资源的分配:如果系统现存资源可以满⾜该进程的最⼤需求量,则按当前的申请量分配资源,否则推迟分配。

(2)进程在执⾏中继续申请资源的分配:若该进程已占⽤的资源与本次申请的资源之和不超过对资源的最⼤需求量,且现存资源能满⾜该进程尚需的最⼤资源量,则按当前申请量分配资源,否则推迟分配。

(3)⾄少⼀个进程能完成:在任何时刻保证⾄少有⼀个进程能得到所需的全部资源⽽执⾏到结束。

北理工操作系统实验二读者写者问题

北理工操作系统实验二读者写者问题

本科实验报告实验名称:操作系统原理实验(读者写者问题)课程名称:操作系统原理实验时间:2015.10.30 任课教师:王耀威实验地点:10#102实验教师:苏京霞实验类型: 原理验证□综合设计□自主创新学生姓名:孙嘉明学号/班级:1120121474/05611202 组号:学院:信息与电子学院同组搭档:专业:信息对抗技术成绩:实验二:读者写者问题一、实验目的1.通过编写和调试程序以加深对进程、线程管理方案的理解;2.熟悉Windows多线程程序设计方法;二、实验要求在Windows环境下,创建一个控制台进程,此进程包含n个线程。

用这n个线程来表示n个读者或写者。

每个线程按相应测试数据文件(后面介绍)的要求进行读写操作。

用信号量机制分别实现读者优先和写者优先问题。

读者-写者问题的读写操作限制(包括读者优先和写者优先)1)写-写互斥:不能有两个写者同时进行写操作2)读-写互斥:不能同时有一个线程在读,而另一个线程在写。

3)读-读允许:可以有一个或多个读者在读。

读者优先的附加限制:如果读者申请进行读操作时已有另一个读者正在进行读操作,则该读者可直接开始读操作。

运行结果显示要求:要求在每个线程创建、发出读写申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确定所有处理都遵守相应的读写操作限制。

测试数据文件包括 n行测试数据,分别描述创建的n个线程是读者还是写者,以及读写操作的开始时间和持续时间。

每行测试数据包括四个字段,每个字段间用空格分隔。

第1个字段为正整数,表示线程的序号。

第2个字段表示线程的角色,R表示读者,W表示写者。

第3个字段为一个正数,表示读写开始时间:线程创建后,延迟相应时间(单位为秒)后发出对共享资源的读写申请。

第4个字段为一个正数,表示读写操作的延迟时间。

当线程读写申请成功后,开始对共享资源进行读写操作,该操作持续相应时间后结束,释放该资源。

下面是一个测试数据文件的例子(在记事本手工录入数据):1 R 3 52 W 4 53 R 5 24 R 6 55 W 5.1 3三、实验环境硬件设备:个人计算机。

操作系统实验二报告-时间片轮转进程调度算法1

操作系统实验二报告-时间片轮转进程调度算法1

操作系统实验报告实验二时间片轮转进程调度算法学号:班级:姓名:【实验题目】: 时间片轮转进程调度算法【实验目的】通过这次实验, 加深对进程概念的理解, 进一步掌握进程状态的转变、进程调度的策略与对系统性能的评价方法。

【实验内容】问题描述:设计程序模拟进程的时间片轮转RR 调度过程。

假设有n 个进程分别在T1, … ,Tn 时刻到达系统, 它们需要的服务时间分别为S1, … ,Sn 。

分别利用不同的时间片大小q, 采用时间片轮转RR 进程调度算法进行调度, 计算每个进程的完成时间, 周转时间和带权周转时间, 并且统计n 个进程的平均周转时间和平均带权周转时间。

程序要求如下:1)进程个数n ;每个进程的到达时间T 1, … ,T n 和服务时间S 1, … ,S n ;输入时间片大小q 。

2)要求时间片轮转法RR 调度进程运行, 计算每个进程的周转时间, 带权周转时间, 并且计算所有进程的平均周转时间, 带权平均周转时间;3)输出: 要求模拟整个调度过程, 输出每个时刻的进程运行状态, 如“时刻3: 进程B开始运行”等等;4)输出:要求输出计算出来的每个进程的周转时间, 带权周转时间, 所有进程的平均周转时间, 带权平均周转时间。

实现提示:用C++语言实现提示:1)程序中进程调度时间变量描述如下:int ArrivalTime[100];int ServiceTime[100];int PServiceTime[100];int FinishTime[100];int WholeTime[100];double WeightWholeTime[100];double AverageWT,AverageWWT;bool Finished[100];➢2)进程调度的实现过程如下:➢变量初始化;➢接收用户输入n, T1, … ,Tn, S1, … ,Sn;时间片大小q;➢按照时间片轮转RR算法进行进程调度, 计算进程的完成时间、周转时间和带权周转时间;➢计算所有进程的平均周转时间和平均带权周转时间;➢按格式输出调度结果。

操作系统实验二并发与调度

操作系统实验二并发与调度

实验二并发与调度一、实验目的在本实验中,通过对事件和互斥体对象的了解,来加深对Windows 2000线程同步的理解。

通过分析实验程序,了解管理事件对象的API。

了解在进程中如何使用事件对象,在进程中如何使用互斥体对象,线程如何通过文件映射对象发送数据。

二、实验环境硬件环境:计算机一台,局域网环境;软件环境:Windows 2000 Professional,Visual C++ 6.0专业版或企业版。

三、实验内容和步骤第一部分:互斥体对象本程序中显示的类CCountUpDown使用了一个互斥体来保证对两个线程间单一数值的访问。

每个线程都企图获得控制权来改变该数值,然后将该数值写入输出流中。

创建者实际上创建的是互斥体对象,计数方法执行等待并释放,为的是共同使用互斥体所需的资源(因而也就是共享资源) 。

1、利用互斥体保护共享资源程序参见实验指导书分析程序的运行结果,可以看到线程(加和减线程) 的交替执行(因为Sleep() API允许Windows切换线程) 。

在每次运行之后,数值应该返回初始值(0) ,因为在每次运行之后写入线程在等待队列中变成最后一个,内核保证它在其他线程工作时不会再运行。

1)请描述运行结果(如果运行不成功,则可能的原因是什么?) :2) 根据运行输出结果,对照分析程序,可以看出程序运行的流程吗?请简单描述:_____逆向运行__________第二部分线程通过文件对象发送数据Windows 2000提供的线程间通讯类内核对象允许同一进程或跨进程的线程之间互相发送信息,包括文件、文件映射、邮件位和命名管道等,其中最常用的是文件和文件映射。

这类对象允许一个线程很容易地向同一进程或其他进程中的另一线程发送信息。

1、演示线程通过文件对象发送数据程序参见实验指导书运行结果(如果运行不成功,则可能的原因是什么?) :阅读和分析程序,请回答问题:1) 程序中启动了多少个单独的读写线程?__________100__________________________________________________________2) 使用了哪个系统API函数来创建线程例程?_________ CreateThread()________________________________3) 文件的读和写操作分别使用了哪个API函数?_______ ReadFile()______ WriteFile()_____________ 每次运行进程时,都可看到程序中的每个线程从前面的线程中读取数据并将数据增加,文件中的数值连续增加。

实验2 Windows操作系统基础

实验2 Windows操作系统基础

2.查看硬盘,在图2-2-1中记录D盘的相关信息。
3.在C盘根目录下创建如图2-2-2所示的 三级文件夹,并完成如下操作:
(1)在桌面上,用“记事本”程序创建 文本文件t1ห้องสมุดไป่ตู้txt;然后在桌面的快捷菜单 中选择“新建”→“文本文档”命令,创 建文本文件t2.txt、t3.txt、t4.txt。四 个文件的内容任意输入。 (2)将桌面上的t1.txt复制到C: \JSJ11\Sub1\mmm中。 (3)将桌面上的t2.txt复制到C: \JSJ11\Sub2\nnn中。
(3)分别按“名称”、“类型”、“大小”、 “递增”和“递减”对Windows主目录进行排序, 观察5种排序方式的区别。 (4)选择“设置”或“取消”下列文件和文件 夹的“查看”选项,并观察两者之间的区别。 ①鼠标指向文件夹和桌面项时显示提示信息。 ②隐藏受保护的操作系统文件。 ③显示隐藏的文件、文件夹和驱动器。 ④先隐藏后显示已知文件类型的扩展名。
2.掌握磁盘管理的基本方法。
3..掌握Windows7中库的操作。
【实验内容】
1.“Windows 资源管理器”的查看与使用
(1)在桌面双击“计算机”,打开“计算 机”窗口,请仔细观察窗口。 (2)分别选择“超大图标”、“大图标”、 “中图标”、“小图标”、“列表”、“详 细信息”、“平铺”和“内容”等8种方式浏 览Windows主目录,观察各种显示方式之间的 区别。
8.启动“磁盘碎片整理程序”,分析C盘,
查看报告。
(1)碎片:( )%。
(2)如果时间允许,对 C盘进行碎片整理。
9.库的设置 10.库的创建
实验2 Windows7操作系统基础
实验2.1 Windows7的基本操作

操作系统实验2-计算机操作系统(第3版)-郁红英-清华大学出版社

操作系统实验2-计算机操作系统(第3版)-郁红英-清华大学出版社

操作系统实验
(课程设计)实验报告
学院
专业
班级/学号
学生姓名
成绩
实验地点_
实验日期___ __
指导教师_____ ___ _____
(课程上机)实验报告
1.实验名称、实验目的、实验内容、实验要求由教师确定,实验前由教师事先填好,然后作为实验报告模版供学生使用;
2.实验准备由学生在实验或上机之前填写,教师应该在实验前检查;
3.实验过程由学生记录实验的过程,包括操作过程、遇到哪些问题以及如何解决等;
4.实验总结由学生在实验后填写,总结本次实验的收获、未解决的问题以及体会和建议等;
5.源程序、代码、具体语句等,若表格空间不足时可作为附录另外附页。

Linux操作系统实验2-进程调度的操作

Linux操作系统实验2-进程调度的操作

1.查看并创建用户的计划任务列表crontab文件;
1)查看crontab命令的帮助信息;
在终端下键入info crontab, 进入crontab帮助手册:
2)查看用户的计划任务列表;
查看特定用户的计划任务列表:
在终端下键入crontab -l -u duke 列出duke用户的所有定时任务,如下:
终端提示no crontab for duke,说明用户duke目前没有计划任务。

查看当前用户的计划任务列表:
在终端下键入crontab -l 列出当前用户的所有定时任务,如下:
终端提示no crontab for duke,说明用户duke目前没有计划任务。

2.通过crontab文件对调度进程的计划任务进行编排操作。

1)建立crontab文件;
在终端下键入crontab -e ,提示当前无crontab文件,选择编辑器并新建如下:进入VI编辑器,编辑当前crontab文件,可以看到提供了一些注解作说明。

在crontab中输入0 3 * * 1 ls /etc 并保存,实现在每周一早上三点执行ls /etc 命令。

再次查看crontab文件,可以看到已经保存。

2)使用crontab命令安装crontab文件,安排计划任务;
对于位于/home下的crontab文件,使用crontab <filename>载入crontab计划任务中,如图:
3)查看计划任务表,确认计划任务是否已被安排;
键入crontab -l,查看计划任务安排情况,如图:
4)删除计划任务列表。

在终端下键入crontab -r ,删除当前用户的crontab文件,如下:。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
三实验要求
实验报告要求1、写出进程管理的思想。2、画出算法流程图和设置的数据结构。3、写出调试程序出现的问题及解决的方法。4、打印实验报告及程序清单。5、报告给出测试的结果。四实验环境:
Windows8.0开发语言c++
五实验前的准备
1、阅读教材,了解有关PCB的知识。进程控制块的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程。或者说,OS是根据PCB来对并发执行的进程进行控制和管理的。PCB通常是系统内存占用区中的一个连续存区,它存放着操作系统用于描述进程情况及控制进程运行所需的全部信息,它使一个在多道程序环境下不能独立运行的程序成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。
《操作系统》实验报告
实验编号
实验2
实验题目
操作系统
专业班级
实验日期
2014-04-03
实验成绩
学生学号
学生姓名
指导老师
一实验目的:
1、加深对进程概念及进程管理各个部分内容的理解;2、熟悉进程管理中主要数据结构的设计及进程调度算法,进程控制机构,同步机构,通信机构的实施。二实验内容
要求设置PCB,进程控制原语,进程调度算法,能描述进程调度中不同进程状态之间的转换,设计一个允许n个进程并发运行的进程管理模拟系统。该系统包括有简单的进程控制,同步及通信机构,其进程调度算法可任意选择。每个进程用一个PCB表示,其内容可根据具体情况设置。各进程之间应有一定的同步关系。系统在运行过程中能显示或打印各进程的状态及有关参数的变化情况,以便观察诸进程的运行过程及系统的管理过程。
p=ready;
ready=p->link;
p->link=NULL;
p->state='R';
check();
running();
printf("\n按任一键继续......");
ch=getchar();
}
printf("\n\n进程已经完成.\n");
ch=getchar();
return 0;
{
p->link=ready;
ready=p;
}
else /*进程比较优先级,插入适当的位置中*/
{
first=ready;
second=first->link;
while(second!=NULL)
{
if((p->super)>(second->super)) /*若插入进程比当前进程优先数大,*/
int rtime;
struct pcb* link;
}*ready=NULL,*p;
typedef struct pcb PCB;
char sort() /*建立对进程进行优先级排列函数*/
{
PCB *first, *second;
int insert=0;
if((ready==NULL)||((p->super)>(ready->super))) /*优先级最大者,插入队首*/
结果分析:当调度进程中只剩下进程gui和进程xu时,这时根据进程优先级的大小,进程gui将进入运行态。
结果分析:当进程xu完成调度时,进程调度程序中直剩下进程gui了,这时进程gui将进入运行态,而当前就绪队列将为空。
结果分析:当进程gui的CPU占用时间等于所需要的执行时间时,进程gui调度完成,则这时进程调度中已经没有需要调度的进程了,则整个进程调度完成。
2、设计方案
(1)设计一个有N个进程共行的进程调度程序。每个进程由一个进程控制块PCB表示。进程控制块包括以下信息:进程名,进程优先数,进程需要运行的时间,占用CPU的时间以及进程的状态等。
(2)本调度程序用时间片轮转算法。
(3)编写程序并调试运行。
3、程序流程图
七出现的的问题及解决方案
在实验一开始,对算法的理解不是很清楚,后来通过上网查阅,稍微有所了解,不那么一无所知。
#include <conio.h>
#define getpch(type) (type*)malloc(sizeof(type))
#define NULL 0
struct pcb { /*定义进程控制块PCB */
char name[10];
char state;
int super;
int ntime;
p=getpch(PCB);
printf("\n输入进程名:");
scanf("%s",p->name);
printf("\n输入进程优先数:");
scanf("%d",&p->super);
printf("\n输入进程运行时间:");
scanf("%d",&p->ntime);
printf("\n");
p->rtime=0;p->state='w';
p->link=NULL;
sort(); /*调用sort函数*/
}
return 0;
}
int space(){源自int l=0; PCB* pr=ready;
while(pr!=NULL)
{
l++;
pr=pr->link;
}
return(l);
}
char disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/
printf("\n ****当前就绪队列状态为:\n"); /*显示就绪队列状态*/
while(pr!=NULL)
{
disp(pr);
pr=pr->link;
}
return 0;
}
char destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/
{
printf("\n进程[%s]已完成.\n",p->name);
printf("|%d\t",pr->rtime);
printf("\n");
return 0;
}
char check() /*建立进程查看函数*/
{
PCB* pr;
printf("\n ****当前正在运行的进程是:%s",p->name); /*显示当前运行进程*/
disp(p);
pr=ready;
结果分析:当进程ping执行了一个时间片之后而它已占用CPU时间已达到所需要的运行时间,则将它的优先级减1之后,再将三个进程按优先级的大小排列,从中选择优先级大的进程进入运行状态,则该次进入运行态的是进程xu。
按照这种方式一直运行下去,直到:
结果分析:当进程ping的CPU占用时间等于它需要的执行时间时,进程ping调度完成。则这时进程调度中还有两个进程:进程gui和进程xu。
}
十运行结果分析
结果分析:根据上述输入的三个进程的信息可以得到:优先级最高的是进程ping,所以最先调度进程ping,它的状态为运行态,需要执行的时间为5。而当前就绪队列状态为:进程xu的优先级比较高,处于就绪队列前面,而进程gui的优先级是三者中最低的,所以处于就绪队列的最后。而此时这两个进程的状态都为就绪态。
2、上网查阅相关程序,学习与PCB相关知识与应用。
六实验原理及设计方案
1、实验原理;
假设系统有5个进程,每个进程用一个进程控制块PCB来代表。为每个进程任意确定一个要求运行时间和到达时间。按照进程到达的先后顺序排成一个循环队列。再设一个队首指针指向第一个到达进程的首址。执行处理机调度时,开始选择队首的第一个进程运行。另外,再设一个当前运行进程的指针,指向当前正在运行的进程。进程运行一次后,估计运行时间减一,输出当前运行进程的名字进程运行一次后,以后的调度则将当前指针依此下移一个位置,指向下一个进程,即调整当前运行指针指向该进程的链接指针所指进程,以指示应运行进程。同时还应判断该进程的剩余运行时间是否为零。若不为零,则等待下一轮的运行,若该进程的剩余运行时间为零,则将该进程的状态置为完成态C,并退出循环队列。若就绪队列不空,则重复上述的(5)和(6)步骤直到所有的进程都运行完为止。在所设计的调度程序中,应包含显示或打印语句。显示或打印每次选中的进程的名称及运行一次后队列的变化情况。
}
return 0;
}
char input() /*建立进程控制块函数*/
{
int i,num;
//clrscr(); /*清屏*/
printf("\n请输入被调度的进程数目:");
scanf("%d",&num);
for(i=0;i<num;i++)
{
printf("\n进程号No.%d:\n",i);
free(p);
return 0;
}
char running() /*建立进程就绪函数(进程运行时间到,置就绪状态*/
{
(p->rtime)++;
if(p->rtime==p->ntime)
destroy(); /*调用destroy函数*/
else
{
(p->super)--;
p->state='w';
八实验小结
通过这次实验,首先加深了我对进程调度方法和功能的认识,其次让我更加深刻地理解了操作系统中进程调度中优先级调度的基本原理。优先级调度算法只是进程调度算法的一种,我们还应依照书本去学习进程调度的其它算法,以便更好地了解进程调度。
相关文档
最新文档