欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    计算机操作系统实验报告共享内存管理Word格式文档下载.docx

    • 资源ID:7864548       资源大小:456.68KB        全文页数:14页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    计算机操作系统实验报告共享内存管理Word格式文档下载.docx

    1、Linux环境实验内容及实验结果请写出具体的实验步骤,并给出相应的实验结果,附上编写的程序及其运行结果截图!实验步骤:1。2. 3. #include #include sys/ipc.hsys/sem.hsys/shm.hstdlib.herrno.hstring.hsignal.h/* The union for semctl may or may not be defined for us.This code,defined in linuxs semctl() manpage,is the proper way to attain it if necessary */#if defin

    2、ed (_GNU_LIBRARY_)& !defined (_SEM_SEMUN_UNDEFINED)/* union semun is defined by including */#else/* according to X/OPEN we have to define it ourselves */union semunint val;/* value for SETVAL */struct semid_ds *buf;/* buffer for IPC_STAT,IPC_SET */unsigned short int *array;/* array for GETALL,SETALL

    3、 */struct seminfo *_buf;/* buffer for IPC_INFO */;#endif#define SHMDATASIZE1000#define BUFFERSIZE (SHMDATASIZE - sizeof(int)#define SN_READ 0#define SN_WRITE 1#define SN_LOCK 2int Semid = 0;void reader(int shmid);void writer(int shmid);int masterinit(void);char *standardinit(int shmid,int *semid);vo

    4、id delete(void);void sigdelete(int signum);void locksem(int semid,int semnum);void unlocksem(int semid,int semnum);void waitzero(int semid,int semnum);void write(int shmid,int semid,char *buffer);int mysemget(key_t key,int nsems,int semflg);int mysemctl(int shmid,int semnum,int cmd,union semun arg);

    5、int mysemop(int semid,struct sembuf *sops,unsigned nsops);int myshmget(key_t key,int size,int shmflg);void *myshmat(int shmid,const void *shmaddr,int shmflg);int myshmctl(int shmid,int cmd,struct shmid_ds *buf);int main(int argc,char *argv)char selection3;int shmid;/* 没有参数,则为 master */if(argc 2)shmi

    6、d = masterinit();elseshmid = atoi(argv1);printf( do you want a writer(1) or reader(2) ?);fgets(selection,sizeof(selection),stdin);switch(selection0)case 1:writer(shmid); break;2reader(shmid);break;default: invalid choice, quit nreturn 0;void reader(int shmid)int semid;char *buffer;buffer = standardi

    7、nit(shmid,&semid);n reader begin to run, and the id of share memory is %d, semaphore id is %d n,shmid,semid);while(1)n wait for writer to input information .fflush(stdout);locksem(semid,SN_WRITE);finish n wait for locking semaphore SN_LOCK .locksem(semid,SN_LOCK);received information: %s n,buffer);u

    8、nlocksem(semid,SN_LOCK);unlocksem(semid,SN_READ);void writer(int shmid)writer begin to run,the id of share memory is %d, semaphore id is %dnchar input3;n menu n 1.send a message n 2.quit ninput your choice(1-2):fgets(input,sizeof(input),stdin);switch(input0)write(shmid,semid,buffer);exit(0);char *st

    9、andardinit(int shmid,int *semid)void *shmdata;shmdata = myshmat(shmid,0,0);*semid = *(int *)shmdata;buffer = shmdata + sizeof(int);return buffer;int masterinit(void)union semun sunion;int semid,shmid;/* 首先:我们要创建信号量 */semid = mysemget(IPC_PRIVATE,3,SHM_R|SHM_W);Semid = semid;/* 当进程离开时,删除信号量 */atexit(

    10、&delete);signal(SIGINT,&sigdelete);/* 信号量 SN_READ 初始化为 1(锁定),SN_WRITE 初始化为 0(未锁定)*/* 信号量 SN_LOCK 初始化为 1(锁定)*/ sunion.val = 1;mysemctl(semid,SN_READ,SETVAL,sunion);mysemctl(semid,SN_LOCK,SETVAL,sunion);sunion.val = 0;mysemctl(semid,SN_WRITE,SETVAL,sunion);/* 现在创建一块共享内存 */shmid = myshmget(IPC_PRIVATE,

    11、SHMDATASIZE,IPC_CREAT|SHM_R|SHM_W);/* 将该共享内存映射进进程的虚存空间 */* 将该共享内存标志为已销毁的,这样在使用完毕后,将被自动销毁*/myshmctl(shmid,IPC_RMID,NULL);/* 将信号量的标识符写入共享内存,以通知其它的进程 */*(int *)shmdata = semid;* begin to run, and semaphore id is %d n,shmid);return shmid;void delete(void)n quit; delete the semaphore %d n,Semid);union se

    12、mun senion;senion.val=0;if(mysemctl(Semid,0,IPC_RMID,senion) = -1)Error releasing semaphore. nvoid sigdelete(int signum)/* Calling exit will conveniently trigger the normal delete item. */void locksem(int semid,int semnum)struct sembuf sb;sb.sem_num = semnum;sb.sem_op = -1;sb.sem_flg = SEM_UNDO;myse

    13、mop(semid,&sb,1);void unlocksem(int semid,int semnum)sb.sem_op = 1;void waitzero(int semid,int semnum)sb.sem_op = 0;sb.sem_flg = 0;/* No modification so no need to undo */void write(int shmid,int semid,char *buffer)n wait for reader to read in information .locksem(semid,SN_READ);finish; wait for loc

    14、king semaphore SN_LOCK.nplease input information:fgets(buffer,BUFFERSIZE,stdin);unlocksem(semid,SN_WRITE);int mysemget(key_t key,int nsems,int semflg)int retval;retval = semget(key,nsems,semflg);if(retval = -1)semget key %d,nsems %d failed: %s ,key,nsems,strerror(errno);exit(255);return retval;int m

    15、ysemctl(int semid,int semnum,int cmd,union semun arg)retval = semctl(semid,semnum,cmd,arg);semctl semid %d,semnum %d,cmd %d failed: %s,semid,semnum,cmd,strerror(errno); return retval;int mysemop(int semid,struct sembuf *sops,unsigned nsops)retval = semop(semid,sops,nsops);semop semid %d (%d operatio

    16、ns) failed:,semid,nsops,strerror(errno);int myshmget(key_t key,int size,int shmflg)retval = shmget(key,size,shmflg);shmget key %d,size %d failed:,key,size,strerror(errno);void *myshmat(int shmid,const void *shmaddr,int shmflg)void *retval;retval = shmat(shmid,shmaddr,shmflg);if(retval = (void*) -1)shmat shmid %d failed:,shmid,strerror(errno);int myshmctl(int shmid,int cmd,struct shmid_ds *buf)retval = shmctl(shmid,cmd,buf);shmctl shmid %d,cmd %d failed:,shmid,cmd,strerror(errno);实验心得教师评阅意见教师签字签字日期年 月 日


    注意事项

    本文(计算机操作系统实验报告共享内存管理Word格式文档下载.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开