南昌航空大学实验报告课程名称: 操作系统实验名称: 实验三:读者/ 写者问题与进程同步班级: 12206122 姓名: 吴昊同组人: 指导教师评定: 签名: 实验目的理解临界区和进程互斥的概念,掌握用信号量和 PV 操作实现进程互斥的方法。 实验要求在 linux 环境下编写一个控制台应用程序, 该程序运行时能创建 N 个线程( 或者进程), 其中既有读者线程又有写者线程, 它们按照事先设计好的测试数据进行读写操作。请用信号量和 PV 操作实现读者/ 写者问题。读者/ 写者问题的描述如下: 有一个被许多进程共享的数据区, 这个数据区可以是一个文件, 或者主存的一块空间(比如一个数组或一个变量) ,甚至可以是一组处理器寄存器。有一些只读取这个数据区的进程( reader )和一些只往数据区中写数据的进程( writer ) 。以下假设共享数据区是文件。这些读者和写者对数据区的操作必须满足以下条件:读—读允许;读—写互斥;写—写互斥。这些条件具体来说就是: (1 )任意多的读进程可以同时读这个文件; (2 )一次只允许一个写进程往文件中写; (3 )如果一个写进程正在往文件中写,禁止任何读进程或写进程访问文件; (4 )写进程执行写操作前,应让已有的写者或读者全部退出。这说明当有读者在读文件时不允许写者写文件。对于读者- 写者问题,有三种解决方法: 1 、读者优先除了上述四个规则外, 还增加读者优先的规定, 当有读者在读文件时, 对随后到达的读者和写者, 要首先满足读者, 阻塞写者。这说明只要有一个读者活跃, 那么随后而来的读者都将被允许访问文件,从而导致写者长时间等待,甚至有可能出现写者被饿死的情况。 2 、写者优先除了上述四个规则外, 还增加写者优先的规定, 即当有读者和写者同时等待时, 首先满足写者。当一个写者声明想写文件时,不允许新的读者再访问文件。 3 、无优先除了上述四个规则外,不再规定读写的优先权,谁先等待谁就先使用文件。 实验步骤 算法分析 1 、错误的解法图 3-1 错误的解法 semaphore r_w_w=1; reader(){ P(r_w_w) ; 读文件; V(r_w_w) ; writer(){ P(r_w_w) ; 写文件; V(r_w_w) ; 有同学认为,可以将文件视为临界资源, 使用临界资源的代码就构成临界区,为了对临界区进行管理,只需设置一个互斥信号量 r_w_w ,读或者写之前执行 P(r_w_w) ,之后执行 V(r_w_w) 即可,从而得到图 3-1 所示的算法描述。该方法虽然能满足读—写互斥和写—写互斥, 但是不满足读—读允许, 只要有一个读者在读文件,其他的读者都被阻塞了。可见,单纯使用互斥信号量不能解决读者/ 写者问题,还需要引入计数器对读者进行记数。 2、读者优先如何纠正上述解法中存在的错误呢? 其实,对于相继到达的一批读者,并不是每个读者都需要执行 P(r_w_w) 和 V(r_w_w) 。在这批读者中,只有最先到达的读者才需要执行 P(r_w_w) ,与写者竞争对文件的访问权, 若执行 P(r_w_w) 成功则获得了文件的访问权,其他的读者可直接访问文件;同理,只有最后退出临界区的读者需要执行 V(r_w_w) 来归还文件访问权。为了记录正在读文件的一批读者的数
实验三 来自淘豆网m.daumloan.com转载请标明出处.