EDA365电子论坛网
标题:
详细介绍一下unix虚拟存储器
[打印本页]
作者:
mytomorrow
时间:
2019-9-26 14:39
标题:
详细介绍一下unix虚拟存储器
昨晚和舍友星光夜谈到12点多,今天一大早就要睡觉。你要问谈的什么这么来劲,我只能说既不是美女也不是电影,而是Linux下面的虚存管理机制!我们是不是很用功,哈哈哈。今天抽时间来对unix下面的虚存机制总结一下,就当温故而知新吧!
; Q( w/ f/ S( E0 D+ B! ^
k8 Y C @5 c& j! ~7 l
大家可能经常听说什么段页式内存管理,虚拟内存,虚地址等,然后没学过操作系统的朋友听着一片晕乎!今天我们就来深扒一下unix系统下的内存管理机制。
" |7 D: X. e5 c0 W+ `
* }1 R4 @. a9 G# P! t
首先很多朋友会问,为什么要有虚拟存储器呢?比如我单片机写程序的时候就直接用物理内存地址啊,没见得什么不妥的。确实,对应某个单一程序而言,在保证内存空间大小满足的情况下,确实不需要什么虚拟内存机制,直接用就OK了。但是对于一个多进程运行的系统而言,虚拟内存机制实在是必不可少的。我们知道一个系统的进程是与其他进程共享CPU和内存资源的,但是共享内存会形成一些问题。如果没有虚存机制,我们来看一下下面两种情况:
8 ?- A4 z5 B2 Y( A3 a/ c6 l
. P- a7 T5 ^2 D8 C1 ~4 K
1.当多个进程需要的空间大于内存容量,那么它们当中必然会有某些进程无法运行,超过空间的进程就会崩溃了。
/ O% m7 ?7 t3 z% i4 r: q
7 ^4 S1 x$ E \
2.当A进程不小心写了B进程使用的地址空间时,那么B进程在执行时行为会无法预测,太危险了。
P8 @, e1 g2 O6 p4 `; C' @
8 b# B6 z2 J \* i
一直这样做也会使得物理存储器特别容易损坏。
! A' A# M* q. A- w) Z4 T* @
. c6 b' Y) T1 u/ p3 T# N, [& W0 A5 {
为了更好地有效管理存储器并且不出错,现在的主流系统(unix/windows)都提供了虚拟内存管理机制,将逻辑存储地址与实际物理地址区分开来。并且虚存为每个进程都提供一个独立的,同等大小的私有地址空间。
1 p+ Z, Q) p5 b- H6 b5 |
- n: y) z1 u8 P$ l
一. 虚拟寻址
- k* y. o' P& ~8 J% \& s
1 ?# z% x. ^& G; U* Y& J
unix虚拟存储器-9.png
(49.85 KB, 下载次数: 2)
下载附件
保存到相册
2019-9-26 14:29 上传
K8 W6 i4 Y7 a: P4 Y8 o4 d' w9 @
4 X+ r1 i" L5 b9 g; n
图中的MMU是CPU芯片中用于将虚拟地址转换成物理地址的地址翻译器。
, H: ^, d* h; _
; C, l5 B0 a% i: E. R
首先忽略高级缓存L1,我们只看处理器,MMU,还有物理存储器。
% H/ h5 ] b* R- @
, G& b( y. W' O5 \
处理器只管寻址虚拟地址,交给MMU,MMU翻译成物理地址,到物理存储器中取指令或数据。
) I: _& R1 u: g Z
! X. H8 K5 ^' I0 O5 B
早期的PC和现在的数字信号处理器比如DSP,单片机等用的还是直接物理寻址,没有虚存机制。不过目前的计算机系统大都提供虚存机制。
" _) {: M' t" E5 g0 B r6 W* H* [
8 B/ I* u$ a( F I
- d4 G, v' P1 a" r' Q
二. 地址空间
% y" ?8 O8 d; `/ g9 |5 ^
w3 R5 }. ]7 B* Y; l1 u
如果是虚存寻址,那么虚存空间可以完全和物理存储在逻辑上独立开来,容量也可以不受实际物理存储器的大小限制。那么实际虚存容量究竟有多大呢?以前在本科上课的时候听老师说过是4G,当时就郁闷过,如果一个进程所需空间大于4G怎么办,而且4G也不大啊。。。然后发现老师说的并不准确,确实虚存的大小要CPU地址总线长度有关系,如果是32位的CPU,那么2的32次方是4G。如果是64位的CPU(目前PC基本都是64位的,32位绝种了),那么2的64次方是4G*4G(太大了,天文数字)。。。因为太大了,远远超过目前实际所需,所以CPU生产厂商限制了地址位长。
; u5 _) Q, o/ U& S
. y6 `$ H f0 c6 t4 ~% t* y
$ S+ k7 {, D; Y7 T6 {+ ]1 O
三.虚拟存储器结构
8 J3 u$ C" b a- c# l. n7 T4 K
. g; w- j' \7 w! N, q
概念上讲,虚拟存储器(VM)被组织为一个由存放在磁盘(注意是磁盘!!!)上的N个连续的字节大小的单元组成的数组。每个字节都有一个唯一的虚拟地址,这个唯一的虚拟地址是作为到数组的索引。
7 }# C0 { v4 V7 S4 K* Q; j6 A$ |
1 T$ S/ }8 _" M+ q0 z8 C" ?( W+ O
虚拟存储器以虚拟页为单位,每个页有P个字节。
" O0 p" Q0 Q6 u9 X# w8 _0 ~: }
9 b/ T( l. G' |% ]/ ^
物理内存也是以页为单位区别的,每个页也是P个字节,不过是叫物理页。
. k8 [% h1 r, l6 ]. h
8 n, f( ], r- v7 J* o2 v4 o
虚拟存储机制是用物理内存做为缓存的,下面我们来看一下:
8 ]6 t$ D3 s6 H3 N+ s* F
: c* N1 q. z. v* K
. J/ d1 t( m0 b" ~( t+ u* N! e
' F" ~; b+ w% A0 C5 q& [& a* M, I
! |9 x9 q; `) N, o) w" F* \
! @, s F4 Z: A/ Q5 {
作者:
fanichicl
时间:
2019-9-26 19:00
详细介绍一下unix虚拟存储器 。
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2