Chinaunix首页 | 论坛 | 博客
  • 博客访问: 766190
  • 博文数量: 370
  • 博客积分: 2334
  • 博客等级: 大尉
  • 技术积分: 3222
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-06 16:56
文章分类

全部博文(370)

文章存档

2013年(2)

2012年(368)

分类:

2012-06-09 15:06:36

原文地址:存储管理 作者:flychenxu

一、存储器分为两类:内存储器(内存)和外存储器(外存)。CPU只能直接访问内存。
 
二、存储体系结构:高速缓存——内存——外存,容量逐渐降低,存储速度逐渐降低。
 
三、存储管理的任务:内存的分配和管理;内存共享;存储保护;内存扩充;地址映射。
 
四、内存空间分为两个部分:系统区,存放操作系统且常驻内存;用户区,分配给用户使用。
 
五、存储管理方案:分区管理、页式管理、段式管理、段页式管理。
 
六、分区管理
   1. 是能够满足多道程序设计的最简单的存储管理方案。其基本思想是把内存划分为若干个连续区域,每个分区装入一个运行程序。分区的方式分为固定分区和可变分区。
   2. 固定分区是指系统先把内存划分成若干个大小固定的分区,一旦划分好,在系统运行期间不能在划分。为了满足不同程序的要求,各分区的大小可以不同。由于分区的大小已经固定,因此就限制了程序的大小。
   3. 固定分区中采用分区说明表来管理,分区说明表有三个表目:区号、大小、起始地址、状态。具体的形式如下图所示:
 区号  大小  起始地址 状态
1 8K  16K  占用 
16K  32K  空闲 
32K  64K  占用 
64K  128K  空闲 
128K  256K  空闲 
 操作系统区(0——8K)
 分区1(8K——16K)作业A
 分区2(16K——32K)
 分区3(32K——64K)作业B
 分区4(64K——128K)
 分区5(128K——256K)
 
 分区说明表                 固定分区示例
  4. 固定分区虽然可以使多个程序共存于内存中,但不能充分利用内存。因为一个程序的大小,不可能刚好等于某个分区的大小。另外可接纳程序的大小也受到分区大小的严格限制。
  5. 可变分区:是指系统不预先划分固定分区,而是在装入程序时划分,使为程序分配的分区大小正好等于该程序的需求量,且分区的个数是可变的。
  6. 可变分区的管理:由两张表来管理,一张是已分配区表,一张是空闲区表。
  7. 分配策略:(适合两种分区算法)
     首先适应算法:查找分区说明表,找到第一个满足申请长度的空闲区分配,然后修改分区说明表。
     最佳适应算法:查找分区说明表,找到第一个能满足申请长度的最小空闲区,然后修改分区说明表,容易造成很多碎片。
     最坏适应算法:查找分区说明表,找到能满足申请长度的最大空闲区,然后修改分区说明表,这种方式可能会造成后来的大程序不能被容纳。
  8. 碎片问题:利用拼接技术来实现。
  9. 分区的回收:根据回收分区的上下邻是否空闲来实施分区回收。
  10. 分区管理的优点:简单,缺点是对内存的利用不充分,同时只有将整个程序装入内存才能运行,因此不能利用虚拟内存技术。

. 分页存储管理

1.基本思想

用户程序的地址空间被划分成若干固定大小的区域,称为“页”,相应地,内存空间分成若干个物理块,页和块的大小相等。可将用户程序的任一页放在内存的任一块中,实现了离散分配。

2. 分页存储管理的地址机构

15          12         11                  0

     页号P                 页内位移量W

页号4位,每个作业最多24次方=16页,表示页号从0000~111124-1),页内位移量的位数表示页的大小,若页内位移量12位,则212次方=4k,页的大小为4k,页内地址从000000000000~111111111111

若给定一个逻辑地址为A,页面大小为L,则

页号P=INT[A/L],页内地址W=A  MOD  L

3. 页表

分页系统中,允许将进程的每一页离散地存储在内存的任一物理块中,为了能在内存中找到每个页面对应的物理块,系统为每个进程建立一张页面映射表,简称页表。页表的作用是实现从页号到物理块号的地址映射。

页表:

页号 物理块号 存取控制   

  0        2    

  1       15F    

  2       14E    

  3       1  

4. 地址变换

1 程序执行时,从PCB中取出页表始址和页表长度(4),装入页表寄存器PTR

2 由分页地址变换机构将逻辑地址自动分成页号和页内地址。

例:11406D=0010|110010001110B=2C8EH

      页号为2,位移量为C8EH=3214D

11406  DIV  4096=2

     11406  MOD  4096=3214

3 将页号与页表长度进行比较(2<4),若页号大于或等于页表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。

4 将页表始址与页号和页表项长度的乘积相加,便得到该页表项在页表中的位置。

5 取出页描述子得到该页的物理块号。  2       14E

6 对该页的存取控制进行检查。

7 将物理块号送入物理地址寄存器中,再将有效地址寄存器中的页内地址直接送入物理地址寄存器的块内地址字段中,拼接得到实际的物理地址。

例:0010|110010001101B

1110|110010001101B=EC8EH=60558D

14*4096+3214=60558D

5. 具有快表的地址变换机构

分页系统中,CPU每次要存取一个数据,都要两次访问内存(访问页表、访问实际物理地址)。为提高地址变换速度,增设一个具有并行查询能力的特殊高速缓冲存储器,称为“联想存储器”或“快表”,存放当前访问的页表项。 

八.分段存储管理

1.基本思想

将用户程序地址空间分成若干个大小不等的段,每段可以定义一组相对完整的逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。

2. 分段存储方式的引入

方便编程

分段共享

分段保护

动态链接

动态增长

3. 分段地址结构

作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。例程序段、数据段等。每个段都从0开始编址,并采用一段连续的地址空间。

段的长度由相应的逻辑信息组的长度决定,因而各段长度不等。整个作业的地址空间是二维的。

15           12   11                  0

       段号            段内位移量

段号4位,每个作业最多24=16段,表示段号从0000~111124-1);段内位移量12位,212=4k,表示每段的段内地址最大为4K(各段长度不同),从000000000000~111111111111

4. 段表

段号 段长 起始地址 存取控制   

0     1K     4096    

1     4K     17500    

2     2K     8192  

5. 地址变换

(1). 程序执行时,从PCB中取出段表始址和段表长度(3),装入段表寄存器。

(2). 由分段地址变换机构将逻辑地址自动分成段号和段内地址。

例:7310D=0001|110010001110B=1C8EH

段号为1,位移量为C8EH=3214D

(3). 将段号与段表长度进行比较(1<3),若段号大于或等于段表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。

(4). 将段表始址与段号和段表项长度的乘积相加,便得到该段表项在段表中的位置。

(5). 取出段描述子得到该段的起始物理地址。1         4K             17500

(6). 检查段内位移量是否超出该段的段长(3214<4K),若超过,产生越界中断。

(7). 对该段的存取控制进行检查。

(8). 将该段基址和段内地址相加,得到实际的物理地址。

例:0001|110010001101B

起始地址17500D+段内地址3214D=20714D

九.分页与分段的主要区别

分页和分段有许多相似之处,比如两者都不要求作业连续存放.但在概念上两者完全不同,主要表现在以下几个方面:

(1)页是信息的物理单位,分页是为了实现非连续分配,以便解决内存碎片问题,或者说分页是由于系统管理的需要.段是信息的逻辑单位,它含有一组意义相对完整的信息,分段的目的是为了更好地实现共享,满足用户的需要.

(2)页的大小固定,由系统确定,将逻辑地址划分为页号和页内地址是由机器硬件实现的.而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时根据信息的性质来划分.

(3)分页的作业地址空间是一维的.分段的地址空间是二维的.

十.段页式存储管理

1.基本思想:

分页系统能有效地提高内存的利用率,而分段系统能反映程序的逻辑结构,便于段的共享与保护,将分页与分段两种存储方式结合起来,就形成了段页式存储管理方式。

在段页式存储管理系统中,作业的地址空间首先被分成若干个逻辑分段,每段都有自己的段号,然后再将每段分成若干个大小相等的页。对于主存空间也分成大小相等的页,主存的分配以页为单位。

段页式系统中,作业的地址结构包含三部分的内容:段号      页号       页内位移量

程序员按照分段系统的地址结构将地址分为段号与段内位移量,地址变换机构将段内位移量分解为页号和页内位移量。

为实现段页式存储管理,系统应为每个进程设置一个段表,包括每段的段号,该段的页表始址和页表长度。每个段有自己的页表,记录段中的每一页的页号和存放在主存中的物理块号。

2.地址变换的过程:

1)程序执行时,从PCB中取出段表始址和段表长度,装入段表寄存器。

2)由地址变换机构将逻辑地址自动分成段号、页号和页内地址。

3)将段号与段表长度进行比较,若段号大于或等于段表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。

4)将段表始址与段号和段表项长度的乘积相加,便得到该段表项在段表中的位置。

5)取出段描述子得到该段的页表始址和页表长度。

6)将页号与页表长度进行比较,若页号大于或等于页表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。

7)将页表始址与页号和页表项长度的乘积相加,便得到该页表项在页表中的位置。

8)取出页描述子得到该页的物理块号。

9)对该页的存取控制进行检查。

10)将物理块号送入物理地址寄存器中,再将有效地址寄存器中的页内地址直接送入物理地址寄存器的块内地址字段中,拼接得到实际的物理地址。

 

十一、覆盖技术

覆盖是指一个作业的若干程序段或几个作业的某些部分共享某一个存储空间。覆盖技术的实现是把程序划分为若干个功能上相对独立的程序段,按照其自身的逻辑结构使那些不会同时执行的程序段共享同一块内存区域。

 

十二、交换技术

进程从内存移到磁盘,并在移回内存称为交换。交换技术是进程在内存与外存之间的动态调度,是由操作系统控制的。交换可以发生在不同的进程或作业之间,而覆盖发生在同一进程或作业内部而且只能覆盖那些与覆盖段无关的程序段。

 

十三、虚拟存储管理

不管是分区,页式、段式、段页式管理都有一个共同的问题,即整个程序必须一次全部放入内存,才能运行,如果一个程序的大小大于内存空间,那么也就不能运行。于是引入虚拟存储技术,其基本思想是利用大容量的外存来扩充内存,产生一个比有限的实际内存空间大得多的、逻辑的虚拟内存空间,以便能够有效地支持多道程序系统的实现和大型程序运行的需要,从而增强系统的处理能力。 虚拟存储空间简称虚存。

把内存和外存有机地结合起来使用,从而得到一个容量很大的,速度足够快的“内存”,这就是虚拟存储器,简称虚存。

虚拟存储器需要有以下的硬件支持:系统有一个容量足够大的外存;系统有一个一定容量的内存;硬件提供实现虚、实地址映射的机制。

虚拟存储技术是指当进程开始运行时,先将一部分程序装入内存,另一部分暂时留在外存,当要执行的指令不在内存时,由系统自动完成将它们从外存调入内存的工作,当没有足够的内存空间时,系统自动选择部分内存空间,将其中原有的内容交换到磁盘上,并释放这些内存空间供其他进程使用。

虚拟存储技术分为虚拟页式存储管理和虚拟段式存储管理。

 

十四、虚拟页式存储管理

基本工作原理:在进程开始运行之前,不是装入全部页面,而是装入一个或零个页面,之后根据进程运行的需要,动态装入其他页面,当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面。

在地址映射过程中,若在页表中发现所要访问的页面不在内存,则产生缺页中断。

页面置换算法:理想页面置换算法;先进先出页面置换算法;最近最少使用页面置换算法。

例子:计算缺页次数

某程序在内存中分配三页,初始为空,页面走向为432143543215

 FIFO 

 页1

 4

 3

 2

 1

 4

 3

 5

 5

 5

 2

 1

 1

 页2

 

 4

 3

 2

 1

 4

 3

 3

 3

 5

 2

 2

 页3

 

 

 4

 3

 2

 1

 4

 4

 4

 3

 5

 5

(×缺页 √不缺页)

 ×

 ×

 ×

 ×

 ×

 ×

 ×

 

 

 ×

 ×

 

共发生9次缺页中断。

LRU:最近最少使用页面置换算法

 LRU

 4

4

 3

 2 

 5 

 页1

 4

 3

 2

 1

 4

 3

 5

 4

 3

 2

 1

 5

 页2

 

 4

 3

 2

 1

 4

 3

 5

 4

 3

 2

 1

 页3

 

 

 4

 3

 2

 1

 4

 3

 5

 4

 3

 2

 (×缺页 不缺页)

 ×

 ×

 ×

 ×

 ×

 ×

 ×

 

 

 ×

 ×

 ×

共发生10次缺页中断。

 OPT

 4

 1 

 5 

 页1

 4

 3

 2

 1

 1

 1

 5

 5

 5

 2

 1

 1

 页2

 

 4

 3

 3

 3

 3

 3

 3

 3

 5

 5

 5

 页3

 

 

 4

 4

 4

 4

 4

 4

 4

 4

 4

 4

 ×缺页 不缺页

 ×

 ×

 ×

 ×

 

 

 ×

 

 

 ×

 ×

 

共发生7次缺页中断。

在虚存中,页面在内存与外存之间频繁调度,以至于调度页面所需时间比进程实际运行的时间还多,此时系统效率急剧下降,甚至导致系统崩溃。这种现象称为颠簸或抖动。抖动产生的主要原因是页面置换算法不合理,分配给进程的物理页面数太少。

 

十五、虚拟段式存储管理

基本原理同虚拟页式存储管理相同,在虚拟存储管理中,内存和外存的交换是以段为单位进行的。

 

十六、Linux采用的是虚拟存储技术,用户的虚拟地址空间可达到4GB,且采用了虚拟页式存储管理。

 

阅读(1009) | 评论(0) | 转发(0) |
0

上一篇:死锁

下一篇:嵌入式软件开发

给主人留下些什么吧!~~