xv6-----lazy page allocation

本文转载是网络,只叙述方法,,,

第一问:Turn off page allocation in xv6

修改sysproc.c中的sys_sbrk()函数即可:

 1 int sys_sbrk(void)
 2 {
 3       int addr;
 4       int n;
 5       if(argint(0, &n) < 0)
 6         return -1;
 7       addr = proc->sz;
 8       proc->sz += n;
 9       //if(growproc(n) < 0)
10       //  return -1;
11       return addr;
12 }

重新编译后就OK了。

第二问:Implement lazy page allocation

1.由于我们需要在trp.c中调用vm.c中的int mappages(pde_t pgdir, voidva, uint size, uint pa, int perm)函数,所以要去除原本的static!!!

2..在trp.c中声明int mappages(pde_t pgdir, voidva, uint size, uint pa, int perm)函数,注意要在调用之前声明!

3.在trap.c中的void trap(struct trapframe *tf)的defaut部分添加以下代码,注意要在放在原本就存在的if模块后!

 1 char *mem;
 2 uint a;
 3 a = PGROUNDDOWN(rcr2());   //rcr2() is the call to get the start memory address of this process
 4 uint newsz = proc->sz;   //newsz is the cheated memory address (the amount of memory needed by the process)
 5 for(; a < newsz; a += PGSIZE){
 6     mem = kalloc();
 7     memset(mem, 0, PGSIZE);
 8     mappages(proc->pgdir, (char*)a, PGSIZE, v2p(mem), PTE_W|PTE_U);
 9 }
10 return;

重新编译,大功告成!

时间: 2024-10-03 21:53:31

xv6-----lazy page allocation的相关文章

MIT-XV6/JOS hw: lazy page allocation

Xv6使用lazy allocation 当进程需要更多的内存的时候,调用malloc申请更多的堆内存,而系统调用sbrk()完成该工作 但是有的进程会一次申请大量的内存,但是又可能根本用不到,比如说sparse array 所以说复杂的内核涉及会将实际的allocation的工作推迟到实际用的时候,发生了page fault了,然后再进行实际的分配 Part1. 将系统调用sbrk的实际实现sys_sbrk进行修改,只讲进程的内存空间大小增加n,而不进行实际的分配 系统调用malloc使用就是

System and method to prioritize large memory page allocation in virtualized systems

The prioritization of large memory page mapping is a function of the access bits in the L1 page table. In a first phase of operation, the number of set access bits in each of the L1 page tables is counted periodically and a current count value is cal

SQL Server -&gt;&gt; Memory Allocation Mechanism and Performance Analysis(内存分配机制与性能分析)之 -- Minimum server memory与Maximum server memory

Minimum server memory与Maximum server memory是SQL Server下配置实例级别最大和最小可用内存(注意不等于物理内存)的服务器配置选项.它们是管理SQL Server内存的途径之一. Minimum server memory与Maximum server memory Minimum server memory(MB): 最小服务器内存.一旦超过这个线就不会再把内存换回去.但是也不是说SQL Server一启动马上就申请这么多的内存. Maximum

Linux系统下深究一个malloc/brk/sbrk新内存后的page fault问题

有耳可听的,就应当听 -<马可福音> 周四的休假团建又没有去,不因别的,只因年前东北行休假太多了,想缓缓-不过真实原因也确实因为假期剩余无几了-思考了一些问题,写下本文. ??本文的缘起来自于和同事讨论一个关于缺页中断按需调页的讨论.真可谓是三人行必有我师,最近经常能从一些随意的比划或招架中悟出一丝意义,所以非常感谢周围的信息输出者!甚至从小小学校全员禁言的作业群里,我都能每天重温一首古诗词,然后循此生意,去故意制造另一种真实的意境,然后发个朋友圈?~ ??感谢大家的信息输入,每次收到的好玩的

ms_sql_server_architecture

We have classified the architecture of SQL Server into the following parts for easy understanding ? General architecture Memory architecture Data file architecture Log file architecture General Architecture Client ? Where the request initiated. Query

嵌入式 uboot引导kernel,kernel引导fs【转】

转自:http://www.cnblogs.com/lidabo/p/5383934.html#3639633 1.uboot引导kernel: u-boot中有个bootm命令,它可以引导内存中的应用程序映像(Kernel),bootm命令对应 common/cmd_bootm.c中的do_bootm()函数,此函数实现下面几个功能: 1)读flash中的内核映像文件 2)解压内核 3)校验内核 4)跳到内核执行(调用do_bootm_linux()函数) { 1.Stage1 start.S

理解和配置 Linux 下的 OOM Killer

最近有位 VPS 客户抱怨 MySQL 无缘无故挂掉,还有位客户抱怨 VPS 经常死机,登陆到终端看了一下,都是常见的 Out of memory 问题.这通常是因为某时刻应用程序大量请求内存导致系统内存不足造成的,这通常会触发 Linux 内核里的 Out of Memory (OOM) killer,OOM killer 会杀掉某个进程以腾出内存留给系统用,不致于让系统立刻崩溃.如果检查相关的日志文件(/var/log/messages)就会看到下面类似的 Out of memory: Ki

Windows Kernel Security Training Courses

http://www.codemachine.com/courses.html#kerdbg Windows Kernel Internals for Security Researchers This course takes a deep dive into the internals of the Windows kernel from a security perspective. Attendees learn about behind the scenes working of va

Infiniband驱动安装-RHEL5.8

1      下载驱动 地址:http://www.mellanox.com/page/products_dyn?product_family=26&mtag=linux_sw_drivers 根据操作系统版本进行驱动选择,建议使用ISO格式驱动包. 备注:RHEL5及以前版本选择1.5.3系列驱动,RHEL6及以后版本选择2.0及以上系列驱动. 2      驱动安装 2.1  将下载好的驱动传到服务器上,挂载到/public/ofed目录. [[email protected] source