操作系统页面调度问题(这里只给出了FIFO、LRU、OPT) 纯c++数组模拟 略low

页面调度算法 FIFO,LRU,OPT,及C++代码 页面调度算法 FIFO,LRU,OPT介绍了三种页面调度算法,给出了C++代码1.FIFO先来先去算法这个非常好理解,给出分析图 可以看出,缺页次数为8次,缺页中断率为8/12=66.7%,依次置换的页面为:1,2,5,3,4C++代码在最后给出2.LRULRU,Least Recently Used 近期最少使用算法,先给出分析图 这个也不难理解,我们只需要从之前的一个页面开始往左寻找就可 阅读详情

目前在上实验课,理论以后在进行补充。以下只放上纯模拟的代码。

其实模拟还是很好模拟的,三者仅仅只是发生缺页时调度方法不同,尤其是LRU和OPT两者代码只有一个地方不同,区别之处就在于LRU是向前找,而OPT算法则是向后找。以下以序列{2,3,2,1,5,2,4,5,3,2,5,2} 12个数为例。想要用户输入可以在主函数里写个输入,定义一个全局的数组长度即可。系统内存的块则用的数组b来代表,也可自己设置数组b的长度,大体同上。

//栾兆威 16171120
#include <bits/stdc++.h>
using namespace std;
int a[]={2,3,2,1,5,2,4,5,3,2,5,2}; //12个
int b[3]={-1,-1,-1};  //只分配了三个块

void LRU(){
    int cnt = 0,kk = 0;
    memset(b,-1,sizeof(b));
    for(int i=0;i<12;i++){
        if(kk<3){ //前三个页调入内存
            bool flag = false;
            for(int j = 0;j < i ;j++){ //看看内存块中是否已经存在
                    if(a[i]==b[j]){
                        flag = true;
                        break;
                    }
            }
            if(flag==false){
            b[kk] = a[i];
            cnt++;
            kk++;
            }
        }
        else{
            bool flag = false;
            for(int j = 0;j < 3;j++){
                if(a[i]==b[j]){
                        //cout<<"~~~~~~~"<<a[i]<<endl;
                    flag = true;
                    break;
                }
            }
            //造成缺页
            if(flag == false){
                int tmp = 0;
                bool vis[3];
                memset(vis,false,sizeof(vis));
                for(int j = i;j >=0;j--){//向前找
                    for(int k=0;k<3;k++){
                        if(a[j]==b[k]){
                            vis[k]=true;
                            tmp++;
                            break;
                        }
                    }
                    if(tmp==2)
                        break;
                }
                for(int j = 0;j<3;j++){
                    if(vis[j]==false){
                        cnt++;
                        b[j]=a[i];
                        break;
                    }
                }
            }
        }
        cout<<a[i]<<": [";
        for(int j=0;j<3;j++){
            if(b[j]==-1)
                cout<<"* ";
            else
                cout<<b[j]<<" ";
        }
        cout<<"]"<<endl;
    }
    cout<<"缺页数为:  "<<cnt<<endl;
}
void OPT(){
   int cnt = 0,kk = 0;
    memset(b,-1,sizeof(b));
    for(int i=0;i<12;i++){
        if(kk<3){
            bool flag = false;
            for(int j = 0;j < i ;j++){
                    if(a[i]==b[j]){
                        flag = true;
                        break;
                    }
            }
            if(flag==false){
            b[kk] = a[i];
            cnt++;
            kk++;
            }
        }
        else{
            bool flag = false;
            for(int j = 0;j < 3;j++){
                if(a[i]==b[j]){
                        //cout<<"~~~~~~~"<<a[i]<<endl;
                    flag = true;
                    break;
                }
            }
            //造成缺页
            if(flag == false){
                int tmp = 0;
                bool vis[3];
                memset(vis,false,sizeof(vis));
                for(int j = i+1;j <12;j++){//向后找
                    for(int k=0;k<3;k++){
                        if(a[j]==b[k]){
                            vis[k]=true;
                            tmp++;
                            break;
                        }
                    }
                    if(tmp==2)
                        break;
                }
                for(int j = 0;j<3;j++){
                    if(vis[j]==false){
                        cnt++;
                        b[j]=a[i];
                        break;
                    }
                }
            }
        }
        cout<<a[i]<<": [";
        for(int j=0;j<3;j++){
            if(b[j]==-1)
                cout<<"* ";
            else
                cout<<b[j]<<" ";
        }
        cout<<"]"<<endl;
    }
    cout<<"缺页数为:  "<<cnt<<endl;

}
void FIFO(){
    int cnt = 0,t = 0;
    for(int i = 0;i <12 ;i++){
        bool flag = false;
        for(int j = 0;j < 3;j++){
            if(a[i]==b[j]){
                flag=true;
                break;
            }
        }
        if(flag==false){//缺页
            cnt++;
            b[t]=a[i];
            t++;
            if(t==3)
                t=0;
        }
        cout<<a[i]<<": [";
        for(int j=0;j<3;j++){
            if(b[j]==-1)
                cout<<"* ";
            else
                cout<<b[j]<<" ";
        }
        cout<<"]"<<endl;
    }
     cout<<"缺页数为:  "<<cnt<<endl;
}
int main(){
    cout<<"先进先出淘汰算法:"<<endl;
    cout<<"*********************"<<endl;
    FIFO();
    cout<<"*********************"<<endl;
    cout<<endl;
    cout<<"最近最久未用淘汰算法:"<<endl;
    cout<<"*********************"<<endl;
    LRU();
    cout<<"*********************"<<endl;
    cout<<endl;
     cout<<"最佳淘汰算法淘汰算法:"<<endl;
    cout<<"*********************"<<endl;
    OPT();
    cout<<"*********************"<<endl;
    cout<<endl;

    return 0;
}


 

操作系统页面调度算法 操作系统实验 页面调度算法 阅读详情

相关推荐

虚拟内存页面置换算法(OPT、FIFO、LRU)模拟与实现

前言 需要调入新页面时,选择内存中哪个物理页面被置换,称为置换策略。页面置换算法的目标:把未来不再使用的或短期内较少使用的页面调出,通常应在局部性原理指导下依据过去的统计数据进行预测,减少缺页次数。 一、常用的页面置换算法 1)最佳置换算法(OPT):置换时淘汰“未来不再使用的”或“在离当前最远位置上出现的”页面。 2)先进先出置换算法(FIFO):置换时淘汰最先进入内存的页面,即选择驻留在内存时间最长的页面被置换。 3)最近最久未用置换算法(LRU):置换时淘汰最近一段时间最久没有使用的页面,即选择上次使

weixin_47700137的博客 1万+

实验报告5-页面调度

根据程序执行的局部性特点,程序一旦访问了某些代码和数据,则在一段时间内会经常访问他们,因此最近最少用调度在选择淘汰页面时会考虑页面最近的使用,总是选择在最近一段时间以来最少使用的页面予以淘汰。算法实现时需要为每个页面设置数据结构记录页面自上次访问以来所经历的时间。

u010288901的博客 593

【信息科学与工程学】计算机科学与自动化—第十五篇 云计算 11 算法篇01

编号类型领域问题问题的数学分析(含几何学/拓扑学/代数学/数论/集合论/离散数学/概率论/统计学/其他)及数值分析及算法分析及参数列表及参数数值设计C/C++/rust/python代码软件(含编译器)及硬件资源需求(CPU/GPU/内存【NAND/DRAM/HBM/其他】/HBM、HDD、SSD、RAID卡、其他)关联知识1工作负载调度数据中心最小化总完成时间/成本。

weixin_49199313的博客 215

lru调度算法例题_LRU页面调度算法调试问题——请高手帮忙!!!!

#defineTURE1#defineFALSE0#defineINVALID-1#defineNULL0#definetotal_instruction320#definetotal_vp32#defineclear_period50typedefstruct{intpn,pfn,counter,time;}pl_type;pl_typepl[total_vp]...

weixin_39531183的博客 326

【信息科学与工程学】计算机科学与自动化 第二百三十三篇 凤凰架构01

编号类型领域系统软件/硬件或系统集成方案及系统架构模块子模块函数名称/算法名称算法的数学分析及计算机体系架构及数据结构与算法详细设计及参数列表及数值范围设计关联知识1共识算法分布式基石状态机复制架构:Proposer/Acceptor/Learner 多节点角色模型,基于操作转移(Operation Transfer)分布式共识PaxosPaxos 协议(Prepare/Promise/Accept/Accepted 两阶段)数学基础:多数派(Quorum)投票,基于鸽巢原理保证 W+R>N 时读写集合必有

weixin_49199313的博客 263

【信息科学与工程学】计算机科学与自动化——第三百零五篇 计算机系统中的各类运算操作01

编号类型领域运算操作运算类型算法算法的详细设计及数学分析参数列表及参数的数值设计应用场景 (100+条)集合运算​1集合运算关系代数并集 (Union)集合运算归并排序去重合并两个集合,去除重复元素。时间复杂度 O(n+m),n,m为两集合大小。输入:集合A, B。输出:A∪B。数据集成、多表结果合并、去重后的全量数据提取。2集合运算关系代数交集 (Intersection)集合运算哈希交集找出同时属于两个集合的元素。平均时间复杂度 O(min(n,m)),最坏 O(n*m)。输入:集合A, B。输出:A∩

weixin_49199313的博客 1388

C语言模拟OS虚拟内存页面置换算法OPT+FIFO+LRU

在进程运行过程中,若所要访问的页面不在内存,而需把它调入内存,但内存已无空闲区间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据送到磁盘空间的对换区中。将那个页面换出,需要根据一定的算法来确定。这就是页面置换算法。 最佳(Optimal)置换算法,选择的淘汰页将是以后永久不使用的,或许是在最长时间内不再访问的页面。这种算法可以保证最低的缺页率,但该算法真实情况下无法实现,可以作为评价其他算法的标准。 先进先出(FIFO)页面置换算法,总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页

weixin_43363243的博客 4229

【信息科学与工程学】【产品体系】计算机科学与自动化——第一百八十九篇 操作系统内核(微内核/宏内核)函数与算法02

宏内核(Linux)更多典型内核函数/算法,从编号271开始,覆盖中断管理、热插拔、PCI、ACPI、固件、崩溃转储、kexec、休眠、watchdog、RTC、hwmon、LED、backlight、input子系统、remoteproc等更多领域。编号类型领域内核类型内核中的函数/算法/模块/模组模块的调用关系模块/函数/算法逐步推理思考的数学表达式及参数列表及参数数值设计模块的C/C++/其他代码关联知识271中断管理中断描述符宏内核 / (中断子系统核心)驱动申请中断 → → → 分配irq_

weixin_49199313的博客 105

FIFO、LRU、OPT这三种置换算法的缺页次数

 虑下述页面走向:           1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6      当内存块数量分别为3时,试问FIFO、LRU、OPT这三种置换算法的缺页次数各是多少?    答:缺页定义为所有内存块最初都是空的,所以第一次用到的页面都产生一次缺页。        当内存块数量为3时:

飞扬的青春的专栏 1万+

【信息科学与工程学】【通信工程】计算机科学与自动化——第二百三十三篇 云NaaS服务 系列二01

国家骨干网(含核心网、IP骨干网、OTN骨干网)/城域网【含3G/4G/5G接入网/PON接入网/OTN接入网+OTN/IP城域网+其他】/中心云(多/双/单Region+多AZ/双AZ/单AZ)+边缘DC+边缘计算节点+端计算节点包括IoT传感器、移动终端、CPE设备。通过5G NR(n78频段,带宽100MHz,子载波间隔30kHz)或GPON(下行2.5Gbps,上行1.25Gbps)接入。本地缓存小于10GB,主要用于临时数据暂存。位于地市级机房,部署MEC服务器(Intel Xeon Platin

weixin_49199313的博客 1327

【信息科学与工程学】计算机科学与自动化——第一百五十五篇 缓存系统设计01 基础知识

CPU:拥有 L1/L2/L3 多级缓存,用于暂存即将执行的指令和频繁访问的数据。GPU:包含显存、纹理缓存、常量缓存、指令缓存等,加速图形渲染和通用计算。RAID 卡 / 存储控制器:自带缓存(通常带电池保护),用于合并写操作、加速读写。打印机:内置内存缓存,用于暂存待打印的页面数据,避免反复从电脑传输。光驱 / 蓝光播放器:内部缓存用于平滑读取光盘数据,防止因寻道延迟导致卡顿。操作系统:页缓存(Page Cache):缓存文件系统数据,减少磁盘 I/O。目录缓存(dentry cache):加速路径查找

weixin_49199313的博客 289

C语言实现FIFO,LRU淘汰算法

本篇文章对页面淘汰算法进行了简单介绍,并使用C语言进行了相关实现。

qq_45740212的博客 2978

操作系统页面调度

关于操作系统的页面调度,有代码,有报告,很详细,通过c语言实现的

操作系统 FIFO算法 LRU算法 OPT算法(C++)

题目 实验三 请求调页存储管理方式的模拟 1.实验目的 通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解。 2.实验内容 (1)假设每个页面中可存放10条指令,分配给作业的内存块数为4。 (2)用c语言模拟一个作业的执行过程,该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果4个

Authur_gyc 6392

操作系统页面调度可视化仿真

这个实验比较简单,主要就是LRU算法中的计数法、寄存器法,SCR算法,CLOCK算法调度 楼主水平有限,做的不好别喷我

舵机操作手册

微型伺服马达原理与控制(中鸣) 1、微型伺服马达内部结构一个微型伺服马达内部包括了一个小型直流马达;一组变速齿轮组;一个反馈可调电位器;及一块电子控制板。其中,高速转动的直流马达提供了原始动力,带动变速(减速)齿轮组,使之产生高扭力的输出,齿轮组的变速比愈大,伺服马达的输出扭力也愈大,也就是说越能承受更大的重量,但转动的速度也愈低。 2、微行伺服马达的工作原理一个微型伺服马达是一个典型闭环反馈系统,其原理可由下图表示: 减速齿轮组由马达驱动,其终端(输出端)带动一个线性的比例电位器作位置检测,该电位器把

HEIMENGER的博客 3136

操作系统第四次实验 页面置换算法(OPT,FIFO,LRU)

实验四、虚拟存储管理 一、实验目的: 通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种页面置换算法的基本思想和实现过程,并比较它们的效率。 二、实验内容: 本实验要求使用C语言编程模拟一个拥有若干个虚页的进程在给定的若干个实页中运行、并在缺页中断发生时分别使用FIFO、OPT和LRU算法进行页面置换的情形。 三、实验要求: 虚页的个数可以事先给定(例如10个),对这些虚页访问的页地址流(其长度可以事先给定,例如20次虚页访问)可以由程序随机产生

qq_45688165的博客 4819

Matlab实现PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测的详细项目实例

这些数据包含了随时间变化她动态信息,具有显著她趋势她、周期她和季节她特征。该模型她核心优势在她其能够自适应地学习数据中她多层次时序信息,捕捉时间序列中她长短期依赖关系,从而提高预测她准确她和可靠她。本项目旨在实她一个基她PTO-TCN-LTTM-TFSttfntion她多变量时间序列预测模型,通过粒子群优化算法优化时间卷积长短期记忆神经网络,并融合注意力机制,提高模型她预测精度和稳定她。本项目模型她实她分为多个阶段,首先她数据预处理,接着她PTO优化,然后她TCN和LTTM网络她构建她训练。

优质创作者: 人工智能技术领域 对于有一定基础的 MATLAB和Python带具体需求都可以详谈 MATLAB和Python可以提供代码调试服务加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢 1079

页面调度fifo算法c语言,用c++写的 操作系统 页面调度算法 FIFO,LRU,CLOCK

#include#include#include#include#includeusing namespace std;struct frame{int page[8];int count;public:frame(){for(int i=0;i<8;i++){page[i]=-1;}count=0;}bool full(){return count==8;}void print(){int...

weixin_36265507的博客 1029

RISC-V嵌入式开发实战:手把手教你读懂并修改CH32V103的链接脚本(.ld)

本文深入解析RISC-V嵌入式开发中CH32V103链接脚本(.ld)的编写与优化技巧。从内存布局、段分配到实战调试,详细讲解如何解决程序跑飞、变量异常等典型问题,特别针对RISC-V架构的gp寄存器优化、中断向量表处理等特性提供专业指导,帮助开发者充分利用64KB Flash和20KB RAM资源。

weixin_33704234的博客 174

bevformer详解(3): 逐行代码讲解

在这篇文章中,我们将从BEVFormer算法代码入手,深入探究BEV转换的流程。BEVFormer是一种基于Transformer的BEV转换模型,其核心思想是利用自注意力机制和交叉注意力机制,从,并通过Object Query与BEV特征的交互,完成3D目标检测和地图分割等任务。https://developer.baidu.com/article/details/3224715bevformer的网络结构由三部分组成, 模型结构所示,其中的是部分,对于的是的结构,对于部分,沿用的中的decoder部分,

@bangbang的博客 3699

【操作系统】缺页中断之FIFO、LRU、OPT置换算法

缺页中断的三种置换算法:FIFO、LRU、OPT。

阿琪 3418

【医学图像处理】X-ray成像之X射线的产生

【医学图像处理】X-ray成像之X射线的产生 概述 电流流过钨丝,并将其加热。 随着加热,增加的能量使电子能够通过热电子发射从灯丝中释放出来。 电子被吸引到带正电的阳极,并以由管电位(电压)确定的最大能量撞击钨靶。 当电子轰击目标时,它们通过轫致辐射和特有的相互作用将能量转换为热量(99%)和X射线光子(1%)。 X射线光子以一束能量(X射线光谱)从光束中释放出来,构成X射线图像形成的基础。 设备 阴极 灯丝 用细的(0.2毫米)钨丝制成,因为钨: 原子序数高(A 184,Z 74) 是良好的热

ZhangPY的专栏 2352
上一篇: 一些比较好算法的直播视频
下一篇: N皇后问题 (简单回溯)
Puppet__
博客等级 码龄9年 319粉丝 328原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值