- 1、本文档共32页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * 用户线程(user-level thread) 由应用程序完成所有线程的管理 通过线程库(用户空间) 一组管理线程的过程 内核不了解用户线程的存在 用户线程切换不需要内核特权 用户线程调度算法可针对应用优化 时间片分配给进程,多线程的进程获得的CPU时间和其它进程一样 * 用户线程的优缺点 优点: 线程切换不调用核心 调度是应用程序特定的:可以选择最好的算法 用户线程可运行在任何操作系统上(只需要线程库) 缺点: 大多数系统调用是阻塞的,因此核心阻塞进程,故进程中所有线程将被阻塞 核心只将处理器分配给进程,同一进程中的两个线程不能同时运行于两个处理器上 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 计算机操作系统 * 2.5 进程间通信 进程通信:指进程之间的信息交换。 2.5.1 进程间通信的类型 2.5.2 共享存储器系统 2.5.3 消息传递系统 2.5.4 管道通信 * 2.5.1 进程间通信的类型 低级通信:只能传递状态和整数值(控制信息),包括进程互斥和同步所采用的信号量机制。优点是速度快。缺点是: 传送信息量小:效率低,每次通信传递的信息量固定,若传递较多信息则需要进行多次通信。 编程复杂:用户直接实现通信的细节(共享的数据结构、传送函数、互斥与同步),编程复杂,容易出错。 高级通信:指用户可直接利用操作系统所提供的一组通信命令,高效地传送大量数据的一种通信方式。包括三类: 共享存储器系统 消息传送系统 管道通信系统。 返回 * 基于共享数据结构的通信方式 没有屏蔽公用数据结构的设置以及同步处理等细节 只能传递相对少量的数据 基于共享存储区的通信方式 在存储器中划出一块共享存储区,诸进程可通过对共享存储区中数据的读写来实现通信。 通信前,先向系统申请获得共享存储区中的一个分区 shmget() 由申请者把获得的共享存储分区链接到本进程上:将共享内存的物理区域映射到该进程的虚空间 shmat() 向读写普通存储器一样读写该公用存储分区 2.5.2 共享存储器系统 * A正文 A数据 A栈 共享 存储 器 B正文 B数据 B栈 进程A 虚空间 进程B 虚空间 内存空间 返回 基于共享存储区的通信方式 * 2.5.3 消息传递系统 消息传递系统是指:进程间的数据交换是以格式化的消息为单位的。消息传递系统分为直接通信方式和间接通信方式两种。 1. 直接通信方式 这是指发送进程利用OS提供的发送命令直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上。接收进程利用OS提供的接收命令直接从消息缓冲队列中取得消息。此时要求发送进程和接收进程都以显示的方式提供对方的标识符,通常系统提供下述两条通信原语: Send(Receiver ,message) ; Receive(Sender ,message) ;或(Receive(message)) ; 直接通信的实例-消息缓冲队列通信机制。 * 2.直接通信的实例:消息缓冲队列通信机制 消息缓冲队列通信原理 消息缓冲队列通信机制的原理是:由系统管理一组缓冲区(供所有进程使用),其中每个缓冲区可以存放一个消息。当发送进程要发送消息时先要向系统申请一个缓冲区,然后把消息写进去,接着把该缓冲区链接到接收进程的消息缓冲队列中。接收进程可以在适当的时候从消息缓冲队列中摘下消息缓冲区,读取消息,并释放该缓冲区。 * 消息缓冲队列通信的数据结构有: 消息缓冲区 type message buffer=record sender;发送进程的标识符 size;消息长度 text;消息正文 next;指向下一个消息缓冲区的指针 end 进程PCB中有关通信的扩充数据项 type PCB = record . mutex ;消息缓冲队列互斥信号量 ; Sm ;消息缓冲队列资源信号量 ; mq ;消息缓冲队列首指针 ; . end 消息缓冲队列通信机制 * 发送原语 send (receiver,a) { getbuf(a.size,i) ; i.sender = a.sender i.size = a.size ; i.text = a.text ;
文档评论(0)