找回密码
 注册
关于网站域名变更的通知
查看: 318|回复: 1
打印 上一主题 下一主题

详细介绍一下unix虚拟存储器

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-9-26 14:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
       昨晚和舍友星光夜谈到12点多,今天一大早就要睡觉。你要问谈的什么这么来劲,我只能说既不是美女也不是电影,而是Linux下面的虚存管理机制!我们是不是很用功,哈哈哈。今天抽时间来对unix下面的虚存机制总结一下,就当温故而知新吧!/ p7 O! |# \1 Q" x/ s' o$ c

! R# f1 i* v! J       大家可能经常听说什么段页式内存管理,虚拟内存,虚地址等,然后没学过操作系统的朋友听着一片晕乎!今天我们就来深扒一下unix系统下的内存管理机制。
* E% V5 ~4 x! p2 k* c; D& u2 a& d  W; J* r) g( X7 |
       首先很多朋友会问,为什么要有虚拟存储器呢?比如我单片机写程序的时候就直接用物理内存地址啊,没见得什么不妥的。确实,对应某个单一程序而言,在保证内存空间大小满足的情况下,确实不需要什么虚拟内存机制,直接用就OK了。但是对于一个多进程运行的系统而言,虚拟内存机制实在是必不可少的。我们知道一个系统的进程是与其他进程共享CPU和内存资源的,但是共享内存会形成一些问题。如果没有虚存机制,我们来看一下下面两种情况:
6 h/ n( g: ?, Q$ J9 Y, ^& R
. L$ u8 C4 n. D8 j1.当多个进程需要的空间大于内存容量,那么它们当中必然会有某些进程无法运行,超过空间的进程就会崩溃了。
" |; ^! `9 S0 ?' ~$ F$ H! |5 n1 s" Q! W
2.当A进程不小心写了B进程使用的地址空间时,那么B进程在执行时行为会无法预测,太危险了。' g1 @2 M6 S6 |$ Y/ Z1 }' L  X4 T: K% s
4 m) G! V  W* V* }
一直这样做也会使得物理存储器特别容易损坏。
8 I- l/ a3 z5 n! j6 K; P) Q7 H( A/ O# b  x2 p  H8 X
       为了更好地有效管理存储器并且不出错,现在的主流系统(unix/windows)都提供了虚拟内存管理机制,将逻辑存储地址与实际物理地址区分开来。并且虚存为每个进程都提供一个独立的,同等大小的私有地址空间。
, v3 M4 f9 ?$ `) e" k  K- k$ Q6 b( {/ a
一. 虚拟寻址
$ s8 D) I. k7 a" q; A9 V, V7 g1 ^+ \  Y) U# c
' G  l7 x" o: x% N; i

3 Q2 ~5 J8 ~& E" R4 C8 D图中的MMU是CPU芯片中用于将虚拟地址转换成物理地址的地址翻译器。
9 ]* H* M2 B2 E6 ~; m
/ o% t0 l9 m) k4 _' {  B首先忽略高级缓存L1,我们只看处理器,MMU,还有物理存储器。6 w! R$ \7 T2 l  C
: i; K, c- P+ q! \' d( l
处理器只管寻址虚拟地址,交给MMU,MMU翻译成物理地址,到物理存储器中取指令或数据。8 n  m. s8 ]0 {! b% w* a3 d+ x* @
3 G( S$ l& R5 Q0 Y; F
早期的PC和现在的数字信号处理器比如DSP,单片机等用的还是直接物理寻址,没有虚存机制。不过目前的计算机系统大都提供虚存机制。
0 _3 E' I7 u5 K: u( W5 J6 S! u9 s& l4 R! `4 i

, V+ ^2 J, ~" ^. H4 O' @二. 地址空间
) _4 T$ I- g/ \1 r- q$ v# V* O
0 M; Y- u1 f4 n) e7 z/ @) y如果是虚存寻址,那么虚存空间可以完全和物理存储在逻辑上独立开来,容量也可以不受实际物理存储器的大小限制。那么实际虚存容量究竟有多大呢?以前在本科上课的时候听老师说过是4G,当时就郁闷过,如果一个进程所需空间大于4G怎么办,而且4G也不大啊。。。然后发现老师说的并不准确,确实虚存的大小要CPU地址总线长度有关系,如果是32位的CPU,那么2的32次方是4G。如果是64位的CPU(目前PC基本都是64位的,32位绝种了),那么2的64次方是4G*4G(太大了,天文数字)。。。因为太大了,远远超过目前实际所需,所以CPU生产厂商限制了地址位长。
8 ?6 F" }2 ^8 V) e: u1 W% C( T  |1 G3 Y' @& Z. _

- N0 l# G; a2 K1 w$ r! A/ L三.虚拟存储器结构
$ w/ o; ?7 [4 k8 G3 U( {1 E: X& w7 e$ s  P) i. y: {+ a- z# H+ W4 P
概念上讲,虚拟存储器(VM)被组织为一个由存放在磁盘(注意是磁盘!!!)上的N个连续的字节大小的单元组成的数组。每个字节都有一个唯一的虚拟地址,这个唯一的虚拟地址是作为到数组的索引。" {5 {. Q0 R& Q1 a- M& E* h
  Q. i% a) j/ {: T2 E
虚拟存储器以虚拟页为单位,每个页有P个字节。! Y/ w2 j2 a3 B! ?

4 q4 @0 U5 w2 K* w; Q9 n9 Q物理内存也是以页为单位区别的,每个页也是P个字节,不过是叫物理页。
8 z  u% B+ l* H9 @7 @5 x2 c) P2 ^5 I8 h0 D, c( J3 b- M8 H5 e* n/ v. Y
虚拟存储机制是用物理内存做为缓存的,下面我们来看一下:
2 c; N! \1 y: z/ q3 ?( z) h$ z$ e7 [& u% J+ u
游客,如果您要查看本帖隐藏内容请回复

# X3 E( }7 Z$ E+ R8 N) i9 h% Y
6 v- R$ z# k3 ?9 P
9 `1 G! |; `$ [  L
1 P# H7 U7 {) s6 @

该用户从未签到

2#
发表于 2019-9-26 19:00 | 只看该作者
详细介绍一下unix虚拟存储器 。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 02:01 , Processed in 0.171875 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表