不是所有的書都需要寫筆記,比如**大全這種就是需要經常讀讀,結合專案自我體驗昇華。但是對於某些涉及大量細節,或者繁雜的邏輯的書,如果只是順序的往下讀,基本上只是過眼即忘,更好的方法是仔細的看一遍,認真的做完習題,然後自己再總結一下脈絡梗概。如果時間比較匆忙,習題沒時間做也最好認真的做筆記,腦子裡面有一條線,方便需要時迅速找到自己需要的內容。
程式被編譯為二進位制程式的過程:預處理器—編譯器—彙編器—鏈結器,這就是所謂的"編譯系統",預處理用於擴充套件巨集和被include的檔案,生成乙個新的c程式,一般以.i作為副檔名;編譯器將文字檔案.i翻譯成.s,後者是乙個組合語言程式;彙編器將.s翻譯成機器語言指令,並把這些指令打包成.o檔案,後者被稱為"可重定位目標程式",它已經是乙個二進位制檔案了;鏈結器負責合併目標檔案,生成最終的"可執行目標檔案"。
程式執行過程:程式最初存放在磁碟上,當通過shell執行程式時,在敲入回車鍵之前,shell將命令逐一讀入register,然後通過匯流排放入主儲存器中,回車鍵敲入後,shell執行一系列指令來載入可執行檔案,將目標檔案的**和資料從磁碟複製到記憶體,當處理器執行程式時,指令又從主存複製到處理器。
cpu快取記憶體是用sram實現的。暫存器,多級快取記憶體和記憶體、磁碟構成了乙個儲存器層次結構,訪問速度從上到下逐漸變慢。程式設計師可以利用這種結構來調整程式的效能。
如果有作業系統,那麼所有應用程式對硬體的操作嘗試都必須通過作業系統。os通過幾個基本的抽象概念來向應用程式提供簡單一致的機制來控制複雜而又通常大相徑庭的低階硬體裝置,並以此防止硬體被失控的應用程式濫用。這幾個抽象的概念主要包括:檔案、程序、執行緒、虛擬儲存器等。
程序是作業系統對乙個正在執行的程式的一種抽象,程序是乙個cpu可以併發執行很多程式的關鍵。cpu通過上下文切換來完成程序間的切換執行,所謂context,是程序執行所需的所有狀態資訊,上下文切換需要在使用者**和核心**之間來回切換,實際上是比較耗費時間的。
執行緒,執行緒程式設計模型比多程序程式設計模型更高效,原因在於多執行緒之間更容易共享資料;
虛擬儲存器:作業系統劃分給程序的儲存空間,它構成了一種每個程序都在獨佔地使用記憶體的假象。虛擬位址空間的布局根據作業系統有所不同,在linux中,位址空間最上面的區域是為作業系統中的**和資料保留的,往下(位址減少)依次是stack,共享庫儲存器,heap,.data,.text。
檔案:檔案就是位元組序列,所有的i/o裝置均可抽象為檔案,甚至包括網路。
併發:執行緒級併發(包括多核、超執行緒等概念);指令級併發:流水線技術(dsp中也有);單指令多資料併發:simd併發,新型的cpu有些特殊的硬體完成此功能;
抽象:抽象是最重要的概念,是管理工程複雜度的關鍵。
以上是第一章的內容概述,本章為以下各章節的序言,闡述了全文的幾個最終的概念和敘述脈絡。
CSAPP讀書筆記1
匯流排 相當於一顆線連線在各個部分,在各個部分傳遞資訊 i o裝置 input和ouput,除了鍵鼠,還有顯示器,磁碟,可執行程式就放在磁碟上 主存 暫時儲存資料的,這裡我理解為記憶體,不知道行不行 處理器 cpu從記憶體讀取指令,執行操作,然後使其指向下一條指令 在i o中輸入.hello,暫存器...
讀書筆記 鳳凰架構 其一
什麼是鳳凰架構 1 提出重程式設計能力還是重架構的問題 2 提出構建乙個大規模但依然可靠的軟體系統是否是可行的 通過馮諾依曼研發自複製自動機的例子舉例我們一直是在用不可靠部件構造可靠的系統。比如我們開發的每個環節都是有可能出錯的,但最終設計出的軟體必然是不可靠的,但事實並非如此。用馮諾依曼的自動機這...
讀書筆記 人月神話 其一
人月神話 是大學剛開始就很熟悉的一本書,當時被奉為軟體工程的聖書,似乎都要在書架上擺上它才能表明軟體工程學生的身份。時至今日我再讀它,因為有了之前參與系統的開發的經驗,很多的內容都通過記憶得到了驗證,讀來與大一時的 雖然不懂你在講什麼但好像很有道理 的體會有了明顯的不同。這裡選擇一些感觸較深的章節寫...