ucore lab2 实验报告

ucore lab2 实验报告练习0:填写已有实验 本实验依赖实验1.请把你做的实验1的代码填入本实验中代码中有“LAB1”的注释相应部分。提示:可采用diff和patch工具进行半自动的合并(merge),也可用一些图形化的比较/merge工具来手动合并,比如meld,eclipse中的diff/merge工具,understand中的diff/merge工具等。​ 这...
摘要由CSDN通过智能技术生成

ucore lab2 实验报告

练习0:填写已有实验

本实验依赖实验1.请把你做的实验1的代码填入本实验中代码中有“LAB1”的注释相应部分。提示:可采用diff和patch工具进行半自动的合并(merge),也可用一些图形化的比较/merge工具来手动合并,比如meld,eclipse中的diff/merge工具,understand中的diff/merge工具等。

​ 这里使用的是meld工具:

这里写图片描述

选择需要进行比较的directory进行对比。得到如下的结果:

这里写图片描述

然后根据提示信息(不同的会有小星星标记),对需要更新的代码进行Copy Right或者Copy left。这里就不细说了。

练习1:实现first-fit连续屋里内存分配算法

在实现first fit内存分配算法的回收函数时,要考虑地址连续空间之间的合并操作。在简历空闲页块链表时,需要按照空闲也快起始地址来排序,形成一个有序的的链表。

首次适应算法(First Fit):该算法从空闲分区链首开始查找,直至找到一个能满足其大小要求的空闲分区为止。然后再按照需求的大小,从该分区中划出一块内存分配给请求者,余下的空闲分区仍留在空闲分区链中。

​ 特点: 该算法倾向于使用内存中低地址部分的空闲区,在高地址部分的空闲区很少被利用,从而保留了高地址部分的大空闲区。显然为以后到达的大作业分配大的内存空间创造了条件。

​ 缺点:低地址部分不断被划分,留下许多难以利用、很小的空闲区,而每次查找又都从低地址部分开始,会增加查找的开销。

首先看一下Page的结构:

struct Page {
int ref;                        // page frame's reference counter
uint32_t flags;                 // array of flags that describe the status of the page frame
unsigned int property;          // the num of free block, used in first fit pm manager
list_entry_t page_link;         // free list link
};
typedef struct list_entry list_entry_t;
struct list_entry {
    struct list_entry *prev, *next;
};

这里使用的双向链表借鉴了linux内核的双向链表结构,链表结构不包含传统数据域data,而是在具体的数据结构中包含链表节点。在本实验中,使用如下结构对页进行总体的管理。在Default.c中:

free_area_t free_area;          //global page manager
#define free_list (free_area.free_list)
#define nr_free (free_area.nr_free)

free_area_t的结构,整个双向链表的头节点,同时nr_free表示空闲页的数量。

/* free_area_t - maintains a doubly linked list to record free (unused) pages */
typedef struct {
    list_entry_t free_list;         // the list header
    unsigned int nr_free;           // # of free pages in this free list
} free_area_t;

下图是整个空闲页双向链表的简易示意图:将链表和数据域隔离ÿ

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值