儲存器之記憶體(主存)

2021-10-04 12:23:10 字數 3607 閱讀 1404

前言:

計算機組成的五大基礎是 儲存器 控制器 運算器 輸入輸出裝置,其中從儲存功能角度來看

可以把儲存器分為 記憶體和磁碟

一 什麼是記憶體

記憶體又稱主存,它是程式與cpu進行溝通的橋梁,計算機中所有的程式執行都是在記憶體中進行的

記憶體的作用:存放cpu運算的資料 以及與硬碟等外部裝置交換資料 保證計算機的穩定執行

二 計算機的記憶體物理結構

記憶體 ic 是乙個完整的結構,它內部也有電源、位址訊號、資料訊號、控制訊號和用於定址的 ic 引腳來進行資料的讀寫。下面是乙個虛擬的 ic 引腳示意圖

圖中 vcc 和 gnd 表示電源,a0 - a9 是位址訊號的引腳,d0 - d7 表示的是控制訊號、rd 和 wr 都是好控制訊號,我用不同的顏色進行了區分,將電源連線到 vcc 和 gnd 後,就可以對其他引腳傳遞 0 和 1 的訊號,大多數情況下,+5v 表示1,0v 表示 0。

我們都知道記憶體是用來儲存資料,那麼這個記憶體 ic 中能儲存多少資料呢?d0 - d7 表示的是資料訊號,也就是說,一次可以輸入輸出 8 bit = 1 byte 的資料。a0 - a9 是位址訊號共十個,表示可以指定 00000 00000 - 11111 11111 共 2 的 10次方 = 1024個位址。每個位址都會存放 1 byte 的資料,因此我們可以得出記憶體 ic 的容量就是 1 kb。

記憶體內部是由各種ic電路組成的 它的種類很龐大 主要分為三種儲存器

1 隨機儲存器:既可以讀 也可以寫 當機器關閉時 記憶體資訊會丟失

2 唯讀儲存器:rom一般只能用於資料的讀取 不能寫入資料 但當機器停電時 這些資料不會丟失

3 快取記憶體 它位於記憶體和cpu之間 是乙個讀寫速度比記憶體更快的儲存器 當cpu需要讀取資料時 會直接從快取記憶體中直接讀取 當然 如需要的資料在cache中沒有 cpu會從記憶體中去讀資料

分類:一級快取

二級快取

**快取

三 記憶體的讀寫過程

來詳細描述一下這個過程,假設我們要向記憶體 ic 中寫入 1byte 的資料的話,它的過程是這樣的:

首先給 vcc 接通 +5v 的電源,給 gnd 接通 0v 的電源,使用 a0 - a9 來指定資料的儲存場所,然後再把資料的值輸入給 d0 - d7 的資料訊號,並把 wr(write)的值置為 1,執行完這些操作後,即可以向記憶體 ic 寫入資料

讀出資料時,只需要通過 a0 - a9 的位址訊號指定資料的儲存場所,然後再將 rd 的值置為 1 即可。

圖中的 rd 和 wr 又被稱為控制訊號。其中當wr 和 rd 都為 0 時,無法進行寫入和讀取操作。

記憶體的現實模型

為了便於記憶,我們把記憶體模型對映成為我們現實世界的模型,在現實世界中,記憶體的模型很想我們生活的樓房。在這個樓房中,1層可以儲存乙個位元組的資料,樓層號就是位址,下面是記憶體和樓層整合的模型圖

我們知道,程式中的資料不僅只有數值,還有資料型別的概念,從記憶體上來看,就是占用記憶體大小(占用樓層數)的意思。即使物理上強制以 1 個位元組為單位來逐一讀寫資料的記憶體,在程式中,通過指定其資料型別,也能實現以特定位元組數為單位來進行讀寫。

四 記憶體和磁碟

計算機最主要的儲存部件是記憶體和磁碟。磁碟中儲存的程式必須載入到記憶體中才能執行,在磁碟中儲存的程式是無法直接執行的,這是因為負責解析和執行程式內容的 cpu 是需要通過程式計數器來指定記憶體位址從而讀出程式指令的。

磁碟構造

磁碟快取

我們上面提到,磁碟往往和記憶體是互利共生的關係,相互協作,彼此持有良好的合作關係。每次記憶體都需要從磁碟中讀取資料,必然會讀到相同的內容,所以一定會有乙個角色負責儲存我們經常需要讀到的內容。我們大家做軟體的時候經常會用到快取技術,那麼硬體層面也不例外,磁碟也有快取,磁碟的快取叫做磁碟快取。

磁碟快取指的是把從磁碟中讀出的資料儲存到記憶體的方式,這樣一來,當接下來需要讀取相同的內容時,就不會再通過實際的磁碟,而是通過磁碟快取來讀取。某一種技術或者框架的出現勢必要解決某種問題的,那麼磁碟快取就大大改善了磁碟訪問的速度。

五 虛擬記憶體和記憶體

虛擬記憶體是記憶體和磁碟互動的第二個媒介。虛擬記憶體是指把磁碟的一部分作為假想記憶體來使用。這與磁碟快取是假想的磁碟(實際上是記憶體)相對,虛擬記憶體是假想的記憶體(實際上是磁碟)。

虛擬記憶體是計算機系統記憶體管理的一種技術。它使得應用程式認為它擁有連續可用的記憶體(乙個完整的位址空間),但是實際上,它通常被分割成多個物理碎片,還有部分儲存在外部磁碟管理器上,必要時進行資料交換。

通過借助虛擬記憶體,在記憶體不足時仍然可以執行程式。例如,在只剩 5mb 記憶體空間的情況下仍然可以執行 10mb 的程式。由於 cpu 只能執行載入到記憶體中的程式,因此,虛擬記憶體的空間就需要和記憶體中的空間進行置換(swap),然後執行程式。

虛擬記憶體與記憶體的交換方式

虛擬記憶體的方法有分頁式 和 分段式 兩種。windows 採用的是分頁式。該方式是指在不考慮程式構造的情況下,把執行的程式按照一定大小的頁進行分割,並以頁為單位進行置換。在分頁式中,我們把磁碟的內容讀到記憶體中稱為 page in,把記憶體的內容寫入磁碟稱為 page out。windows 計算機的頁大小為 4kb ,也就是說,需要把應用程式按照 4kb 的頁來進行切分,以頁(page)為單位放到磁碟中,然後進行置換。

為了實現記憶體功能,windows 在磁碟上提供了虛擬記憶體使用的檔案(page file,頁檔案)。該檔案由 windows 生成和管理,檔案的大小和虛擬記憶體大小相同,通常大小是記憶體的 1 - 2 倍。

磁碟的物理結構

之前我們介紹了cpu、記憶體的物理結構,現在我們來介紹一下磁碟的物理結構。磁碟的物理結構指的是磁碟儲存資料的形式。

磁碟是通過其物理表面劃分成多個空間來使用的。劃分的方式有兩種:可變長方式 和 扇區方式。前者是將物理結構劃分成長度可變的空間,後者是將磁碟結構劃分為固定長度的空間。一般 windows 所使用的硬碟和軟盤都是使用扇區這種方式。扇區中,把磁碟表面分成若干個同心圓的空間就是 磁軌,把磁軌按照固定大小的儲存空間劃分而成的就是 扇區

扇區是對磁碟進行物理讀寫的最小單位。windows 中使用的磁碟,一般是乙個扇區 512 個位元組。不過,windows 在邏輯方面對磁碟進行讀寫的單位是扇區整數倍簇。根據磁碟容量不同功能,1簇可以是 512 位元組(1 簇 = 1扇區)、1kb(1簇 = 2扇區)、2kb、4kb、8kb、16kb、32kb( 1 簇 = 64 扇區)。簇和扇區的大小是相等的。

Android TV開發之記憶體與快閃儲存器的區別

ram ddr rom flash emmc的區別 做android tv開發時會遇到 8g 2g 的專案名,但是這裡的8g和2g到底指的是什麼?當時就很懵 分類 隊一 ram ddr 記憶體,掉電資訊就沒了 隊二 rom flash emmc 快閃儲存器,掉電資訊可以保留,做儲存硬碟使用 主要區別...

C 多重繼承之記憶體儲存

c 之多重繼承 1.c 中class與struct。在c 裡面,class與struct沒有本質的區別,只是class的預設許可權是private,而struct則是public。這個概念也揭示了一點 class和struct在內部儲存結構上是一致的。所以我們可以利用這一點來 class的實現原理。...

leakcanary Android 之記憶體檢測

1,為什麼使用leakcanary。因為他簡單,方便,及時,易檢視。2,使用教程。leakcanary是自動檢測activity的,不用再任何activity裡新增 如果需要檢測fragment,那必須自己寫方法,使用它是refwatcher 具體用法如下 新增依賴 dependencies初始化物...