{"id":714,"date":"2014-01-11T15:40:00","date_gmt":"2014-01-11T07:40:00","guid":{"rendered":"http:\/\/note.systw.net\/note\/?p=714"},"modified":"2023-11-04T15:44:44","modified_gmt":"2023-11-04T07:44:44","slug":"process-concept","status":"publish","type":"post","link":"https:\/\/systw.net\/note\/archives\/714","title":{"rendered":"Process Concept"},"content":{"rendered":"\n<p><strong>process<\/strong><br>\u7576program\u88ab\u57f7\u884c\u6642,\u5c31\u6703\u8b8a\u6210process<\/p>\n\n\n\n<p><strong>process\u901a\u5e38\u5305\u62ec3\u5927\u90e8\u4efd<\/strong><br>1<br>program counter,registers<br>2<br>stack,ex:function parameters,return addresses,automatic variable<br>heap,ex:memory dynamically allocated durning run time<br>3<br>data,ex:static variables,constants<br>text,ex:code<\/p>\n\n\n\n<p><br><strong>PCB(process control block)\/task control block<\/strong><br>\u96c6\u4e2dprocess\u76f8\u95dc\u8cc7\u8a0a\u7684\u4e00\u500btable<br>\u5167\u5bb9\u4e3b\u8981\u5982\u4e0b<br><strong>process number<\/strong>:process ID<br><strong>process state<\/strong>:\u5305\u62ecnew,ready,running,waiting,halted,&#8230;<br><strong>program counter<\/strong>: \u7528\u4f86\u6307\u793a\u4e0b\u4e00\u500b\u8981\u88ab\u57f7\u884c\u7684\u4f4d\u7f6e<br><strong>cpu registers<\/strong>:\u6240\u6709cpu registers\u7684\u5167\u5bb9<br>ex:accumulators, index registers, stack pointers, general purpose registers, condition-code information<br><strong>cpu scheduling information<\/strong>:\u5305\u62ecprocess priority,scheduling\u53c3\u6578\u7b49\u8cc7\u8a0a<br><strong>memory-management information<\/strong>&nbsp;\u5305\u62ecBase\/limit register, page table,&#8230;\u7b49<br><strong>accounting information<\/strong>: \u7528\u4e86\u591a\u5c11cpu time,CPU\u7684Max time, Quantum,&#8230;\u7b49<br><strong>I\/O status information<\/strong>: \u672a\u5b8c\u6210\u7684I\/O request, I\/O queue\u7684\u7b49\u5f85\u7de8\u865f, the list of I\/O devices allocated to this process, a list of open files<\/p>\n\n\n\n<p><br><strong>process state<\/strong><br>\u4e3b\u8981\u6709\u4ee5\u4e0b<br><strong>new<\/strong>:process\u88ab\u7522\u751f<br><strong>ready<\/strong>:process\u6b63\u5728\u5f85\u547d\u72c0\u614b(\u6e96\u5099\u8b93processor\u57f7\u884c)<br><strong>running<\/strong>:process\u6b63\u88ab\u57f7\u884c(\u88abprocessor\u57f7\u884c\u4e2d)<br><strong>waiting<\/strong>:process\u6b63\u5728\u7b49\u5f85\u4e00\u4e9b\u4e8b\u4ef6\u88ab\u89f8\u767c<br><strong>terminated<\/strong>:process\u7d50\u675f<\/p>\n\n\n\n<p><strong>state transition<\/strong><br>\u5404process state\u8f49\u63db\u7684\u60c5\u6cc1\u4e3b\u8981\u5982\u4e0b<br><strong>new-&gt;ready<\/strong>: admitted<br><strong>ready-&gt;running<\/strong>: scheduler dispatch<br><strong>running-&gt;ready<\/strong>: interrupt, share-time expire<br><strong>running-&gt;terminated<\/strong>: exit<br><strong>running-&gt;waiting<\/strong>: i\/o or event wait<br><strong>waiting-&gt;ready<\/strong>: i\/o or event completion<\/p>\n\n\n\n<p><strong>process scheduling queue<\/strong><br>\u7528\u4f86\u8b93cpu scheduler\u5f9e\u53ef\u7528\u7684process\u4e2d\u9078\u64c7\u4e0b\u4e00\u500b\u8981\u8b93CPU\u57f7\u884c\u7684process<br>\u4e3b\u8981\u7dad\u8b77\u7684\u6709\u4ee5\u4e0b<br><strong>job queue<\/strong>:\u7cfb\u7d71\u6240\u6709process\u96c6\u5408<br><strong>ready queue<\/strong>:\u5728memory\u5167\u7684process,\u6e96\u5099\u53ca\u7b49\u5f85\u9032\u5165running state\u88abCPU\u57f7\u884c<br><strong>device queue<\/strong>:\u4e3b\u8981\u5728\u7b49\u5f85I\/O<br><strong>event queue<\/strong>:\u4e3b\u8981\u5728\u7b49\u5f85\u4e8b\u4ef6\u89f8\u767c<\/p>\n\n\n\n<p><strong>schedulers<\/strong><br>\u5206\u70ba\u5169\u985e<br><strong>long-term scheduler\/job scheduler<\/strong><br>\u3000\u9078\u64c7\u90a3\u4e00\u500bprocess\u8981\u88ab\u653e\u5165ready queue<br><strong>short-term scheduler\/cpu scheduler\/process scheduler<\/strong><br>\u3000\u9078\u64c7\u90a3\u4e00\u500bprocess\u8981\u7d66CPU\u57f7\u884c<\/p>\n\n\n\n<p>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<\/p>\n\n\n\n<p><strong>process creation<\/strong><br>parent process\u80fd\u5efa\u7acbchildren processes,\u4e26\u7528PID(process identifer)\u7ba1\u7406\u8207\u8b58\u5225children process<\/p>\n\n\n\n<p><strong>resource sharing\u65b9\u5f0f<\/strong><br>\u5168\u90e8\u8cc7\u6e90\u5171\u4eab<br>\u90e8\u4efd\u8cc7\u6e90\u5171\u4eab<br>\u4e0d\u5171\u4eab\u8cc7\u6e90<br><strong>execution\u65b9\u5f0f<\/strong><br>parent and children\u540c\u6642\u57f7\u884c<br>parent\u7b49children\u7d50\u675f\u5f8c\u624d\u57f7\u884c<br><strong>address space\u65b9\u5f0f<\/strong><br>child process\u8907\u88fdparent process,\u4ee5\u5efa\u7acbchild process&nbsp;ex:fork()<br>child process\u4f7f\u7528program loaded,\u8f09\u5165program\u5230memory&nbsp;ex:exec()<br><strong>terminate\u65b9\u5f0f<\/strong><br>process\u56de\u50b3\u53ef\u522a\u9664\u7684\u72c0\u614b,\u8981\u6c42os terminate&nbsp;ex:wait()<br>parent process \u5f37\u5236terminate&nbsp;ex:kill()<br>ps:<br>\u82e5terminate\u6c92\u8655\u7406\u597d,process\u5c07\u8b8a\u6210zombie,orphans<\/p>\n\n\n\n<p>ex:<br>#include<br>#include<br>#include<br>int main()<br>{<br>\u3000pid_t pid;<br>\u3000int num=0;<br>\u3000pid=fork();<br>\u3000if(pid==0){ \/\/child process<br>\u3000\u3000execlp(&#8220;\/bin\/ls&#8221;,&#8221;ls&#8221;,NULL);<br>\u3000}else{ \/\/parent process<br>\u3000\u3000wait(NULL);<br>\u3000\u3000printf(&#8220;child eomplete&#8221;);<br>\u3000}<br>}<\/p>\n\n\n\n<p>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..<\/p>\n\n\n\n<p>ps:<br><strong>google chrome browser<\/strong><br>multiprocess<br>1browser:user interface,disk,network i\/o<br>2renderer:web page,deals with html,javascript,sandbox<br>3plug-in:<br>ps:<br>single process browser problem<br>if one web site causes trouble,entire browser can hang or crash<\/p>\n\n\n\n<p>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..<\/p>\n\n\n\n<p><strong>cooperating process(\u884c\u7a0b\u9593\u7684\u5408\u4f5c)<\/strong><br>\u5e38\u898b\u512a\u9ede\u6709:<br>\u3000information sharing<br>\u3000computation speedup<br>\u3000modularity&nbsp;ex: ls | grep abc<br>\u3000convenience<br>\u5be6\u4f5c\u7528IPC(inter process comunication)<br>\u4e3b\u8981\u6709\u4ee5\u4e0b<br>\u3000shared memory\uff1a\u4e0d\u900f\u904ekernel\u8655\u7406,&nbsp;\u4e3b\u8981\u4f7f\u7528shmget(),mmap()\u5be6\u4f5c<br>\u3000message passing\uff1a\u6703\u900f\u904ekernel\u8655\u7406,&nbsp;\u4e3b\u8981\u4f7f\u7528send(),receive()\u5be6\u4f5c<br>\u3000PIPE<\/p>\n\n\n\n<p>&#8230;<\/p>\n\n\n\n<p><strong>IPC shared memory<\/strong><br>Process\u5c07\u90e8\u4efd\u7a7a\u9593\u5c0d\u61c9\u5230\u76f8\u540c\u4e00\u500bshared memory segment,\u8b93\u5176\u4ed6process\u53ef\u4ee5\u8b80\u53d6,\u4ee5\u9054\u5230\u4ea4\u63db\u8cc7\u6599\u7684\u76ee\u7684,\u505a\u6cd5\u5982\u4e0b:<br>\u30001.ProcessA\u8907\u88fd\u5230\u540c\u70baUser Space\u7684shared Memory<br>\u30002.PorcessB\u518d\u5f9eShared Memory\u8907\u88fd\u56de\u53bb<br>\u6548\u80fd\u8f03message passing\u4f73<br>programmer\u8ca0\u64d4\u91cd,OS\u8ca0\u64d4\u8f15<br>\u3000\u4e3b\u8981\u7531Programmer\u4f86\u8ca0\u8cac\u8655\u7406\u5171\u4eab\u7684\u65b9\u6cd5<br>\u3000OS\u53ea\u8ca0\u8cac\u63d0\u4f9b\u5171\u4eab\u8a18\u61b6\u9ad4\u7a7a\u9593,\u4e0d\u6703\u5728\u63d0\u4f9b\u4efb\u4f55\u984d\u5916\u7684\u8cc7\u6e90<br>\u8f03\u5bb9\u6613\u6709bug: \u56e0\u70ba\u8a0a\u606f\u5206\u4eab\u7684\u65b9\u5f0f\u9700programmer\u81ea\u5df1\u8a2d\u8a08<br>\u5e38\u898b\u554f\u984c:<br>\u3000<strong>producer-consumer problem<\/strong><br>\u3000\u89e3\u6c7a\u65b9\u6cd5\u6709:unbounded-buffer(\u4e0d\u9650\u5236\u8cc7\u6e90,\u4f46\u4e0d\u53ef\u80fd),bounded-buffer(\u4e3b\u8981\u65b9\u6cd5)<br>\u3000<strong>Race Condition(\u7af6\u722d\u60c5\u6cc1)<\/strong><br>\u3000\u89e3\u6c7a\u65b9\u6cd5\u6709:\u53c3\u8003synchronization<\/p>\n\n\n\n<p><strong>IPC message passing<\/strong><br>Process\u900f\u904ekernel\u5c07\u8cc7\u6599\u76f4\u63a5\u50b3\u5230\u53e6\u4e00\u500bprocess,\u4e3b\u8981\u4f5c\u696d\u70basend\u548creceive,\u505a\u6cd5\u5982\u4e0b:<br>\u30001.ProcessA\u5f9eUser Space\u8907\u88fd\u5230Kernel Space<br>\u30002.ProcessB\u518d\u5f9eKernal\u8907\u88fd\u56deUser Space<br>\u6548\u80fd\u8f03shared memory\u5dee<br>programmer\u8ca0\u64d4\u8f15,OS\u8ca0\u64d4\u91cd<br>\u3000Programmer\u4e0d\u9700\u984d\u5916\u8ca0\u64d4\u5171\u4eab\u7684\u65b9\u6cd5<br>\u3000\u9700\u8981OS\u63d0\u4f9b\u984d\u5916\u652f\u63f4&nbsp;ex:Link Management, Link Capacity,Message Lost\u8655\u7406<br>ps:<br>\u5169\u500bProcess\u6e9d\u901a\u6642\u9700\u9075\u5b88\u7684\u6b69\u9a5f<br>1.\u5efa\u7acbCommunication Link<br>2.\u4e92\u50b3Message<br>3.\u50b3\u8f38\u5b8c\u7562\u5f8crelease link<\/p>\n\n\n\n<p>&#8230;<\/p>\n\n\n\n<p><strong>message passing implementation\u8b70\u984c<\/strong><br>\u4e3b\u8981\u6709\u4e09\u500b<br>direct or indirect communication<br>synchronous or asynchronous communication<br>automatic or explicit buffering<\/p>\n\n\n\n<p><strong>direct or indirect communication<\/strong><br><strong>direct communication<\/strong><br>\u3000\u8a0a\u606f\u76f4\u63a5\u5230\u76ee\u5730process<br>\u3000\u30001.\u5169\u500b\u8981\u806f\u7e6b\u7684process\u53ea\u9700\u77e5\u9053\u5c0d\u65b9\u8eab\u5206\u5373\u53ef<br>\u3000\u30002.\u9032\u884c\u901a\u8a0a\u7684\u5169\u500bprocess\u4e4b\u9593\u53ea\u6709\u4e00\u689dlink<br>\u3000\u53ef\u5206\u70ba<br>\u3000\u30001.\u5c0d\u7a31:\u63a5\u6536\u8005\u6216\u50b3\u9001\u8005\u5728\u806f\u7e6b\u6642\u5fc5\u9808\u4e92\u76f8\u6307\u540d<br>\u3000\u3000\u3000send(p,message)\u50b3\u4e00\u500bmessage\u7d66P<br>\u3000\u3000\u3000receive(Q,message)\u5f9eQ\u90a3\u63a5\u6536\u4e00\u500bmessage<br>\u3000\u30002.\u4e0d\u5c0d\u7a31:\u53ea\u6709\u767c\u9001\u53ea\u9700\u5148\u78ba\u5b9a\u63a5\u6536\u8005\u7684\u540d\u7a31\uff0c\u800c\u63a5\u6536\u8005\u4e0d\u9808\u6307\u51fa\u767c\u9001\u8005\u7684\u540d\u7a31<br>\u3000\u3000\u3000send(P,message)<br>\u3000\u3000\u3000receive(id,message)\u81ea\u4efb\u4f55\u4e00\u500bprocess\u63a5\u53d7\u4e00\u500bmessage(\u6536\u65b9\u4e0d\u6307\u5b9a\u9001\u65b9)<br><strong>indirect communication<\/strong><br>\u3000\u8a0a\u606f\u96c6\u4e2d\u5728\u4e00\u500b\u5730\u65b9,\u5728\u7531process\u81ea\u5df1\u53d6<br>\u3000\u6e9d\u901a\u96d9\u65b9\u5fc5\u9808\u900f\u904emailbox\u4f86\u50b3\u9001\u8207\u63a5\u6536\u8a0a\u606f<br>\u3000\u3000send(mailbox,message)\u9001\u4e00\u500bmessage\u5230mailbox<br>\u3000\u3000receive(mailbox,message)\u5f9emailbox\u63a5\u6536\u4e00\u500bmessage<br>\u3000\u6709\u4ee5\u4e0b\u7684\u7279\u6027<br>\u3000\u30001.\u5177\u6709\u5171\u7528\u7684mailbox\u7684process\u624d\u80fd\u5efa\u7acblink<br>\u3000\u30002.\u4e00\u689dlink\u53ef\u4ee5\u9023\u5230\u5169\u500b\u4ee5\u4e0a\u7684process<\/p>\n\n\n\n<p><strong>synchronous or asynchronous communication<\/strong><br><strong>synchronization<\/strong><br>\u3000blocking<br>\u3000blocking send(\u7b49\u5f85\u50b3\u9001):\u50b3\u9001\u884c\u7a0b\u7b49\u5f85\u76f4\u5230\u63a5\u6536\u884c\u7a0b\u6216mailbox\u63a5\u6536\u8a0a\u606f<br>\u3000blocking receive(\u7b49\u5f85\u63a5\u6536):\u63a5\u6536\u8005\u7b49\u5f85\u76f4\u5230\u6709\u6548\u8a0a\u606f\u51fa\u73fe<br>\u3000ex:sendmessage(),getmessage()<br><strong>asynchronous<\/strong><br>\u3000non-blocking<br>\u3000nonblocking send(\u975e\u7b49\u5f85\u50b3\u9001):\u50b3\u9001\u884c\u7a0b\u9001\u51fa\u8a0a\u606f\u53ca\u91cd\u65b0\u64cd\u4f5c\u3000<br>\u3000nonblocking receive(\u975e\u7b49\u5f85\u63a5\u6536):\u63a5\u6536\u8005\u6536\u5230\u6709\u6548\u8a0a\u606f\u6216\u7121\u6548\u8cc7\u6599<br>\u3000ex:postmessage(),peekmessage()<\/p>\n\n\n\n<p><strong>buffering<\/strong><br>zero capacity\u7121\u5bb9\u91cf<br>bounded capacity\uff1a\u9650\u5236\u5bb9\u91cf<br>unbounded capacity:\u7121\u5bb9\u91cf\u9650\u5236<\/p>\n","protected":false},"excerpt":{"rendered":"<p>process\u7576program\u88ab\u57f7\u884c\u6642,\u5c31\u6703\u8b8a\u6210proces &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[22],"tags":[],"class_list":["post-714","post","type-post","status-publish","format-standard","hentry","category-operationsystem"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts\/714","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/comments?post=714"}],"version-history":[{"count":0,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts\/714\/revisions"}],"wp:attachment":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/media?parent=714"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/categories?post=714"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/tags?post=714"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}