chap4(29-30).pptVIP

  • 0
  • 0
  • 约7.07千字
  • 约 44页
  • 2017-03-26 发布于贵州
  • 举报
chap4(29-30)chap4(29-30)

内存分配 任务:OS为进入内存的作业分配、回收内存空间的方法。 方式: 连续分配方式:为整个作业分配一段连续的内存空间中。 单一连续分配 固定分区分配 动态分区分配 可重定位分区分配 内存分配 离散分配方式:将整个作业划分成若干块(页或段),块与块可以存储在不连续的内存空间中。 基于分页的内存分配方式:基本分页、请求分页 基于分段的内存分配方式:基本分段、请求分段 将段、页结合在一起:基本段页、请求段页 内存分配 每种内存分配方式需要掌握的内容 该内存分配方式的基本思想 实现时使用的数据结构(******表) 内存的分配与回收过程 逻辑地址到物理地址的转换 存储保护如何实现 该内存分配方式存在的不足 连续分配方式 单一连续分区:任何时刻内存用户区只有一道作业 连续分配方式 固定分区分配:将用户区划分成若干个分区,使用分区说明表记录每个分区的信息。 连续分配方式 动态分区分配:只要内存空间允许就可以将请求的作业装入内存。 连续分配方式 需要的数据结构 空闲分区表:记录空闲分区的变化情况 分区使用表:记录内存的占用情况 连续分配方式 数据类型定义 typedef struct {int no; int add; int size; int status; } EMP; 变量定义:EMP emp_list[10];//空闲分区表 USE use_list[10];//使用分区表 连续分配方式 作业A需要空间大小为S,要求进入内存时: 1.从emp_list中找到满足下面条件分区 emp_list[i].状态=1 emp_list[i].大小=S 2.if(没找到) 作业仍在后备队列中等待 else { k= emp_list[i].大小 -S; if (k==0) emp_list[i].状态=0; 连续分配方式 else {emp_list[i].大小-=S; emp_list[i].始址 +=S; } 从use_list中找一个状态为“0”的空表目; 将作业名、始址、大小等信息记入该表目中; 并将状态修改为“1”; } 4、2 连续分配方式 作业A执行结束要求撤离内存时: 1.按作业名从use_list找满足下列条件的记录 use_list [i].状态=1 use_list [i].作业 ==’A’ 2.找到后,将 use_list [i].状态=0; add= use_list [i].始址; length= use_list [i].大小; 4、2 连续分配方式 3.从emp_list中查找 if(emp_list[i].始址+emp_list[i].大小==add) if (add+length== emp_list[j].始址) {emp_list[i].大小+=length+emp_list[j].大小 emp_list[j].状态=0;} else emp_list[i].大小+=length; else 4、2 连续分配方式 if (add+length== emp_list[i].始址) {emp_list[i].大小+=length; emp_list[i].始址=add;} else { 从emp_list中找状态为“0”的表目; 将add、length等信息填入该表目; 将状态修改为”1“; } 4、2 连续分配方式 分区分配算法:从”空闲分区表“中给作业查找合适分区的算法。 首次适应算法: 循环首次适应算法 最佳适应算法 对于同样的请求序列,采用不同的分区分配算法,内存的使用情况是不同的。 4、2 连续分配方式 (1)首次适应算法FF ①”空闲分区表“按空闲分区的地址从小到大的顺序登记 ②查

文档评论(0)

1亿VIP精品文档

相关文档