文档库 最新最全的文档下载
当前位置:文档库 › 模拟PV操作同步机构,且用PV操作解决生产者——消费者问题。

模拟PV操作同步机构,且用PV操作解决生产者——消费者问题。

模拟PV操作同步机构,且用PV操作解决生产者——消费者问题。
模拟PV操作同步机构,且用PV操作解决生产者——消费者问题。

实验四:同步机构实验报告

学院:

专业班级:

姓名:

学号:

一、实验内容:

模拟实现用同步机构避免发生进程执行时可能出现的与时间有关的错误。二、实验目的:

进程是程序在一个数据集合上运行的过程,进程是并发执行的,也即系统中的多个进程轮流地占用处理器运行。

我们把若干个进程都能进行访问和修改的那些变量称为公共变量。由于进程是并发地执行的,所以,如果对进程访问公共变量不加限制,那么就会产生“与时间有关”的错误,即进程执行后所得到的结果与访问公共变量的时间有关。为了防止这类错误,系统必须要用同步机构来控制进程对公共变量的访问。一般说,同步机构是由若干条原语——同步原语——所组成。本实验要求学生模拟PV操作同步机构的实现,模拟进程的并发执行,了解进程并发执行时同步机构的作用。

三、实验题目:

模拟PV操作同步机构,且用PV操作解决生产者——消费者问题。

四、此次用到的数据结构知识如下:

typedef struct Pcb{

char name[10]; //进程名

char state[10]; //运行状态

char reason[10]; //若阻塞,其原因

int breakp; //断点保护

struct Pcb *next; //阻塞时的顺序

}Pcb,*link;

进程控制块结构

定义两个进程:link p1;//生产者进程,link c1;//消费者进程。pc程序计数器和link ready; 就绪队列,link b_s1; s1阻塞队列,link b_s2; s2阻塞队列。

五、实验源代码:

分为四个头文件。

1、a.h头文件代码如下:

#include

#include

#include /* malloc()等 */

#include /* INT_MAX等 */

#include /* EOF(=^Z或F6),NULL */

#include /* atoi() */

#include /* eof() */

#include /* floor(),ceil(),abs() */

#include /* exit() */

#include

using namespace std;

#include

#define BUF 10 //缓存的大小

#define MAX 20 //最大可以输入的字符

2、b.h头文件代码如下:

//数据结构的定义和全局变量

typedef struct Pcb{

char name[10]; //进程名

char state[10]; //运行状态

char reason[10]; //若阻塞,其原因

int breakp; //断点保护

struct Pcb *next; //阻塞时的顺序}Pcb,*link;

int s1,s2; //信号量

link p1;//生产者进程

link c1;//消费者进程

char str[MAX]; //输入的字符串

char buffer[BUF]; //缓冲池

int len; //输入长度

int sp=0; //string的指针

int in=0; //生产者指针

int out=0; //消费者指针

char temp; //供打印的临时产品

char rec_p[MAX];//生产记录

int rp1=0;//生产记录指针

char rec_c[MAX];//消费记录

int rp2=0;//消费记录指针

link ready; //就绪队列

link b_s1; //s1阻塞队列

link b_s2; //s2阻塞队列

int pc; //程序计数器

int count; //字符计数器

int con_cnt; //消费计数器

3、c.h头文件代码如下:

void init(); //初始化

void p(int s); //P操作

void v(int s); //V操作

void block(int s);//阻塞函数

void wakeup(int s);//唤醒函数

void control(); //处理机调度

void processor();//处理机执行

void print(); //打印函数

void init(){ //初始化

s1=BUF;

s2=0;

p1=(link)malloc(sizeof(Pcb));//建立新的结点,并初始化为生产者strcpy(p1->name,"Producer");

strcpy(p1->state,"Ready");

strcpy(p1->reason,"Null");

p1->breakp=0;

p1->next=NULL;

c1=(link)malloc(sizeof(Pcb));//建立新的结点,并初始化为消费者strcpy(c1->name,"Consumer");

strcpy(c1->state,"Ready");

strcpy(c1->reason,"Null");

c1->breakp=0;

c1->next=NULL;

ready=p1;

ready->next=c1;//初始化为生产进程在前,消费进程在后

c1->next=NULL;

b_s1=NULL;

b_s2=NULL;//阻塞进程为NULL

pc=0;

con_cnt=0; //消费计数器

}

void p(int s){

if(s==1){ //p(s1)

s1--;

if(s1<0)

block(1); //阻塞当前生产进程

else{

printf("\t* s1信号申请成功!\n");

ready->breakp=pc; //保存断点

}

}

else{ //p(s2)

s2--;

if(s2<0)

block(2);//阻塞当前消费进程

else{

printf("\t* s2信号申请成功!\n");

ready->breakp=pc; //保存断点

}

}

}

void v(int s){

if(s==1){ //v(s1)

s1++;

if(s1<=0)

wakeup(1); //唤醒生产进程

ready->breakp=pc; //保存断点

}

else{ //v(s2)

s2++;

if(s2<=0)

wakeup(2);//唤醒消费进程

ready->breakp=pc; //保存断点

}

}

void block(int s){//阻塞函数的定义

link p;

int num1=0;

int num2=0;

if(s==1){//生产进程

strcpy(p1->state,"Block");//改变状态

strcpy(p1->reason,"S1");//说明原因

p=b_s1;

while(p){

num1++;

p=p->next;//p的值为NULL,表示队尾

}

if(!b_s1)

b_s1=p1;

else

p=p1;

p1->next=NULL;

printf("\t* p1生产进程阻塞了!\n");

ready->breakp=pc; //保存断点

ready=ready->next;//在就绪队列中去掉,指向下一个

num1++;

}

else{//消费进程

strcpy(c1->state,"Block");

strcpy(c1->reason,"S2");

p=b_s2;

while(p){

num2++;

p=p->next;//p的值为NULL,表示队尾

}

if(!b_s2)

b_s2=c1;

else

p=c1;

ready->breakp=pc; //保存断点

ready=ready->next;//在就绪队列中去掉,指向下一个

c1->next=NULL;

printf("\t* c1消费进程阻塞了!\n");

num2++;

}

printf("\t* 阻塞的生产进程个数为:%d\n",num1);

printf("\t* 阻塞的消费进程个数为:%d\n",num2);

}

void wakeup(int s){//唤醒函数的定义

link p;

link q=ready;

if(s==1){ //唤醒b_s1队首进程,生产进程队列

p=b_s1;

b_s1=b_s1->next;//阻塞指针指向下一个阻塞进程

strcpy(p->state,"Ready");

strcpy(p->reason,"Null");

while(q)//插入就绪队列

q=q->next;

q=p;

p->next=NULL;

printf("\t* p1生产进程唤醒了!\n");

}

else{ //唤醒b_s2队首进程,消费进程队列

p=b_s2;

b_s2=b_s2->next;//阻塞指针指向下一个阻塞进程

strcpy(p->state,"Ready");

strcpy(p->reason,"Null");

while(q->next)//插入就绪队列

q=q->next;

q->next=p;

p->next=NULL;

printf("\t* c1消费进程唤醒了!\n");

}

}

void control() //处理器调度程序

{

int rd;

int num=0;

link p=ready;

if(ready==NULL) //若无就绪进程,结束

return;

while(p) //统计就绪进程个数

{

num++;

p=p->next;//最终p变为NULL

}

printf("\t* 就绪进程个数为:%d\n",num);

time_t t;

srand((unsigned) time(&t));

rd=rand()%num;//随机函数产生随机数

if(rd==1){

p=ready;

ready=ready->next;

ready->next=p;

p->next=NULL;

strcpy(ready->state,"Run");

strcpy(ready->next->state,"Ready");

}

else

strcpy(ready->state,"Run");

pc=ready->breakp;

}

void processor(){ //模拟处理器指令执行

if(strcmp(ready->name,"Producer")==0) //当前进程为生产者switch(pc)

{

case 0://produce

printf("\t* 生产者生产了字符%c\n",str[sp]);

rec_p[rp1]=str[sp];//添加到生产记录

sp=(sp+1)%len;

pc++;

ready->breakp=pc; //保存断点

break;

case 1: //p(s1)

pc++;

p(1);

break;

case 2: //put

buffer[in]=rec_p[rp1]; //放到缓冲区

printf("\t* %c字符成功入驻空缓存!\n",buffer[in]);

rp1++;

in=(in+1)%BUF;

pc++;

ready->breakp=pc; //保存断点

break;

case 3: //v(s2)

pc++;

printf("\t* 释放一个s2信号\n");

v(2);

break;

case 4://goto01

printf("\t* 生产进程goto 0 操作\n");

pc=0;

count--; //剩余字符个数减1

printf("\t* 剩余字符count=%d个\n",count);

ready->breakp=pc; //保存断点

if(count<=0){ //生产结束

printf("\t* 生产者结束生产!\n");

strcpy(p1->state,"Stop");

strcpy(p1->reason,"Null");

ready->breakp=-1;

ready=ready->next;//在就绪队列中去掉

}

}

else //当前进程为消费者

switch(pc)

{

case 0: //p(s2)

pc++;

p(2);

break;

case 1: //get

printf("\t* 消费者取字符!\n");

temp=buffer[out];

out=(out+1)%BUF;

pc++;

ready->breakp=pc; //保存断点

break;

case 2: //v(s1)

pc++;

printf("\t* 释放一个s1\n");

v(1);

break;

case 3: //consume

printf("\t* 消费了字符%c\n",temp);

rec_c[rp2]=temp;//添加到消费记录

rp2++;

con_cnt++;

if(con_cnt>=len){

strcpy(c1->state,"Stop");//完成态

c1->breakp=-1;

return;

}

pc++;

ready->breakp=pc; //保存断点

break;

case 4: //goto0

printf("\t* 消费进程goto 0 操作\n");

pc=0;

ready->breakp=pc; //保存断点

}

}

void print(){

int i,j;

printf("————————生产者消费者模拟———————\n");

printf("* 模拟过程的字符串为:\t");

printf("%s\n",&str);

printf("* 已生产:");

for(j=0;j<=rp1;j++)

printf("%c",rec_p[j]);

printf("\n* 空缓存:");

for(j=rp2;j<=rp1;j++)

printf("%c",buffer[j]);

printf("\n* 已消费:");

for(j=0;j<=rp2;j++)

printf("%c",rec_c[j]);

printf("\n———————进程控制块的信息————————\n");

printf("进程名\t\t状态\t等待原因\t断点\n");

printf("%s\t%s\t%s\t\t%d\n\n",p1->name,p1->state,p1->reason,p1->b reakp);

printf("%s\t%s\t%s\t\t%d\n",c1->name,c1->state,c1->reason,c1->bre

akp);

printf("———————————————————————\n");

printf("1.继续 0.退出\n");

scanf("%d",&i);

if(i==0){

exit(0);

}

}

4、main头文件代码如下:

#include "a.h"

#include "b.h"

#include "c.h"

void main(){

printf("*生产者消费者模拟\n");

printf("—————————\n");

printf("*请输入字符串:\n");

scanf("%s",str); //string数组存放将要产生的字符

len=strlen(str);

count=len; //输入字符的个数

init(); //初始化

while(con_cnt

{

system("cls"); //清屏操作

printf("—————————模拟指令流程————————\n");

control(); //处理器调度程序

processor(); //模拟处理器指令执行

print(); //输出显示各个信息

}

printf("\n程序结束!\n");

}

六、运行结果截图:

p_v操作例题

1.某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,则厅外的购票者可立即进入,否则需在外面等待。若把一个购票者看作一个进程,请用PV操作实现管理。 解:定义一个信号量S,初值为20 parbegin process pl(l=1,2,……) begin wait(S); 进入售票厅; 购票; 退出; signal(S) end 2.桌上有一空盘,允许存放一个水果,爸爸可向盘内放苹果,妈妈可向盘内放桔子,儿子专等吃盘内的桔子,女儿专等吃盘中的苹果,请用P、V 操作实现爸爸、妈妈、儿子、女儿四个并发进程的同步与互斥。 int S=1;int Sa=0;int Sb=0; main() {cobegin father(); mather(); son(); daughter(); coend} father() mather() {while(1) { while(1) {p(S); {p(S) ; 将一个苹果放入盘中将一个桔子放入盘中 V(Sa);} V(Sb);} } } son() daughter()

{ while(1) { while(1) {p(Sb); { p(Sa); 从盘中取出桔子从盘中取出苹果 V(S);吃桔子;} V(S);吃苹果;} } 3.生产围棋的工人不小心把相等数量的黑子和白子混装在一个盒子里,现在要用自动分拣系统把黑子和白子分开,该系统由两个并发执行的进程PA和PB组成,系统功能如下: (1)PA专拣黑子,PB专拣白子; (2)每个进程每次只拣一个子,当一个进程拣子时,不允许另一个进程去拣子; (3)当一个进程拣一个子(黑或白)后,必须让另一个进程去拣一个子(白或黑) 请回答:①这两个并发进程之间的关系是同步还是互斥 ②写出PV操作管理时应定义的信号量及其初值。 ③根据定义的信号量,写出用PV操作管理两个并发进程的程序 答:①两个进程之间是同步关系 ②定义两个信号量S1和S2,初值为1和0 ③process PA process PA begin begin repeat repeat wait(S1) wait(S2) 拣黑子拣白子 signal(S2) signal(S1) until false until false end end 4.有一阅览室,读者进入时必须先在一张登记表上登记,该表为每一座位列出一个表目,包括座号、姓名,读者离开时要注销登记信息;假若阅览室共有100个座位。试用信号量和PV操作来实现用户进程的同步算法。 解:设置如下3个信号量 seat:表示阅览室中空座位数,其初值为100.

计算机操作系统习题及答案

1)选择题 (1)为多道程序提供的可共享资源不足时,可能出现死锁。但是,不适当的 _C__ 也可能产生死锁。 A. 进程优先权 B. 资源的线性分配 C. 进程推进顺序 D. 分配队列优先权 (2)采用资源剥夺法可以解除死锁,还可以采用 _B___ 方法解除死锁。 A. 执行并行操作 B. 撤消进程 C. 拒绝分配新资源 D. 修改信号量 (3)发生死锁的必要条件有四个,要防止死锁的发生,可以通过破坏这四个必要条件之一来实现,但破坏 _A__ 条件是不太实际的。 A. 互斥 B. 不可抢占 C. 部分分配 D. 循环等待 (4)为多道程序提供的资源分配不当时,可能会出现死锁。除此之外,采用不适当的_ D _ 也可能产生死锁。 A. 进程调度算法 B. 进程优先级 C. 资源分配方法 D. 进程推进次序 (5)资源的有序分配策略可以破坏 __D___ 条件。 A. 互斥使用资源 B. 占有且等待资源 C. 非抢夺资源 D. 循环等待资源 (6)在 __C_ 的情况下,系统出现死锁。 A. 计算机系统发生了重大故障 B. 有多个封锁的进程同时存在 C. 若干进程因竞争资源而无休止地相互等待他方释放已占有的资源 D. 资源数大大小于进程数或进程同时申请的资源数大大超过资源总数 (7)银行家算法在解决死锁问题中是用于 _B__ 的。 A. 预防死锁 B. 避免死锁 C. 检测死锁 D. 解除死锁 (8)某系统中有3个并发进程,都需要同类资源4个,试问该系统不会发生死锁的最少资源数是 _C__ 。 A. 12 B. 11 C. 10 D. 9 (9)死锁与安全状态的关系是 _A__ 。 A. 死锁状态一定是不安全状态 B. 安全状态有可能成为死锁状态 C. 不安全状态就是死锁状态 D. 死锁状态有可能是安全状态 (10)如果系统的资源有向图 _ D __ ,则系统处于死锁状态。 A. 出现了环路 B. 每个进程节点至少有一条请求边 C. 没有环路 D. 每种资源只有一个,并出现环路 (11)两个进程争夺同一个资源,则这两个进程 B 。

生产者消费者问题设计与实现

操作系统课程设计任务书

目录

1.选题背景 生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品。解决生产者/消费者问题的方法可分为两类:(1)采用某种机制保护生产者和消费者之间的同步;(2)在生产者和消费者之间建立一个管道。第一种方式有较高的效率,并且易于实现,代码的可控制性较好,属于常用的模式。第二种管道缓冲区不易控制,被传输数据对象不易于封装等,实用性不强。因此本文只介绍同步机制实现的生产者/消费者问题。 同步问题核心在于:如何保证同一资源被多个线程并发访问时的完整性。常用的同步方法是采用信号或加锁机制,保证资源在任意时刻至多被一个线程访问。Java语言在多线程编程上实现了完全对象化,提供了对同步机制的良好支持。在Java中一共有四种方法支持同步,其中前三个是同步方法,一个是管道方法。 2.设计思路 .生产者—消费者问题是一种同步问题的抽象描述。 计算机系统中的每个进程都可以消费或生产某类资源。当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者。 而当某个进程释放资源时,则它就相当一个生产者 3.过程论述 首先,生产者和消费者可能同时进入缓冲区,甚至可能同时读/写一个存储单元,将导致执行结果不确定。这显然是不允许的。所以,必须使生产者和消费者互斥进入缓冲区。即某时刻只允许一个实体(生产者或消费者)访问缓冲区,生产者互斥消费者和其他任何生产者。 其次,生产者不能向满的缓冲区写数据,消费者也不能在空缓冲区中取数据,即生产者与消费者必须同步。当生产者产生出数据,需要将其存入缓冲区之前,首先检查缓冲区中是否有“空”存储单元,若缓冲区存储单元全部用完,则生产者必须阻塞等待,直到消费者取走一个存储单元的数据,唤醒它。若缓冲区内有“空”存储单元,生产者需要判断此时是否有别的生产者或消费者正在使用缓冲区,若是有,则阻塞等待,否则,获得缓冲区的使用权,将数据存入缓冲区,释放缓冲区的使用权。消费者取数据之前,首先检查缓冲区中是否存在装有数据的存储单元,若缓冲区为“空”,则阻塞等待,否则,判断缓冲区是否正在被使用,

操作系统习题及答案一

习题一操作系统概论 选择题 1. 计算机的操作系统是一种() ■ A. 应用软件 B.系统软件 C.工其软件D 字表处理软件 2. 批处理系统的主要缺点是( ). A. CPU 的利用率不高 B.失去了交互性 C.不具备并行性 D.以上都不是 3. 计算机操作系统的功能是( ). A. 把源程序代码转换为标准代码 B. 实现计算机用户之间的相互交流 C. 完成计算机硬件与软件之间的转换 D. 控制、管理计算机系统的资源和程序的执行 4. 在分时系统中,时间片一定时, (),响应时间越长. A. 内存越多 B.用户数越多 C.内存越少 D 用户数 越少 5. 操作系统的( )管理部分负责对进程进行调度 . A?主存储器 B.控制器 C.运算器 D 处理机 6. 从用户的观点看,操作系统是( ). A. 用户与计算机之间的接口 B. 控制和管理计算机资源的软件 C. 合理地组织计算机工作流程的软件 D. 由若干层次的程序按一定的结构组成的有机体 7. 操作系统的功能是进行处理机管理、 ()管理、设备管理及信息管理 9. 操作系统是现代计算机系统不可缺少的组成部分,是 为了提咼计算机的( 户使用计算机而配备的一种系统软件 . 10. 所谓()是指将一个以上的作业放入主存,并且同时处于运行状态,这些作业共享处 和外围设备等其他资源. A.多重处理 B.多道程序设计 C.实时处理 D?并行执行 11. ()操作系统允许在一台主机上同时连接多台终端,多个用户可以通过各自的终端同 A. CPU 的利用率不高 C.不具备并行性 B.资源利用率 D.以上都不是 A.进程 B.存储器 C.硬件 D.软件 8.操作系统中采用多道程序设计技术提高 CPU 和外部设备的() A.利用率 B.效率 C.稳定性 D.兼容性 )和方便用 理机的时间

生产者消费者问题模拟实现(z)

生产者-消费者实验 1.1实验目的和要求 1.1.1实验目的 操作系统的基本控制和管理控制都围绕着进程展开,其中的复杂性是由于支持并发和并发机制而引起的。自从操作系统中引入并发程序设计后,程序的执行不再是顺序的,一个程序未执行完而另一个程序便已开始执行,程序外部的顺序特性消失,程序与计算不再一一对应。并发进程可能是无关的,也可能是交互的。然而,交互的进程共享某些变量,一个进程的执行可能会影响其他进程的执行结果,交互的并发进程之间具有制约关系、同步关系。其中典型模型便是生产者-消费者模型。 本实验通过编写和调试生产者-消费者模拟程序,进一步认识进程并发执行的实质,加深对进程竞争关系,协作关系的理解,掌握使用信号量机制与P、V操作来实现进程的同步与互斥。 1.1.2实验要求 1.用高级语言编写一个程序,模拟多个生产者进程和多个消费者进程并发执行,并采用信号量机制与P、V操作实现进程间同步与互斥。 2.撰写实验报告,报告应包含以下内容: (1)实验目的; (2)实验内容; (3)设计思路; (4)程序流程图; (5)程序中主要数据结构和函数说明; (6)带注释的源程序代码; (7)程序运行结果及分析; (8)实验收获与体会。 1.2预备知识 1.2.1生产者—消费者问题 生产者—消费者问题表述如下:如图3.1所示,有n个生产者和m个消费者,连接在具

有k个单位缓冲区的有界环状缓冲上,故又称有界缓冲问题。生产者不断生成产品,只要缓冲区未满,生产者进程pi所生产的产品就可投入缓冲区;类似的,只要缓冲区非空,消费者进程cj就可以从缓冲区取走并消耗产品。 图 3.1 生产者—消费者问题示意图 著名的生产者—消费者问题(producer-consumer problem)是计算机操作系统中并发进程内在关系的一种抽象,是典型的进程同步问题。在操作系统中,生产者进程可以是计算进程、发送进程,而消费者进程可以是打印进程、接收进程等,解决好生产者—消费者问题就解决了一类并发进程的同步问题。 操作系统实现进程同步的机制称为同步机制,它通常由同步原语组成。不同的同步机制采用不同的同步方法,迄今已设计出多种同步机制,本实验采用最常用的同步机制:信号量及PV操作。 1.2.2信号量与PV操作 1965年,荷兰计算机科学家E.W.Dijkstra提出新的同步工具——信号量和PV操作,他将交通管制中多种颜色的信号灯管理方法引入操作系统,让多个进程通过特殊变量展开交互。一个进程在某一关键点上被迫停止直至接收到对应的特殊变量值,通过这一措施任何复杂的进程交互要求均可得到满足,这种特殊变量就是信号量(semaphore)。为了通过信号量传送信号,进程可利用P和V两个特殊操作来发送和接收信号,如果协作进程的相应信号仍未到达,则进程被挂起直至信号到达为止。 在操作系统中用信号量表示物理资源的实体,它是一个与队列有关的整型变量。具体实现时,信号量是一种变量类型,用一个记录型数据结构表示,有两个分量:一个是信号量的值,另一个是信号量队列的指针。信号量在操作系统中主要用于封锁临界区、进程同步及维护资源计数。除了赋初值之外,信号量仅能由同步原语PV对其操作,不存在其他方法可以检查或操作信号量,PV操作的不可分割性确保执行的原子性及信号量值的完整性。利用信号量和PV操作即可解决并发进程竞争问题,又可解决并发进程协作问题。 信号量按其用途可分为两种:公用信号量,联系一组并发进程,相关进程均可在此信号量上执行PV操作,用于实现进程互斥;私有信号量,联系一组并发进程,仅允许此信号量所拥有的进程执行P操作,而其他相关进程可在其上执行V操作,初值往往为0或正整数,多用于并发进程同步。

PV操作的例题

PV操作的例题 一、线程是进程的一个组成部分,一个进程可以有多个线程,而且至少有一个可执行线程。进程的多个线程都在进程的地址空间内活动。 资源是分给进程的,而不是分给线程的,线程需要资源时,系统从进程的资源配额中扣除并分配给它。处理机调度的基本单位是线程,线程之间竞争处理机,真正在处理机上运行的是线程。线程在执行过程中,需要同步。 二、在计算机操作系统中,PV操作是进程管理中的难点。 首先应弄清PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下: P(S):①将信号量S的值减1,即S=S-1; ②如果S>=0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。 V(S):①将信号量S的值加1,即S=S+1; ②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。 PV操作的意义:我们用信号量及PV操作来实现进程的同步和互斥。PV操作属于进程的低级通信。 什么是信号量?信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。注意,信号量的值仅能由PV操作来改变。 一般来说,信号量S>=0时,S表示可用资源的数量。执行一次P操作意味着请求分配一个单位资源,因此S的值减1;当S<0时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。而执行一个V操作意味着释放一个单位资源,因此S 的值加1;若S?0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。 利用信号量和PV操作实现进程互斥的一般模型是: 进程P1 进程P2 ……进程Pn ……………… P(S);P(S);P(S); 临界区;临界区;临界区; V(S);V(S);V(S); …………………… 其中信号量S用于互斥,初值为1。 使用PV操作实现进程互斥时应该注意的是: (1)每个程序中用户实现互斥的P、V操作必须成对出现,先做P操作,进临界区,后做V操作,出临界区。若有多个分支,要认真检查其成对性。 (2)P、V操作应分别紧靠临界区的头尾部,临界区的代码应尽可能短,不能有死循环。(3)互斥信号量的初值一般为1。 利用信号量和PV操作实现进程同步 PV操作是典型的同步机制之一。用一个信号量与一个消息联系起来,当信号量的值为0时,表示期望的消息尚未产生;当信号量的值非0时,表示期望的消息已经存在。用PV操作实现进程同步时,调用P操作测试消息是否到达,调用V操作发送消息。 使用PV操作实现进程同步时应该注意的是:

操作系统例题讲解

操作系统例题讲解 一、调度算法 对如下表所示的5个进程: 采用可剥夺的静态最高优先数算法进行调度(不考虑系统开销)。 问 题: ⑴ 画出对上述5个进程调度结果的Gantt 图; ⑵ 计算5个进程的平均周转时间、平均带权周转时间。 解: ⑴ 调度结果的Gantt 图如下: 0 2 4 5 7 9 10 12 14 (2) 时间计算: 二、存储管理 某系统采用虚拟页式存储管理方式,页面大小为2KB ,每个进程分配的页框数固定为4页。采用局部置换策略,置换算法采用改进的时钟算法,当有页面新装入内存时,页表的时钟指针指向新装入页面的下一个在内存的表项。设当前进程P 的页表如下(“时钟”指针指向逻辑页面3的表项): 逻辑页号 0 1 2 3 4 5 问 题: ⑴ 当进程P 依次对逻辑地址执行下述操作: ① 引用 4C7H ; ② 修改 19B4H ; ③ 修改 0C9AH ; 写出进程P 的页表内容; ⑵ 在 ⑴ 的基础上,当P 对逻辑地址27A8H 进行访问, 该逻辑地址对应的物理地址是多少?

解:页面大小为2KB,2KB=2×210=211, 即逻辑地址和物理地址的地址编码的低11位为页内偏移; ⑴①逻辑地址4C7H=0100 1100 0111B,高于11位为0,所以该地址访问逻辑页面0; 引用4C7H,页表表项0:r=1; ②逻辑地址19B4H=0001 1001 1011 0100B,高于11位为3,所以该地址访问逻辑页面3; 修改19B4H,页表表项3:r=1, m=1; ③逻辑地址0C9AH=0000 1100 1001 1010B,高于11位为1,所以该地址访问逻辑页面1; 逻辑页1不在内存,发生缺页中断; ①、②两操作后,P的页表如下: 逻辑页号 1 2 3 4 5 按改进的时钟算法,且时钟指针指向表项3,应淘汰0页面, 即把P的逻辑页面1读到内存页框101H,页表时钟指针指向表项2。 并执行操作:修改0C9AH。 经上述3个操作后,P的页表如下: 逻辑页号 1 2 3 4 5 ⑵逻辑地址27A8H=0010 0111 1010 1000B,高于11位为4,所以该地址访问逻辑页面4; 页面4不在内存,发生缺页中断;按改进的时钟算法,淘汰页面2,页面4读到110H页框, 所以,逻辑地址27A8H对应的物理地址为: 0001 0001 0000 111 1010 1000B=887A8H。 三、设备与I/O管理 设系统磁盘只有一个移动磁头,磁道由外向内编号为:0、1、2、……、199;磁头移动一个磁道所需时间为1毫秒;每个磁道有32 个扇区;磁盘转速R=7500r/min. 系统对磁盘设备的I/O请求采用N-Step Look (即N-Step Scan,但不必移动到磁道尽头),N=5。设当前磁头在60号磁道,向内移动;每个I/O请求访问磁道上的1个扇区。现系统依次接收到对磁道的I/O请求序列如下: 50, 20, 60, 30, 75, 30, 10, 65, 20, 80,15, 70 问题: ⑴写出对上述I/O请求序列的调度序列,并计算磁头引臂的移动量; ⑵计算:总寻道时间(启动时间忽略)、总旋转延迟时间、总传输时间和总访问处理时间。 解:⑴考虑序列中有重复磁道的I/O请求,调度序列为: 60→75→50→30→20→15→10→65→70→80 磁头移动量=(75-60)+(75-50)+(50-30)+(30-20)+ (20-15)+(15-10)+(65-10)+(70-65)+(80-70) =15+25+20+10+5+5+55+5+10=155(磁道)

操作系统实验报告生产者消费者问题

操作系统课程设计 一.实验目标 完成N个生产者和M个消费者线程之间的并发控制,N、M不低于30,数据发送和接收缓冲区尺寸不小于20个(每个产品占据一个)。 其中生产者线程1、3、5、7、9生产的产品供所有奇数编号的消费者线程消费,只有所有奇数编号的消费者线程都消费后,该产品才能从缓冲区中撤销。 其中生产者线程2、4、6、8、10生产的产品所有偶数编号的消费者线程都可消费,任一偶数编号消费者线程消费该消息后,该产品都可从缓冲区中撤销。 其中11-20号生产者线程生产的产品仅供对应编号的消费者线程消费。 其他编号生产者线程生产的产品可由任意的消费者线程消费。 每个生产线程生产30个消息后结束运行。如果一个消费者线程没有对应的生产者线程在运行后,也结束运行。所有生产者都停止生产后,如果消费者线程已经

没有可供消费的产品,则也退出运行。 二.实验原理 2.1原理 生产者与消费者线程采用posix互斥锁机制进行互斥进入各自的代码段,只有采用互斥锁临界区代码段才可以不被打扰的执行;同步机制采用的是posix条件变量pthread_cond_wait和pthraed_cond_signal进行同步的。 线程间的通信采用的是共享内存机制。(注:所有的共享内存块是在进程里建立的,线程只需链接上各自的共享内存块即可,每一块共享内存的大小是100). 在这里共享内存设置成一个100的数组。 具体实施:(1)为1.3.5.7.9建立一个共享内存1号,1.3.5.7.9生产者线程生产的产品都放入这块共享内存缓冲区,所有奇数的消费者线程要消费的话,只需在消费者线程中链接上这块共享内存,就可以直接消费1.3.5.7.9生产者线程生产的产品。 (2)为2.4.6.8.10建立一块共享内存2号。2.4.6.8.10生产的产品都放入2号共享内存缓冲区,所有的偶数的消费者线程只要链接上2号缓冲区,就可以消费2.4.6.8.10生产的产品。当偶数消费者线程消费产品后,产品即可从缓冲区撤销,方法是在消费线程里将消费的产品在共享内存数组里置0。 (3)为11--20的每一对生产者消费者线程建立一块共享内存,编号11--20. 11--20号的消费者线程能链接各自的共享内存缓冲区或奇数或偶数共享内存缓冲区,即11--20号的生产者生产的产品只能被对应的消费者消费而11-20的奇数消费者可以消费缓冲区1的产品,偶数消费者可消费缓冲区2的产品。 (4)为21--30号的生产者消费者线程只建立一块共享内存21号,21--30号生产者生产的产品都放入21号缓冲区,所有的消费者线程只要链接上21号共享内存,就可以消费21--30号生产者生产的产品。 用于控制线程是否结束的方法是:设置一个全局变量t,在生产者线程里进行t++,在生产者线程里当t达到10时(注:为了很好的测试程序,本应该在生产者生产30个产品时菜结束线程,这里设置成了10),就break跳出while()循环,这样线程自然就终止。同样在消费者线程里,当t达到10时,这里不用t++,就跳出while()循环,消费者线程自然就终止。这样设计满足了,当生产者生产30个产品时就终止生产者线程,生产者线程终止消费者线程也得终止的要求。 生产者从文件so.txt读取数据进行生产,这个文件里的数据是一连串的字符从a--z的组合,没有空格或其他字符。文件内容的格式没有特殊要求。

计算机操作系统习题及答案

第二章计算机操作系统 一、填空题 1. 在Windows XP中,进行系统软、硬件设置的文件夹称为______。 2. 在Windows XP系统中文标点方式下,键入符号“”对应的中文标点是______。 3. 在Windows XP默认环境中,要改变“屏幕保护程序”的设置,应首先双击“控制面板”窗口中的______图标。 4. 用Windows XP的“记事本”所创建文件的缺省扩展名是______。 5. 在Windows XP中,要添加Windows组件,必须打开______窗口。 6. 当选定文件或文件夹后,欲改变其属性设置,可以单击鼠标______键,然后在弹出的菜单中选择“属性”命令。 7. 在Windows XP中,当用鼠标左键在不同驱动器之间拖动对象时,系统默认情况下,该操作的作用是______。 8. 在Windows XP的“资源管理器”窗Vl中,将文件以列表方式显示,可按~、类型、大小、日期及自动排列五种规则排序。 9. 在WindoWS XP中,若要更改任务栏的属性,可以右键单击______空白处,再从弹出的菜单中选择“属性”命令来实现更改。 10. 在Windows XP环境中,选定多个不相邻文件的操作方法是:单击第一个文件,然后按住______键的同时,单击其它待选定的文件。 11. 在Windows xP中,利用“控制面板”窗口中的______向导工具,可以安装任何类型的新硬件。 12. 在Windows XP中,若要删除选定的文件,可直接按______键。 13. 按操作系统分类,UNIX操作系统是______。 14. 在Windows xP默认环境中,用于中英文输入方式切换的组合键是______。 15. 在Windows XP中,若系统长时间不响应用户的要求,为了结束该任务,使用______组合键。 二、单项选择题 1. Windows XP的“开始”菜单包括了Windows XP系统的()。 A. 主要功能 B. 全部功能 C. 部分功能 D. 初始化功能 2. 下列不可能出现在Windows XP中的“资源管理器”窗口左侧窗格中的选项是()。 A. 我的电脑 B. 桌面 C. use(登录的账户名)的文档 D. 资源管理器 3. 在Windows XP中,能更改文件名的操作是()。 A. 右键单击文件名,选择“重命名”命令,键入新文件名后按Enter键 B. 左键单击文件名,选择“重命名”命令,键入新文件名后按Enter键 C. 右键双击文件名,选择“重命名”命令,键入新文件名后按Enter键 D. 左键双击文件名,选择“重命名”命令,键人新文件名后按Enter键 4. 在Windows XP中,全角方式下输入的数字应占的字节数是()。 A. 1 B. 2 C. 3 D. 4 5. Windows XP中将信息传送到剪贴板不正确的方法是()。 A. 用“复制”命令把选定的对象送到剪贴板 B. 用“剪切”命令把选定的对象送到剪贴板 C. 用Ctrl+V组合键把选定的对象送到剪贴板 D. Alt+PrintScreen把当前窗口送到剪贴板 6. 在windows XP中,欲选定当前文件夹中的全部文件和文件夹对象,可使用的组合键是()。 A. Ctrl+V B. Ctrl+A C. Ctrl+X D. Ctrl+D 7. 下列文件名,()是非法的Windows XP文件名。 A. ThiS is my file B. 关于改进服务的报告

经典PV操作讲解和练习题

在计算机操作系统中,PV操作是进程管理中的难点。 首先应弄清PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下: P(S):①将信号量S的值减1,即S=S-1; ②如果S30,则该进程继续执行;否则该进程置为等待状态,排入等待队列。 V(S):①将信号量S的值加1,即S=S+1; ②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。 PV操作的意义:我们用信号量及PV操作来实现进程的同步和互斥。PV操作属于进程的低级通信。 什么是信号量?信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。注意,信号量的值仅能由PV操作来改变。 一般来说,信号量S30时,S表示可用资源的数量。执行一次P操作意味着请求分配一个单位资源,因此S的值减1;当S<0时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。而执行一个V操作意味着释放一个单位资源,因此S 的值加1;若S£0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。 利用信号量和PV操作实现进程互斥的一般模型是: 进程P1 进程P2 ……进程Pn ……………… P(S); P(S); P(S); 临界区;临界区;临界区; V(S); V(S); V(S); …………………… 其中信号量S用于互斥,初值为1。 使用PV操作实现进程互斥时应该注意的是: (1)每个程序中用户实现互斥的P、V操作必须成对出现,先做P操作,进临界区,后做V操作,出临界区。若有多个分支,要认真检查其成对性。 (2)P、V操作应分别紧靠临界区的头尾部,临界区的代码应尽可能短,不能有死循环。(3)互斥信号量的初值一般为1。 利用信号量和PV操作实现进程同步 PV操作是典型的同步机制之一。用一个信号量与一个消息联系起来,当信号量的值为0时,表示期望的消息尚未产生;当信号量的值非0时,表示期望的消息已经存在。用PV操作实现进程同步时,调用P操作测试消息是否到达,调用V操作发送消息。 使用PV操作实现进程同步时应该注意的是: (1)分析进程间的制约关系,确定信号量种类。在保持进程间有正确的同步关系情况下,哪个进程先执行,哪些进程后执行,彼此间通过什么资源(信号量)进行协调,从而明确要设置哪些信号量。

操作系统习题及答案一

习题一操作系统概论 一.选择题 1. 计算机的操作系统是一种(). A. 应用软件 B.系统软件 C.工其软件D字表处理软件 2. 批处理系统的主要缺点是(). A. CPU 的利用率不高 B .失去了交互性 C.不具备并行性 D.以上都不是 3.计算机操作系统的功能是(). A. 把源程序代码转换为标准代码 B .实现计算机用户之间的相互交流 C. 完成计算机硬件与软件之间的转换 D. 控制、管理计算机系统的资源和程序的执行 4. 在分时系统中,时间片一定时,(),响应时间越长. A.内存越多 B.用户数越多 C.内存越少D用户数越少 5.操作系统的()管理部分负责对进程进行调度. A?主存储器 B.控制器 C.运算器D处理机 6. 从用户的观点看,操作系统是(). A. 用户与计算机之间的接口 B. 控制和管理计算机资源的软件 C. 合理地组织计算机工作流程的软件 D. 由若干层次的程序按一定的结构组成的有机体 7. 操作系统的功能是进行处理机管理、()管理、设备管理及信息管理. A.进程 B.存储器 C.硬件 D.软件 8. 操作系统中采用多道程序设计技术提高CPU 和外部设备的(). A.利用率 B.效率 C.稳定性 D.兼容性 9. 操作系统是现代计算机系统不可缺少的组成部分,是为了提高计算机的()和方便用户使用计算机而配备的一种系统软件. A. CPU的利用率不高 B.资源利用率 C.不具备并行性 D.以上都不是 10. 所谓()是指将一个以上的作业放入主存,并且同时处于运行状态,这些作业共享处理机的时间和外围设备等其他资源. A.多重处理 B.多道程序设计 C.实时处理D?并行执行 11.()操作系统允许在一台主机上同时连接多台终端,多个用户可以通过各自的终端同 时交互地使用计算机. A. 网络 B. 分布式 C.分时 D.实时 12.分时操作系统通常采用()策略为用户服务. A. 可靠性和灵活性 B.时间片轮转 C .时间片加权分配 D. 短作业优先 13.系统调用是由操作系统提供的内部调用,它(). A.直接通过键盘交互方式使用 B.只能通过用户程序间接使用

架构设计:生产者消费者模式

架构设计:生产者/消费者模式 为了方便阅读,把本系列帖子的目录整理如下: 0、概述 1、如何确定数据单元 2、队列缓冲区 3、环形缓冲区 4、双缓冲区

[0]:概述 今天打算来介绍一下“生产者/消费者模式”,这玩意儿在很多开发领域都能派上用场。由于该模式很重要,打算分几个帖子来介绍。今天这个帖子先来扫盲一把。如果你对这个模式已经比较了解,请跳过本扫盲帖,直接看下一个帖子(关于该模式的具体应用)。 看到这里,可能有同学心中犯嘀咕了:在四人帮(GOF)的23种模式里面似乎没听说过这种嘛!其实GOF那经典的23种模式主要是基于OO的(从书名《Design Patterns: Elements of Reusable Object-Oriented Software》就可以看出来)。而Pattern实际上即可以是OO的Pattern,也可以是非OO的Pattern的。 ★简介 言归正传!在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、函数、线程、进程等)。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者。 单单抽象出生产者和消费者,还够不上是生产者/消费者模式。该模式还需要有一个缓冲区处于生产者和消费者之间,作为一个中介。生产者把数据放入缓冲区,而消费者从缓冲区取出数据。大概的结构如下图。

为了不至于太抽象,我们举一个寄信的例子(虽说这年头寄信已经不时兴,但这个例子还是比较贴切的)。假设你要寄一封平信,大致过程如下: 1、你把信写好——相当于生产者制造数据 2、你把信放入邮筒——相当于生产者把数据放入缓冲区 3、邮递员把信从邮筒取出——相当于消费者把数据取出缓冲区 4、邮递员把信拿去邮局做相应的处理——相当于消费者处理数据 ★优点 可能有同学会问了:这个缓冲区有什么用捏?为什么不让生产者直接调用消费者的某个函数,直接把数据传递过去?搞出这么一个缓冲区作甚? 其实这里面是大有讲究的,大概有如下一些好处。 ◇解耦 假设生产者和消费者分别是两个类。如果让生产者直接调用消费者的某个方法,那么生产者对于消费者就会产生依赖(也就是耦合)。将来如果消费者的代码发生变化,可能会影响到生产者。而如果两者都依赖于某个缓冲区,两者之间不直接依赖,耦合也就相应降低了。

生产者与消费者问题(附源码)

操作系统实验报告 专业网络工程班级08102 学号姓名 课程名称操作系统学年2010-2011 学期下 课程类别专业必修■限选□任选□实践□实验时间2010年11月3日 实验名称 实验一:生产者与消费者问题 实验目的和要求 全面理解生产者与消费者问题模型,掌握解决该问题的算法思想,正确使用同步机制。 实验软硬件要求 Pentium ||| 450以上CPU 64MB以上内存 WINDOWS XP Visual C++6.0 实验内容、方法和步骤(可附页) 问题描述:一组生产者向一组消费者提供商品,共享一个有界缓冲池,生产者向其中放入商品,消费者从中取得商品。假定这些生产者和消费者互相等效,只要缓冲池未满,生产者可将商品送入缓冲池;只要缓冲池未空,消费者可从缓冲池取走一商品。 功能要求:根据进程同步机制,编写一个解决上述问题的程序,可显示缓冲池状态、放商品、取商品等过程。 具体参数:3个生产者进程,2个消费者进程; 缓冲区单元个数N=4; 在本程序中是缓冲区中的数从0变为1表示模拟生产一个产品,消费时则将对应缓冲区内的1变为0,为模拟消费一个产品。 实验结果(可附页) 见截图 小结 这次多线程的操作系统实验,使我对线程的概念以及多线程程序中线程间的运行有了更深的认识,同时也让我的编程能力得到了一定的提高。 这次做的用多线程实现生产者与消费者模型的实验,由于我的编程能力基础比较差,对线程也是一无所知,所以一开始觉得无从下手,但幸好老师给了充足的时间,我通过看网上找的视频资料以及请教同学才渐渐地有了一点概念,然后我试着从网上下了一些多线程的程序分析里面的语句,基本弄懂了多线程的原理。 评定成绩:批阅教师:年月日

计算机操作系统习题及答案

第3章处理机调度1)选择题 (1)在分时操作系统中,进程调度经常采用_D_ 算法。 A. 先来先服务 B. 最高优先权 C. 随机 D. 时间片轮转 (2)_B__ 优先权是在创建进程时确定的,确定之后在整个进程运行期间不再改变。 A. 作业 B. 静态 C. 动态 D. 资源 (3)__A___ 是作业存在的惟一标志。 A. 作业控制块 B. 作业名 C. 进程控制块 D. 进程名 (4)设有四个作业同时到达,每个作业的执行时间均为2小时,它们在一台处理器上按单道方式运行,则平均周转时间为_ B_ 。 A. l小时 B. 5小时 C. 2.5小时 D. 8小时 (5)现有3个同时到达的作业J1、J2和J3,它们的执行时间分别是T1、T2和T3,且T1<T2<T3。系统按单道方式运行且采用短作业优先算法,则平均周转时间是_C_ 。 A. T1+T2+T3 B. (T1+T2+T3)/3 C. (3T1+2T2+T3)/3 D. (T1+2T2+3T3)/3 (6)__D__ 是指从作业提交给系统到作业完成的时间间隔。 A. 运行时间 B. 响应时间 C. 等待时间 D. 周转时间 (7)下述作业调度算法中,_ C_调度算法与作业的估计运行时间有关。 A. 先来先服务 B. 多级队列 C. 短作业优先 D. 时间片轮转 2)填空题 (1)进程的调度方式有两种,一种是抢占(剥夺)式,另一种是非抢占(非剥夺)式。 (2)在_FCFS_ 调度算法中,按照进程进入就绪队列的先后次序来分配处理机。 (3)采用时间片轮转法时,时间片过大,就会使轮转法转化为FCFS_ 调度算法。 (4)一个作业可以分成若干顺序处理的加工步骤,每个加工步骤称为一个_作业步_ 。 (5)作业生存期共经历四个状态,它们是提交、后备、运行和完成。 (6)既考虑作业等待时间,又考虑作业执行时间的调度算法是_高响应比优先____ 。 3)解答题 (1)单道批处理系统中有4个作业,其有关情况如表3-9所示。在采用响应比高者优先调度算法时分别计算其平均周转时间T和平均带权周转时间W。(运行时间为小时,按十进制计算) 表3-9 作业的提交时间和运行时间

信号量地PV操作(例题)

???信号量的PV操作是如何定义的?试说明信号量的PV操作的物理意义。 参考答案:P(S):将信号量S减1,若结果大于或等于0,则该进程继续执行;若结果小于0,则该进程被阻塞,并将其插入到该信号量的等待队列中,然后转去调度另一进程。 V(S):将信号量S加1,若结果大于0,则该进程继续执行;若结果小于或等于0,则从该信号量的等待队列中移出一个进程,使其从阻塞状态变为就绪状态,并插入到就绪队列中,然后返回当前进程继续执行。 PV操作的物理含义:信号量S值的大小表示某类资源的数量。当S>0时,其值表示当前可供分配的资源数目;当S<0时,其绝对值表示S信号量的等待队列中的进程数目。每执行一次P操作,S值减1,表示请求分配一个资源,若S≥0,表示可以为进程分配资源,即允许进程进入其临界区;若S<0,表示已没有资源可供分配,申请资源的进程被阻塞,并插入S的等待队列中,S的绝对值表示等待队列中进程的数目,此时CPU将重新进行调度。每执行一次V操作,S值加1,表示释放一个资源,若S>0,表示等待队列为空;若S≤0,则表示等待队列中有因申请不到相应资源而被阻塞的进程,于是唤醒其中一个进程,并将其插入就绪队列。无论以上哪种情况,执行V操作的进程都可继续运行。 1、设公共汽车上,司机和售票员的活动分别是: 司机的活动:启动车辆; 正常行车; 到站停车; 售票员的活动: 关车门; 售票; 开车门; 在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用P、V操作实现它们的同步。 设两个信号量S和C,初值为S=0;C=0; 司机: L1:正常行车售票员: L2:售票 到站停车 P(S) V(S)开车门 P(C)关车门 启动开车 V(C) GO TO L1 GO TO L2 2、请用PV操作实现他们之间的同步关系: (1)桌上一个盘子,只能放一只水果。爸爸放苹果,妈妈放桔子,儿子只吃桔子,女儿只吃苹果。 (2)桌上一个盘子,只能放一只水果。爸爸放苹果,妈妈放桔子,儿子吃桔子、苹果。 参考答案: 第一步:确定进程 4个进程Father(爸爸)、Mother(妈妈)、Son(儿子)、Daughter(女儿) Father进程: 将苹果放入盘中

计算机操作系统习题及答案

第一章操作系统引论 一、单项选择题 1.操作系统是一种__________。 A.通用软件 B.系统软件 C.应用软件 D.软件包 2,操作系统的__________管理部分负责对进程进行调度。 A.主存储器 B.控制器 C.运算器D.处理机 3.操作系统是对__________进行管理的软件。 A.软件B.硬件 C,计算机资源 D.应用程序 4.从用户的观点看,操作系统是__________。 A.用户与计算机之间的接口 B.控制和管理计算机资源的软件 C.合理地组织计算机工作流程的软件 D.由若干层次的程序按一定的结构组成的有机体 5,操作系统的功能是进行处理机管理、_______管理、设备管理及文件管理。 A.进程 B.存储器 C.硬件 D.软件 6,操作系统中采用多道程序设计技术提高CPU和外部设备的_______。 A.利用率 B.可靠性 C.稳定性 D.兼容性 7.操作系统是现代计算机系统不可缺少的组成部分,是为了提高计算机的_______和方便用户使用计算机而配备的一种系统软件。 A. 速度B.利用率 C. 灵活性 D.兼容性 8.操作系统的基本类型主要有_______。 A.批处理系统、分时系统及多任务系统 B.实时操作系统、批处理操作系统及分时操作系统 C.单用户系统、多用户系统及批处理系统 D.实时系统、分时系统和多用户系统 9.所谓_______是指将一个以上的作业放入主存,并且同时处于运行状态,这些作业共享处理机的时间和外围设备等其他资源。 A. 多重处理 B.多道程序设计

C. 实时处理 D.并行执行 10. _______操作系统允许在一台主机上同时连接多台终端,多个用户可以通过各自的终端同时交互地使用计算机。 A.网络 D.分布式 C.分时 D.实时 11.如果分时操作系统的时间片一定,那么_______,则响应时间越长。 A.用户数越少B.用户数越多 C.内存越少 D. 内存越多 12,分时操作系统通常采用_______策略为用户服务。 A.可靠性和灵活性 B.时间片轮转 C.时间片加权分配 D,短作业优先 13. _______操作系统允许用户把若干个作业提交给计算机系统。 A.单用户 B,分布式 C.批处理 D.监督 14.在_______操作系统控制下,计算机系统能及时处理由过程控制反馈的数据并作出响应。 A.实时B.分时 C. 分布式 D.单用户 15.设计实时操作系统时,首先应考虑系统的_______。 A. 可靠性和灵活性B.实时性和可靠性 C. 灵活性和可靠性D.优良性和分配性 16.若把操作系统看作计算机系统资源的管理者,下列的_______不属于操作系统所管理的资源。 A. 程序 B.内存 C. CPU D.中断 二、填空题 1.操作系统的基本功能包括__①__管理、__②__管理、__③__管理、__④__管理。除此之外还为用户使用操作系统提供了用户接口。 2.如果一个操作系统兼有批处理、分时处理和实时处理操作系统三者或其中两者的功能,这样的操作系统称为_________。 3.在分时和批处理系统结合的操作系统中引入了“前台”和“后台”作业的概念,其目的是_________。 4.分时操作系统的主要特征有三个,即__①__、__②__和__③__。 5.实时操作系统与分时操作系统的主要区别是_________。

操作系统课程设计生产者-消费者问题附代码

枣庄学院 信息科学与工程学院 课程设计任务书题目:生产者-消费者问题的实现 姓名: 学号: 专业:计算机科学与技术 课程:操作系统 指导教师:刘彩霞职称:讲师完成时间:2012年5月----2012 年6月 枣庄学院信息科学与工程学院制 课程设计任务书及成绩评定

目录 第1章引言 (1) 1.1 设计背景 (1) 1.2 问题分类 (1) 1.3 解决方案 (1) 第2章设计思路及原理 (2) 第3章程序详细设计 (3) 3.1程序模块设计 (3) 3.2程序代码结构 (5) 第4章实验结果 (7) 第5章实验总结 (8) 附录:实验代码 (9)

第1章引言 1.1 设计背景 生产者-消费者问题是一个经典的进程同步问题,该问题最早由Dijkstra 提出,用以演示他提出的信号量机制。在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。 1.2 问题分类 根据缓冲区的个数、大小以及生产者消费者的个数可以分为以下几类: 1.单缓冲区(适合单或多生产消费者); 2.环行多缓冲区(或无穷缓冲区)单生产消费者; 3.环行多缓冲区多生产消费者; 1.3 解决方案 1.用进程通信(信箱通信)的方法解决; 2.进程消息缓冲通信; 3.进程信箱通信;

第2章设计思路及原理 设计了两个主要函数:生产者函数、消费者函数; 设计了三个信号量:full信号量,判断缓冲区是否有值,初值为0; empty信号量,判断缓冲区是否有空缓冲区,初值为缓 冲区数; mutex信号量作为互斥信号量,用于互斥的访问缓冲区。 生产者函数通过执行P操作信号量empty减1,判断缓冲区是否有空。有空则互斥的访问缓冲区并放入数据,然后释放缓冲区,执行V操作,信号量full 加1。 消费者函数执行P操作,信号量full减1,判断是否有数据,有则互斥的访问缓冲区并取走数据,然后释放缓冲区,执行V操作,empty信号量加1。

相关文档