操作系统大作业

发布 2020-02-28 15:09:28 阅读 5041

课程设计。

目录 1课程设计任务书 2

正文 31.设计目的与要求 3

1.1设计目的 3

1.2设计要求 3

2.设计思想及系统平台 3

2.1设计思想 3

2.2系统平台及使用语言 4

3.详细算法描述 4

4.源程序 7

5.运行结果与运**况 10

6.调试过程 12

7.总结 13

本科生课程设计成绩评定表 14

学生姓名专业班级。

指导教师工作单位: 计算机科学与技术学院

题目: 实现读者写者(reader-writer problem)问题。

初始条件:1. 操作系统:linux

2. 程序设计语言:c语言。

3. 设有20个连续的存储单元,写入/读出的数据项按增序设定为1-20这20个字符。

要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

1.技术要求:

1)为每个读者/写者产生一个线程,设计正确的同步算法。

2)每个读者/写者对该存储区进行操作后,即时显示该存储区的全部内容、当前指针位置和读者/写者线程的自定义标识符。。

3)读者应有3个以上,写者应有有两个以上。

4)多个读者/写者之间须共享对存储区进行操作的函数**。

2. 设计说明书内容要求:

1)设计题目与要求。

2)总的设计思想及系统平台、语言、工具等。

3)数据结构与模块说明(功能与流程图)

4)给出用户名、源程序名、目标程序名和源程序及其运行结果。(要注明存储各个程序及其运行结果的主机ip地址和目录。)

5)运行结果与运**况。

提示: (1)连续存储区可用数组实现。

2)编译命令可用: cc -lpthread -o 目标文件名源文件名。

3)多线程编程方法参见附件。)

3. 调试报告:

1) 调试记录。

2) 自我评析和总结。

上机时间安排:

指导教师签名201年 1 月 11 日。

系主任(或责任教师)签名201年 1 月 11 日。

通过研究linux的线程机制和信号量实现读者写者问题 (reader-writer problem )的并发控制。

1)为每个读者/写者产生一个线程,设计正确的同步算法。

2)每个读者/写者对该存储区进行操作后,即时显示该存储区的全部内容、当。

前指针位置和读者/写者线程的自定义标识符。

3)读者应有3个以上,写者应有有两个以上。

4)多个读者/写者之间须共享对存储区进行操作的函数**。

为实现reader与writer线程间在读或写时的互斥设置一个互斥信号量writer_mutex。另外,再设置一个整形变量reader_counter表示正在读的线程数目。由于只有一个reader线程在读,便不允许writer线程去写。

因此,仅当reader_counter=0,表示尚无reader线程在读时,reader线程才需要执行wait(writer_mutex)操作。若wait(writer_mutex)操作成功,reader线程便可以去读,相应的,做reader_counter+1操作。同理,仅当reader线程在执行reader_counter减1操作后其值为0时,才必须执行signal(writer_mutex)操作,以便让writer线程写。

reader_counter是一个可被多个reader线程访问的临界资源,因此,也应该为它设置一个互斥信号量reader_mutex。

除此之外,各线程也共享输出文件,特别是reader线程,有可能多个reader线程同时使用输出文件。为避免输出混乱,也应该为其设置一个互斥信号量print_mutex。

本课程设计在linux操作系统下,使用c语言完成。用到的工具主要有gcc编译器和vi编辑器。

本程序解决读者——写者问题的大致算法思想前一部分已描述,此外,本程序通过alarm()设置程序的运行时间,一旦超时,将设置超时变量timeout=1。一旦设置超时变量,所有的读者线程和写者线程将不再进行下一轮的读/写操作。每个线程执行完一轮的读/写操作,将休息一会后继续进行下一轮的读/写操作,直到超时变量为1。

本程序的读/写操作都是随机进行的。

共享数据:semaphore writer_mutex=1;

semaphore reader_mutex=1;

semaphore print_mutex=1;

int reader_counter=0;

writer线程的处理函数:

while(1){

wait(writer_mutex);

reading;

signal(writer_mutex);

if(timeout==1)break;

sleep();

writer线程的处理函数流程图如下:

reader线程的处理函数:

while(1){

wait(reader_mutext);

if(reader_counter==0)wait(writer_mutex);

reader_counter++;

signal(reader_mutex);

reading;

wait(reader_mutext);

reader_counter--;

if(reader_counter==0)signal(writer_mutex);

signal(reader_mutex);

reading;

if(timeout==1)break;

sleep();

reader线程的处理函数流程图如下:

源程序如下:

#include<>

#include<>

#include<>

#include<>

#include<>

#include

#include<>

#include<>

#include<>

#include<>

#define num_threads_rd 5 /*define the number of reader*/

#define num_threads_wr 5 /*define the number of writer*/

#define max_buffer 20

#define run_time 20

int reader_counter=0; /to count the number of reader who is reading*/

int timeout=0; /time out write_pointer*/

int buffer[max_buffer]; difine the buffer */

sem_t writer_mutex,reader_share,print_mutex;

pthread_t threads_rd[num_threads_rd]; reader*/

pthread_t threads_wr[num_threads_wr]; writer*/

file* fd;

void* writer_thread(void*);

void* reader_thread(void*);

void writing(int);

void reading(int);

void showbuf();show the concent of buffer*/

void handler(){

timeout=1; /set the timeout flag*/

int main(){

int i;

fd=fopen(""w");open a file to s**e the result*/

signal(sigalrm,handler);

sem_init(&reader_share,0,1); set the value of semaphores*/

sem_init(&writer_mutex,0,1);

sem_init(&print_mutex,0,1);

for(i=0;i /*create the threads*/

for(i=0;i pthread_create(&threads_wr[i],null,(void*)writer_thread,(void*)i);

操作系统大作业a

一 填空 14分 1 在设备管理中,为了克服独占设备速度较慢 降低设备资源利用率的缺点,引入了虚拟分配技术即用共享设备模拟独占设备。2 常用的内存管理方法有和。3 动态存储分配时,要靠硬件地址变换机构实现重定位。4 在存储管理中常用虚拟存储器方式来摆脱主存容量的限制。5 在页式管理中,页式虚地址与内...

操作系统大作业a

一 填空 14分 1 在设备管理中,为了克服独占设备速度较慢 降低设备资源利用率的缺点,引入了即用共享设备模拟独占设备。2 常用的内存管理方法有和。3 动态存储分配时,要靠硬件地址变换机构实现。4 在存储管理中常用方式来摆脱主存容量的限制。5 在页式管理中,页式虚地址与内存物理地址的映射是由和完成的...

操作系统大作业

学号 091401223 姓名 高玉林 本次上机作业使用的软件是microsoft visual studio community 2017 rc,版本 15.0.26020.0,使用的语言是c 第一题 编写求f x 值的程序。f x f1 x f2 x f3 x f1 x 10 x f2 x 10...