QNX簡(jiǎn)介

系統(tǒng)簡(jiǎn)介

QNX是一個(gè)分布式、可擴(kuò)展晚吞、遵從POSIX規(guī)范的類Unix硬實(shí)時(shí)操作系統(tǒng)延旧。
QNX為微內(nèi)核的架構(gòu)谋国,微內(nèi)核只提供進(jìn)程調(diào)度、進(jìn)程間通信迁沫、底層網(wǎng)絡(luò)通信和中斷處理四種服務(wù)芦瘾。驅(qū)動(dòng)程序、協(xié)議棧集畅、文件系統(tǒng)近弟、應(yīng)用程序等都在微內(nèi)核之外內(nèi)存受保護(hù)的安全的用戶空間內(nèi)運(yùn)行,組件之間能避免相互影響挺智,在遇到故障時(shí)也能重啟祷愉。

QNX系統(tǒng)架構(gòu)圖

QNX Neutrino通過(guò)兩個(gè)基本的原則,達(dá)到了獨(dú)一無(wú)二的有效性赦颇、模塊化和簡(jiǎn)潔性:

  • 微內(nèi)核架構(gòu)
  • 基于消息的進(jìn)程間通信

微內(nèi)核架構(gòu)

在微內(nèi)核OS中二鳄,內(nèi)核精簡(jiǎn),只實(shí)現(xiàn)OS最基本的核心部分并提供相應(yīng)的服務(wù)媒怯,基于這些服務(wù)可以擴(kuò)展完整的OS功能订讼。設(shè)計(jì)一個(gè)微內(nèi)核OS的目標(biāo)是模塊化,而并非最小化扇苞。
微內(nèi)核提供的IPC服務(wù)用于將操作系統(tǒng)本身“粘合”在一起欺殿,這些服務(wù)的性能和靈活性決定了系統(tǒng)最終的性能”罘螅可以使用IPC服務(wù)和其他附加的服務(wù)來(lái)擴(kuò)展內(nèi)核的功能脖苏。 用戶編寫(xiě)的進(jìn)程既可以作為應(yīng)用程序,也可以作為底層OS功能來(lái)支持行業(yè)特定的應(yīng)用程序定踱。 操作系統(tǒng)本身變得“開(kāi)放”并且易于擴(kuò)展帆阳。 此外,用戶編寫(xiě)的OS擴(kuò)展也不會(huì)影響核心OS的基本可靠性屋吨。

QNX內(nèi)存保護(hù)

對(duì)許多依照POSIX1.003.1標(biāo)準(zhǔn)實(shí)現(xiàn)的實(shí)時(shí)執(zhí)行程序來(lái)說(shuō)蜒谤,它們的運(yùn)行時(shí)環(huán)境通常是單進(jìn)程、多線程的模型至扰,線程之間沒(méi)法做到內(nèi)存保護(hù)鳍徽,而這樣的環(huán)境只是POSIX假設(shè)的多進(jìn)程模型的一個(gè)子集,它不支持fork()函數(shù)敢课。相比之下阶祭,QNX Neutrino利用MMU绷杜,在受保護(hù)的環(huán)境中實(shí)現(xiàn)了POSIX的線程模型。
一個(gè)真正的微內(nèi)核會(huì)提供完整的內(nèi)存保護(hù)濒募,這個(gè)不僅適用于用戶程序鞭盟,也適用于OS組件,比如驅(qū)動(dòng)程序瑰剃、文件系統(tǒng)等齿诉。

針對(duì)內(nèi)存保護(hù),有以下幾種情況:

  • 不提供內(nèi)存保護(hù):所有程序位于同一個(gè)地址空間晌姚,應(yīng)用程序可以訪問(wèn)所有空間粤剧,效率較高,但是程序指針錯(cuò)誤可能造成內(nèi)核崩潰挥唠,典型的比如Nuttx平板模式抵恋。


    平板模式
  • 單內(nèi)核OS提供部分內(nèi)存保護(hù):用戶層和系統(tǒng)層進(jìn)行了隔離,內(nèi)核和各種驅(qū)動(dòng)宝磨、協(xié)議棧在同一個(gè)地址空間弧关,應(yīng)用程序在單獨(dú)空間。內(nèi)核模塊處于一個(gè)保護(hù)空間唤锉,效率較高世囊,應(yīng)用程序無(wú)法訪問(wèn),系統(tǒng)的穩(wěn)定性也得到提高腌紧。由于內(nèi)核模塊處于保護(hù)空間茸习,調(diào)試會(huì)比較困難。比如Linux系統(tǒng)壁肋。


    單內(nèi)核模式
  • 微內(nèi)核OS提供完整的內(nèi)存保護(hù):內(nèi)核處于一個(gè)被保護(hù)的地址空間号胚,驅(qū)動(dòng)程序、網(wǎng)絡(luò)協(xié)議及應(yīng)用程序等處于程序空間中浸遗。


    微內(nèi)核模式

QNX Neutrino微內(nèi)核

內(nèi)核是操作系統(tǒng)的核心猫胁,在有些操作系統(tǒng)中,內(nèi)核包含了很多功能跛锌,導(dǎo)致內(nèi)核像是個(gè)完整的操作系統(tǒng)弃秆。而QNX的微內(nèi)核是一個(gè)真正的內(nèi)核,它非常小髓帽,并且只提供基本的服務(wù):

  • 通過(guò)POSIX線程創(chuàng)建原語(yǔ)提供的線程服務(wù)菠赚;
  • 通過(guò)POSIX信號(hào)原語(yǔ)提供的信號(hào)服務(wù);
  • 消息傳遞服務(wù)郑藏,微內(nèi)核處理整個(gè)系統(tǒng)中所有線程之間的消息路由衡查;
  • 通過(guò)POSIX線程同步原語(yǔ)提供的同步服務(wù);
  • 調(diào)度服務(wù)必盖,微內(nèi)核使用各種POSIX實(shí)時(shí)調(diào)度策略來(lái)調(diào)度線程執(zhí)行拌牲;
  • 定時(shí)器服務(wù)俱饿,微內(nèi)核提供了豐富的POSIX定時(shí)器服務(wù)集;
  • 進(jìn)程管理服務(wù)塌忽,微內(nèi)核與進(jìn)程管理器一起組成一個(gè)叫procnto的單元拍埠,進(jìn)程管理器部分負(fù)責(zé)管理進(jìn)程、內(nèi)存土居,還有路徑名空間枣购。
    與線程不同,微內(nèi)核本身不會(huì)被調(diào)度執(zhí)行装盯。處理器只在微內(nèi)核中執(zhí)行系統(tǒng)調(diào)用坷虑、異常甲馋、硬件中斷響應(yīng)等埂奈。

QNX Neutrino操作系統(tǒng)的微內(nèi)核,管理一組協(xié)作的進(jìn)程定躏,如下圖所示账磺,這種結(jié)構(gòu)不是一種層級(jí)的組織,更像是一個(gè)團(tuán)隊(duì)痊远,因?yàn)椴煌倪M(jìn)程可以通過(guò)內(nèi)核來(lái)協(xié)調(diào)交互垮抗。QNX Neutrino充當(dāng)一個(gè)“軟件總線”的角色,可以在需要的時(shí)候動(dòng)態(tài)的插入和移除系統(tǒng)模塊碧聪。


QNX Neutrino架構(gòu)

進(jìn)程及進(jìn)程間通信

除了procnto單元提供的服務(wù)外冒版,所有的系統(tǒng)服務(wù)都是通過(guò)標(biāo)準(zhǔn)的進(jìn)程來(lái)處理的。一個(gè)配置豐富的QNX系統(tǒng)應(yīng)該包括以下功能:

  • 文件系統(tǒng)管理器
  • 字符設(shè)備管理器
  • 圖形用戶界面
  • 本地網(wǎng)絡(luò)管理器
  • TCP/IP

系統(tǒng)進(jìn)程 vs 用戶進(jìn)程

系統(tǒng)進(jìn)程與任何用戶編寫(xiě)的進(jìn)程本質(zhì)上是不可區(qū)分的逞姿,它們使用相同的公共API和內(nèi)核服務(wù)辞嗡。正是這種架構(gòu)也讓QNX具備了無(wú)與倫比的可擴(kuò)展性。由于大多數(shù)的操作系統(tǒng)服務(wù)由標(biāo)準(zhǔn)的系統(tǒng)進(jìn)程提供滞造,因此增強(qiáng)操作系統(tǒng)本身變得非常簡(jiǎn)單:只需編寫(xiě)新的程序來(lái)提供新的操作系統(tǒng)服務(wù)续室。實(shí)際上,操作系統(tǒng)和應(yīng)用程序之間的界限可能會(huì)變得非常模糊谒养,系統(tǒng)服務(wù)和應(yīng)用程序之間唯一真正的區(qū)別是操作系統(tǒng)服務(wù)為客戶管理資源挺狰。

假如你需要寫(xiě)一個(gè)數(shù)據(jù)庫(kù)的服務(wù)器,這樣一個(gè)進(jìn)程怎么分類买窟?
正如文件系統(tǒng)接受請(qǐng)求(通過(guò)消息)來(lái)打開(kāi)文件和讀寫(xiě)數(shù)據(jù)一樣丰泊,數(shù)據(jù)庫(kù)服務(wù)器也需要接受請(qǐng)求,盡管數(shù)據(jù)庫(kù)服務(wù)器的請(qǐng)求可能更復(fù)雜始绍,但是兩者非常相似瞳购,需要提供API(由消息實(shí)現(xiàn))給客戶端進(jìn)行資源訪問(wèn)。此外疆虚,它們都是獨(dú)立的進(jìn)程苛败,可以由終端用戶來(lái)編寫(xiě)满葛,并且根據(jù)需要來(lái)進(jìn)行啟動(dòng)和停止。
數(shù)據(jù)庫(kù)服務(wù)器可能在某個(gè)任務(wù)中充當(dāng)系統(tǒng)進(jìn)程罢屈,而在另外的任務(wù)中充當(dāng)應(yīng)用戶進(jìn)程嘀韧,但是這都不重要,重要的是QNX操作系統(tǒng)可以在不修改操作系統(tǒng)本身的標(biāo)準(zhǔn)組件的情況下缠捌,允許用戶實(shí)現(xiàn)這樣的進(jìn)程锄贷,對(duì)于嵌入式開(kāi)發(fā)人員來(lái)說(shuō),提供了很大的靈活性曼月。

設(shè)備驅(qū)動(dòng)程序允許操作系統(tǒng)和應(yīng)用程序以通用的方式去訪問(wèn)低層的硬件(例如磁盤(pán)設(shè)備驅(qū)動(dòng)器谊却、網(wǎng)絡(luò)接口)。雖然大多數(shù)的OS要求設(shè)備驅(qū)動(dòng)程序與OS本身緊密綁定哑芹,但是QNX Neutrino的驅(qū)動(dòng)程序能被當(dāng)成一個(gè)標(biāo)準(zhǔn)的進(jìn)程被啟動(dòng)和停止炎辨。因此,添加設(shè)備驅(qū)動(dòng)程序不會(huì)影響OS的其他部分聪姿,可以像應(yīng)用程序一樣開(kāi)發(fā)和調(diào)試驅(qū)動(dòng)碴萧。

進(jìn)程間通信

IPC(Interprocess Communication)進(jìn)程間通信,是將應(yīng)用程序設(shè)計(jì)成一組進(jìn)程的關(guān)鍵末购,確保每個(gè)進(jìn)程處理整體中的某一部分破喻。QNX是第一個(gè)將消息傳遞作為IPC基本手段的商業(yè)操作系統(tǒng),操作系統(tǒng)的強(qiáng)大盟榴、簡(jiǎn)單和優(yōu)雅曹质,在很大程度上歸功于消息傳遞在整個(gè)系統(tǒng)中的完整集成。
在QNX Neutrino中擎场,消息是從一個(gè)進(jìn)程傳遞給另一個(gè)進(jìn)程的字節(jié)包羽德,消息的內(nèi)容只對(duì)發(fā)送者和接收者有意義。
消息傳遞不僅允許進(jìn)程相互傳遞數(shù)據(jù)顶籽,而且還提供了一種同步多個(gè)進(jìn)程執(zhí)行的方法玩般。當(dāng)進(jìn)程發(fā)送、接收礼饱、回復(fù)消息時(shí)坏为,它們會(huì)經(jīng)歷各種“狀態(tài)變化”,這些“狀態(tài)變化”镊绪,會(huì)影響它們的執(zhí)行時(shí)間和時(shí)間長(zhǎng)度匀伏。了解它們的優(yōu)先級(jí)和狀態(tài),微內(nèi)核可以盡可能有效的調(diào)度所有進(jìn)程蝴韭,最大限度來(lái)利用CPU資源够颠。消息傳遞在整個(gè)系統(tǒng)中不斷的起作用。
實(shí)時(shí)或關(guān)鍵任務(wù)榄鉴,通常需要一套可靠的IPC機(jī)制履磨,因?yàn)榻M成這些任務(wù)的進(jìn)程之間關(guān)聯(lián)很緊密蛉抓。QNX Neutrino的消息傳遞設(shè)計(jì)所強(qiáng)加的規(guī)則,給應(yīng)用程序帶來(lái)了秩序和可靠性剃诅。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末巷送,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子矛辕,更是在濱河造成了極大的恐慌笑跛,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聊品,死亡現(xiàn)場(chǎng)離奇詭異飞蹂,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)翻屈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)陈哑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人妖胀,你說(shuō)我怎么就攤上這事芥颈』堇眨” “怎么了赚抡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)纠屋。 經(jīng)常有香客問(wèn)我涂臣,道長(zhǎng),這世上最難降的妖魔是什么售担? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任赁遗,我火速辦了婚禮,結(jié)果婚禮上族铆,老公的妹妹穿的比我還像新娘岩四。我一直安慰自己,他們只是感情好哥攘,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布剖煌。 她就那樣靜靜地躺著,像睡著了一般逝淹。 火紅的嫁衣襯著肌膚如雪耕姊。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,829評(píng)論 1 290
  • 那天栅葡,我揣著相機(jī)與錄音茉兰,去河邊找鬼。 笑死欣簇,一個(gè)胖子當(dāng)著我的面吹牛规脸,可吹牛的內(nèi)容都是我干的坯约。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼莫鸭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鬼店!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起黔龟,我...
    開(kāi)封第一講書(shū)人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤妇智,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后氏身,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體巍棱,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年蛋欣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了航徙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡陷虎,死狀恐怖到踏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情尚猿,我是刑警寧澤窝稿,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站凿掂,受9級(jí)特大地震影響伴榔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜庄萎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一踪少、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧糠涛,春花似錦援奢、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至锉罐,卻和暖如春帆竹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背脓规。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工栽连, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓秒紧,卻偏偏與公主長(zhǎng)得像绢陌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子熔恢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容