版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ucore中的物理内存分配 ucore系统中的物理内存分配使用的是buddy伙伴算法,算法与Linux中的buddy算法有很高的相似度。 以下介绍ucore源码中buddy实现物理内存分配的算法。123块分配算法:buddy_alloc_pages_sub(size_t order)static inline struct Page *buddy_alloc_pages_sub(size_t order) assert(order = MAX_ORDER); /检验传入参数的合法性 size_t cur_order; /定义变量current_order for (cur_order = or
2、der; cur_order = MAX_ORDER; cur_order +) if (!list_empty(&free_list(cur_order) list_entry_t *le = list_next(&free_list(cur_order); struct Page *page = le2page(le, page_link);/找到page结构 nr_free(cur_order) -; list_del(le); size_t size = 1 order) cur_order -; size = 1; struct Page *buddy = page + size;
3、buddy-property = cur_order; SetPageProperty(buddy); nr_free(cur_order) +; list_add(&free_list(cur_order), &(buddy-page_link); ClearPageProperty(page); return page; return NULL; 4 内核使用该函数来在管理区中找到一个空闲块。该函数需要一个参数:order,order表示请求的空闲页块大小的对数值(0 表示一个单页块,1 表示一个双页块,2表示四页块)。如果页框被成功分配,函数就返回第一个被分配页框的页描述符。否则,函数返
4、回NULL。 在函数中,从所请求order的链表开始,它扫描每个可用块链表进行循环搜索,如果当前order找不到合适空闲块,那么需要搜索更大的order,就继续搜索: for (cur_order = order; cur_order = MAX_ORDER; cur_order +) if (!list_empty(&free_list(cur_order) return null;56关于块释放,由于是要求我们自己写的内容,就不做介绍了。下面是几个ucore中buddy system的其他几个函数:判断是否为buddystatic inline boolpage_is_buddy(stru
5、ct Page *page, size_t order, int zone_num) if (page2ppn(page) zone_num = zone_num) return !PageReserved(page) & PageProperty(page) & property = order; return 0; 正如所见,要想成为伙伴,必须满足以下四个条件:(1)它必定和page在同一个zone内;(2)它必须属于动态内存( PageReserved位 清零);(3)它的property字段必须有意义(PageProperty位 置位);(4)它的property字段必须存放将要被释放的块的order。7Getorder函数static inline size_t /根据需要的页数求出order的大小,如n=15,则order=4getorder(size_t n) size_t order, order_size; for (order = 0, order_size = 1; order = MAX_ORDER; order +, order_size = 1) /orde
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某著名企业金典系列路演活动策划案
- 《GBT 22325-2008小麦粉中过氧化苯甲酰的测定 高效液相色谱法》专题研究报告
- 《GBT 14454.11-2008香料 含酚量的测定》专题研究报告
- 道路养护安全培训计划课件
- 道路交通安全培训效果课件
- 2026年江苏高考生物试题及答案
- 2022头皮美塑疗法技术操作规范专家共识
- 内蒙古农作物生产技术(北方本)综合测试题(四)及答案
- 车队安全培训内容
- 2025工程技术年终总结(2篇)
- 2026年辽宁金融职业学院单招职业技能测试题库附答案解析
- 2026北京海淀初三上学期期末语文试卷和答案
- 2024-2025学年北京市东城区五年级(上)期末语文试题(含答案)
- 2026年宁夏贺兰工业园区管委会工作人员社会化公开招聘备考题库带答案详解
- NB-T32036-2017光伏发电工程达标投产验收规程
- 两轮车控制器行业报告
- JSA临时用电作业安全分析表
- 2015-2022年北京卫生职业学院高职单招语文/数学/英语笔试参考题库含答案解析
- 赛肤润常见临床应用2010年
- 提高铝模板施工质量合格率
- 传感器与检测技术习题集
评论
0/150
提交评论