進(jìn)程間通信(IPC)解決和問題和算法

談?wù)勎覀兊倪M(jìn)程間通信,上次我們談進(jìn)程是什么?進(jìn)程是社會(huì)的一個(gè)個(gè)人,每個(gè)都有自己的財(cái)產(chǎn),都有自己的空間,那么人需要通信嗎?人需要通信,否則社會(huì)不會(huì)向前流通,而進(jìn)程作為一個(gè)個(gè)實(shí)體也會(huì)有自己的溝通,否則一個(gè)個(gè)憋在那能干什么?當(dāng)然當(dāng)個(gè)笑話聽!這里面涉及到三個(gè)問題,第一是比較棘手的,怎么把信息從一個(gè)進(jìn)程傳給另外一個(gè)進(jìn)程?這個(gè)我們這樣想,人在社會(huì)上生存是不是要交流,你給老外講中文他能聽懂?所以信息必須以一種約定好的規(guī)格傳遞,當(dāng)然,這只是我這樣想。第二點(diǎn),人在社會(huì)中生存,我們都會(huì)有競(jìng)爭(zhēng),我們都需要搶奪資源,這對(duì)于進(jìn)程來講也一樣的,而且很多時(shí)候兩者會(huì)產(chǎn)生沖突造成一些不可預(yù)估的結(jié)果,我們想人之間有沖突會(huì)打架需要調(diào)節(jié),進(jìn)程不一樣的嗎?最后一點(diǎn)是進(jìn)程間的執(zhí)行有時(shí)是需要秩序的,進(jìn)程A獲得數(shù)據(jù)而進(jìn)程B打印數(shù)據(jù),諸如此類。 所以我們歸納進(jìn)程間通信(IPC)主要解決三個(gè)問題:在進(jìn)程間傳遞數(shù)據(jù)進(jìn)程間約定秩序協(xié)調(diào)對(duì)于共享數(shù)據(jù)的互斥訪問 topic1: 競(jìng)爭(zhēng)條件:當(dāng)兩個(gè)或多個(gè)進(jìn)程同時(shí)訪問某個(gè)共享區(qū)域時(shí)(通常會(huì)有讀寫兩種情況),最后的運(yùn)行結(jié)果取決于進(jìn)程的運(yùn)行時(shí)序,這樣就產(chǎn)生了競(jìng)爭(zhēng)條件,很經(jīng)典的問題就是對(duì)文件的讀寫,一個(gè)在讀,一個(gè)在寫,讀出來的東西很可能不是你想要的,所有IPC必需要協(xié)調(diào)好對(duì)于共享數(shù)據(jù)的互斥訪問,也就是說,必需要有這樣一種機(jī)制能夠避免這種競(jìng)爭(zhēng)的發(fā)生! 臨界區(qū)的概念: 既然有競(jìng)爭(zhēng),那我們就必須要去協(xié)調(diào)!如何避免?比如張三和李四都想要某個(gè)東西,兩個(gè)人打起來了,現(xiàn)在怎么辦,他們自己肯定不想停下來,都想要這個(gè)東西,現(xiàn)在我們作為他們的上級(jí),肯定要說,你們不要打了,讓其中一個(gè)拿走這個(gè)東西,或者更好的建議是,我們?cè)谥熬蛻?yīng)該分配好,在更高的層次上說,比如張三就應(yīng)該先拿走這個(gè)東西,可是這樣對(duì)于其他人(其他進(jìn)程)是不公平的,所以誰先到先得,我們只需要保證,當(dāng)他拿到這個(gè)東西的時(shí)候,其他人不能搶奪,拿不走,同樣的思想,運(yùn)用在進(jìn)程上!這種思想的根本在于對(duì)于互斥的實(shí)現(xiàn),一個(gè)人在做,另外的人只能看! 不知你懂否,看了這么久,其實(shí)我們就是在探討一個(gè)問題,上面的問題3,如何達(dá)到互斥訪問,但是這樣的描述其實(shí)還不夠精確,因?yàn)槭聦?shí)上,進(jìn)程 真正訪問共享區(qū)域的只有一部分時(shí)間而已,為了把互斥做得更細(xì)致,我們要往下走!一個(gè)進(jìn)程訪問共享區(qū)域的那部分代碼,我們不妨稱之臨界區(qū),其實(shí)名字無所謂,但是這個(gè)考試或者面試經(jīng)???,而且很多人誤以為是內(nèi)存或者資源,不要鬧了笑話!那我們以這樣的視角看,大家都有開車的時(shí)候,這么多人,都某個(gè)點(diǎn)開出來那么肯定會(huì)堵車,那我們只要讓大家錯(cuò)開時(shí)間段出來就好了啊! 當(dāng)然這依然是一個(gè)很粗的模型,事實(shí)上,我們需要提出一個(gè)方案(也就是一個(gè)算法)解決互斥(如同解決交通堵塞問題一樣),這個(gè)方案最好應(yīng)該滿足以下的條件: 基本條件,解決互斥 你的方案不應(yīng)該對(duì)cpu速度和這類條件作任何假設(shè),這個(gè)很容易理解,cpu的執(zhí)行在多道程序模型下是具有不可再現(xiàn)性的! 因?yàn)榕R界區(qū)互斥,A進(jìn)程在占用,B進(jìn)程阻塞,但是C進(jìn)程不能因?yàn)锽進(jìn)程的阻塞阻塞,也就是說不要引起無關(guān)人的損傷! A執(zhí)行,B阻塞,你讓我一直等!no!那我還咋混!笑話聽。 上面最后兩點(diǎn)涉及到后面會(huì)談到的死鎖,活鎖,饑餓,反正大家記住,系統(tǒng)就是要讓每個(gè)進(jìn)程都能安安穩(wěn)穩(wěn)的執(zhí)行! 說白了,比較好的結(jié)果就,A執(zhí)行,B等一會(huì),A走了,B跑,大家走,理想的效果! 下面就這個(gè)算法向大家介紹一些比較典型的算法! 這個(gè)為了講清楚,我不想講的很籠統(tǒng),首先大家要知道從大的角度看,有兩種方式,忙等待與非忙等待! 忙等待和非忙等待不是兩種算法,而是兩種思路,下面包括實(shí)際的解決方法,其實(shí)忙等待和非忙等待是很經(jīng)典的兩個(gè)模型,不僅在進(jìn)程通信有這個(gè)概念,其實(shí)就是事件模型,當(dāng)某個(gè)事件發(fā)生的時(shí)候,你如何知道?比如你在等某一個(gè)人,如果你很急,你可能會(huì)不斷跑到門口去看,來了沒有?。∵@就是忙等待,非忙等待就是我在這睡覺,咦,有人敲門了,好,等到了!這個(gè)聽懂了,很多其他開發(fā)你自然理解了! 我們說忙等待,如何實(shí)現(xiàn)互斥? 籠統(tǒng)的講,忙等待實(shí)現(xiàn)互斥是通過不斷的檢測(cè)一個(gè)狀態(tài)變量,當(dāng)這個(gè)狀態(tài)變量為某個(gè)值的時(shí)候就往下執(zhí)行!你也可以按你的思路理解,這個(gè)狀態(tài)變量,就像一把鎖,你不斷去看開了沒有,也可以理解為一個(gè)信號(hào)燈,隨你的想法了,但是思想都是一樣的! 忙等待的幾個(gè)算法: first:禁止中斷,這種方法你需要知道一個(gè)前提,我們需要讓進(jìn)程1執(zhí)行完后進(jìn)程2,3,4.。。依次執(zhí)行,如何實(shí)現(xiàn)?我們通過時(shí)間中斷,每次時(shí)間中斷后更新進(jìn)程x的執(zhí)行時(shí)間,到了時(shí)間了,對(duì)不起了您,收拾東西先回去吧!所以如果你關(guān)了中斷,這就是開了WG啊,哥想執(zhí)行多久就執(zhí)行多久,誰還能搶奪我的時(shí)間,我得資源?可是這樣帶來了一些問題,第一用戶沒有權(quán)利開關(guān)中斷,限于內(nèi)核編程,另外現(xiàn)在cpu多核,關(guān)一般關(guān)一個(gè)核的中斷,最后,你掌控了全局的壽命,這不是很安全的做法,要是你小子不把時(shí)間給其他人咋辦?所以,現(xiàn)在這種方式不是很有用。 second:嚴(yán)格交替法,設(shè)置一個(gè)變量不妨為x,這種方法在進(jìn)程1和進(jìn)程0間討論,設(shè)x最開始為0,進(jìn)程0不斷對(duì)x檢測(cè)看是否為0,進(jìn)程1不斷對(duì)x檢測(cè)看是否為1,這里先敘述到這,下章再續(xù)。
相關(guān)文章
fast無線路由器設(shè)置方法 FAST FW300R無線路由器設(shè)置圖解
下面介紹下Fast FW300R無線路由器寬帶共享上網(wǎng)的設(shè)置圖解。隨著網(wǎng)絡(luò)的發(fā)展無線路由器已近逐步的普及到家庭用戶中了。本網(wǎng)站主要介紹各類路由器設(shè)置的圖解教程,下面開始介2015-05-12Dlink 無線路由器怎么設(shè)置 dlink DI-624無線路由器設(shè)置圖文教程
下面我們介紹D-Link DI-624+A無線路由器的寬帶上網(wǎng)以及無線參數(shù)的設(shè)置方法2011-10-17- 今天小編為大家介紹的是好看的yy馬甲格式、yy馬甲格式大全設(shè)計(jì),感興趣的朋友可以看一下2014-05-15
路由器橋接(WDS) 無法從副路由(B路由,從路由)上網(wǎng) 解決方法(DHCP設(shè)置
許多同學(xué)都已經(jīng)在家中搭建無線網(wǎng)絡(luò),但由于墻體等障礙物的阻擋,讓無線信號(hào)衰減得十分厲害,為了解決這個(gè)問題相信不少同學(xué)已經(jīng)開始嘗試在家中使用無線橋接路由器的方法來拓展2012-07-20- 很多人都遇到這樣的問題,就是自己筆記本電腦的無線網(wǎng)卡可以搜索到信號(hào)但卻無法連接,這種情況基本上是下面幾種原因?qū)е碌?/div> 2012-05-11
局域網(wǎng)中兩臺(tái)無線路由器聯(lián)接配置方法圖文教程
隨著無線網(wǎng)絡(luò)的普及,無線路由器也逐漸進(jìn)入我們的生活中;但如果你購(gòu)買了無線路由器,而且還要同時(shí)使用以前的有線路由器或你的寬帶本身就是從鄰居家路由器中接入的(即同一2010-03-23D-Link 路由器設(shè)置圖解 以DI-504為例[推薦]
第一步:連接DI-504寬帶路由器到您的網(wǎng)絡(luò) A. 首先,將DI-504自帶的9V交流電源適配器連接到DI-504后面板上;然后將適配器插入您的電源插座。DI-504前面板的電源LED指示2009-02-21SecureCRT是最常用的終端仿真程序,簡(jiǎn)單的說就是Windows下登錄UNIX或Liunx服務(wù)器主機(jī)的軟件,本文主要介紹SecureCRT的使用方法和技巧2012-06-11Connectify 將win7系統(tǒng)變成無線熱點(diǎn)的使用教程
如果需要隨時(shí)建立無線熱點(diǎn)的話,Connectify完全可以勝任。如果大家在尋找一種簡(jiǎn)單方法來使Windows 7電腦和其他設(shè)備共享無線網(wǎng)絡(luò),并且還要保證安全的話,就是Connectify了2010-04-17微友獵手是YY50發(fā)布的一款全球首家微信好友管理輔助軟件,她最快只需3秒鐘,就能找出已經(jīng)把你刪除的好友,一起來看看具體的使用方法吧2016-09-12最新評(píng)論