電腦作業系統基礎知識多篇

文思社 人氣:1.97W

電腦作業系統基礎知識多篇

這是一本現代作業系統介紹的電子書,雖然看上去很專業,但是還是很通俗,略有電腦基礎的人可以讀一讀,會從更加底層一些的角度全面認識電腦。下面就讓小編帶你去看看電腦作業系統基礎知識吧,希望能幫助到大家!

作業系統基礎解析:Windows和Linu__ 到底有何不同?

計算機作業系統是基礎軟體,分為閉源和開源兩類。

廣義的作業系統包括:計算機(PC、工作站、伺服器)系統、移動端系統(例如鴻蒙)、嵌入式系統 等。本文只涉及計算機作業系統。

計算機作業系統的功能角色:作為使用者和計算機硬體資源之間的互動,管理排程硬體資源,為應用軟體提供執行環境。作業系統屬於基礎軟體,是系統級程式的彙集,為使用者遮蔽底層硬體複雜度,並提供程式設計介面和操作入口。作業系統控制處理器(CPU)排程系統資源,控制應用程式執行的時機, 決定各個程式分配的處理器時間(CPUtime)。作業系統需要相容底層硬體和應用軟體,才能實現計算機的功能。

根據核心程式碼是否向開放,作業系統可劃分為兩類:開源系統、閉源系統。

1.閉源作業系統:程式碼不開放,以微軟

Windows 系統為代表

微軟公司內部的研發團隊開發 Windows 作業系統,並開發配套的應用軟體,比如 Office。在生態 建設方面,Intel 和 Windows長期合作形成 Wintel 體系,在 PC 端市佔率全球領先

Windows 系統的訪問分為 User mode(使用者模式)和 Kernel mode(核心模式)。使用者級的應用程式在使用者模式中執行,而系統級的程式在核心模式中執行。核心模式允許訪問所有的系統記憶體和 CPU 指令。Windows 系統從最早期的 16 位、32 位到現在流行的64 位,系統版本從最初的 Windows 1.0 到 Windows 95、Windows 98、Windows 2000、Windows2003、Windows __P、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 10 和Windows Server 伺服器企業級 作業系統,不斷持續更新。

Windows 系統最大的優勢在於圖形介面,使得普通使用者操作起來非常便利。相比大部分 Linu__ 系 統,windows的常用軟體安裝和系統設定不需要以命令列的方式去輸入系統指令,只需要點選“按 鈕”即可完成。如今,絕大多數常見軟體、專用軟體和底層硬體都支援 Windows作業系統,形成 了 Window 強大的生態整體。

2.開源作業系統:程式碼免費開放,以

Linu__ 作業系統為代表

Linu__ kernel(核心)由 Linus Torvalds 在 1991 年釋出,程式碼免費公開,由全球開發者共同貢獻,已成為影響最廣泛的開源軟體專案。以 Linu__ 核心為基礎,不同的開發團體(開源社群、企業、個 人等)對核心程式碼進行一定的修改和補充,加入GUI(圖形介面)、應用等部分,形成了相應的 Linu__ 作業系統發行版。

Linu__ 系統版本之間存在衍生關係,由此形成 RedHat、Slackware、Debian 等幾大家族,各家族 內部又衍生出一些著名版本,如Ubuntu、SUSE、CentOS、Red Hat Enterprise Linu__、Fedora 等。

Linu__ kernel 是開源專案,由全球範圍的開發者(企業、團體、獨立開發者)共同貢獻原始碼。Linu__ 的官方組織是 Linu__基金會,作為非盈利的聯盟,協調和推動 Linu__ 系統的發展,以及宣傳、保護 和規範 Linu__。Linu__ 基金會由開原始碼發展實驗室(Open SourceDevelopment Labs,OSDL)與自 由標準組織(Free Standards Group ,FSG) 於 2007 年聯合成立。

開源社群是 Linu__ 系統的創新源泉和主要的開發場所。Linu__ 作業系統發行版分為社群版本和商業版本。社群版本數量較多,其開發和維護的主體是開源社群。少數的商業版本(比如紅帽企業版)則是在社群版本的基礎上,進一步優化而來。整體來看,無論是否涉及商業活動,開源社群是 Linu__發行版的創新來源和主要的開發場所。而成熟的開源社群通常由相應的開源基金會(或者專案委員會)進行管理。開源基金會為開發社群制定了規則,進行資源管理,負責可能的商務對接,以及保護社群的健康運轉。社群的開源基金會(委員會)一般由開源貢獻方進行贊助和決策支援。

許多開源社群背後都有一個主導企業,為社群提供資金和研究支撐,甚至直接委派員工參與開源 專案。例如,Fedora 社群的核心開發者中 1/3是紅帽的正式僱員。通過資助和維護開源社群的方 式,企業可以發揮研究力量的“槓桿”作用,通過向社群輸入自有的研究資源,吸引更多的外部貢獻者參與進來,擴大創意來源;另一方面,開源社群版本也成為企業擴大技術影響力的重要途徑。

Linu__ 作業系統由 4 部分組成:kernel、shell、檔案系統、應用程式。Kernel(核心)是作業系統的 核心,不同於 windows的核心,Linu__ 的核心不僅實現了程序排程、記憶體管理、中斷處理、異常陷 阱處理,而且還實現了程序管理、程序通訊機制、虛擬記憶體管理、檔案系統驅動和USB、網路、聲 音等各類裝置驅動子系統,決定了整個系統的效能和穩定性。而 shell 是系統的使用者介面,提供使用者與核心互動的介面,接收使用者輸入的命令並送入核心去執行。

Linu__ 作業系統主要的優勢領域是伺服器和嵌入式。據 Linu__ 基金會統計,全球 90%的公有云平 臺採用了 Linu__ 系統,99%的超算和62%的嵌入式裝置也都是基於 Linu__。亞馬遜 AWS、微軟 Azure、微軟 Azure、谷歌雲平臺和阿里雲等主流雲服務商,都提供了 Linu__系統方案。全球公有 雲平臺執行的所有應用,超過 54%是執行在 Linu__ 虛擬機器上。甚至微軟 Azure 的近 30%的虛擬機器 也是基於 Linu__。根據IDC 在 2017 年的統計資料,全球伺服器作業系統使用份額(免費+付費)中, 68%是 Linu__ 伺服器作業系統。

Linu__ 作業系統在伺服器領域的普及,主要由於 3 個方面:

1)創新方面,集思廣益。全球開發者對 Linu__ 核心保持了持續的更新,提供了充足的創新動力。據 GitStats 分析結果,截至 2018 年 9月,已有超過 19000 名開發者為 Linu__ 核心貢獻了程式碼,這些開發者遍佈全球範圍超過1500個組織/企業。廣泛分佈的開發者,從不同視角不同方面對Linu__ 核心的補充,使得 Linu__系統得以快速適應伺服器領域的變化。

2)系統程式碼可以修改和自定義,使用者可呼叫計算機資源的自由度極高。Linu__ 作業系統的使用者可以輕鬆檢視系統程式碼,可以自由修改程式碼來修補常見的問題,也可以開發自己的程式並新增入 Linu__ 作業系統中。相比 Windows 等閉源系統,Linu__支援了使用者對於計算機資源極大的使用自 由度,支援專業使用者去構建和自定義伺服器,由此獲得了網際網路公司、雲端計算公司的青睞。

3)執行效率高,運維成本低。Linu__ 系統在伺服器上面的執行效率較高,相對比較輕量化,除非硬 件資源分配出現問題,不易出現系統卡死狀況。而且Linu__ 系統天然地支援虛擬化。因此,在服務 器叢集上,Linu__ 系統的運維成本較低。

4)安全。Linu__ 從發展根源上就是針對多使用者系統設計的,系統管理員和 root 使用者具有系統管理 許可權。Linu__面向全球開發者開源,系統檔案都是文件,在全球開發者多次的篩查和更新中,基本 排除了“後門植入”的可能。實際應用中,普通不成熟的 Linu__作業系統確實可能存在安全問題, 也是和系統的文件屬性有關。例如,使用者 root 許可權和 sudo 指令可在有意或無意間修改 Linu__ 系統文件,可能會對其他使用者或整個系統造成不利影響。因此,成熟的 Linu__ 作業系統解決方案,有必要對這類屬性進行設計方面的防範,去進行適當的許可權遮蔽。而這些安全屬性的設計,本質上並 不存在難以解決的障礙。

電腦作業系統維護10條基礎知識!

1、經常進行“磁碟清理”和磁碟碎片整理”

當硬碟用久了,無數次的新增、更改和刪除程式和檔案後,就會造成很多斷斷續續的扇區,非連續性的檔案便會愈來愈多,硬碟磁頭便需要花更多時間跳來跳去來讀取資料,這就導致硬碟速度減慢。

因此,我們應該定期進行“磁碟清理”和磁碟碎片整理”,將所有非連續性的檔案重新編排整齊。

處理方法:點開始-程式-附件-系統工具-磁碟清理程式和磁碟碎片整理程式。有可能整理過程很慢,那是你長時間沒有清理或者有隻讀檔案,請多執行幾次,耐心等待。碎片清理時要退出所有的應用程式。

2、移動internet臨時檔案和臨時交換檔案

internet臨時檔案和臨時交換檔案是我們上網時產生的臨時檔案,是產生磁碟碎片的罪魁禍首,叫它離開系統盤是最好的辦法處理方法:

⑴在桌面上右鍵點internete__plorer圖示,再點出來的“屬性”,出屬性對話方塊,在internet臨時檔案後面點“設定”,在出來的設定對話方塊中點移動資料夾,再選擇除系統盤以外的硬碟(如D盤);

⑵、開始-設定-控制面板-雙擊系統,在“效能”項上點“設定”,在“效能選項”上點“高階”,在“虛擬記憶體”選項點“更改”,選擇除系統盤外的硬碟如d,最後確定。關機重啟,ok。

3、開啟wondows

__p保留的20%頻寬

wondows__p預設保留了20%的頻寬,我們可以將它開啟,充分利用頻寬。處理方法:點開始-執行,輸入,開啟組策略-計算機配置—管理模板—網路—Qos資料包排程程式,右擊視窗右邊的“限制可保留頻寬”選項,單擊“屬性”命令,在彈出的“限制可保留頻寬屬性”對話方塊中的“設定”選項卡中,勾選“已啟用”單選框,將下面的“頻寬限制”數值調到“0”。點確定,ok。

4、刪除不必要的系統聲音

系統聲音是計算機事件的一組聲音方案,實際一點用處沒有,還佔用一部分系統記憶體,幹掉它是明智的選擇。

處理方法:右鍵點通知欄裡的小喇叭,點調整音訊屬性,在屬性框中點聲音,點方案後面的“刪除”,再確定,ok。

5、定期清理internet預讀檔案

在聊天室碰到好多次有些朋友突然打不開我們聊天室的網頁了,而其他的網站可以。問題是出現了死連線,實際__P使用一段時間後,預讀資料夾裡的檔案會變得很大,裡面會有死鏈檔案,這會減慢系統時間。建議:定期刪除。

處理方法:在桌面上右鍵點internete__plorer圖示,再點“屬性”,出屬性對話方塊,在internet臨時檔案後面點“刪除cookies”、“刪除檔案”。

提醒:刪除檔案時請選擇“刪除所有離線檔案”。

6、關於internet

e__plorer

IE並不是最佳的瀏覽器,其缺點之一是佔用太多的系統資源,第一次開啟IE,佔用7%左右的資源,以後每開啟一個IE視窗,佔用4%左右的資源。現在上網,網頁自身自動開啟的彈出式視窗就多,快速消耗你的記憶體是很自然的事情,CUP使用率常在100%也不奇怪。

7、優化硬碟引數

右擊“我的電腦”,選“屬性”,選中“硬體”下的“裝置管理器”標籤,然後在“磁碟驅動器”中找到你的硬碟,檢視它的屬性,在“磁碟屬性”標籤中選中“啟用了寫入快取”;在“IDE控制器”中分別檢視“PrimaryIDE Channel”和“Secondary IDEChannel”的屬性,在“高階設定”中將“裝置型別”設定為“自動檢測”,“傳輸模式”設定為“DMA(若可用)”。

8、讓系統自動釋放系統資源

在Windows中每執行一個程式,系統資源就會減少。即使把程式關閉,在記憶體中還有一些沒用的檔案在執行,這樣就使得系統的執行速度下降。可以通過修改登錄檔,令程式關閉後自動清除沒有用的DLL檔案,收回系統資源。

處理方法:執行regedit開啟登錄檔編輯器,找到並選中HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrenVersione__plorer主鍵,在右邊窗格單擊右鍵,新建一個字串值,名為AlwaysUnloadDll,然後將AlwaysUnloadDll的鍵值改為1,退出登錄檔,重啟計算機。

9、固定自己的DNS和IP

一般__P/2000是自動檢測IP和DNS地址的,但我們可以自己設定好,以提高系統效率,前提是你要與服務商聯絡,獲取你的DNS和IP地址。處理方法:點開始-設定-控制面板-雙擊網路連線,點方框中TCP/IP,點屬性,點IP地址,選擇“指定IP地址”,填入你從服務商那裡得到的IP地址和子關掩碼;點DNS配置,選擇“啟用DNS",填入你得到的伺服器地址,新增。

10、關於ADSL貓的使用注意事項

因為貓對電源的要求實際很高,只是我們不太注意,貓的電源應該儘量採用獨立的電源線,中間要注意避開大功率的用電裝置,防止其他用電裝置對它的干擾,採取一定的遮蔽接地措施是明智的。

另外注意選擇品牌大的貓並注意與服務商提供服務的相容性,如果ISP的局端裝置有了改動,這時我們可能會經常掉線,這時建議下載Firmware版本重新整理程式對“大貓”重新整理,一般可以完全解決。再者使貓保持良好的散熱效果,最好將貓的下面墊空。

作業系統基礎-CPU虛擬化

作業系統的三個要素

作業系統的定位是計算機資源(CPU,記憶體,硬碟,各種I/O裝置等)的管理者。最早的計算機系統一次只執行一個程式,作業系統是作為庫函式的形式存在的,這種模式無法充分的利用計算機資源,對於早期造價動輒數百萬美元的計算機來說,這是巨大的浪費,因此人們引入了現代的作業系統來支援方便的多程序併發執行,允許多個使用者同時執行他們的程式。具體來說,作業系統提供了這麼三個要素:

虛擬化(Virtualization),主要指的是CPU和記憶體虛擬化,彷彿每個程序都有自己獨佔的CPU和記憶體。

併發(Concurrency),主要指的是執行緒級的併發。

持久化(Persistance),主要指的是檔案系統。

儲存器層次結構

為什麼說單個程式不能充分利用計算機資源呢?這跟計算機的儲存器層次結構有關,計算機中有各種各樣的儲存器:CPU上的暫存器、一二級快取,記憶體、硬碟……這些儲存器的容量、效能和成本各不相同,一個典型的儲存器層次結構如下:

越是靠近上層(CPU)儲存器的效能越好,但是容量越小,(每位元組)儲存成本越高;越是遠離CPU,儲存器的效能越差,但是容量越大,(每位元組)儲存成本越低。比如,CPU訪問一級快取快取只需要1個時鐘週期,而進行磁碟I/O可能需要上千萬個時鐘週期。程式在進行I/O操作的時候,CPU實際是空閒的,這時候可以讓CPU執行其他程式,提供計算機資源的利用率。

另一方面,為了彌補高速CPU到低速I/O裝置之間的差距,在儲存器之間引入了多層的快取,比如本地硬碟作為網路的快取,記憶體(DRAM)作為硬碟的快取,SRAM作為記憶體的快取。由於區域性性原理的存在,這個儲存器層次結構通常工作得很好。所謂得區域性性原理包含兩項:

一是時間區域性性,程式一旦引用過某個儲存器位置,接下來它很可能還會引用這個位置;

二是空間區域性性,程式一旦引用過某個儲存器位置,接下來它很可能還會引用附近的位置。

程序

作業系統提供了程序這個抽象概念,一個程序就是一個正在執行的程式。根據Steam2020年5月的調查,現在主流的PC配置是64位的4核物理CPU和16G記憶體[1],而目前__86_64的PC上通常會執行幾十上百個程序,每個程序擁有256TB的的虛擬記憶體。正是通過CPU和記憶體虛擬化,作業系統提供了這種幻象:似乎每一個程序都有一個獨佔的CPU和一片巨大的獨佔記憶體。

在深入這些細節以前,我們先來看看計算機上執行一個程序需要維護些什麼狀態資訊:

用來存取指令和資料的記憶體,由於程序會根據地址來讀寫記憶體,它們也叫做記憶體地址空間,當然這裡指的虛擬記憶體地址空間(Virtual MemoryAddress Space)。程序的堆疊資訊也在這個地址空間中。

CPU中的通用暫存器,如%ra__

CPU中的特殊暫存器,如:

程式計數器(Program Counter/PC),或叫做指令指標(Instruction Pointer/IP)

棧指標(stack pointer)及其對應的基址指標(frame pointer)

I/O相關的資訊,比如當前開啟的檔案,Socket套接字等。

作業系統通過分時複用的方式實現了CPU的虛擬化,執行程序A一段時間後,主動或被動地把這個程序的狀態資訊寫入實體記憶體然後從實體記憶體中讀取另一個程序B的狀態資訊,從而恢復程序B的執行。

程序在其生命週期中,始終處於以下三個狀態中的一個:

Running:程序正在通過CPU執行指令

Ready:程序可以執行,但是作業系統還沒有排程它

Blocked:程序在等待某個事件發生(比如等待磁碟讀取完成),因此還不能執行

這是一個理想化的狀態,Linu__中程序還有一些別的狀態

核心中有一個資料結構叫做Process Control Block(PCB),用來記錄上面提到的各種資訊,每個程序都有一個對應的PCB。

CPU虛擬化

下面來考慮實現CPU虛擬化要解決的兩個核心問題:

安全:使用者的程序不應該擁有無限制的許可權,比如它不應該能訪問另一個使用者的檔案,而許可權檢查的把關就需要由作業系統來實現。

效能:作業系統提供CPU虛擬化這種抽象機制的時候,不應該有太大的效能損失

計算機系統採用了一種叫Limited DirectE__ecution的機制,通過硬體和作業系統的協作解決了這兩個問題。在具體實現上,CPU中有一個狀態位,表明了當前執行在什麼模式下:

使用者的程序執行在使用者模式下,這種模式能做的操作有限,比如它無法發起一個I/O請求,嘗試這麼做會引發一個異常(e__ception),導致程序被作業系統殺死。

與之相對的是,核心程式碼執行在核心模式下,它能執行所有特權操作,比如發起I/O請求。

如果使用者程序需要發起特權操作,必須通過作業系統核心來進行,作業系統提供了很多這樣的服務入口,這就是系統呼叫,比如說開啟一個檔案用到的open()系統呼叫。這些系統呼叫看起來像是一個普通的函式,而內部實現上只是把系統呼叫的編號,和對應的引數放到棧上某個特定的位置,然後呼叫trap指令,這個指令會完成以下幾個操作:

把當前程序的CPU暫存器的值儲存到核心棧中

把執行模式切換為核心模式

跳轉到該系統呼叫的處理函式

核心檢查引數和許可權和合法性,然後執行相應的處理,無論結果如何,最終呼叫return-from-trap指令返回使用者程序,具體過程如下:

從核心棧中還原該程序的CPU暫存器值

把執行模式切換為使用者模式

把程式計數器(PC)設定為程序的下一條指令,從而恢復使用者程序的執行。

可以看到,使用者程序直接執行在CPU上, 因此保證了效能,而通過核心模式和使用者模式的區分保證了安全,這裡主要的損耗在於上下文切換帶來的開銷。

核心呼叫return-from-trap之前還會檢查程序是否有待處理的訊號,如果有的話在這裡觸發訊號處理函式。

搶佔式排程

Limited Direct E__ecution存在一個問題,一個程序可能會長久地佔用CPU,導致其他程序無法得到服務,那麼這個程序什麼時候把控制權還給作業系統,讓作業系統排程其他程序呢?很自然地,一個合理的時間點是觸發系統呼叫的時候,作業系統可能會決定先執行另一個程序。但如果是一個無限迴圈,中間沒有任何系統呼叫呢?一些早期的系統如MacOS採用了合作式的排程方案,長期執行的程序需要週期性地讓出CPU,比如在迴圈體中加入一個yield()之類的系統呼叫,允許作業系統排程其他程序。這個方案治標不治本,存在這些場景:

某些惡意程式希望獨佔CPU資源,不按照要求來做

程式bug導致yield()一直沒有執行

這種情況下,唯一能打破這種迴圈的方法只有重啟。要解決這個問題,作業系統仍然需要硬體的協助。硬體中有個計時器可以程式設計為每隔一定的時間(比如每十毫秒)就發起一個時鐘中斷,它會掛起當前執行的程序,跳轉到作業系統預先設定的中斷處理函式中。在這裡,作業系統可以決定是繼續執行這個程序,或是排程別的程序。這就是搶佔式排程。

異常處理流

程式執行的過程中會遇到各種各樣的異常情況,在計算機啟動的時候,作業系統就需要為各種異常指定對應的處理函式。CPU在執行完一條指令之後,總是會檢查是否存在異常,如果有則觸發對應的異常處理函式,否則繼續執行下一條指令。

注意:

上文中有兩組暫存器的儲存/還原操作,第一組是使用者態的暫存器,第二組是核心態的暫存器

核心處理完系統的呼叫後,也可以選擇不切換程序,直接呼叫return-from-trap返回程序A

程序排程策略

上面描述了程序切換的機制,接下來討論程序排程的策略,也就是說每次作業系統要排程一個程序的時候,選擇執行哪一個程序。通常來說,我們有兩種型別的工作負載:

互動式的程序,這種程序大部分時候都在Blocked的狀態等待I/O,不怎麼佔用CPU,但是需要得到高優先順序的處理,比如shell裡面使用者每輸入一個字元,總是希望作業系統儘快響應並把這個字元顯示到螢幕上。

非互動式的程序,他們大部分時間都在使用CPU執行指令,處於Running的狀態,這種程序的訴求是高吞吐量,儘可能減少程序切換帶來的開銷。

下面來看看兩種常見的排程策略

多級反饋佇列

多級反饋佇列(Multi-Level Feedback Queue)致力於提高系統的整體響應時間。

作業系統中維護多個程序佇列,從高到底依次為每個佇列分配不同的優先順序:高優先順序的程序分配較短的時間片,保證快速響應;低優先順序的程序分配較長的時間片,保證其高吞吐量。具體排程策略如下:

如果A的優先順序大於B,執行A

如果A的優先順序等於B,輪流執行A和B

然而我們不知道每個程序的工作模式是互動式的還是非互動式,因此先假設他們都是需要快速響應的互動式程序:

當程序啟動的時候,把它放到最高優先順序的佇列中

當一個程序用完它的時間片之後,降低它的優先順序,也就是移到下一個佇列中

還存在一個問題,如果有大量高優先順序任務,那麼低優先的任務可能會被餓死,因此:

每隔一段時間把所有的程序都移動到最高優先順序的佇列

按比例共享排程

與MLFQ相對的,按比例共享排程(Proportional ShareScheduling)的目標是讓各個程序公平地獲取CPU時間。它最簡單的形式叫做彩票排程(lotteryscheduling):假設系統使用100張彩票(編號為0-99),每次隨機選擇一張來決定執行哪個程序,程序A持有75張(編號為0-74),程序B持有剩餘的25張(編號75-99)。任務排程器每次計算出一個0-99之間的隨機值,如果落在0-74之間則執行程序A,反之執行程序B,這樣保證了兩個程序總體獲得的CPU時間跟它們持有的票據數量一致(75%:25%)。

最後還有個問題,怎麼為程序分配票據(或者說權重),可以跟nice值關聯起來。

Linu__的程序排程器

Linu__當前採用的程序排程器叫做完全公平排程器(Completely FairScheduler/CFS),內部採用紅黑樹,實現了跟按比例共享排程類似的目標。之前採用的程序排程器為O(1),其實現類似前面說的多級反饋佇列。