rCore-Tutorial-Book-v3 icon indicating copy to clipboard operation
rCore-Tutorial-Book-v3 copied to clipboard

rCore-Tutorial-Book-v3/chapter6/3using-easy-fs-in-kernel

Open utterances-bot opened this issue 3 years ago • 17 comments

在内核中接入 easy-fs — rCore-Tutorial-Book-v3 3.6.0-alpha.1 文档

https://rcore-os.github.io/rCore-Tutorial-Book-v3/chapter6/3using-easy-fs-in-kernel.html

utterances-bot avatar Jan 30 '22 16:01 utterances-bot

因为 OSInode 也是要一种要放到进程文件描述符表中

不通顺

lindyang avatar Jan 30 '22 16:01 lindyang

上一页简易文件系统easy-fs的实现中为什么要把 DiskInode 的 _data_blocks 再封装成 data_blocks,感觉写成两个函数有点冗余,请问是有什么考量吗

wei-huan avatar Mar 05 '22 06:03 wei-huan

@wei-huan 由于时间仓促没有好好整理代码,这里确实有些冗余。

wyfcyx avatar Mar 05 '22 07:03 wyfcyx

请问virtio-drivers中VirtIOBlkread_blockwrite_block实现是否也要求传入的buf所在的物理内存地址区域是连续的?我在物理页不连续的内核栈上调用read_block时会读到一些脏数据,会是这里的问题吗?

Direktor799 avatar May 27 '22 05:05 Direktor799

请问virtio-drivers中VirtIOBlkread_blockwrite_block实现是否也要求传入的buf所在的物理内存地址区域是连续的?我在物理页不连续的内核栈上调用read_block时会读到一些脏数据,会是这里的问题吗?

@Direktor799 是这样的,目前virtio-drivers还不支持物理地址不连续的缓冲区,详见这里

wyfcyx avatar May 27 '22 05:05 wyfcyx

@wyfcyx 感谢回复,教程中似乎并没有对此做相关处理,是否可以在kernel中单独分配一些物理页用作VirtIOBlk读写操作的缓冲?在操作BlockCache时读写这些固定的物理页面。 或是将类似功能集成到virtio-drivers中,在virtio_dma_alloc时再多请求一些用于缓冲的物理页,会是好的实现吗?

Direktor799 avatar May 27 '22 06:05 Direktor799

@wyfcyx 感谢回复,教程中似乎并没有对此做相关处理,是否可以在kernel中单独分配一些物理页用作VirtIOBlk读写操作的缓冲?在操作BlockCache时读写这些固定的物理页面。 或是将类似功能集成到virtio-drivers中,在virtio_dma_alloc时再多请求一些用于缓冲的物理页,会是好的实现吗?

@Direktor799 听起来不错。

wyfcyx avatar May 27 '22 06:05 wyfcyx

@Direktor799 哈哈,你这个想法和OSTEP里Filesystem Implementation这一章里Caching and Buffering里提到的好像,有Static和Dynamic partition,不过感觉是个大工程,我也挺有兴趣实现的。有兴趣的话可以参考上面提到的书中的章节,可以一起实现下试试。

PeterWrighten avatar Jun 27 '22 10:06 PeterWrighten

@PeterWrighten 简单阅读了一下对应的章节,感觉上一章的BlockCacheManager就已经是Dynamic比较好的实现了,只需要更新Cache替换算法即可。而之前的comment主要是针对加载BlockCache时dma在物理地址上顺序读写,但虚拟地址实际对应的物理地址不连续导致的问题,已经通过BuddySystem解决

Direktor799 avatar Jun 28 '22 06:06 Direktor799

@PeterWrighten 简单阅读了一下对应的章节,感觉上一章的BlockCacheManager就已经是Dynamic比较好的实现了,只需要更新Cache替换算法即可。而之前的comment主要是针对加载BlockCache时dma在物理地址上顺序读写,但虚拟地址实际对应的物理地址不连续导致的问题,已经通过BuddySystem解决

@Direktor799 好的,谢谢。但那一章感觉是在讲分页内存和文件系统内存的动态分割,也可能是我理解错了。

PeterWrighten avatar Jun 28 '22 18:06 PeterWrighten

从Qemu for RISC-V 64 平台的 源码 中可以找到 VirtIO 外设总线的 MMIO 物理地址区间为从 0x10001000 开头的 4KiB 。

这里链接的源码的位置有些偏移,现在在这里

    [VIRT_VIRTIO] =       { 0x10001000,        0x1000 },

左边是起始位置,右边是大小。

whfuyn avatar Oct 21 '22 07:10 whfuyn

这节是不是应该多介绍一下,接入文件系统后,fork系统调用实现的变化,以及父子进程并发读写的行为及实现。

typhigh avatar Oct 25 '22 15:10 typhigh

目前文档的参考代码的对于 virtio-drivers 的依赖版本应该是早期的版本。virtio-drivers 0.3.0 近期发布了,目前仓库的代码没法直接使用 0.3.0 的版本。

CelestialMelody avatar Apr 03 '23 14:04 CelestialMelody