当前位置:文档之家› 死锁进程实验报告

死锁进程实验报告

死锁进程实验报告
死锁进程实验报告

死锁进程实验报告

一、实验目的:

观察死锁发生的现象,了解死锁发生的原因。掌握如何判断死锁发生的方法。二、实验分析:

死锁现象是操作系统各个进程竞争系统中有限的资源引起的。如果随机给进程分配资源,就可能发生死锁,

因此就应有办法检测死锁的发生。本次实验中采用“银行家算法”判断死锁的发生。

三、实验设计:

本实验设计一个3个并发进程共享3种系统资源且每种系统资源有10个的系统。系统能显示各种进程的进展情况以及检察是否有错误和死锁现象产生。

四、算法说明:

“银行家算法”。按每个进程的申请数量给各个进程试探性分配资源,看能否找个一个序列使各个进程都能正常运行结束。若能,则不会发生死锁;若不能,则会发生死锁。

五、程序使用说明:

一、本程序用于检测错误和是否会发生死锁。系统有3个进程竞争3种系统资源,每种资源有10个。

二、输入各个进程的最大需求资源数目数组max[3]和已经得到的资源数目组

[3],系统计算出各个进程还应申请的资源数目数组need[3]。

三、若进程最大需求数大于系统资源数(10),则出错;若进程申请的资源数目大于其需要的最大资源数目,则出错。

/*死锁实验源程序*/

include

include

typedef struct

{

int state;

int max[3];

int alloc[3];

int need[3];

}Pc;

int whefinish(Pc *p)

{

if((p[0].state&&p[1].state&&p[2].state)==1) return 1;

else return 0;

}

inpalloc(Pc *P,int *q1,int *q2)

{

int m,n;

for(m=0;m<3;m++)

for(n=0;n<3;n++)

{

scanf("%d",&p

[m].alloc[n])

p[m].need[n]=p[m].max[n]-p[m].alloc[n];

q1[n]=q1[n]-p[m].alloc[n];

if(p[m].need[n]>p[m].max[n])

q2[n]=0;

}

Prlcess(Pcb *p1,int *p2,int *q)

{

if(p1->need[0]need[1]need[2]

P->state=0;

p2[0]+=P->alloc[0];

p2[1]+=p->alloc[1];

p2[2]+=p->alloc[2];

*p=3;

}

}

main()

{

int i,j,n,x=0;

int state[3],avil[3]={10,10,10}

Pc pcb[3];

for(i=0;i<3;i++)

for(j=0;j<3;j++)

{

scanf("%d",Pcb[i].max[j];

if(Pcb[i].max[j]>10)

state[i]=0;

}

if((state[0]&&state[1]&&state[2])==0) printf("error!\n");

else

{

inpalloc(&Pcb,&avil[3],&state[3]);

if((state[0]&&state[1]&&state[2])==0) printf("Error!\n");

else

{

for(i=0;i<3;i++)

for(j=0;j<3;j++)

Process(&Pcb[j],&avil,&j);

if(whefinish(&Pcb)==1)

printf("all Pcbs are finishde!\n");

else printf("Deally-Embrace!\n");

}

}

}

六、实验心得:

通过这次实验使我对死锁的概念,死锁产生的原因,死锁是否会产生的判断算法,银行家算法,都有了更为深入和直观的了解以及掌握。

windows进程管理实验报告

实验报告 课程名称:操作系统 实验项目:windows进程管理 姓名: 专业:计算机科学与技术 班级: 学号:

计算机科学与技术学院 计算机系 2019 年 4 月 23 日

实验项目名称: windows进程管理 一、实验目的 1. 学习windows系统提供的线程创建、线程撤销、线程同步等系统调用; 2. 利用C++实现线程创建、线程撤销、线程同步程序; 3. 完成思考、设计与练习。 二、实验用设备仪器及材料 1. Windows 7或10, VS2010及以上版本。 三、实验内容 1 线程创建与撤销 写一个windows控制台程序(需要MFC),创建子线程,显示Hello, This is a Thread. 然后撤销该线程。 相关系统调用: 线程创建: CreateThread() 线程撤销: ExitThread() 线程终止: ExitThread(0) 线程挂起: Sleep() 关闭句柄: CloseHandle() 参考代码: ; } 运行结果如图所示。 完成以下设计题目: 1. 向线程对应的函数传递参数,如字符串“hello world!”,在线程中显示。 2. 如何创建3个线程A, B, C,并建立先后序执行关系A→B→C。

实验内容2 线程同步 完成父线程和子线程的同步。父线程创建子线程后进入阻塞状态,子线程运行完毕后再唤醒。 相关系统调用: 等待对象 WaitForSingleObject(), WaitForMultipleObjects(); 信号量对象 CreateSemaphore(), OpenSemaphore(), ReleaseSemaphore(); HANDLE WINAPI CreateSemaphore( _In_opt_ LPSECURITY_ATTRIBUTES lpSemaphoreAttributes _In_ LONG lInitialCount, _In_ LONG lMaximumCount, _In_opt_ LPCTSTR lpName ); 第一个参数:安全属性,如果为NULL则是默认安全属性 第二个参数:信号量的初始值,要>=0且<=第三个参数 第三个参数:信号量的最大值 第四个参数:信号量的名称 返回值:指向信号量的句柄,如果创建的信号量和已有的信号量重名,那么返回已经存在的信号量句柄参考代码: n"); rc=ReleaseSemaphore(hHandle1,1,NULL); err=GetLastError(); printf("Release Semaphore err=%d\n",err); if(rc==0) printf("Semaphore Release Fail.\n"); else printf("Semaphore Release Success. rc=%d\n",rc); } 编译运行,结果如图所示。

实验二(1)进程同步

实验二(2)进程同步 一、实验目的 1、生产者-消费者问题是很经典很具有代表性的进程同步问题,计算机中的很多同步问题都可抽象为生产者-消费者问题,通过本实验的练习,希望能加深学生对进程同步问题的认识与理解。 2、熟悉VC的使用,培养和提高学生的分析问题、解决问题的能力。 二、实验内容及其要求 1.实验内容 以生产者/消费者模型为依据,创建一个控制台进程,在该进程中创建n个线程模拟生产者和消费者,实现进程(线程)的同步与互斥。 2.实验要求 学习并理解生产者/消费者模型及其同步/互斥规则;设计程序,实现生产者/消费者进程(线程)的同步与互斥; 三、实验算法分析 1、实验程序的结构图(流程图); 2、数据结构及信号量定义的说明; (1) CreateThread ●功能——创建一个在调用进程的地址空间中执行的线程 ●格式 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize,

LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParamiter, DWORD dwCreationFlags, Lpdword lpThread ); ●参数说明 lpThreadAttributes——指向一个LPSECURITY_ATTRIBUTES(新线程的安全性描述符)。dwStackSize——定义原始堆栈大小。 lpStartAddress——指向使用LPTHRAED_START_ROUTINE类型定义的函数。 lpParamiter——定义一个给进程传递参数的指针。 dwCreationFlags——定义控制线程创建的附加标志。 lpThread——保存线程标志符(32位) (2) CreateMutex ●功能——创建一个命名或匿名的互斥量对象 ●格式 HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCTSTR lpName); bInitialOwner——指示当前线程是否马上拥有该互斥量(即马 ●参数说明 lpMutexAttributes——必须取值NULL。上加锁)。 lpName——互斥量名称。 (3) CreateSemaphore ●功能——创建一个命名或匿名的信号量对象 ●格式 HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName ); ●参数说明 lpSemaphoreAttributes——必须取值NULL。

simtrade实训总结

上海杉达学院 商务流程综合实训总结 单位名称:微科电子有限公司(加盖公章)姓名:陈恩娜 学院:胜祥商学院 专业:国际经济与贸易 班级: f130219 时间: 2016.11.14

工作总结历时10天的跨专业实训圆满落幕,作为国贸专业的我们参加了企业经营的模拟实训,通过这几天的实训,我也算是了解到了企业经营的基本流程和一般模式。前三天,我们基本在忙碌企业创立的事情。我们首先要做的是公司注册登记。公司注册流程共包括名称预先登记、设立登记申请书、准备申请材料、银行开户入资、验资、前置审批、报送申请材料、工商审批发照、刻制公章、开设银行帐户、办理各项登记、股东入资证明、企业机构代码、企业税务登记、企业劳动备案、社会保险登记、企业统计备案、特殊行业备案18类。我们实训时规定了公司类型为制造型企业,开始注册资金为500万元。在实训中,我们注册的公司为微科电子有限公司,地址位于上海市陆家嘴,股东为3人。申请表提交上去后,我们得到了审批,就开始了下面的企业经营规划。我们企业经营过程共分为九个相互联系又相互独立的部门。这十个部门分别为总经办、人力资源部门、物流部门、质检部门、行政部门、营销部门、生产部门、财务部门、采购部门。总经办为CEO代理,也就是我们常说的总经理,其他分别为营销总监、生产总监、物流总监、采购总监、财务总监、采购经理、人事经理、行政主管、质检经理。这九个职位分别为十一个同学完成,我作为采购部经理也参与其中。采购部的岗位职责可归纳为:依照公司生产需要及物资采购计划,全面负责公司的物料采购和供应工作;对初次进行合作的供应商进行调查了解,根据实际掌握的资料与信息做出相应的评价判定。对于符合公司要求的,方可与之开展业务往来与合作;采购工作的开展应当做到精打细算,尽力降低公司的采购成本,避免出现浪费公司资金的情况;负责对所有与公司有业务往来的供应商或供货企业进行定期的资质评价并给出明确的评价等级。针对不同的评价等级给出相应的处理意见;完成公司领导布置的其它各项工作。各岗位要各司其职,填写经营流程表,有序的完成一年的经营。

进程管理实验报告

实验2过程管理实验报告学生号姓名班级电气工程系过程、过程控制块等基本原理过程的含义:过程是程序运行过程中对数据集的处理,以及由独立单元对系统资源的分配和调度。在不同的数据集上运行程序,甚至在同一数据集上运行多个程序,是一个不同的过程。(2)程序状态:一般来说,一个程序必须有三种基本状态:就绪、执行和阻塞。然而,在许多系统中,过程的状态变化可以更好地描述,并且增加了两种状态:新状态和终端状态。1)就绪状态,当一个进程被分配了除处理器(CPU)以外的所有必要资源时,只要获得了处理器,进程就可以立即执行。此时,进程状态称为就绪状态。在系统中,多个进程可以同时处于就绪状态。通常,这些就绪进程被安排在一个或多个队列中,这些队列称为就绪队列。2)一旦处于就绪状态的进程得到处理器,它就可以运行了。进程的状态称为执行状态。在单处理器系统中,只有一个进程在执行。在多处理器系统中,可能有多个进程在执行中。3)阻塞状态由于某些事件(如请求输入和输出、额外空间等),执行进程被挂起。这称为阻塞状态,也称为等待状态。通常,处于阻塞状态的进程被调度为-?这个队列称为阻塞队列。4)新状态当一个新进程刚刚建立并且还没有放入就绪队列中时,它被称为新状态。5)终止状态是

什么时候-?进程已正常或异常终止,操作系统已将其从系统队列中删除,但尚未取消。这就是所谓的终结状态。(3)过程控制块是过程实体的重要组成部分,是操作系统中最重要的记录数据。控制块PCB记录操作系统描述过程和控制过程操作所需的所有信息。通过PCB,一个不能独立运行的程序可以成为一个可以独立运行的基本单元,并且可以同时执行一个进程。换句话说,在进程的整个生命周期中,操作系统通过进程PCB管理和控制并发进程。过程控制块是系统用于过程控制的数据结构。系统根据进程的PCB来检测进程是否存在。因此,进程控制块是进程存在的唯一标志。当系统创建一个进程时,它需要为它创建一个PCB;当进程结束时,系统回收其PCB,进程结束。过程控制块的内容过程控制块主要包括以下四个方面的信息。过程标识信息过程标识用于对过程进行标识,通常有外部标识和内部标识。外部标识符由流程的创建者命名。通常是一串字母和数字。当用户访问进程时使用。外部标识符很容易记住。内部标识符是为了方便系统而设置的。操作系统为每个进程分配一个唯一的整数作为内部标识符。通常是进程的序列号。描述性信息(process scheduling message)描述性信息是与流程调度相关的一些有关流程状态的信息,包括以下几个方面。流程状态:表

os实验二 进程同步

实验二:进程同步 一.实验目的 (1)掌握基本的同步算法,理解生产者消费者模型。 (2)学习使用Windows XP中基本的同步对象,掌握相关API的使用方法。 (3)了解Windows XP中多线程的并发执行机制,实现进程的同步与互斥。 二.实验属性 该实验为设计性实验。 三.实验仪器设备及器材 普通PC386以上微机 四.实验要求 本实验要求2学时完成。 本实验要求完成如下任务: (1)以生产者/消费者模型为依据,在Windows XP环境下创建一个控制台进程,在该进程中创建n个线程模拟生产者和消费者,实现进程(线程)的同步与互斥。 学习并理解生产者/消费者模型及其同步/互斥规则; 学习了解Windows同步对象及其特性; 熟悉实验环境,掌握相关API的使用方法; 设计程序,实现生产者/消费者进程(线程)的同步与互斥。 (2)扩展任务2选1: 1>利用信号量机制,写出不会发生死锁的解决哲学家进程(线程)。 最多允许4个同时进餐;奇:先左后右偶:先右后左。 2>利用信号量机制,写出不会发生死锁的读者写者进程(线程)。五:实验内容: 利用至多同时允许4位哲学家同时去拿左边筷子的方法解决进餐死锁的问题。 实验详细设计:流程图:

程序首先创建一个线程参数结构体 struct ThreadInfo { int serial; double delay; }; 设置最多同时去拿筷子的人数#define MAX_BUFFER_NUM 4 设置一个信号量数组用来表示五位哲学家的左右边的筷子HANDLE chopstick [5]; 设置同时去拿筷子的人数的信号量HANDLE People; 设置一个互斥信号量HANDLE h_mutex; 在main()函数中,首先创建信号量: for (int i=0;i<5;i++) { chopstick[i]=CreateSemaphore(NULL,n_Buffer_or_Critical,n_Buffer_or_Criti cal,"chopstick"+i); } People=CreateSemaphore(NULL,MAX_BUFFER_NUM,MAX_BUFFER _NUM,"People");

进程管理实验报告

进程的控制 1 .实验目的 通过进程的创建、撤消和运行加深对进程概念和进程并发执行的理解,明确进程与程序之间的区别。 【答:进程概念和程序概念最大的不同之处在于: (1)进程是动态的,而程序是静态的。 (2)进程有一定的生命期,而程序是指令的集合,本身无“运动”的含义。没有建立进程的程序不能作为1个独立单位得到操作系统的认可。 (3)1个程序可以对应多个进程,但1个进程只能对应1个程序。进程和程序的关系犹如演出和剧本的关系。 (4)进程和程序的组成不同。从静态角度看,进程由程序、数据和进程控制块(PCB)三部分组成。而程序是一组有序的指令集合。】2 .实验内容 (1) 了解系统调用fork()、execvp()和wait()的功能和实现过程。 (2) 编写一段程序,使用系统调用fork()来创建两个子进程,并由父进程重复显示字符串“parent:”和自己的标识数,而子进程则重复显示字符串“child:”和自己的标识数。 (3) 编写一段程序,使用系统调用fork()来创建一个子进程。子进程通过系统调用execvp()更换自己的执行代码,新的代码显示“new

program.”。而父进程则调用wait()等待子进程结束,并在子进程结束后显示子进程的标识符,然后正常结束。 3 .实验步骤 (1)gedit创建进程1.c (2)使用gcc 1.c -o 1编译并./1运行程序1.c #include #include #include #include void mian(){ int id; if(fork()==0) {printf(“child id is %d\n”,getpid()); } else if(fork()==0) {printf(“child2 id %d\n”,getpid()); } else {id=wait(); printf(“parent id is %d\n”,getpid()); }

山东大学操作系统实验报告4进程同步实验

山东大学操作系统实验报告4进程同步实验

计算机科学与技术学院实验报告 实验题目:实验四、进程同步实验学号: 日期:20120409 班级:计基地12 姓名: 实验目的: 加深对并发协作进程同步与互斥概念的理解,观察和体验并发进程同步与互斥 操作的效果,分析与研究经典进程同步与互斥问题的实际解决方案。了解 Linux 系统中 IPC 进程同步工具的用法,练习并发协作进程的同步与互斥操作的编程与调试技术。 实验内容: 抽烟者问题。假设一个系统中有三个抽烟者进程,每个抽烟者不断地卷烟并抽烟。抽烟者卷起并抽掉一颗烟需要有三种材料:烟草、纸和胶水。一个抽烟者有烟草,一个有纸,另一个有胶水。系统中还有两个供应者进程,它们无限地供应所有三种材料,但每次仅轮流提供三种材料中的两种。得到缺失的两种材料的抽烟者在卷起并抽掉一颗烟后会发信号通知供应者,让它继续提供另外的两种材料。这一过程重复进行。请用以上介绍的 IPC 同步机制编程,实现该问题要求的功能。 硬件环境: 处理器:Intel? Core?i3-2350M CPU @ 2.30GHz ×4 图形:Intel? Sandybridge Mobile x86/MMX/SSE2 内存:4G 操作系统:32位 磁盘:20.1 GB 软件环境: ubuntu13.04 实验步骤: (1)新建定义了producer和consumer共用的IPC函数原型和变量的ipc.h文件。

(2)新建ipc.c文件,编写producer和consumer 共用的IPC的具体相应函数。 (3)新建Producer文件,首先定义producer 的一些行为,利用系统调用,建立共享内存区域,设定其长度并获取共享内存的首地址。然后设定生产者互斥与同步的信号灯,并为他们设置相应的初值。当有生产者进程在运行而其他生产者请求时,相应的信号灯就会阻止他,当共享内存区域已满时,信号等也会提示生产者不能再往共享内存中放入内容。 (4)新建Consumer文件,定义consumer的一些行为,利用系统调用来创建共享内存区域,并设定他的长度并获取共享内存的首地址。然后设定消费者互斥与同步的信号灯,并为他们设置相应的初值。当有消费进程在运行而其他消费者请求时,相应的信号灯就会阻止它,当共享内存区域已空时,信号等也会提示生产者不能再从共享内存中取出相应的内容。 运行的消费者应该与相应的生产者对应起来,只有这样运行结果才会正确。

simtrade外贸实务实训报告

宁波职业技术学院 外贸实务 II - 提高 实训报告 指导老师:江彬 班级:国贸3141 学生姓名:肖思洁 学号: 1426263133 日期: 2016-04-25

课程名称:外贸实务II-提高

1 实训目的及要求 1.1 1.2 2 实训内容及步骤(包含简要的实训步骤流程) 2.1 本人所扮演的角色 2.2 贸易资料及实训步骤 2.2.1 2.2.2 2.2.3 2.2.4 3 实训结果(包括实训项目的完成情况,代表性邮件,单据,程序或图表、结论陈述、核算表数据记录及分析等) 3.1 3.1.1 3.1.2 3.1.3 3.2 4 实训中遇到的问题及其解决方法 5 实训总结(包括心得体会、对SimTrade系统的评价、对自己实训效果的评价如实训收获不足及实训改进意见等) 6 实训评价

外贸实训报告 外贸实务实训体会总结,这次是项目过程的完成让我感觉很深刻。短短的32学时已经结束,静下心来回想这次操作模拟学习真是感受颇深。我们知道动手操作是大学教育中一个极为重要的实践性环节,通过实习,可以使我们在实践中接触与本专业相关的一些实际工作,培养和锻炼我们综合运用所学的基础理论、基本技能和专业知识,去独立分析和解决实际问题的能力,把理论和实践结合起来,提高我们的实际动手能力,为将来我们毕业后走上工作岗位打下一定的基础。通过这段时间的学习,从无知到认知,到深入了解,渐渐地我喜欢上这个专业,让我深刻的体会到学习的过程是最美的,在整个实习过程中,我每天都有很多的新的体会,新的想法。 回顾我的实习生活,感触是很深的,收获也是丰硕的。可以模拟出口商与非洲、中东等地方的外国商人做生意,他们在我公司下订单,我们再把订单下到厂里,从中赚取差额,或者作为进口商与出口商讨价还价,去除运费保险费等来赚取利益。当然对工厂的基本流程也有一定的了解。这次的实习经历我对外贸这个专业有了更加理性的认识和更深刻的体会。在这次是学习中,我学到了很多过去两年没有体会到的东西,这不仅仅只是上课模拟,也是一次对真实工作流程经历。 对实践的看法: 在操作过程中,根据本门课程的内容、特点,通过走出去、请进来等方式,精心组织方案。通过听、看、做使一些看起来繁杂的专业知识很快被我们理解和掌握。只有将理论联系实际,教学与实际相结合,才是培养我们能力的一种有效形式。 出口商+进口商+工厂,一共写了78封邮件。一共发布了8封广告和信息。 查了B2B里的多数产品信息。 银行汇率:欧元大多汇率为8.6402,美元大多为6.1463等。保险费:一切险(ALL RISKS)为0.8%,战争险(W AR RISKS)为0.08% 保险费计算方式为 (1)按CIF进口时:保险金额=CIF货价×1.1 (2)按CFR进口时:保险金额=CFR货价×1.1 / (1 - 1.1 ×r),其中r为保险费率,请在"淘金网"的"保险费"页面查找,将所投险别的保险费率相加即可。 (3)按FOB进口时:保险金额=(FOB货价+ 海运费)×1.1 / (1 - 1.1 ×r),其中FOB 货价就是合同金额,海运费请在装船通知中查找,由出口商根据配舱通知填写,如果出口商填写错误,请其查看配舱通知。 实训的基本流程: 第一周完成了进口商,出口商,工厂,进口、出口地银行的基本资料。然后熟悉了下系统的基本轮廓,如B2B里面可以查询写什么,市场,海关等在哪个位置。根据老师的知道,试着去发广告与写邮件。 第二周确定角色,开始寻找有利信息,搜索信息,同业务伙伴建合作关系。 我先进行成本、费用、利润等的核算,若有盈利则进一步磋商合作,若亏损就跟对方进行讨价还价。过程为询盘——发盘——还盘——接受。 第三周之后进入交易准备阶段——交易磋商阶段——签订合同(T/T+FOB)与接收信用证(L/C+CIF)——履行合同阶段。 签订合同之后进行合同履行阶段。 首先作为出口商,与进口商进行磋商商定后确定的价格,之后跟工厂进行合作并进一步签订SALES CONFIRMATON。等工厂交货物发过来后,与工厂的业务就能完成。

操作系统实验报告--实验一--进程管理

实验一进程管理 一、目的 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。 二、实验内容及要求 1、设计进程控制块PCB的结构(PCB结构通常包括以下信息:进程名(进程ID)、进程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删)。为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定。 2、系统资源(r1…r w),共有w类,每类数目为r1…r w。随机产生n进程P i(id,s(j,k),t),0<=i<=n,0<=j<=m,0<=k<=dt为总运行时间,在运行过程中,会随机申请新的资源。 3、每个进程可有三个状态(即就绪状态W、运行状态R、等待或阻塞状态B),并假设初始状态为就绪状态。建立进程就绪队列。 4、编制进程调度算法:时间片轮转调度算法 本程序用该算法对n个进程进行调度,进程每执行一次,CPU时间片数加1,进程还需要的时间片数减1。在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。 三、实验环境 操作系统环境:Windows系统。 编程语言:C#。 四、实验思路和设计 1、程序流程图

2、主要程序代码 //PCB结构体 struct pcb { public int id; //进程ID public int ra; //所需资源A的数量 public int rb; //所需资源B的数量 public int rc; //所需资源C的数量 public int ntime; //所需的时间片个数 public int rtime; //已经运行的时间片个数 public char state; //进程状态,W(等待)、R(运行)、B(阻塞) //public int next; } ArrayList hready = new ArrayList(); ArrayList hblock = new ArrayList(); Random random = new Random(); //ArrayList p = new ArrayList(); int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, time1Inteval;//m为要模拟的进程个数,n为初始化进程个数 //r为可随机产生的进程数(r=m-n) //a,b,c分别为A,B,C三类资源的总量 //i为进城计数,i=1…n //h为运行的时间片次数,time1Inteval为时间片大小(毫秒) //对进程进行初始化,建立就绪数组、阻塞数组。 public void input()//对进程进行初始化,建立就绪队列、阻塞队列 { m = int.Parse(textBox4.Text); n = int.Parse(textBox5.Text); a = int.Parse(textBox6.Text); b = int.Parse(textBox7.Text); c = int.Parse(textBox8.Text); a1 = a; b1 = b; c1 = c; r = m - n; time1Inteval = int.Parse(textBox9.Text); timer1.Interval = time1Inteval; for (i = 1; i <= n; i++) { pcb jincheng = new pcb(); jincheng.id = i; jincheng.ra = (random.Next(a) + 1); jincheng.rb = (random.Next(b) + 1); jincheng.rc = (random.Next(c) + 1); jincheng.ntime = (random.Next(1, 5)); jincheng.rtime = 0;

实验二进程同步

实验二进程同步演示 一、实验目的 ?深入掌握进程同步机制——信号量的应用; ?掌握Windows编程中信号量机制的使用方法; ?可进行简单的信号量应用编程。 二、实验工具 Windows系统+ VC++ 6.0 三、实验内容 1、复习教材上信号量机制的定义与应用,复习经典进程同步问题——生产者消费者问题及其同步方案; 2、验证后附的参考代码pc.cpp(生产者消费者问题),掌握Windows系统中信号量的定义与使用方法; 注意: (1)代码中生产者和消费者所做的工作用过程Producer和Consumer描述,并通过创建线程的方法创建3个生产者线程和1个消费者线程,具体创建方法:CreateThread(NULL,0,Producer,NULL,0,&producerID[i]);其中第3个参数就是指定该线程所做的工作为过程Producer; (2)问题中设置了三个信号量g_hMutex(用于互斥访问临界区buffer)、 g_hFullSemaphore、g_hEmptySemaphore(用于控制同步的资源信号量),先声明,再定义,最后使用。互斥信号量和资源信号量的定义方法不同: g_hMutex = CreateMutex(NULL,FALSE,NULL); 互斥信号量最开始没有指定针对那个资源g_hFullSemaphore = CreateSemaphore(NULL,SIZE_OF_BUFFER-1,SIZE_OF_BUFFER-1,NULL); 其中第2和3个参数为信号量的初始值和最大值 信号量的使用方法:WaitForSingleObject为信号量的P操作,每对一个信号量执行该操作,则信号量值减1,并判断减1后值是否仍大于等于0,如是则该操作成功,否则进程阻塞;ReleaseSemaphore为信号量的V操作,每执行一次将该信号量的值加1,并起到唤醒作用。如: WaitForSingleObject(g_hFullSemaphore,INFINITE); … ReleaseSemaphore(g_hEmptySemaphore,1,NULL);

Simtrade实验报告

国贸专业生产实习报告 随着国际贸易的日益完善,以及中国在国际贸易的地位的不断上升,我们作为未来社会的国贸人员,为了加强社会竞争力,应培养较强的国贸工作的操作能力。于是,在结束了大三的课程后,学校给了我们一个很好的实习锻炼机会,让我们模拟国际贸易实务操作,从而从中掌握国际贸易流程。 一、实习目的 ①熟悉外贸实务的具体操作流程; ②了解、巩固与深化已经学过的理论和方法; ③增强对外贸实务的感性认识; ④提高发现问题、分析问题以及解决问题的能力。 二、实习方法: 通过进入SimTrade模拟平台,进行上机模拟操作 Simtrade外贸实习平台是一个十分成功的国际贸易模拟软件,它在很大程度上解决了学生实习难的问题。学生在网上进行国际货物买卖实务的具体操作,能很快掌握进出口的成本核算、询盘、发盘与还盘等各种基本技巧;熟悉国际贸易的物流、资金流与业务流的运作方式;切身体会到国际贸易中不同当事人面临的具体工作与他们之间的互动关系;学会外贸公司利用各种方式控制成本以达到利润最大化的思路;认识供求平衡、竞争等宏观经济现象,并且能够合理地加以利用。老师通过在网站发布新闻等行为对国际贸易环境实施宏观调控,使学生在实习中充分发挥主观能动性,真正理解并吸收课堂中所学到的知识,为将来走上工作岗位打下良好基础。 三、实习遇到的问题 1、预算错误 这是开始接触Simtrade时所最容易忽略的问题。虽然老师曾多次提醒,做贸易前一定要计算好了一切费用,选好贸易术语,最后再签定合同。但我们经常做出口商的在还没有调查进口商所在地市场的情况下就先去工厂进货了。如果工厂角色也没有做好预算,草草就签订了合同,那么可能出口商和工厂都赚不到钱。在最后交易完成后,我们经常大叫“啊,这个运费怎么比我的货物数量还多啊?”“这个保险费怎么这么贵,我要赔钱了!”

操作系统-进程管理实验报告

实验一进程管理 1.实验目的: (1)加深对进程概念的理解,明确进程和程序的区别; (2)进一步认识并发执行的实质; (3)分析进程争用资源的现象,学习解决进程互斥的方法; (4)了解Linux系统中进程通信的基本原理。 2.实验预备内容 (1)阅读Linux的sched.h源码文件,加深对进程管理概念的理解; (2)阅读Linux的fork()源码文件,分析进程的创建过程。 3.实验内容 (1)进程的创建: 编写一段程序,使用系统调用fork() 创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。 源代码如下: #include #include #include #include #include int main(int argc,char* argv[]) { pid_t pid1,pid2; pid1 = fork(); if(pid1<0){ fprintf(stderr,"childprocess1 failed"); exit(-1); } else if(pid1 == 0){ printf("b\n"); } 1/11

else{ pid2 = fork(); if(pid2<0){ fprintf(stderr,"childprocess1 failed"); exit(-1); } else if(pid2 == 0){ printf("c\n"); } else{ printf("a\n"); sleep(2); exit(0); } } return 0; } 结果如下: 分析原因: pid=fork(); 操作系统创建一个新的进程(子进程),并且在进程表中相应为它建立一个新的表项。新进程和原有进程的可执行程序是同一个程序;上下文和数据,绝大部分就是原进程(父进程)的拷贝,但它们是两个相互独立的进程!因此,这三个进程哪个先执行,哪个后执行,完全取决于操作系统的调度,没有固定的顺序。 (2)进程的控制 修改已经编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。 将父进程的输出改为father process completed 2/11

进程的同步实验报告

操作系统 实验报告 哈尔滨工程大学 计算机科学与技术学院

一、实验概述 1. 实验名称 进程的同步 2. 实验目的 ⑴使用EOS的信号量,编程解决生产者 消费者问题,理解进程同步的意义。 ⑵调试跟踪EOS信号量的工作过程,理解进程同步的原理。 ⑶修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。 3. 实验类型 验证+设计 4. 实验内容 ⑴准备实验 ⑵使用EOS的信号量解决生产者-消费者问题 ⑶调试EOS信号量的工作过程 ①创建信号量 ②等待释放信号量 ③等待信号量(不阻塞) ④释放信号量(不唤醒) ⑤等待信号量(阻塞) ⑥释放信号量(唤醒) ⑷修改EOS的信号量算法 二、实验环境 WindowsXP + EOS集成实验环境 三、实验过程 1. 设计思路和流程图

图4-1.整体试验流程图

图4-2.Main 函数流程图、生产者消费、消费者流程图 2. 算法实现 3. 需要解决的问题及解答 (1). 思考在ps/semaphore.c 文件内的PsWaitForSemaphore 和PsReleaseSemaphore 函数中,为什么要使用原子操作?

答:在执行等待信号量和释放信号量的时候,是不允许cpu响应外部中断的,如果此时cpu响应了外部中断,会产生不可预料的结果,无法正常完成原子操作。 (2). 绘制ps/semaphore.c文件内PsWaitForSemaphore和PsReleaseSemaphore函数的流程图。 (3).P143生产者在生产了13号产品后本来要继续生产14号产品,可此时生产者为什么必须等待消费者消费了4号产品后,才能生产14号产品呢?生产者和消费者是怎样使用同步对象来实现该同步过程的呢? 答:这是因为临界资源的限制。临界资源就像产品仓库,只有“产品仓库”空闲生产者才能生产东西,有权向里面放东西。所以它必须等到消费者,取走产品,“产品空间”(临界资源)空闲时,才继续生产14号产品。 (4). 根据本实验3.3.2节中设置断点和调试的方法,自己设计一个类似的调试方案来验证消费者线程在消费24号产品时会被阻塞,直到生产者线程生产了24号产品后,消费者线程才被唤醒并继续执行的过程。 答:可以按照下面的步骤进行调试 (1) 删除所有的断点。 (2) 按F5启动调试。OS Lab会首先弹出一个调试异常对话框。 (3) 在调试异常对话框中选择“是”,调试会中断。 (4) 在Consumer函数中等待Full信号量的代码行(第173行)WaitForSingleObject(FullSemaphoreHandle, INFINITE); 添加一个断点。 (5) 在“断点”窗口(按Alt+F9打开)中此断点的名称上点击右键。 (6) 在弹出的快捷菜单中选择“条件”。 (7) 在“断点条件”对话框(按F1获得帮助)的表达式编辑框中,输入表达式“i == 24”。 (8) 点击“断点条件”对话框中的“确定”按钮。 (9) 按F5继续调试。只有当消费者线程尝试消费24号产品时才会在该条件断点处中断。 4. 主要数据结构、实现代码及其说明 修改PsWaitForSemaphore函数 if (Semaphore->Count>0){ Semaphore->Count--; flag=STATUS_SUCCESS; }//如果信号量大于零,说明尚有资源,可以为线程分配 else flag=PspWait(&Semaphore->WaitListHead, Milliseconds); KeEnableInterrupts(IntState); // 原子操作完成,恢复中断。 return flag; }//否则,说明资源数量不够,不能再为线程分配资源,因此要使线程等待 修改PsReleaseSemaphore函数 if (Semaphore->Count + ReleaseCount > Semaphore->MaximumCount) {

进程同步实验报告

实验三进程的同步 一、实验目的 1、了解进程同步和互斥的概念及实现方法; 2、更深一步的了解fork()的系统调用方式。 二、实验内容 1、预习操作系统进程同步的概念及实现方法。 2、编写一段源程序,用系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。程序的输出是什么?分析原因。 3、阅读模拟火车站售票系统和实现进程的管道通信源代码,查阅有关进程创建、进程互斥、进程同步的系统功能调用或API,简要解释例程中用到的系统功能或API的用法,并编辑、编译、运行程序,记录程序的运行结果,尝试给出合理的解释。 4、(选做)修改问题2的代码,使得父子按顺序显示字符“a”;“b”、“c”编辑、编译、运行。记录程序运行结果。 三、设计思想 1、程序框架 (1)创建两个子进程:(2)售票系统:

(3)管道通信: 先创建子进程,然后对内容加锁,将输出语句存入缓存,并让子进程自己进入睡眠,等待别的进程将其唤醒,最后解锁;第二个子进程也执行这样的过程。父进程等待子进程后读内容并输出。 (4)修改程序(1):在子进程的输出语句前加上sleep()语句,即等待父进程执行完以后再输出。 2、用到的文件系统调用函数 (1)创建两个子进程:fork() (2)售票系统:DWORD WINAPI Fun1Proc(LPVOID lpPartameter); CreateThread(NULL,0,Fun1Proc,NULL,0,NULL); CloseHandle(hThread1); (HANDLE)CreateMutex(NULL,FALSE,NULL); Sleep(4000)(sleep调用进程进入睡眠状态(封锁), 直到被唤醒); WaitForSingleObject(hMutex,INFINITE); ReleaseMutex(hMutex); (3)管道通信:pipe(fd),fd: int fd[2],其中: fd[0] 、fd[1]文件描述符(读、写); lockf( fd,function,byte)(fd: 文件描述符;function: 1: 锁定 0:解锁;byte: 锁定的字节数,0: 从当前位置到文件尾); write(fd,buf,byte)、read(fd,buf,byte) (fd: 文件描述符;buf : 信息传送的源(目标)地址;byte: 传送的字节数); sleep(5); exit(0); read(fd[0],s,50) (4)修改程序(1):fork(); sleep(); 四、调试过程 1、测试数据设计 (1)创建两个子进程:

simtrade实验报告

国际经济与贸易专业 外贸交易模拟实验 实验报告 学号__ _ 姓名__ _____ 班级_______ 指导老师___ _______ 实验地点

一、试验目的 在Simtrade这个虚拟贸易平台中,通过扮演不同的角色,熟练掌握各种业务技巧,了解到国际贸易的物流、资金流和业务流的运作方式,增强感性认识和社会适应能力,进一步巩固、深化已学过的理论知识,提高综合运用所学知识发现问题、解决问题的能力。 二、实习时间 本次实习时间为2011-03-01至2011-03-28,共计四周 三、试验小结 本次试验运用交易方式:①L/C+CIF②L/C+CFR③T/T+CIF④T/T+CFR⑤ D/P+FOB⑥T/T+FOB 涉及到的交易产品:①洋菇罐头( 柄及碎片)CANNED STEMS AND PIECES MUSHROOMS②甜玉米罐头CANNED SWEET CORN③荔枝罐头CANNED LITCHIS④芒果罐头CANNED MANGOES⑤名牌手提包FAMOUS-BRAND HANDBAG⑥香味蜡烛SCENTED CANDLE 四、试验遇到的问题及其解决方法 1.预算与实际支出相差较大 ?没有换算成本币 在CONTRACT111中,我的进口预算表和是实际发生额都有2+汇率的差异,原因就在于我公司注册资金为欧元,而样本中为美元,而我当初为了省时省力省脑,就全部依样画弧,没有转换成欧元导致。 ?集装箱计算的问题 在CONTRACT4442中,我出口商出口预算表海运费在计算过程中集装箱数为4,而实际确实12个集装箱,结果海运费预算和实际相差甚多,之后导致FOB 价格、利润等一系列数字有出入。 ?粗心大意

进程管理_实验报告一流程图

实验一 课程名称:操作系统 课程类型:必修 实验项目名称:进程管理 实验题目:短作业优先算法、动态可剥夺优先数算法和基本循环轮转算法。 一、实验目的 进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实验要求学生独立的用高级语言编写和调试一个简单的模拟进程调度的程序。通过本实验,加深学生理解有关进程控制块、进程队列的概念,并体会和了解短作业优先、优先数和时间片轮转调度算法的具体实施办法。 二、实验要求及实验环境 (1)设计一个有n 个进程的进程调度程序(具体个数可由键盘输入)。每一个进程用一个进程控制块PCB 来代表。PCB 中应包含下列信息:进程名、进程优先数、进程的状态、进程需要运行的时间及利用CPU运行的时间等。进程的个数、各进程的优先数、轮转时间片数以及进程运行需要地时间可由

键盘输入。 (2)调度程序应包含2~3 种不同的调度算法,运行时可任选一种。 (3)每个进程处于运行Run、就绪ready 和完成Finish 三种状态之一,假定初始状态都为就绪状态ready。(也可没有Finish状态,可以在设计程序时实现处以Finish状态的进程删掉)。 (4)系统能显示各进程状态和参数的变化情况。(5)动态可剥夺优先数算法是:在创建进程时给定一个初始的优先数,当进程获得一次cpu后其优先数就减少1,如果就绪队列中有优先级更高的将剥夺运行中的进程。 三、设计思想 (本程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关系) 1.程序流程图 (见下图) 2.逻辑设计 使用链表表示就绪队列,每个元素包括进程名、进程优先数、进程的状态、进程需要运行的时间及利用CPU运行的时间等信息。 该结构需支持以下操作:取头节点,在表尾插入节

实验二进程同步实验

实验二进程同步 一、实验目的: 掌握基本的同步算法,理解经典进程同步问题的本质;学习使用Linux的进程同步机制,掌握相关API的使用方法;能利用信号量机制,采用多种同步算法实现不会发生死锁的哲学家进餐程序。 二、实验平台: 虚拟机:VMWare9以上 操作系统:以上 编辑器:Gedit | Vim 编译器:Gcc 三、实验内容: (1)以哲学家进餐模型为依据,在Linux控制台环境下创建5个进程,用semget函数创建一个信号量集(5个信号量,初值为1),模拟哲学家的思考和进餐行为:每一位哲学家饥饿时,先拿起左手筷子,再拿起右手筷子;筷子是临界资源,为每一支筷子定义1个互斥信号量;想拿到筷子需要先对信号量做P操作,使用完释放筷子对信号量做V操作。 伪代码描述: semaphore chopstick[5]={1,1,1,1,1}; ?第i位哲学家的活动可描述为: do{ printf("%d is thinking\n",i); printf("%d is hungry\n",i); wait(chopstick[i]); 当哲学家的左、右两只筷子均可用时,才允许他拿起筷子进餐;b.至多只允许有4位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐;c.规定奇数号哲学家先拿起他左手的筷子,然后再拿起他右手的筷子,而偶数号哲学家则先拿起他右手的筷子,然后再拿起他左手的筷子。方法a在示例程序中给出,请用方法b和c写出不会发生死锁的哲学家进餐程序。 (3)设计程序,实现生产者/消费者进程(线程)的同步与互斥。在该程序中创建4个进程(或线程)模拟生产者和消费者,实现进程(线程)的同步与互斥。

相关主题
文本预览
相关文档 最新文档