最近最久未使用页面置换算法C语言,LRU页面置换算法模拟(最近最久未使用置换算法)【精品-doc】.doc...

LRU页面置换算法模拟(最近最久未使用置换算法)【精品-doc】

LRU页面置换算法模拟(最近最久未使用置换算法)

一、设计目的

1、用C语言实现最近最久未使用(LRU)置换算法。

2、了解内存分页管理策略

3、掌握调页策略

4、掌握一般常用的调度算法

5、选取调度算法中的典型算法,模拟实现?

二、设计任务

在Window98/2000 系统的TC2.0环境下运行程序;通过从一般常用的调页算法中选取典型算法LRU,了解页面管理的相关细节,并用程序设计实现LRU。?

三、设计内容与步骤

分页存储管理将一个进程的逻辑地址空间分成若干大小相等的片,称为页面或页。

一、调页策略

1)何时调入页面

如果进程的许多页是存放在外存的一个连续区域中,则一次调入若干个相邻的页,会比一次调入一页的效率更高效一些。但如果调入的一批页面中的大多数都 未被访问,则又是低效的。可采用一种以预测为基础的预调页策略,将那些预计在不久之后便会被访问的页面,预先调入内存。如果预测较准确,那么,这种策略显 然是很有吸引力的。但目前预调页的成功率仅为50%。且这种策略主要用于进程的首次调入时,由程序员指出应该先调入哪些页。

2)请求调页策略

当进程在运行中需要访问某部分程序和数据时,若发现其所在的页面不在内存,便即提出请求,由OS将其所需页面调入内存。由请示调页策略所确定调入的 页,是一定会被访问的,再加之请求调页策略比较易于实现,故在目前的虚拟存储器中,大多采用此策略。但这种策略每次仅调入一页,故须花费较大的系统开销, 增加了磁盘I/O的启用频率。

2、从何处调入页面

?????? 在请求分页系统中的外存分为两部分:用于存放文件的文件区和用于存放对换页面的对换区。通常,由于对换区是采用连续分配方式,而事件是采用离散分配方式, 故对换区的磁盘I/O速度比文件区的高。这样,每当发生缺页请求时,系统应从何处将缺页调入内存,可分成如下三种情况:

(1)??? 系统拥有足够的对换区空间,这时可以全部从对换区调入 所需页面,以提高调页速度。为此,在进程运行前,便须将与该进程有关的文件,从文件区拷贝到对换区。

(2)??? 系统缺少足够的对换区空间,这时凡是不会被修改的文件,都直接从文件区调入;而当换出这些页面时,由于它们未被修改而不必再将它们换出时,以后需要时,再从对换区调入。

(3)??? UNIX方式。由于与进程有关的文件都放在文件区,故凡是未运行过的页面,都从文件区调入。而对于曾经运行过但又被换出的页面,由于被放在对换区,因此在 下次时,应从对换区调入。由于UNIX系统允许页面共享,因此,某进程所请求的页面有可能已被其它进程调入内存,此时也就无须再从对换区调入。

3页面调入过程?

?????? 每当程序所要访问的页面未在内存时, 便向CPU发出一缺页中断,中断处理程序首先保留CPU环境,分析中断原因后,转入缺页中断处理程序。该程序通过查找页表,得到该页在外在原物理 块后,如果此时内存能容纳新页,则启动磁盘I/O将所缺之页调入内存,然后修改页表。如果内存已满,则须先按照某种置换算法从内存中选出一页准备换出;如 果该页未被修改过,可不必将该页写回磁盘;但如果此页已被修改,则必须将它写回磁盘,然后再把所缺的页调入内存,并修改页表中的相应表项,置其存在位 “1”,并将此页表项写入快表中。在缺页调入内存后,利用修改后的页表,去形成所要访问数据的物理地址,再去访问内存数据。整个页面的调入过程对用户是透 明的。

二、页面置换算法

?????? 在进程运行过程中,若其所要访问的页面不在内存而需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数 据,送磁盘的对换区中。但应将哪 个页面调出,须根据一定的算法来确定。通常,把选择换出页面的算法称为页面置换算法(Page_Replacement Algorithms)。

?????? 一个好的页面置换算法,应具有较低的页面更换频率。从理论上讲,应将那些以后不再会访问的页面换出,或将那些在较长时间内不会再访问的页面调出。

㈠常见置换算法

①???? 最佳置换算法(Optimal):

它是由Belady于1966年提出的一种理论上的算法。其所选择的被淘汰页面,将是以后永不使用的或许是在最长(未来)时间内不再被访问的页面。 采用最佳置换算法,通常可保证获得最低的缺页率。但由于人目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该 算法是无法实现的,便可以利用此算法来评价其它算法。

②???? 先进先出(FIFO)页面置换算法:

这是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单只需把一个进程已调入内存的页面,按先后次序链接成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您的问题是关于最近最久使用页面置换算法LRU页面置换算法模拟C语言实现。这两种算法都是操作系统中用于管理内存的重要算法。 最近最久使用页面置换算法,也称为“先进先出”(FIFO)算法,是将最先进入内存的页面置换出去。而LRU页面置换算法则是将最近最久使用的页面置换出去。这两种算法都可以通过模拟实现。 下面是一个简单的C语言程序模拟LRU页面置换算法: ```c #include <stdio.h> #define MAX_PAGES 10 int main() { int pages[MAX_PAGES] = {0}; int num_pages = 0; int page_faults = 0; int i, j, k; printf("Enter number of pages: "); scanf("%d", &num_pages); printf("Enter page reference string: "); for (i = 0; i < num_pages; i++) { scanf("%d", &pages[i]); } int frames[3] = {-1, -1, -1}; // Three frames for (i = 0; i < num_pages; i++) { int page = pages[i]; int hit = 0; printf("Page %d: ", page); for (j = 0; j < 3; j++) { if (frames[j] == page) { printf("Hit\n"); hit = 1; break; } } if (!hit) { int min = -1; int min_index = -1; for (j = 0; j < 3; j++) { int found = 0; for (k = i - 1; k >= 0; k--) { if (frames[j] == pages[k]) { found = 1; break; } } if (!found) { min_index = j; break; } if (min == -1 || k < min) { min = k; min_index = j; } } frames[min_index] = page; page_faults++; printf("Fault\n"); } } printf("Page faults: %d\n", page_faults); return 0; } ``` 该程序使用了一个大小为3的帧框架,并模拟了一个页面引用字符串。每次引用页面时,程序会检查该页面是否已经在帧中,如果是,则称为“命中”,否则将该页面放入最久使用的帧中,并将其称为“缺页”。 您可以通过修改该程序中的帧大小和页面引用字符串来模拟不同的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值