MIT-XV6/JOS hw: lazy page allocation

Xv6使用lazy allocation

当进程需要更多的内存的时候,调用malloc申请更多的堆内存,而系统调用sbrk()完成该工作

但是有的进程会一次申请大量的内存,但是又可能根本用不到,比如说sparse array

所以说复杂的内核涉及会将实际的allocation的工作推迟到实际用的时候,发生了page fault了,然后再进行实际的分配

Part1.

将系统调用sbrk的实际实现sys_sbrk进行修改,只讲进程的内存空间大小增加n,而不进行实际的分配

系统调用malloc使用就是sbrk

返回的地址是新分配的地址空间的开头,在此处就是原来地址空间的末尾,此处都是虚地址

那么此时再运行的结果就是

因为在shell中需要运行echo的时候,运行到了如下部分的代码

也就是在运行malloc的时候,虽然返回是成功了的,但是当程序试图操作cmd指向的内存区域的时候,发现该内存区域不是当前进程所有的,因为在sys_sbrk中根本没分配

Part2.

修改trap.c中的代码,使得系统可以处理上述错误

在trap.c中,当发现是page fault错误的时候,可以按照当前进程的proc->sz来实际的分配内存,注意这个时候的sz的大小不是实际的大小,而是希望的大小值

所以首先应该获取发生page fault时刻的虚地址,那个地址之后的部分就应该是本来应该分配但是实际没有分配的,而实际需要分配多少,应该根据proc->sz的大小来定。

因为在发生page fault的时候的地址,是我们在malloc之后返回给进程的地址,而这个地址又是原来的proc->sz,所以该虚地址的大小就应该是实际的内存的大小

时间: 2024-10-29 00:02:03

MIT-XV6/JOS hw: lazy page allocation的相关文章

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 -

MIT 6.828 xv6/jos LAB3-PARTB

这一部分是希望能够处理页错误.断点和系统调用 处理系统页错误 在发生了page fault之后,进入到系统中断中,然后经过_alltraps,进入到trap,再经过trap_dispatch分发,应该对中断类型为T_PGFLT的中断进行处理 当然,页错误也有内核页错误和用户页错误 处理断点 在JOS中,断点中断被“滥用”了,几乎是一种系统调用,用作调用系统的Monitor,实现很简单 系统调用 系统调用的汇编部分已经写好了 引发一个中断,中断号是T_SYSCALL,而具体的系统调用号写在了num

JOS 用户态page fault保护处理机制分析

常常会在用户态触发page fault,如果直接让其因为page fault跌入内核触发panic目测是不是"太残忍了" 你想想,一个刚学会写C程序的童鞋,就经常干 *(int *)0x00. 当然,我只是比较赤果果的表现而已,这位同学可能经常用各种指针,然后指针为初始化亦或等于NULL的时候,对其进行赋值或解引用.总不至于让一个刚学C的人就把整个系统都给挂了吧?恩.我们需要一种保护机制. 可以在用户态触发page fault,跌入内核时,我们可以做点"手脚",不要让他触发panic. 内核稍作

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

Implement a Shell by yourself -- MIT xv6 shell

这个其实是作为6.828的一个小课堂作业 ... 着重分析构建思想和过程,具体代码实现去github可以找到. https://github.com/jasonleaster/MIT_6_828_assignments_2012/blob/homework1/sh.c ----------------------------------- 大家好,我是分割线 ------------------------------------------------------------------- 这

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问题

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

资源向导之 &quot;Operating System&quot;

资源向导之"Operating System" ------------------------------------------------- MIT --- JOS  ------------------------------------------------ MIT关于JOS实验的主站 http://pdos.csail.mit.edu/6.828/2014/index.html MIT - Operating System Engineering(不同于6.008) ht

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