原文:xv6学习笔记(5) : 锁与管道与多cpu

xv 学习笔记 : 锁与管道与多cpu . xv 锁结构 . xv 操作系统要求在内核临界区操作时中断必须关闭。 如果此时中断开启,那么可能会出现以下死锁情况: 进程A在内核态运行并拿下了p锁时,触发中断进入中断处理程序。 中断处理程序也在内核态中请求p锁,由于锁在A进程手里,且只有A进程执行时才能释放p锁,因此中断处理程序必须返回,p锁才能被释放。 那么此时中断处理程序会永远拿不到锁,陷入无限循 ...

2021-08-29 20:22 2 208 推荐指数:

查看详情

XV6学习(10)

在包括XV6的绝大部分操作系统都是多个任务交错执行的。交错的一个原因是多核硬件:多核计算机的多个CPU核心独立执行计算,如XV6的RISC-V处理器。多个CPU核心共享物理内存,XV6利用这种共享来维护所有核心都会读写的数据结构。而这种共享会导致一个CPU在读取某数据结构时,可能有另一个CPU正在 ...

Fri Feb 05 19:05:00 CST 2021 0 334
xv6学习笔记(4) : 进程调度

xv6学习笔记(4) : 进程 xv6所有程序都是单进程、单线程程序。要明白这个概念才好继续往下看 1. XV6中进程相关的数据结构 在XV6中,与进程有关的数据结构如下 与前述的两类信息的对应关系如下 操作系统管理进程有关的信息:内核栈kstack,进程的状态state,进程 ...

Tue Aug 24 06:36:00 CST 2021 1 187
XV6学习笔记(1) : 启动与加载

XV6学习笔记(1) 1. 启动与加载 首先我们先来分析pc的启动。其实这个都是老生常谈了,但是还是很重要的(也不知道面试官考不考这玩意), 1. 启动的第一件事-bios 首先启动的第一件事就是运行bios,这个时候我们的机器位于实模式,也就是16位地址。这个时候能访问的空间只有1mb ...

Tue Aug 17 05:43:00 CST 2021 5 326
xv6学习笔记(3):中断处理和系统调用

xv6学习笔记(3):中断处理和系统调用 1. tvinit函数 这个函数位于main函数内 表明了就是设置idt表 1. SETGATE函数 这里的setgate是一个宏定义是用来设置idt表的 下面是函数参数的说明 Sel : 表示对于中断处理程序代码所在段的段选择 ...

Sun Aug 22 23:16:00 CST 2021 0 189
xv6操作系统学习笔记

0x00背景 最近在看操作系统上的书 然后选了本知乎推荐的xv6 https://th0ar.gitbooks.io/xv6-chinese/content/content/chapter0.html 我们从这几个问题入手 操作系统作用是什么? 内核的作用 ...

Sun Aug 06 08:53:00 CST 2017 0 1413
XV6学习(7)Lab lazy

代码在github上。 这一个实验是要利用缺页异常来实现懒分配(lazy allocation)。用户态程序通过sbrk系统调用来在堆上分配内存,而sbrk则会通过kalloc函数来申请内存页面,之 ...

Sat Jan 16 18:39:00 CST 2021 1 461
XV6学习(2)Lab syscall

实验的代码放在了Github上。 第二个实验是Lab: system calls。 这个实验主要就是自己实现几个简单的系统调用并添加到XV6中。 XV6系统调用 添加系统调用主要有以下几步: 在user/user.h中添加系统调用函数的定义。 在user/usys.pl中添加 ...

Mon Dec 21 18:28:00 CST 2020 0 917
XV6学习(3)Page tables

页表是操作系统中非常重要的一部分,用于将虚拟地址转化为物理地址。虚拟内存是操作系统实现进程隔离的关键技术。 在 XV6 中通过 RISC-V 的页表机构完成了虚拟地址向物理地址的转换。 分页硬件机构 XV6 运行于 Sv39 RISC-V 上,64 位地址中的低 39 位被使用。RISC-V ...

Mon Dec 21 18:32:00 CST 2020 0 743
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM