分页存储:
一段程序在采取分页存储的方式时,这段程序会被编译成为一大段机器指令,这些指令之间地址是连续的
采用分页机制后,则相邻两页的存储地址是连续的。比如第0页的最后一个地址和第1页的第一个地址是连续的(这里的地址是指逻辑地址)——此时就相当于只需要提供一个地址,就能够得到页号和偏移量
——————————
若采用分段机制,则这段程序就会被编译程序编译成多个段,比如数据段、代码段、附加段等,每个段的段号是编译器自动分配的,每个段的长度不定,因此虽然数据段、代码段的段号是0-1连续的,但是数据段的最后一个地址和代码段的第一个地址是不连续的,所以我们在提供此时的地址时,即需要提供段号,又需要提供段内的偏移地址。所以称分段存储的地址空间是二维的
——————————
若不能理解,可这样理解:
因为分页存储的页的大小是相同的。所以我们只需要提供一个逻辑地址就能够求出其所在的页号和页内偏移地址。如逻辑地址为2049,页的大小的1k,则此逻辑地址所指向的位置在第(2049/2)=2页,偏移地址为(2049➗2)=1处。
而分段存储的段大小是在程序员进行编程时认为设定的。比如编辑时设置main函数和其他作用函数,则把main函数和其他作用函数分别作为一个段。这些段的大小自然不会是相同的。如果我们只给定一个逻辑地址时。我们并不能够求出其所在的段号和段偏移量。所以可以理解为我们需要提供两个逻辑地址,分别表示其段号和段偏移量,在计算机给出这个逻辑地址时将其合二为一形成我们最后所看到的逻辑地址。(这是为了记忆方便的理解,不是准确原理!)所以分段存储的地址空间是二维的,分页存储的地址空间是一维的。当然的,段页式存储的地址空间是二维的。
2020-10-16 OS复习内存管理处