feat(lazy): 实现懒加载内存
延迟分配
- 在调用sys_sbrk扩大使用内存的时候,先只增加sz,但不实际分配内存
- 在只增加sz而不分配内存的情况下,会出现三种情况
- 当调用回收内存的时候,当物理内存实际不存在,而页表也没有对应的项,但sz却表示其存在,造成冲突
- 读取或写回物理内存的时候,发现不存在页表项,触发异常。
- fork复制的时候发现错误
- 异常触发的时候,除了lazy,还有其他情况,比如权限不符、或者是栈、保护页等地方,这时候直接将程序杀死即可
- 解决第一种回收时的异常,当遍历页表出现不存在,不panic,而是跳过
- 解决第二种读取或者写回时出现的页表不存在(不一定是这两种情况),当出现的时候,会触发异常,在异常判断是否是缺页导致
- 若是缺页,分配页表,分配物理内存
- 读写的时候,也需要判断是否缺页,这里不会走中断,所以需要额外处理!