Open vaakian opened 4 years ago
这里有一个疑问,在9.4时,JOB3可以正常进入内存,那么是他和剩余的JOB2竞争,还是在9.4同一时刻JOB2先进入CPU,然后JOB3进入内存?
作业名 | 进入输入井时间 | 进入内存时间 | 开始执行时间 | 计算时间 | 完成时间 | 周转时间 |
---|---|---|---|---|---|---|
JOB1 | 8.0 | 8.0 | 8.0 | 1.0 | 9.0 | 1.0 |
JOB2 | 8.2 | 8.2 | 9.9 | 0.6 | 10.5 | 2.3 |
JOB3 | 8.4 | 9.4 | 9.4 | 0.5 | 9.9 | 1.5 |
JOB4 | 8.6 | 8.6 | 9.0 | 0.4 | 9.4 | 0.8 |
前景概要:
固定分区:一个进程只能使用一个分区。缺点是不能满足大内存进程,且小进程占用一个固定分区会产生较大的碎片。 动态分区:为每一个进程动态分配分区大小,但当进程回收后,后来的进程无法完全匹配该分区大小,会产生大大小小不同的碎片。 以上两种分区管理方法,都是一个程序占用一个连续的内存块(分区),操作系统可以较为方便的将内存的物理地址和相对地址(逻辑地址)进行转换。而分页式管理方法,是将程序划分成若干个小块,将各个块分布在不连续的页框(大大小小相等的分区、每个分区就是一个页框),页框越小,则产生的碎片就越小。但此时,需要一种新的方法,将程序的逻辑地址和物理地址进行映射。
example:若进程需要23MB内存,而每个内存固定分区只有10mb,显然装不下。 那么才用分页管理,将进程划分为10mb+10mb+3mb分别装入三个分散的分区,就只产生了7mb碎片。若将固定分区进一步划分成2m,那么进程可以装入11*2mb+1mb,这样就产生了1mb的碎片,进一步提高了内存利用率。
将内存空间分为一个个相等的分区,每个分区叫做页框(或内存块、页帧、物理块),每个页框有一个编号,即“页框号“(或内存块号、页帧号、物理块号),页框号从0开始。
逻辑地址组成:页号 + 页内偏移量
获取地址:物理地址=页内偏移地址+页基地址
页号=get页号(逻辑地址) 页内偏移地址=get页内偏移地址(逻辑地址)
物理地址=get页基地址(页号)+页内偏移量
商是页号、余数是页内偏移
一、存储器分区
静态分区、动态分区。
内存分配匹配算法:
从可用分区链表中,从链头开始寻找,使用第一个能够满足程序的分区。
最佳匹配
从可用分区链表中,从链表头开始寻找,使用与程序所需大小最相近的分区,避免产生较大的分区碎片。 or 可用分区链表按尺寸从小到大排序。
最坏匹配
从可用分区链表中,从链表头开始寻找,使用满足程序大小且剩余空间最大的, or 将可用分区链表按尺寸从大到小排序。
列题
已知主存256K, 0S占用低位16K,现有一作业序列如下: J1要求134K,J2要求30K,J3要求64K,J1完成,J3完成,J4要求60K,J5要求62K, J2完成,J6要求12K, J7要求32K.试用最佳适应法为上述作业分配主存,画出主存分配情况和自由主存队列。(分配时,高地址处作为已分配区)
注意:在内存回收时,涉及到与相邻的空闲空间合并
二、存储器保护
防止程序越界,限制程序访问空间。
程序访问内存时,将访问的相对地址(基地址+偏移地址,偏移地址[相对地址]不应该有负数)和限长寄存器比较,如果超过限长寄存器,则发出越界信号。
程序访问内存时,将访问的内存地址和上下界比较,如果超过上界或下界,则发出越界信号。
下界<= 程序可访问的内存<=上界