計算機(jī)系統(tǒng)是由處理器吐句、主存龄广、磁盤、i/o設(shè)備等等 組成蕴侧。
而操作系統(tǒng)是一個軟件择同,用于管理計算機(jī)系統(tǒng)。
與用戶交互的 基于文本的稱為shell 基于界面的稱為GUI 但這些并不屬于操作系統(tǒng)
? ? ? ?
這里的用戶接口程序就是 我們的Shell(命令行)和GUI(window的桌面)
多數(shù)計算機(jī)有兩種運(yùn)行模式:內(nèi)核態(tài)和用戶態(tài)
操作系統(tǒng)運(yùn)行在內(nèi)核態(tài)中(也稱為管態(tài)净宵、核心態(tài))
在這個模式中
操作系統(tǒng)對所有硬件具有完全訪問權(quán)敲才,可以運(yùn)行任何計算機(jī)課執(zhí)行的指令。
而其余軟件運(yùn)行在用戶態(tài)择葡,只使用了機(jī)器指令中的一個子集紧武,比如一些i/o指令時禁止的。
操作系統(tǒng)與普通軟件的主要區(qū)別是
普通軟件你不喜歡可以更換敏储,或?qū)懸粋€但操作系統(tǒng)卻不能寫阻星,這是受硬件保護(hù)的。
但嵌入式操作系統(tǒng)(它沒有內(nèi)核態(tài))和解釋系統(tǒng)(java的操作系統(tǒng))除外已添。
linux與window的源代碼有500萬行妥箕,如果包括共享庫,則應(yīng)該有7000萬行
一本書1000頁更舞,一頁50行畦幢,也要100本書±虏酰基本就是一個書架宇葱。如果包括共享庫起碼要10-20個書架。所以刊头,操作系統(tǒng)是大型黍瞧、復(fù)雜、且長壽的原杂。
壽命長是因?yàn)橛〔坏┚帉懗鰜恚姓呔筒辉竵G棄去在寫一個污尉。
什么是操作系統(tǒng)
它是在內(nèi)核態(tài)運(yùn)行的軟件
操作系統(tǒng)有兩個基本上的獨(dú)立任務(wù)膀哲;為應(yīng)用程序提供抽象、管理硬件資源
硬件為操作系統(tǒng)提供了丑陋的接口被碗,而操作系統(tǒng)又為用戶(應(yīng)用程序)提供美麗的接口
操作系統(tǒng)的歷史
從1945 第一代計算機(jī): 真空管和穿孔卡片? 到1955年 第二代 晶體管和批處理系統(tǒng) 到1965年 第三代集成電路和多道程序設(shè)計 到1980 第四代個人計算機(jī) 到1990年 第五代移動計算機(jī)
計算機(jī)硬件
現(xiàn)在的計算機(jī)都可看做這個模型(目前還是夠用的)
操作系統(tǒng)擴(kuò)展了計算機(jī)的指令集锐朴、它要做的是了解大量硬件? 并了解硬件如何面對程序員兴喂,在這里簡要了解一下硬件。
如需詳細(xì)了解請查閱 Tanenbaum和Autiin(2012) Patterson和Hennessy(2013)
處理器
他的一生都在 從內(nèi)存中取出指令焚志,解碼-確定其類型與操作數(shù)之中(取指衣迷,解碼)每個CPU都有一套可執(zhí)行的指令集(x86不能執(zhí)行ARM程序 反過來也不行)
cpu內(nèi)有個臨時寄存器。由于取指比解碼的時間長酱酬,所以就有處理臨時數(shù)據(jù)的寄存器壶谒,這個臨時寄存器在cpu內(nèi),有了這個臨時寄存器就可以從內(nèi)存讀取到臨時寄存器里膳沽,也可以將變量和結(jié)果保存在這個臨時寄存器上汗菜,也可以從臨時寄存器存入內(nèi)存。
有個專用寄存器挑社。他保存了下一個要讀取指令的地址陨界,指向下一個后續(xù)指令。
有一個堆棧指針寄存器痛阻。指向內(nèi)存中棧的頂端菌瘪,該棧包含每個指執(zhí)行過程的棧幀。一個棧幀保存了有關(guān)的輸入?yún)?shù)阱当、局部變量俏扩、及沒保存在寄存器中的臨時變量。
有一個程序狀態(tài)字(Program Status Word? (PSW))寄存器弊添。保存著包含條件的碼位动猬,cpu優(yōu)先級、模式表箭,及各種其他控制位赁咙。
所有cpu有四個寄存器
臨時寄存器 、專用寄存器免钻、 堆棧指針寄存器 彼水、程序狀態(tài)字寄存器(PSW)
操作系統(tǒng)必須了解每一個寄存器
因?yàn)樵诙嗦窂?fù)用(同時使用)的操作系統(tǒng)中,操作系統(tǒng)不停的啟動關(guān)停程序
每關(guān)停一次极舔,就必須知道這些寄存器運(yùn)行到了哪里凤覆,等待啟動繼續(xù)運(yùn)行
為了性能,設(shè)計師早就放棄了同時讀取拆魏、解碼盯桦、執(zhí)行的簡單模型〈雀現(xiàn)在的cpu有單獨(dú)的取指單元,取n指令時拥峦,可以對n+1指令解碼贴膘,這樣的機(jī)制稱為流水線。
比流水線更厲害的是超標(biāo)量cpu略号。這種機(jī)制在解碼單元和執(zhí)行單元之間添加了一個保持緩沖區(qū)刑峡,兩旁有很多的執(zhí)行單元,一旦有空閑的執(zhí)行單元就立馬檢查緩沖區(qū)是否有可執(zhí)行的指令玄柠。
前面說過突梦,用戶態(tài)運(yùn)行下的程序只能執(zhí)行cup整個指令集的子集,而這些都是由PSW一個二進(jìn)制位控制羽利,用戶態(tài)下很多有關(guān)I/O和內(nèi)存保護(hù)的所有指令的是禁止的
為了從操作系統(tǒng)中獲取這些服務(wù)宫患,用戶程序必須使用系統(tǒng)調(diào)用(system call),在這里先把他看成是特殊的用戶指令,是用戶從用戶態(tài)切換到內(nèi)核態(tài)的能力
但是計算機(jī)使用陷阱來執(zhí)行系統(tǒng)調(diào)用而非指令这弧,其他多數(shù)陷阱是由硬件引起的撮奏,用來警告有異常情況的發(fā)生。
多線程與多核芯片
moore定律是芯片中的晶體管沒18個月翻一倍当宴。它已經(jīng)保持了30年畜吊,有望再保持10年,這么多的晶體管的必然結(jié)果是户矢,在cpu中加入了更大的緩存(后面解釋)玲献,隨后某種控制邏輯也會出現(xiàn),比如多線程或超線程
多線程允許cpu保持兩個不同的線程狀態(tài)梯浪,然后再納秒級的時間尺度來回切換捌年。(線程是一種輕量級進(jìn)程,后面解釋)
多線程對操作系統(tǒng)是有益的挂洛,因?yàn)橐粋€線程相當(dāng)于單個cpu礼预,對于實(shí)際只有兩個cpu的操作系統(tǒng)來說,則相當(dāng)于4個cpu虏劲。
除了多線程外托酸,還有多核,就是一個多核芯片可以安放多小芯片柒巫,每個小芯片相當(dāng)于cpu励堡,目前最多的有60多個核,如Intel Xeon Phi等
但操作系統(tǒng)使用這類多核芯片堡掏,必須使用多處理器操作系統(tǒng)
論數(shù)量最多的沒什么贏過GPU(顯卡的組成部分)的应结,GPU是由成千上萬個微核組成的處理器,擅長圖形渲染,但不能勝任串行任務(wù)鹅龄,且很難編程揩慕。GPU在加密及網(wǎng)絡(luò)傳輸方面對操作系統(tǒng)很有用,但讓他運(yùn)行在GPU上就不太可能了扮休。
存儲器
任何一種計算機(jī)中止吐,第二種主要部件都是存儲器
理想的儲存器應(yīng)有三個目標(biāo)
極為迅速宝踪,cpu不會受到儲存器限制
充分大
非常便宜
但目前是無法同時滿足著三個目標(biāo)
頂層是存儲器侨糟,寄存器在cpu中,沒有時延瘩燥,容量為 在32位CPU為32*32,64位中則64*64秕重,其儲存容量都小于1kb
下一層是高速緩存,當(dāng)某個程序讀取存儲字時厉膀,先會檢查高速緩存中是否有對應(yīng)的字溶耘,是,則被稱為高速緩存命中服鹅,就不需要通過主線去訪問主存了凳兵,當(dāng)高速緩存的價格昂貴,大小有限企软。
操作系統(tǒng)一直在使用緩存庐扫,避免重復(fù)地調(diào)取主存中的文件,以提高效率
緩存是一個好方法仗哨,在現(xiàn)代CPU中設(shè)計了兩個緩存
第一級稱為L1緩存形庭,在CPU中,將以解碼的指令調(diào)入cpu執(zhí)行厌漂,無延遲
第二級稱為L2緩存萨醒,在CPU外,用來存放使用過的內(nèi)存字苇倡,有1-2個時鐘周期延遲
再往下一層是主存富纸,通常稱為隨機(jī)訪問存儲器(RAM)
除主存之外,還有一類 非易失性訪問存儲器
只讀存儲器(ROM) 閃存? 電可擦除可編程存儲器(EEPROM)
前一個在出廠時就已寫好旨椒,不能被更改胜嗓,后兩個則可以被更改
還有易失的CMOS存儲器 它靠一塊小電池驅(qū)動保持時間和啟動磁盤等配置,計算機(jī)
沒上電也可更新時間?