﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-绿-文章分类-操作系统</title><link>http://www.cppblog.com/chxzwj/category/17957.html</link><description>有希望是幸福的……</description><language>zh-cn</language><lastBuildDate>Sun, 20 Nov 2011 08:01:24 GMT</lastBuildDate><pubDate>Sun, 20 Nov 2011 08:01:24 GMT</pubDate><ttl>60</ttl><item><title>存储系统管理</title><link>http://www.cppblog.com/chxzwj/articles/159408.html</link><dc:creator>chxzwj</dc:creator><author>chxzwj</author><pubDate>Mon, 31 Oct 2011 13:10:00 GMT</pubDate><guid>http://www.cppblog.com/chxzwj/articles/159408.html</guid><wfw:comment>http://www.cppblog.com/chxzwj/comments/159408.html</wfw:comment><comments>http://www.cppblog.com/chxzwj/articles/159408.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chxzwj/comments/commentRss/159408.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chxzwj/services/trackbacks/159408.html</trackback:ping><description><![CDATA[<div><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">1.&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">程序的处理步骤</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">1)&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">编译</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">2)&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">链接</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">静态链接</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">动态链接</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">3)&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">装入</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">绝对装入方式</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">静态重定位</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9314;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">动态重定位</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">2.&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">内存的分配方式：</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">1)&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">离散分配方式</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">分页管理</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">分段管理</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9314;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">段页式管理</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">2)&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">连续分配方式</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">单一连续分配</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">固定分区分配</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9314;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">可变分区分配，有四种方式：首次适应算法，循环首次适应算法，最佳适应算法，最差适应算法。</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">3.&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">虚拟存储器：</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">1)&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">请求分页</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">Opt</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">Lur</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9314;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">fifo</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">2)&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">请求分段</span></p></div><img src ="http://www.cppblog.com/chxzwj/aggbug/159408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chxzwj/" target="_blank">chxzwj</a> 2011-10-31 21:10 <a href="http://www.cppblog.com/chxzwj/articles/159408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>操作系统概论</title><link>http://www.cppblog.com/chxzwj/articles/158847.html</link><dc:creator>chxzwj</dc:creator><author>chxzwj</author><pubDate>Fri, 21 Oct 2011 13:26:00 GMT</pubDate><guid>http://www.cppblog.com/chxzwj/articles/158847.html</guid><wfw:comment>http://www.cppblog.com/chxzwj/comments/158847.html</wfw:comment><comments>http://www.cppblog.com/chxzwj/articles/158847.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chxzwj/comments/commentRss/158847.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chxzwj/services/trackbacks/158847.html</trackback:ping><description><![CDATA[<div><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">1.&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">操作系统的概念、特征、功能和提供的服务</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">1)&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">操作系统是计算机系统资源的管理者，为用户提供接口。</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">2)&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">操作系统的功能与特征</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">操作系统功能模块作为特殊子程序，为用户提供系统调用。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">操作系统作为资源的管理者。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9314;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">操作系统以进程组织形式为用户提供服务。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9315;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">操作系统作为服务提供者。</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">2.&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">操作系统的发展与分类：单道批处理，多道系统，实时系统，分时系统</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">3.&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">操作系统的运行环境</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">1)&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">操作系统的进程空间：用户程序区，用户数据区，用户栈区；核心栈区，系统程序以及数据区。</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">2)&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">中断也称外中断，主要是指cpu指令以外的事件的发生；异常称为内中断，也叫例外或者陷入，主要来自于cpu指令内部的事件。异常不能被屏蔽，一旦出现，立即处理。</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">3)&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">中断的分级</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">4)&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">中断/异常相关概念</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">断电：CPU刚执行完的那条指令成为断点。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">恢复点：中断时程序计数器所指的地址为恢复点。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9314;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">管态和目态</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9315;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">中断向量以及PS和PC</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">5)&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">中断异常处理过程：整个中断/异常从发现到处理完毕是由软件和硬件相互配合协调完成的。在中断处理过程中，一般包括保存现场、分析中断/异常原因、进入不同中断/异常的响应处理程序、最后可能重新选择程序运行、恢复现场等过程。</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">6)&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">系统调用是管态和目态之间的接口。应用程序通过陷入，进入内核态，os内核运行异常处理程序，系统程序根据系统调用的类型号，检索系统调用的散转表中的服务程序地址，到具体的服务程序进行相应的系统调用，结束后，进行进程调度程序，恢复进程现场。</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">7)&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">用户界面：用户使用命令语言描述要求计算机去做的事情。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">命令语言：系统为支持命令语言的解释执行，设置了一个命令解释程序负责解释执行用户当前输入的命令，用户在终端上输入一条命令时，命令解释程序要做的工作如下：判断命令的合法性；识别命令（如果是简单命令，则进行系统调用）；如果是不认识的命令关键字，则在约定的目录下查找与命令挂念子同名的执行文件，创建子进程去执行&#8220;执行文件&#8221;，等待子进程结束后，返回继续读取下一条命令。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">图形用户界面：windows系统初始化后，为用户生成了一个explore.exe的进程，运行的是具窗口界面的解释程序。</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">4.&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">操作系统体系结构</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">1)&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">大内核</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:10.5000pt; font-family:'Times New Roman'; ">2)&nbsp;</span><span style=" font-size:10.5000pt; font-family:'宋体'; ">微内核</span></p></div><img src ="http://www.cppblog.com/chxzwj/aggbug/158847.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chxzwj/" target="_blank">chxzwj</a> 2011-10-21 21:26 <a href="http://www.cppblog.com/chxzwj/articles/158847.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>进程与线程</title><link>http://www.cppblog.com/chxzwj/articles/158824.html</link><dc:creator>chxzwj</dc:creator><author>chxzwj</author><pubDate>Fri, 21 Oct 2011 07:09:00 GMT</pubDate><guid>http://www.cppblog.com/chxzwj/articles/158824.html</guid><wfw:comment>http://www.cppblog.com/chxzwj/comments/158824.html</wfw:comment><comments>http://www.cppblog.com/chxzwj/articles/158824.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chxzwj/comments/commentRss/158824.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chxzwj/services/trackbacks/158824.html</trackback:ping><description><![CDATA[<div><div><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; "></span></p><div><div><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">1.&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">进程与线程</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">1)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">进程概念：由程序和代码、进程空间、系统资源、栈区组成，为对进程管理，通过PCB实现。</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">2)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">进程的状态和转换：创建，就绪，运行，阻塞，结束。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">由空到创建：第一个进程有系统初始化产生，以后有父进程通过创建进程的系&nbsp;统调用产生。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">创建到就绪：创建完成后，进入就绪状态。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9314;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">就绪到运行：被调度程序选中，分配到处理机上执行。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9315;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">运行到结束：调用结束进程系统调用或者异常流产，进行结束。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9316;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">运行到就绪：时间片到或者被高优先级进程打断</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9317;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">运行到等到：通过系统调用，请求某种资源，未得到，处于等待状态；系统调用是目态到管态的过程。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9318;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">等待到就绪：等待的事件来临</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">3)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">进程控制：</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">进程创建与终结：主要有初始化PCB表，置进程为就绪状态。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">模式切换：两种模式，目态和管态；划分的理由是保护操作系统和操作系统的数据表格不被可能出错的程序破坏。从管态到目态是通过操作系统内核程序修改程序状态字实现，从目态到管态是通过异常（也叫自陷、例外、内中断，不可屏蔽，有指令出错或者缺页触发）或者外中断（有硬件产生，可屏蔽）。（内中断和外中断，统称中断）；进程从目态到管态，只需保存进程的处理机信息。进行切换，要保存进程空间信息。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9314;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">进程切换：保存处理机信息，修改进程控制块，修改存储管理数据。</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">4)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">作业与进程的关系</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">批处理系统中作业与进程的关系：由SPooling输入进程将作业放入输入井，成为后备作业，由作业调度程序选择后备作业，创建根进程；可以有根进程创建更多的子进程，共同完成作业，由作业终止程序终至完成的作业，随后将作业送入输出井，有输出进程把数据送入打印机。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">分时系统中作业与进程的关系：用户通过命令语句逐条地与系统应答式地输入命令，提交作业步骤。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9314;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">交互式地提交批作业：系统有专门的调度程序，负责从作业队列中，选取作业，为选取的作业创建根进程，执行作业说明书中的命令.</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">5)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">进程通信，方法：共享存储方法（需要进行pv操作，由于进程空间相对独立的，因此要通过特殊的系统调用实现）；消息传递方式（通过发送和接受原语实现通信）</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">6)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">多线程概念与多线程模型：进程只作为除cpu以外的资源；线程则作为处理机的分配单位。</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">2.&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">处理机调度</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">1)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">调度的基本概念</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">高级调度：从外存上等候调度的作业中，选择一个调入内存，分配资源，创建进程，挂到就绪队列上。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">中级调度：把暂时无法运行的进程调入外存，减少内存空间的浪费；等内存空间空闲，把外存有条件的进程重新调入内存。引入中级调度，主要提高内存使用率和提高系统的吞吐量。调度出去的进程为挂起状态；中级调度实质为兑换。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9314;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">低级调度：进程调度。</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">2)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">进程调度的方式：</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">剥夺式调度：有优先级原则，时间片原则。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">非剥夺式调度：除进程运行结束或者进入阻塞状态以外，进程一直占用处理机。</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">3)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">进程主动放弃处理机的原因有：</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">进程执行完毕</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">进程进入阻塞状态</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">4)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">在可剥夺的进程调度中，新就绪的进程会按照某种原则，剥夺正在运行的进程的处理机，进程申请调度的时机，有以下情况：</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">中断处理完毕，引起某个进程变成就绪状态。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">进程释放临界区，引起等待该临界区的进程就绪</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9314;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">当进程发生系统调用，引起某个时间发生，导致其他等待进程就绪。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9315;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">引起其他任何原因导致进程为就绪态时。</span></p><p style="margin-left:41.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">总之，当有新进程就绪时，引发进程调度的申请。</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">5)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">在可剥夺式进程调度系统中，即便没有新的就绪进程，为了使所有就绪进程占用处理机，可在下述情况下申请进程调度：</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">时钟中断发生，时间片到，其他进程请求调度。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">任何引起优先级发生变化时，应请求重新调度。</span></p><p style="margin-left:41.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">操作系统并不一定要在引发进程调度原因时，马上进行进程调度。</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">6)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">进程的调度、切换、时机：一般来说，请求调度---&gt;调度-----&gt;切换，三个事件应该一气呵成；但在现在操作系统中，不能进行进程的调度与切换的情况有：</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">处理中断过程中。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">进程在操作系统那内核临界区中。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9314;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">其他需要完全屏蔽中断的原子操作过程中。</span></p><p style="margin-left:41.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">在上述的过程中，引发调度的条件，并不能马上进行调度，系统只是设置请求调度标志，等走出上述过程后，才进行调度和切换。应当进行进程调度和切换的时机如下：</span></p><p style="margin-left:41.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&lt;1&gt;,发生引起调度事件，且当前进程进入阻塞状态，可马上进行调度（若os只有在这种情况下进行调度，说明os是非剥夺调度。）</span></p><p style="margin-left:41.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&lt;2&gt;,当中断处理结束或者自陷处理结束后，返回被中断进程的用户态程序现场前，若置上请求调度标志，即可马上进行调度与切换。（实现了剥夺式调度）</span></p><p style="margin-left:41.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">切换往往是在调度之后发生的；典型的进程切换需要保存原进程当前切换点的现场信息，恢复被调度进程的现场信息。现场信息有：PC，PS，其他寄存器的内容、内核栈指针，进程存储空间的指针。</span></p><p style="margin-left:41.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">为了进行进程现场切换，操作系统内核将原进程的上述信息推入当前进程的内核栈保存它们，并跟新堆栈指针。内核从新进程的内核栈中装入新进程的现场信息，还要更新当前进程空间的指针，并且作废处理机联想存储器中有关原进程的信息。在内核完成清除工作后，重新设置PC寄存器，控制转到新进程的程序，开始运行。</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">7)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">调度的基本准则：</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">从用户角度：周转时间段，响应时间短，截止时间的保证</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">从系统角度：吞吐量达；处理机利用率高；各类资源平衡利用。</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">8)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">调度算法：</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">先来先服务调度算法（可不剥夺式调度）</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">优先级调度算法，两种，非可剥夺式优先级调度算法和可剥夺式优先级调度算法。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9314;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">时间片轮转算法发：先采用先来先服务，然后时间片到，把进程挂到就绪队列的末尾。时间片太大，那么将退化为先来先服务算法；若时间片太小，那么切换过于频繁，处理机开销变大，效率降低。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9315;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">短进行优先调度：优先选择运行时间短的小进程。（不可剥夺方式）</span></p><p style="margin-left:41.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">短进程优先算法和先来先服务算法都是非剥夺的，因此不能用于分时系统中，这是因为不能对用户及时响应。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9316;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">最高响应比优先算法：对短进程优先的改进，属于非可剥夺式算法。按照此算法，每个进程都有一个优先数，该优先数不但是要求的服务时间的函数，而且是该进程得到的服务所花费的等待时间的函数。进程的动态优先计算公式：优先数&nbsp;=&nbsp;（等到时间+请求服务时间）/（情感求服务时间），请求服务时间是分母，故对短进程有利，他的优先数高，可以优先运行。但由于等待时间是分子，故长进程等待较长的时间，从而提高其调度优先数，被分给了处理机。进程一旦得到锤击，他就一直运行到进程完成，中间不被抢占。可以看出&#8220;等待时间+请求服务时间&#8221;就是系统对作业的响应时间。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9317;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">多级反馈队列调度算法:采用多级队列，每级队列的优先级不同，优先级大的队列，时间片短。除最后一级别采用时间片轮转法后，其他的队列采用先进先出算法。</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">3.&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">进程同步</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">1)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">同步关系，互斥关系；临界资源；临界区</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">2)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">实现临界段问题的硬件方法：</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">屏蔽中断</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">Test_and_set指令</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9314;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">Swap指令</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9315;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">信号量</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9316;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">管程：由一组同步变量和使用同步变量的过程组成；是更高级的同步与互斥的抽象，但其解决同步与互斥的能力低于信号量机制。</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">4.&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">死锁：在一个进程集合里面，若每个进程都在等待某些释放资源的时间的发生，而这些事件又必须有这个进程集合中的某些进程产生，就成这些集合处于死锁状态。</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">1)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">死锁条件：</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">互斥。必须需要使用互斥的资源</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">占用等待。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9314;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">非剥夺</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9315;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">循环等待</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">2)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">死锁处理策略：</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">死锁防止：通过应用编程或者资源设计破坏死锁条件。</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">死锁避免：分配资源时，通过判断如果满足这次资源分配后，仍存在一条路径，使系统不会进入死锁状态，如果没有这种路径，则拒绝分配。</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">3)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">死锁防止：</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">破坏互斥条件</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">破坏占有等待条件</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9314;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">破坏非剥夺条件</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9315;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">破坏循环等待条件</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">4)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">死锁避免：银行家算法</span></p><p style="margin-left:42.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">5)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">死锁检测与解除：</span></p><p style="margin-left:21.0000pt; text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9312;　</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">检测：定时运行死锁检测程序。</span></p><p style="margin-left: 21pt; text-indent: 20pt; margin-bottom: 0pt; margin-top: 0pt; text-align: left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&#9313;　</span><span style="font-size: 10.5pt; font-family: 宋体; ">解除：删除某个进程，释放资源。<br />信号量机制相关代码：<br /></span></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">//整型信号量<br />wait(S)<br />{<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(S</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;S</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />}<br />signal(S)<br />{<br />&nbsp; &nbsp;S++;<br />}</span></div>&nbsp; &nbsp; &nbsp;由于整型信号量不满足进程同步的第四个原则&#8220;让权等待&#8221;；当wait操作时若信号量S&lt;=0，那么就会不断的循环测试S的值，不会释放CPU,记录型信号量可以解决这个问题：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">// 记录型信号量<br />typedef&nbsp;</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; "><br />{<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;value;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;process&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;L;<br />}semaphore;<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;wait(semaphore&nbsp;S)<br />{<br />&nbsp;&nbsp;&nbsp;S.value</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(S.value</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">&nbsp;process&nbsp;to&nbsp;S.L;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;block(S.L);<br />&nbsp;&nbsp;&nbsp;}<br />}<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;signal(semaphore&nbsp;S)<br />{<br />&nbsp;&nbsp;&nbsp;S.value</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(S.value</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;remove&nbsp;a&nbsp;process&nbsp;P&nbsp;from&nbsp;S.L;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wakeup(P);<br />&nbsp;&nbsp;&nbsp;}<br />}</span></div>以下举出几个经典的同步问题：<br />1，生产者消费者问题<br />问题描述：生产进程和消费进程共享大小为n的缓冲区，只要缓冲区没有满，生产者就可以把产品放入缓冲区；只要缓冲区不空，消费者就可以从缓冲区中取出消息。<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">Semaphore&nbsp;mutex&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />Semaphore&nbsp;empty&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;n;<br />Semaphore&nbsp;full&nbsp;&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />producer()<br />{<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;make&nbsp;a&nbsp;product;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(empty);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(mutex);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;a&nbsp;product&nbsp;to&nbsp;buffer;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(mutex);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(full);<br />&nbsp;&nbsp;&nbsp;}<br />}<br />consumer(){<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(full);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(mutex);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;remove&nbsp;a&nbsp;product&nbsp;from&nbsp;buffer;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(mutex);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(empty);<br />&nbsp;&nbsp;&nbsp;}<br />}</span></div>2,读者写者问题<br />问题描述：若干个读者和一个写着共享一个文件，写着在这个文件上写的时候不允许有读者读，党读者在读这个文件的时候，不允许写。<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;count&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //记录读者的数量<br />semaphore&nbsp;mutex&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//更新cout变量用<br />semaphore&nbsp;rw&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //读者和写着互斥访问<br />writer()<br />{<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(rw);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writing;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(rw);<br />&nbsp;&nbsp;&nbsp;}<br />}<br />reader()<br />{<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(mutex);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(count&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //若当前没有读者，申请阅读<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(rw);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(mutex);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reading;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(mutex);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(count&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//若当前没有读者，释放信号量，写者可以进入<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(rw);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(mutex);<br />&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div>3，打印机问题，问题描述：3个并发进程，共享打印机，只有一个缓冲区，R从输入设备读信息，读出后，放入缓冲区；进程M在缓冲区中加工信息；进程p把加工后的信息，输出；<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">Semaphore&nbsp;m1&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">是否有未被处理的数据</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">Semaphore&nbsp;m2&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">是否有被处理的数据</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">Semaphore&nbsp;empty&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />Semaphore&nbsp;mutex&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />R()<br />{<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(empty);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(mutex);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;put&nbsp;data&nbsp;to&nbsp;buffer;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(mutex);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(m1);<br />&nbsp;&nbsp;&nbsp;}<br />}<br />M()<br />{<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(m1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(mutex);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;process&nbsp;the&nbsp;data;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(mutex);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(m2);<br />&nbsp;&nbsp;&nbsp;}<br />}<br />P()<br />{<br />&nbsp;&nbsp;&nbsp;wait(m2);<br />&nbsp;&nbsp;&nbsp;wait(mutex);<br />&nbsp;&nbsp;&nbsp;output&nbsp;the&nbsp;data;<br />&nbsp;&nbsp;&nbsp;wait(mutex);<br />&nbsp;&nbsp;&nbsp;wait(empty);<br />}</span></div><br /><p>&nbsp;</p><p style="margin-bottom:0pt; margin-top:0pt; text-align:left; "></p></div></div><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; text-align:left; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; "></span></p></div></div><img src ="http://www.cppblog.com/chxzwj/aggbug/158824.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chxzwj/" target="_blank">chxzwj</a> 2011-10-21 15:09 <a href="http://www.cppblog.com/chxzwj/articles/158824.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>