内部碎片:
等大的固定分区
由于被装入的数据块小于分区大小,从而导致分区内部有空间浪费
外部碎片:
动态分区
所有分区外的存储空间变得越来越多的碎片,这和前面所讲的内部碎片正好相对。
压缩:
克服外部碎片的一种方式
操作系统不断的移动进程,使得进程在所有空闲的空间上连城一片。
压缩的难点在于这是一个非常费时间的过程,并且非常占用处理器的时间。
并且需要动态重定位的能力,将程序从一片区域移动到另一片区域。
放置算法:
最佳适配,首次适配,下次适配
固定分区方案限制了活动进程的数目如果可用分区的大小和进程大小非常不匹配,则内存空间利用率非常低。
动态分配方案的维护特别复杂,并且引入了进行压缩的额外开销。
重定向:
当进程被换入换出时在内存中移动的时候,指令和数据单元的位置会发生改变。
逻辑地址:与当前数据在内存中的物理分配地址无关的访问地址,在执行对内存的访问之前必须把它转换成物理地址。
相对地址:是逻辑地址的一个特例,是相对某些已知点(通常是程序开始处)的存储单元。
物理地址:或者绝对地址,是数据在内存中的实际位置。
基址寄存器,界限寄存器
分页:
页框,页表
规定页和页框的大小必须是2的幂。
一个n+m位的地址,最左边的n位是页号,最右边的m位是偏移量。
将内存分成大小相同的固定的块,且块的大小相对比较小。
每个进程仅仅浪费的是进程最后一页的一小部分形成的内部碎片,没有任何外部碎片。
操作系统需要给每一个进程维护一个页表,页表给出该进程的每一页对应的页框的位置。
给出逻辑地址(页号,偏移量)处理器使用页表产生物理地址(页框号,偏移量)。
每个页表项包含内存中用于保存相应页的页框的页框号。
好处:采用分页技术的分区相当小,一个程序可以占据多个分区,并且这些分区不需要是连续的。
总而言之,采用单分页技术,内存被分为许多大小相等且很小的页框,每个进程同样被划分为同样大小的页,较小的进程需要较少的页,较大的进程需要较大的页。当一个进程被装入的时候,所有的页都被装入到可用的页框当中,并且建立一个页表。
分段:
可以把程序和其相关的数据划分到几个段当中。逻辑地址也是由两部分组成:段号和偏移量。
段的大小不相等。
消除了内部碎片,但是产生外部碎片。
因为段的长度不固定,所以段表必须给出相应段在内存当中的起始位置还必须指明段的长度。
总之,进程被划分成了很多的段,这些段大小不需要相等。当一个进程被调入时,所有的段都被装载到内存当中,并且建立一个段表。
缓冲区溢出,内存越界问题:
定义:输入到一个缓冲区或者数据保存区域的数据量超过了其容量,从而导致覆盖了其他信息的一种状况。攻击者造成并且利用这种状况使得系统崩溃或者通过插入特制的代码来控制系统。
未经任何检查的向缓冲区复制数据的行为都有可能导致相邻存储单元数据毁坏。