当前位置: 首页 > >

利用P、V操作实现进程的互斥与同步

发布时间:

工 程 技 术 2008 N 11 O. SCI ENCE & TECHNO GY I N O A ON LO F RM TI 科技资讯 利用 P、 V操 作 实 现 进 程 的 互 斥 与 同 步 ( 鸡西大 学 向 洪波 黑龙江鸡西 1 581 00 ) 摘 要 : 本 文首先 阐述 了进程 同步与 互斥 和 P 、V 操 作的 基本概 念。然 后深 入探讨 了利 用 P 、V 操 作实现 进程 的互斥 与同 步的基 本方 法 。 关键词: 进程 P 操作 V操作 同步 互斥 中图分类 号: TP319 . 3 文献标识 码: A 文章编号: 167 2- 3 791 ( 2 008 ) 04 ( b) - 00 69 - 01 进程的同步与互斥及其实现既是操作系统 的重点, 又是难 点。有许多 工具可以实 现进程 的同 步与 互斥问 题, 然而 关于 信号 量的 P 、V 操作 是 最 理想 的 同步 互 斥工 具 。 因为 P 、 V 操作不仅能解决临界区问题和各种同步互斥问 题, 而 且能被 高效 地实 现。 当一个进程没有得到另一个进程的消息时应等 待, 直到消 息到达 被唤醒 为止。 2 ) 进程互 斥: 是指当有 若干进程都 要使用某 一共享资 源时, 任何时刻最 多允许一 个进程使用 , 其他 要使用 该资源的进 程必须等 待, 直 到占用该资 源者释 放了 该 资源 为 止 。 首 先计 算产生 一个 数据 送变量 X 然 后执 行 P ; ( SC) 操作, 若 结果为 0, 表明缓冲 区 b uf f er 空 着, 则进入其 临界区, 将数据 x 送入缓 冲区, 最 后 执行 V SP) 操作, 通知 打印进程 缓冲区 中已 ( 有 一个 可供 打印 的数 据; 若 P( S C) 操 作结 果 为 - 1, 则阻塞, 因为 缓冲区中 先前送 入的数 据 尚 未被打印进 程取走, 等待打印进 程取走数 据 后 唤 醒。 打 印 进程 的 循环 体 是 : 首 先执 行 P ( SP) , 若结果 为0, 表示 缓冲区buf f er 中有可 供 打 印的数 据, 则进 入其 临界区 , 将缓冲 区的 数 据 暂存于 变量 Y 中, 接着 执行 V( SC) 操作, 通 知 计算进程缓 冲区中的 数据已被 取走, 可送 下 一 个数据, 最后将变 量 Y 中的数据 在打印机 上 打印 输出; 若 P( SP) 操 作结果为 - 1 , 则阻塞, 因 为 缓冲区中已 无等待打 印的数据, 等待计算 进 程 送 入下 一 个新 数据 后 唤醒 。 程序 描述如 下:  s t r uc t s e m pho r e SC, SP=1, 0 a  nu m r x, y, b uf f er ; be  cobegi n voi d cp( voi d)  { w i l e( TRUE) h { com ut e n ext num r i n t o p be x; P( SC) ; bu f f e r =x ; V( SP) ; } } voi d pp( voi d) { w i l e( TRUE) h { P( SP) ; y =bu f f e r ; V( SC) ;  pr i nt y n um r ; } be  }  coe nd 进程 的同 步与 互斥 是计 算机 系统 中最 常 见 的 问 题, 当 一 个 问题 中 包 含 有几 个 公 用 、 私 有信 号量 时, 在实 现过 程中 , 对 P 、V 操 作 的 次序 要非 常小心 。如 果使 用不 当可 能会 导 致 系统死锁。 1 信号量及 P、V操作 19 65 年由 荷兰的 D j ks t r a 提出的 信号量 i 机制 , 是一种 卓有 成效的 进程 互斥 同步工 具, 已被 广泛 地应 用于单 处理 机系 统、 紧密 耦合 的多 处 理机 系统 , 以 及计 算机 网 络中 。在 操 作系统中, 信号量 s 是一整数, 在 s 大于等 于零 时表示 可供并 发进 程使用 的资源 实体数 , 但 s 小于 等于 零时表 示正 在等 待使 用的 临界 区的 进程 数 。P 、V 操 作 就 是由 P 操作 原 语 和 V 操作原语 组成, 这两 个操作都 是对信号量 进行 操作, 具 体定 义如下 :(1 )P 操作 P( s ) : 将 信 号量 s 减 1, 若结果小 于 0, 则调用 P( S) 的 进程 被置成等 待信号量 s 的状态, 功能图如 1 所示: 3 利用 P、V操作实现进程的互斥与同步 3. 1 利用 P、V操 作实现 进程的 互斥 可用信号量来解决 n 个进程互斥进入各 自 的临 界区对 临界 资源 访问 的问 题。 具体方 法 是设置 一个 互斥信 号量 , 变 量名 取为 mu t e x , 初值为 1 , 表 示开始 时无进 程进入 临界区 。每 个欲进 入临界 区的进 程, 先执 行 P( mut e x) 操 作, 表示进 程提出进 入临界区 请求, 若不 允许, 则阻塞等 待正在临界 区的进程 退出临界 区, 否 则没有 进程 在临界 区执行 , 它进入 临界 区; 结 束临界 区后执 行 V mut e x) 操作 , 表 示进程 已 ( 退出临 界区 , 若有进 程在 等待 进入临 界区 时, 唤醒 其中 一 个等 待 进程 。程 序描 述 如下 :  s t r u ct s e m hor e m ex=1; ap ut  cobegi n voi d pr oces s 1( voi d) { w i l e ( TRUE) { h P( m t ex ) ; u cr i t i cal s ect i on 1 ; V m ex) ; ( ut r em n der s e ct i on; } ai } ┋  voi d pr


相关推荐


友情链接: