自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 问答 (1)
  • 收藏
  • 关注

原创 LEC 7 (ab) Page faults

首先,如果一个页表项的COW标志位被设置为真,那么起初它一定是可写的,经过fork之后变为COW为真并且写标志位置0,在之后的运行中,它可能保持不变,也有可能遇到写指令。如果遇到写指令,页表项需要重新找一块新的物理页,并且将重新将写位置为真,COW位置为假,这样又回到初始状态了;函数中,使用这个级联fork,对于可读写的用户页,将其设置为COW页,如果如果本身就是COW页的话,那直接共享这个物理页,添加一个引用即可,如果是纯只读页,那么直接将其共享,并且增加一个引用。分配页面时,将其引用计数设为 1。

2026-06-12 23:52:10 349

原创 xv6操作系统中和进程相关的内存分配

kalloc()核心判断标准:如果这块物理页是这个映射“拥有”的,删映射时就可以 kfree();如果这块物理页不是这个映射拥有的,或者还会被别处使用,就只能摘掉映射,不能释放物理页。

2026-06-12 23:48:59 193

原创 LEC 6 (ab) Isolation & system call entry/exit

这里的逻辑就是,由于CPU 在每次执行下一条指令的时候,都会检查一下中断位,因此在每个时钟中断到来时,CPU会进入trap,检查一下当前的时钟剩余时间是否为0,如果为0就将当前用户trampframe中的值,复制到程序结构体中专门用于存储中断的trapframe_for_interrupt中去,然后将epc改为alarm_handler,这样回去就会直接跳转到alarm_handler中去。这些任务必须由内核软件完成。中断执行的逻辑就是上面那段代码叙述的那样,同时,在开始处理中断程序的时候,需要加上。

2026-06-07 00:49:01 481

原创 xv6的启动流程

由于进程目前还处在内核态,使用的是内核页表,所以直接根据传入寄存器a0和a1中的地址,进行相关寄存器的保存与切换,其中,initcode这个进程的ra在此处设置。,以及设置一些陷阱帧值,这些值将在进程下次重新进入内核时供用户向量使用,比如内核页表,进程的内核栈顶地址以及用户态trap的处理函数。,按 hart 编号在.bss区域获得为本cpu分配的 4096 字节内核栈,并且让sp指针指向这个内核栈的栈顶,然后跳到。之后,会根据 trapframe->ra,也就是用户态的 ra 寄存器,进行跳转,在。

2026-06-07 00:45:10 200

原创 LEC 4 Page tables

一旦在 S/U 模式下打开分页机制,CPU 执行指令时产生的取指地址、load/store 地址,都先被当作虚拟地址处理,再由 MMU 翻译成物理地址。

2026-06-03 17:18:09 525

原创 xv6-riscv 的启动流程

由于进程目前还处在内核态,使用的是内核页表,所以直接根据传入寄存器a0和a1中的地址,进行相关寄存器的保存与切换,其中,initcode这个进程的ra在此处设置。,以及设置一些陷阱帧值,这些值将在进程下次重新进入内核时供用户向量使用,比如内核页表,进程的内核栈顶地址以及用户态trap的处理函数。,按 hart 编号在.bss区域获得为本cpu分配的 4096 字节内核栈,并且让sp指针指向这个内核栈的栈顶,然后跳到。之后,会根据 trapframe->ra,也就是用户态的 ra 寄存器,进行跳转,在。

2026-06-03 17:15:35 277

原创 使用GDB对xv6进行调试

首先在根文件夹下面打开两个窗口。

2026-05-31 01:07:41 180

原创 RISCV架构中PLIC的中断请求(认领)/完成寄存器

PLIC中的claim/complete寄存器是一个特殊的中断ID寄存器,其读写操作具有特定含义:读取该寄存器表示向PLIC领取一个中断,写入则表示通知PLIC中断处理完成。当中断发生时,PLIC会将中断源pending位置1,CPU读取claim寄存器获取中断号并清除pending位,内核根据中断号调用对应设备驱动处理中断,最后将中断号写回complete寄存器通知PLIC处理完成。该寄存器本质上是一个命令型MMIO接口,读操作执行claim命令,写操作执行complete命令,而非普通的数据存储功能。

2026-05-27 01:21:30 197

原创 LEC 3 OS organization and system calls

本文介绍了RISC-V计算机启动过程和xv6内核的基本架构。系统启动时从_entry开始执行,初始化栈并切换到监督者模式,最终进入main函数初始化系统。xv6内核包含多个关键模块文件,如进程管理、文件系统、内存分配等。文章还对比了RV32和RV64指令集的主要区别,包括寄存器宽度、地址空间、访存指令等方面的差异,重点说明了RV64新增的64位操作指令和32位运算的特殊处理方式。这些内容为理解RISC-V架构和xv6操作系统提供了基础技术背景。

2026-05-26 11:35:50 565

原创 XV6 : LEC 1 (ab) Introduction and examples

记录完成实验的过程中遇到的问题,和笔记,项目实现源码在本人github仓库

2026-05-23 17:00:28 201

原创 keil5出现no st-link detected(提供一种解决方案)

笔者这里使用的是stm32f103c8t6的板子,J-link ARM仿真器,在使用keil5烧录时,出现no st-link detected如下问题。

2026-03-30 23:07:39 296

原创 解决Antigravity的 报错:HTTP 400 “Invalid project resource name projects/“

在Antigravity中,无法和模型进行正常对话,对 Google Cloud API 的调用失败,返回了 HTTP 400 Bad Request。

2026-03-10 01:16:07 2244 4

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除