程式設計師的自我修養(第一章)

2021-06-19 03:14:23 字數 1049 閱讀 1512

記憶體不夠怎麼辦?

首先實現的是分頁機制,即只在物理記憶體中儲存程序常用的資料,而其他的放在硬碟中。

關於隔離:

程序作為普通的執行程式,需要的是簡單的執行環境和單一的位址空間。這裡就出現了虛擬位址空間,然後統一由mmu記憶體管理單元進行統一對映,而這個管理單元是同頁表的方式進行對映的,這個頁表放在物理記憶體中。

關於執行緒:

執行緒間的排程方式主要有優先順序排程和輪轉法。

在具有優先順序排程的時候,每個執行緒都具有優先順序,系統會根據執行緒的表現自動調整優先順序。然而在優先順序排程下,存在一種餓死的情況,就是說某個執行緒的優先順序一直很低,導致不被執行,作業系統處理的方式是只要執行緒等待了足夠長的時間,其優先順序會被自動提高。

linux程序 fork():

fork()會複製當前程序,其速度非常快,並且一般與exec()合用。速度快主要依靠的是寫時複製:

所謂寫時複製:就是說兩個程序可以同時自由的讀取記憶體,但是任意乙個程序試圖讀對記憶體進行修改時,記憶體就會複製乙份提供給修改方單獨使用。注意:只有發生修改的時候,才會寫。這樣就減少了記憶體的壓力。

同步與鎖:

執行緒同步的最好的辦法就是鎖,鎖的種類:

1.二元訊號量:只有兩種狀態:占用和非占用。乙個初始值為n的訊號量允許n個執行緒併發訪問。操作如下:

將訊號量-1

如果訊號量為0,則等待,否則繼續;

訪問之後,釋放;

將訊號量+1;

如果訊號量的值<1,喚醒乙個等待的執行緒。

2.互斥量:資源也只能被乙個執行緒同時訪問。不同的是:二元訊號量可以被這個執行緒訪問,然後被另乙個釋放。而互斥量要求哪個執行緒獲取了互斥量,哪個執行緒就負責釋放這個鎖。

3.臨界區:比互斥量更嚴格。之前的訊號量在系統的任何程序是可見的,也就是說,乙個程序建立了互斥量,另乙個程序是可以獲取該鎖的。而臨界區的方位僅僅限於本程序,其他的程序無法訪問。

4:讀寫鎖:致力於特定場合同步。多執行緒讀的時候,單執行緒偶爾寫的時候。

有兩種鎖的方式:共享和獨佔。

5.條件變數:執行緒可以等待條件變數,乙個條件變數可以被多個執行緒所等待;執行緒也可以被喚醒,此時所有等待的條件變數的執行緒都會被喚醒。

《程式設計師的自我修養》第一章 溫故而知新

早期的計算機cpu和記憶體訪問速度一致,而其他外設訪問速度過慢,因此都需要乙個相應的i o控制器。後來cpu的頻率提高了,cpu改使用倍頻的方式與系統匯流排進行通訊。後來隨著圖形晶元需要跟cpu和記憶體之間大量交換資料,設計了專門的北橋晶元。低速裝置連線南橋晶元,再彙總連線到北橋。硬體介面稱為硬體規...

《程式設計師的自我修養》讀書心得 第一章 談職業生涯

這本書是陳逸鶴老師從乙個成熟的成員 一名it管理者的角度,以雜記的形式寫的關於國內程式設計師職業生涯 個人發展 程式設計中的實踐與認知和設計等方面的經驗方法與思考感悟,對於各個階段的開發人員來說都是由一定的啟發作用。下面是我讀這本書的一些摘要和感悟 正確的認識自己 程式設計師應該是那些不斷追求更高技...

程式設計師的自我修養

一忌 輕易言敗,沒有自信 沒有永不放棄精神的程式設計師,只是乙個有程式設計師名號的假程式設計師。乙個真正的程式設計師,知道在程式設計的過程中,可能會遇到不計其數的困難和問題,可能有極多的挫折和失敗,而成功只有一次。就為解決乙個問題,我們可能連續十幾甚至幾十小時的坐在計算機前不停的工作。乙個問題解決了...