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