计算机系统实验报告(哲学家就餐死锁)

计算机系统实验报告(哲学家就餐死锁)
计算机系统实验报告(哲学家就餐死锁)

目录

第一章总体设计 (3)

1.程序结构设计第一章总体设计 (3)

2. 程序设计组成框图………………………………………………………….

错误!未定义书签。

3. 流程图……………………………………………………………………………

错误!未定义书签。

第二章详细设计………………………………………………………………………………….错误!未定义书签。

1.功能说明 (5)

2. 函数功能 (6)

3.入口及出口参数说明 (6)

4.函数调用关系描述 (7)

第三章调试与测试 (8)

第四章关键原程序清单和执行结果……………………………错误!未定义书签。

1.源程序…………………………………………………………………………….

错误!未定义书签。

2.运行结果 (9)

第五章参考资料 (9)

第一章总体设计

1. 程序结构设计

程序需要六个线程,主线程用于显示主菜单,接收用户的功能选择;五个哲学家线程用于模拟哲学家的活动,即不停地思考、饥饿、进食。相邻的两个哲学家线程需要共享他们中间的同一根筷子,因此对每一根筷子的使用要互斥,用互斥体数组h_mutex_chopsticks来实现。主线程创建五个哲学家线程后要等待所有哲学家结束,用线程句柄数组h_thread来表示五个线程,主线程通过等待这五个线程句柄来实现同步。

该程序共有7个函数,这些函数可以分成4组。各组包含的函数及其功能如图3-1所示。

2.程序设计组成框图

3.流程图

第二章详细设计

1.功能说明

系统通过简单的控制台界面,运行后在屏幕上显示功能菜单,列出该程序具有的功能,供用户选择,用户选择功能后应该转到相应的处理程序。程序应该包括以下功能:

(1)演示死锁现象;

(2)通过资源按序分配法防止死锁;

(3)通过资源预分配法防止死锁;

(4)退出。

1.功能说明

(1)演示死锁现象:演示死锁情况的哲学家线程函数,每个哲学家都得到了左边的筷子,又都在等待右边的筷子

(2)通过资源按序分配法防止死锁:每个哲学家先申请左右两根筷子中编号小的筷子,再申请编号大的筷子。

(3)通过资源预分配法防止死锁:让每个哲学家同时申请左右两根筷子

(4)退出:退出整个系统。

2. 函数功能

3.入口及出口参数说明

(1)死锁入口:deadlock_philosopher()

(2)资源预分配法入口:pre_allocation_philosopher()

(3)资源按序分配法入口:ordered_allocation_philosopher()

4.函数调用关系描述

(1)当运行死锁函数时,需要调用死锁初始化函数deadlock() (2)当运行资源预分配函数时,需要调用资源预分配初始化函pre_allocation()

(3)当运行资源按序分配函数时,需要调用资源按序分配初始化函数ordered_allocation()

第三章调试与测试

死锁进行了测试,但是每次运行结果并不相同,不一定能马上出现死锁现象

开始的时候程序有死锁现象,通过两种方法解决了死锁问题,程序虽然能防止死锁,但是可能存在饿死现象,可以通过进程优先级,来改变进程顺序。

2.运行结果

3.实验体会

通过本次实验了解了什么是线程,如何建立线程,还有互斥信号。

1.线程库

与线程有关的函数库构成了一个完整的系列,绝大多数函数的名字是以“pthread_”开头的,为了使用这些函数库,必须在程序中包含头文件pthread.h,链接这些线程函数库时要使用编译器命令的“-lpthread”选项。

2.创建线程函数

int pthread_create(pthread_t *thread,pthread_attr_t

*attr,void*(*start_routine)(void*),void *arg);

3.结束线程函数

int pthread_exit(void *retval);

4.归并线程函数

int pthread_join(pthread_t th,void **thread_return);

5.初始化线程属性函数

int pthread_attr_init(pthread_attr_t *attr);

6.取消线程函数

int pthread_cancel(pthread_t thread);

7. 信号量函数

在Linux中常用信号量实现线程同步,信号量函数的名字都以”sem_ ”开头,为了使用这些函数,必须在程序中包含头文件semphore.h。线程里使用的基本信号量函数有四个。

8.初始化互斥信号量函数

int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutexattr_t *mutexattr);

9.给临界区加锁函数

int pthread_mutex_lock(pthread_mutex_t *mutex);

10.给临界区开锁函数

int pthread_mutex_unlock(pthread_mutex_t *mutex);

11.删除互斥信号量函数

int pthread_mutex_destroy(pthread_mutex_t *mutex);

第五章参考资料

[1]左万历周长林彭涛.计算机操作系统教程.高等教育出版

社.2010-7-1

[2]丁振凡.Java语言实用教程.北京邮电大学出版社.2010-6

微机系统实验报告

西安电子科技大学 实验报告

实验一汇编语言编程实验 一、实验目的 (1)掌握汇编语言的编程方法 (2)掌握 DOS 功能调用的使用方法 (3)掌握汇编语言程序的调试运行过程 二、实验设备 PC 机一台。 三、实验内容 1. 将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示。 2. 在屏幕上显示自己的学号姓名信息。 3. 循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到输入”Q”或“q”时结束。 4. 自主设计输入显示信息,完成编程与调试,演示实验结果。 四、实验源码 DA TA SEGMENT DISCHA DB'WangHan 14030188004',0AH,0DH,'$' TAB DB' ',0AH,0DH,'$' BLANK DB' $' DA TA ENDS STACK SEGMENT STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA,SS:STACK START: MOV AX,SEG DISCHA MOV DS,AX MOV DX,OFFSET DISCHA MOV AH,09H INT 21H NEXT: MOV AH,01H INT 21H CMP AL,'Q' JE ENDSS

CMP AL,'q' JE ENDSS MOV BL,AL MOV AX,SEG BLANK MOV DS,AX MOV DX,OFFSET BLANK MOV AH,09H INT 21H MOV BH,0AH MOV DL,BL MOV CL,04H SHR DL,CL CMP DL,BH JNL Q3 JMP Q2 Q1: ADD DL,07H Q2: ADD DL,30H MOV AH,02H INT 21H MOV DL,BL MOV DH,0FH AND DL,DH CMP DL,BH JNL Q3 JMP Q4 Q3: ADD DL,07H Q4: ADD DL,30H MOV AH,02H INT 21H MOV AX,SEG TAB MOV DS,AX MOV DX,OFFSET TAB MOV AH,09H INT 21H MOV CX,0009H LOOP NEXT

华科_计算机系统实验报告

课程实验报告课程名称:计算机系统基础 专业班级: 学号: 姓名: 指导教师: 报告日期:年月日 计算机科学与技术学院

目录 实验1: (1) 实验2: (7) 实验3: (24) 实验总结 (34)

实验1:数据表示 1.1 实验概述 实验目的:更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。 实验目标:加深对数据二进制编码表示的了解。 实验要求:使用有限类型和数量的运算操作实现一组给定功能的函数。 实验语言:c。 实验环境:linux 1.2 实验内容 需要完成bits.c中下列函数功能,具体分为三大类:位操作、补码运算和浮点数操作。 1)位操作 表1列出了bits.c中一组操作和测试位组的函数。其中,“级别”栏指出各函数的难度等级(对应于该函数的实验分值),“功能”栏给出函数应实现的输出(即功能),“约束条件”栏指出你的函数实现必须满足的编码规则(具体请查看bits.c中相应函数注释),“最多操作符数量”指出你的函数实现中允许使用的操作符的最大数量。 你也可参考tests.c中对应的测试函数来了解所需实现的功能,但是注意这些测试函数并不满足目标函数必须遵循的编码约束条件,只能用做关于目标函数正确行为的参考。 表1 位操作题目列表

2)补码运算 表2列出了bits.c中一组使用整数的补码表示的函数。可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。 表2 补码运算题目列表 3)浮点数操作 表3列出了bits.c中一组浮点数二进制表示的操作函数。可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。注意float_abs的输入参数和返回结果(以及float_f2i函数的输入参数)均为unsigned int类型,但应作为单精度浮点数解释其32 bit二进制表示对应的值。 表3 浮点数操作题目列表

哲学家就餐问题报告

操作系统 实验报告 实验名称:哲学家就餐问题 班级:信卓1201班 姓名:钟远维 学号:U201213500 日期:2014年10月30日

一、实验目的 1、熟练使用VC6.0编译环境,调试并正确运行程序。 2、理解哲学家就餐问题中出现的问题,进而掌握死锁的必要条件。 3、理解源程序中产生和防止死锁的算法,及相关窗口操作。 4、熟悉哲学家就餐问题流程并写出其伪代码 二、实验内容 有五个哲学家围坐在一圆桌旁(如图1),桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子。每个哲学家的行为是思考,感到饥饿,然后吃通心粉。为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子。 图1 图2 三、实验要求 1、程序需有防止死锁发生采取的措施; 2、程序要有产生死锁的分配方式;

四、实验算法实现 1、不发生死锁的方式 由源码gChopstickState[iLeftChopstick] = iPhilosopher; gChopstickState[iRightChopstick] = iPhilosopher; 知基本思路是要么一下子占用两支筷子要么不占用,先确定两只筷子均没被占用才获取筷子,这样就打破了死锁的必要条件。 伪代码如下; var mutexleftchopstick,mutexrightchopstick; beging: resting; waiting; p(mutexleftchopstick); //先改变左手筷子信号量 p(mutexrightchopstick); //马上改变右手筷子信号量 GetResource(leftchopstick,rightchopstick); //同时占用左右手筷子 eating; v(mutexleftchopstick); //释放资源 v(mutexrightchopstick); end 2、发生死锁的方式 基本思路是有筷子即占用,看似效率很高,但因为资源有限,且不可抢占,很容易发生死锁。 源码理解: gDinerState[iPhilosopher] = WAITING; //wants chopsticks result = WaitForSingleObject(gchopStick[iLeftChopstick], INFINITE); gChopstickState[iLeftChopstick] = iPhilosopher; //得到左手筷子 Sleep(P_DELAY/4); //休眠状态 gDinerState[iPhilosopher] = WAITING; //继续等待另一只手筷子 result = WaitForSingleObject(gchopStick[iRightChopstick], INFINITE); gChopstickState[iRightChopstick] = iPhilosopher; //直到等到右手筷子 伪码书写: var mutexleftchopstick,mutexrightchopstick; beging:

大学计算机基础实验报告总结

竭诚为您提供优质文档/双击可除大学计算机基础实验报告总结 篇一:大学计算机基础实验体会 大学计算机基础实验体会 大学计算机基础这门课是一门基础应用类课程,目的是让我们了解计算机硬件组成,简单的运行原理,以及各类常用软件的使用。 这个周末,我们完成了基础实验6、7、8。本来以为会 很简单的几个实验却花费了我们大量的时间,名且发现了很多问题,我才知道这门课程并不像我们想象的那么简单单学到的知识恰恰和难度成正比,这三个实验着实让我受益匪浅。 这次实验作业中,主要的问题都出在word文档的应用中。我们普遍都用惯了老式的word2000或者word20XX,所 以对word20XX不熟悉,于是造成了很多麻烦,尤其是添加 目录这个新功能,摸索了好久依然毫无头绪。最后不得已只能拿出教材自习阅读,同时上网找了很多详细的讲解,最后才完成了实验6。 在做powerpoint时候,可能是因为平时做过很多的原

因,并没有遇到什么很明显的问题和困难, 但是为了能把ppT 做得精美和详细,也花费了不少的时间。 最后一项是excel的应用。我以前对它的接触不多,所以对其应用也是最不熟练最不明白的。但是通过自主的对其学习,尤其是对教材的阅读,使我能运用一些比较基本的功能进行表格制作。同时也了解了很多以前不知道简便功能。可以说,动过这次试验,我学到的最多的知识,就是excel 的应用了。 虽然这次试验作业已经完成,但是它给我的启发让我思考至今。首先,本已经在课堂上学习过的内容,为什么在这次的试验中我会遇到那么多的问题,这就告诉我以后不要轻视这门课程,同时也是再告诉我不要轻视任何一门我正在学习的课程,不论是简单还是难,他都肯定有让我学习和实践的必要性,并且,在进行试验之前一定要吃透课本上的知识和本次试验的要求。其次,这次试验让我学会了怎么去解决遇到的困难。在以后的生活中不可能事事都有人引领,所以就需要我们自己去摸索解决方法,自己去学习其所需要的知识。最后,在这次试验中我遇到了很多的困难,但是我没有放弃而是一直努力去克服,去解决问题。这让我学会了遇到困难不要退缩,而是主动地去思考,去解决。 简而言之,这次的试验作业着实让我受益匪浅,不光光

操作系统哲学家问题

操作系统哲学家问题实验报告

实验报告三 实验名称:一、调试验证“有限缓冲”经典同步问题 二、利用Java同步解决“哲学家进餐”问题 日期:2015-11-5 班级:13级计科学号: 姓名: 一、实验目的 1.了解信号量的使用 2.掌握正确使用同步机制的方法 3.实现生产者消费者进程的互斥与同步 4.实现java同步解决“哲学家进餐”问题 二、实验内容 1.调试验证“有限缓冲”经典同步问题 2.利用Java同步解决“哲学家进餐”问题 三、项目要求与分析 1.“有限缓冲”经典同步问题 (1)问题描述 有一群生产者进程在生产产品,此产品提供给消费者去消费。为使生产者和消 费者进程能并发执行,在它们之间设置一 个具有n个缓冲池,生产者进程可将它所 生产的产品放入一个缓冲池中,消费者进 程可从一个缓冲区取得一个产品消费。 (2)问题分析 设两个同步信号量:一个说明空缓冲区的数目,用empty表示,初值为有界缓

冲区的大小N,另一个说明已用缓冲区的 数目,用full表示,初值为0。由于在 执行生产活动和消费活动中要对有界缓 冲区进行操作。有界缓冲区是一个临界资 源,必须互斥使用,所以另外还需要设置 一个互斥信号量mutex,其初值为1。2.“哲学家进餐”问题 (1)问题描述 假如所有的哲学家都同时拿起左侧筷子,看到右侧筷子不可用,又都放下左 侧筷子,等一会儿,又同时拿起左侧筷子,如此这般,永远重复。对于这种情况,即 所有的程序都在无限制地运行,但是都无 法得到任何进展,即出现饿死,所有的哲 学家都吃不上饭。 规定在拿起左侧的筷子后,先检查右面的筷子是否可用。如果不可用,则放下左 侧的筷子,等一段时间后再重复整个过 程。 (2)问题分析 当出现以下情形,在某一瞬间,所有的哲学家都同时启用这个算法,拿起左侧

计算机科学与技术实验报告

哈尔滨工程大学 《程序设计基础》实验报告 基础实践二 姓名:王明班级: 学号: 实验时间: 2017 年 5 月8 日 哈尔滨工程大学计算机基础课程教学中心 实验五 实验题目1: 输入两个整数数组,每个数组有5个整数,将两者合并并排序输出。 设计思想:定义两个5个元素的数组,一个10个元素的数组,数据类型为整型,通过for循环输入前两个数组的值,并依次存入第三个数组中。另外编写排序函数,在主函数中调用对第三个数组中的元素排序并输出。 实验代码及注释: void f1(int *a, int i, int j) { int m, n, c; int k; m = i; n = j;

do { while (a[m]k&&n>i) n--; if (m <= n) { c = a[m]; a[m] = a[n]; a[n] = c; m+=1; n-=1; } } while (m <= n); if (mi) f1(a, i, n); } int main() { int a1[5],a2[5],c[10]; printf("请输入两个数组,每组五个整数:\n"); for(int i=0;i<5;i++) scanf("%d %d",&a1[i],&a2[i]); for(int i=0;i<5;i++) {

c[i+5]=a2[i]; } f1(c,0,9); printf("排序后为:\n"); for(int i=0;i<10;i++) printf("%d ",c[i]); putchar('\n'); system("pause"); return 0; } 验证与结论: 程序运行正常,结果输出正确。 总结与心得体会: 本实验用到了循环结构对数组输入,这是对多个数据同时输入的一种非常方便的方法。利用指针进行排序,由于形参和实参在数据传递上有单向性,在进行元素交换类数组函数的编写时,需要借用指针。本实验将其中一个主要功能编写为函数,使代码模块化,利于阅读查错。 实验题目2: 某公司生成5种产品,每周记录生产的每种产品数量和销售数量。在每个月月末,公司将对其生产规划进行评估。该评估需要以下一个或多个信息: (a)每周生产和销售的数量; (b)所有生产产品的总量;

计算机操作系统 实验报告

操作系统实验报告 学院:计算机与通信工程学院 专业:计算机科学与技术 班级: 学号: 姓名: 指导教师: 成绩: 2014年 1 月 1 日

实验一线程的状态和转换(5分) 1 实验目的和要求 目的:熟悉线程的状态及其转换,理解线程状态转换与线程调度的关系。 要求: (1)跟踪调试EOS线程在各种状态间的转换过程,分析EOS中线程状态及其转换的相关源代码; (2)修改EOS的源代码,为线程增加挂起状态。 2 完成的实验内容 2.1 EOS线程状态转换过程的跟踪与源代码分析 (分析EOS中线程状态及其转换的核心源代码,说明EOS定义的线程状态以及状态转换的实现方法;给出在本部分实验过程中完成的主要工作,包括调试、跟踪与思考等) 1.EOS 准备了一个控制台命令“loop ”,这个命令的命令函数是 ke/sysproc.c 文件中的ConsoleCmdLoop 函数(第797行,在此函数中使用 LoopThreadFunction 函数(第755 行)创建了一个优先级为 8 的线程(后面简称为“loop 线程”),该线程会在控制台中不停的(死循环)输出该线程的ID和执行计数,执行计数会不停的增长以表示该线程在不停的运行。loop命令执行的效果可以参见下图: 2. 线程由阻塞状态进入就绪状态 (1)在虚拟机窗口中按下一次空格键。 (2)此时EOS会在PspUnwaitThread函数中的断点处中断。在“调试”菜单中选择“快速监视”,在快速监视对话框的表达式编辑框中输入表达式“*Thread”,然后点击“重新计算”按钮,即可查看线程控制块(TCB)中的信息。其中State域的值为3(Waiting),双向链表项StateListEntry的Next和Prev指针的值都不为0,说明这个线程还处于阻塞状态,并在某个同步对象的等待队列中;StartAddr域的值为IopConsoleDispatchThread,说明这个线程就是控制台派遣线程。 (3)关闭快速监视对话框,激活“调用堆栈”窗口。根据当前的调用堆栈,可以看到是由键盘中断服务程序(KdbIsr)进入的。当按下空格键后,就会发生键盘中断,从而触发键盘中断服务程序。在该服务程序的最后中会唤醒控制台派遣线程,将键盘事件派遣到活动的控制台。 (4)在“调用堆栈”窗口中双击PspWakeThread函数对应的堆栈项。可以看到在此函数中连续调用了PspUnwaitThread函数和PspReadyThread函数,从而使处于阻塞状态的控制台派遣线程进入就绪状态。 (5)在“调用堆栈”窗口中双击PspUnwaitThread函数对应的堆栈项,先来看看此函数是如何改变线程状态的。按F10单步调试直到此函数的最后,然后再从快速监视对

哲学家吃饭问题实验报告 操作系统

目录1.设计题目与要求 (2) 设计目的 设计要求 2.总体设计思想与相关知识 (2) 总体设计思想 问题描述 解决方案 3.数据结构、流程图 (2) 数据结构 流程图 4.源代码 (3) 5.运行结果 (6) 6.结果分析 (7) 7.总结及心得体会 (7) 1.设计题目与要求 设计目的 掌握进程同步问题的解决思路及方法,熟练使用Windows操作系统提供的信号量机制解决各种进程同步问题。

设计要求 设有五个哲学家,共用一张放有五把椅子的餐桌,每人坐在一把椅子上,桌子上 有五个碗和五只筷子,每人两边各放一只筷子。哲学家们是交替思考和进餐,饥饿时便试图取其左右最靠近他的筷子。条件: (1) 只有拿到两只筷子时,哲学家才能吃饭。 (2) 如果筷子已被别人拿走,则必须等别人吃完之后才能拿到筷子。 (3) 任意一个哲学家在自己未拿到两只筷子吃饭前,不会放下手中拿到的筷子。 2.总体设计思想与相关知识 总体设计思想 哲学家的生活就是思考和吃饭,即思考,饿了就餐,再思考,循环往复。要求是:每一个哲学家只有在拿到位于他左右的筷子后,才能够就餐;哲学家只能先拿左边的筷子,再去拿右边的筷子,而不能同时去抓他两边的筷子,也不能从其他哲学家手中抢夺筷子;哲学家每次就餐后必须放下他手中的两把筷子后恢复思考,不能强抓住餐具不放。 设计一个程序,能够显示当前各哲学家的状态和桌上餐具的使用情况,并能无死锁的推算出下一状态各哲学家的状态和桌上餐具的使用情况。即设计一个能安排哲学家正常生活的程序。 问题描述 可能出现死锁问题,因为当五个哲学家都饥饿时,都拿着一支筷子,这样就可能五个哲学家都用不上餐。 解决方案 最多允许4个哲学家同时坐在桌子周围。 给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷子,偶数号的哲学家则反之。 为了避免死锁,把哲学家分为三种状态,思考,饥饿,进食,仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子,并且一次拿到两只筷子,否则不拿。3.数据结构及流程图 程序中定义一个哲学家类,包含两个私有对象和四个公有对象。 myid对象:报讯哲学家的编号。 mystate对象:用于保存当前该哲学家的状态,

计算机组装与维护实训报告总结

计算机组装与维护实训报告 总结 计算机组装与维护实训报告总结 WIN98安全设置(1).对系统进行安全设置的基本思路公用微机的操一般分为三大类:第一类是系统管理员,系统管理员拥有对系统的绝对控制权,一般来说没有必要对系统管理员的权限进行限制;第二类是普通用户,普通用户使用计算机完成各种工作,因此必须获得一定的权限,不过也要防止普通用户超越权限或破坏系统;第三类为非法入侵者,入侵者根本无权使用计算机,对入侵者一定要将系统的一切功能全部屏蔽。按照这个思路,首先必须对Windows 98的正常操作人员(包括超级用户)进行设置,将操作人员名单全部输入到系统中,然后分别对他们的权限进行适当设置,这样既保证了他们的安全,又禁止他们越权操作,最后便是采取措施,防止非法用户“入侵”,确保系统安全。(2).微机操作人员的设置Windows 95系统是一个多用户操作系统,但它在用户管理方面却十分混乱,非法入侵者甚至可以在启动时通过密码确认框直接添加新的用户,这对控制系统带来了很大的不便。不过Windows 98对此进行了改进,它提供了用户名的选择性登录功能,所以可事先将所有用户全部添加到系统中,然后由系统在启动时将这些用户列表显示出来,不同用户从中选择自己的用户名并输入相应的密码之后即

可以自己的名义启动系统,而非法用户则无法通过密码确认框直接创建新用户,他们只能通过按下“取消”按钮或Esc键来进入系统。这样,机器便能明确地区分正常用户(包括超级用户和普通用户)与非法入侵者通过登录框选择用户名并输入密码进入的是正常用户,使用“取消”按钮进入的是非法入侵者,可以据此分别对他们的权限进行限制。须要说明的是,Windows 98在默认情况下仍然采用与Windows 95相同的“老式”用户名登录方式,我们想要使用用户名选择性登录方式则应执行如下步骤: 下面1~4步骤主要用于在Windows 98中设置用户名及密码,若用户已经设置过,则可跳过这些步骤,直接从第5步开始。1.双击Windows 98“控制面板”中的“密码”图标,打开“密码属性”设置框。2.复选“用户可自定义首选项及桌面设置,登录时,Windows将自动启用个人设置”选项。3.根据需要决定是否选择将“开始”菜单添加到用户的自定义设置中(一般应选择“是”),然后单击“确定”按钮,接着根据屏幕提示设置适当的用户密码。4.单击“确定”按钮退出设置框。重新启动计算机,此时系统就会弹出一个常规性的密码设置窗口,可输入刚设置的用户名及密码,按正常方式启动Windows 98。5.启动“控制面板”,双击“网络”图标,打开“网络”设置框。128910 ... 下一页 计算机组装与维护实训报告总结

微机汇编语言编程系统实验报告

微机系统实验报告 实验一汇编语言编程实验 一、实验目的 (1)掌握汇编语言的编程方法 (2)掌握DOS功能调用的使用方法 (3)掌握汇编语言程序的调试运行过程 二、实验设备 PC机一台。 三、实验内容 (1)将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示。 (2) 在屏幕上显示自己的学号姓名信息。 (3)循环从键盘读入字符并回显在屏幕上,然后显示

出对应字符的ASCII码,直到输入“Q”或“q”时结束。 (4)自主设计输入显示信息,完成编程与调试,演示实验结果。 考核方式:完成实验内容(1)(2)(3)通过, 完成实验内容(4)优秀。 实验中使用的DOS功能调用:INT 21H 表3-1-1 显示实验中可使用DOS功能调用

四、实验步骤 (1)运行QTHPCI软件,根据实验内容编写程序,参考程序流程如图3-1-1所示。 (2)使用“项目”菜单中的“编译”或“编译连接”命令对实验程序进行编译、连接。

(3)“调试”菜单中的“进行调试”命令进入Debug调试,观察调试过程中数据传输指令执行后各寄存器及数据区的内容。按F9连续运行。 (4)更改数据区的数据,考察程序的正确性。 五、实验程序 DATA SEGMENT BUFFER DB '03121370konglingling:',0AH,0DH,'$' BUFFER2 DB 'aAbBcC','$' BUFFER3 DB 0AH,0DH,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX mov ah,09h mov DX,OFFSET BUFFER int 21h MOV SI,OFFSET BUFFER2

操作系统实验报告哲学家就餐

线程同步 操作系统实验报告 实验目的: 1.理解和掌握Linux线程控制的系统调用命令。 2.理解和掌握Linux线程同步的系统调用命令。 实验内容: 1.Linux线程机制pthread 相关系统调用命令: pthread_create,pthread_join,pthread_mutex_lock, pthread_mutex_unlock,enter_region,leave_region等。2. 多线程编程使用线程同步机制实现Dinning Philosophers算法。实验代码: #include<> #include<> #include<> #include<> #include<> #define phi_num 5 #define think_time 2 #define eat_time 1 #define left (phi_id+phi_num-1)%phi_num #define right (phi_id+1)%phi_num enum { think , hungry , eat } phi_state[phi_num]; pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t state[phi_num]={PTHREAD_MUTEX_INITIALIZER}; void Do_think(int phi_id){ printf(" philosopher %d is thinking now !\n",phi_id); sleep(think_time); }

哲学家就餐问题实验报告

南昌大学实验报告 学生姓名:倪焕学号:8000114018 专业班级:软件工程141班 实验类型:■验证□综合□设计□创新实验日期:2016.5.24 实验成绩: 一、实验项目名称 哲学家就餐问题 二、实验目的 利用PV操作解决哲学家就餐问题 三、软硬件环境 软件:Visual Studio2010 硬件:PC机一台 四、实验内容结果 //哲学家就餐问题的解法 #include #include #include #include #include using namespace std; //命名空间std内定义的所有标识符都有效 const unsigned int PHILOSOPHER_NUM=5; //哲学家数目 const char THINKING=1; /*标记当前哲学家的状态,1表示等待,2表示得到饥饿,3表示正在吃饭*/ const char HUNGRY=2; const char DINING=3; HANDLE hPhilosopher[5]; //定义数组存放哲学家 /*HANDLE(句柄)是windows操作系统中的一个概念。指的是一个核心对象在某一个进程中的唯一索引*/ HANDLE semaphore[PHILOSOPHER_NUM]; // semaphore 用来表示筷子是否可用 HANDLE mutex; // Mutex用来控制安全输出 DWORD WINAPI philosopherProc( LPVOID lpParameter) //返回DWORD(32位数据)的API 函数philosopherProc { int myid; //哲学家id char idStr[128];

华中科技大学计算机操作系统实验报告

实验目的 掌握Linux操作系统的使用方法; 了解Linux系统内核代码结构; 掌握实例操作系统的实现方法。 一、实验要求 1、掌握Linux操作系统的使用方法,包括键盘命令、系统调用;掌握在Linux 下的编程环境。 ●编一个C程序,其内容为实现文件拷贝的功能; ●编一个C程序,其内容为分窗口同时显示三个并发进程的运行结 果。要求用到Linux下的图形库。 2、掌握系统调用的实现过程,通过编译内核方法,增加一个新的系统调用。 另编写一个应用程序,调用新增加的系统调用。 实现的功能是:文件拷贝; 3、掌握增加设备驱动程序的方法。通过模块方法,增加一个新的设备驱动 程序,其功能可以简单。 实现字符设备的驱动; 4、了解和掌握/proc文件系统的特点和使用方法 ●了解/proc文件的特点和使用方法 ●监控系统状态,显示系统中若干部件使用情况 ●用图形界面实现系统监控状态。 5、设计并实现一个模拟的文件系统(选作) 二、实验一 1、编一个C程序,其内容为实现文件拷贝的功能 要实现文件拷贝功能,主要用到的函数是fopen、fputc、fgetc。 主要用到的头文件: #include #include 设计思路:由scanf函数获取2个文件名,根据其文件名和路径分别打开该2个文件,设置一个循环,从源文件复制1个字节到目 的文件,直到源文件指针到文件尾,最后关闭2个文件。 在可能出错的地方需要加上相应的报错代码,并输出错误信息,以方便调试。 理清楚设计思路后,首先搭建linux下编程环境。 安装gcc:sudo apt-get install build-essential 安装codeblocks:sudo apt-get install codeblocks 在集成开发环境Code::Blocks IDE下根据需求写出相应的源代码copy.c,将程序编译并生成exe可执行文件。 然后手动创建一个测试文件test.txt ,运行copy.exe文件,并输入

操作系统哲学家就餐问题实验报告

#include <> #include <> #include #include #include <> using namespace std; bool tools[5]; //全局变量,用餐工具 CRITICAL_SECTION cs; //信号量, 在线程中使用,临界区 class Philosopher { private: int number; int status; /*标记当前哲学家的状态,0表示正在等待 (即处于饥饿状态),1表示得到两支筷子正在吃饭,2表示正在思考*/ public: Philosopher(int num=0): status(2), number(num) { } const int find() { return number; } const int getinfo() { return status; } void Change() ; //状态改变函数 void dead_lock();

///////// void Philosopher::dead_lock() { EnterCriticalSection (&cs) ; //进入临界区 string s; if(status==1) { tools[number%5]=true; // tools[(number-1)%5]=true; status=2; } else if(status==2) { status=0; //tools[(number-1)%5]=false; //tools[(number-1)%5]=true; } else if(status==0) { tools[number%5]=false; tools[(number-1)%5]=false; status=1; } LeaveCriticalSection (&cs) ; // cout<<"*********"; } ///////// void Philosopher::Change() { EnterCriticalSection (&cs) ; //进入临界区 if(status==1) //正在进餐 { tools[number%5]=true; //放下左手工具 tools[(number-1)%5]=true; //放下右手工具 status=2; //改变状态为思考 } else if(status==2) //思考中 { status=0; //改变状态为等待 } else if(status==0) //等待中 { if(tools[number%5]&&tools[(number-1)%5]) //左右手两边工具均为空闲状态 { tools[number%5]=false; //拿起左手工具 tools[(number-1)%5]=false; //拿起右手工具 status=1;

计算机实训报告心得体会

计算机实训报告心得体会 计算机实训室建设所涉及的规范及技术繁杂,为提高建设质量,必须在计算机实训室建设前期做好计算机实训室工程设计。 下面是带来的计算机实训报告心得体会范文,欢迎大家阅读。 这个暑假,学校安排了我们三、四班学生到四川省国信安信 息安全培训基地进行实训,虽然时间不是很长,仅仅为期五天, 但是我受益匪浅,这次实训,让我对网络工程及信息安全有了更 深的了解,对此次实训,颇有体会。 本次实习主要任务是学会局域网的设计与应用,网络互连技术,以及网络应用中如何保证信息的安全,通过理论与实践相结合,进一步加深我们的理论知识。要想在短暂的实训时间内,尽 可能能多的学一些东西,这就需要我们跟老师有很好的沟通,加 深彼此的了解。刚到培训基地,老师并不了解我们的工作和学习 能力,不清楚我们会做那些工作,所以跟老师进行沟通是很必要的。通过沟通了解,老师对我们有了大体了解,便有针对性的教 我们一些网络信息安全方面的知识。 “纸上得来终觉浅,绝知此事要躬行!”在短暂的实习过程中,让我深深的感觉到自己在实际运用中的专业知识的匮乏。让 我们真正领悟到“学无止境”的含义。在实训的课程中,老师给 我们讲解了如何进行网络拓扑结构的设计,如何进行网络的部线,路由器及交换机的配置,防火墙和网络检测器IDS的安装和配置

等等。在进行实训的过程中,我真正学到了计算机教科书上所没 有或者真正用到了课本上的知识,这样,既巩固了旧知识,又掌 握了新知识。此外,老师还特地带我们去参国家软件孵化器科技园。参观中我懂得了真实生活中,网络的部线原理和方式以及从 硬件上是如何实现网络的互联和保证信息的安全的。 此外,在此次实训的过程中,给我感受最深的就是我们分组 完成一个网络系统的构建策划,包括项目的需求分析,网络拓扑 图的制作以及网络搭建方案的撰写。在这些过程中,我不仅知道 了整个项目的竟标和项目开发的流程,而且让我深深的体会到一 个团队中的各成员合作的重要性,要善于团队合作,善于利用别 人的智慧,这才是大智慧。靠单一的力量是很难完成一个大项目的,在进行团队合作的时候,还要考虑技术上的规范性和统一性,这样才可能在进行组合的时候能得到更完美的组合。 这次实训让我学到的东西太多,使我受益非浅,它让我知道 了工作上的辛苦,让我知道工作并不像在学校里学习一样轻松。 不过,虽然辛苦了点,但能让我学到不同的东西,我心里还是高 兴的。人非生而知之,要学得知识,一靠学习,二靠实践。没有 实践,学习就是无源之水,无本之木。以上就是我在成都的进行 实训的心得和感受。不到半年的时间就将步入社会的我们,面临 是继续深造,还是就业的压力,我想我们更应该把握住最后的一 段时间,充实、完善自我,争取做一名出色的大学生! 计算机实训在不知不觉中就结束了,我感觉自己还有好多东

微机系统的组装与配置实验报告

微机系统的组装与配置实验报告

计算机学院综合性实验 实验报告 课程名称微机与外设维护维修技术 实验学期 2015 至 2016 学年第 2 学期 学生所在院系计算机学院 年级 2013 专业班级计 学生姓名学号 2013 任课教师 实验成绩 计算机学院制

一、硬件拆卸部分 1、主板的型号及功能、性能说明: 主板是电脑系统中最大的一块电路板,主板上布满了各种电子元件、插槽、接口等。它为CPU、内存和各种功能(声、图、通信、网络、TV、SCSI等)卡提供安装插座(槽);为各种磁、光存储设备、打印机和扫描仪等I/O设备以及数码相机、摄像头、调制解调器等多媒体和通讯设备提供接口,实际上电脑通过主板将CPU等各种器件和外部设备有机地结合起来形成一套完整的系统。 主板的标准结构是根据主板上各元器件的布局排列方式、主板的尺寸大小及形状、所使用的电源规格等。 目前市场上PC的主板主要有ATX、Micro ATX和BTX等结构。 2、CPU的型号及功能、性能说明: 中央处理器(CPU)是一块超大规模集成电路芯片,它是整个计算机系统的核心。CPU主要包括运算器、控制器和寄存器三个部件。这三个部件相互协调,使他们可以进行分析、判断、运算并控制计算机各部分协调工作。其中运算器主要完成各种算术运算和逻辑运算;而控制器是指挥中心,控制运算器及其他部件工作,它能对指令进行分析,作出相应的控制;寄存器用来暂时存放运算中的中间结果或数据。 CPU的性能指标: 字长或位数; 主频、外频、FSB频率; 高速缓冲存储器; 指令扩展技术; CPU的制造工艺; CPU的核心代号; 超线程技术; 多核心技术; 虚拟化技术; 可信执行技术。 3、硬盘的型号及功能、性能说明: 硬盘主要是有固定面板、控制电路板、磁头组、盘面组、主轴电机、接口、及其附件组成。其中磁头组和盘片组件是构成硬盘的核心,它们被封装在硬盘的净化腔体内,包括浮动磁头组件、磁头驱动机构、盘片组、主轴驱动装置级读写控制电路几个部分。 温切斯特硬盘的特点:磁盘旋转,磁头径向运动,磁头悬浮在磁片上方,用磁存储信息。 磁盘技术: RAID技术(廉价磁盘冗余阵列),使用磁盘驱动器的方法,是将一组磁盘驱动器用某种逻辑方式联系起来,作为逻辑上的一个大容量磁盘驱动器来使用。(RAID0、RAID1、RAID0+1、RAID3、RAID5模式);

实验报告计算机操作系统-windows7

实验报告计算机操作系统-Windows 7 班级 178 学号姓名 【实验目的】 1. 掌握Windows 7的基本操作; 2. 熟练掌握资源管理器、文件与文件夹的管理方法 3. Windows 7控制面板的使用 【实验内容和步骤】 一.Windows7基本操作和文件管理 完成实践教程第18页中的实验并回答下列问题。 1.如何新建文件或文件夹 在桌面空白处单击鼠标右键,选择“新建”--“文件夹”,键入新文件夹的名称,然后按 ENTER 键。 2.如何选定多个相邻文件或文件夹如何选定多个不相邻文件和文件夹如何选中全部文件和文件夹 选定多个相邻文件的操作是:单击第一个文件,然后按住Shift 键,再单击最后一个文件 Shift 键,就是Ctrl 键上面那个。 选定多个不相邻文件操作是:单击第一个文件,然后按住Ctrl 键的同时,单击其他待选定的文件 Ctrl 键,就是键盘最左下角那个。 如何选中全部文件和文件夹:ctrl+A 3.试列举对文件/文件夹进行复制和移动的方法

第一种方法:可以用鼠标右键进行操作。 第二种:可用ctrl+c 进行复制;ctrl+x 进行移动(也就是剪切)ctrl+v进行粘贴 4.如何对已删除的文件进行“还原” 如果没清空回收站,在回收站里还原就行。 5.如何对按照修改日期搜索文件或文件夹 我的电脑右键选搜索,打开搜索界面,在搜索选项里按日期,选中并输入日期 6.如何“隐藏”文件/文件夹如何显示被“隐藏”起来的文件/文件夹图标 把想隐藏文件的文件夹或文件,打开文件夹属性,隐藏打钩或去掉即可以选择这个文件是否隐藏或显示打开任意的文件夹的工具选项卡的文件夹选项——查看选项卡——隐藏文件和文件夹上面有2个选择,选择显示隐藏文件夹即可看到隐藏文件 二.Windows7系统设置 完成实践教程第23页中的实验并回答下列问题。 1.如何改变桌面的背景、屏幕的分辨率并设置屏幕保护程序。 开始—控制面板—外观和个性化—个性化,然后进行桌面背景、窗口颜色、屏幕保护调整。

计算机实验报告总结范文

计算机实验报告总结范文 一、实习目的 通过理论联系实际,巩固所学的知识,提高处理实际问题的能力,为顺利毕业进行做好充分的准备,并为自己能顺利与社会环境接轨做准备。通过这次实习,使我们进一步理解和领会所学的基本理论,了解计算机技术和信息管理技术的发展及应用,较为系统地掌握计算机应用技能和信息管理技能,把所学知识与解决实际问题相联系,能够利用计算机处理工作中的各种信息,培养我们发现问题、分析问题和解决问题的能力,从而提高我们从事实际工作的能力。 通过理论联系实际,巩固所学的知识,提高处理实际问题的能力,了解设计专题的主要内容,使学生能够了解社会、学校的需要,在实习单位领导的帮助,对自己今后所从事的事业有一个实习了解的过程。为毕业设计的顺利进行做好充分的准备,并为自己能顺利与社会环境接轨做准备。 实习对于锻炼学生能力,了解社会、熟悉民生,看清自己的定位是很有帮助的。而从就业角度来看,拥有丰富实习经历的学生在就业时的优势也是比较明显的。 二、实习意义 生产实习是一个极为重要的实践性教学环节。通过实习,使

学生在社会实践中接触与本专业相关的实际工作,增强感性认识,培养和锻炼学生综合运用所学的基础理论、基本技能和专业知识,去独立分析和解决实际问题的能力,把理论和实践结合起来,提高实践动手能力,为学生毕业后走上工作岗位打下一定的基础;同时可以检验教学效果,为进一步提高教育教学质量,培养合格人才积累经验。计算机是一门对实践要求较高的学科,通过专业实习,使学生能熟悉有关计算机专业的各个领域,使学生毕业后能胜任与本专业相关的工作。 大学四年学习了很多,经历了很多,得到的是学习能力、处事能力和一些专业知识。可面对社会,我们经验太少,思想单纯!毕业实习,给了我们一个了解社会,增加经验,熟悉工作单位的机会。锻炼自己的动手能力,将学习的理论知识运用于实践当中,反过来还能检验书本上理论的正确性,有利于融会贯通。同时,也能开拓视野,完善自己的知识结构,达到锻炼能力的目的。一切都是为了让实践者对本专业知识形成一个客观,理性的认识,从而不与社会现实相脱节。此外通过理论联系实际,巩固所学的知识,提高处理实际问题的能力,了解设计专题的主要内容,为毕业设计的顺利进行做好充分的准备,并为自己能顺利与社会环境接轨做准备。 三、实习单位调研情况

计算机控制系统实验报告3

江南大学物联网工程学院 《计算机控制系统》 实验报告 实验名称实验三积分分离PID控制仿真实验 实验时间2017.11.2 专业自动化班级1503 姓名汪涛学号1070415333 指导教师陈珺实验成绩

一、实验目的与要求 1、学会PID 三个系数的选取。 2、了解积分分离值的模拟实验选取。 3、掌握SIMULINK 的仿真方法。 二、仿真软硬件环境 PC 机,MATLAB R2012b 。 三、实验原理 如图,R 为输入,C 为输出。计算机不断采人误差E ,进行积分判别与PID 运算,然后判结果是否溢出(若溢出则取最大或最小值),最后将控制量输送给系统。 四、PID 算法 PID 控制规律为:? ++ =t D I p dt t de T dt t e T t e K t U 0 ]) ()(1)([)( 其中:e(t)为控制器输入;u(t)为控制器输出。对上式进行零初始条件下的拉氏变换,得PID 控制器的传递函数: )1 1()()()(S T S T K S E S U S D D I P ++== 五、整定调节参数与系统开环增益 用临界比例带法整定参数。设采样周期为50ms ,先去掉微分与积分作用,只保留比例控制,增大K P ,直至系统等幅振荡,记下振荡周期T u 和振荡时所用比例值K pu ,按以下公式整定参数(比例、积分、微分调节): T=0.167Tu ,K p =0.27/K pu ,T I =0.4T u ,T D =0.22T u

六、SIMULINK仿真结构图 七、自定义函数设计 实现积分分离功能的自定义函数设计(文件名jffl): function y=jffl(x)y=x; EI=5(或2);else y=0;if abs(x)<=EI end

相关文档
最新文档