速讀《深刻理解計算機系統》

本週速讀了《深刻理解計算機系統》這本書,這本書從程序員的角度介紹了計算機系統的內在運做,展現了一些本質概念是如何實際的影響應用程序的正確性、性能和實用性的。收穫以下:程序員

一、關於進程和線程

  • 進程是操做系統對運行程序的一種抽象,是指計算機中已運行的程序,是系統進行資源分配和調度的基本單位,是操做系統結構的基礎。
  • 線程有時被稱爲輕量級進程,是操做系統可以進行運算調度的最小單位。線程是進程中的一個實體,線程本身不擁有系統資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的所有資源,同一進程中的多個線程之間能夠併發執行。

二、幾種數據傳送指令

  • movl:傳送雙字,源操做數指定一個值,能夠是當即數,能夠存放在寄存器或存儲器中。目的操做數指定一個位置,能夠是寄存器或存儲器地址。
  • movw:傳送兩個字節,當一個操做數爲寄存器時,必須爲下圖中八個雙字節寄存器元素中的一個。
  • movb:傳遞一個字節,當一個操做數爲寄存器時,必須爲下圖中八個單字節寄存器元素中的一個。
  • movsbl和movzbl負責拷貝一個字節,並設置目的操做數中其他的位。
    • movsbl的源操做數是單字節的,並將高24位設置爲源字節的最高位,而後拷貝到雙字的目的中。
    • movzbl的源操做數是單字節的,在前面加24個0擴展到32位,而後拷貝到雙字的目的中。

三、寄存器的使用慣例

IA32採用了一組統一的寄存器使用慣例,根據慣例,寄存器eax、edx、ecx被劃分爲調用者保存寄存器,當過程P調用Q時,Q能夠覆蓋這些寄存器,二不會破壞任何P所須要的數據;ebx、esi、edi被劃分爲被調用者保存寄存器,這意味着Q必須在覆蓋這些寄存器以前,將這些寄存器中的值保存到棧中,並在返回前恢復它們,由於P可能會在從此的計算中須要這些值。由此根據慣例,必須保持寄存器ebp、esp。

四、Amdahl定律

Gene Amdahl作出了一個關於提升系統一部分性能的效果的簡單但富有洞察力的觀察,被稱爲Amdahl定律。其主要思想是當咱們加快系統一個部分的速度時,對系統總體性能的影響依賴於這個部分有多重要和速度提升了多少。
    考慮一個系統在其中執行某個應用程序須要時間t,設系統某部分須要這個時間的百分比爲a,二咱們將它的性能提升到了k倍,所以整個執行時間爲T=(1-a)t+(at)/k=t[(1-a)+a/k],由此能夠得出加速S=1/[(1-a)+a/k]。例如原來佔用60%時間的部分提升到了三倍即a=0.6,k=3,此時加速S=1.67。能夠看出咱們大幅度改進了系統的一個主要部分,可是淨加速仍是很小。
    因此Amdahl定律的主要觀點就是要想大幅度提升整個系統的速度,必須提升整個系統很大一部分的速度。

五、高速緩存行、組和塊有什麼區別?

  • 塊是一個固定大小的信息包,在高速緩存和駐村之間來回傳送;
  • 行是高速緩存中存儲塊以及其餘信息的容器;
  • 組是一個或多個行的集合,直接映射高速緩存中的組只有一行組成,組相聯和全相聯高速緩存中的組室友多個行組成的。
    在直接映射高速緩存中組和行是等價的,但在相聯高速緩存中二者不能混用。

六、重定位的過程:

重定位由兩步組成:緩存

  • 重定位節和符號定義。連接器將全部想同類型的節合併爲同一類型的新的聚合節,而後連接器將運行時存儲器地址賦給新的聚合節,賦給輸入模塊定義的每一個節,以及賦給輸入模塊定義的每一個符號。這一步完成後,程序中每一個指令和全局變量都有惟一的運行時的存儲地址了。
  • 重定位節中的符號引用。連接器修改代碼節和數據節中對每一個符號的引用,使得它們指向正確的運行時地址,這一步的執行會依賴於重定位表目的可重定位目標模塊中的數據結構。

七、基於gettimeofday函數的測量

使用這個庫函數查詢系統時鐘以肯定當前的日期和時間。這個函數把時間寫入到一個調用者傳遞過來的結構中,這個結構包括一個單位爲s的字段,還有一個單位爲μs的字段。
數據結構

八、垃圾收集

垃圾收集器是一種動態存儲分配器,它自動釋放程序再也不須要的已分配塊,這些塊被稱爲垃圾。自動回收堆存儲的過程叫作垃圾收集。在一個支持垃圾收集的系統中,應用顯式分配堆塊,但從不顯式地釋放它們。在C程序的上下文中,應用調用malloc,但從不調用free。垃圾收集器按期識別垃圾塊,並相應地調用free,將這些塊放回空閒鏈表中。併發

相關文章
相關標籤/搜索