首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

C 算法 -链表在页帧跟页面转换的应用

2012-12-29 
C 算法 -----链表在页帧和页面转换的应用1 、单链表在页帧管理的应用在一些支持虚拟内存的系统中有关链表的

C 算法 -----链表在页帧和页面转换的应用
1 、单链表在页帧管理的应用       在一些支持虚拟内存的系统中有关链表的运用,虚拟内存是一种地址空间的映射机制,它允许进程不必完全加载到物理内存中也可以得到运行。这种方式的一个突出优点就是进程可以使用比熊实际所允许的物理内存大得多的地址空间。另外一个优点是多个进程能够共享的内存以并发的方式运行。    先简单的介绍Linux操作系统存储管理方式,Linux系统采用请求式分页虚拟内存管理的方式,系统为每个进程提供了4GB的虚拟内存空间。各个进程的虚拟内存彼此独立。    那么这样运行在虚拟内存机制下的进程需要处理虚拟地址。这些地址对于虚拟内存来说就行物理内存地址一样,但是使用前必须要有操作系统做转换,由专门的硬件所支持的页表来快速执行地址的转换工作。每个进程都有自己的页表,将它的虚拟地址空间中的页映射到物理内存中的页帧上。当某个进程引用一个虚拟地址时,页表中的某项需要见车并决定页关联到那个物理的页帧上(见下图)。

C 算法 -链表在页帧跟页面转换的应用

  页帧管理的函数的是实现 这里只介绍页帧管理中的2个重要的函数 alloc_frame  free_frame。使用链表来维护可供分配的页帧,函数alloc_frame从空闲的页帧链表中货物空闲的页帧好。给定某个特定的页。将页帧号放在特定的页表中来检查该页面应对应哪个物理的页帧。当页面从物理内存中移除的时候,函数free_frame接受一个页帧号并将其放回到空闲页帧链表中。使用链表来管理页帧是一个非常好的办法,因为页帧的分配涉及到频繁的插入和删除操作,这些操作都定义在链表的头。下面为具体函数的实现,涉及到前面所定义的单链表的函数。
/*frames.c */#include <stdlib.h>#include "frames.h"#include "../include/list.h"/*alloc_frame */int alloc_frame(List *frames,int frame_number){   int *data;   /* Allocate storage for the frame number */   if ((data = (int *)malloc(sizeof(int))) == NULL){        return -1;    }   *data  = frame_number;   if(list_ins_next(frames, NULL, data) != 0){        return -1;    }   return 0;}int free_frame(list *frames){    int frame_number,*data;    if (list_size(frames) == 0)        return -1;    else {        if (list_rem_next(frames, NULL, (void **)& data) != 0){            return -1;            } else {            frame_number = *data;            free(data);            }    }    return frame_number;}


 

热点排行