博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
后台面试经典问题-手写LRU算法
阅读量:4020 次
发布时间:2019-05-24

本文共 1339 字,大约阅读时间需要 4 分钟。

LRU,Least Recently Used,最近最久未使用。常用于页面置换算法。是为虚拟页式存储管理服务的。

对于在内存中又不用的数据块,称为LRU,操作系统会根据哪些数据属于LRU而将其移出内存。

对于操作系统的内存管理,如何节省利用容量不大的内存为最多的进程提供资源,一直是研究的的热点。而内存的虚拟存储管理,是现在最通用最常见的方式–在内存有限的情况下,扩展一部分外存作为虚拟内存。虚拟页式存储管理,则是将进程所需空间划分为多个页面,内存中只存放当前所需页面,其余页面放入外存的管理方式。对于页面置换算法来讲,当发生缺页中断时,都是要从内存中找到一个不需要的块换出去(对应物理内存的释放),然后将需要页面从磁盘的交换区中换进来(虚拟内存的分配)。

对于系统的所有文件I/O请求,操作系统都是通过page cache机制实现的,对于操作系统而言,磁盘文件都是由一系列的数据块顺序组成,数据块的大小随系统不同而不同,x86 linux系统下是4KB(一个标准页面大小)。内核在处理文件I/O请求时,首先到page cache中查找(page cache中的每一个数据块都设置了文件以及偏移信息),如果未命中,则启动磁盘I/O,将磁盘文件中的数据块加载到page cache中的一个空闲块。之后再copy到用户缓冲区中。

LRU实现:map+双向链表

class LRUCache {

private:
typedef list LI;
typedef pair<int, LI::iterator> PII;
typedef unordered_map<int, PII> HIPII;

void touch(HIPII::iterator it) {    int key = it->first;    used.erase(it->second.second);    used.push_front(key);    it->second.second = used.begin();}HIPII cache;LI used;int _capacity;

public:

LRUCache(int capacity) : _capacity(capacity) {}

int get(int key) {    auto it = cache.find(key);    if (it == cache.end()) return -1;    touch(it);    return it->second.first;}void put(int key, int value) {    auto it = cache.find(key);    if (it != cache.end()) touch(it);    else {		if (cache.size() == _capacity) {			cache.erase(used.back());			used.pop_back();		}        used.push_front(key);    }    cache[key] = { value, used.begin() };}

};

转载地址:http://ytrfi.baihongyu.com/

你可能感兴趣的文章
Android中电池信息(Battery information)的取得
查看>>
SVN客户端命令详解
查看>>
Android/Linux 内存监视
查看>>
Linux系统信息查看
查看>>
用find命令查找最近修改过的文件
查看>>
Android2.1消息应用(Messaging)源码学习笔记
查看>>
在android上运行native可执行程序
查看>>
Phone双模修改涉及文件列表
查看>>
android UI小知识点
查看>>
Android之TelephonyManager类的方法详解
查看>>
android raw读取超过1M文件的方法
查看>>
ubuntu下SVN服务器安装配置
查看>>
MPMoviePlayerViewController和MPMoviePlayerController的使用
查看>>
CocoaPods实践之制作篇
查看>>
[Mac]Mac 操作系统 常见技巧
查看>>
苹果Swift编程语言入门教程【中文版】
查看>>
捕鱼忍者(ninja fishing)之游戏指南+游戏攻略+游戏体验
查看>>
iphone开发基础之objective-c学习
查看>>
iphone开发之SDK研究(待续)
查看>>
计算机网络复习要点
查看>>