分布式系統(tǒng)概念和設(shè)計(jì)
Mach實(shí)例研究
Mach主要抽象概述
- 任務(wù)
- 一個(gè)Mach任務(wù)是一個(gè)執(zhí)行環(huán)境
- 主要包括一個(gè)被保護(hù)的地址空間和一個(gè)內(nèi)存管理的權(quán)能集合
- 這些權(quán)能主要用于訪問(wèn)端口
- 線程
- 任務(wù)可以包含多個(gè)線程
- 在共享內(nèi)存的多處理器中,屬于同一個(gè)任務(wù)的線程可以在不同的處理器上并行執(zhí)行
- 端口
- 在Mach中,一個(gè)端口是一個(gè)具有相關(guān)消息隊(duì)列的單點(diǎn)單方向通道
- Mach程序員不能直接訪問(wèn)這些端口,端口也不是任務(wù)的一部分
- 程序員可以獲得端口權(quán)限處理權(quán)柄,這里權(quán)能是讀取和寫(xiě)入端口數(shù)據(jù)的能力
- 端口集
- 一個(gè)端口集是屬于同一任務(wù)的接收權(quán)限的端口集,可以用于從端口集中任意端口接收消息。
- 和端口組不同,端口組是廣播消息的目的地集合
- 消息
- Mach中的消息除了包含數(shù)據(jù)外,還包含端口權(quán)限
- 內(nèi)核采用存儲(chǔ)管理技術(shù)在任務(wù)間高效的傳輸消息數(shù)據(jù)
- 設(shè)備
- 向文件服務(wù)器這樣運(yùn)行在用戶(hù)級(jí)的服務(wù)器一定要訪問(wèn)設(shè)備
- 內(nèi)核為底層設(shè)備提供了底層接口
- 內(nèi)存對(duì)象
- 在一個(gè)Mach任務(wù)的虛擬地址空間中,沒(méi)一個(gè)區(qū)域都對(duì)應(yīng)一個(gè)內(nèi)存對(duì)象
- 這種內(nèi)存對(duì)象通常是在內(nèi)存外實(shí)現(xiàn)的
- 當(dāng)時(shí)當(dāng)內(nèi)核執(zhí)行虛擬內(nèi)存分頁(yè)時(shí),就會(huì)訪問(wèn)內(nèi)存對(duì)象,內(nèi)核外的內(nèi)存對(duì)象
- 一個(gè)內(nèi)存對(duì)象是一個(gè)抽象數(shù)據(jù)類(lèi)型的實(shí)例,這一抽象數(shù)據(jù)類(lèi)型包含了獲取和存儲(chǔ)
- 當(dāng)線程試圖引用相應(yīng)區(qū)域的地址而引發(fā)內(nèi)存頁(yè)缺失時(shí)就需要訪問(wèn)數(shù)據(jù)的操作
- 內(nèi)存緩存對(duì)象
- 對(duì)于每一個(gè)被映射的內(nèi)存對(duì)象,系統(tǒng)中存在一個(gè)內(nèi)核管理的對(duì)象
- 這一對(duì)象包含對(duì)存在于主存中相應(yīng)區(qū)域的存儲(chǔ)頁(yè)的緩存,稱(chēng)為內(nèi)存緩存對(duì)象
- 它支持實(shí)現(xiàn)內(nèi)存對(duì)象的外部分頁(yè)器所需要的操作
端口命名和保護(hù)
- Mach用端口來(lái)區(qū)別每個(gè)資源
- 訪問(wèn)資源的請(qǐng)求會(huì)通過(guò)消息傳遞到某個(gè)端口上
- Mach會(huì)讓服務(wù)器管理很多端口
- 如何保護(hù)資源不被非法訪問(wèn)的問(wèn)題等同于如何保護(hù)響應(yīng)的端口不被非法的讀寫(xiě)數(shù)據(jù)
- 在Mach中通過(guò)內(nèi)核控制對(duì)端口權(quán)能的獲取來(lái)保護(hù)端口的同時(shí)也通過(guò)網(wǎng)絡(luò)服務(wù)器控制從網(wǎng)絡(luò)控制信息的到達(dá)保護(hù)
- 端口權(quán)能:
- 發(fā)送權(quán)能:發(fā)送端口數(shù)據(jù)權(quán)限
- 發(fā)送一次權(quán)限:內(nèi)核收到發(fā)送消息后回收該權(quán)限
- 接收權(quán)限:允許進(jìn)程從某端口接收數(shù)據(jù)的權(quán)限
- Mach的命名和保護(hù)方案使系統(tǒng)可以通過(guò)給定的用戶(hù)級(jí)標(biāo)識(shí)快速訪問(wèn)本地的消息隊(duì)列
- 缺點(diǎn):
- 當(dāng)任務(wù)之間以消息的形式傳遞權(quán)能的時(shí)候,內(nèi)核的開(kāi)銷(xiāo)會(huì)加大
- 至少在接收方的任務(wù)命名空間及其核心表空間內(nèi),系統(tǒng)必須為發(fā)送權(quán)限分配一個(gè)本地的名字
- 從安全角度考慮,網(wǎng)絡(luò)服務(wù)器傳輸?shù)亩丝跈?quán)限信息必須經(jīng)過(guò)加密。這樣才能防止竊聽(tīng)方式的攻擊
任務(wù)和線程
- 一個(gè)任務(wù)是一個(gè)執(zhí)行環(huán)境,任務(wù)自己不能自動(dòng)執(zhí)行任何動(dòng)作。只有任務(wù)中的線程啟動(dòng)任務(wù)執(zhí)行;
- 當(dāng)我們說(shuō)任務(wù)執(zhí)行某動(dòng)作,我們說(shuō)的是任務(wù)中的線程執(zhí)行了某個(gè)動(dòng)作;
- 與任務(wù)直接相關(guān)的資源是任務(wù)的地址空間,線程,端口權(quán)限,端口集以及用于查找端口權(quán)限和端口集的本地名字即可
創(chuàng)建一個(gè)新任務(wù)
端口的自舉
新任務(wù)的空間要么空
線程有子任務(wù)創(chuàng)建
調(diào)用內(nèi)核操作
當(dāng)任務(wù)被創(chuàng)建后,系統(tǒng)就賦予了一個(gè)內(nèi)核端口
系統(tǒng)調(diào)用:
- 直接內(nèi)核陷入實(shí)現(xiàn)
- 通過(guò)將消息傳遞到內(nèi)核的端口上來(lái)實(shí)現(xiàn)
- 優(yōu)點(diǎn),允許遠(yuǎn)程任務(wù)和線程像本地操作一樣
- 是網(wǎng)絡(luò)透明的
異常處理
除了內(nèi)核端口外,任務(wù)和線程還可以擁有一個(gè)異常端口
當(dāng)異常發(fā)生時(shí),內(nèi)核向異常端口發(fā)送異常信息來(lái)報(bào)告該異常
接收這消息的線程可能試圖解決這一問(wèn)題(例如當(dāng)?shù)刂房臻g越界,可以增大線程棧)
如果內(nèi)核找到一個(gè)異常端口并且接收到已經(jīng)成功處理應(yīng)答,就會(huì)重新啟動(dòng)引發(fā)異常的線程,否則將終止。
任務(wù)和線程管理
在內(nèi)核接口中有大量(過(guò)程,processes)的關(guān)于任務(wù)和線程的創(chuàng)建和管理
過(guò)程需要指導(dǎo)端口權(quán)限,并且消息傳遞系統(tǒng)能調(diào)度來(lái)請(qǐng)求目標(biāo)內(nèi)核的操作
系統(tǒng)可以分別這只調(diào)度優(yōu)先級(jí),線程和任務(wù)可以被掛起,解掛,終止
并且系統(tǒng)可以在外部設(shè)置,讀出,或修改線程的執(zhí)行狀態(tài)
通信模型
消息
消息包含一個(gè)固定大小的頭部,后面是一個(gè)變長(zhǎng)的數(shù)據(jù)項(xiàng)列表
端口
一個(gè)Mach端口包含一個(gè)消息隊(duì)列,具有接收權(quán)限的任務(wù)可以動(dòng)態(tài)的設(shè)置消息隊(duì)列的長(zhǎng)度。
這個(gè)功能能使接受者實(shí)現(xiàn)某種形式的流控制。
當(dāng)一個(gè)線程使用正常的發(fā)送權(quán)限向一個(gè)端口發(fā)送消息,而這個(gè)端口的消息滿(mǎn)了,這個(gè)線程只能阻塞,直到有空為止。
發(fā)送端口權(quán)限
當(dāng)消息中包含端口發(fā)送權(quán)限時(shí),消息接受者就獲得這一端口的發(fā)送權(quán)限
當(dāng)接收權(quán)限被傳輸時(shí),發(fā)送消息的任務(wù)自動(dòng)放棄了這一端口的接收權(quán)限
因?yàn)橥欢丝诮邮諜?quán)限在同一時(shí)刻的擁有者不能大于1個(gè)
監(jiān)控鏈接
當(dāng)發(fā)送消息和接收消息無(wú)效時(shí),內(nèi)核需要通知發(fā)送者和接受者。
內(nèi)核記錄了給定端口的發(fā)送權(quán)限數(shù)據(jù)和接受權(quán)限數(shù)目。
如果沒(méi)有任務(wù)擁有特定端口的接收權(quán)限,那么本地任務(wù)端口命名中的所有發(fā)送權(quán)限將成為死名
當(dāng)一個(gè)發(fā)送者試圖指向一個(gè)不存在的端口名字,內(nèi)核返回錯(cuò)誤
通信實(shí)現(xiàn)
透明消息傳遞
端口只局限于內(nèi)核上,從外部增加一層抽象——網(wǎng)絡(luò)端口
網(wǎng)絡(luò)端口的存在,消息可以在網(wǎng)絡(luò)上傳播——每個(gè)網(wǎng)絡(luò)端口都有一個(gè)全局的唯一標(biāo)識(shí),只有網(wǎng)絡(luò)服務(wù)器管理
開(kāi)發(fā)性和協(xié)議驅(qū)動(dòng)程序
傳輸協(xié)議
TCP/IP
TCP/IP通信模型是一種基于互聯(lián)網(wǎng)的通信模型,由兩個(gè)協(xié)議組成。TCP(Transmission Control Protocol,傳輸控制協(xié)議)是面向連接和可靠的傳輸協(xié)議,負(fù)責(zé)將數(shù)據(jù)在網(wǎng)絡(luò)中進(jìn)行分段、傳輸、重組、校驗(yàn)等操作。而IP(Internet Protocol,互聯(lián)網(wǎng)協(xié)議)則是網(wǎng)絡(luò)層協(xié)議,負(fù)責(zé)將數(shù)據(jù)在網(wǎng)絡(luò)中進(jìn)行路由選擇、分組傳輸和轉(zhuǎn)發(fā)等操作。
TCP/IP模型由四個(gè)層次組成,自下而上分別為:
- 網(wǎng)絡(luò)接口層:負(fù)責(zé)將數(shù)據(jù)幀(Frame)轉(zhuǎn)換為比特流(Bit stream)進(jìn)行傳輸,同網(wǎng)卡進(jìn)行交互。
- 網(wǎng)絡(luò)層:負(fù)責(zé)將數(shù)據(jù)報(bào)(Packet)在網(wǎng)絡(luò)中進(jìn)行路由,將數(shù)據(jù)從源地址發(fā)送到目標(biāo)地址。
- 傳輸層:TCP 和 UDP 使用這一層進(jìn)行數(shù)據(jù)傳輸。TCP 為可靠傳輸,保證數(shù)據(jù)不會(huì)丟失或損壞,使用連接的方式進(jìn)行通信;UDP 為不可靠傳輸,速度快,但無(wú)法保證數(shù)據(jù)傳輸?shù)目煽啃?,采用無(wú)連接的通信方式。
- 應(yīng)用層:該層為用戶(hù)提供各種豐富的網(wǎng)絡(luò)應(yīng)用服務(wù),如HTTP、FTP、SMTP和TELNET等協(xié)議。
TCP/IP模型通常被稱(chēng)為互聯(lián)網(wǎng)模型,并且它是將TCP/IP協(xié)議族分割成了多個(gè)抽象層次的模型,每個(gè)層次能夠提供自己的一系列功能
LAN
在局域網(wǎng)(Local Area Network,簡(jiǎn)稱(chēng) LAN)中,有多種請(qǐng)求應(yīng)答的交互模型,其中常見(jiàn)的有以下幾種:
- CSMA/CD(Carrier Sense Multiple Access with Collision Detection)模型:是局域網(wǎng)中最為常見(jiàn)的交互模型,應(yīng)用于以太網(wǎng)(Ethernet)等技術(shù)。它利用信道監(jiān)聽(tīng)(Carrier Sense)機(jī)制,即網(wǎng)絡(luò)設(shè)備在發(fā)送數(shù)據(jù)前需先監(jiān)聽(tīng)網(wǎng)絡(luò)信道,如果信道上沒(méi)有數(shù)據(jù)傳輸,則發(fā)送數(shù)據(jù);否則等待一定時(shí)間后再次監(jiān)聽(tīng)信道,如果仍然有數(shù)據(jù)傳輸,則判斷為沖突(Collision),發(fā)送設(shè)備需要停止發(fā)送并隨機(jī)等待后再次發(fā)送。
- Token Ring 模型:是在 Token Ring 網(wǎng)絡(luò)中應(yīng)用的交互模型。在這種模型中,所有設(shè)備通過(guò)一種名為 Token 的信息標(biāo)記輪廓式地傳遞數(shù)據(jù)。每個(gè)設(shè)備只有在收到 Token 后才可以發(fā)送數(shù)據(jù),一個(gè)設(shè)備發(fā)送完數(shù)據(jù)后將 Token 發(fā)送給下一個(gè)設(shè)備。
- Polling 模型:是一種點(diǎn)對(duì)點(diǎn)的交互模型,在這種模型中,主機(jī)(Server)或中央控制器向目標(biāo)設(shè)備發(fā)出查詢(xún)命令,目標(biāo)設(shè)備接收到查詢(xún)命令后進(jìn)行相應(yīng)操作并返回查詢(xún)結(jié)果。這種模型的效率較低,且必須有一個(gè)專(zhuān)門(mén)的控制器來(lái)調(diào)度多個(gè)設(shè)備的查詢(xún)請(qǐng)求,因此在現(xiàn)代局域網(wǎng)中很少使用。
- Multicast 模型:是一種點(diǎn)對(duì)多點(diǎn)的交互模型,在這種模型中,源設(shè)備只需要發(fā)送一次數(shù)據(jù),就可以將數(shù)據(jù)同時(shí)發(fā)送給多個(gè)目標(biāo)設(shè)備,提高了通信效率。這種模型通常應(yīng)用于視頻、音頻等多媒體數(shù)據(jù)傳輸場(chǎng)景中。
總之,不同的局域網(wǎng)交互模型有各自的優(yōu)缺點(diǎn)和適用場(chǎng)景,需要根據(jù)具體的網(wǎng)絡(luò)環(huán)境和應(yīng)用需求選擇合適的交互模型。
用戶(hù)級(jí)網(wǎng)絡(luò)驅(qū)動(dòng)程序
內(nèi)核為每一個(gè)設(shè)備提供一個(gè)抽象,包含一個(gè)將設(shè)備控制器的寄存器映射到用戶(hù)空間的操作
以太網(wǎng)的情況:
- 控制器使用的寄存器和包緩沖區(qū)可以被映射到網(wǎng)絡(luò)服務(wù)器的地址空間內(nèi)
- 當(dāng)中斷發(fā)生時(shí),在內(nèi)核中運(yùn)行的特殊代碼會(huì)喚醒用戶(hù)線程,這一線程可以處理中斷
內(nèi)存管理
地址空間結(jié)構(gòu)
每個(gè)區(qū)域是一段具有公共屬性集的連續(xù)的邏輯地址空間
這些屬性包含訪問(wèn)許可(讀寫(xiě)執(zhí)行),還包含可伸縮
系統(tǒng)允許棧空間向低地址擴(kuò)展,堆可以向高空間地址擴(kuò)展
內(nèi)存共享:繼承和消息傳遞
Mach通過(guò)內(nèi)存繼承機(jī)制,來(lái)允許UNIX fork機(jī)制的一般化
一個(gè)新的任務(wù)是從一個(gè)另一個(gè)任務(wù)創(chuàng)建的,這個(gè)任務(wù)是一個(gè)藍(lán)圖
從藍(lán)圖繼承過(guò)來(lái)的區(qū)域包含同樣的地址范圍
寫(xiě)時(shí)復(fù)制
寫(xiě)時(shí)復(fù)制(Copy-On-Write,COW)機(jī)制是一種能夠優(yōu)化復(fù)制操作的技術(shù)。其基本思想是在內(nèi)存中復(fù)制數(shù)據(jù)之前不會(huì)真正進(jìn)行復(fù)制,而是等到對(duì)數(shù)據(jù)進(jìn)行修改操作時(shí)以“復(fù)制一份副本”的方式,使修改后的數(shù)據(jù)可供使用,而原有數(shù)據(jù)仍保持不變。寫(xiě)時(shí)復(fù)制機(jī)制可以避免不必要的數(shù)據(jù)復(fù)制,節(jié)省內(nèi)存空間,同時(shí)還可以提高系統(tǒng)的性能和并發(fā)性能,降低鎖沖突的影響,提高系統(tǒng)的可擴(kuò)展性。
寫(xiě)時(shí)復(fù)制機(jī)制通常應(yīng)用于以下場(chǎng)景:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-491468.html
- 文件系統(tǒng)中,常用于快照(Snapshot)技術(shù)。快照是文件系統(tǒng)的一項(xiàng)重要功能,它能夠記錄文件系統(tǒng)的狀態(tài)并保存在特定時(shí)間點(diǎn)上的數(shù)據(jù)版本。寫(xiě)時(shí)復(fù)制技術(shù)可以在實(shí)現(xiàn)快照功能時(shí)避免整個(gè)文件系統(tǒng)的拷貝操作。
- 操作系統(tǒng)中,常用于進(jìn)程(Process)復(fù)制。當(dāng)需要?jiǎng)?chuàng)建一個(gè)新的進(jìn)程時(shí),寫(xiě)時(shí)復(fù)制機(jī)制會(huì)創(chuàng)建一個(gè)共享地址空間,以避免對(duì)進(jìn)程空間的一次完全的復(fù)制。只有當(dāng)進(jìn)程對(duì)某個(gè)地址進(jìn)行修改時(shí),才會(huì)復(fù)制原有地址中的內(nèi)容并創(chuàng)建一個(gè)新的共享地址空間。
- 數(shù)據(jù)庫(kù)系統(tǒng)中,常用于高可用性的實(shí)現(xiàn)。在數(shù)據(jù)庫(kù)服務(wù)器的主從備份(Master-Slave Replication)機(jī)制中,主服務(wù)器會(huì)將新寫(xiě)入的數(shù)據(jù)同步至備份服務(wù)器。在使用寫(xiě)時(shí)復(fù)制機(jī)制時(shí),從服務(wù)器只有在收到主服務(wù)器發(fā)來(lái)的新數(shù)據(jù)后,才會(huì)進(jìn)行一份完整的數(shù)據(jù)復(fù)制操作。
總之,寫(xiě)時(shí)復(fù)制機(jī)制是一個(gè)技術(shù)成熟、廣泛應(yīng)用的技術(shù),它可以在處理大量數(shù)據(jù)和需要進(jìn)行復(fù)制的場(chǎng)景中發(fā)揮作用,提高系統(tǒng)的性能、可擴(kuò)展性和可靠性。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-491468.html
到了這里,關(guān)于分布式系統(tǒng)概念和設(shè)計(jì)——Mach實(shí)例研究的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!