在很多計(jì)算機(jī)系統(tǒng)中,保護(hù)不同的程序或者一組程序不受其他程序的影響很重要粥烁。當(dāng)然你也不希望一個(gè)應(yīng)用去(不管是有意還是程序缺陷)打斷或阻止其他程序的運(yùn)行棚瘟。
為了解決這個(gè)問(wèn)題,有些系統(tǒng)提供了”虛擬墻“(稱為分區(qū))府树,來(lái)確保為每個(gè)分區(qū)提供一組經(jīng)過(guò)工程設(shè)計(jì)的資源俐末。主要的資源就是CPU時(shí)間,也可以包括其他的共享資源奄侠,例如內(nèi)存和磁盤空間等卓箫。
分區(qū)提供:
(1)內(nèi)存保護(hù):每個(gè)分區(qū)都是獨(dú)立的,由內(nèi)存管理單元控制(MMU )
(2)過(guò)載保護(hù):每個(gè)分區(qū)都有一個(gè)執(zhí)行時(shí)間片遭铺,由系統(tǒng)設(shè)計(jì)者指定丽柿。
通過(guò)使用多個(gè)分區(qū),可以避免單點(diǎn)故障魂挂。例如甫题,失控進(jìn)程不能占用整個(gè)系統(tǒng)資源,其他分區(qū)的進(jìn)程仍然可以獲得他們分配的系統(tǒng)資源涂召。
當(dāng)然坠非,即使沒有自適應(yīng)分區(qū),QNX微內(nèi)核進(jìn)程模型也提供了比其他OS更多的保護(hù)措施果正,例如:
- 進(jìn)程間的全內(nèi)存保護(hù)
- 消息傳遞炎码,提供了統(tǒng)一和可控的IPC
- 客戶端/服務(wù)器模型的優(yōu)先級(jí)繼承
4.硬實(shí)時(shí)確定性調(diào)度
5.細(xì)致權(quán)限模型(設(shè)備,文件秋泳,內(nèi)存)
6.內(nèi)存潦闲,文件描述符,CPU等優(yōu)先級(jí)限制(使用Posix setrlimt() 函數(shù)來(lái)約束進(jìn)程失控)
通常迫皱,在其他系統(tǒng)上進(jìn)行資源分區(qū)的主要目標(biāo)就是將一個(gè)計(jì)算機(jī)劃分成若干個(gè)交互較少的小計(jì)算機(jī)集歉闰。然而,這種方法不是很靈活。QNX自適應(yīng)分區(qū)則采取了更靈活的方式:
- 可以在運(yùn)行時(shí)更改配置
- 通常在一次配置時(shí)時(shí)固定的
- 分區(qū)行為在運(yùn)行時(shí)自動(dòng)適應(yīng)條件(例如:空閑時(shí)間可以被重新分配給其他調(diào)度器分區(qū)和敬;文件系統(tǒng)可以通過(guò)在時(shí)間分區(qū)之間移動(dòng)線程的機(jī)制來(lái)向客戶端記錄時(shí)間)
為什么引入自適應(yīng)分區(qū)
為了提供實(shí)時(shí)性能凹炸,并保證不會(huì)過(guò)載,QNX引入了自適應(yīng)分區(qū)昼弟。精準(zhǔn)分區(qū)在靜態(tài)系統(tǒng)(很少或者沒有動(dòng)態(tài)部署軟件)中工作的最好啤它。在動(dòng)態(tài)系統(tǒng)中,靜態(tài)分區(qū)可能效率就十分低下舱痘。例如变骡,在分區(qū)間靜態(tài)劃分執(zhí)行時(shí)間可能會(huì)浪費(fèi)CPU,并導(dǎo)致延遲衰粹。
如果大部分分區(qū)時(shí)空閑的锣光,只有其中一個(gè)是忙的。那么這個(gè)比較忙的分區(qū)不會(huì)收到任何額外的執(zhí)行時(shí)間铝耻,而其他的分區(qū)中的后臺(tái)線程則浪費(fèi)了大量的CPU時(shí)間誊爹。
如果一個(gè)中斷被安排到一個(gè)分區(qū),那么這個(gè)中斷有可能就必須要的等待瓢捉,直到改分區(qū)運(yùn)行频丘。這就好導(dǎo)致不可接受的延遲,特別是在中斷爆發(fā)的情況下泡态。
自適應(yīng)分區(qū)是一組處理共通或者相關(guān)目標(biāo)或活動(dòng)的線程搂漠。與靜態(tài)分區(qū)一樣,自適應(yīng)分區(qū)也需要給他提供分配一個(gè)預(yù)算(CPU資源)某弦。
與靜態(tài)分區(qū)不同的是桐汤,自適應(yīng)分區(qū)不會(huì)鎖定在靜態(tài)分區(qū)中的一組固定代碼上“凶常可以根據(jù)需要?jiǎng)討B(tài)添加和配置自適應(yīng)分區(qū)怔毛,在正常的負(fù)載下,作為全局性的硬實(shí)時(shí)線程調(diào)度器不僅能夠滿足需求腾降,而且還可以提供最小化的中斷延遲拣度,甚至在超載的情況下,最大化使用CPU資源螃壤。
引入自適應(yīng)分區(qū)抗果,不需要更改(甚至不需要重新編譯)應(yīng)用程序代碼,但必須重新構(gòu)建操作系統(tǒng)鏡像奸晴。
QNX系統(tǒng)中冤馏,最多可以有32個(gè)分區(qū),當(dāng)然調(diào)度的是線程寄啼,不是分區(qū)宿接。
自適應(yīng)分區(qū)的好處
1. 設(shè)計(jì)系統(tǒng)并優(yōu)化其性能
分區(qū)劃分資源赘淮,以便它們可以被一組程序使用。一個(gè)分區(qū)表示資源的一部分睦霎,并包含一些定義了這些資源使用的規(guī)則。這些資源包括基本對(duì)象走诞,如處理器周期副女、程序存儲(chǔ)或高級(jí)對(duì)象,如緩沖區(qū)蚣旱、頁(yè)表或文件描述符碑幅。
自適應(yīng)分區(qū)確保系統(tǒng)中任何可用的空閑時(shí)間(即分區(qū)預(yù)算中該分區(qū)不需要的CPU時(shí)間)可供其他分區(qū)使用。這使得系統(tǒng)能夠處理在正常系統(tǒng)運(yùn)行期間突然發(fā)生的處理需求
2. 處理解決系統(tǒng)的復(fù)雜性
設(shè)計(jì)大規(guī)模的分布式系統(tǒng)本質(zhì)上是復(fù)雜的塞绿。典型的系統(tǒng)有大量相互隔離開發(fā)的子系統(tǒng)沟涨、進(jìn)程和線程。設(shè)計(jì)被劃分為具有不同系統(tǒng)性能目標(biāo)异吻、不同的確定優(yōu)先級(jí)的方案和不同的運(yùn)行時(shí)優(yōu)化方法的組裹赴。
在不同的地理位置和時(shí)區(qū)進(jìn)行產(chǎn)品開發(fā)會(huì)進(jìn)一步加劇這種情況。一旦所有這些完全不同的子系統(tǒng)集成到一個(gè)公共運(yùn)行時(shí)環(huán)境中诀浪,系統(tǒng)的所有部分都需要在所有操作場(chǎng)景下提供足夠的響應(yīng)棋返,例如:
正常的系統(tǒng)加載
高峰時(shí)期
失敗條件
自適應(yīng)分區(qū)使用線程調(diào)度程序,允許架構(gòu)師保持儲(chǔ)備應(yīng)急資源的目的,比如一個(gè)災(zāi)難恢復(fù)系統(tǒng),或field-debugging shell,并定義高級(jí)CPU預(yù)算/子系統(tǒng),允許開發(fā)團(tuán)隊(duì)實(shí)現(xiàn)自己的優(yōu)先級(jí)計(jì)劃雷猪,優(yōu)先考慮預(yù)算睛竣。這種方法允許設(shè)計(jì)組獨(dú)立地開發(fā)子系統(tǒng),并簡(jiǎn)化集成工作求摇。最終的效果是提高產(chǎn)品上市時(shí)間和促進(jìn)產(chǎn)品擴(kuò)展射沟。
3. 提供安全保障
一些系統(tǒng)試圖通過(guò)實(shí)現(xiàn)一個(gè)監(jiān)控進(jìn)程來(lái)克服這個(gè)問(wèn)題,該進(jìn)程檢測(cè)CPU使用率与境,并在它認(rèn)為某個(gè)進(jìn)程使用過(guò)多CPU時(shí)調(diào)用糾正措施验夯。這種方法有許多缺點(diǎn),包括:響應(yīng)時(shí)間通常很慢嚷辅。
這種方法在需要合法處理時(shí)簿姨,限制CPU的使用。它不是絕對(duì)可靠的;它依賴于適當(dāng)?shù)木€程優(yōu)先級(jí)來(lái)確保monitor進(jìn)程獲得足夠的CPU時(shí)間簸搞。
自適應(yīng)分區(qū)可以通過(guò)為系統(tǒng)的不同功能提供單獨(dú)的預(yù)算來(lái)解決這個(gè)問(wèn)題扁位。這確保系統(tǒng)總是有一些CPU容量用于重要的任務(wù)。線程可以更改它們自己的優(yōu)先級(jí)趁俊,這可能是一個(gè)安全漏洞域仇,但您可以配置線程調(diào)度程序,以防止在分區(qū)中運(yùn)行的代碼更改其自己的預(yù)算
4. 簡(jiǎn)化調(diào)試
通過(guò)在系統(tǒng)中提供一個(gè)“應(yīng)急門”寺擂,自適應(yīng)分區(qū)甚至可以簡(jiǎn)化嵌入式系統(tǒng)的調(diào)試(在開發(fā)或部署期間)暇务。
簡(jiǎn)單地創(chuàng)建一個(gè)可以運(yùn)行診斷工具的分區(qū);如果不需要使用分區(qū)泼掠,線程調(diào)度程序?qū)⒃谄渌謪^(qū)之間分配它的預(yù)算。這為您提供了對(duì)系統(tǒng)的訪問(wèn)垦细,而不會(huì)影響系統(tǒng)的性能