Java程序員需要知道的操作系統(tǒng)知識匯總(持續(xù)更新)

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

操作系統(tǒng)管理著計算機的硬件和軟件坐慰,它是軟件和硬件能夠交互的基礎。從本質(zhì)上來講用僧,操作系統(tǒng)還是一個運行在計算機上的程序结胀。操作系統(tǒng)需要處理如管理與配置內(nèi)存、決定系統(tǒng)資源供需的優(yōu)先次序责循、控制輸入設備與輸出設備糟港、操作網(wǎng)絡與管理文件系統(tǒng)等基本事務。操作系統(tǒng)也提供一個讓用戶與系統(tǒng)交互的操作界面院仿。

(二)用戶態(tài)和系統(tǒng)態(tài)是什么

所謂用戶態(tài)和系統(tǒng)態(tài)秸抚,其實是cpu的一種狀態(tài)速和。

用戶態(tài)也稱為普通態(tài),用戶態(tài)運行的進程可以直接讀取用戶程序的數(shù)據(jù)剥汤,我們運行的程序基本都是在用戶態(tài)健芭。

內(nèi)核態(tài)也叫特權態(tài),cpu可以訪問計算機的任何資源秀姐。

區(qū)分為用戶態(tài)和系統(tǒng)態(tài)是最主要原因是要把用戶程序和系統(tǒng)程序區(qū)分開慈迈,以利于程序的共享和保護。

用戶態(tài)訪問內(nèi)核態(tài)的功能的方式叫做系統(tǒng)調(diào)用省有,用戶態(tài)進程通過系統(tǒng)調(diào)用申請使用操作系統(tǒng)提供的服務程序完成工作痒留,比如fork()實際上就是執(zhí)行了一個創(chuàng)建新進程的系統(tǒng)調(diào)用。

系統(tǒng)調(diào)用按功能大致可以區(qū)分為:

1蠢沿、設備管理伸头。完成設備的請求或釋放,以及設備啟動等功能舷蟀。
2恤磷、文件管理。完成文件的讀野宜、寫扫步、創(chuàng)建及刪除等功能。
3匈子、進程控制河胎。完成進程的創(chuàng)建、撤銷虎敦、阻塞及喚醒等功能游岳。
4、進程通信其徙。完成進程之間的消息傳遞或信號傳遞等功能胚迫。
5、內(nèi)存管理唾那。完成內(nèi)存的分配访锻、回收以及獲取作業(yè)占用內(nèi)存區(qū)大小及地址等功能。

(三)進程通贞、線程和程序的區(qū)別

程序是指含有指令和數(shù)據(jù)的文件朗若,或者說程序是靜態(tài)的代碼。
進程是系統(tǒng)運行程序的基本單位昌罩,一個進程就是一個執(zhí)行中的程序哭懈。進程是獨立運行的個體。
線程是比進程更小的執(zhí)行調(diào)度單位茎用,一個進程在執(zhí)行中可以產(chǎn)生多個線程遣总,多個線程共享同一塊內(nèi)存空間和系統(tǒng)資源睬罗。
在 Java 中,當我們啟動 main 函數(shù)時其實就是啟動了一個 JVM 的進程旭斥,而 main 函數(shù)所在的線程就是這個進程中的一個線程容达,也稱主線程。

(四)進程有哪幾種狀態(tài)

操作系統(tǒng)的進程有五種狀態(tài):

創(chuàng)建狀態(tài)(new):進程正在被創(chuàng)建垂券,還未到就緒狀態(tài)

就緒狀態(tài)(ready):這是指進程已經(jīng)準備好運行的狀態(tài)花盐,即進程已分配到除CPU以外所有的必要資源后,只要再獲得CPU菇爪,便可以立刻執(zhí)行算芯。這是指進程已經(jīng)準備好運行的狀態(tài),即進程已分配到除CPU以外所有的必要資源后凳宙,只要再獲得CPU熙揍。

運行狀態(tài)(running):進程正在處理器上上運行(單核 CPU 下任意時刻只有一個進程處于運行狀態(tài))。

阻塞狀態(tài)(waiting):正在執(zhí)行的進程由于發(fā)生某事件(如I/O請求氏涩、申請緩沖區(qū)失敗等)暫時無法繼續(xù)執(zhí)行的狀態(tài)届囚,即進程執(zhí)行受到阻塞。即使此時cpu處于空閑也無法執(zhí)行是尖。

結束狀態(tài)(terminated):進程正在從系統(tǒng)中消失意系。可能是進程正常結束或其他原因中斷退出運行

進程狀態(tài)

(五)進程間的通信方式有哪些

每個進程都有自己的地址空間析砸,不同進程之間是不可見的昔字,如果進程間需要通信的話必須通過內(nèi)核,在內(nèi)核中開辟一塊緩沖區(qū)首繁,一個進程把數(shù)據(jù)拷貝到內(nèi)核緩沖區(qū),其他進程把數(shù)據(jù)從內(nèi)核態(tài)讀取到用戶態(tài)陨囊。這種機制稱為進程間通信弦疮。
進程間通信的方式有多種:

管道/匿名管道(pipes):用于父子進程和兄弟進程之間數(shù)據(jù)的傳遞,管道的本質(zhì)是一個內(nèi)核緩沖區(qū)蜘醋,管道一端的進程將數(shù)據(jù)順序?qū)懭刖彌_區(qū)胁塞,另一端的進程將數(shù)據(jù)順序讀入。

有名管道(Name pipes):有名管道通過FIFO的方式進行傳遞压语,有名管道的文件形式存在于文件系統(tǒng)中啸罢,可以實現(xiàn)本機任意兩個進程之間的通信。
信號(signal):Linux系統(tǒng)中用于進程間互相通信或者操作的一種機制胎食,信號可以在任何時候發(fā)給某一進程扰才,而無需知道該進程的狀態(tài)。

消息隊列(Message Queuing):消息隊列是消息的鏈表,具有特定的格式,存放在內(nèi)存中并由消息隊列標識符標識厕怜、消息隊列允許一個或多個進程向它寫入與讀取消息衩匣、消息隊列可以實現(xiàn)消息的隨機查詢,消息不一定要以先進先出的次序讀取,也可以按消息的類型讀取.比FIFO更有優(yōu)勢蕾总。消息隊列克服了信號承載信息量少,管道只能承載無格式字 節(jié)流以及緩沖區(qū)大小受限等缺琅捏。

共享內(nèi)存(share memory):使得多個進程可以可以直接讀寫同一塊內(nèi)存空間生百,是最快的可用IPC形式。由于多個進程共享一段內(nèi)存柄延,因此需要依靠某種同步機制(如信號量)來達到進程間的同步及互斥蚀浆。

信號量(Signal):信號量是一個計數(shù)器,用于多進程對共享數(shù)據(jù)的訪問搜吧,信號量的意圖在于進程間同步

套接字(Socket):套接字是一種通信機制蜡坊,憑借這種機制,客戶/服務器(即要進行通信的進程)系統(tǒng)的開發(fā)工作既可以在本地單機上進行赎败,也可以跨網(wǎng)絡進行秕衙。也就是說它可以讓不在同一臺計算機但通過網(wǎng)絡連接計算機上的進程進行通信。

(六)操作系統(tǒng)中進程的調(diào)度算法

操作系統(tǒng)中的進程調(diào)度算法目的是為了確定進程的執(zhí)行順序僵刮,從而最大化利用CPU資源

先到先服務(FCFS):從就緒隊列中選擇等待時間最長的進程(就是最早進來的進程)据忘,等待進程執(zhí)行完成或者放棄CPU時再重新選擇。
輪轉法(Round Robin):也叫做時間片輪轉法搞糕,每個進程被分配一個時間片勇吊,輪流執(zhí)行。

短作業(yè)優(yōu)先(SJF):從就緒隊列中選擇預計運行時間最短的進程窍仰,等待進程執(zhí)行完成或者放棄CPU時再重新選擇汉规。

優(yōu)先級調(diào)度:給每個進程分配一個優(yōu)先級,從就緒隊列中選擇優(yōu)先級最高的進程驹吮,等待進程執(zhí)行完成或者放棄CPU時再重新選擇针史。

多級反饋隊列調(diào)度算法

(1)設置多個就緒隊列。在系統(tǒng)中設置多個就緒隊列碟狞,并為每個隊列賦予不同的優(yōu)先級啄枕,從第一個開始逐個降低。不同隊列進程中所賦予的執(zhí)行時間也不同族沃,優(yōu)先級越高频祝,時間片越小。

(2)每個隊列都采用FCFS(先來先服務)算法脆淹。輪到該進程執(zhí)行時常空,若在該時間片內(nèi)完成,便撤離操作系統(tǒng)盖溺,否則調(diào)度程序?qū)⑵滢D入第二隊列的末尾等待調(diào)度......漓糙。若進程最后被調(diào)到第N隊列中時,便采用RR方式運行咐柜。

(3)按隊列優(yōu)先級調(diào)度兼蜈。調(diào)度按照優(yōu)先級最高隊列中諸進程運行攘残,僅當?shù)谝魂犃锌臻e時才調(diào)度第二隊列進程執(zhí)行。若優(yōu)先級低隊列執(zhí)行中有優(yōu)先級高隊列進程執(zhí)行为狸,應立刻將此進程放入隊列末尾歼郭,把處理機分配給新到高優(yōu)先級進程。

(七)操作系統(tǒng)的內(nèi)存管理機制

操作系統(tǒng)的內(nèi)存管理主要負責內(nèi)存的分配與回收(malloc 函數(shù):申請內(nèi)存辐棒,free 函數(shù):釋放內(nèi)存)病曾,操作系統(tǒng)中內(nèi)存的分配可以簡單分為連續(xù)分配和非連續(xù)分配:

連續(xù)分配為用戶分配一個連續(xù)的內(nèi)存空間,可以將一個進程分散的裝入內(nèi)存分區(qū)漾根。常見的如塊式管理泰涂。

非連續(xù)分配根據(jù)分區(qū)的大小是否固定可以分成分頁存儲管理(固定)與分段存儲管理(不固定),為了避免兩者的缺點辐怕,還可以二者混用成段頁式存儲管理逼蒙。

頁式管理:把主存分為大小相等且固定的一頁一頁的形式,頁較小寄疏,相對相比于塊式管理的劃分力度更大是牢,提高了內(nèi)存利用率,減少了碎片陕截。頁式管理通過頁表對應邏輯地址和物理地址驳棱。

段式管理:段式管理在頁式管理的基礎上,將內(nèi)存劃分為更小的段农曲,段式管理把主存分為一段段的社搅,每一段的空間又要比一頁的空間小很多 。但是乳规,最重要的是段是有實際意義的形葬,每個段定義了一組邏輯信息,例如,有主程序段 MAIN驯妄、子程序段 X荷并、數(shù)據(jù)段 D 及棧段 S 等。 段式管理通過段表對應邏輯地址和物理地址青扔。

段頁式管理:段頁式管理機制結合了段式管理和頁式管理的優(yōu)點。簡單來說段頁式管理機制就是把主存先分成若干段翩伪,每個段又分成若干頁微猖,也就是說 段頁式管理機制 中段與段之間以及段的內(nèi)部的都是離散的

分頁和分段的區(qū)別
1、頁是信息的物理單位缘屹,分頁的主要目的是為了實現(xiàn)離散分配凛剥,提高內(nèi)存的利用率。分頁僅僅是系統(tǒng)管理上的需求轻姿,安全是系統(tǒng)行為對用戶是不可見的犁珠;段是信息的邏輯單位逻炊,分段的主要目的是更好地滿足用戶需求,一個段通常包含一組數(shù)語一個邏輯板塊的信息犁享。分段是用戶可見的余素,用戶編程時需要顯示的給出段名。

2炊昆、頁的大小是固定的桨吊,系統(tǒng)決定;段的大小是不固定的凤巨,取決于系統(tǒng)程序

3视乐、分頁的用戶地址空間是一維的,程序員只需要給出一個記憶符就可以表示一個地址敢茁,分段存儲管理的地址空間是二維的佑淀,程序員需要在標識一個地址的時候,既要給出段名彰檬,也要給出段內(nèi)地址

4伸刃、分段比分頁更容易實現(xiàn)信息的共享和保護 注意:不能修改的代碼稱為純代碼(可重入代碼),這樣的代碼段不是臨界資源僧叉,可以共享奕枝。可修改的代碼是不可以共享的(比如由很多變量的代碼段) 比如:生產(chǎn)者進程的一個進程段瓶堕,是用來判斷該緩沖區(qū)此時是否可以訪問隘道,這個時候消費者進程的段表項也可以指向這里 為什么分業(yè)管理不方便實現(xiàn)代碼共享? 因為將生產(chǎn)者進程分段郎笆,由于頁面的空間有限谭梗,一段可能被裝入多個空間,一個空間也可能有多個代碼段被裝進來宛蚓,所以適合共享激捏,達不到安全的效果

5、分頁:內(nèi)存空間利用率高凄吏,不會產(chǎn)生外部碎片远舅,只有少量的內(nèi)部碎片;不方便按照邏輯模塊實現(xiàn)信息的共享與保護

分段:方便按照邏輯模塊實現(xiàn)信息的共享與保護痕钢;如果段太長图柏,為其分配很大的存儲空間很不方便,容易產(chǎn)生外部碎片(這個雖然可以用前面的一些緊湊技術解決一部分任连,但是時間代價很大)

(八)什么是虛擬內(nèi)存

虛擬內(nèi)存是計算機系統(tǒng)內(nèi)存管理的一種技術蚤吹。它使得應用程序認為它擁有連續(xù)可用的內(nèi)存(一個連續(xù)完整的地址空間),而實際上,它通常是被分隔成多個物理內(nèi)存碎片裁着,還有部分暫時存儲在外部磁盤存儲器上繁涂,在需要時進行數(shù)據(jù)交換。

虛擬內(nèi)存為每個進程提供了一個一致的二驰、私有的地址空間扔罪,它讓每個進程產(chǎn)生了一種自己在獨享主存的錯覺(每個進程擁有一片連續(xù)完整的內(nèi)存空間)。這樣會更加有效地管理內(nèi)存并減少出錯诸蚕。

(九)頁面置換算法

在地址映射過程中步势,若在頁面中發(fā)現(xiàn)所要訪問的頁面不在內(nèi)存中,則產(chǎn)生缺頁中斷背犯。當發(fā)生缺頁中斷時坏瘩,如果操作系統(tǒng)內(nèi)存中沒有空閑頁面,則操作系統(tǒng)必須在內(nèi)存選擇一個頁面將其移出內(nèi)存漠魏,以便為即將調(diào)入的頁面讓出空間倔矾。而用來選擇淘汰哪一頁的規(guī)則叫做頁面置換算法。

常見的頁面置換算法有如下幾種:

OPT頁面置換算法
這種算法選擇永不使用或者最長時間內(nèi)不會被訪問的頁面進行替換柱锹,但是現(xiàn)在無法預知哪個頁面在未來是最長時間內(nèi)不會被訪問的哪自,因此這種算法只能算作理論上。
FIFO頁面置換算法:先進先出禁熏,淘汰最先進入內(nèi)存的頁面壤巷。
LRU(Least Currently Used)頁面置換算法:最近最久未使用,淘汰最近最久未使用的頁面瞧毙。
LFU(Least Frequently Used)頁面置換算法:最少使用頁面置換算法胧华,淘汰之前使用時間中使用最少的頁面。

這篇文章我會持續(xù)更新宙彪,有任何錯誤指出或者更多相關知識推薦歡迎在評論區(qū)留言矩动,我是魚仔,我們下期再見释漆!

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悲没,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子男图,更是在濱河造成了極大的恐慌示姿,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逊笆,死亡現(xiàn)場離奇詭異峻凫,居然都是意外死亡,警方通過查閱死者的電腦和手機览露,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來譬胎,“玉大人差牛,你說我怎么就攤上這事命锄。” “怎么了偏化?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵脐恩,是天一觀的道長。 經(jīng)常有香客問我侦讨,道長驶冒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任韵卤,我火速辦了婚禮骗污,結果婚禮上,老公的妹妹穿的比我還像新娘沈条。我一直安慰自己需忿,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布蜡歹。 她就那樣靜靜地躺著屋厘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪月而。 梳的紋絲不亂的頭發(fā)上汗洒,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音父款,去河邊找鬼溢谤。 笑死,一個胖子當著我的面吹牛铛漓,可吹牛的內(nèi)容都是我干的溯香。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼浓恶,長吁一口氣:“原來是場噩夢啊……” “哼玫坛!你這毒婦竟也來了?” 一聲冷哼從身側響起包晰,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤湿镀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后伐憾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勉痴,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年树肃,在試婚紗的時候發(fā)現(xiàn)自己被綠了蒸矛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖雏掠,靈堂內(nèi)的尸體忽然破棺而出斩祭,到底是詐尸還是另有隱情,我是刑警寧澤乡话,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布摧玫,位于F島的核電站,受9級特大地震影響绑青,放射性物質(zhì)發(fā)生泄漏诬像。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一闸婴、第九天 我趴在偏房一處隱蔽的房頂上張望坏挠。 院中可真熱鬧,春花似錦掠拳、人聲如沸癞揉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喊熟。三九已至,卻和暖如春姐刁,著一層夾襖步出監(jiān)牢的瞬間芥牌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人款票。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓灸芳,卻偏偏與公主長得像或颊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

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