柚子快報激活碼778899分享:運維 【Linux】進(jìn)程序言
柚子快報激活碼778899分享:運維 【Linux】進(jìn)程序言
這里是阿川的博客,祝您變得更強
? 個人主頁:在線OJ的阿川 ?文章專欄:Linux入門到進(jìn)階 ?代碼倉庫:
寫在開頭
現(xiàn)在您看到的是我的結(jié)論或想法,但在這背后凝結(jié)了大量的思考、經(jīng)驗和討論
目錄
1. 馮.諾伊曼體系結(jié)構(gòu)2. 操作系統(tǒng)3. 計算機(jī)層狀結(jié)構(gòu)4. 進(jìn)程概念5.展望一下
1. 馮.諾伊曼體系結(jié)構(gòu)
在計算機(jī)硬件中,大部分都遵守馮諾依曼體系結(jié)構(gòu),具體如圖1所示:
圖1 馮諾依曼體系結(jié)構(gòu)
存儲器:內(nèi)存
外設(shè):
輸入設(shè)備: 鼠標(biāo)、鍵盤、攝像頭、話筒、磁盤、網(wǎng)卡…輸出設(shè)備: 顯示器、播放器、硬件、磁盤、網(wǎng)卡… 有的設(shè)備既是輸出又是輸入設(shè)備
中央處理器(即CPU):
運算器: 對我們的數(shù)據(jù)進(jìn)行計算任務(wù)(算術(shù)運算,邏輯運算)控制器: 對我們的計算硬件流程進(jìn)行一定的控制
運算器: 處理數(shù)據(jù) 控制器: 處理代碼 各個硬件單元必須用"總線"(主要為系統(tǒng)總線、IO總線)連接起來
通過馮諾伊曼體系結(jié)構(gòu)可知道一個程序要運行,必須先加載到內(nèi)存中運行才可以,這是因為輸入設(shè)備和輸出設(shè)備處理時間為秒,而中央處理器處理時間為微秒,差距過于明顯。 如果沒有存儲器作為中介則計算機(jī)整體運行效率低下。而有了存儲器之后,輸入設(shè)備的數(shù)據(jù)會先緩存到存儲器中,積累一定的量之后中央處理器開始處理,而在緩存的過程中,中央處理器可以處理其他的任務(wù)(例如檢查計算機(jī)狀態(tài),釋放各種各樣的資源,定期刷新數(shù)據(jù)等等),恰好存儲器的運行效率處于輸入輸出設(shè)備與中央處理器之間,相較于沒有存儲器而言,提高了整體計算機(jī)運行效率。
2. 操作系統(tǒng)
為了更好地控制硬件,而創(chuàng)建了操作系統(tǒng)
操作系統(tǒng)(即OS): 是一款為了給用戶提供一個良好(穩(wěn)定、高效、安全)的運行環(huán)境,而對硬件和軟件管理的軟件 操作系統(tǒng)包括:
內(nèi)核: 進(jìn)程管理,內(nèi)存管理,文件管理,驅(qū)動管理其他程序: 例如函數(shù)庫,shell程序等等
在開發(fā)角度,操作系統(tǒng)對外會表現(xiàn)為一個整體,但是會暴露自己的部分接口,供上層開發(fā)使用,這部分用操作系統(tǒng)提供的接口叫做系統(tǒng)調(diào)用 但系統(tǒng)調(diào)用在使用上,功能比較基礎(chǔ),對用戶的要求也比較高,所以部分有能力的開發(fā)者對部分系統(tǒng)調(diào)用進(jìn)行適度封裝,從而形成了庫,有了庫,就有利于更上層用戶或者開發(fā)者進(jìn)行二次開發(fā),甚至一些人在操作系統(tǒng)之上弄出來了開發(fā)語言,供開發(fā)人員編寫程序。
3. 計算機(jī)層狀結(jié)構(gòu)
計算機(jī)層狀結(jié)構(gòu),具體如圖2所示:
圖2 計算機(jī)層狀結(jié)構(gòu)
4. 進(jìn)程概念
操作系統(tǒng)的管理,實際上是通過對數(shù)據(jù)的管理,從而達(dá)到對軟硬件資源的管理。而對數(shù)據(jù)進(jìn)行管理則都是先描述,再組織,最終可以轉(zhuǎn)化成對某種數(shù)據(jù)結(jié)構(gòu)的增刪查改,因此操作系統(tǒng)中一定會存在著大量的數(shù)據(jù)結(jié)構(gòu),這也是為什么要學(xué)數(shù)據(jù)結(jié)構(gòu)這本書的原因所在。
進(jìn)程: 一個已經(jīng)加載到內(nèi)存的程序
操作系統(tǒng)可以同時運行多個進(jìn)程,但形成真正進(jìn)程時,操作系統(tǒng)要先創(chuàng)建描述進(jìn)程(即進(jìn)程的屬性)的結(jié)構(gòu)體對象【即PCB(全稱process ctrl block —進(jìn)程控制塊】
進(jìn)程(也稱為task)= 內(nèi)存PCB數(shù)據(jù)結(jié)構(gòu)對象(即這個進(jìn)程的所有屬性值)+ 自己代碼和數(shù)據(jù)(code&date) 大致如圖3所示:
圖3 進(jìn)程大致結(jié)構(gòu)圖
Linux當(dāng)中的PCB實現(xiàn): 在Linux中描述進(jìn)程的結(jié)構(gòu)體叫做task _struct。task_struct是Linux內(nèi)核的一種數(shù)據(jù)結(jié)構(gòu),它會被裝載到RAM(即內(nèi)存)里并且包含著進(jìn)程的信息。 task_struct內(nèi)容包含著:
標(biāo)志符:描述本進(jìn)程的唯一標(biāo)識符,用來區(qū)別其他進(jìn)程。狀態(tài):任務(wù)狀態(tài),退出代碼,退出信號等。優(yōu)先級:相對于其他進(jìn)程的優(yōu)先級。程序計數(shù)器:程序中即將被執(zhí)行的下一條指令的地址內(nèi)存指針:包括程序代碼和進(jìn)程相關(guān)數(shù)據(jù)的指針,還有和其他進(jìn)程共享的內(nèi)存塊的指針上下文數(shù)據(jù):進(jìn)程執(zhí)行時,處理器的寄存器中的數(shù)據(jù)[休學(xué)例子,要加圖CPU,寄存器]I/O狀態(tài)信息:包括顯示的I/O請求,分配給進(jìn)程的I/O設(shè)備和被進(jìn)程使用的文件列表記賬信息:可能包括處理器時間總和,使用的時鐘數(shù)總和,時間限制,記賬號等其他信息
Linux內(nèi)核中組織進(jìn)程,最基本的組織進(jìn)程task_struct的方式,采用雙向鏈表組織
5.展望一下
計算機(jī)中這些可以好好看下: 操作系統(tǒng)(必學(xué)) 計算機(jī)網(wǎng)絡(luò)(必學(xué)) 計算機(jī)組成 編譯原理(本質(zhì):算法)
C/C++語言的最終表現(xiàn)形式:一套的編譯器、頭文件、庫文件(輔助C/C++教材)
6. 夾帶私貨
若你能看到看到這篇文章且能看到這,則說明你我有緣,留個關(guān)注吧,后面還會接著計算機(jī)408、底層原理、開源項目、以及數(shù)據(jù)、后端研發(fā)相關(guān)、實習(xí)、筆試/面試、秋招/春招、各種競賽相關(guān)、簡歷相關(guān)、考研、學(xué)術(shù)相關(guān)……,祝你我變得更強
好的,到此為止啦,祝您變得更強 7.想說的話
實不相瞞,寫的每篇博客都要寫五六個小時(加上自己學(xué)習(xí)和紙質(zhì)筆記,共八九小時吧),很累,希望大佬支持
道阻且長 行則將至個人主頁:在線OJ的阿川大佬的支持和鼓勵,將是我成長路上最大的動力
柚子快報激活碼778899分享:運維 【Linux】進(jìn)程序言
好文推薦
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。