關于操作系統可能考察的知識點
操作系統基本原理
什么是操作系統?
操作系統是指控制和管理整個計算機系統的硬件和軟件資源,并合理地組織調度計算機的工作和資源的分配,以提供給用戶和它軟件方便的接口和環境,是計算機系統中最基本的系統軟件,總結一下就是:
- 操作系統(Operating System,簡稱 OS)是管理計算機硬件與軟件資源的程序,是計算機系統的內核與基?,是計算機系統資源的總管理者:處理器管理【進程管理】、存儲器管理【內存管理】、文件管理、設備管理【IO管理】
- 操作系統本質上是運?在計算機上的軟件程序 ;
- 操作系統為?戶提供?個與系統交互的操作界? ,向上層提供方便易用的服務
- 操作系統分內核與外殼(我們可以把外殼理解成圍繞著內核的應?程序,?內核就是能操作硬件的程序)
內核負責管理系統的進程、內存、設備驅動程序、?件和?絡系統等等,決定著系統的性能和穩定性。是連接應?程序和硬件的橋梁。 內核就是操作系統背后?盒的核?
操作系統的四大特性
操作系統的四大特性是:并發、共享、虛擬、異步
串行、并發和并行的區別是什么
并發是指兩個或多個事件在同一時間間隔內發生,在多道程序環境下,一段時間內宏觀上有多個程序在同時執行,而在同一時刻,單處理器環境下實際上只有一個程序在執行,故微觀上這些程序還是在分時的交替進行。操作系統的并發是通過分時得以實現的,和串行以及并行的概念區別
- 串行:順序做不同事的能力:先洗衣服,洗完后做飯。弱雞。
- 并發:交替做不同事的能力:一會兒洗衣服,一會兒做飯,交替執行,但快如閃電。洗衣服的是一個(cpu)做飯的是一個(cpu),所以多核的情況下會非常快,在同一個時間段內每個cpu各司其職團戰。并發的實質是一個物理CPU(也可以多個物理CPU) 在若干道程序之間多路復用,并發性是對有限物理資源強制行使多用戶共享以提高效率。
- 并行:同時做不同事的能力:左手洗衣服右手做飯,在同一時刻同時做兩件事。單兵王。并行性指兩個或兩個以上事件或活動在同一時刻發生。在多道程序環境下,并行性使多個程序同一時刻可在不同CPU上同時執行。
核心區別:并發關注的是資源充分利用(也就是不讓cpu閑下來),并行關注的是一個任務被分解給多個執行者同時做,縮短這個任務的完成時間(也就是盡快做完這件事),操作系統的并發性是指計算機系統中同時存在多個運行著的程序,因此它具有處理和調度多個程序同時執行的能力。在操作系統中,引入進程的目的是使程序能并發執行。并行則是同時間同時刻有幾個程序同時運行,有幾核就就幾個程序在并行。單核CPU只能并發多個程序,多核CPU可以并發也可以并行【4核CPU可以并行4個程序,程序大于核心時就需要用到并發性】
什么是用戶態和核心態
根據進程訪問資源的特點,我們可以把進程在系統上的運?分為兩個級別:
- ?戶態(user mode) : ?戶態運?的進程或可以直接讀取?戶程序的數據。
- 核心態(kernel mode):可以簡單的理解核心態運?的進程或程序?乎可以訪問計算機的任何資源,不受限制
用戶態和核心態的調用切換是需要CPU切換的,是會消耗資源的
什么是系統調用,系統調用流程
我們運?的程序基本都是運?在?戶態,如果我們調?操作系統提供的核心態級別的?功能,就需要系統調?了
在我們運?的?戶程序中,凡是與共享資源有關的操作(如?件管理、進程控制、內存管理、文件管理等),都必須通過系統調??式向操作系統提出服務請求,并由操作系統代為完成。這些系統調?按功能?致可分為如下?類:
- 設備管理。完成設備的請求或釋放,以及設備啟動等功能。
- ?件管理。完成?件的讀、寫、創建及刪除等功能。
- 進程控制。完成進程的創建、撤銷、阻塞及喚醒等功能。
- 進程通信。完成進程之間的消息傳遞或信號傳遞等功能。
- 內存管理。完成內存的分配、回收以及獲取作業占?內存區??及地址等功能。
這樣可以保證系統的穩定性和安全性。系統調用有以下流程:
- 執行傳參指令,將系統調用需要參數傳遞,發現特權指令
- 執行陷入指令,引發內中斷,因此轉入內中斷相應處理程序,也就是系統調用入口
- CPU切換到核心態
- 依據參數執行系統調用,執行特權指令,執行完成
- CPU轉回用戶態
系統調用結束,可以看的出,這里用到了內中斷。
操作系統進程管理
進程和線程的區別是什么
進程和線程的主要概念如下:
- 進程,每個進程都有獨立的代碼和數據空間(進程上下文),進程間的切換會有較大的開銷,一個進程包含1–n個線程。進程是操作系統進行資源分配的單位,多進程是指操作系統能同時運行多個任務(程序)。
- 線程,同一類線程共享代碼和數據空間【堆和方法區】,每個線程有獨立的運行棧【本地方法棧、虛擬機棧】和程序計數器(PC),線程切換開銷小。進程中獨立操作的執行單元。多線程是指在同一程序中有多個順序流在并發執行
- 在引入線程的操作系統中,通常都是把進程作為分配資源的基本單位,而把線程作為獨立運行和獨立調度的基本單位。
詳細區別和相同點歸納如下
- 在狀態變化上:線程和進程一樣分為五個階段,創建、就緒、運行、阻塞、終止。
- 地址空間和其它資源:進程間相互獨立,同一進程的各線程間共享,某進程內的線程在其它進程不可見。
- 通信:進程間通信IPC,線程間可以直接讀寫進程數據段(如全局變量)來進行通信——需要進程同步和互斥手段的輔助,以保證數據的一致性。
- 調度和切換:線程上下文切換比進程上下文切換要快得多。
- 在多線程操作系統中,進程不是一個可執行的實體,只是作為分配資源的基本單位,線程作為獨立運行和獨立調度的基本單位
線程和進程最?的不同在于基本上各進程是獨?的,?各線程則不?定,因為同?進程中的線程極有可能會相互影響
進程有哪幾種狀態,狀態如何轉換
進程有五種狀態:創建、就緒、運行、阻塞、終止。
- 創建狀態(new) :進程正在被創建,尚未到就緒狀態。
- 就緒狀態(ready) :進程已處于準備運?狀態,即進程獲得了除了處理器之外的?切所需資源,?旦得到處理器資源(處理器分配的時間?)即可運?。
- 運?狀態(running) :進程正在處理器上上運?(單核 CPU 下任意時刻只有?個進程處于運?狀態)。
- 阻塞狀態(waiting) :?稱為等待狀態,進程正在等待某?事件?暫停運?如等待某資源為可?或等待 IO 操作完成。即使處理器空閑,該進程也不能運?。
- 結束狀態(terminated) :進程正在從系統中消失。可能是進程正常結束或其他原因中斷退出運?
進程間的通信方式
進程間通信的IPC方式分為如下7種:
- 管道/匿名管道(Pipes) :?于具有親緣關系的??進程間或者兄弟進程之間的通信。
- 有名管道(Names Pipes) : 匿名管道由于沒有名字,只能?于親緣關系的進程間通信。為了克服這個缺點,提出了有名管道。有名管道嚴格遵循先進先出FIFO。有名管道以磁盤?件的?式存在,可以實現本機任意兩個進程通信。
- 信號(Signal) :信號是?種?較復雜的通信?式,?于通知接收進程某個事件已經發?
- 消息隊列(Message Queuing) :消息隊列是消息的鏈表,具有特定的格式,存放在內存中并由消息隊列標識符標識。管道和消息隊列的通信數據都是先進先出的原則。與管道(?名管道:只存在于內存中的?件;有名管道:存在于實際的磁盤介質或者?件系統)不同的是消息隊列存放在內核中,只有在內核重啟(即,操作系統重啟)或者顯示地刪除?個消息隊列時,該消息隊列才會被真正的刪除。消息隊列可以實現消息的隨機查詢,消息不?定要以先進先出的次序讀取,也可以按消息的類型讀取.? FIFO 更有優勢。消息隊列克服了信號承載信息量少,管道只能承載?格式字節流以及緩沖區大小受限等缺點
- 信號量(Semaphores) :信號量是?個計數器,?于多進程對共享數據的訪問,信號量的意圖在于進程間同步。這種通信?式主要?于解決與同步相關的問題并避免競爭條件。
- 共享內存(Shared memory) :使得多個進程可以訪問同?塊內存空間,不同進程可以及時看到對?進程中對共享內存中數據的更新。這種?式需要依靠某種同步操作,如互斥鎖和信號量等。可以說這是最有?的進程間通信?式。
- 套接字(Sockets) : 此?法主要?于在客戶端和服務器之間通過?絡進?通信。套接字是?持TCP/IP 的?絡通信的基本操作單元,可以看做是不同主機之間的進程進?雙向通信的端點,簡單的說就是通信的兩?的?種約定,?套接字中的相關函數來完成通信過程
操作系統中進程的調度算法有哪些
為了確定?先執?哪個進程以及最后執?哪個進程以實現最? CPU 利?率,計算機科學家已經定義了?些算法,它們是:
- 先到先服務(FCFS)調度算法 : 從就緒隊列中選擇?個最先進?該隊列的進程為之分配資源,使它?即執?并?直執?到完成或發?某事件?被阻塞放棄占? CPU 時再重新調度。
- 短作業優先(SJF)的調度算法 : 從就緒隊列中選出?個估計運?時間最短的進程為之分配資源,使它?即執?并?直執?到完成或發?某事件?被阻塞放棄占? CPU 時再重新調度。
- 時間?輪轉調度算法 : 時間?輪轉調度是?種最古?,最簡單,最公平且使?最?的算法,?稱 RR(Round robin)調度。每個進程被分配?個時間段,稱作它的時間?,即該進程允許運?的時間。
多級反饋隊列調度算法 :前?介紹的?種進程調度的算法都有?定的局限性。如短進程優先的調度算法,僅照顧了短進程?忽略了?進程 。多級反饋隊列調度算法既能使?優先級的作業得到響應?能使短作業(進程)迅速完成。因?它是?前被公認的?種較好的進程調度算法,UNIX 操作系統采取的便是這種調度算法。
優先級調度 : 為每個流程分配優先級,?先執?具有最?優先級的進程,依此類推。具有相同優先級的進程以 FCFS ?式執?。可以根據內存要求,時間要求或任何其他資源要求來確定優先級。
線程間的同步方式有哪些
線程同步是兩個或多個共享關鍵資源的線程的并發執?。應該同步線程以避免關鍵的資源使?沖突。操作系統?般有下?三種線程同步的?式:
- 互斥量(Mutex):采?互斥對象機制,只有擁有互斥對象的線程才有訪問公共資源的權限。因為互斥對象只有?個,所以可以保證公共資源不會被多個線程同時訪問。?如 Java 中的synchronized 關鍵詞和各種 Lock 都是這種機制。
- 信號量(Semphares) :它允許同?時刻多個線程訪問同?資源,但是需要控制同?時刻訪問此資源的最?線程數量、
- 事件(Event) :Wait/Notify:通過通知操作的?式來保持多線程同步,還可以?便的實現多線程優先級的?較操作
操作系統存儲管理
分?機制和分段機制有哪些共同點和區別呢?
分?機制和分段機制的共同點 :
- 分?機制和分段機制都是為了提?內存利?率,減少內存碎?。
- ?和段都是離散存儲的,所以兩者都是離散分配內存的?式。但是,每個?和段中的內存是連續的。
分?機制和分段機制的區別:
- ?的??是固定的,由操作系統決定;?段的??不固定,取決于我們當前運?的程序。
- 分?僅僅是為了滿?操作系統內存管理的需求,?段是邏輯信息的單位,在程序中可以體現為代碼段,數據段,能夠更好滿??戶的需要。