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