各自的原理以及存在什麼樣的問題(沒有銀彈)
管道(pipe):管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有血緣關係的程序間使用。程序的血緣關係通常指父子程序關係。(linux的實現之一是|
)
優點:簡單
缺點:步驟:
父程序建立管道,得到兩個檔案描述符,指向管道的兩邊
父程序fork出子程序,子程序也有兩個檔案描述符指向同乙個管道
父子程序通過管道就可以通訊了
命名管道(fifo):有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間通訊。
缺點:可以用於不同計算機之間的通訊。客戶端通過乙個公共的fifo發請求到伺服器,伺服器為每個客戶端建立乙個專用的fifo實現回傳應答。不足就是伺服器要應答許多客戶端,以及處理客戶端崩潰或無應答時伺服器如何處理
訊號(signal):訊號是用於通知接收程序某一事件已經發生,如中斷訊號(sigint
)
訊息佇列(message queue):訊息佇列是由訊息組成的鍊錶,存放在核心中並由訊息佇列識別符號標識。訊息佇列克服了訊號傳遞資訊少,管道只能承載無格式位元組流以及緩衝區大小受限等缺點。訊息佇列與管道通訊相比,其優勢是對每個訊息指定特定的訊息型別,接收的時候不需要按照佇列次序,而是可以根據自定義條件接收特定型別的訊息。
優點:系統呼叫函式來實現訊息傳送和接收之間的同步,無需考慮同步問題
缺點:資訊的複製需要額外消耗cpu的時間
訊號量(semophore):訊號量是乙個計數器,可以用來控制多個程序對共享資源的訪問。它通常作為一種鎖機制,防止某程序正在訪問共享資源時,其他程序也訪問該資源。主要作為程序間以及同一程序內不同執行緒之間的同步手段。
優點:同步程序
缺點:訊號量有限
pv操作:p操作將訊號量減1,v操作將訊號量加1
共享記憶體(shared memory):共享記憶體就是對映一塊能被多個程序所訪問的記憶體,這段共享記憶體由乙個程序建立,但多個程序都可以訪問,共享記憶體是最快的ipc(程序間通訊)方式,它是針對其他程序間的通訊方式執行效率低而專門設計的。它往往與其他通訊機制,如訊號量配合使用,來實現程序間的同步和通訊。
優點:無須複製,資訊量大
缺點:程序需要同步
套接字(socket):套接字是一種通訊機制,憑藉這種機制,客戶/伺服器(即要進行通訊的程序)系統的開發工作既可以在本地單機上進行,也可以跨網路進行。它可以讓不在同一臺計算機但通過網路連線計算機上的程序進行通訊。因此,套接字明確地將客戶端和伺服器區分開來。
優點:傳輸資料時間短,效能高;可以加密
缺點:需對傳輸的資料進行解析
執行緒間通訊(同步)方式
互斥量(mutex):用互斥物件機制,只有擁有互斥物件的執行緒才有訪問公共資源的許可權。因為互斥物件只有乙個,所以可以保證公共資源不會被多個執行緒同時訪問。比如j**a中的synchronized和各種lock都是這種機制。
訊號量(semphares) :它允許同一時刻多個執行緒訪問同一資源,但是需要控制同一時刻訪問此資源的最大執行緒數量
事件(event):wait/notify,通過通知操作的方式來保持多執行緒同步
建立狀態
就緒狀態
執行狀態
阻塞狀態
結束狀態
執行緒的狀態
new:乙個執行緒處於新建狀態
runnable:執行緒在執行或者在等待cpu資源
blocked:同步阻塞,未能獲得鎖(在同步方法或者同步**塊中)
waiting:等待狀態,如wait()、join()、locksupport#park
timed_waiting:超時等待狀態,如sleep、wait(time)、join(time)、locksupport#parknanos/parkutil
terminated :執行結束
程序切換和執行緒切換的區別:程序切換涉及到虛擬位址空間的切換(涉及請求分頁、頁面置換、cpu定址等),而執行緒共享所在程序的虛擬位址空間,執行緒切換不涉及虛擬位址空間的切換。因此程序之間切換的開銷大於執行緒之間切換的開銷。
先來先服務(fcfs)
優缺點:
短作業優先(sjf):平均等待時間最短
缺點:時間片輪轉
每個程序執行完給定的時間片後,被中斷放入到任務佇列某尾
缺點:時間片太小,會頻繁發生中斷、程序上下文切換,增加系統開銷;太大,會退化成fcfs
多級反饋佇列
原理:設定多個優先順序的佇列,每個佇列用的是fcfs+時間片輪轉,時間片隨優先順序的增加而減小,每個作業會先進入優先順序最高的佇列
優先順序排程:按優先順序順序進行排程
使用者態切換為核心態的三種情況
臨界資源是一次只允許乙個程序使用的共享資源。
臨界區是訪問臨界資源的**片段。
做什麼的?負責記憶體的分配與**,以及位址轉換(邏輯位址轉換成相應的實體地址,稱為cpu定址)
連續分配管理
為乙個使用者程式分配乙個連續的記憶體空間,如分塊管理。將記憶體分為幾個固定大小的塊,每個塊中只包含乙個程序。空間浪費大
非連續分配管理
允許程式使用的記憶體分布在不相鄰的記憶體中,如分頁管理、分段管理、段頁式管理。
分頁與分段的共同點和區別
共同點:
區別:虛擬(邏輯)位址空間
是什麼?虛擬位址空間是虛擬位址的集合,假設虛擬位址空間是n位,那麼它有\(2^n\)個虛擬位址
有什麼用?
區域性性原理表現在兩方面:
時間區域性性:如果程式中的某條指令執行,不久以後該指令可能再次執行;如果某資料被訪問過,不久以後該資料可能再次被訪問。產生時間區域性性的典型原因,是由於在程式中存在著大量的迴圈操作。
空間區域性性:如果程式訪問了某個儲存單元,不久之後其附近的儲存單元也將被訪問。這是因為指令通常是順序存放、順序執行的。
應用:
快表(translation lookaside buffer,tlb)
快表是一種訪問速度比記憶體快很多的高速緩衝儲存器,用於加速邏輯位址到實體地址的轉換。因為區域性性原理,一般來說快表的命中率可以達到90%以上。
轉換流程(類似redis快取):
根據邏輯位址中的頁號查快表;
如果該頁在快表中,直接從快表中讀取相應的實體地址;
如果該頁不在快表中,就訪問記憶體中的頁表,再從頁表中得到實體地址,同時將頁表中的該對映表項新增到快表中;
當快表填滿後,按照一定的演算法對舊的頁表項進行替換。
多級頁表
原理:二級頁表可以不存在或者不存在於記憶體
為什麼要用它?避免把全部頁表一直放在記憶體中占用過多空間,特別是那些根本就不需要的頁表。多級頁表屬於時間換空間的典型場景。
什麼是虛擬記憶體?虛擬記憶體是記憶體管理的一種技術
優點:
有哪些技術實現?
若在頁面中發現所要訪問的頁面不在記憶體中,則發生缺頁中斷,需要頁面置換
opt頁面置換演算法(最佳頁面置換演算法):選擇的被淘汰頁面將是以後永不使用的,或者是在最長時間內不再被訪問的頁面,保證獲得最低的缺頁率。
fifo頁面置換演算法
lru(least currently used)頁面置換演算法(最近最少使用演算法)
clock演算法(時鐘置換演算法):
lfu(least frequently used)頁面置換演算法(最少使用演算法):選擇使用頻率最少的頁面淘汰。缺點在於新加入的頁面有更大概率被置換掉
通過設定或檢查存放描述符(fd)來進行下一步操作
缺點:類似於select,不過做了一些改變
訪問時間o(1),核心和使用者空間共享一塊記憶體,執行緒安全
描述符事件有兩種觸發模式:lt(水平觸發)和 et(邊沿觸發)
fcfs
最短尋道演算法
迴圈掃瞄演算法:從裡到外掃瞄完之後,直接返回最裡面繼續從裡到外掃瞄。(因為此時外部的磁軌請求剛被處理完,而另一端的請求比較密集且等待時間較長)
作業系統 知識點整理
首先 cpu 在訪問記憶體的時候都需要通過 mmu 把虛擬位址轉化為實體地址,然後通過匯流排訪問記憶體。mmu 開啟後 cpu 看到的所有位址都是虛擬位址,cpu 把這個虛擬位址發給 mmu 後,mmu 會通過頁表在頁表裡查出這個虛擬位址對應的實體地址是什麼,從而去訪問外面的 ddr 記憶體條 參考...
作業系統的知識點整理
作業系統是管理計算機硬體資源,控制其他程式執行並為使用者提供互動操作介面的 系統軟體 的集合。作業系統是計算機系統的關鍵組成部分,負責管理與配置記憶體 決定 系統資源 供需的優先次序 控制輸入與 輸出裝置 操作網路與管理 檔案系統 等基本任務。作業系統的種類相當多,各種裝置安裝的作業系統可從簡單到複...
面試知識點整理
new操作符都幹了什麼?1.先建立了乙個新的空物件 2.然後讓這個空物件的proto指向函式的原型prototype 3.將物件作為函式的this傳進去,如果return 出來東西是物件的話就直接返回 return 的內容,沒有的話就返回建立的這個物件。標籤有什麼用?解決父子元素margin top...