操作系统中分页、分段、交换空间、页面置换算法等相关概念

目录

1 分页

2 分段

3 分页和分段的区别

4 交换空间

4.1 虚拟内存

5 页面替换算法

5.1 最佳置换算法(OPT)(理想置换算法)

5.2 先进先出置换算法(FIFO)

5.3 最近最久未使用(LRU)算法

5.4 时钟(CLOCK)置换算法

6 缓冲区溢出


1 分页

        把内存空间划分为大小相等且固定的块,作为主存的基本单位。因为程序数据存储在不同的页面中,而页面又离散的分布在内存中,因此需要一个页表来记录映射关系,以实现从页号到物理块号的映射

        访问分页系统中内存数据需要两次的内存访问 :

  1. 第一次是从内存中访问页表,从中找到指定的物理块号,加上页内偏移得到实际物理地址;
  2. 第二次就是根据第一次得到的物理地址访问内存取出数据。

操作系统中分页、分段、交换空间、页面置换算法等相关概念_第1张图片

2 分段

        分页是为了提高内存利用率,而分段是为了满足程序员在编写代码的时候的一些逻辑需求(比如数据共享,数据保护,动态链接等)。

        分段内存管理当中,地址是二维的,一维是段号,二维是段内地址;其中每个段的长度是不一样的,而且每个段内部都是从0开始编址的

        由于分段管理中,每个段内部是连续内存分配,但是段和段之间是离散分配的,因此也存在一个逻辑地址到物理地址的映射关系,相应的就是段表机制

操作系统中分页、分段、交换空间、页面置换算法等相关概念_第2张图片

3 分页和分段的区别

  • 分页对程序员是透明的,但是分段需要程序员显式划分每个段
  • 分页的地址空间是一维地址空间,分段是二维的
  • 页的大小不可变,段的大小可以动态改变
  • 分页主要用于实现虚拟内存,从而获得更大的地址空间;分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间,并且有助于共享和保护。

4 交换空间

        操作系统把物理内存(physical RAM)分成一块一块的小内存,每一块内存被称为页(page)当内存资源不足时,Linux把某些页的内容转移至硬盘上的一块空间上,以释放内存空间

       硬盘上的那块空间叫做交换空间(swap space),而这一过程被称为交换(swapping)物理内存和交换空间的总容量就是虚拟内存的可用容量

用途:

  • 物理内存不足时一些不常用的页可以被交换出去,腾给系统。
  • 程序启动时很多内存页被用来初始化,之后便不再需要,可以交换出去。

4.1 虚拟内存

        虚拟内存就是说,让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存

        虚拟内存使用部分加载的技术,让一个进程或者资源的某些页面加载进内存,从而能够加载更多的进程,甚至能加载比内存大的进程,这样看起来好像内存变大了,这部分内存其实包含了磁盘或者硬盘,并且就叫做虚拟内存。

5 页面替换算法

        在程序运行过程中,如果要访问的页面不在内存中,就发生缺页中断从而将该页调入内存中。此时如果内存已无空闲空间,系统必须从内存中调出一个页面到磁盘对换区中来腾出空间。

5.1 最佳置换算法(OPT)(理想置换算法)

        所选择的被换出的页面将是最长时间内不再被访问,通常可以保证获得最低的缺页率。

        缺点:这是一种理论上的算法,因为无法知道一个页面多长时间不再被访问。

5.2 先进先出置换算法(FIFO)

        最简单的页面置换算法。这种算法的基本思想是:当需要淘汰一个页面时,总是选择驻留主存时间最长的页面进行淘汰,即先进入主存的页面先淘汰。其理由是:最早调入主存的页面不再被使用的可能性最大。

        缺点:该算法将那些经常被访问的页面也被换出,从而使缺页率升高。

5.3 最近最久未使用(LRU)算法

        虽然无法知道将来要使用的页面情况,但是可以知道过去使用页面的情况。 LRU 将最近最久未使用的页面换出

        为了实现 LRU,需要在内存中维护一个所有页面的链表。当一个页面被访问时,将这个页面移到链表表头。这样就能保证链表表尾的页面是最近最久未访问的。因为每次访问都需要更新链表,因此这种方式实现的 LRU 代价很高。

5.4 时钟(CLOCK)置换算法

         思路:仅对页面的访问情况进行大致统计。

         实现:在页表项中增加访问位,描述页面在过去一段时间的内访问情况,将各页面组织成环形链表,指针指向最先调入的页面,访问页面时,在页表项记录页面访问情况,缺页时,从指针处开始顺序查找未被访问的页面进行置换。

         特点:时钟算法是LRU和FIFO的折中。

6 缓冲区溢出

        缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上。
危害有以下两点:

  • 程序崩溃,导致拒绝额服务。
  • 跳转并且执行一段恶意代码。

        造成缓冲区溢出的主要原因是程序中没有仔细检查用户输入。


 

你可能感兴趣的:(操作系统,操作系统,页面替换算法)