首页
学习
活动
专区
工具
TVP
发布
您找到你想要的搜索结果了吗?
是的
没有找到

xv6(11) 文件系统:日志

通常文件系统调用就是读写磁盘上的数据,所以同样的先调用 $bread$ 读取数据,然后修改,但是同步写到磁盘上不是直接调用 $bwrite$ 而是使用 $log_write$ 来替代。...log_write void log_write(struct buf *b) { int i; if (log.lh.n >= LOGSIZE || log.lh.n >= log.size...而 $log_write$ 只是设置缓存块的脏位并未立即进行磁盘请求,而是后面提交的时候统一同步写到磁盘。...如果调用了 $log_write$ 之后调用 $brelse$ 释放缓存块,这时候日志还没有提交,则可能会出现缓存块引用为 0,但数据脏的情况,具体例子可参考 $fs.c/writei$ 函数。...这里 log_write 就是写文件的第三层函数,回顾一下,第一层:使用磁盘的物理接口读写数据,第二层:读写磁盘的缓存块,第三层:写日志块,没有对应的读操作。

17610

xv6(12) 文件系统:Inode&Directory&Path

标记该块使用 log_write(bp); brelse(bp); //释放锁 bzero(dev, b + bi);...& m) == 0) //如果该块本来就是空闲的 panic("freeing free block"); //panic bp->data[bi/8] &= ~m; //置0 log_write...在 $Linux$ 里面使用 $major\ number$ 和 $minor\ number$ 来区分设备,同一类设备有着相同的 $major\ number$,$minor\ number$ 又表示该类设备中具体的某设备...; short nlink; uint size; uint addrs[NDIRECT+1]; }; 内存中的 $inode$ 比磁盘上的 $inode$ 多了几个属性,首先是设备号,$Linux...分配了该 $dinode$ 需要在磁盘上也将其标记为已分配,因为目前是在内存中操作的,得同步到磁盘上去,所以直接调用 $log_write()$ 将该 $dinode$ 所在的缓存块同步到磁盘。

19210

Linux - Linux内存管理

为了解决内存紧缺的问题,Linux引入了虚拟内存的概念。为了解决快速存取,引入了缓存机制、交换机制等。...要深入了解Linux内存运行机制,需要知道下面提到的几个方面。 首先,Linux系统会不时地进行页面交换操作,以保持尽可能多的空闲物理内存。...其次,Linux进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存中,Linux内核根据“最近最经常使用”算法,仅仅将一些不经常使用的页面文件交换到虚拟内存中。...Linux虽然可以在一段时间内自行恢复,但是恢复后的系统已经基本不可用了。...Linux下可以使用文件系统中的一个常规文件或者一个独立分区作为交换空间。同时Linux允许使用多个交换分区或者交换文件。

52.1K41

Linux】--- Linux权限概念

shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。...2.3 Linux中的用户 Linux下有两种用户:超级管理员(root)、普通用户。 超级管理员(root):可以再linux系统下做任何事情,不受权限约束 普通用户:在linux下做有限的事情。...Linux具有组的概念,主要是在多人协作的时候,更好的进行权限管理!...而在Linux中不通过后缀区分文件类型!但并不是说Linux不用后缀。 那通过什么区分呢?即ls -l第一个属性列。 Linux文件类型: -:普通文件。...很简单一个道理,Linux系统不以文件后缀作为区分文件类型的依据,但并不代表gcc不需要,Linux系统 != gcc。

7510
领券