虚拟存储器(虚拟内存Vitual Memory)
因為Redis 是基于內存的操作,我們先從內存開始說起。
虛擬存儲器(虛擬內存Vitual Memory)
名詞解釋:主存:內存;輔存:磁盤(硬盤)
計算機主存(內存)可看作一個由M 個連續的字節大小的單元組成的數組,每個字節有一個唯一的地址,這個地址叫做物理地址(PA)。早期的計算機中,如果CPU 需要內存,使用物理尋址,直接訪問主存儲器。
這種方式有幾個弊端:
1、在多用戶多任務操作系統中,所有的進程共享主存,如果每個進程都獨占一塊物理地址空間,主存很快就會被用完。我們希望在不同的時刻,不同的進程可以共用同一塊物理地址空間。
2、如果所有進程都是直接訪問物理內存,那么一個進程就可以修改其他進程的內存數據,導致物理地址空間被破壞,程序運行就會出現異常。
為了解決這些問題,我們就想了一個辦法,在CPU 和主存之間增加一個中間層。CPU不再使用物理地址訪問,而是訪問一個虛擬地址,由這個中間層把地址轉換成物理地址,最終獲得數據。這個中間層就叫做虛擬存儲器(Virtual Memory)。
具體的操作如下所示:
在每一個進程開始創建的時候,都會分配一段虛擬地址,然后通過虛擬地址和物理地址的映射來獲取真實數據,這樣進程就不會直接接觸到物理地址,甚至不知道自己調用的哪塊物理地址的數據。
目前,大多數操作系統都使用了虛擬內存,如Windows 系統的虛擬內存、Linux 系統的交換空間等等。Windows 的虛擬內存(pagefile.sys)是磁盤空間的一部分。
在32 位的系統上,虛擬地址空間大小是2^32bit=4G。在64 位系統上,最大虛擬地址空間大小是多少?是不是2^64bit=1024*1014TB=1024PB=16EB?實際上沒有用到64 位,因為用不到這么大的空間,而且會造成很大的系統開銷。Linux 一般用低48 位來表示虛擬地址空間,也就是2^48bit=256T。
cat /proc/cpuinfoaddress sizes : 40 bits physical, 48 bits virtual
實際的物理內存可能遠遠小于虛擬內存的大小。
總結:引入虛擬內存,可以提供更大的地址空間,并且地址空間是連續的,使得程序編寫、鏈接更加簡單。并且可以對物理內存進行隔離,不同的進程操作互不影響。還可以通過把同一塊物理內存映射到不同的虛擬地址空間實現內存共享。
?
總結
以上是生活随笔為你收集整理的虚拟存储器(虚拟内存Vitual Memory)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis 为什么是单线程的?
- 下一篇: 用户user空间和内核kernel空间