《嵌入式系统实验》作业

发布 2020-02-28 10:18:28 阅读 7682

用于验证一个常见的冲突问题。在这个问题中,有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程序,具体...