[理学]操作系统课件第2章.ppt

  1. 1、本文档共234页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[理学]操作系统课件第2章

进程的引入,首先是多道程序和分时系统的需要,也是描述程序并发执行的需要。 操作系统中引入进程的目的,是使得多个程序能够并发地执行。 进程和并发,是现代OS中最重要的基本概念,也是OS运行的基础。 进程与程序区别 程序是静态的,进程是动态的; 进程更能真实地描述并发,而程序不能; 一个程序可对应多个进程,反之亦然; 进程有生命周期,有诞生有消亡,短暂的;而程序是相对长久的; 程序可作为软件资源长期保存,进程只是一次执行过程,是暂时的; 进程是系统分配调度的独立单位,能与其他进程并发执行; 进程是由程序和数据两部分组成的; 进程具有创建其他进程的功能,而程序没有。 2.5.2 消息传递通信的实现方法   1.直接通信方式   这是指发送进程利用OS所提供的发送命令,直接把消息发送给目标进程。此时,要求发送进程和接收进程都以显式方式提供对方的标识符。通常,系统提供下述两条通信命令 (原语): Send(Receiver,message); 发送一个消息给接收进程; Receive(Sender,message); 接收Sender发来的消息;   例如,原语Send(P2,m1)表示将消息m1发送给接收进程P2;而原语Receive(P1,m1)则表示接收由P1发来的消息m1。   在某些情况下,接收进程可与多个发送进程通信,因此,它不可能事先指定发送进程。例如,用于提供打印服务的进程,它可以接收来自任何一个进程的“打印请求”消息。对于这样的应用,在接收进程接收消息的原语中,表示源进程的参数,也是完成通信后的返回值,接收原语可表示为:   Receive (id,message);   我们还可以利用直接通信原语来解决生产者—消费者问题。当生产者生产出一个产品(消息)后,便用Send原语将消息发送给消费者进程;而消费者进程则利用Receive原语来得到一个消息。如果消息尚未生产出来,消费者必须等待,直至生产者进程将消息发送过来。生产者—消费者的通信过程可分别描述如下: repeat            produce an item in nextp;            send(consumer,nextp);    until false;    repeat     receive(producer,nextc);            consume the item in nextc;   until false; … … …   2.间接通信方式   间接通信方式指进程之间的通信需要通过作为共享数据结构的实体。该实体用来暂存发送进程发送给目标进程的消息;接收进程则从该实体中取出对方发送给自己的消息。通常把这种中间实体称为信箱。消息在信箱中可以安全地保存,只允许核准的目标用户随时读取。因此,利用信箱通信方式,既可实现实时通信,又可实现非实时通信。      采用哪种处理方式,当然是各执一词。Hoare采用了第一种处理方式,而Hansan选择了两者的折衷,他规定管程中的过程所执行的signal 操作是过程体的最后一个操作,于是,进程P执行signal操作后立即退出管程,因而进程Q马上被恢复执行。 2.4 经典进程的同步问题 2.4.1 生产者—消费者问题   1.利用记录型信号量解决生产者—消费者问题   假定在生产者和消费者之间的公用缓冲池中,具有n个缓冲区,这时可利用互斥信号量mutex实现诸进程对缓冲池的互斥使用。利用信号量empty和full分别表示缓冲池中空缓冲区和满缓冲区的数量。又假定这些生产者和消费者相互等效,只要缓冲池未满,生产者便可将消息送入缓冲池;只要缓冲池未空,消费者便可从缓冲池中取走一个消息。对生产者—消费者问题可描述如下: Var mutex,empty,full: semaphore:=1,n,0;   buffer:array[0,…,n-1] of item;   in,out: integer:=0,0;   begin    parbegin    proceducer: begin          repeat                        producer an item nextp;                        wait(empty); … … wait(mutex);          buffer(in):=nextp;          in:=(in+1) mod n;          signal(mutex);          signal(full);          until false;        end    consumer: begin         repeat

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档