Xv6

Xv6内核分析(十九)

路径名解析功能分析 路径名解析就是依次寻找目录中的元素,直到找到匹配的文件。比如要想寻找/a/b.txt文件,则解析顺序如下: 在根目录’/‘inode中寻找名为a的条目。 由于a也是一个目录,则继续...
阅读全文
Xv6

Xv6内核分析(十八)

目录实现分析 1. Xv6目录简介 在xv6中目录的也是用inode来表示的,只是inode中的type字段为T_DIR。普通文件的数据块中保存的是文件的内容,但是目录inode的数据块中保存的是一系...
阅读全文
Xv6

Xv6内核分析(十七)

inode内容分析 1. inode具体内容 磁盘上的Inode具体内容如下: inode的数据块在磁盘上的位置由inode的address表来记录,address表分为直接表和间接表,直接表共有12...
阅读全文
Xv6

Xv6内核分析(十六)

inode分析 1. inode介绍 在xv6中用Inode表示一个文件,inode数据结构在磁盘上和内存中都有表示。磁盘上的inode信息用于表示文件的大小、类型、文件数据在磁盘上的位置等等,内存中...
阅读全文
Xv6

Xv6内核分析(十五)

block 分配器 文件和目录的内容存在磁盘块中,磁盘块都从一个空闲块池中分配出来。xv6 的块分配器包含一个磁盘上的空闲块位图,每个块占一个位。引导区,超级块,i 节点块和位图块的位永远都被置为有效...
阅读全文
Xv6

Xv6内核分析(十四)

日志子系统分析 1. 日志子系统简介 Xv6中的log日志子系统主要用于系统以外崩溃挥着掉电后,再次运行时能够恢复运行。xv6中的磁盘中的文件系统布局如下:   日志区域由一个日志头加上30...
阅读全文
Xv6

Xv6内核分析(十三)

buffer cache分析 1. buffer cache概述 Buffer cache是一个双向循环链表,用于缓存磁盘上的数据以提高性能。使用bread从磁盘上读取数据,使用bwrite将修改的数...
阅读全文
Xv6

Xv6内核分析(十二)

sleeping lock分析 Xv6中的sleeping lock只在文件系统中使用到,因为从磁盘读写数据可能需要数ms的时间,这时进程可以放弃cpu让其他进程运行。但是放弃cpu的同时也会锁住文件...
阅读全文
Xv6

Xv6内核分析(十)

spinlock分析 1. initlock spinlock分析spinlock: 主要是初始化锁的状态为0,并记录锁的名字用于调试分析。 2. pushcli和popcli 在xv6中,用spin...
阅读全文
Xv6

Xv6内核分析(九)

ide硬盘驱动分析 1. 磁盘驱动程序 磁盘驱动程序用结构体 buf(称为缓冲区)来表示一个磁盘扇区。每一个缓冲区表示磁盘设备上的一个扇区。域 dev 和 sector 给出了设备号和扇区号,域 da...
阅读全文
Xv6

Xv6内核分析(八)

新进程运行分析 进程刚创建时的内核栈分布如下: 当从swtch中的ret返回后,新进程回到forkret中执行。 forkret首先会释放ptable.lock这个锁,这个锁是在scheduler线程...
阅读全文