在不使用存储器抽象的情况下运行多个程序,内存会同时装载多个程序,但是,在编写程序时每个程序都有自身的相对地址,如果装载多个程序在内存中,地址不变,就会导致,程序地址错误。
基址寄存器与界限寄存器
我们可以使用一张表来记录程序的起始地址和程序的长度装载到界限寄存器中。
通过程序段的原始地址,加上基地址得到实际内存地址。
内存管理
使用位图进行内存管理
内存被划分为多个存储单元,每一个存储单元都是链表中一个元素,如果需要内存,就会查找位图,碰到能装下进程的位置,就会占有该位置。
使用链表的存储管理
管理方法是维护一个已分配内存段和空闲区内存段的链表,这样,如果新的进程需要分配内存,可以在空闲区内存段的链表中找到能够容纳进程的位置。
有几种方法对新的进程进行分配内存。
首次适配
如果找到空闲区的位置并且能够容纳该进程,就会装载到该位置。
下次适配
与首次适配相似,不同的是,每次找到合适的空闲区就会记录到此位置,下次寻找空闲位置时,就会从该节点进行查找。
最佳适配
这种方法是搜索整个链表,找到与进程所需内存大小最接近的空闲区的位置。
需要注意的是,此算法,比前两个算法会浪费更多的内存,因为会产生更多的小空闲区。
最差适配
每次分配的内存空间都是最大的可用空闲区。