下面我们来讨论
段页式存储管理
那段页式存储管理呢
实际上是我们前面段式和页式
想把它做结合
那这种结合的思路呢
实际上是由于段式存储
它分的块比较大
每一块里头的
存储的内容是同一个段
这同一个段的访问方式和存储的数据
都是相同的或者相类似的
在这样一来的话
它去做存储的保护是比较方便的
而另一种做法 页式存储
它是由于分了很小的标准大小的块
那这样的话它在内存利用效率
内存和外存之间的存储的后备
这方面呢它是会比较有优势
那这时候自然就会说
这两种做法各有各自优缺点
我们有可能把它结合吗
那这就是说把段式和页式结合起来
这种直观想法呢也很简单
实际上做起来的时候呢会是啥样的
段页式存储管理的机制呢
它的做法呢是在段式存储管理基础上
给每一个段呢加一级页表
那我们原来说逻辑地址到物理地址
这逻辑地址怎么分呢
原来是要么是段号加段内偏移
要么是页号加页内偏移
变成是段号 页号然后再加上页内偏移
如果说你在这个页表里头再是多级页表
那这个地方页表还可以再分成多级
然后从这儿呢
最后变到的是物理页号加页内偏移
那它怎么来做呢
首先是段号由进程的段基址
找到相应的段表基址
找到相应的段表项
这个段表项里头呢
有相应段的段长度和段基址
那这些呢加在一起 我们得到一个
相应段的页表的基址
好 这个再加上页号
我就可以得到相应的页表项
页表项里头呢就有
对应的物理页的页号
物理页帧号
这个页帧号和你的页内偏移加在一起
就可以访问到实际的物理存储单元了
那这种做法呢
它可以在这个基础上
我可以很方便地
实现我们的内存共享
那么共享的办法是什么呢
我可以在段表的基址上
加上一个共享段
指向相同的页表
那这两个段就共享了
那我们具体看一下
这是我们一个段页式的访问方式
段表其中有一个段指向它的页表
它的页表指向它的存储地址空间
那如果说我想把这个段
和另一个进程共享怎么办
另一个进程它有自己的段表
那么这里头我们俩是同一个段
这是我指向同一个页表
那这一块区域
那就变成是它们俩共享的
那我们看到这里头呢
在页式 段式和段页式里头呢
这共享的做法呢都是类似的
好 到这个地方为止
我们说清楚了
非连续内存分配的几种做法
段式 页式和段页式
它们的共同点呢是
我分配给一个进程的内存块
它是可以不连续的
那它们的区别是在于
我在这里头分配块大小有不同
段式分配的块是很大的
以一个段为单位
页式分配的块是很小的
以你比如说是1K几K这种尺度
作为一个最小单位
而段页式呢是把这两种结合起来
把这种非连续内存分配做法里
所面临的问题就是
中间要加一级页表或者段表
这个表的加入会使得
我原来连续存储方式里所没有的
一些问题在这里出现
比如说页表大小很大
针对这种做法我们又有一系列的做法
比如说像快表做缓存
比如像多级页表做间接存储访问
或者说反置页表
那这些做法都可以改进我们
由于引入非连续存储所带来的麻烦
那当然我们在这里说的
是它的基本做法
在实际系统里
做法跟基本原理都是类似的
但是其中有很多的实现细节
需要我们在后续阅读当中
来进一步了解
好 今天的课就上到这里 下课