1. 程式人生 > >讀《程序是怎麽跑起來的》第5章

讀《程序是怎麽跑起來的》第5章

虛擬 內容 大型 磁盤驅動器 高速緩存 管理 就是 由於 eight

現在計算機采用的是存儲程序方式,在存儲裝置中保存程序,並逐一運行的方式。磁盤緩存是指從磁盤中讀取的數據存儲在內存中,當該數據再次被讀取時,不是從磁盤而是直接從內存中高速讀取。借助虛擬內存,哪怕是內存容量不足的計算機,也可以運行很大的程序。DLLDynamic Link Library的簡稱。函數的加載方式有靜態鏈接和動態鏈接兩種。扇區是磁盤保存數據的物理單位。計算機主要的存儲部件是內存和磁盤。磁盤中存儲的程序,必須要加載到內存後才能運行。在磁盤中保存的原始程序是無法直接運行的。這是因為,負責解析和運行程序內容的CPU,需要通過內部程序計數器來指定內存地址,然後才能讀出程序。即使CPU可以直接讀出並運行磁盤中保存的程序,由於磁盤讀取速度慢,程序的運行速度還是會降低。總之,存儲在磁盤中的程序需要讀入到內存後才能運行。

磁盤高速緩存是一種用來加快磁盤訪問的高速RAM,可以是磁盤驅動器本身的一部分(有時稱為硬盤緩存或緩沖),也可以是計算機中為磁盤預留的RAM(有時稱為軟盤高速緩存)。硬盤緩存更加高效,但也昂貴得多,因此容量較小。所有當今的磁盤幾乎都包括內部緩存。

虛擬內存是為了多任務內核提供的內存管理技術,它使得應用程序,因為他擁有連續的可用的內存,而實際上它通常是成多個物理內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進行數據交換。與沒有使用虛擬內存技術的系統相比,使用這種技術的系統使得大型程序的編寫變得更加容易,對真正的物理(RAM)的使用也更有效率。對虛擬內存的定義是基於對地址空間的重定義的,即把地址空間定義為“連續的虛擬內存地址”,借此“欺騙”程序,使它們以為自己正在使用一大塊的“連續”地址。

1、虛擬內存使用硬盤來模擬內存。

2、虛擬內存的目的是擴大尋址空間,增加程序可用的地址集合。

3、為方便實現虛擬內存,操作系統將虛擬內存劃分成若幹頁面,每個頁面大小固定,存儲在硬盤上。當需要頁面時,操作系統將其從硬盤復制到內存,將虛擬地址轉換為真實地址。

4、將虛擬內存轉換為真實地址的過程稱為映射;將虛擬頁面從硬盤復制到內存的過程稱為頁面調度或交換。

節約內存編程的方法:

1、通過DLL文件實現函數共享。

2、通過調用_stdcall來減少程序文件的大小:C語言中,在調用函數後,需要執行棧清理處理指令。棧清理處理是指,把不需要的數據從接收和傳遞函數的參數時使用的內存上的棧區域中清理出去。該命令不是程序記述的,而是在程序編譯時由編譯器自動附加到程序中。編譯器默認將該處理附加在函數調用方。通過在函數名加上

_stdcall,就可以把棧清理處理變為在被調用函數一方。

磁盤是通過把其物理表面劃分成多個空間來使用的。劃分的方式有扇區方式和可變長方式兩種,前者是指將磁盤劃分為固定長度的空間,後者則是把磁盤劃分為長度可變的空間。一般windows系統計算機所使用的硬盤,采用的都是扇區方式。扇區方式中,把磁盤表面分成若幹個同心圓的空間就是磁道,把磁道按照固定大小(能存儲的數據長度相同)劃分而成的空間就是扇區。扇區是對磁盤進行物理讀寫的最小單位。Windows中使用的磁盤,一般1個扇區是512字節。不過,Windows在邏輯方面(軟件方面)對磁盤進行讀寫的單位是扇區整數倍簇。根據磁盤容量的不同,1簇可以是512字節(1=1扇區)、1KB(1=2扇區)、2KB4KB8KB16KB32KB1=64扇區)。磁盤的容量越大,簇的容量也越大。以簇為單位進行讀寫時,1簇中沒有填滿的區域會保持不被使用的狀態。雖然這看起來是有點浪費,不過該機制就是如此規定的,所以我們也沒有什麽好辦法。另外,如果減少簇的容量,磁盤訪問次數就會增加,就會導致讀寫文件的時間變長。由於在磁盤表面上,表示扇區區分的領域是必要的。因此,如果簇的容量過小,磁盤的整體容量也會減少。扇區和簇的大小,是由處理速度和存儲容量的平衡來決定的。

現在計算機采用的是存儲程序方式,在存儲裝置中保存程序,並逐一運行的方式。磁盤緩存是指從磁盤中讀取的數據存儲在內存中,當該數據再次被讀取時,不是從磁盤而是直接從內存中高速讀取。借助虛擬內存,哪怕是內存容量不足的計算機,也可以運行很大的程序。DLLDynamic Link Library的簡稱。函數的加載方式有靜態鏈接和動態鏈接兩種。扇區是磁盤保存數據的物理單位。計算機主要的存儲部件是內存和磁盤。磁盤中存儲的程序,必須要加載到內存後才能運行。在磁盤中保存的原始程序是無法直接運行的。這是因為,負責解析和運行程序內容的CPU,需要通過內部程序計數器來指定內存地址,然後才能讀出程序。即使CPU可以直接讀出並運行磁盤中保存的程序,由於磁盤讀取速度慢,程序的運行速度還是會降低。總之,存儲在磁盤中的程序需要讀入到內存後才能運行。

磁盤高速緩存是一種用來加快磁盤訪問的高速RAM,可以是磁盤驅動器本身的一部分(有時稱為硬盤緩存或緩沖),也可以是計算機中為磁盤預留的RAM(有時稱為軟盤高速緩存)。硬盤緩存更加高效,但也昂貴得多,因此容量較小。所有當今的磁盤幾乎都包括內部緩存。

虛擬內存是為了多任務內核提供的內存管理技術,它使得應用程序,因為他擁有連續的可用的內存,而實際上它通常是成多個物理內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進行數據交換。與沒有使用虛擬內存技術的系統相比,使用這種技術的系統使得大型程序的編寫變得更加容易,對真正的物理(RAM)的使用也更有效率。對虛擬內存的定義是基於對地址空間的重定義的,即把地址空間定義為“連續的虛擬內存地址”,借此“欺騙”程序,使它們以為自己正在使用一大塊的“連續”地址。

1、虛擬內存使用硬盤來模擬內存。

2、虛擬內存的目的是擴大尋址空間,增加程序可用的地址集合。

3、為方便實現虛擬內存,操作系統將虛擬內存劃分成若幹頁面,每個頁面大小固定,存儲在硬盤上。當需要頁面時,操作系統將其從硬盤復制到內存,將虛擬地址轉換為真實地址。

4、將虛擬內存轉換為真實地址的過程稱為映射;將虛擬頁面從硬盤復制到內存的過程稱為頁面調度或交換。

節約內存編程的方法:

1、通過DLL文件實現函數共享。

2、通過調用_stdcall來減少程序文件的大小:C語言中,在調用函數後,需要執行棧清理處理指令。棧清理處理是指,把不需要的數據從接收和傳遞函數的參數時使用的內存上的棧區域中清理出去。該命令不是程序記述的,而是在程序編譯時由編譯器自動附加到程序中。編譯器默認將該處理附加在函數調用方。通過在函數名加上_stdcall,就可以把棧清理處理變為在被調用函數一方。

磁盤是通過把其物理表面劃分成多個空間來使用的。劃分的方式有扇區方式和可變長方式兩種,前者是指將磁盤劃分為固定長度的空間,後者則是把磁盤劃分為長度可變的空間。一般windows系統計算機所使用的硬盤,采用的都是扇區方式。扇區方式中,把磁盤表面分成若幹個同心圓的空間就是磁道,把磁道按照固定大小(能存儲的數據長度相同)劃分而成的空間就是扇區。扇區是對磁盤進行物理讀寫的最小單位。Windows中使用的磁盤,一般1個扇區是512字節。不過,Windows在邏輯方面(軟件方面)對磁盤進行讀寫的單位是扇區整數倍簇。根據磁盤容量的不同,1簇可以是512字節(1=1扇區)、1KB(1=2扇區)、2KB4KB8KB16KB32KB1=64扇區)。磁盤的容量越大,簇的容量也越大。以簇為單位進行讀寫時,1簇中沒有填滿的區域會保持不被使用的狀態。雖然這看起來是有點浪費,不過該機制就是如此規定的,所以我們也沒有什麽好辦法。另外,如果減少簇的容量,磁盤訪問次數就會增加,就會導致讀寫文件的時間變長。由於在磁盤表面上,表示扇區區分的領域是必要的。因此,如果簇的容量過小,磁盤的整體容量也會減少。扇區和簇的大小,是由處理速度和存儲容量的平衡來決定的。

讀《程序是怎麽跑起來的》第5章