实验(操作系统)(3)

2019-06-17 14:56

exit(0); }

五、 实验结果 1、写出运行结果

2、按要求认真书写实验报告 六、思考问题

1、在linux系统中定义了几种通信方式?这些通信方式的主要功能是什么? 2、linux的PIC的主要功能,并说明IPC中包含的通信机制有哪些?

10

实验七:进程管理----进程间通信(二) 一、 实验目的

linux系统的进程通信机构(IPC)允许在任意进程间大批量地交换数据。本实验的目的是了解和熟悉linux支持的消息通信机制及共享存储区机制。 二 实验准备

1、装有liunx系统的计算机

2、阅读 liunx系统的msg.c 、sem.c和 shm.c等原代码文件,熟悉linux的三种通信机制。 三、实验内容和要求

1.编写一段C语言程序使其完成:两段程序 test1和test2通过一个共享内存进行通信,其中test1 向共享内存中写数据,test2从共享内存中读出数据或信息并将数据或信息送入标准输出上。

2.用clone( )创建四个轻进程(线程),用参数指明共享内存等资源,通过共享内存模拟生产者—消费者问题,利用pthread_mutex_lock( ),

pthread_mutex_unlock( )等函数实现对共享存储区访问的互斥。 四、部分参考代码 1. #include #include #include #include

#define SHM_MODE (SHM_R | SHM_W) #define SHW_SIZE 2048 int main( )

{int segment_id,segment_size; char *shared_memory; pit_t pid;

if((segment_id=shmget(IPC_PRIVATE,SHM_SIZE,SHM_MODE))<0) printf(―shmget error !\\n‖);

if((shared_memory=shmat(segment_id,0,0))==(void*)-1) printf(―shmat error !\\n‖);

printf(―test1 send a message to shar memory. \\n‖); sprintf(shared_memory,‖Hello test2!\\n‖); shmdt(shared_memory); pid=fork( );

if(pid<0)printf(―Creating process error!\\n‖); else if(pid<0){wait(NULL);

shmctl(segment_id,IPC-RMID,0); exit(0);} else

{ if((shared_memory=shmat(segment_id,0,0))==(void*)-1) printf(―shmat error !\\n‖);

printf(―test2 get a message from share memory:%s ‖, shared_memory); shmdt(shared_memory); } }

11

五、 实验结果 1、写出运行结果

2、按要求认真书写实验报告

12

实验八:存储器管理----动态不等长存储资源分配算法 一、 实验目的

理解动态异长存储分区资源管理,掌握所需数据结构和管理程序了解各种存储分配算法的优点和缺点。 二、实验内容和要求

1 、分析Linux最先适应(First Fit,FF) 存储分配算法,即map数据结构、存储分配函数 malloc()和存储释放函数 mfree( ),找出与算法有关的成分。

2、修改上述与算法有关的成分,使其分别体现BF(Best Fit,最佳适应)分配原则和WF(Worst Fit, 最坏适应)分配原则。 三、实验设计

1、按内容要求编写最佳适应和最坏适应存储分配算法。

2、编写测试程序,对存储分配表进行初始化。然后对用户输入的请求和释放,按算法动态更新存储分配表,并将每次更新之后的存储分配表在屏幕上显示出来。 四、参考代码

#ifdef HAVE_CONFIG_H #include #endif

#include #include #define MAPSIZE 100 struct map{ int m_addr; int m_size; };

struct map map[MAPSIZE];

int BF_malloc(struct map *map,int size) {register int a,s;

register struct map *bp,*bpp; for(bp=mp;bp->m_size;bp++) {if(bp->m_size>=size){a=bp->m_addr; s=bp->m_size;

for(bpp=bp;bpp->m_size;bpp++) {if(bpp->m_size>=size&&bpp->m_sizem_addr; s=bpp->m_size; bp=bpp;} }

bp->m_addr+=size; if((bp->m_size - =size)==0) do{bp++;

(bp-1)->m_addr=bp->m_addr; }while((bp-1)->m_size=bp->m_size; return (a); } }

13

return (-1); }

int WF_malloc (struct map *map,int size) {register int a,s;

register struct map *bp,*bpp; for(bp=mp;bp->m_size;bp++) {if(bp->m_size>=size){a=bp->m_addr; s=bp->m_size;

for(bpp=bp;bpp->m_size;bpp++) {if(bpp->m_size>s ) { a=bpp->m_addr; s=bpp->m_size; bp=bpp;} }

bp->m_addr+=size; if((bp->m_size - =size)==0) do{bp++;

(bp-1)->m_addr=bp->m_addr; }while((bp-1)->m_size=bp->m_size;

return (a);

} } return (-1); }

void mfree(struct map *map,int aa,int size) { register struct map *bp; register int a; register int t; a=aa;

for(bp=mp;bp=m_addr<=a&&bp->m_sizeq!=0;bp++) if(bp>mp&&(bp-1)->m_addr+(bp-1)->m_size==a) {(bp-1)->m_size+=size;

if(a+size==bp->m_addr){ (bp-1)->m_size+= bp->m_size; while(bp->m_size) {bp++;

(bp-1)->m_addr=bp->m_addr; (bp-1)->m_size=bp->m_size; } } }

else{ if(a+size==bp->m_addr&& bp->m_size) { bp->m_addr - = size; bp->m_size+=size;} else if(size)

do{t=bp->m_addr;

14


实验(操作系统)(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017年12月电大远程网络教育大学英语B统考题库真题2

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: