用于验证一个常见的冲突问题。在这个问题中,有5个哲学家坐在一个圆桌上。食物摆在桌子中间,桌子上总共有5把叉子,每个哲学家的左右手各有一把。
因为吃饭时,哲学家需要同时使用左手和右手的叉子,所以哲学家必须和他左边和右边的哲学家共享叉子。在这个实验中,假定哲学家每次吃饭的时间长度为单位1,吃完一次后则放下两把叉子。如果等待10个单位时间长度之后,哲学家仍没有得到叉子吃饭,则被饿死。
你需要设计一种方法使得任何一个哲学家都不被饿死。
需要考虑的问题:死锁!!!当每个哲学家同时拿到左手的叉子时,同时,每个人又在等待右手的叉子。
然而,没有哲学家会放下手中的叉子,所以永远没有人能够开始吃饭。这种情况就会产生死锁并导致永远循环等待。
提示: 为了解决这个问题,你需要使用二进制信号量。为每个叉子创建一个信号量。拿到叉子可以通过调用semtake()来实现,放下叉子可以通过调用semgive()来实现。
避免出现死锁,在死锁即将发生前解除死锁。
通过定时器判断哲学家是否被饿死。
安装tornado ulip**网卡驱动,启动2个带有网络的vxsim目标系统。参考实验给出的源**和编程实现2个vxsim目标系统之间的tcp通信。
安装tornado ulip**网卡驱动,启动带网络的vxsim目标系统,vxsim为tftp client,本地主机或远端主机为tftp server。tftp client通过tftp协议从主机上读取一个自定义的文本文件,并打印在vxsim的控制台上。
提示:在本地主机或远端主机上安装tftp server软件(可以从网上**)。首先要能配置vxsim的windsh能够ping通本地主机或远端主机。
vxsim必须支持tftp协议,支持icmp协议等。
1. 完成源**编程,源**随实验报告一起交。
2. 完成实验报告,实验报告中每个实验应包括 1)实验原理介绍;2)**设计说明;3)截取程序运行结果**;4)程序调试记录,逐条说明。
3. 将实验报告(文件名为:学号姓名。doc,例如,045888程胜。doc),源**目录(src\*.c)用winzip打包成学号姓名。zip,发送到
* -header used by both tcp server and client examples */
*定义结构体,保存待传输的信息,是否回应,以及信息长度*/
#define server_port_num 5001 /*server's port number for bind()
#define server_work_priority 100 /*priority of server's work task */
#define server_stack_size 10000 /*stack size of server's work task */
#define server_max_connections 4 /*max clients connected at a time */
#define request_msg_size 1024 /*max size of request message */
#define reply_msg_size500 /*max size of reply message */
* structure for requests from clients to server */
struct request
int replytrue = request reply from server */
int msglenlength of message text */
char message[request_msg_size]; message buffer */
* -tcp client example */
*tcpserver是**到client端的程序,其完成的功能是建立连接,通过套节字进行数据传输,传输的数据包括信息,是否回应。出错,返回错误信息*/
#include ""
#include ""
#include ""
#include ""
#include ""
#include ""
#include ""
#include ""
status tcpclient ( char * servernameserver机的ip地址 */
struct request myrequest; /定义的结构体,保存信息和回复请求以及信息长度 */
struct sockaddr_in serveraddr; /server端的套节字地址 */
charreplybuf[reply_msg_size]; 保存回复信息的数组*/
charreply回复请求 */
intsockaddrsize; /server端的套节字地址结构体的长度*/
intsfd保存套节字的设备*/
intmlen信息长度 */
/* 建立套节字,用于在两机之间进行数据传输*/
if ((sfd = socket (af_inet, sock_stream, 0)) error)
perror ("socket setup error!");
return (error);
套节字建立失败,返回错误信息*/
sockaddrsize = sizeof (struct sockaddr_in);
bzero ((char *)serveraddr, sockaddrsize);
= af_inet;
= (u_char) sockaddrsize;
= htons (server_port_num);
if ((inet_addr (servername)) error) &
= hostgetbyname (servername)) error))
perror ("unknown server name");
close (sfd);
return (error);
服务端不存在,返回错误信息*/
if (connect (sfd, (struct sockaddr *)serveraddr, sockaddrsize) =error)
perror ("connect");
close (sfd);
return (error);
连接客户机与目标机,如果失败返回错误信息*/
printf ("message to send: ");
mlen = read (std_in, request_msg_size); 从输入设备检测保存到中*/
= mlen;
ioctl(std_in,fioflush,null);
printf("your message:%s",/ioctl(std_out,fioflush,null);
printf ("would you like a reply (y or n): n");
read (std_in, &reply, 1); 从输入设备检测是否要求服务器端回应*/
ioctl(std_in,fioflush,null);
switch (reply)
case 'y':
case 'y': true;
break;
《嵌入式系统实验》作业
嵌入式系统实验 作业。实验1.hello world程序 20 实验要求 1 了解一种非vxworks的嵌入式系统,简述该操作系统。实验目的 的特点以及其开发环境的组成。2 在windows操作系统平台上安装workbench集成开发环境,新建一个类型为downloadable kernel mod...
嵌入式系统实验
哈尔滨德强学院。实验报告 题目 嵌入式系统设计。院 系 德强商务学院计算机系。姓名 指导教师 多智华。系主任 葛雷 2010年10月15日。实验。一 使用ads1.2调试程序。一 实验内容和目的。1 熟悉adtide adt2000 support 运行环境。2 使用adtide adt2000 s...
嵌入式系统 实验
实验一 基于ads的c语言程序实验。一 实验环境。pc机一台 ads 1.2集成开发环境一套。二 实验目的。通过实验了解使用ads 1.2编写c语言程序,并进行调试。三 实验内容。在c语言的环境内开发应用程序,一般需要一个汇编的启动程序,从汇编的启动程序,跳到c语言下的主程序,然后,执行c程序,具体...