電腦操作系統(tǒng)基礎(chǔ)知識大全
這是一本現(xiàn)代操作系統(tǒng)介紹的電子書,雖然看上去很專業(yè),但是還是很通俗,略有電腦基礎(chǔ)的人可以讀一讀,會從更加底層一些的角度全面認(rèn)識電腦。下面就讓小編帶你去看看電腦操作系統(tǒng)基礎(chǔ)知識吧,希望能幫助到大家!
操作系統(tǒng)基礎(chǔ)解析:Windows和Linu__ 到底有何不同?
計算機(jī)操作系統(tǒng)是基礎(chǔ)軟件,分為閉源和開源兩類。
廣義的操作系統(tǒng)包括:計算機(jī)(PC、工作站、服務(wù)器)系統(tǒng)、移動端系統(tǒng)(例如鴻蒙)、嵌入式系統(tǒng) 等。本文只涉及計算機(jī)操作系統(tǒng)。
計算機(jī)操作系統(tǒng)的功能角色:作為用戶和計算機(jī)硬件資源之間的交互,管理調(diào)度硬件資源,為應(yīng)用 軟件提供運行環(huán)境。操作系統(tǒng)屬于基礎(chǔ)軟件,是系統(tǒng)級程序的匯集,為用戶屏蔽底層硬件復(fù)雜度, 并提供編程接口和操作入口。操作系統(tǒng)控制處理器(CPU)調(diào)度系統(tǒng)資源,控制應(yīng)用程序執(zhí)行的時機(jī), 決定各個程序分配的處理器時間(CPU time)。操作系統(tǒng)需要兼容底層硬件和應(yīng)用軟件,才能實現(xiàn)計算機(jī)的功能。
根據(jù)核心代碼是否向開放,操作系統(tǒng)可劃分為兩類:開源系統(tǒng)、閉源系統(tǒng)。
1. 閉源操作系統(tǒng):代碼不開放,以微軟 Windows 系統(tǒng)為代表
微軟公司內(nèi)部的研發(fā)團(tuán)隊開發(fā) Windows 操作系統(tǒng),并開發(fā)配套的應(yīng)用軟件,比如 Office。在生態(tài) 建設(shè)方面,Intel 和 Windows 長期合作形成 Wintel 體系,在 PC 端市占率全球領(lǐng)先
Windows 系統(tǒng)的訪問分為 User mode(用戶模式)和 Kernel mode(內(nèi)核模式)。用戶級的應(yīng)用程序在 用戶模式中運行,而系統(tǒng)級的程序在內(nèi)核模式中運行。內(nèi)核模式允許訪問所有的系統(tǒng)內(nèi)存和 CPU 指令。Windows 系統(tǒng)從最早期的 16 位、32 位到現(xiàn)在流行的 64 位,系統(tǒng)版本從最初的 Windows 1.0 到 Windows 95、Windows 98、Windows 2000、Windows 2003、Windows __P、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 10 和 Windows Server 服務(wù)器企業(yè)級 操作系統(tǒng),不斷持續(xù)更新。
Windows 系統(tǒng)最大的優(yōu)勢在于圖形界面,使得普通用戶操作起來非常便利。相比大部分 Linu__ 系 統(tǒng),windows 的常用軟件安裝和系統(tǒng)設(shè)置不需要以命令行的方式去輸入系統(tǒng)指令,只需要點擊“按 鈕”即可完成。如今,絕大多數(shù)常見軟件、專用軟件和底層硬件都支持 Windows 操作系統(tǒng),形成 了 Window 強(qiáng)大的生態(tài)整體。
2. 開源操作系統(tǒng):代碼免費開放,以 Linu__ 操作系統(tǒng)為代表
Linu__ kernel(內(nèi)核)由 Linus Torvalds 在 1991 年發(fā)布,代碼免費公開,由全球開發(fā)者共同貢獻(xiàn), 已成為影響最廣泛的開源軟件項目。以 Linu__ 內(nèi)核為基礎(chǔ),不同的開發(fā)團(tuán)體(開源社區(qū)、企業(yè)、個 人等)對內(nèi)核代碼進(jìn)行一定的修改和補充,加入 GUI(圖形界面)、應(yīng)用等部分,形成了相應(yīng)的 Linu__ 操作系統(tǒng)發(fā)行版。
Linu__ 系統(tǒng)版本之間存在衍生關(guān)系,由此形成 RedHat、Slackware、Debian 等幾大家族,各家族 內(nèi)部又衍生出一些著名版本,如 Ubuntu、SUSE、CentOS、Red Hat Enterprise Linu__、Fedora 等。
Linu__ kernel 是開源項目,由全球范圍的開發(fā)者(企業(yè)、團(tuán)體、獨立開發(fā)者)共同貢獻(xiàn)源代碼。Linu__ 的官方組織是 Linu__ 基金會,作為非盈利的聯(lián)盟,協(xié)調(diào)和推動 Linu__ 系統(tǒng)的發(fā)展,以及宣傳、保護(hù) 和規(guī)范 Linu__。Linu__ 基金會由開源碼發(fā)展實驗室(Open Source Development Labs,OSDL)與自 由標(biāo)準(zhǔn)組織(Free Standards Group ,FSG) 于 2007 年聯(lián)合成立。
開源社區(qū)是 Linu__ 系統(tǒng)的創(chuàng)新源泉和主要的開發(fā)場所。Linu__ 操作系統(tǒng)發(fā)行版分為社區(qū)版本和商 業(yè)版本。社區(qū)版本數(shù)量較多,其開發(fā)和維護(hù)的主體是開源社區(qū)。少數(shù)的商業(yè)版本(比如紅帽企業(yè)版) 則是在社區(qū)版本的基礎(chǔ)上,進(jìn)一步優(yōu)化而來。整體來看,無論是否涉及商業(yè)活動,開源社區(qū)是 Linu__ 發(fā)行版的創(chuàng)新來源和主要的開發(fā)場所。而成熟的開源社區(qū)通常由相應(yīng)的開源基金會(或者項目委員 會)進(jìn)行管理。開源基金會為開發(fā)社區(qū)制定了規(guī)則,進(jìn)行資源管理,負(fù)責(zé)可能的商務(wù)對接,以及保 護(hù)社區(qū)的健康運轉(zhuǎn)。社區(qū)的開源基金會(委員會)一般由開源貢獻(xiàn)方進(jìn)行贊助和決策支持。
許多開源社區(qū)背后都有一個主導(dǎo)企業(yè),為社區(qū)提供資金和研究支撐,甚至直接委派員工參與開源 項目。例如,F(xiàn)edora 社區(qū)的核心開發(fā)者中 1/3 是紅帽的正式雇員。通過資助和維護(hù)開源社區(qū)的方 式,企業(yè)可以發(fā)揮研究力量的“杠桿”作用,通過向社區(qū)輸入自有的研究資源,吸引更多的外部貢 獻(xiàn)者參與進(jìn)來,擴(kuò)大創(chuàng)意來源;另一方面,開源社區(qū)版本也成為企業(yè)擴(kuò)大技術(shù)影響力的重要途徑。
Linu__ 操作系統(tǒng)由 4 部分組成:kernel、shell、文件系統(tǒng)、應(yīng)用程序。Kernel(內(nèi)核)是操作系統(tǒng)的 核心,不同于 windows 的內(nèi)核,Linu__ 的內(nèi)核不僅實現(xiàn)了進(jìn)程調(diào)度、內(nèi)存管理、中斷處理、異常陷 阱處理,而且還實現(xiàn)了進(jìn)程管理、進(jìn)程通信機(jī)制、虛擬內(nèi)存管理、文件系統(tǒng)驅(qū)動和 USB、網(wǎng)絡(luò)、聲 音等各類設(shè)備驅(qū)動子系統(tǒng),決定了整個系統(tǒng)的性能和穩(wěn)定性。而 shell 是系統(tǒng)的用戶界面,提供用 戶與內(nèi)核交互的接口,接收用戶輸入的命令并送入內(nèi)核去執(zhí)行。
Linu__ 操作系統(tǒng)主要的優(yōu)勢領(lǐng)域是服務(wù)器和嵌入式。據(jù) Linu__ 基金會統(tǒng)計,全球 90%的公有云平 臺采用了 Linu__ 系統(tǒng),99%的超算和 62%的嵌入式設(shè)備也都是基于 Linu__。亞馬遜 AWS、微軟 Azure、微軟 Azure、谷歌云平臺和阿里云等主流云服務(wù)商,都提供了 Linu__ 系統(tǒng)方案。全球公有 云平臺運行的所有應(yīng)用,超過 54%是運行在 Linu__ 虛擬機(jī)上。甚至微軟 Azure 的近 30%的虛擬機(jī) 也是基于 Linu__。根據(jù) IDC 在 2017 年的統(tǒng)計數(shù)據(jù),全球服務(wù)器操作系統(tǒng)使用份額(免費+付費)中, 68%是 Linu__ 服務(wù)器操作系統(tǒng)。
Linu__ 操作系統(tǒng)在服務(wù)器領(lǐng)域的普及,主要由于 3 個方面:
1)創(chuàng)新方面,集思廣益。全球開發(fā)者對 Linu__ 內(nèi)核保持了持續(xù)的更新,提供了充足的創(chuàng)新動力。據(jù) GitStats 分析結(jié)果,截至 2018 年 9 月,已有超過 19000 名開發(fā)者為 Linu__ 內(nèi)核貢獻(xiàn)了代碼, 這些開發(fā)者遍布全球范圍超過1500個組織/企業(yè)。廣泛分布的開發(fā)者,從不同視角不同方面對Linu__ 內(nèi)核的補充,使得 Linu__ 系統(tǒng)得以快速適應(yīng)服務(wù)器領(lǐng)域的變化。
2)系統(tǒng)代碼可以修改和自定義,用戶可調(diào)用計算機(jī)資源的自由度極高。Linu__ 操作系統(tǒng)的使用者 可以輕松查看系統(tǒng)代碼,可以自由修改代碼來修補常見的問題,也可以開發(fā)自己的程序并添加入 Linu__ 操作系統(tǒng)中。相比 Windows 等閉源系統(tǒng),Linu__ 支持了使用者對于計算機(jī)資源極大的使用自 由度,支持專業(yè)用戶去構(gòu)建和自定義服務(wù)器,由此獲得了互聯(lián)網(wǎng)公司、云計算公司的青睞。
3)運行效率高,運維成本低。Linu__ 系統(tǒng)在服務(wù)器上面的運行效率較高,相對比較輕量化,除非硬 件資源分配出現(xiàn)問題,不易出現(xiàn)系統(tǒng)卡死狀況。而且 Linu__ 系統(tǒng)天然地支持虛擬化。因此,在服務(wù) 器集群上,Linu__ 系統(tǒng)的運維成本較低。
4)安全。Linu__ 從發(fā)展根源上就是針對多用戶系統(tǒng)設(shè)計的,系統(tǒng)管理員和 root 用戶具有系統(tǒng)管理 權(quán)限。Linu__ 面向全球開發(fā)者開源,系統(tǒng)文件都是文檔,在全球開發(fā)者多次的篩查和更新中,基本 排除了“后門植入”的可能。實際應(yīng)用中,普通不成熟的 Linu__ 操作系統(tǒng)確實可能存在安全問題, 也是和系統(tǒng)的文檔屬性有關(guān)。例如,用戶 root 權(quán)限和 sudo 指令可在有意或無意間修改 Linu__ 系 統(tǒng)文檔,可能會對其他用戶或整個系統(tǒng)造成不利影響。因此,成熟的 Linu__ 操作系統(tǒng)解決方案,有 必要對這類屬性進(jìn)行設(shè)計方面的防范,去進(jìn)行適當(dāng)?shù)臋?quán)限屏蔽。而這些安全屬性的設(shè)計,本質(zhì)上并 不存在難以解決的障礙。
電腦操作系統(tǒng)維護(hù)10條基礎(chǔ)知識!
1、經(jīng)常進(jìn)行“磁盤清理”和磁盤碎片整理”
當(dāng)硬盤用久了,無數(shù)次的新增、更改和刪除程序和文件后,就會造成很多斷斷續(xù)續(xù)的扇區(qū),非連續(xù)性的文件便會愈來愈多,硬盤磁頭便需要花更多時間跳來跳去來讀取數(shù)據(jù),這就導(dǎo)致硬盤速度減慢。
因此,我們應(yīng)該定期進(jìn)行“磁盤清理”和磁盤碎片整理”,將所有非連續(xù)性的文件重新編排整齊。
處理方法:點開始-程序-附件-系統(tǒng)工具-磁盤清理程序和磁盤碎片整理程序。有可能整理過程很慢,那是你長時間沒有清理或者有只讀文件,請多執(zhí)行幾次,耐心等待。碎片清理時要退出所有的應(yīng)用程序。
2、移動internet臨時文件和臨時交換文件
internet臨時文件和臨時交換文件是我們上網(wǎng)時產(chǎn)生的臨時文件,是產(chǎn)生磁盤碎片的罪魁禍?zhǔn)祝兴x開系統(tǒng)盤是最好的辦法處理方法:
⑴在桌面上右鍵點internet e__plorer圖標(biāo),再點出來的“屬性”,出屬性對話框,在internet臨時文件后面點“設(shè)置”,在出來的設(shè)置對話框中點移動文件夾,再選擇除系統(tǒng)盤以外的硬盤(如D盤);
⑵、開始-設(shè)置-控制面板-雙擊系統(tǒng),在“性能”項上點“設(shè)置”,在“性能選項”上點“高級”,在“虛擬內(nèi)存”選項點“更改”,選擇除系統(tǒng)盤外的硬盤如d,最后確定。關(guān)機(jī)重啟,ok。
3、開啟wondows __p保留的20%帶寬
wondows __p默認(rèn)保留了20%的帶寬,我們可以將它開啟,充分利用帶寬。處理方法:點開始-運行,輸入gpedit.msc,打開組策略-計算機(jī)配置—管理模板—網(wǎng)絡(luò)—Qos數(shù)據(jù)包調(diào)度程序,右擊窗口右邊的“限制可保留帶寬”選項,單擊“屬性”命令,在彈出的“限制可保留帶寬屬性”對話框中的“設(shè)置”選項卡中,勾選“已啟用”單選框,將下面的“帶寬限制”數(shù)值調(diào)到“0”。點確定,ok。
4、刪除不必要的系統(tǒng)聲音
系統(tǒng)聲音是計算機(jī)事件的一組聲音方案,實際一點用處沒有,還占用一部分系統(tǒng)內(nèi)存,干掉它是明智的選擇。
處理方法:右鍵點通知欄里的小喇叭,點調(diào)整音頻屬性,在屬性框中點聲音,點方案后面的“刪除”,再確定,ok。
5、定期清理internet預(yù)讀文件
在聊天室碰到好多次有些朋友突然打不開我們聊天室的網(wǎng)頁了,而其他的網(wǎng)站可以。問題是出現(xiàn)了死連接,實際__P使用一段時間后,預(yù)讀文件夾里的文件會變得很大,里面會有死鏈文件,這會減慢系統(tǒng)時間。建議:定期刪除。
處理方法:在桌面上右鍵點internet e__plorer圖標(biāo),再點“屬性”,出屬性對話框,在internet臨時文件后面點“刪除cookies”、“刪除文件”。
提醒:刪除文件時請選擇“刪除所有脫機(jī)文件”。
6、關(guān)于internet e__plorer
IE并不是最佳的瀏覽器,其缺點之一是占用太多的系統(tǒng)資源,第一次開啟IE,占用7%左右的資源,以后每開啟一個IE窗口,占用4%左右的資源。現(xiàn)在上網(wǎng),網(wǎng)頁自身自動開啟的彈出式窗口就多,快速消耗你的內(nèi)存是很自然的事情,CUP使用率常在100%也不奇怪。
7、優(yōu)化硬盤參數(shù)
右擊“我的電腦”,選“屬性”,選中“硬件”下的“設(shè)備管理器”標(biāo)簽,然后在“磁盤驅(qū)動器”中找到你的硬盤,查看它的屬性,在“磁盤屬性”標(biāo)簽中選中“啟用了寫入緩存”;在“IDE控制器”中分別查看“Primary IDE Channel”和“Secondary IDE Channel”的屬性,在“高級設(shè)置”中將“設(shè)備類型”設(shè)定為“自動檢測”,“傳輸模式”設(shè)定為“DMA(若可用)”。
8、讓系統(tǒng)自動釋放系統(tǒng)資源
在Windows中每運行一個程序,系統(tǒng)資源就會減少。即使把程序關(guān)閉,在內(nèi)存中還有一些沒用的.DLL文件在運行,這樣就使得系統(tǒng)的運行速度下降??梢酝ㄟ^修改注冊表,令程序關(guān)閉后自動清除沒有用的DLL文件,收回系統(tǒng)資源。
處理方法:運行regedit打開注冊表編輯器,找到并選中HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrenVersione__plorer主鍵,在右邊窗格單擊右鍵,新建一個字符串值,名為AlwaysUnloadDll,然后將AlwaysUnloadDll的鍵值改為1,退出注冊表,重啟計算機(jī)。
9、固定自己的DNS和IP
一般__P/2000是自動檢測IP和DNS地址的,但我們可以自己設(shè)置好,以提高系統(tǒng)效率,前提是你要與服務(wù)商聯(lián)系,獲取你的DNS和IP地址。處理方法:點開始-設(shè)置-控制面板-雙擊網(wǎng)絡(luò)連接,點方框中TCP/IP,點屬性,點IP地址,選擇“指定IP地址”,填入你從服務(wù)商那里得到的IP地址和子關(guān)掩碼;點DNS配置,選擇“啟用DNS",填入你得到的服務(wù)器地址,添加。
10、關(guān)于ADSL貓的使用注意事項
因為貓對電源的要求實際很高,只是我們不太注意,貓的電源應(yīng)該盡量采用獨立的電源線,中間要注意避開大功率的用電設(shè)備,防止其他用電設(shè)備對它的干擾,采取一定的屏蔽接地措施是明智的。
另外注意選擇品牌大的貓并注意與服務(wù)商提供服務(wù)的兼容性,如果ISP的局端設(shè)備有了改動,這時我們可能會經(jīng)常掉線,這時建議下載Firmware版本刷新程序?qū)Α按筘垺彼⑿?,一般可以完全解決。再者使貓保持良好的散熱效果,最好將貓的下面墊空。
操作系統(tǒng)基礎(chǔ)-CPU虛擬化
操作系統(tǒng)的三個要素
操作系統(tǒng)的定位是計算機(jī)資源(CPU,內(nèi)存,硬盤,各種I/O設(shè)備等)的管理者。最早的計算機(jī)系統(tǒng)一次只運行一個程序,操作系統(tǒng)是作為庫函數(shù)的形式存在的,這種模式無法充分的利用計算機(jī)資源,對于早期造價動輒數(shù)百萬美元的計算機(jī)來說,這是巨大的浪費,因此人們引入了現(xiàn)代的操作系統(tǒng)來支持方便的多進(jìn)程并發(fā)執(zhí)行,允許多個用戶同時運行他們的程序。具體來說,操作系統(tǒng)提供了這么三個要素:
虛擬化(Virtualization),主要指的是CPU和內(nèi)存虛擬化,仿佛每個進(jìn)程都有自己獨占的CPU和內(nèi)存。
并發(fā)(Concurrency),主要指的是線程級的并發(fā)。
持久化(Persistance),主要指的是文件系統(tǒng)。
存儲器層次結(jié)構(gòu)
為什么說單個程序不能充分利用計算機(jī)資源呢?這跟計算機(jī)的存儲器層次結(jié)構(gòu)有關(guān),計算機(jī)中有各種各樣的存儲器:CPU上的寄存器、一二級緩存,內(nèi)存、硬盤……這些存儲器的容量、性能和成本各不相同,一個典型的存儲器層次結(jié)構(gòu)如下:
越是靠近上層(CPU)存儲器的性能越好,但是容量越小,(每字節(jié))存儲成本越高;越是遠(yuǎn)離CPU,存儲器的性能越差,但是容量越大,(每字節(jié))存儲成本越低。比如,CPU訪問一級緩存緩存只需要1個時鐘周期,而進(jìn)行磁盤I/O可能需要上千萬個時鐘周期。程序在進(jìn)行I/O操作的時候,CPU實際是空閑的,這時候可以讓CPU運行其他程序,提供計算機(jī)資源的利用率。
另一方面,為了彌補高速CPU到低速I/O設(shè)備之間的差距,在存儲器之間引入了多層的緩存,比如本地硬盤作為網(wǎng)絡(luò)的緩存,內(nèi)存(DRAM)作為硬盤的緩存,SRAM作為內(nèi)存的緩存。由于局部性原理的存在,這個存儲器層次結(jié)構(gòu)通常工作得很好。所謂得局部性原理包含兩項:
一是時間局部性,程序一旦引用過某個存儲器位置,接下來它很可能還會引用這個位置;
二是空間局部性,程序一旦引用過某個存儲器位置,接下來它很可能還會引用附近的位置。
進(jìn)程
操作系統(tǒng)提供了進(jìn)程這個抽象概念,一個進(jìn)程就是一個正在運行的程序。根據(jù)Steam 2020年5月的調(diào)查,現(xiàn)在主流的PC配置是64位的4核物理CPU和16G內(nèi)存[1],而目前__86_64的PC上通常會運行幾十上百個進(jìn)程,每個進(jìn)程擁有256TB的的虛擬內(nèi)存。正是通過CPU和內(nèi)存虛擬化,操作系統(tǒng)提供了這種幻象:似乎每一個進(jìn)程都有一個獨占的CPU和一片巨大的獨占內(nèi)存。
在深入這些細(xì)節(jié)以前,我們先來看看計算機(jī)上運行一個進(jìn)程需要維護(hù)些什么狀態(tài)信息:
用來存取指令和數(shù)據(jù)的內(nèi)存,由于進(jìn)程會根據(jù)地址來讀寫內(nèi)存,它們也叫做內(nèi)存地址空間,當(dāng)然這里指的虛擬內(nèi)存地址空間(Virtual Memory Address Space)。進(jìn)程的堆棧信息也在這個地址空間中。
CPU中的通用寄存器,如%ra__
CPU中的特殊寄存器,如:
程序計數(shù)器(Program Counter/PC),或叫做指令指針(Instruction Pointer/IP)
棧指針(stack pointer)及其對應(yīng)的基址指針(frame pointer)
I/O相關(guān)的信息,比如當(dāng)前打開的文件,Socket套接字等。
操作系統(tǒng)通過分時復(fù)用的方式實現(xiàn)了CPU的虛擬化,運行進(jìn)程A一段時間后,主動或被動地把這個進(jìn)程的狀態(tài)信息寫入物理內(nèi)存然后從物理內(nèi)存中讀取另一個進(jìn)程B的狀態(tài)信息,從而恢復(fù)進(jìn)程B的運行。
進(jìn)程在其生命周期中,始終處于以下三個狀態(tài)中的一個:
Running:進(jìn)程正在通過CPU執(zhí)行指令
Ready:進(jìn)程可以運行,但是操作系統(tǒng)還沒有調(diào)度它
Blocked:進(jìn)程在等待某個事件發(fā)生(比如等待磁盤讀取完成),因此還不能運行
這是一個理想化的狀態(tài),Linu__中進(jìn)程還有一些別的狀態(tài)
內(nèi)核中有一個數(shù)據(jù)結(jié)構(gòu)叫做Process Control Block(PCB),用來記錄上面提到的各種信息,每個進(jìn)程都有一個對應(yīng)的PCB。
CPU虛擬化
下面來考慮實現(xiàn)CPU虛擬化要解決的兩個核心問題:
安全:用戶的進(jìn)程不應(yīng)該擁有無限制的權(quán)限,比如它不應(yīng)該能訪問另一個用戶的文件,而權(quán)限檢查的把關(guān)就需要由操作系統(tǒng)來實現(xiàn)。
性能:操作系統(tǒng)提供CPU虛擬化這種抽象機(jī)制的時候,不應(yīng)該有太大的性能損失
計算機(jī)系統(tǒng)采用了一種叫Limited Direct E__ecution的機(jī)制,通過硬件和操作系統(tǒng)的協(xié)作解決了這兩個問題。在具體實現(xiàn)上,CPU中有一個狀態(tài)位,表明了當(dāng)前運行在什么模式下:
用戶的進(jìn)程運行在用戶模式下,這種模式能做的操作有限,比如它無法發(fā)起一個I/O請求,嘗試這么做會引發(fā)一個異常(e__ception),導(dǎo)致進(jìn)程被操作系統(tǒng)殺死。
與之相對的是,內(nèi)核代碼運行在內(nèi)核模式下,它能執(zhí)行所有特權(quán)操作,比如發(fā)起I/O請求。
如果用戶進(jìn)程需要發(fā)起特權(quán)操作,必須通過操作系統(tǒng)內(nèi)核來進(jìn)行,操作系統(tǒng)提供了很多這樣的服務(wù)入口,這就是系統(tǒng)調(diào)用,比如說打開一個文件用到的open()系統(tǒng)調(diào)用。這些系統(tǒng)調(diào)用看起來像是一個普通的函數(shù),而內(nèi)部實現(xiàn)上只是把系統(tǒng)調(diào)用的編號,和對應(yīng)的參數(shù)放到棧上某個特定的位置,然后調(diào)用trap指令,這個指令會完成以下幾個操作:
把當(dāng)前進(jìn)程的CPU寄存器的值保存到內(nèi)核棧中
把運行模式切換為內(nèi)核模式
跳轉(zhuǎn)到該系統(tǒng)調(diào)用的處理函數(shù)
內(nèi)核檢查參數(shù)和權(quán)限和合法性,然后執(zhí)行相應(yīng)的處理,無論結(jié)果如何,最終調(diào)用return-from-trap指令返回用戶進(jìn)程,具體過程如下:
從內(nèi)核棧中還原該進(jìn)程的CPU寄存器值
把運行模式切換為用戶模式
把程序計數(shù)器(PC)設(shè)置為進(jìn)程的下一條指令,從而恢復(fù)用戶進(jìn)程的運行。
可以看到,用戶進(jìn)程直接運行在CPU上, 因此保證了性能,而通過內(nèi)核模式和用戶模式的區(qū)分保證了安全,這里主要的損耗在于上下文切換帶來的開銷。
內(nèi)核調(diào)用return-from-trap之前還會檢查進(jìn)程是否有待處理的信號,如果有的話在這里觸發(fā)信號處理函數(shù)。
搶占式調(diào)度
Limited Direct E__ecution 存在一個問題,一個進(jìn)程可能會長久地占用CPU,導(dǎo)致其他進(jìn)程無法得到服務(wù),那么這個進(jìn)程什么時候把控制權(quán)還給操作系統(tǒng),讓操作系統(tǒng)調(diào)度其他進(jìn)程呢?很自然地,一個合理的時間點是觸發(fā)系統(tǒng)調(diào)用的時候,操作系統(tǒng)可能會決定先執(zhí)行另一個進(jìn)程。但如果是一個無限循環(huán),中間沒有任何系統(tǒng)調(diào)用呢?一些早期的系統(tǒng)如Mac OS采用了合作式的調(diào)度方案,長期運行的進(jìn)程需要周期性地讓出CPU,比如在循環(huán)體中加入一個yield()之類的系統(tǒng)調(diào)用,允許操作系統(tǒng)調(diào)度其他進(jìn)程。這個方案治標(biāo)不治本,存在這些場景:
某些惡意程序希望獨占CPU資源,不按照要求來做
程序bug導(dǎo)致yield()一直沒有運行
這種情況下,唯一能打破這種循環(huán)的方法只有重啟。要解決這個問題,操作系統(tǒng)仍然需要硬件的協(xié)助。硬件中有個計時器可以編程為每隔一定的時間(比如每十毫秒)就發(fā)起一個時鐘中斷,它會掛起當(dāng)前運行的進(jìn)程,跳轉(zhuǎn)到操作系統(tǒng)預(yù)先設(shè)置的中斷處理函數(shù)中。在這里,操作系統(tǒng)可以決定是繼續(xù)運行這個進(jìn)程,或是調(diào)度別的進(jìn)程。這就是搶占式調(diào)度。
異常處理流
程序運行的過程中會遇到各種各樣的異常情況,在計算機(jī)啟動的時候,操作系統(tǒng)就需要為各種異常指定對應(yīng)的處理函數(shù)。CPU在執(zhí)行完一條指令之后,總是會檢查是否存在異常,如果有則觸發(fā)對應(yīng)的異常處理函數(shù),否則繼續(xù)執(zhí)行下一條指令。
注意:
上文中有兩組寄存器的保存/還原操作,第一組是用戶態(tài)的寄存器,第二組是內(nèi)核態(tài)的寄存器
內(nèi)核處理完系統(tǒng)的調(diào)用后,也可以選擇不切換進(jìn)程,直接調(diào)用return-from-trap返回進(jìn)程A
進(jìn)程調(diào)度策略
上面描述了進(jìn)程切換的機(jī)制,接下來討論進(jìn)程調(diào)度的策略,也就是說每次操作系統(tǒng)要調(diào)度一個進(jìn)程的時候,選擇運行哪一個進(jìn)程。通常來說,我們有兩種類型的工作負(fù)載:
交互式的進(jìn)程,這種進(jìn)程大部分時候都在Blocked的狀態(tài)等待I/O,不怎么占用CPU,但是需要得到高優(yōu)先級的處理,比如shell里面用戶每輸入一個字符,總是希望操作系統(tǒng)盡快響應(yīng)并把這個字符顯示到屏幕上。
非交互式的進(jìn)程,他們大部分時間都在使用CPU執(zhí)行指令,處于Running的狀態(tài),這種進(jìn)程的訴求是高吞吐量,盡可能減少進(jìn)程切換帶來的開銷。
下面來看看兩種常見的調(diào)度策略
多級反饋隊列
多級反饋隊列(Multi-Level Feedback Queue)致力于提高系統(tǒng)的整體響應(yīng)時間。
操作系統(tǒng)中維護(hù)多個進(jìn)程隊列,從高到底依次為每個隊列分配不同的優(yōu)先級:高優(yōu)先級的進(jìn)程分配較短的時間片,保證快速響應(yīng);低優(yōu)先級的進(jìn)程分配較長的時間片,保證其高吞吐量。具體調(diào)度策略如下:
如果A的優(yōu)先級大于B,運行A
如果A的優(yōu)先級等于B,輪流運行A和B
然而我們不知道每個進(jìn)程的工作模式是交互式的還是非交互式,因此先假設(shè)他們都是需要快速響應(yīng)的交互式進(jìn)程:
當(dāng)進(jìn)程啟動的時候,把它放到最高優(yōu)先級的隊列中
當(dāng)一個進(jìn)程用完它的時間片之后,降低它的優(yōu)先級,也就是移到下一個隊列中
還存在一個問題,如果有大量高優(yōu)先級任務(wù),那么低優(yōu)先的任務(wù)可能會被餓死,因此:
每隔一段時間把所有的進(jìn)程都移動到最高優(yōu)先級的隊列
按比例共享調(diào)度
與MLFQ相對的,按比例共享調(diào)度(Proportional Share Scheduling)的目標(biāo)是讓各個進(jìn)程公平地獲取CPU時間。它最簡單的形式叫做彩票調(diào)度(lottery scheduling):假設(shè)系統(tǒng)使用100張彩票(編號為0-99),每次隨機(jī)選擇一張來決定運行哪個進(jìn)程,進(jìn)程A持有75張(編號為0-74),進(jìn)程B持有剩余的25張(編號75-99)。任務(wù)調(diào)度器每次計算出一個0-99之間的隨機(jī)值,如果落在0-74之間則運行進(jìn)程A,反之運行進(jìn)程B,這樣保證了兩個進(jìn)程總體獲得的CPU時間跟它們持有的票據(jù)數(shù)量一致(75%:25%)。
最后還有個問題,怎么為進(jìn)程分配票據(jù)(或者說權(quán)重),可以跟nice值關(guān)聯(lián)起來。
Linu__的進(jìn)程調(diào)度器
Linu__當(dāng)前采用的進(jìn)程調(diào)度器叫做完全公平調(diào)度器(Completely Fair Scheduler/CFS),內(nèi)部采用紅黑樹,實現(xiàn)了跟按比例共享調(diào)度類似的目標(biāo)。之前采用的進(jìn)程調(diào)度器為O(1),其實現(xiàn)類似前面說的多級反饋隊列。
電腦操作系統(tǒng)基礎(chǔ)知識大全相關(guān)文章:
★ 電腦入門操作大全