cpu快取結構
現代cpu為了提公升執行效率,減少cpu與記憶體的互動(互動影響cpu效率),一般在cpu上集 成了多級快取架構,常見的為**快取結構cpu執行安全等級l1 cache,分為資料快取和指令快取,邏輯核獨佔
l2 cache,物理核獨佔,邏輯核共享
l3 cache,所有物理核共享
儲存器儲存空間大小:記憶體》l3>l2>l1>暫存器;
儲存器速度快慢排序:暫存器》l1>l2>l3>記憶體;
還有一點值得注意的是:快取是由最小的儲存區塊-快取行(cacheline)組成,快取行大小通常為64byte。(這裡的意思是說,每次cpu會從記憶體中讀取64byte到快取中。)
個人總結:cpu的多級快取,對應的順序是 暫存器->l1->l2-l3-記憶體,當cpu讀取比如a=1這個變數時,cup都會依次從暫存器->l1->l2-l3,如果這幾個快取區裡面都沒有,則會從記憶體裡面去讀取(cpu從
記憶體讀取這個過程是比較慢的),這裡值得注意的是,快取是由最小的儲存塊組成(這裡稱為快取行cacheline,乙個快取行的大小是64byte),每次從記憶體讀取的最小單位是乙個快取行,如果a=1
這個變數不夠64byte,則會繼續讀取a=1的相鄰記憶體,直到裝夠64byte。然後從記憶體讀取後,在copy到l3->l2>l1->暫存器。
cpu執行是有四個安全級別,分別是ring0-ring3,而linux和windows中只用到了ring0和ring3,作業系統內部指令一般是ring0級別,作業系統以外的為ring3.如果執行緒要執行作業系統的內部由於cpu許可權不夠,所以要切換到ring0去執行。(所以為什麼jvm建立執行緒是重型操作了,因為中間有乙個cpu狀態切換的過程)作業系統記憶體管理
作業系統有使用者空間與核心空間兩個概念,目的也是為了做到程式執行安全隔離與穩定
linux為核心**和資料結構預留了幾個頁框,這些頁永遠不會被轉出到磁碟上。從
0x00000000 到 0xc0000000(page_offset) 的線性位址可由使用者** 和 核心**進
行引用(
即使用者空間
)。從0xc0000000(page_offset)到 0xfffffffff的線性位址只
能由核心**進行訪問(
即核心空間
)。核心**及其資料結構都必須位於這 1 gb的位址
空間中,但是對於此位址空間而言,更大的消費者是實體地址的虛擬對映。
個人總結:乙個執行緒都有兩個堆疊,乙個在使用者空間,乙個在核心空間。執行緒建立後都是執行在使用者空間的,一旦需要阻塞或者殺死此執行緒,都需要切換到核心空間(這個操作叫狀態的切換)。如果
這個執行緒是阻塞,當阻塞完成後,則會在切換成使用者空間。
多執行緒的作業系統
在支援多執行緒的作業系統中,假設程序p建立了若干個執行緒,那麼 47 是不能被其他執行緒共享的。47 a.該程序的 段 b.該程序中開啟的檔案 c.該程序的全域性變數 d.該程序中線程的棧指標 答案 d 解析 同一程序間的執行緒共享的資源包括 1 堆 由於堆是在程序空間中開闢出來的,所以它是理所當然...
作業系統概述 作業系統的認識
第一代計算機 採用電子管,體積大,耗電多,貴,可靠性差 第二代計算機 採用電晶體,體積,耗電,可靠性方面均大幅改善 第三代計算機 採用積體電路,功能日益完善,硬體資源更加充分利用 計算機 採用超大規模積體電路,運算速度等效能指標更進一步提高,典型案例 超級計算機 現代計算機含有豐富的軟體,硬體資源,...
作業系統 多程序 多執行緒
對比維度 多程序多執行緒 結論資料共享 資料共享複雜,需要用ipc 共享程序資料,資料共享簡單 多程序 多執行緒 資料同步 資料是分開的,同步簡單 因為共享程序資料,同步複雜 多程序 多執行緒 記憶體 cpu 占用記憶體多,切換複雜,cpu利用率低 占用記憶體少,切換簡單,cpu利用率高 多程序 多...