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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
       昨晚和舍友星光夜谈到12点多,今天一大早就要睡觉。你要问谈的什么这么来劲,我只能说既不是美女也不是电影,而是Linux下面的虚存管理机制!我们是不是很用功,哈哈哈。今天抽时间来对unix下面的虚存机制总结一下,就当温故而知新吧!3 e# {+ W2 \7 A
% b& V9 n/ q3 n+ T
       大家可能经常听说什么段页式内存管理,虚拟内存,虚地址等,然后没学过操作系统的朋友听着一片晕乎!今天我们就来深扒一下unix系统下的内存管理机制。
4 W6 F% l# ]6 c1 o# U) v- p' Q
' G2 ], [+ t, a3 |5 s% A       首先很多朋友会问,为什么要有虚拟存储器呢?比如我单片机写程序的时候就直接用物理内存地址啊,没见得什么不妥的。确实,对应某个单一程序而言,在保证内存空间大小满足的情况下,确实不需要什么虚拟内存机制,直接用就OK了。但是对于一个多进程运行的系统而言,虚拟内存机制实在是必不可少的。我们知道一个系统的进程是与其他进程共享CPU和内存资源的,但是共享内存会形成一些问题。如果没有虚存机制,我们来看一下下面两种情况:
3 }) t$ f/ p; x5 }$ D  A- I5 V! q" L6 ]+ L
1.当多个进程需要的空间大于内存容量,那么它们当中必然会有某些进程无法运行,超过空间的进程就会崩溃了。- d0 f& O4 E- ~" v) p2 \6 @4 A( [
3 N7 t; x0 p" O8 ]8 Y4 V; G  H
2.当A进程不小心写了B进程使用的地址空间时,那么B进程在执行时行为会无法预测,太危险了。! b& S) J0 F7 `- q/ c+ I$ p

% w+ m' Z) j: A8 C9 d# \6 T" j一直这样做也会使得物理存储器特别容易损坏。
0 R5 }" Q+ q/ b" \: G, k3 v) s, ^( w4 N1 K; ~
       为了更好地有效管理存储器并且不出错,现在的主流系统(unix/windows)都提供了虚拟内存管理机制,将逻辑存储地址与实际物理地址区分开来。并且虚存为每个进程都提供一个独立的,同等大小的私有地址空间。
' a- w% b5 O6 w7 O( V8 _3 t2 O& }/ _" F( K
一. 虚拟寻址
5 [, p1 W- O- ?
. }9 o( ^' O0 T# Y1 H
' H) |* g  e/ J* M) W

7 a! z+ {4 N/ I0 {: I0 E图中的MMU是CPU芯片中用于将虚拟地址转换成物理地址的地址翻译器。
* o" a7 H  B' N; p) ~- {, [% x( _/ E% i1 v( C
首先忽略高级缓存L1,我们只看处理器,MMU,还有物理存储器。) @; |0 L" Y" a% L# @

5 Z  |- I$ X7 h$ k" [处理器只管寻址虚拟地址,交给MMU,MMU翻译成物理地址,到物理存储器中取指令或数据。( h& F& B- |9 h" T0 q

  d' q( R( I% P4 J) K2 _* l- ]早期的PC和现在的数字信号处理器比如DSP,单片机等用的还是直接物理寻址,没有虚存机制。不过目前的计算机系统大都提供虚存机制。
- u: o) @  S" Y
2 d# A$ `- p+ J; v' ^. W) a, _7 x0 x% C  A
二. 地址空间' }- R3 i) w4 I3 A; F- I) r
( w5 R$ {' E: `; X8 r( Y
如果是虚存寻址,那么虚存空间可以完全和物理存储在逻辑上独立开来,容量也可以不受实际物理存储器的大小限制。那么实际虚存容量究竟有多大呢?以前在本科上课的时候听老师说过是4G,当时就郁闷过,如果一个进程所需空间大于4G怎么办,而且4G也不大啊。。。然后发现老师说的并不准确,确实虚存的大小要CPU地址总线长度有关系,如果是32位的CPU,那么2的32次方是4G。如果是64位的CPU(目前PC基本都是64位的,32位绝种了),那么2的64次方是4G*4G(太大了,天文数字)。。。因为太大了,远远超过目前实际所需,所以CPU生产厂商限制了地址位长。
; e6 N  D  j$ i) \7 u7 G( p* r2 l

0 Z1 }% p, t; c7 V  [; |1 x) ]三.虚拟存储器结构/ O/ P; D/ L+ C4 Q9 [" O
+ u$ v7 J* i! O, B+ {
概念上讲,虚拟存储器(VM)被组织为一个由存放在磁盘(注意是磁盘!!!)上的N个连续的字节大小的单元组成的数组。每个字节都有一个唯一的虚拟地址,这个唯一的虚拟地址是作为到数组的索引。
# y# d* U; ?4 l5 x! N
  f3 Z& X, W" z虚拟存储器以虚拟页为单位,每个页有P个字节。
4 X3 C: E$ L% V2 y! x9 h; B8 i/ w- T. O( n% q/ L: n7 O% t
物理内存也是以页为单位区别的,每个页也是P个字节,不过是叫物理页。
+ L2 Z! ^8 ~# l/ w" d( c
' A, f. ]. q$ W) i% g3 v! R虚拟存储机制是用物理内存做为缓存的,下面我们来看一下:4 R7 m( _, t5 @; [- @
( T( w& E, e" X
游客,如果您要查看本帖隐藏内容请回复
8 U! I( F2 ~# p/ }: d: {4 B1 m
# y: \0 P) Z* t3 ?; q

, X: C5 e. V0 c; T) h

: l* x3 j- u% u9 u9 d7 D

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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