本章經過運行一個hello程序爲例,概述了計算機操做系統的運行過程,講述了組成計算機系統的硬件和系統軟件,講到了處理器處理一個程序的過程。
這一章中出現了一個我首次據說到的詞彙Amdahl定律,該定律的主要思想是,當咱們對系統的某個部分加速時,其對總體性能的影響取決於該部分的重要性和加速程度。也就是說要加速整個系統,必須提高系統中大部分的速度。算法
問題:這個提速是指的硬件性能上的提高,仍是操做系統算法上的優化,或是兩個都能影響,誰起到的影響做用更大呢?編程
本章重點講述了計算機中信息的位表示形式,介紹了無符號數,補碼這些信息在計算機中的不一樣存放方式。同時向咱們介紹了32位於64位計算機的區別。最後像咱們介紹了計算機中的位級運算和算術運算的方法,計算時會出現溢出的緣由和其相對應的實例,讓咱們感覺到不一樣定義類型的不一樣存儲區間和計算時出現溢出計算機的顯示狀況。緩存
問題:本章讓我看到了平時使用的強制類型轉換和計算溢出的弊端,會形成很大的偏差,那麼咱們在大型程序編寫時可能很難考慮清每個變量應當定義怎樣的數據類型,也不能全都往大了定義,會形成嚴重的資源浪費,那麼咱們該怎麼正確解決這個呢,想好變量在程序中將來會不會溢出嗎?仍是定義動態大小呢?安全
本章主要向咱們介紹了彙編語言,介紹了計算機系統中的各類寄存器以及每個寄存器的做用。本章經過一個個咱們熟悉的C語言的代碼,如賦值,指針,循環,算術運算等經常使用的C語言指令向咱們講述當它工做在底層,做爲和機器直接交流的彙編語言的時候應當是怎麼書寫的,以此來讓咱們更加清晰的瞭解到計算機系統中指令執行的過程以及各個寄存器的不一樣功能。服務器
問題1:加載有效地址的leaq命令這是首次用到,不過按書中介紹的看來這個命令主要用來進行公式的運算,不過它在使用時是否是真的與地址的計算無關呢?網絡
問題2:上週的測試中在查看sum.o的彙編書寫時發現了cltq這樣一條彙編語句,查詢以後沒有找到合理的解釋,書中也沒介紹這條語句,不知怎麼使用?數據結構
本章主要介紹了ISA,講解了Y86-64指令集,分析了一下它與咱們常見的X86-64的不一樣,而後向咱們講解了處理器的流水線操做以及其中的一些異常處理機制,本章最主要介紹的仍是一些彙編語言的書寫,在閱讀彙編語句的方面還須要必定的功底,瞭解指令執行的模式也是這一章須要掌握的重點內容。架構
問題1:對於本章中出現的一些硬件結構的圖沒有特別看懂?併發
問題2:流水線冒險的原理分析和處理還須要深刻了解,以前沒有學習?函數
本章主要講解了代碼的優化,講述了編譯器如何能生成高效的代碼,首先指出了編程的時候的一些很差的習慣形成的內存資源的浪費,加大系統的開銷和執行的時間。接着從底層的硬件架構講起,瞭解處理器,寄存器,內存的性能以此來說解怎麼進行高效的編程,消除沒必要要的工做。
問題:本章重要講述了優化程序性能,展開循環等等,運用優秀的算法下降開銷,那麼這與Amdahl定律是否相關呢?
本章介紹基本的存儲技術RAM、ROM等,而且講解了其價格、讀寫速度等等的一系列差別,告訴了咱們計算機系統中對這些存儲器的使用,例如CPU高速緩存區主要使用SRAM,硬盤主要採用ROM製做。那麼不一樣的存儲技術的使用就會形成整臺計算機各個部件之間的讀寫速度差別,所以本章還像咱們介紹了計算機系統平衡速度差別的辦法好比映射,組相聯高速緩存等方式
問題:第一次接觸存儲器山的概念依據書中講述主要是爲了記錄程序的相應的讀吞吐量的,可是仍是不大瞭解其使用的方法,對於其生成的函數圖象看不明白?
本章主要講解了程序執行過程當中必須經歷的重要的一步連接過程,;連接是將各類代碼和數據片斷收集並組成一個單一文件的過程。連接器處理目標文件時有三種不一樣的形式:可重定位,可執行,共享。接着介紹了動態連接和靜態連接的兩種不一樣的連接方式,連接器的兩個主要任務是符號解析和重定位。
問題1:動態連接和靜態連接使用上的區別?咱們寫好程序須要連接時應當如何選擇?操做系統中更多的使用哪一種方式?爲何?
問題2:對書中介紹的打樁機制不太瞭解?
本章主要講解的是操做系統出現的異常,以及對應異常的處理方法。異常是異常控制流的一種形式,一部分由硬件實現,一部分由操做系統實現,所以處理異常須要硬件和軟件緊密合做,而異常並非簡單的出錯,而是包含中斷、故障、終止和陷阱四種不一樣類型的異常。在操做系統層內核用ECF提供進程的基本概念,在操做系統與應用程序之間的接口經過進程的發射的信號來進行不一樣的操做。
問題:書中介紹了30種Linux支持的30種不一樣類型的信號,這是否是通常說的所有的中斷處理信號,仍是這是不一樣的信號,不一樣的操做系統之間有類似之處嗎?
本章介紹了操做系統當中的虛擬內存,它是對主存的一個抽象,主存的空間較小,爲了實現不一樣的進程並行,能夠都分配相應大小的內存所以引入虛擬內存概念。書中主要講解了經過分頁的方式管理虛擬內存,而且詳細的講解了頁表的映射方式,以及當缺頁中斷來臨時如何進行調度的一些算法。
問題:除了分頁還有分段,以及段頁式的方法,單單使用分頁管理不是會形成尋找浪費時間嗎?爲什麼不介紹其餘的管理方式呢?仍是Linux操做系統就是隻使用了分頁管理的方式?
本章講述了主存和外部設備之間複製數據的過程,介紹了一些基於Unix I/O模型的系統級函數,它們容許應用程序打開、關閉、讀和寫文件。Linux內核使用三個相關的數據結構表示打開的文件。經過一些編程的例子,以及具體的函數使用方法向咱們展現相應的I/O操做是如何進行的。
問題:我發現C應用程序中包含着標準的I/O函數和RIO函數,而Unix I/O函數單成一類,那麼我在C語言文件中可使用相應的函數嗎?
本章簡單的介紹了網絡編程的大致結構,基於客戶端和服務器模型進行編程,而且給出了大量的實例來告訴咱們如何進行網絡編程,介紹了一些網絡編程中才會用到的C語言函數,如connect、bind函數等。
問題:網絡編程接觸的較少,僅僅接觸C#,不過我瞭解到網絡編程中爲了安全考慮不去使用指針,爲什麼我在書中的程序中依然看到了指針的調用?
併發是操做系統很是重要的一個實現方式,它是在時間上重疊的一組邏輯流組成的,經過進程、I/O多路複用和線程構建的併發程序的機制,在本章中主要介紹了進程、線程的併發操做,以及併發中引起的一些問題,好比死鎖的產生。