void replacePageByFIFO(int memoryList[], int phyNum, int strList[], int pageNum) { int replaceCount = 0; //置换次数 int missingCount = 0; //缺页次数 int pointer = 0; //记录当前最早进入内存的下标 int isVisited = 0;//记录当前页面的访问情况: 0表示未访问,1表示已访问 for (int i = 0; i < pageNum; i++) { isVisited = 0; //判断是否需要置换,内存已满且需要访问的页面不在内存中 for (int j = 0; j < phyNum; j++) { if (memoryList[j] == strList[i]) { //1.该页面已经存在内存中 //修改访问情况 isVisited = 1; //修改访问时间 printf("%d\t", strList[i]); printf("\n"); break; } if (memoryList[j] == -1) { //2.页面不在内存中且内存未满则直接存入即可 memoryList[j] = strList[i]; //修改访问情况 isVisited = 1; missingCount++; printf("%d\t", strList[i]); showMemoryList(memoryList, phyNum); break; } } //当前页面还未被访问过,需要进行页面置换 if (!isVisited) { //直接把这个页面存到所记录的下标中 memoryList[pointer] = strList[i]; pointer++; //下标指向下一个 //如果到了最后一个,将下标归零 if (pointer > phyNum - 1) { pointer = 0; } missingCount++; replaceCount++; printf("%d\t", strList[i]); showMemoryList(memoryList, phyNum); } } informationCount(missingCount, replaceCount, pageNum); }
时间: 2024-02-10 20:06:37 浏览: 51
第三章 LinkedList源码解析1
这是一个基于FIFO算法的页面置换函数,用于模拟操作系统中的页面置换过程。其中,memoryList表示当前内存中的页面状态,phyNum表示物理块的数量,strList保存了所有页面的访问顺序,pageNum表示页面数量。算法的具体实现过程如下:
1. 遍历strList中的所有页面,对于每个页面进行如下判断:
2. 如果该页面已经在内存中,则不需要进行任何操作。
3. 如果该页面不在内存中且内存未满,则直接将该页面存入内存,并将缺页次数加1。
4. 如果该页面不在内存中且内存已满,则需要进行页面置换。按照FIFO算法的原则,选择当前最早进入内存的页面进行置换,并将缺页次数和置换次数都加1。
在算法执行过程中,会调用informationCount函数对算法的结果进行分析,并调用showMemoryList函数展示当前内存中的页面状态。
你有什么需要我解释的吗?
阅读全文