操作系统之生产者消费者问题(c++实现)

操作系统之生产者消费者问题(c++实现)
操作系统之生产者消费者问题(c++实现)

操作系统

课程设计报告

专业 计算机科学与技术

学生姓名 XXX

班级 XXX

学号 XXX

指导教师 XXX

完成日期 XXX

信息工程学院

题目:生产者-消费者问题的模拟实现

一、设计目的

本课程设计是学习完“操作系统原理”课程后进行的一次全面的综合训练,通过课程设计,更好地掌握操作系统的原理及实现方法,加深对操作系统基础

理论和重要算法的理解,加强学生的动手能力。

二、设计内容

1、概述

用进程同步方法解决“生产者-消费者”问题,C或C++语言实现。

1、设计目的

通过研究进程并发和信号量机制,实现生产者-消费者问题的并发控制。

2、设计要求

1)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者进程的标识符。

说明:有界缓冲区(提示:有界缓冲区可用数组实现)内设有20个存储单元,放入/取出的数据项设定为1-20这20个整型数。

2)生产者和消费者各有两个以上。

3)多个生产者或多个消费者之间须有共享对缓冲区进行操作的函数代码。

2、设计原理

在同一个进程地址空间内执行的两个线程生产者线程生产物品,然后将物品放

置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然

后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产

者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,

如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。3、详细设计及编码

定义两个信号量

HANDLE g_hFullSemaphore;//资源信号量:缓冲区满

HANDLE g_hEmptySemaphore;//资源信号量:缓冲区空unsigned short in = 0;//用于记录生产者的指针位置unsigned short out = 0;//用于记录消费者的指针位置HANDLE g_hMutex;//线程间的互斥信号量

生产者进程

while(TRUE){

生产一个产品;

P(g_hEmptySemaphore);

P(mutex1);

产品送往buffer(in);

in=(in+1)mod n;

V(mutex1);

V(g_hFullSemaphore);

}

消费者进程

while(TRUE){

P(g_hFullSemaphore);

P(mutex2);

从buffer(out)中取出产品;

out=(out+1)mod n;

V(mutex2);

V(g_hEmptySemaphore);

(算法流程图、编程及程序注释等)

主要的方法:

4、运行结果分析

1、运行示例

在 c++中运行源程序 ,程序主界面截图.按回车及申请资源和缓冲区进行 p 操作和申请互斥(生产者和消费者都是2个)

(运行界面截图、界面说明、输入输出数据说明和分析等)

附录代码:

#include

#include

const unsigned short SIZE_OF_BUFFER = 20;//有界缓冲区长度

int g_buffer[SIZE_OF_BUFFER];//开辟缓冲区?用数组表示?可以看成是一个循环队列unsigned short ProductID = 0;//新生产出来的产品的产品号

unsigned short ConsumeID = 0;//被消耗的产品的产品号

unsigned short in = 0;//产品进缓冲区时的缓冲区下标?用于记录生产者的指针位置unsigned short out = 0;//产品出缓冲区时的缓冲区下标?用于记录消费者的指针位置bool g_continue = 1;//控制程序运行:1 表示继续运行?0 表示停止运行

HANDLE g_hMutex;//线程间的互斥信号量

HANDLE g_hFullSemaphore;//资源信号量:缓冲区满

HANDLE g_hEmptySemaphore;//资源信号量:缓冲区空

DWORD WINAPI Producer(LPVOID);//生产者线程

DWORD WINAPI Consumer(LPVOID);//消费者线程

const unsigned short PRODUCERS_COUNT=2;//生产者的个数

const unsigned short CONSUMERS_COUNT=2;//消费者的个数

const unsigned short

THREADS_COUNT=PRODUCERS_COUNT+CONSUMERS_COUNT;//总线程数

HANDLE hThreads[PRODUCERS_COUNT];//各线程的 handle

DWORD producerID[CONSUMERS_COUNT];//生产者线程的标识符

DWORD consumerID[THREADS_COUNT];//消费者线程的标识符

/*----------------------------程序提示信息开始------------------------------*/

void info()//程序提示信息

{

std::cout<<"* - - - - - - - - - - - - - - - - - - - - - - - *"<

std::cout<<"| 课程设计课题 : 生产者-消费者问题的模拟实现 |"<

std::cout<<"| 学生 : 丁可 |"<

std::cout<<"| 班级 : B计123班 |"<

std::cout<<" ==》按回车开始该程序 "<

getchar();

}

/*----------------------------程序提示信息结束------------------------------*/

/*----------------------------生产一个产品开始------------------------------*/

//生产一个产品:输出其 ID 号

void Produce()

{

std::cout<

std::cerr<<"生产一个产品: "<<++ProductID;

std::cout<

}

/*----------------------------生产一个产品结束------------------------------*/

/*----------------------把新生产的产品放入缓冲区开------------------------*/

//把新生产的产品放入缓冲区

void Append()

{

std::cerr<<"把生产的产品送入缓冲区";

g_buffer[in]=ProductID;

in=(in+1)%SIZE_OF_BUFFER;

std::cerr<

std::cout<<"缓冲区产品生产者/消费者"<

//新产品放入缓冲区后?输出缓冲区当前的状态

for(int i=0;i

{

//输出缓冲区下标

if (i<10)

std::cout<

else

std::cout<

if(i==in)

{

if(g_buffer[i]<10)

std::cout<<"";

else

std::cout<<"";

std::cout<<"<-- 生产者";//输出生产者的指针位置

}

if(i==out)

{

if(g_buffer[i]<10)

std::cout<<"";

else

std::cout<<"";

std::cout<<"<-- 消费者";//输出消费者的指针位置

}

std::cout<

}

}

/*----------------------把新生产的产品放入缓冲区结------------------------*/ /*----------------------------消费一个产品开始------------------------------*/ void Consume()//消费一个产品

{

std::cout<

std::cerr<<"消费一个产品: "<

std::cout<

}

/*----------------------------消费一个产品结束------------------------------*/ /*-----------------------从缓冲区中取出一个产品开始-------------------------*/ //从缓冲区中取出一个产品

void Take()

{

std::cout<

std::cerr<<"从缓冲区取出一个产品";

ConsumeID=g_buffer[out];

out=(out+1)%SIZE_OF_BUFFER;

std::cerr<

std::cout<

std::cout<<"缓冲区产品生产者/消费者"<

//取出一个产品后:输出缓冲区当前的状态

for(int i=0;i

{

//输出缓冲区下标

if(i<10)

std::cout<

else

std::cout<

if(i==in)

{

if(g_buffer[i]<10)

std::cout<<"";

else

std::cout<<"";

std::cout<<"<-- 生产者";//输出生产者的指针位置

}

if(i==out)

{

if(g_buffer[i]<10)

std::cout<<"";

else

std::cout<<"";

std::cout<<"<-- 消费者";//输出消费者的指针位置

}

std::cout<

}

}

/*-----------------------从缓冲区中取出一个产品结束-------------------------*/ /*-----------------------------生产者线程开始-------------------------------*/

//生产者线程

DWORD WINAPI Producer(LPVOID lpPara)

{

while(g_continue)

{

//资源信号量的 P 操作

WaitForSingleObject(g_hFullSemaphore,INFINITE);

//互斥信号量的 P 操作

WaitForSingleObject(g_hMutex,INFINITE);

//生产一个产品

Produce();

//把新生产的产品放入缓冲区

Append();

Sleep(2000);

//互斥信号量的 V 操作

ReleaseMutex(g_hMutex);

//资源信号量的 V 操作

ReleaseSemaphore(g_hEmptySemaphore,1,NULL);

}

return 0;

}

/*-----------------------------生产者线程结束-------------------------------*/

/*-----------------------------消费者线程开始-------------------------------*/

//消费者线程

DWORD WINAPI Consumer(LPVOID lpPara)

{

while(g_continue)

{

//资源信号量的 P 操作

WaitForSingleObject(g_hEmptySemaphore,INFINITE);

//互斥信号量的 P 操作

WaitForSingleObject(g_hMutex,INFINITE);

//从缓冲区中取出一个产品

Take();

//消费一个产品

Consume();

Sleep(2000);

//互斥信号量的 V 操作

ReleaseMutex(g_hMutex);

//资源信号量的 V 操作

ReleaseSemaphore(g_hFullSemaphore,1,NULL);

}

return 0;

}

/*-----------------------------消费者线程结束-------------------------------*/

/*---------------------------创建生产者线程开始-----------------------------*/

void createPT()//创建生产者线程

{

for(int i=0;i

{

hThreads[i]=CreateThread(NULL,0,Producer,NULL,0,&producerID[i]);

if(hThreads[i]==NULL)

g_continue=0;

}

}

/*---------------------------创建生产者线程结束-----------------------------*/

/*---------------------------创建消费者线程开始-----------------------------*/

void createCT()//创建消费者线程

{

for (int j=0;j

{

hThreads[PRODUCERS_COUNT+j]=CreateThread(NULL,0,Consumer,NULL,0,&consu merID[j]);

if (hThreads[j]==NULL)

g_continue=0;

}

}

/*---------------------------创建消费者线程结束-----------------------------*/

/*-------------------------------主函数开始---------------------------------*/

int main()

{

//显示程序提示信息

info();

//创建互斥信号量

g_hMutex=CreateMutex(NULL,FALSE,NULL);

//创建资源信号量

g_hFullSemaphore=CreateSemaphore(NULL,SIZE_OF_BUFFER-1,SIZE_OF_BUFFER-1,NULL);

g_hEmptySemaphore=CreateSemaphore(NULL,0,SIZE_OF_BUFFER-1,NULL);

//创建生产者线程

createPT();

//创建消费者线程

createCT();

//不按回车键的话程序会一直运行下去

while(g_continue)

//按回车键终止程序

if(getchar())

g_continue = 0;

return g_continue;

}

5、设计小结

(本设计的特色、经验教训和体会等)

6、参考文献

(参考的书籍等,列出书名、作者、出版社及出版时间等,例如:

[1]计算机操作系统(第3版),汤小丹,西安电子科技大学出版社,2007年7月

[2]C语言程序设计,孟庆昌,人民邮电出版社,2006年4月

操作系统课程设计用多进程同步方法解决生产者消费者问题

操作系统课程设计 用多进程同步方法解决生产者-消费者问题 系别:计科系 专业: 计算机科学与技术 班级:04 级 4 班 学号:0410******* 姓名:苏德洪 时间:2006-7-7—2006-7-14

目录 一、题目: (3) 二、设计目的: (3) 三、总体设计思想概述: (3) 四、说明: (3) 五、设计要求: (3) 六、设计方案: (3) 七、流程图: (5) 八、运行结果 (7) 九、源程序 (11) 十、总结 (18) 十一、参考文献 (20)

一、题目: 用多进程同步方法解决生产者-消费者问题。 二、设计目的: 通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。 三、总体设计思想概述: 1、生产者—消费者问题是一种同步问题的抽象描述。 2、计算机系统中的每个进程都可以消费或生产某类资源。当系统中某一进程使用某一 资源时,可以看作是消耗,且该进程称为消费者。 3、而当某个进程释放资源时,则它就相当一个生产者。 四、说明: 有界缓冲区内设有20个存储单元,放入/取出的数据项设定为1-20这20个整型数。 五、设计要求: 1、每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前 指针位置和生产者/消费者线程的标识符。 2、生产者和消费者各有两个以上。 3、多个生产者或多个消费者之间须有共享对缓冲区进行操作的函数代码。 六、设计方案: 通过一个有界缓冲区(用数组来实现,类似循环队列)把生产者和消费者联系起来。假定生产者和消费者的优先级是相同的,只要缓冲区未满,生产者就可以生产产品并将产品送入缓冲区。类似地,只要缓冲区未空,消费者就可以从缓冲区中去走产品并消费它。 应该禁止生产者向满的缓冲区送入产品,同时也应该禁止消费者从空的缓冲区中取出产品,这一机制有生产者线程和消费者线程之间的互斥关系来实现。 为解决生产者/消费者问题,应该设置两个资源信号量,其中一个表示空缓冲区的数目,用g_hFullSemaphore表示,其初始值为有界缓冲区的大小SIZE_OF_BUFFER;另一个表示缓冲区中产品的数目,用g_hEmptySemaphore表示,其初始值为0。另外,由于有界缓冲区是一个临界资源,必须互斥使用,所以还需要再设置一个互斥信号量g_hMutex,起初值为1。

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

生产者消费者问题模拟实现(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或正整数,多用于并发进程同步。

(完整版)操作系统毕业课程设计说明书-基于Linux的模拟文件系统的设计与实现

中北大学 操作系统课程设计 说明书 学院、系:软件学院 专业:软件工程 学生姓名:徐春花学号: 设计题目:基于Linux的模拟文件系统的设计与实现 起迄日 期: 2014年6月14日- 2014年6月26日指导教薛海丽

师: 2014 年 6月 26 日 前言 简单地说,Linux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于Intel x86系列CPU的计算机上。这个系统是由世界各地的成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。 Linux不仅为用户提供了强大的操作系统功能,而且还提供了丰富的应用软件。用户不但可以从Internet上下载Linux及其源代码,而且还可以从Internet上下载许多Linux的应用程序。可以说,Linux本身包含的应用程序以及移植到Linux上的应用程序包罗万象,任何一位用户都能从有关Linux的网站上找到适合自己特殊需要的应用程序及其源代码,这样,用户就可以根据自己的需要下载源代码,以便修改和扩充操作系统或应用程序的功能。这对Windows NT、Windows98、MS-DOS或OS2

等商品化操作系统来说是无法做到的。 Linux具有:稳定、可靠、安全的优点,并且有强大的网络功能。其中有对读、 写进行权限控制、审计跟踪、核心授权等技术,这些都为安全提供了保障。在相关软 件的支持下,可实现WWW、FTP、DNS、DHCP、E-mail等服务,还可作为路由器 使用,利用IPCHAINSIPTABLE网络治理工具可构建NAT及功能全面的防火墙。 Linux是在GNU公共许可权限下免费获得的,是一个符合POSIX标准的操作系 统。Linux操作系统软件包不仅包括完整的Linux操作系统,而且还包括了文本编辑 器、高级语言编译器等应用软件。它还包括带有多个窗口管理器的X-Windows图形 用户界面,如同我们使用Windows NT一样,允许我们使用窗口、图标和菜单对系 统进行操作。 目录 1需求分析 (3) 1.1 功能介绍 (3) 1.2 目的及意义 (5) 1.2.1 目的 (5) 1.2.2 意义 (6) 1.3 设计成果 (7) 2总体设计 (8) 2.1功能介绍 (8) 2.2模块关联 (9) 3详细设计 (12)

操作系统第一章作业讲解

第一章 习题 1、有3个作业A 、B 、C , A 是计算作业、 B 是检索磁带上数据的作业, C 是打印作业。3个作业单道运行时间分别为5分钟、15分钟和10分钟。假设可在15分钟内并行完成这3个作业。则各资源的利用率分别为多少? 单道CPU 利用率:5 /(5+15+10)= 5 / 30 = 1 / 6 磁带利用率:15 /(5+15+10)= 15 / 30 = 1 / 2 打印利用率:10 /(5+15+10)= 10 / 30 = 1 / 3 多道CPU 利用率:5 / 15 = 1 / 3 磁带利用率:15 / 15 = 1 打印利用率:10 / 15 = 2 / 3 2、在有一台CPU 和两台输入/输出设备磁盘和磁带的多道程序系统中,同时投入运行2个程序A 和B 。这2个程序对CPU 和磁盘和磁带的使用顺序和使用时间为: 程序A :磁带(30S )、CPU (10S )、磁盘(30S )、CPU (10S )、磁带(20S ) 程序B :磁盘(20S )、CPU (30S )、磁带(40S ) 假定:CPU 、磁盘和磁带都能并行工作,试问:在单道和多道两种方式下, 1)程序A 和B 从投入运行到运行完成所用的时间分别是多少? 2)CPU 、磁盘和磁带的利用率是多少? 答:在单道情况下,从投入到运行完成所用的时间A 为:100S ;B 为100S+90S=190S 在两道情况下,从投入到运行完成所用的时间A 为:120S ;B 为90S (非抢占式) 在两道情况下,从投入到运行完成所用的时间A 为:100S ;B 为120S (抢占式) 单道运行的时间关系图 计算 磁带 多道、非抢占式运行的时间关系图

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

操作系统课程设计任务书

目录

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

实验1:生产者消费者问题

福建农林大学金山学院实验报告 系(教研室):专业:计算机科学与技术年级: 实验课程:生产者与消费者实验姓名:学号: 实验室号:1#608 计算机号:实验时间:指导教师签字:成绩: 实验1:生产者消费者问题 一、实验目的 生产者消费者问题是操作系统中经典的同步和互斥问题。通过实验,要求学生掌握两者之间的同步信号量和互斥信号量的使用,更深刻了解临界资源、同步和互斥的概念。 二、实验要求 1.一组生产者通过一个具有N个缓冲区的缓冲池循环不断地向一组消费者提供产 品。 2.建一个队列, 队列的长度由n记录, 定义两个指针, 分别指向队列的头和尾消 费者从头指针读取数据,每读取一个数据把n--,生产者把数据写入尾指针, 每写入一个数据就n++,当n=N的时候生产者暂停写入数据。 3.注意:缓冲池队列,用互斥锁保护。 三、实验内容和原理 1.分别画出生产者和消费者的流程图

2.针对生产者和消费者问题,可以分为哪几种情况,使用了哪些原语?分别代表 什么意思?过程如何?阐述哪些进程之间存在同步,哪些进程之间存在互斥。 3.缓冲区是否为临界资源?是否可以循环使用?通过什么来实现?举例说明(可 画图) 四、实验环境 1. 硬件:PC机; 2. 软件:Windows操作系统、。 五、算法描述及实验步骤 #include <> #include const unsigned short SIZE_OF_BUFFER = 10; unsigned short ProductID = 0; unsigned short ConsumeID = 0;

unsigned short in = 0; unsigned short out = 0; int g_buffer[SIZE_OF_BUFFER]; bool g_continue = true; HANDLE g_hMutex; HANDLE g_hFullSemaphore; HANDLE g_hEmptySemaphore; DWORD WINAPI Producer(LPVOID); DWORD WINAPI Consumer(LPVOID); int main() { g_hMutex = CreateMutex(NULL,FALSE,NULL); g_hFullSemaphore = CreateSemaphore(NULL,SIZE_OF_BUFFER-1,SIZE_OF_BUFFER-1,NULL); g_hEmptySemaphore = CreateSemaphore(NULL,0,SIZE_OF_BUFFER-1,NULL); const unsigned short PRODUCERS_COUNT = 3; const unsigned short CONSUMERS_COUNT = 1; const unsigned short THREADS_COUNT = PRODUCERS_COUNT+CONSUMERS_COUNT; HANDLE hThreads[PRODUCERS_COUNT]; DWORD producerID[CONSUMERS_COUNT]; DWORD consumerID[THREADS_COUNT]; for (int i=0;i

操作系统 第一章习题(1)

第一章操作系统引论 一、单项选择题 1、现代操作系统的基本特征是(C )、资源共享和操作的异步性。 A.多道程序设计 B. 中断处理 C.程序的并发执行 D. 实现分时与实时处 理 2、批处理系统的主要缺点是( B)。 A.CPU的利用率不高 B.失去了交互性 C.不具备并行性 D.以上都不是 3、实时操作系统追求的目标是( C)。 A.高吞吐率 B.充分利用内存 C. 快速响应 D. 减少系统开销 4、系统调用的目的是( A)。 A.请求系统服务 B.终止系统服务 C.申请系统资源 D.释放系统资源 5.下列系统中,(A )是实时系统。 A 火炮的自动化系统 B 办公自动化系统 C 管理信息系统 D计算机集成 制造系统 6. 现代操作系统的两个基本特征是( C )和资源共享。 A.多道程序设计 B. 中断处理 C.程序的并发执行 D. 实现分时与实时处理 7.( D)不是分时操作系统的特征。 A 及时性 B 独占性 C交互性 D多样性 8. 为方便用户,操作系统负责管理和控制计算机系统的( B )。 A.软件资源 B.硬件和软件资源 C.用户有用资源 D.硬件资源 二、填空题 1.方便性和___有效性____是设计操作系统时最重要的两个目标。 2.用户可以通过三种方式使用计算机:__命令方式_____,__系统调用方式 _____,__图形窗口方式_____。 3.目前存在的基本的操作系统类型是:批处理系统,分时系统,实时系统 4.操作系统是一组控制和管理计算机____硬件___和__软件_____资源,合理 地对各类作业进行___调度____,以及方便用户使用的____程序___的集合。 5.分时系统的特征:多路性,独立性,及时性,交互性 6.举例说明常用的微机操作系统:典型的单用户单任务操作系统___ DOS或 CP/M ____,典型的单用户多任务操作系统___ Windows XP ____,典型的多 用户多任务__ UNIX或LINUX _____。

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

《操作系统》实验报告 生产者和消费者的问题 一、实验目的 1.掌握基本的同步与互斥的算法,理解基本的生产者与消费者的模型。 2.学习使用Windows 2000/XP中基本的同步对象,掌握相关的API的使用方法。 3.了解Windows 2000/XP中多线程的并发执行机制,线程间的同步和互斥。 二、实验的内容及其要求 1.实验内容 以生产者/消费者模型为根据,在Windows 2000环境下创建一个控制台进程,在改进程中创建n个线程模拟生产者和消费者,实现进程(线程)的同步与互斥。 2.实验要求 ①学习并理解生产者/消费者模型及其同步/互斥规则 ②学习了解Windows同步对象及其特性 ③熟悉实验环境,掌握相关API的使用方法 ④设计程序,实现生产者/消费者进程(线程)的同步与互斥 ⑤提交实验报告 三、实验的时间安排 1.实验前,先到图书馆或上网百度了解有关生产者/消费者模型的相关知识,建立生产者/消费者模型的基本概念。 2.利用13周、15周、17周的上机时间编写和调试程序代码。 3.利用其他课余时间来分析实验的最终结果并完成相关的实验报告。 四、实验的环境 1.硬件条件:普通计算机一台 2.软件条件:①操作系统:Windows 2000/XP ②开发语言:VC++ 本实验是在Windows 2000+VC6.0环境下实现的,利用Windows SDK提供的系统接口(API)完成程序的功能。实验在Windows下安装VC后进行,因为VC是一个集成开发环境,其中包含了Windows SDK所有工具和定义,所以安装了VC后就不用特意安装SDK了。实验中所用的API(应用程序接口),是操作系统提供的用来进行应用程序设计的系统功能接口。要使用这些API,需要包含对这些函数进行说明的SDK 头文件,最常见的就是windows.h。一些特殊的API调用还需要包含其他的头文件。 五、正文 1.程序结构图:

生产者消费者问题模拟实现(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或正整数,多用于并发进程同步。

操作系统简单文件系统设计及实现

简单文件系统的设计及实现 一、实验目的: 1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解 2、要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。 二、实验内容: 1、设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。 2、程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。另外,为打开文件设置了运行文件目录(AFD)。 3、为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作 4、算法与框图 ?因系统小,文件目录的检索使用了简单的线性搜索。 ?文件保护简单使用了三位保护码:允许读写执行、对应位为 1,对应位为0,则表示不允许读写、执行。 ?程序中使用的主要设计结构如下:主文件目录和用户文件目录( MFD、UFD); 打开文件目录( AFD)(即运行文件目录) 文件系统算法的流程图如下

三、工具/准备工作: 在开始本实验之前,请回顾教科书的相关内容。并做以下准备: 1) 一台运行Windows 2000 Professional或Windows 2000 Server的操作系统的计算机。 2) 计算机中需安装Visual C++ 6.0专业版或企业版 四、实验要求: (1)按照学校关于实验报告格式的要求,编写实验报告(含流程图); (2)实验时按两人一组进行分组,将本组认为效果较好的程序提交检查。

操作系统第1章练习地的题目

第1章操作系统引论 1.1 典型例题解析 【例1】试说明操作系统与硬件、其它系统软件以及用户之间的关系。 答:操作系统是覆盖在硬件上的第一层软件,它管理计算机的硬件和软件资源,并向用户提供良好的界面。操作系统与硬件紧密相关,它直接管理着硬件资源,为用户完成所有与硬件相关的操作,从而极大地方便了用户对硬件资源的使用,并提高了硬件资源的利用率。操作系统是一种特殊的系统软件,其它系统软件与运行在操作系统地基础之上,可获得操作系统提供的大量服务,也就是说,操作系统是其它系统软件和硬件的接口。而一般用户使用计算机除了需要操作系统支持外,还需要用到大量的其它系统软件和应用软件,以使其工作更加方便和高效。 【例2】操作系统具有哪些特征?它们之间有何关系? 答:操作系统的特征有并发、共享、虚拟和异步性。它们的关系如下: (1)并发和共享是操作系统最基本的特征。为了提高计算机资源的利用率,操作系统必然要采用多道程序设计技术,使多个程序共享系统的资源,并发的执行。 (2)并发和共享互为存在的条件。一方面,资源的共享以程序(进程)的并发执行为条件,若系统不允许程序并发执行,自然不存在资源的共享问题;另一方面,若系统不能对资源共享实施有效管理,协调好各个进程对共享资源的访问,也必将影响到程序的并发执行,甚至根本无法并发执行。 (3)虚拟以并发和共享为前提条件。为了使并发进程能更方便、更有效地共享资源,

操作系统经常采用多种虚拟技术来在逻辑上增加CPU和设备的数量以及存储器的容量,从而解决众多并发进程对有限的系统资源的竞争问题。 (4)异步性是并发和共享的必然结果。操作系统允许多个并发进程共享资源、相互合作,使得每个进程的运行过程受到其他进程的制约,不再“一气呵成”,这必然导致异步性特征的产生。 【例3】简述并发与并行的区别。 答:并行性和并发性是既相似又有区别的两个概念。并行性是指两个或多个事件在同一时刻发生;而并发性是指两个或多个事件在同一时间间隔内发生。 1.2 练习题及答案 一、选择题 1.操作系统是一种()。 A、应用软件 B、系统软件 C、通用软件 D、工具软件 2.操作系统是对()进行管理的软件。 A、软件 B、硬件 C、计算机资源 D、应用程序 3.操作系统的()管理部分负责对进程进行调度 A、存储器 B、设备 B、文件D、处理机

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

操作系统课程设计 一.实验目标 完成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章操作系统笔记

操作系统的定义: 操作系统(Operating System, OS)是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充 操作系统的目标和作用 在计算机系统上配置操作系统主要目标与计算机系统的规模和应用环境有关。 操作系统的目标 方便性 硬件只能识别机器代码(0、1) OS提供命令,方便用户使用计算机 有效性 使CPU、I/O保持忙碌,充分利用 使内存、外存数据存放有序,节省空间 合理组织工作流程,改善资源利用率,提高吞吐量可扩充性 计算机技术的发展:硬件/体系结构/网络/Internet OS应采用层次化结构,便于扩充和修改功能层次和模块开放性 支持网络环境,兼容遵循OSI标准开发的硬件和软件操作系统的作用 1. 用户与计算机硬件系统之间的接口 命令方式 用户通过键盘输入联机命令(语言) 系统调用方式 用户程序通过系统调用,操纵计算机 图形、窗口方式 用户通过窗口、图标等图形界面操纵计算机 2.计算机系统资源管理者

4大类资源:处理机;存储器;I/O设备;信息(文件:程 序、数据) 3.对计算机资源的抽象(扩充机器) 裸机:只有硬件的计算机,难以使用 虚机器:在裸机增加软件(OS等),功能增强,使用方便 推动操作系统发展的主要动力 1.不断提高计算机资源利用率 早期计算机很昂贵,为提高资源利用率,产生了批处理系统 2.方便用户 为改善用户上机、调试程序时的条件,产生了分时系统 3.器件的不断更新换代 OS随之更新换代,如:8位->16位->32位 4.计算机体系结构的不断发展 单处理机OS->多处理机OS->网络操作系统 操作系统的发展过程 无操作系统时代 OS尚未出现,人们如何使用计算机 人工操作方式 人工操作方式的缺点 用户独占全机 CPU等待人工操作 结果:资源利用率低下 脱机输入输出系统 低速设备

实验报告五 生产者和消费者问题

实验报告五 ——生产者和消费者问题 姓名:丛菲学号:20100830205 班级:信息安全二班一、实习内容 ?1、模拟操作系统中进程同步和互斥 ?2、实现生产者和消费者问题的算法实现 二、实习目的 ?1、熟悉临界资源、信号量及PV操作的定义与物理意义 ?2、了解进程通信的方法 ?3、掌握进程互斥与进程同步的相关知识 ?4、掌握用信号量机制解决进程之间的同步与互斥问题 ?5、实现生产者-消费者问题,深刻理解进程同步问题 三、实习题目 ?在Linux操作系统下用C实现经典同步问题:生产者—消费者,具体要求如下: (1)一个大小为10的缓冲区,初始状态为空。 (2)2个生产者,随机等待一段时间,往缓冲区中添加数据,若缓冲区已满,等待消 费者取走数据之后再添加,重复10次。 (3)2个消费者,随机等待一段时间,从缓冲区中读取数据,若缓冲区为空,等待生 产者添加数据之后再读取,重复10次。 ?提示 本实验的主要目的是模拟操作系统中进程同步和互斥。在系统进程并发执行异步推进的过程中,由于资源共享和进程间合作而造成进程间相互制约。进程间的相互制约有两种不同的方式。 (1)间接制约。这是由于多个进程共享同一资源(如CPU、共享输入/输出设备)而引起的,即共享资源的多个进程因系统协调使用资源而相互制约。 (2)直接制约。只是由于进程合作中各个进程为完成同一任务而造成的,即并发进程各自的执行结果互为对方的执行条件,从而限制各个进程的执行速度。 生产者和消费者是经典的进程同步问题,在这个问题中,生产者不断的向缓冲区中写入数据,而消费者则从缓冲区中读取数据。生产者进程和消费者对缓冲区的操作是互斥,即当前只能有一个进程对这个缓冲区进行操作,生产者进入操作缓冲区之前,先要看缓冲区是否已满,如果缓冲区已满,则它必须等待消费者进程将数据取出才能写入数据,同样的,消费者进程从缓冲区读取数据之前,也要判断缓冲

操作系统第一章

1.在计算机系统中配置操作系统的主要目的是提高系统资源的利用率,操作 系统的主要功能是管理计算机系统中的资源,其中包括处理机、存储器以及文件和设备。这里的处理机管理主要是对进程进行管 2.操作系统有多种类型:允许多个用户以交互方式使用计算机的操作系统, 称为分时操作系统;允许多个用户将若干个作业提交给计算机系统集中处理的操作系统称为批处理操作系统;在实时操作系统的控制下,计算机系统能及时处理由过程控制反馈的数据,并做出响应;在IBM- PC机上的操作系统称为微机操作系统 3.操作系统是一种系统软件它负责为用户和用户程序完成所有与硬件相关 并与应用无关的工作,高级程序设计语言的编译不是操作系统关心的主要问题。 4.用户在程序设计过程中,可通过系统调用获得操作系统的服务。 5.在0S中采用多道程序设计技术,能有效地提高CPU,内存和I/O设备的利 用率,为实现多道程序设计需要有更大的内存。 6.推动批处理系统形成和发展的主要动力是提高系统资源利用率.推动分时 系统形成和发展的主要动力是方便用户,推动微机OS发展的主要动力是计算机硬件的不断更新换代 7.在设计分时操作系统时,首先要考虑的是交互性和响应时间,在设计批处 理操作系统时,首先要考虑的是周转时间和系统吞吐量,在设计实时操作系统时,首先要考虑的是实时性和可靠性 8.在多道批处理系统中,为了充分利用各种资源,系统总是优先选择计算型 和I/O型均衡的多个作业投入运行,为了提高吞吐量,系统总是想方设法缩短用户作业的周转时间 9.从下面关于操作系统的论述中,选出一条正确的论述。(1) (1)对批处理作业,必须提供相应的作业控制信息。 (2)对于分时系统,不一定全部提供人机交互功能。 (3)从响应角度看,分时系统与实时系统的要求相似。 (4)采用分时操作系统的计算机系统中,用户可以独占计算机操作系统中 的文件系统。 (5)从交互角度看,分时系统与实时系统相似 10.分时系统的响应时间(及时性)主要是根据用户所能接受的等待时间确定 的,而实时系统的响应时间则是由控制对象所能接受的时延确定的。 11.在分时系统中,为使多个用户能够同时与系统交互,最关键的问题是能 在一较短的时间内,使所有用户程序都得到运行,当用户数100 时,为保证响应时间不超过2秒,此时的时间片最大应为20ms

操作系统课程设计——生产者消费者问题

计算机与信息学院 《操作系统与编译原理联合课程设计报告》 专题:操作系统部分 学生姓名: 学号: 专业班级: 指导教师: 2014 年 7 月

一、设计目标 多进程/线程编程:生产者-消费者问题。设置两类进程/线程,一类为生产者,一类为消费者;建立缓冲区的数据结构;随机启动生产者或消费者;显示缓冲区状况;随着进程/线程每次操作缓冲区,更新显示。 二、设计思路 1.开发平台:Visual C++6.0 2.设计思路: 若干个生产者和若干个消费者共享一个有界缓冲区,生产者生产产品,消费者消费产品。消费者进程与生产者进程随机切换。生产者将产品生产出来后,存放到缓冲区中的空闲位置并将此缓冲区的标识置为满,若此时无空缓冲区,则进行等待。消费者将标识为满的缓冲区中的产品取出,进行消费并将该缓冲区的标志位置为空,若此时无满的缓冲区,则进行等待。 由于消费者与生产者共享缓冲区资源,且缓冲区资源属于互斥资源,所以生产者和消费者需要按照一定的规则访问缓冲区,访问规则如下: (1)当一个消费者访问缓冲区时其他消费者不允许访问缓冲区,同样的,当一个生产者访问缓冲区时其他生产者也不能访问缓冲区。 (2)当消费者访问缓冲区资源时生产者不能访问,反之,当生产者访问缓冲区资源时消费者不能访问。 (3)当缓冲区中无产品时,消费者不能访问;当缓冲区已满时,生产者不能访问缓冲区。 生产者与消费者问题伪代码如下: VAR mutex, empty, full: semaphore := 1, n, 0 ; in,out: integer := 0, 0 ; Buffer: array [0..n-1] of item ; Parbegin Producer: begin repeat produce an item in nextp; wait(empty); wait(mutex); Buffer(in) := nextp; in := (in + 1) mod n; signal(mutex); signal(full); until false end Consumer: begin repeat

操作系统课后习题答案第一章

第一章 1.设计现代OS的主要目标是什么? 答:(1)有效性(2)方便性(3)可扩充性(4)开放性 2.OS的作用可表现在哪几个方面? 答:(1)OS作为用户与计算机硬件系统之间的接口 (2)OS作为计算机系统资源的管理者 (3)OS实现了对计算机资源的抽象 3.为什么说OS实现了对计算机资源的抽象? 答:OS首先在裸机上覆盖一层I/O设备管理软件,实现了对计算机硬件操作的第一层次抽象;在第一层软件上再覆盖文件管理软件,实现了对硬件资源操作的第二层次抽象。OS 通过在计算机硬件上安装多层系统软件,增强了系统功能,隐藏了对硬件操作的细节,由它们共同实现了对计算机资源的抽象。4.试说明推劢多道批处理系统形成和収展的主要劢力是什么? 答:主要动力来源于四个方面的社会需求与技术发展: (1)不断提高计算机资源的利用率; (2)方便用户; (3)器件的不断更新换代; (4)计算机体系结构的不断发展。 5.何谓脱机I/O和联机I/O? 答:脱机I/O 是指事先将装有用户程序和数据的纸带或卡片装入纸带输入机或卡片机,在外围机的控制下,把纸带或卡片上的数据或程序输入到磁带上。该方式下的输入输出由外围机控制完成,是在脱离主机的情况下进行的。 而联机I/O方式是指程序和数据的输入输出都是在主机的直接控制下进行的。6.试说明推劢分时系统形成和収展的主要劢力是什么? 答:推动分时系统形成和发展的主要动力是更好地满足用户的需要。主要表现在:CPU 的分时使用缩短了作业的平均周转时间;人机交互能力使用户能直接控制自己的作业;主机的共享使多用户能同时使用同一台计算机,独立地处理自己的作业。 7.实现分时系统的关键问题是什么?应如何解决? 答:关键问题是当用户在自己的终端上键入命令时,系统应能及时接收并及时处理该命令,在用户能接受的时延内将结果返回给用户。解决方法:针对及时接收问题,可以在系统中设臵多路卡,使主机能同时接收用户从各个终端上输入的数据;为每个终端配臵缓冲区,暂存用户键入的命令或数据。针对及时处理问题,应使所有的用户作业都直接进入内存,并且为每个作业分配一个时间片,允许作业只在自己的时间片内运行,这样在不长的时间内,能使每个作业都运行一次。 8.为什么要引入实时OS? 答:实时操作系统是指系统能及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。引入实时OS 是为了满足应用的需求,更好地满足实时控制领域和实时信息处理领域的需要。9.什么是硬实时仸务和软实时仸务?试丼例说明。 答:硬实时任务是指系统必须满足任务对截止时间的要求,否则可能出现难以预测的结果。举例来说,运载火箭的控制等。软实时任务是指它的截止时间并不严格,偶尔错过了任务的截止时间,对系统产生的影响不大。举例:网页内

相关文档
最新文档