﻿<?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>IT博客-记录成长的过程-随笔分类-理论知识</title><link>http://www.cnitblog.com/chenlei/category/8790.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 17 Oct 2011 01:51:19 GMT</lastBuildDate><pubDate>Mon, 17 Oct 2011 01:51:19 GMT</pubDate><ttl>60</ttl><item><title>前台进程、后台进程、守护进程</title><link>http://www.cnitblog.com/chenlei/archive/2011/10/16/76078.html</link><dc:creator>Mr.雷</dc:creator><author>Mr.雷</author><pubDate>Sun, 16 Oct 2011 13:39:00 GMT</pubDate><guid>http://www.cnitblog.com/chenlei/archive/2011/10/16/76078.html</guid><wfw:comment>http://www.cnitblog.com/chenlei/comments/76078.html</wfw:comment><comments>http://www.cnitblog.com/chenlei/archive/2011/10/16/76078.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chenlei/comments/commentRss/76078.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chenlei/services/trackbacks/76078.html</trackback:ping><description><![CDATA[前台进程就是用户使用的有控制终端的进程，守护进程是从来不需要用户输入的程序，它是一种特许的后台进程。<br /><div><span style="border-collapse: collapse; font-family: song, Verdana; font-size: 14px; line-height: 22px; ">基本上任何一个程序都可以后台运行，但守护进程是具有特殊要求的程序，比如要脱离自己的父进程，成为自己的会话组长等，这些要在代码中显式地写出来</span><span style="border-collapse: collapse; font-family: song, Verdana; font-size: 14px; line-height: 22px; "><br style="word-wrap: break-word; line-height: normal; " /></span><span style="border-collapse: collapse; font-family: song, Verdana; font-size: 14px; line-height: 22px; "><br style="word-wrap: break-word; line-height: normal; " /></span><span style="border-collapse: collapse; font-family: song, Verdana; font-size: 14px; line-height: 22px; ">换句话说，守护进程肯定是后台进程，但反之不成立。守护进程顾名思义，主要用于一些长期运行，守护着自己的职责（监听端口，监听服务等）。我们的系统下就有很多守护进程。<br /><div>很多系统服务名字后面带个d，就是daemon、守护的意思。另外unistd.h中定义了daemon()这个函数可以把当前进程状态转化为daemon进程。<br /><div>在<span href="tag.php?name=linux" style="word-wrap: break-word; line-height: normal; cursor: pointer; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #ff0000; white-space: nowrap; ">linux</span>下使用 &amp; 可以使程序进入后台运行模式</div></div></span></div><img src ="http://www.cnitblog.com/chenlei/aggbug/76078.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chenlei/" target="_blank">Mr.雷</a> 2011-10-16 21:39 <a href="http://www.cnitblog.com/chenlei/archive/2011/10/16/76078.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pthread_join与pthread_detach</title><link>http://www.cnitblog.com/chenlei/archive/2010/11/08/71074.html</link><dc:creator>Mr.雷</dc:creator><author>Mr.雷</author><pubDate>Mon, 08 Nov 2010 08:05:00 GMT</pubDate><guid>http://www.cnitblog.com/chenlei/archive/2010/11/08/71074.html</guid><wfw:comment>http://www.cnitblog.com/chenlei/comments/71074.html</wfw:comment><comments>http://www.cnitblog.com/chenlei/archive/2010/11/08/71074.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chenlei/comments/commentRss/71074.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chenlei/services/trackbacks/71074.html</trackback:ping><description><![CDATA[<p id="zw-1266edb376azrNzxW2dbd2a" zid="3" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">pthread_t&nbsp;&nbsp;&nbsp; pthr;<br id="zw-1266eef367bu0g2Zh2dbd2a" zid="7" /></p><p id="zw-1266eef367bdtB_se2dbd2a" zid="8" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">pthread_create(&amp;pthr, NULL, thread_handler, NULL);</p><p id="zw-1266ef259473gv43_2dbd2a" zid="9" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">...</p><p id="zw-1266ef260d9gfGXkC2dbd2a" zid="10" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">void* thread_handler(void* arg)</p><p id="zw-1266ef28e1bAdYA52dbd2a" zid="11" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">{</p><p id="zw-1266ef2c1cdlH5BK22dbd2a" zid="15" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">&nbsp;&nbsp;&nbsp; /* do something */</p><p id="zw-1266ef29474dOuX4K2dbd2a" zid="14" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; "><span zid="60" id="zw-1266f12c8e3tifchT2dbd2a" style="color: #ff0000; ">&nbsp;&nbsp;&nbsp; pthread_join(pthr, NULL);</span><span zid="41" id="zw-1266f0fed84VX7dmi2dbd2a"></span></p><p id="zw-1266f0ff703YZnGh42dbd2a" zid="42" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">}</p><p id="zw-1266f1035acf-2MCb2dbd2a" zid="43" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; "><br id="zw-1266f1035acuGHnUK2dbd2a" zid="4" /></p><p id="zw-1266f128524UcH3n2dbd2a" zid="5" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">上面的代码不好使，pthread_join不能放在pthread调用的handler内，虽然不报错，但是<span zid="59" id="zw-1266f1285246qLswR2dbd2a">thread无法正常回收，如果多次创建thread，内存会越来越大（另一种形式的内存泄露）。</span></p><p id="zw-1266f1230cbAfJbVP2dbd2a" zid="61" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; "><span zid="62" id="zw-1266f1230cbqDR-cA2dbd2a">正确的做法是在</span>handler外面pthread_join:</p><p id="zw-1266f10b7ebtm1_k2dbd2a" zid="44" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; "><br zid="45" id="zw-1266f10b7ebjXTBXp2dbd2a" /></p><p id="zw-1266f10a9cbmR-K_F2dbd2a" zid="46" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">pthread_t&nbsp;&nbsp;&nbsp; pthr;<br id="zw-1266f10a9cbTlXlnG2dbd2a" zid="47" /></p><p id="zw-1266f10a9cc3xbAS2dbd2a" zid="48" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">pthread_create(&amp;pthr, NULL, thread_handler, NULL);</p><p zid="49" id="zw-1266f10d1ffpp1DXx2dbd2a" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; "><span zid="63" id="zw-1266f12ed29Vx3x512dbd2a" style="color: #ff0000; ">pthread_join(pthr, NULL);</span><span id="zw-1266f10d1feib2gy2dbd2a" zid="50"></span></p><p id="zw-1266f10a9cckS1dd-2dbd2a" zid="51" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">...</p><p id="zw-1266f10a9cc1ftAdN2dbd2a" zid="52" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">void* thread_handler(void* arg)</p><p id="zw-1266f10a9ccbsqtCc2dbd2a" zid="53" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">{</p><p id="zw-1266f10a9cdxVT5Rv2dbd2a" zid="54" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">&nbsp;&nbsp;&nbsp; /* do something */</p><p id="zw-1266f10a9cd061pxh2dbd2a" zid="55" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">}</p><p id="zw-1266f10a9cdIIOlOJ2dbd2a" zid="56" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; "><br zid="57" id="zw-1266f10a9cdG4aHoE2dbd2a" /></p><p id="zw-1266ef73a26Z6jrt12dbd2a" zid="31" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">如果不用pthread_join，改用pthread_detach呢？那最方便，但要注意：pthread_detach最好是放在handler里面第一句。</p><p id="zw-1266f1345d7cZ4pdn2dbd2a" zid="64" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; "><br zid="65" id="zw-1266f1345d8OJ3agz2dbd2a" /></p><p id="zw-1266ef7413dFUZr9f2dbd2a" zid="21" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">void* thread_handler(void* arg)</p><p id="zw-1266ef7413e2X5GJD2dbd2a" zid="22" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">{</p><p id="zw-1266ef7413eNYUx8N2dbd2a" zid="23" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">&nbsp;&nbsp;&nbsp; pthread_detach(pthr);<br id="zw-1266ef7413eGp6U4_2dbd2a" zid="24" /></p><p id="zw-1266ef7413fgG6R8-2dbd2a" zid="25" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">&nbsp;&nbsp;&nbsp; /* do something */</p><p id="zw-1266ef7413fLcrWj2dbd2a" zid="28" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">}</p><p id="zw-1266f134bc3cAeU7W2dbd2a" zid="66" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; "><br zid="67" id="zw-1266f134bc3gVnhTN2dbd2a" /></p><p id="zw-1266ef69ea9OPJue92dbd2a" zid="30" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-family: 'trebuchet ms'; font-size: 13px; ">如果pthread_create后紧跟pthread_detach，有可能会出错。</p><img src ="http://www.cnitblog.com/chenlei/aggbug/71074.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chenlei/" target="_blank">Mr.雷</a> 2010-11-08 16:05 <a href="http://www.cnitblog.com/chenlei/archive/2010/11/08/71074.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是带内信令和带外信令</title><link>http://www.cnitblog.com/chenlei/archive/2010/10/13/70076.html</link><dc:creator>Mr.雷</dc:creator><author>Mr.雷</author><pubDate>Wed, 13 Oct 2010 07:26:00 GMT</pubDate><guid>http://www.cnitblog.com/chenlei/archive/2010/10/13/70076.html</guid><wfw:comment>http://www.cnitblog.com/chenlei/comments/70076.html</wfw:comment><comments>http://www.cnitblog.com/chenlei/archive/2010/10/13/70076.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chenlei/comments/commentRss/70076.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chenlei/services/trackbacks/70076.html</trackback:ping><description><![CDATA[信令是交换机之间通信的语言，带外信令是指信令和语音信号的传输走不通的通道。<div><span  style="border-collapse: collapse; font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 22px; ">在很久很久以前（long long ago)，那时候人们还处于模拟通信和机械式交换机的时代（纵横或者步进），那时候不存在独立的信令网，交换机之间的&#8220;语言交流（信令）&#8221;和语音信号在一条传输通道上跑。这就是带内信令。后来发展了，交换机之间的&#8220;语言交流（信令）&#8221;和语音信号的传输分别走不同的传输通道，建立起独立的信令网，这样信令信号走信令网，语音走语音的传输通道，两者分道扬镳，这就是带外信令！</span></div><img src ="http://www.cnitblog.com/chenlei/aggbug/70076.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chenlei/" target="_blank">Mr.雷</a> 2010-10-13 15:26 <a href="http://www.cnitblog.com/chenlei/archive/2010/10/13/70076.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是虚拟机监控器VMM</title><link>http://www.cnitblog.com/chenlei/archive/2010/09/18/68901.html</link><dc:creator>Mr.雷</dc:creator><author>Mr.雷</author><pubDate>Sat, 18 Sep 2010 07:05:00 GMT</pubDate><guid>http://www.cnitblog.com/chenlei/archive/2010/09/18/68901.html</guid><wfw:comment>http://www.cnitblog.com/chenlei/comments/68901.html</wfw:comment><comments>http://www.cnitblog.com/chenlei/archive/2010/09/18/68901.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chenlei/comments/commentRss/68901.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chenlei/services/trackbacks/68901.html</trackback:ping><description><![CDATA[<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">在看一些关于VMM的文章的时候,始终不是很明白VMM到底算是个什么.包括经典的VAX VMM安全内核.师兄的一句话点醒了我.VMM其实就是一个简单的操作系统.它提供很多抽象的虚拟机可以让多个操作系统同时运行,甚至这些操作系统也不需要相同.从系统的角度看,这个时候的每一个虚拟机其实相当于VMM这个OS的一个进程,虽然是看上去比较奇怪,比较难理解的进程.</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VMM的不可旁路可能通过运行在最高的特权级来保证.Intel的VenderPool技术值得期待.另一方面,为了能够彻底验证,VMM必须足够小.因此从这个意义上,VMM是一个最简单的操作系统.它有类似传统OS的进程管理,内存管理,设备管理,又尽量简化.为了简单,内存甚至可以静态分配.为了简单,VMM不需要支持多种多样的设备,只需要有最基本的驱动,即使如此,驱动程序也是第一类虚拟机所带来的很大的负担.着眼于实现安全内核的时候,安全是第一位的,效率是第二位的.</p>
<img src ="http://www.cnitblog.com/chenlei/aggbug/68901.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chenlei/" target="_blank">Mr.雷</a> 2010-09-18 15:05 <a href="http://www.cnitblog.com/chenlei/archive/2010/09/18/68901.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>性能测试与压力测试的区别</title><link>http://www.cnitblog.com/chenlei/archive/2010/09/08/68693.html</link><dc:creator>Mr.雷</dc:creator><author>Mr.雷</author><pubDate>Wed, 08 Sep 2010 03:18:00 GMT</pubDate><guid>http://www.cnitblog.com/chenlei/archive/2010/09/08/68693.html</guid><wfw:comment>http://www.cnitblog.com/chenlei/comments/68693.html</wfw:comment><comments>http://www.cnitblog.com/chenlei/archive/2010/09/08/68693.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chenlei/comments/commentRss/68693.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chenlei/services/trackbacks/68693.html</trackback:ping><description><![CDATA[

<span style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><font size="2"><strong>&nbsp;&nbsp; &nbsp; 综合性能=压力数*性能指数，<br>&nbsp;&nbsp; &nbsp; 综合性能是固定的：<br>&nbsp;&nbsp; &nbsp; 压力测试是为了得到性能指数最小时候（可以接受的最小指数）最大的压力数<br>&nbsp;&nbsp;&nbsp;&nbsp; 性能测试</strong></font><font size="2"><strong>是为了得到压力数确定下的性能指数</strong></font></span><img src ="http://www.cnitblog.com/chenlei/aggbug/68693.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chenlei/" target="_blank">Mr.雷</a> 2010-09-08 11:18 <a href="http://www.cnitblog.com/chenlei/archive/2010/09/08/68693.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>