- 博客(4)
- 收藏
- 关注
原创 xv6 COW Lab中碰到的bug
内核地址0x80090000地址作为(struct run*)结构体即空闲内存结构体时下一个(->next)指向了一个非法地址0x7fXXXXXX(因为<0x80000000内核代码地址地址,这下面的地址和操作系统无关)。threetest()一共三个进程,如果同时触发Store/AMO page fault异常,就会造成这个问题(中间具体是什么原因,我确实也不明白,还是要学习一个)。串链子的时候会把0x80090000的下个空闲内存指向0x7fXXXXXX,由此猜测数组越界,done。
2024-08-30 08:50:36
272
原创 Calling Convention(rv手册18章)有的没的笔记
When possible,参数会放在或者里。这里没看懂小于指针字 (pointer-word) 的参数被放到寄存器的最低有效位中。假如参数被送进栈中,则会被放到指针字的低地址中。假如参数是指针字的两倍。超过指针字大小两倍的参数通过引用传递。结构体没被传进寄存器的部分会被放在栈中,堆栈指针sp指向第一个没被传到寄存器里的参数。返回值放在a0、a1或者fa0、fa1里。在标准RISCV调用约定中,栈向下增长并且堆栈指针sp总是16字节对齐的。
2024-08-17 22:10:47
618
原创 XV6 LAB: System calls过程记录
操作系统必须提供进程间隔离(virtual memory、process、操作系统的一个关键要求是能够同时支持多个活动(activities)。进程和isolation的关系 & 实现隔离的机制。4.4最后两段没看懂,明天结合代码再看一遍。抽象硬件资源 to services。分时共享 time-sharing。文件系统 file system。
2024-07-31 14:37:23
795
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人