首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

xv6(4) 中断理论部分

$8259A$ 还有其他的寄存器比如初始化命令寄存器,操作命令寄存器,这里我们后面讲述 $xv6$ 并不会使用 $PIC$,所以这里也就不说明了,最后来看看通过 $PIC$ 的中断流程: PIC 中断流程...到 0 ,产生时钟中断时,$Current$ $Count$ 就会自动地从 $Intial$ $Count$ 重新加载,接着新一次的倒数,所以其实 $Current$ $Count$ 似乎没什么用,xv6...$LAPIC$ 自己也可以作为中断源,可在 $LVT$ 中配置相关中断,主要留意时钟中断的设置,$xv6$ 就是使用 $LAPIC$ 自带的时钟来周期性产生时钟中断。...另外通常这部分也把向量号 $vector$ 也压进去,比如 $xv6$ 里就是保存完上下文之后就是这样: 执行中断处理程序 这部分其实没啥说的,就是 $CPU$ 来执行一个程序来处理中断,不同的中断处理程序肯定是不同的

22900

xv6(7) 锁LOCK锁

本文以 $xv6$ 为例来讲解锁本身是怎么实现的,废话不多说先来看一些需要了解的概念:一些概念公共资源:顾名思义就是被多个任务共享的资源,可以是公共内存,也可以是公共文件等等临界区: 要访问使用公共资源...根据上面两种大的解决方案,xv6 实现了两种锁,自旋锁和休眠锁,下面来仔细看看:自旋锁结构定义struct spinlock { uint locked; // Is the lock held...对此可能是 xv6 的一个小 bug 吧,补上就行。第二个条件 ebp 值不能在内核之下即处于用户态,getcallerpcs 的调用者,调用者的调用者都是运行在内核,所以应不会处于用户态的低地址。...FAQ基本函数说完,来聊聊一些遗留问题:Ⅰ xv6 的竞争条件有哪些?xv6 是个支持多处理器的系统,各个 CPU 之间可以并行执行,所以可能会出现同时访问公共资源的情况。...下面代码由 xv6 文档给出:for(;;) { if(!

13010

xv6(2) 启动代码部分

启动代码部分 本文来说码,实打实地来看看计算机到底是如何启动的,先来看看 $xv6$ 启动的整体流程图,好有个大概认识: 不要被这么一大坨吓到,$xv6$ 的启动过程算简单的,在启动方面做了很多简化,应该说整个操作系统都做了简化...虽说 $xv6$ 的启动过程相对简单,但也是有些复杂的,弯弯绕绕有些多,看代码和看下面文章时可以对照着这张图,免得走掉。...这个 $xv6.img$ 可以看作是磁盘映像。...KERNEL 前面所做的事情都可以看作是引导部分,目的就是将 $xv6$ 的内核加载到内存,然后将权力交给内核。...最后再来看一下 $xv6$ 的启动流程图: 上面的启动流程图是很完整的一个图,将各种初始化也画出来了,但是本文只讲述了一小部分,其他部分留待相应章节讲述。

23000

xv6(19) SHELL交互程序

本文主要通过 $xv6$ 来看看如何实现一个简单的 $shell$,$shell$ 实现分为两个主要步骤,一解析输入的命令字符串,二执行命令。...$However,$ $xv6$ 里面对管道文件没有分配 $inode$,我不知道这样做有什么好处,省下了 $inode$?...正因为少了 $inode$ 这一层,当时看这一块的源码的时候就感觉不太统一,层次不分明,但 $xv6$ 小也无伤大雅,整个脉络还是很容易理清。...总而言之 $xv6$ 机制少,使用方面也要符合习惯于规范。关于文件系统和进程资源的回收详见前文,这里不赘述。...总结 本文主要通过 $xv6$ 讲述了 $shell$ 这个人机交互程序如何实现,着重把重定向和管道机制拿出来说了说。实现 $shell$ 两个主要步骤,一解析命令,二执行命令。

24110

xv6(3) 内存管理部分

我觉得那里面对内存管理层次抽象分的很清楚,每个操作系统都有相通性,这里拿出来说说: 物理内存管理,主要就是物理页的分配与回收 虚拟内存管理,主要就是虚拟页的分配与回收 物理内存与虚拟内存建立映射,那就是页表了 xv6...分配某页/块就是将相应的位置 1,回收就是将相应的位置 0 空闲链表法 xv6 对于物理内存的组织管理使用的是空闲链表法。...页表内核部分 映射关系 要了解其他几个参数还需要先来了解 xv6 的虚拟地址空间和实际的物理地址空间的映射关系,这也有相应的结构体表示: #define EXTMEM 0x100000...再者也可以看出 xv6 并没有使用全部的 4G 地址空间,有很大一部分都没有使用,内核的为映射部分和物理地址空间的未映射部分两者大小是不一样的,可能图画得有些迷惑,拿出来说一下。...的设计思路,当然只是看和内存相关比较紧密的部分: 最开始内核加载到物理地址 0x10 0000 处,xv6 内核很小,整个内核只有 200 多 K。

23710

xv6(11) 文件系统:日志

日志就是设计来解决因为系统崩溃导致的错误问题,本文就 $xv6$ 来讲解怎么实现一个简单的日志系统。...上面的理论大都来自 $xv6$ 文档,我们能了解到,最为重要的是实现写操作的原子性,那么怎样实现呢?...$xv6$ 在磁盘上分配了一片日志区,假如现在内存中有一个缓存块准备同步到磁盘区域 A,$xv6$ 并不立即将该缓存块的数据写到磁盘区域 A,而是先写到磁盘的日志区(提交)。...$xv6$ 文件系统的总体布局如下: 引导块位于磁盘第零个扇区(LBA),里面存放的就是引导程序。其后就是超级块,接着就是日志区,分为日志头(位于第一个日志块)和日志数据块。...$n$ 来记录当前日志使用的空间大小,日志区的总大小记录在超级块中(大小的单位是块),同时 $xv6$ 也规定每次日志使用的块数也不能超过 $LOGSIZE$。

18010

xv6(14) 文件系统:创建

当然这只是基本原理,还有很多细节要处理,我们在 $xv6$ 创建文件系统的程序中再详细了解。...主机上有个文件叫做 $fs.img$,虚拟机将这个文件当作 $xv6$ 的磁盘,但是对于 $xv6$ 本身来说,它不知道这个 $fs.img$ 就是主机磁盘上的一个普通文件,对于 $xv6$ 来说,$fs.img...相关功能函数 转化为小端模式 我学习的 $xv6$ 实现基于 $intel$ 的 $x86$ 架构,使用小端模式,$xv6$ 一般运行在虚拟机上,虚拟机又可能运行在各个平台,使用的大小端可能就不一样,这里全转化为小端模式...为什么 $qemu$ 里的 $xv6$ 能使用,原因就在此处了。...$xv6$ 里面的块都是有相应的位图标识,所以这里调用 $balloc$ 将第一个空闲块之前的位图全部置 1。因为 $xv6$ 的系统布局就是数据区前面全是不可分配的元数据,需要全部置 1。

19410

MIT_6.S081_xv6.Information 集合

MIT_6.S081_xv6.Information 集合 于2023年2月6日2023年2月6日由Sukuna发布 1:Operating System Overview 1 xv6系统的启动过程:...理解 xv6 是理解这些操作系统的一个良好起点。 xv6 使用了传统的内核概念 – 一个向其他运行中程序提供服务的特殊程序。每一个运行中程序(称之为进程)都拥有包含指令、数据、栈的内存空间。...内核地址空间 图片 xv6对每个进程都维护了一份页表(每个进程都有一个页表),来表示不同进程的虚拟地址空间.当然xv6也会给内核态地址空间维护一个页表,也就是说xv6的地址空间=若干个用户态进程的地址空间...所有的xv6关于地址的处理全部放在vm.c这个文件中....7:Lock 许多操作系统内核,包括xv6都保持着多线程多进程执行,首先是因为这个xv6有许多个微处理器,这些处理器(CPU)是独立地执行一段代码,共享物理内存,这个时候就会有问题,就是在一个CPU读取数据的时候

1.4K10
领券