操做系統知識點

 

  • 操做系統是什麼

    • 管理計算機硬件與軟件資源的程序,是計算機系統的內核與基石html

    • 本質上是運行在計算機上的軟件程序java

    • 爲用戶提供一個與系統交互的操做界面算法

    • 分爲內核與外殼,其中內核是能操做硬件的程序,而外殼則是圍繞着內核的應用程序數組

  • 進程調度算法

    • 根據系統資源分配資源所規定的資源分配算法緩存

    • 先來先服務調度算法

      • FCFS調度算法每次從就緒隊列中選擇最早進入該隊列的進程,將處理機分配給它,使之投入運行,直到完成或因某種緣由而阻塞時才釋放處理機。數據結構

      • 不可剝奪算法。對長做業有利,對短做業不利。有利於CPU繁忙型做業,不利於I/O繁忙型做業socket

    • 時間片輪轉調度法

      • 適用於分時系統函數

      • 系統將全部就緒進程按到達時間的前後次序排成一個隊列,進程調度程序老是選擇就緒隊列中第一個進程執行,即先來先服務的原則,但僅能運行一個時間片,如100ms。在使用完一個時間片後,即便進程並未完成其運行,它也必須釋放出(被剝奪)處理機給下一個就緒的進程,而被剝奪的進程返回到就緒隊列的末尾從新排隊,等候再次運行。性能

      • 時間片的大小對系統性能影響很大。若是時間片太短,則處理機在進程間過於頻繁切換,處理機的開銷增大;若過長,則退化爲先來先服務算法this

    • 短進程優先調度算法

      • 從就緒隊列中選擇一個估計運行時間最短的進程,將處理機分配給它,使之當即執行,直到完成或發生某事件而阻塞時,才釋放處理機。

      • 非搶佔策略。可是長做業不利,不能保證緊迫性做業(進程)被及時處理,做業的長短只是被估算出來的。

      • 平均等待時間、平均週轉時間最少

    • 最短剩餘時間優先

      • 增長搶佔機制,進程調度老是選擇預期剩餘時間最短的進程

      • 當一個進程加入到就緒隊列時,他可能比當前運行的進程具備更短的剩餘時間,所以只要新進程就緒,調度程序就能可能搶佔當前正在運行的進程。

    • 高響應比優先調度算法

      • 主要用於做業調度。

      • R=(w+s)/s (R爲響應比,w爲等待處理的時間,s爲預計的服務時間)

      • 當前進程完成或被阻塞時,選擇R值最大的就緒進程,它說明了進程的年齡。當偏向短做業時,長進程因爲得不到服務,等待時間不斷增長,從而增長比值,最終在競爭中贏了短進程。

    • 優先級調度算法

      • 優先級用於描述做業運行的緊迫程度

      • 在進程調度中,優先級調度算法每次從就緒隊列中選擇優先級最高的進程,將處理機分配給它,使之投入運行。

      • 可分爲非剝奪式優先級調度算法&剝奪式優先級調度算法

      • 可分爲靜態優先級(肯定優先級的依據有進程類型、進程對資源的要求、用戶要求。)和動態優先級(肯定依據爲進程佔有CPU時間的長短、就緒進程等待CPU時間的長短。)(根據建立後優先級是否能夠改變)

    • 多級反饋隊列調度算法(公認較好)

      • 沒必要事先知道各進程所須要執行的時間

      • 實現思路:

        • 設置多個就緒隊列,併爲每一個隊列賦予不一樣的優先級

        • 賦予各個隊列中進程執行時間片的大小也各不相同,優先級越高的隊列中,各進程的運行時間片就越小。

        • 每一個隊列都採用先來先服務算法。當一個新進程進入內存後,首先將它放入第1級隊列的末尾,按先來先服務原則排隊等待調度。當輪到該進程執行時,如它能在該時間片內完成,即可準備撤離系統;若是它在一個時間片結束時還沒有完成,調度程序便將該進程轉入第2級隊列的末尾,再一樣地按FCFS 原則等待調度執行……如此下去,當一個長進程從第1級隊列依次降到第 n 級隊列後,在第 n 級隊列中便釆用時間片輪轉的方式運行。

        • 按隊列優先級調度。僅當第1級隊列爲空時,調度程序才調度第2級隊列中的進程運行;若優先級低隊列執行中有優先級高隊列進程執行,應馬上將此進程放入隊列末尾,把處理機分配給新到高優先級進程。

  • 磁盤尋道算法

    • 因爲有時候進程 發送 對磁盤進行讀/寫操做的請求 的速度 比 磁盤響應 的還要快,所以爲每一個磁盤設備創建一個等待隊列

    • 先來先服務FCFS

      • 它根據進程請求訪問磁盤的前後次序進行調度。每一個進程的請求都能依次獲得處理

    • 最短尋道時間優先SSTF

      • 選擇 要求訪問的磁道與當前磁頭所在的磁道距離最近 的進程,使得每次的尋道時間最短,算法有比較好的吞吐量,但不能保證平均尋道時間最短。

      • 缺點在於對用戶的服務請求的響應機會並不均等,所以致使響應時間的變化幅度很大。

    • 掃描算法SCAN/電梯調度算法

      • 除了考慮欲訪問的磁道與當前磁道的距離,更優先考慮的是磁頭的當前移動方向。

      • 當磁頭正在自裏向外移動時,掃描算法所選擇的的下一個訪問對象應是其欲訪問的磁道既在當前磁道以外,又是距離最近的。這樣自裏向外地訪問,直到再無更外的磁道須要訪問纔將磁臂換向,自外向裏移動。

      • 吞吐量較大,平均響應時間較小,但因爲是擺動式的掃描方法,兩側磁道被訪問的頻率仍低於中間磁道。

    • 循環掃描算法CSCAN

      • 若是對磁道的訪問請求是均勻分佈的,當磁頭到達磁盤的一端,並反向運動時落在磁頭以後的訪問請求相對較少。

      • 所以規定磁頭單向移動。如只自裏向外移動,當磁頭移到最外的被訪問磁道時,磁頭當即返回到最裏的欲訪磁道,即將最小磁道號緊接着最大磁道號構成循環,進行掃描。

  • 進程的通訊方式

    • 管道

      • 匿名管道:如netstat -tulnp | grep 8080,其中'|'就是管道的意思,即把前一條命令的輸出做爲後一條命令的輸入(單向,要互相通訊須要建立兩個管道)。

      • 命名管道:如mkfifo test,即建立一個名字爲test的命名管道;echo "this is a pipe" > test,即用一個進程向這個管道里面寫數據;cat < test,另外一個進程把test裏面的內容讀出來,此時前一條命令纔會結束。

      • 管道的通知機制相似於緩存,就像一個進程把數據放在某個緩存區域,而後等着另一個進程去拿,而且是管道是單向傳輸的。

    • 消息隊列

      • 改進管道,把進程的數據放在某個內存以後就立刻讓進程返回,無需等着另外一個進程去讀取。

      • 例如a進程要給b進程發送消息,只須要把消息放在對應的消息隊列裏就好了,b進程須要的時候再去對應的消息隊列裏取出來。同理,b進程要給a進程發送消息也同樣。

      • 缺點在於當a進程發送的數據佔內存大,且兩個進程通訊頻繁時,發送消息(拷貝)這個過程須要花不少時間讀內存。

    • 共享內存

      • 解決拷貝所消耗的時間

      • 讓兩個進程各自拿出一塊虛擬地址空間來(則虛擬地址獨立),而後映射到相同的物理內存中。因爲系統加載一個進程時,分配給進程的內存是虛擬內存空間

      • 缺點在於存在多進程競爭內存

    • 信號量

      • 本質是一個計數器,用來實現進程之間的互斥與同步。

      • 如信號量的初始值是 1,而後 a 進程來訪問內存1的時候,就把信號量的值設爲 0,而後進程b 也要來訪問內存1的時候,看到信號量的值爲 0 就知道已經有進程在訪問內存1了,這個時候進程 b 就會訪問不了內存1。

    • socket

      • 以上都是多個進程在一臺主機之間的通訊,socket實現物理距離很遠的主機上的進程進行通訊。

  • Linux常見目錄結構說明

  • 系統顛簸:頻繁的頁面調度行爲,由於不斷產生缺頁中斷,致使不斷要調入調出頁

    • 選擇合適的頁面調度算法

    • 由於運行的程度太多,形成程序沒法同時將全部頻繁訪問的頁面調入內存,則要下降多道程序的數量

    • 終止該進程或者增長物理內存容量

  • 程序局部性原理

    • 空間上:內存中被訪問的頁的周圍頁也可能被訪問

    • 時間上:最近被訪問的頁在不久的未來也可能被訪問

  • 進程與線程、協程

    協程(Coroutines)是一種比線程更加輕量級的存在,正如一個進程能夠擁有多個線程同樣,一個線程能夠擁有多個協程。

       協程不是被操做系統內核所管理的,而是徹底由程序所控制,也就是在用戶態執行。這樣帶來的好處是性能大幅度的提高,由於不會像線程切換那樣消耗資源。

       進程與線程見:http://www.javashuo.com/article/p-rnypdfez-a.html

  • 棧內存和堆內存

    • 一個java程序運行時,程序通常會在內存中開闢一些空間供運行

    • 棧空間通常線程獨享,存放一些簡單的基本類型byte、short、int、long、float、double、char、boolean),以及方法,對象的地址等

    • 堆空間的內容全局共享,存放大部分的引用類型和數據(堆內存用來存放由new建立的對象和數組)。比棧內存大得多

    • 堆主要用來存放對象,棧主要用來執行程序

    • 堆是應用程序在運行的時候請求操做系統分配給本身內存,因爲從操做系統管理的內存分配,因此在分配和銷燬時都要佔用時間,所以用堆。

    • 棧的優點是存取速度比堆要快,僅次於寄存器,棧數據能夠共享。缺點是存在棧中的數據大小與生存期必須是缺點的,缺乏靈活性。

  • 內存管理

    • 虛擬內存

      • 虛擬內存是計算機系統內存管理的一種技術。它使得應用程序認爲它擁有連續可用的內存(一個連續完整的地址空間),而實際上,它一般是被分隔成多個物理內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在須要時進行數據交換。

      • 使用空分複用技術,進程使用虛擬內存中的地址,由操做系統協助相關硬件,把它「轉換」成真正的物理地址。

      • 結構:

              用戶須要調用函數時,通常都會生成一個稱爲棧幀的結構,從而致使虛擬內存中的棧空間增加。

              用戶須要單獨申請內存空間時,就會從堆空間分配,從而致使虛擬內存中的堆空間增加。

    • 分頁與分段

      • 段是信息的邏輯單位,根據用戶的需求劃分,所以段對用戶是可見的。且段的大小不固定,由所完成的功能決定;向用戶提供二維地址空間;便於存儲保護以及信息的共享

      • 頁則是信息的物理單位,爲了方便管理主存而劃分,對用戶是透明的。所以頁的大小固定,由系統決定;向用戶提供一維地址空間;

    • 分頁系統地址映射

      • 將主存空間和輔存空間分別等分爲大小相等的若干頁,而且爲每一個頁按順序指定一個頁號。

      • 當程序運行時,以「頁」爲單位進行地址映射,即操做系統以頁爲單位把邏輯頁從輔存調入主存,存放在物理頁面上,供CPU執行。在分頁存儲管理機制中,把邏輯頁對應的邏輯地址稱爲線性地址。

      • CPU訪問某頁時,首先要查找頁表,判斷要訪問的頁是否在主存,若在主存則命中,不然未命中。而後將未命中的頁按某種調度算法由輔存調入主存,並根據邏輯頁號和存放的物理頁面號的對應關係,將線性地址轉換爲物理地址。

      • 物理地址=頁的大小*頁面號+頁內地址

    • 內存置換算法

      • 最佳置換算法OPT(理論算法)

        • 將再也不使用的頁面換出,而實際中不能預知哪一個頁面再也不使用,可是這個算法是最優算法,能夠做爲評測其餘算法的性能。

      • FIFO

        • 按照頁面裝進內存的時間進行置換,越老的頁面最早被換出,無論該頁面是否常用,這樣就有可能致使缺頁率增長,致使頁面置換次數增長。

      • 最少使用頁面置換算法

        • 按照上次使用時間進行排序,將離上次使用時間最長的頁面換出,能夠採用棧的數據結構,每次頁面被訪問將該頁面號放在棧頂。

      • 最近未使用頁面置換算法

        • 設置引用位R,每次調用將R=1,系統每隔一段時間將R=0,當進行置換式檢查哪一個頁面R=0說明近期不會再使用,能夠將其換出。

      • 時鐘頁面置換算法

        • 設置引用位R,R=1表示被引用過。根據裝入內存時間和是否被引用過做爲標準,首先從時間最長項檢查,若R=0則置換出,若爲1則檢查下一項並將R=0。若所有R=1,則按照FIFO方法進行置換。

相關文章
相關標籤/搜索