好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

操作系统实验报告3.docx

15页
  • 卖家[上传人]:re****.1
  • 文档编号:467320464
  • 上传时间:2023-09-16
  • 文档格式:DOCX
  • 文档大小:336.57KB
  • / 15 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 实用文档操作系统实验报告学号姓名班级.实用文档实验一实验报告【实验名称】:并发程序设计(实验 1)【实验目的】:掌握在程序中创建新进程的方法, 观察并理解多道程序并发执行的现象实验原理】:fork(): 建立子进程子进程得到父进程地址空间的一个复制返回值:成功时,该函数被调用一次,但返回两次, fork()对子进程返回 0,对父进程返回子进程标识符(非 0 值)不成功时对父进程返回 -1,没有子进程实验内容】:首先分析一下程序运行时其输出结果有哪几种可能性,然后实际调试该程序观察其实际输出情况, 比较两者的差异, 分析其中的原因void main (void){ int x=5;if( fork( ) ){x+=30;printf ( “ %d\n” ,x);}elseprintf( “ %d\n ” ,x);printf(( “ %d\n” ,x);}【实验要求】:每个同学必须独立完成本实验、提交实验报告、源程序和可执行程序实验报告中必须包含预计的实验结果,关键代码的分析,调试记录,实际的实验结果,实验结果分析等内容实用文档【预计的实验结果】355355【关键代码分析】1,代码主要由 fork() 函数和一个 if else 条件分支语句组成。

      2,fork() 函数,它是 Linux 的系统调用函数定义:int fork( void );返回值:子进程中返回 0,父进程中返回子进程 ID ,出错返回 -1 函数说明:一个现有进程可以调用 fork 函数创建一个新进程 由 fork 创建的新进程被称为子进程( child process )fork 函数被调用一次但返回两次两次返回的唯一区别是子进程中返回 0 值而父进程中返回子进程 ID子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本注意,子进程持有的是上述存储空间的 “副本 ”,这意味着父子进程间不共享这些存储空间, 它们之间共享的存储空间只有代码段 linux 将复制父进程的地址空间内容给子进程,因此,子进程有了独立的地址空间3,父进程和子进程的代码段都是上面的所有代码, 由定义可知不过子进程的代码只从创建此子进程那里开始执行也就是从 if( fork( ) ) 语句开始,出现了子进程,两个进程并发执行当这个程序执行 if(fork()) 时,操作系统创建一个新的进程(子进程) ,并且在进程表中相应为它建立一个新的 PCB表项其中子进程从父进程继承到了大部分的参数。

      也有独有的参数,如进程号等但是此后他们是独立的两个进程在子进程里创建的东西是子进程的,在父进程创建的东西是父进程.实用文档的可以完全看成普通的两个进程所以在执行 printf(( “ %d\n” ,x); 的时候,父子进程当然都会执行它,因为他们本身程序段里都有这句代码调试记录】在红帽终端里做 gdb 调试在第五行加入断点,执行 run 得到 5 5,这是子进程执行的结果再执行 next 得到 35 35,这是父进程的结果这里可以看出,由父进程创建的子进程先执行完毕,但是宏观上是并发执行实际的实验结果】553535【实验结果分析】从实际结果来看,子进程比父进程先执行完,但是由 fork 函数,我们可知,两者优先级应该是一样的至于哪个可能先执行,可能和操作系统的具体调度算法有关当实验超过一定次数时,应该会出现其它结果实用文档实验二实验报告【实验名称】:进程通信(实验 2)【实验目的】:掌握用邮箱方式进行进程通信的方法,并通过设计实现简单邮箱理解进程通信中的同步问题以及解决该问题的方法实验原理】:邮箱机制类似于日常使用的信箱对于用户而言使用起来比较方便,用户只需使用 send()向对方邮箱发邮件 receive()从自己邮箱取邮件, send()和 receive()的内部操作用户无需关心。

      因为邮箱在内存中实现, 其空间有大小限制其实 send()和 receive ()的内部实现主要还是要解决生产者与消费者问题Send()信箱 A进receive()进程程ABreceive()信箱 BSend()【实验内容】:进程通信的邮箱方式由操作系统提供形如 send()和 receive()的系统调用来支持,本实验要求学生首先查找资料了解所选用操作系统平台上用于进程通信的系统调用具体形式, 然后使用该系统调用编写程序进行进程间的通信, 要求程序运行结果可以直观地体现在界面上在此基础上查找所选用操作系统平台上支持信号量机制的系统调用具体形式, 运用生产者与消费者模型设计实现一个简单的信箱,该信箱需要有创建、发信、收信、撤销等函数,至少能够支持两个进程互相交换信息, 比较自己实现的信箱与操作系统本身提供的信箱,分析两者之间存在的异同实验要求】:每个同学必须独立完成本实验、提交实验报告、源程序和可执行程序实验报告中必须包含背景知识介绍,设计方案,预计的实验结果,关键代码的分析,调试记录,实际的实验结果,实验结果分析等内容背景知识介绍】:1、sembuf 数据结构struct sembuf{.实用文档unsigned short int sem_num; //semaphore numbershort int sem_op; //semaphore operationshort int sem_flg; //operation flag};sem_num:是相对应的信号量集中的某一个资源,所以其值是一个从 0 到相应的信号量集的资源总数( ipc_perm.sem_nsems)之间的整数。

      sem_op:指明所要执行的操作如果其值为正数,该值会加到现有的信号内含值中通常用于释放所控资源的使用权;如果 sem_op的值为负数,而其绝对值又大于信号的现 值,操作将会阻塞,直到信号值大于或等于 sem_op的绝对值通常用于获取资源的使用权;如果 sem_op的值为 0,则操作将暂时阻塞,直到信号的值变 为 0sem_flg :信号操作标志,可能的选择有两种IPC_NOWAIT //对信号的操作不能满足时, semop()不会阻塞,并立即返回,同时设定错误信息IPC_UNDO //程序结束时 ( 不论正常或不正常 ) ,保证信号值会被重设为 semop() 调用前的值这样做的目的在于避免程序在异常情况下结束时未将锁定的资源解锁,造成该资源永远锁定2、 semop 函数函数原型: int semop(int semid, struct sembuf *sops, unsigned nsops); 参数说明:semid:信号集的识别码,可通过 semget 获取sops:指向存储信号操作结构的数组指针nsops:信号操作结构的数量,恒大于或等于 1返回说明:成功执行时,两个系统调用都返回 0。

      失败返回 -1 ,错误信息保存在 errno 中3、semget 函数函数原型: int semget(key_t key,int nsems,int semflg); 参数说明:key:关键字值一般是由系统调用 ftok() 返回的nsems:指出了一个新的信号量集中应该创建的信号量的个数semflg :打开和存取操作与参数 semflg 中的内容相关返回说明:如果成功,则返回信号量集的 IPC 标识符如果失败,返回 -1 ,错误信息保存在 errno 中4、semctl 函数函数原型: int semctl(int semid,int semnum,int cmd,union semun arg); 参数说明:senid :关键字值semnum:信号量数目cmd:要操作的具体命令arg:semnu的一个联合类型的副本返回说明:返回值:如果成功,则为一个正数如果失败,则为 -1 错误信息保存在 errno 中5、pthread_create 函数函数原型: int pthread_create(pthread_t *restrict tidp,const.实用文档pthread_attr_t *restrict attr,void* (*start_rtn)(void*),void *restrict arg);参数说明:tidp :指向线程标识符的指针。

      attr :用来设置线程属性第三个参数是线程运行函数的起始地址arg :运行函数的参数设计方案】:采用两个程序并行的方式,打开两个终端,为两个进程都创建一个邮箱并且,要求先输入操作命令,使信箱执行哪种操作,以完成两个进程间的邮件通信同时,还应采用 pv 操作,使当邮箱满和空的时候,分别不能执行发送和接收的工作实验预计结果】: A_Receive()和 B_Receive()分别接收 B_Send()和 A_Send ()发出的信息,发送的信息和接受的信息应该一样关键代码分析】:PV操作实现:int p(int sem_id){struct sembuf sem_b;sem_b.sem_num = 0;sem_b.sem_op = -1; // V 操作只需将。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.