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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
       昨晚和舍友星光夜谈到12点多,今天一大早就要睡觉。你要问谈的什么这么来劲,我只能说既不是美女也不是电影,而是Linux下面的虚存管理机制!我们是不是很用功,哈哈哈。今天抽时间来对unix下面的虚存机制总结一下,就当温故而知新吧!
' |* w, x9 b! ?' j3 a  R; N/ u% d& k3 G' u- L
       大家可能经常听说什么段页式内存管理,虚拟内存,虚地址等,然后没学过操作系统的朋友听着一片晕乎!今天我们就来深扒一下unix系统下的内存管理机制。( i* [6 ^5 m3 H! j# D$ p

# j: V2 U- M( W6 R1 U% i       首先很多朋友会问,为什么要有虚拟存储器呢?比如我单片机写程序的时候就直接用物理内存地址啊,没见得什么不妥的。确实,对应某个单一程序而言,在保证内存空间大小满足的情况下,确实不需要什么虚拟内存机制,直接用就OK了。但是对于一个多进程运行的系统而言,虚拟内存机制实在是必不可少的。我们知道一个系统的进程是与其他进程共享CPU和内存资源的,但是共享内存会形成一些问题。如果没有虚存机制,我们来看一下下面两种情况:
6 v; [  h3 a& v; q, y4 W
" C: ~+ l5 F  {6 x1.当多个进程需要的空间大于内存容量,那么它们当中必然会有某些进程无法运行,超过空间的进程就会崩溃了。
4 j6 E' y: q' @+ s6 o; A
% R9 j3 a$ I9 Z/ f% {' d. y1 |2.当A进程不小心写了B进程使用的地址空间时,那么B进程在执行时行为会无法预测,太危险了。6 R) l' n5 C. r! @4 U
; M! ]- h7 T3 B" C+ g
一直这样做也会使得物理存储器特别容易损坏。
2 {& f6 ?" B! }) b2 F0 ^# `2 \2 l1 V, q* M; t  R& V$ T$ B
       为了更好地有效管理存储器并且不出错,现在的主流系统(unix/windows)都提供了虚拟内存管理机制,将逻辑存储地址与实际物理地址区分开来。并且虚存为每个进程都提供一个独立的,同等大小的私有地址空间。: F+ l# a0 `) A7 \, f

5 S) u) j$ f6 Z& q9 o& b; u+ j* q一. 虚拟寻址
, g/ K6 G) w* M0 w  |9 ]# U- U" t7 ?% O& A

, K! Y' G) m6 P8 X0 M# X# b2 n& @7 f" G
图中的MMU是CPU芯片中用于将虚拟地址转换成物理地址的地址翻译器。* f; K6 a' o; Z$ P$ z% V

0 ~# H4 ?- U! U7 G5 r/ V首先忽略高级缓存L1,我们只看处理器,MMU,还有物理存储器。8 v* p; q6 b& w$ z8 ~, ]

8 |% A$ |$ d& S2 q1 N  U* j处理器只管寻址虚拟地址,交给MMU,MMU翻译成物理地址,到物理存储器中取指令或数据。
# A! W6 l1 D0 @3 W4 D3 _7 l+ ^& h0 m7 y
早期的PC和现在的数字信号处理器比如DSP,单片机等用的还是直接物理寻址,没有虚存机制。不过目前的计算机系统大都提供虚存机制。
# L) f$ Z7 k0 v2 l0 @8 f" F: T
8 {9 M* B+ P9 ^* F3 V3 j
; c3 t& T1 Z$ J9 E6 A) y8 h  [二. 地址空间
6 m7 T: m4 U1 J/ I# S/ a% x, p
1 |) o- P0 d/ ^) o如果是虚存寻址,那么虚存空间可以完全和物理存储在逻辑上独立开来,容量也可以不受实际物理存储器的大小限制。那么实际虚存容量究竟有多大呢?以前在本科上课的时候听老师说过是4G,当时就郁闷过,如果一个进程所需空间大于4G怎么办,而且4G也不大啊。。。然后发现老师说的并不准确,确实虚存的大小要CPU地址总线长度有关系,如果是32位的CPU,那么2的32次方是4G。如果是64位的CPU(目前PC基本都是64位的,32位绝种了),那么2的64次方是4G*4G(太大了,天文数字)。。。因为太大了,远远超过目前实际所需,所以CPU生产厂商限制了地址位长。
9 J  J2 s) Q% {1 B( O6 {3 |3 d1 I# w  S" N( b
4 e/ _( S# C5 o+ s$ n1 Z- p3 T
三.虚拟存储器结构
; V0 N) I' q1 ^% s9 T0 [8 x$ _/ O* r
概念上讲,虚拟存储器(VM)被组织为一个由存放在磁盘(注意是磁盘!!!)上的N个连续的字节大小的单元组成的数组。每个字节都有一个唯一的虚拟地址,这个唯一的虚拟地址是作为到数组的索引。
6 r/ a# m/ X+ A; w3 N& Y8 ~& b4 I2 G7 I/ g- u
虚拟存储器以虚拟页为单位,每个页有P个字节。
0 G' ^! K3 V* x6 f2 {
4 U! Z8 o8 ^! v1 h物理内存也是以页为单位区别的,每个页也是P个字节,不过是叫物理页。
! m  S4 Z  `( m' t
3 ~1 J+ {* @+ i$ \6 Y& w虚拟存储机制是用物理内存做为缓存的,下面我们来看一下:
* g* m7 ~" {' E
" s, i/ Q+ u" E; R* ~6 r
游客,如果您要查看本帖隐藏内容请回复
8 T) A7 {2 s1 T; O& Z
/ R* ^* @/ h+ e

4 E7 l9 o5 H7 G" \! o
8 R# x1 s4 T4 N

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 00:39 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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