「通關(guān)Android」那些年我們認(rèn)識(shí)的操作系統(tǒng)

講起操作系統(tǒng)焰薄,想必現(xiàn)代人都不陌生拿诸,特別是移動(dòng)通信這么發(fā)達(dá)的今天,每個(gè)人每天都要刷幾個(gè)小時(shí)的手機(jī)塞茅,與其說(shuō)使用手機(jī)亩码,不如說(shuō)手機(jī)陪伴你野瘦,這些手機(jī)使用這么流暢描沟,應(yīng)用這么豐富,這背后的功勞離不開(kāi)一個(gè)底層基礎(chǔ)軟件的功勞鞭光,那就是手機(jī)的操作系統(tǒng)席覆。

手機(jī)可以簡(jiǎn)單拆分為兩個(gè)部分:硬件+軟件。硬件是軟件的基石方库,所有的軟件功能最終都是由硬件來(lái)實(shí)現(xiàn),這是因?yàn)檐浖羌軜?gòu)在硬件之上垃环,然后逐層不斷抽象堆疊起來(lái)的劲赠。如果剝離軟件凛澎,讓一個(gè)使用者使用硬件,你會(huì)發(fā)現(xiàn)相當(dāng)?shù)耐纯嘌渡停枰私獠煌布氖褂梅绞绞妫⑶伊私饷總€(gè)硬件的特點(diǎn)磕谅,簡(jiǎn)單來(lái)說(shuō)怜庸,沒(méi)有了軟件割疾,硬件就是一堆破銅爛鐵拓诸。從中,我們也可以看到操作系統(tǒng)的重要性奠支。

馮.諾依曼結(jié)構(gòu)

無(wú)論是我們所熟知的PC機(jī),還是手機(jī)叉抡,還是其他能成為計(jì)算機(jī)的設(shè)備季春,無(wú)不遵循著馮.諾依曼計(jì)算機(jī)體系,可見(jiàn)馮.諾依曼是多么偉大的計(jì)算機(jī)科學(xué)家,它在1945年發(fā)表了一篇關(guān)于EDVAC(Electronic Discrete variable Automatic Computer宇攻,電子離散變量自動(dòng)計(jì)算機(jī))的論文亲桥。

就在這篇文章中提出了對(duì)于計(jì)算機(jī)領(lǐng)域產(chǎn)生深遠(yuǎn)影響的兩個(gè)觀點(diǎn):

1,采用二進(jìn)制番枚,拋棄十進(jìn)制

2,程序存儲(chǔ)

二進(jìn)制極大簡(jiǎn)化了計(jì)算機(jī)設(shè)備的邏輯線路拗馒,程序能存儲(chǔ)堤尾,程序指令和數(shù)據(jù)都存儲(chǔ)在同一個(gè)內(nèi)存儲(chǔ)器中,除了存儲(chǔ)器剩蟀,還有運(yùn)算器、控制器丙号、輸入輸出設(shè)備的先朦,我畫(huà)了簡(jiǎn)單的示意圖,如下:

馮.諾依曼結(jié)構(gòu)

從中可以看到犬缨,一個(gè)計(jì)算機(jī)基本包含這幾個(gè)部分:CPU(中央處理器)赤赊、內(nèi)存儲(chǔ)器滨达、輸入輸出設(shè)備(I/O設(shè)備)。

什么是操作系統(tǒng)

計(jì)算機(jī)發(fā)展到今天,市面上可選擇的操作系統(tǒng)已經(jīng)很多了盼铁,如果分類的話有:桌面型操作系統(tǒng)、服務(wù)器操作系統(tǒng)练链、嵌入式操作系統(tǒng)携丁。我們使用的手機(jī)可以理解為嵌入式操作系統(tǒng),常見(jiàn)的有Android系統(tǒng)和IOS系統(tǒng)焚碌,我們?nèi)粘^k公用的電腦可以理解為桌面型操作系統(tǒng)畦攘,比如常見(jiàn)的Windows系統(tǒng)、Mac系統(tǒng)十电,而服務(wù)器操作系統(tǒng)更多選擇Linux系列知押。

操作系統(tǒng)提供了可用的人機(jī)交互界面,比如打開(kāi)手機(jī)鹃骂,就能四處點(diǎn)點(diǎn)台盯,這里滑一滑,沒(méi)有用戶使用學(xué)習(xí)成本畏线,上手就可操作静盅,這些都得益于操作系統(tǒng)預(yù)裝的各種人機(jī)交互程序。出了有整體封裝的人機(jī)交互界面接口之外象踊,還有OS生態(tài)圈這個(gè)關(guān)鍵點(diǎn)温亲,比如整體第三方應(yīng)用程序豐富多彩棚壁,這也是一個(gè)成功的操作系統(tǒng)能夠流行普及的主要原因。

因此栈虚,操作系統(tǒng)肩負(fù)兩個(gè)重大責(zé)任:面向下層-管理硬件袖外,各種硬件設(shè)備集中調(diào)度,面向上層-提供各種友好的人機(jī)交互界面魂务,為第三方程序研發(fā)提供便捷曼验、可靠、高效的API接口功能粘姜。

所以簡(jiǎn)單來(lái)說(shuō)鬓照,計(jì)算機(jī)操作系統(tǒng)是負(fù)責(zé)管理系統(tǒng)硬件,并為上層應(yīng)用提供穩(wěn)定編程接口和人機(jī)交互界面的軟件集合孤紧。

操作系統(tǒng)作用

進(jìn)程間通信

我們知道操作系統(tǒng)中的各個(gè)進(jìn)程通常運(yùn)行與獨(dú)立的內(nèi)存空間豺裆,并且有嚴(yán)格的機(jī)制來(lái)防止進(jìn)程間的非法訪問(wèn)。比如我們熟知的Android系統(tǒng)号显,每個(gè)應(yīng)用如果需要使用系統(tǒng)的私有數(shù)據(jù)臭猜,就需要向操作系統(tǒng)申請(qǐng),也就是說(shuō)要聲明使用哪些權(quán)限押蚤,操作系統(tǒng)才允許應(yīng)用具體使用蔑歌,這也是每個(gè)Android應(yīng)用在進(jìn)程沙盒運(yùn)行,也是Android系統(tǒng)安全架構(gòu)的出發(fā)點(diǎn)揽碘。

雖說(shuō)每個(gè)進(jìn)程是獨(dú)立運(yùn)行次屠,但不代表進(jìn)程與進(jìn)程之間不允許互相通信,反而恰恰相反雳刺,現(xiàn)實(shí)很多軟件產(chǎn)品需要多進(jìn)程協(xié)作才能使用流暢劫灶,進(jìn)程間通信(Inter-process communication,IPC)是操作系統(tǒng)中一個(gè)重要的概念煞烫,應(yīng)用非常廣泛浑此。

那么常見(jiàn)的IPC機(jī)制有哪些呢。如下:

  • 共享內(nèi)存滞详。由于兩個(gè)進(jìn)程可以直接共享訪問(wèn)同一內(nèi)存區(qū)域凛俱,減少了數(shù)據(jù)的復(fù)制操作,因而速度上的優(yōu)勢(shì)比較明顯料饥。比如在Linux中可以通過(guò)shmget函數(shù)來(lái)實(shí)現(xiàn)創(chuàng)建內(nèi)存共享區(qū)蒲犬,這里會(huì)生成共享內(nèi)存塊與某個(gè)特定的key進(jìn)行綁定,用shmat函數(shù)來(lái)實(shí)現(xiàn)進(jìn)程映射岸啡,其他進(jìn)程然后利用key值來(lái)映射自己的內(nèi)存空間原叮。
  • 管道。管道很形象的描述了通信雙方的行為,即進(jìn)程A與進(jìn)程B奋隶,管道一般是單雙工通信擂送,如果需要既要“讀”和“寫”的話,需要建立兩個(gè)管道唯欣。同時(shí)管道有容量限制嘹吨,讀為空的時(shí)候,需要阻塞境氢,等待有可讀內(nèi)容過(guò)來(lái)蟀拷,寫滿的時(shí)候,需要阻塞萍聊,等到繼續(xù)可寫入的時(shí)候问芬,再寫。
  • Socket寿桨。這個(gè)更多應(yīng)用于網(wǎng)絡(luò)通信此衅,基于TCP/IP協(xié)議,有客戶端和服務(wù)端兩種角色亭螟,服務(wù)端負(fù)責(zé)監(jiān)聽(tīng)I(yíng)PC請(qǐng)求炕柔,客戶端發(fā)起IPC請(qǐng)求,雙方建立起IPC連接媒佣。
  • RPC。這個(gè)一般應(yīng)用于通信雙方運(yùn)行在不同的機(jī)器上陵刹,對(duì)于上層調(diào)用人員來(lái)說(shuō)不需要特別關(guān)心具體的中間傳輸過(guò)程是如何實(shí)現(xiàn)的默伍,這種“透明性”可以較大程度地降低研發(fā)難度。

同步機(jī)制

我們經(jīng)常會(huì)聽(tīng)到資源鎖同步衰琐,因?yàn)樵诂F(xiàn)代操作系統(tǒng)中一個(gè)任務(wù)完成不僅僅是單線程執(zhí)行到底的也糊,而往往是需要多線程協(xié)同執(zhí)行,這里面如何保證系統(tǒng)資源同步就顯得至關(guān)重要了羡宙。

從嚴(yán)格意義來(lái)說(shuō)狸剃,如果多個(gè)進(jìn)程間存在時(shí)序關(guān)系,需要協(xié)同工作完成一個(gè)任務(wù)狗热,則稱為同步钞馁。如果資源具有排他性,那么此時(shí)的關(guān)系可以稱為互斥匿刮。那么常見(jiàn)的同步機(jī)制有哪些呢僧凰?如下:

  • 信號(hào)量(Semaphore)。Semaphore S熟丸,Operation P也叫wait()训措,Operation V也叫signal()。其中S表示共享資源的可用數(shù)量,P可以減小S計(jì)數(shù)绩鸣,V則增加它的計(jì)數(shù)怀大。比如進(jìn)去共享區(qū)時(shí),首先執(zhí)行P操作呀闻,同理化借,要退出共享區(qū)時(shí),執(zhí)行V操作总珠。其中PV操作是具有原子性屏鳍,意味著它們?cè)趫?zhí)行過(guò)程中是不允許被中斷的。
  • Mutex局服,又稱為互斥體钓瞭。Mutex通常是對(duì)某一排他性資源共享控制,要么資源被占用淫奔,要么就是可以訪問(wèn)山涡。
  • 管程。是可以被多個(gè)進(jìn)程安全訪問(wèn)的對(duì)象唆迁,也就是在同一時(shí)刻只允許有一個(gè)訪問(wèn)者使用它們鸭丛,還具有安全性、互斥性唐责、共享性鳞溉。

內(nèi)存管理

不管是什么操作系統(tǒng),內(nèi)存管理都是絕對(duì)的重點(diǎn)鼠哥∈旆疲可以說(shuō)操作系統(tǒng)運(yùn)行基本都是玩內(nèi)存的游戲,比如虛擬內(nèi)存朴恳、內(nèi)存分配與回收抄罕、內(nèi)存保護(hù)等。

1于颖,虛擬內(nèi)存呆贿。

虛擬內(nèi)存的出現(xiàn)主要為了解決大體積程序的問(wèn)題。它將外部存儲(chǔ)器部分空間作為內(nèi)存的擴(kuò)展森渐,比如從硬盤劃分出4G大小做入,當(dāng)內(nèi)存資源不足時(shí),系統(tǒng)將按照一定算法自動(dòng)挑選優(yōu)先級(jí)低的數(shù)據(jù)塊章母,并且將它們存儲(chǔ)在硬盤中母蛛,后續(xù)如果用到這些數(shù)據(jù)庫(kù),系統(tǒng)將產(chǎn)生“缺頁(yè)”指令乳怎,然后把它們交換到內(nèi)存中彩郊,這些操作都是系統(tǒng)內(nèi)核自動(dòng)完成的前弯,對(duì)于上層來(lái)說(shuō)是完全透明的。

2秫逝,內(nèi)存分配與回收恕出。對(duì)于應(yīng)用程序來(lái)說(shuō),內(nèi)存的分配和回收是它們最關(guān)心的违帆,一般核心問(wèn)題是要保證硬件無(wú)關(guān)性浙巫、動(dòng)態(tài)分配內(nèi)存和回收、內(nèi)存碎片刷后。比如在Linux系統(tǒng)中常見(jiàn)的mmap()函數(shù)的畴,可以將某個(gè)設(shè)備或文件映射到英語(yǔ)進(jìn)程的內(nèi)存空間中,這樣訪問(wèn)內(nèi)存就相當(dāng)于對(duì)設(shè)備或文件進(jìn)行讀寫尝胆,而不需要通過(guò)read()丧裁、write(),同時(shí)通過(guò)mmap函數(shù)含衔,因?yàn)橛成渫粔K物理內(nèi)存來(lái)共享內(nèi)存煎娇,也減少了數(shù)據(jù)復(fù)制的次數(shù),在一定程度上提高進(jìn)程間通信的效率贪染。

小結(jié)

我們從馮.諾依曼計(jì)算機(jī)體系開(kāi)始缓呛,強(qiáng)調(diào)了操作系統(tǒng)的重要的幾個(gè)特性,進(jìn)程間通信機(jī)制杭隙、同步機(jī)制哟绊、內(nèi)存管理機(jī)制,從這幾個(gè)點(diǎn)切入痰憎,才能逐步去了解操作系統(tǒng)的面紗匿情。同樣,對(duì)于所處的上層開(kāi)發(fā)來(lái)說(shuō)信殊,在日常工作中經(jīng)常會(huì)碰到相關(guān)應(yīng)用程序的性能問(wèn)題,其實(shí)很多性能問(wèn)題基本都涉及進(jìn)程和同步概念汁果,內(nèi)存管理問(wèn)題涡拘,如果進(jìn)一步了解操作系統(tǒng)的特性,那么對(duì)于解決性能類問(wèn)題其實(shí)是如虎添翼据德。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鳄乏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子棘利,更是在濱河造成了極大的恐慌橱野,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件善玫,死亡現(xiàn)場(chǎng)離奇詭異水援,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門蜗元,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)或渤,“玉大人,你說(shuō)我怎么就攤上這事奕扣⌒金校” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵惯豆,是天一觀的道長(zhǎng)池磁。 經(jīng)常有香客問(wèn)我,道長(zhǎng)楷兽,這世上最難降的妖魔是什么地熄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮拄养,結(jié)果婚禮上离斩,老公的妹妹穿的比我還像新娘。我一直安慰自己瘪匿,他們只是感情好跛梗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著棋弥,像睡著了一般核偿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上顽染,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天漾岳,我揣著相機(jī)與錄音,去河邊找鬼粉寞。 笑死尼荆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的唧垦。 我是一名探鬼主播捅儒,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼振亮!你這毒婦竟也來(lái)了巧还?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤坊秸,失蹤者是張志新(化名)和其女友劉穎麸祷,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體褒搔,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阶牍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年喷面,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荸恕。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乖酬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出融求,到底是詐尸還是另有隱情咬像,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布生宛,位于F島的核電站县昂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏陷舅。R本人自食惡果不足惜倒彰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望莱睁。 院中可真熱鬧待讳,春花似錦、人聲如沸仰剿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)南吮。三九已至琳彩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間部凑,已是汗流浹背露乏。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涂邀,地道東北人瘟仿。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像比勉,于是被迫代替她去往敵國(guó)和親猾骡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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