計算機操作系統核心知識點總結&面試筆試要點

操作系統之基礎篇

一、 操作系統概述

1. 操作系統的演進
  無操作系統:人工操作,用戶獨佔,CPU等待人工操作,資源利用率很低。
  批處理系統:批量輸入任務,無需等待人工操作,資源利用率提升,提出多道程序設計。
  分時系統:人-機交互,多用戶共享,資源利用率提升,及時調試程序。
  關於多道程序設計:是指在計算機內存中同時存放多個程序,多道程序在計算機的管理程序之下相互穿插運行。
2. 操作系統的定義與目標
  定義:管理硬件,提供用戶交互的軟件系統。
  目標:方便性,有效性(提高系統資源的利用率、提高系統的吞吐量),可擴充性,開放性。
3. 操作系統的基本功能
   統一管理計算機資源:處理器資源,IO設備資源,存儲器資源,文件資源…
  實現了對計算機資源的抽象:IO設備管理軟件提供讀寫接口,文件管理軟件提供操作文件接口…
  提供了用戶與計算機之間的接口:圖像窗口形式,命令形式,系統調用形式…
(6-2-1154)
 4. 操作系統的基本特性
  a.併發性
   並行:指兩個或多個事件可以在
同一個時刻
發生;
   併發:指兩個或多個事件可以在同一個時間間隔發生。
(6-2-1619)
  b.共享性:操作系統的中資源可供多個併發的程序共同使用,這種形式稱之爲資源共享
   互斥共享:當資源被程序佔用時,其它想使用的程序只能等待。
   同時訪問:某種資源併發的被多個程序訪問。
   c.虛擬性:表現爲把一個物理實體轉變爲若干個邏輯實體
   時分複用技術:資源在時間上進行復用,不同程序併發使用,多道程序分時使用計算機的硬件資源,提高資源的利用率。
   空分複用技術:用來實現虛擬磁盤(物理磁盤虛擬爲邏輯磁盤,電腦上的C盤、D盤等)、虛擬內存(在邏輯上擴大程序的存儲容量)等,提高資源的利用率,提高編程效率。
  d.異步性:在多道程序環境下,允許多個進程併發執行,但由於資源等因素的限制,使進程的執行以“停停走走”的方式運行,而且每個進程執行的情況(運行、暫停、速度、完成)也是未知的。
二、進程管理
1. 進程實體
  a.爲什麼需要進程
   ·進程是系統進行資源分配和調度的基本單位;
   ·進程作爲程序獨立運行的載體保障程序正常執行;
   ·進程的存在使得操作系統資源的利用率大幅提升。
  b.進程控制塊(PCB):用於描述和控制進程運行的通用數據結構,記錄進程當前狀態和控制進程運行的全部信息。
  c.進程(Process)與線程(Thread):
   線程:操作系統進行運行調度的最小單位。
   進程:系統進行資源分配和調度的基本單位。
   區別與聯繫:一個進程可以有一個或多個線程;線程包含在進程之中,是進程中實際運行工作的單位;進程的線程共享進程資源;一個進程可以併發多個線程,每個線程執行不同的任務。
(6-3-1300)
2. 進程的五狀態模型
  就緒狀態:其它資源(進程控制塊、內存、棧空間、堆空間等)都準備好、只差CPU的狀態。
  執行狀態:進程獲得CPU,其程序正在執行。
  阻塞狀態:進程因某種原因放棄CPU的狀態。
  創建狀態:創建進程時擁有PCB但其它資源尚未就緒。
  終止狀態:進程結束由系統清理或者歸還PCB的狀態。
(6-4-0839)
3.進程同步
  a.生產者-消費者問題:有一羣生產者進程在生產產品,並將這些產品提供給消費者進程進行消費,生產者進程和消費者進程可以併發執行,在兩者之間設置了一個具有n個緩衝區的緩衝池,生產者進程需要將所生產的產品放到緩衝區中(+1操作),消費者進程可以從緩衝區取走產品消費(-1操作)。
(6-5-0207)
   產生問題:當兩者併發執行時可能出差錯,如下圖:
(6-5-0627)
   當執行生產者+1和消費者-1操作之後,緩衝區的值從10變爲了11
   程序實例–>https://blog.csdn.net/huanglei305/article/details/99621301
  b.哲學家進餐問題:有5個哲學家,他們的生活方式是交替的思考和進餐,哲學家們共同使用一張圓桌,分別坐在5張椅子上,圓桌上有5只碗和5只筷子。平時哲學家們只進行思考,飢餓時則試圖取靠近他們的左右兩隻筷子,只有兩隻筷子都被拿到的時候才能進餐,否則等待,進餐完畢後,放下左右筷子進行思考。
(6-5-1110)
   產生問題:(6-5-1238)
  c.進程同步的作用對競爭資源在多進程間進行使用次序的協調,使得併發執行的多個進程之間可以有效使用資源和相互合作。
  d.進程間同步的四原則
   空閒讓進:資源無佔用,允許使用;
   忙則等待:資源被佔用,請求進程等待;
   有限等待:保證有限等待時間能夠使用資源;
   讓權等待:等待時,進程需要讓出CPU。
  e.進程同步的方法(重要,後面詳細講解):消息隊列,共享存儲,信號量
  f.線程同步的方法(重要,後面詳細講解):互斥量,讀寫鎖,自旋鎖,條件變量
4. Linux的進程管理
  a.進程的類型
   前臺進程:具有終端,可以和用戶交互;
   後臺進程:基本不和用戶交互,優先級比前臺進程低;
   守護進程:特殊的後臺進程,在系統引導時啓動,一直運行直到系統關閉,如crond、sshd、httpd、mysqld…
  b.進程的標記
   進程ID:非負整數,進程的唯一標記,每個進程擁有不同的ID;
   進程的狀態標記:R表示進程處於運行狀態,S表示進程處於睡眠狀態…
  c.操作Linux進程的相關命令
   ps命令:列出當前的進程,結合-aux可以打印進程的詳細信息(ps -aux);
   top命令:查看所有進程的狀態;
   kill命令:給進程發送信號。
三、作業管理
1.進程調度
  定義:指計算機通過決策決定哪個就緒進程可以獲得CPU使用權
  方法:
   非搶佔式調度:處理器一旦分配給某個進程,就讓該進程一直使用下去,直到進程完成工作或IO阻塞纔會讓出處理器。
   搶佔式調度:允許調度程序以一定的策略暫停當前運行地進程
(6-7-0636)
  步驟:
   保留舊進程的運行信息,請出舊進程(收拾包袱);
   選擇新進程,準備運行環境並分配CPU。
  a.三個重要的機制:
   就緒隊列的排隊機制:爲了提高進程調度的效率,將就緒進程按照一定的方式排成隊列,以便調度程序可以最快找到就緒進程。
   選擇運行進程的委派機制:調度程序以一定的策略,選擇就緒進程,將CPU資源分配給它。
   新老進程的上下文切換機制:保存當前進程的上下文信息,裝入被委派執行進程的運行上下文。
  b.進程調度算法
   先來先服務算法:按照在就緒隊列中的先後順序執行。
   短進程優先調度算法:優先選擇就緒隊列中估計運行時間最短的進程,不利於長作業進程的執行
   高優先權優先調度算法:進程附帶優先權,優先選擇權重高的進程,可以使得緊迫的任務優先處理
   時間片輪轉調度算法:按照FIFO的原則排列就緒進程,每次從隊列頭部取出待執行進程,分配一個時間片執行,是相對公平的調度算法,但是不能保證就是響應用戶
2.死鎖:是指兩個或兩個以上的進程在執行過程中,由於競爭資源或者由於彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。 此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱爲死鎖進程。
  a.死鎖的產生:競爭資源(共享資源數量不滿足各進程需求)、進程調度順序不當,如下圖,當調度順序爲A->B->C->D時會產生死鎖,但改爲A->D->B->C則不會產生。
(6-8-0519)
  b.死鎖的四個必要條件:
   互斥條件:進程對資源的使用是排他性使用,某資源只能由一個進程使用,其它進程需要使用只能等待。
   請求保持條件:進程至少保持一個資源,又提出新的資源請求,新資源被佔用,請求被阻塞,被阻塞的進程不釋放自己保持的資源。
   不可剝奪條件:進程獲得的資源在未完成使用前不能被剝奪(包括OS),只能由進程自身釋放。
   環路等待條件:發生死鎖時,必然存在進程-資源環形鏈.
  c.死鎖的處理
   預防死鎖的方法:破壞四個必要條件的中一個或多個。
    破壞請求保持條件:系統規定進程運行之前,一次性申請所有需要的資源。
    破壞不可剝奪條件:當一個進程請求新的資源得不到滿足時,必須釋放佔有的資源。
    破壞環路等待條件:可用資源線性排序,申請必須按照需要遞增申請。
  銀行家算法:客戶申請的貸款是有限的,每次申請需要申明最大資金量,銀行家在能夠滿足貸款時,都應該給用戶貸款,客戶在使用貸款後,能夠及時歸還貸款。
  具體請移步–>https://blog.csdn.net/huanglei305/article/details/99637605
四、存儲管理
1.內存分配與回收
  內存分配的過程:單一連續分配、固定分區分配、動態分區分配(根據實際需要,動態的分配內存)。
  動態分區分配算法:
   首次適應算法:分配內存時,從開始順序查找適合內存區,若無合適內存區,則分配失敗。
   最佳適應算法:要求空閒區鏈表按照容量大小排序,遍歷以找到最佳適合的空閒區。
   快速適應算法:要求有多個空閒區鏈表,每個空閒區鏈表存儲一種容量的空閒區。
  內存回收的過程:

2.段頁式存儲管理
  頁式存儲管理:將進程邏輯空間等分成若干大小的頁面,相應的把物理內存空間分成與頁面大小的物理塊,以頁面爲單位把進程空間裝進物理內存中分散的物理塊。
  段式存儲管理:將進程邏輯空間分成若干段(不等分),段的長度由連續邏輯的長度決定。
  兩者相比:(6-10-1022)
  段頁式存儲管理:現將邏輯空間按照段式管理分成若干段,再將內存空間按照頁式管理分成若干頁,分頁可以有效提高內存利用率分段可以更好的滿足用戶需求
  三者分配內存之後的對比:
在這裏插入圖片描述
3.虛擬內存
  概述:實際是對物理內存的擴充,速度接近於內存,成本接近於輔存。
  局部性原理:指CPU訪問存儲器時,無論是存取指令還是存取數據,所訪問的存儲單元都趨於聚集在一個較小的連續區域中
  虛擬內存的置換算法:先進先出(FIFO)、最不經常使用(LFU)、最近最少使用(LRU)
4.Linux的存儲管理
  Buddy內存管理算法:爲解決內存外碎片的問題,算法基於計算機處理二進制的優勢具有極高的效率。
  Linux交換空間:交換空間(Swap)是磁盤的一個分區,Linux內存滿時,會把一些內存交換至Swap空間,Swap空間是初始化系統時配置的。
  Swap空間與虛擬內存的對比:(6-12-1533)
五、文件管理
1.文件管理概述
  a.文件的邏輯結構:
   邏輯結構的文件類型:有結構文件(文本文件,文檔,媒體文件)、無結構文件(二進制文件、鏈接庫)。
   順序文件:按順序放在存儲介質中的文件,在邏輯文件當中存儲效率最高,但不適合存儲可變長文件。
   索引文件:爲解決可變長文件存儲而發明,需要配合索引表存儲。
  b.輔存的存儲空間分配:
   輔存的分配方式:連續分配(讀取文件容易,速度快)、鏈接分配(隱式鏈接和顯式鏈接)、索引分配
   輔存的存儲空間管理:
  c.目錄管理:
   目錄樹:使得任何文件或目錄都有唯一的路徑。
2.Linux文件的基本操作
  a.Linux目錄:Linux一切皆文件。
(6-14-0415)
(6-14-0504)
  b.Linux文件常用操作:
   (目錄/文件)創建、刪除、讀取、寫入
  c.Linux文件類型:
在這裏插入圖片描述
3.Linux的文件系統
   文件系統概覽:FAT、NTFS(對FAT進行改進)、EXT2/3/4(擴展文件系統,Linux的文件系統)
   EXt文件系統:(6-15-0455)
六、設備管理
1.廣義的IO設備:
   按照使用特性分類:存儲設備(內存、磁盤、U盤)和交互IO設備(鍵盤、顯示器、鼠標)
   按照信息交換分類:塊設備(磁盤、SD卡)和字符設備(打印機、shell終端)
   按照設備共享屬性分類:獨佔設備,共享設備,虛擬設備
   按照傳輸速率分類:低速設備,高速設備
2.IO設備的緩衝區:減少CPU處理IO請求的頻率,提高CPU與IO設備之間的並行性。
3.SPOOLing技術:虛擬設備技術,利用高速共享設備將低速的獨享設備模擬爲高速的共享設備,邏輯上,系統爲每一個用戶都分配了一臺獨立的高速獨享設備。

操作系統之提升篇(重點)

一、線程同步的方法
1.互斥鎖
  互斥鎖是最簡單的線程同步的方法,也稱爲互斥量,處於兩態之一的變量:解鎖和加鎖,兩個狀態可以保證資源訪問的串行。
(7-2-0103)
  原子性:指一系列操作不可被中斷的特性,要麼全部執行完成,要麼全部沒有執行。
2.自旋鎖
  自旋鎖是一種多線程同步的變量,使用自旋鎖的線程會反覆檢查鎖變量是否可用,自旋鎖不會讓出CPU,是一種忙等待狀態,即死循環等待鎖被釋放
  特點:避免了進程或者線程上下文切換的開銷,但是不適合在單核CPU使用
(7-3-0126)
3.讀寫鎖
  是一種特殊的自旋鎖,允許多個讀操作同時訪問資源以提高讀性能,但是對寫操作是互斥的,即對多讀少寫的操作效率提升很顯著。
(7-4-0355)
4.條件變量
  是一種相對比較複雜的線程同步方法,條件變量允許線程睡眠,直到滿足某種條件,當滿足條件時,可以給該線程信號通知喚醒
  例如,在生產者-消費者問題當中,規定當緩衝區小於等於時,不允許消費者消費,消費者必須等待;緩衝區滿時,不允許生產者往緩衝區生產,生產者必須等待;即當生產者生產一個產品時,喚醒可能等待的消費者,當消費者消費一個產品時,喚醒可能等待的生產者。
5.線程同步方法總結
  4種線程同步方法對比:
在這裏插入圖片描述
二、進程同步
1.使用fork系統調用創建進程
  使用fork系統調用無參數,fork會返回兩次,分別返回子進程id和0,返回子進程id的是父進程,返回0的是子進程。
2.共享內存
  在某種程度上,多進程是共同使用物理內存的,但是由於操作系統的進程管理,進程間的內存空間是獨立的,因此進程默認是不能訪問進程空間之外的內存空間的
  共享存儲允許不相關的進程訪問同一片物理內存,共享內存是兩個進程之間共享和傳遞數據最快的方式,但是共享內存未提供同步機制,所以需要藉助其它機制管理訪問。即共享內存是高性能後臺開發中最常用的進程同步方式。
(7-8-0259)
3.Unix域套接字
  域套接字是一種高級的進程間通信的方法,可以用於同一機器進程間通信。
  套接字(socket):爲網絡通信中使用的術語。
  Unix系統提供的域套接字提供了網絡套接字類似的功能,如Nfinx、uWSGI等。
  服務端和客戶端分別使用Unix域套接字的過程:
(7-9-0247)

操作系統之實踐篇

實現支持異步任務的線程池
關於線程池
 線程池:線程池是存放多個線程的容器,CPU調度線程執行後不會銷燬線程,將線程放回線程池重新利用。
使用線程池的原因:
  1.線程是稀缺資源 ,不應該頻繁創建和銷燬;
  2.架構解耦,業務創建和業務處理解耦,更加優雅;
  3.線程池是使用線程的最佳實踐。
1.實現線程安全的隊列Queue
 隊列:用於存放多個元素,是存放各種元素的“池”。
 實現的基本功能:獲取當前隊列元素數量,往隊列放入元素,往隊列取出元素。
 注意:隊列可能有多個線程同時操作,因此需要保證線程安全,如下兩種情況:
在這裏插入圖片描述
 具體實現:https://blog.csdn.net/huanglei305/article/details/99701518
2.實現基本任務對象Task
 任務處理邏輯:
  實現的基本功能:任務參數,任務唯一標記(UUID),任務具體的執行邏輯
 具體實現:https://blog.csdn.net/huanglei305/article/details/99701991
4.實現任務處理線程ProcessThread
 任務處理線程需要不斷地從任務隊列裏取任務執行,任務處理線程需要有一個標記,標記線程什麼時候應該停止。
 實現的基本功能:基本屬性(任務隊列、標記),線程執行的邏輯(run),線程停止(stop)。
5.實現任務處理線程池Pool
 存放多個任務處理線程,負責多個線程的啓停,管理向線程池的提交任務,下發給線程去執行。
 實現的基本過程:基本屬性,提交任務(put,batch_put),線程啓停(start,join),線程池大小(size)。
 具體實現:https://blog.csdn.net/huanglei305/article/details/99702434
6.實現異步任務處理AsyncTask
 給任務添加一個標記,任務完成後,則標記爲完成;任務完成時可直接獲取任務運行結果;任務未完成時,獲取任務結果,會阻塞獲取線程。
 主要實現的兩個函數:設置運行結果(set_result),獲取運行結果(get_result)
 具體實現:https://blog.csdn.net/huanglei305/article/details/99703371

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章