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