當前位置:文範網 >

實用文 >實用文精選 >

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

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

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

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

操作系統基礎解析: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),其實現類似前面説的多級反饋隊列。

  • 文章版權屬於文章作者所有,轉載請註明 https://wenfanwang.com/shiyongwen/shiyongjingxuan/jl6w5o.html
專題