xv6学习笔记(5) : 锁与管道与多cpu 1. xv6锁结构 1. xv6操作系统要求在内核临界区操作时中断必须关闭。 如果此时中断开启,那么可能会出现以下死锁情况: 进程A在内核态运行并拿下了p锁时,触发中断进入中断处理程序。 中断处理程序也在内核态中请求p锁,由于锁在 ...
在包括XV 的绝大部分操作系统都是多个任务交错执行的。交错的一个原因是多核硬件:多核计算机的多个CPU核心独立执行计算,如XV 的RISC V处理器。多个CPU核心共享物理内存,XV 利用这种共享来维护所有核心都会读写的数据结构。而这种共享会导致一个CPU在读取某数据结构时,可能有另一个CPU正在对此数据进行更新 或者多个CPU同时更新同一个数据。如果不对这种并行访问进行小心的设计,就可能会导致错 ...
2021-02-05 11:05 0 334 推荐指数:
xv6学习笔记(5) : 锁与管道与多cpu 1. xv6锁结构 1. xv6操作系统要求在内核临界区操作时中断必须关闭。 如果此时中断开启,那么可能会出现以下死锁情况: 进程A在内核态运行并拿下了p锁时,触发中断进入中断处理程序。 中断处理程序也在内核态中请求p锁,由于锁在 ...
代码在github上。 这一个实验是要利用缺页异常来实现懒分配(lazy allocation)。用户态程序通过sbrk系统调用来在堆上分配内存,而sbrk则会通过kalloc函数来申请内存页面,之 ...
实验的代码放在了Github上。 第二个实验是Lab: system calls。 这个实验主要就是自己实现几个简单的系统调用并添加到XV6中。 XV6系统调用 添加系统调用主要有以下几步: 在user/user.h中添加系统调用函数的定义。 在user/usys.pl中添加 ...
页表是操作系统中非常重要的一部分,用于将虚拟地址转化为物理地址。虚拟内存是操作系统实现进程隔离的关键技术。 在 XV6 中通过 RISC-V 的页表机构完成了虚拟地址向物理地址的转换。 分页硬件机构 XV6 运行于 Sv39 RISC-V 上,64 位地址中的低 39 位被使用。RISC-V ...
这一个实验主要是学习XV6的页表(分页机制),关于分页机制的相关内容已经写在XV6学习 (3)里面了。 代码放在Github上。 Print a page table (easy) 这一个就是要实现一个vmprint()函数来遍历页表并打印,可以仿照freewalk()函数来写。 在这里 ...
正在学习MIT的6.S081,把做的实验写一写吧。 实验的代码放在了Github上。 第一个实验是Lab util,算是一个热身的实验,没有涉及到系统的底层,就是使用系统调用来完成几个用户模式的小程序。 Boot xv6 (easy) 启动XV6,按照文档执行就ok了。 在XV6中 ...
这一个实验主要是对RISC-V的汇编、栈帧结构以及陷阱进行简单的了解,难度并不大。 代码放在github上。 RISC-V assembly (easy) Q1: Which registers ...
xv6学习笔记(4) : 进程 xv6所有程序都是单进程、单线程程序。要明白这个概念才好继续往下看 1. XV6中进程相关的数据结构 在XV6中,与进程有关的数据结构如下 与前述的两类信息的对应关系如下 操作系统管理进程有关的信息:内核栈kstack,进程的状态state,进程 ...