进程同步是之多个进程中发生的是按存在某种关系,必须协调动作,相互配合以共同完成一个任务列一个进程等待另一个进程传递消息 汽车装配的流水线上的各道工序
信号量mutex的初值是1统一时刻只允许一个进程进入临界区k个进程在mutex等待队列中,当前访问临界区的进程是k+1个 每个进程访问临界区时,都将mutex减一,所以最终mutex为-k
empty信号量表面是空间空闲资源数目,N个缓冲区,说明初始值为N full信号量表明是蛮的资源数目,这里为0,其初值为0 mutex信号量用于实现互斥访问初值为1,p(full)和p(mutex)若颠倒顺序会导致死锁
P(S) s=s-1 s>=0的时候执行否则进入等待
V(S) s=s+1 s>=0的时候执行否则释放队列第一等待量进程
P原语操作属于临界管理区的进入区 V原语离开临界管理器的退出区
P,V操作可以实现进程同步,进程互斥,进程的前驱关系,进程共享存在大量的信息交换,PV不能承担
信号量w是为了互斥访问操作初值为1,P(mutex)是为了互斥访问rc这一临界资源不能修改执行顺序 P(mutex) V(mutex)存在可以使多个reader同时访问
TS测试与设置指令是解决互斥访问区的临界方法 测试w的值w=1 则返回重新测试 w=0置为w=1进入临界区 退出临界区时复位w=0
管城管理的对象是共享数据结构 的一种操作过程
每个进程访问临界资源的那段代码称为临界区 每只允许一个进程进入临界区访问临界资源 当一个程序进入后 不允许其他程序进入
共享内存shared memory 不会再系统中产生多分相同的数据
在直接通信方式系统提供的发送源语是send(receiver,message)
信号量初始化后只能实施PV操作 在互斥信号量与同步信号量都使用的进程中,应先执行同步信号量的P操作 信号量初值不能小于0
临界资源访问前,先调用进入区代码
并发进程间由于存在相互制约的关系会产生若干问题1.互斥问题2.同步问题3.死锁问题4.饥饿问题
打印数据时 读取数据进程处理数据进程和打印结果进程之间相互关系是同步关系 通过缓冲区相关联
信息传递直接发送信息给一个进程,消息采用内存中若干缓冲区组成队列 依赖进程或者基础框架来调用实际执行的代码
并发进程之间存在的关系又:1.直接感知:相互之间交互2.间接感知,双方都与第三方交互 如共享资源3,互相不感知 相互间 完全不了解其他进程的存在
程序进入临界区应遵循:空闲则入 忙则等待 有限等待 让权等待
共享内存即共享缓冲方式进行通信可同步或异步
套字节是一组进程间交互的协议 可以是异步或者是同步
管道通行是以访进程发送给另一方只能接受此方式只为同步
实现进程互斥的方法:1.Peterson算法 2.TS指令 3.swap或exchange指令4.信号量
信号量机制所谓的临界区是指的访问临界区的代码
管程互斥是管程本身实现的 管程内一次只能有一个有一个进程可以在管程内活动
信箱通信机制中接收源语receive的功能是:从指定信箱中取一封信存放到指定内存地址中
TS在进入区
TS下面到lock=false上面临界区
lock=false退出区
lock=false后面剩余区
进程存在与时间有关的相互制约问题:1.民航飞机订票系统2.网上银行存取款3.汽车装配生产线4.企业成品仓库出入库系统
进入去是用来检查可以进入临界区 需要设置正在访问的临界区标志
消息缓冲通行机制包括:消息缓冲区 消息队列首地址 同步互斥信号量 发送接收消息原语
进程互斥的解决方案“1.由竞争方平等协商 2.设置进程管理者
管道通信具有传送数据量大的优点,但唯一不足的是通信速度慢
PV操作可以实现进程的同步或者互斥 它主要的不足是:1.程序不易读懂2.程序不利于修改和维护 3.正确性难以保证
”消息缓冲“的通讯方式:在内存中开辟若干区域发送进程中请一个区域并讲信息送入 然年后后把他插入到接收进程的相应共享内存,在相互通信的进程之间设置一公共区域 一组进程 向该公共区域队列中之后通知接受进程写 另一组进程从公共区域的读 通过这种法师实现两组进程间的信息交换
”信箱“的通讯方式:发送进程首先链接两个进程的通信机制,然后把信息送入该机制,发送进程不能直接建立联系,而接受进程可以在任何时刻从该机制中取走信息
”管道“的通讯方式:发送进程创建好连接两个进程 一个打开的共享文件 然后写入数据流 接收进程 在需要时 可以从该文件读取数据 写入和读取数据的长度是可变的
信号量是低级的通讯方法
先来先服务的调度算法不可抢占