The File System in JOS

单独开一贴扯一扯JOS里的文件系统

也是方便以后更新或引用.

集中火力看几个和文件系统有关系的头文件.

inc/fs.h

fs/fsformat.h

fs/fs.h

fs/serv.c

先回答一下神马是文件系统...

File system

    The xv6 file system provides data files, which are uninterpreted byte arrays, and directories, which contain named references to data files and other directories. Xv6 implements directories as a special kind of file. The directories form a tree, starting
at a special directory called the root. A path like /a/b/c refers to the file or directory

named c inside the directory named b inside the directory named a in the root directory /. Paths that don’t begin with / are evaluated relative to the calling process’s current directory, which can be changed with the chdir system call

在fs/serv.c里面一开始就有很详细的注释介绍.

JOS的文件系统由三大结构构成

1. 用于描述硬盘上文件的struct File

2.用于描述每一个打开的文件的struct Fd (file descriptor)

3. struct OpenFile 用于链接以上两个结构体

对于硬盘的,每一个Block的大小就是一个PGSIZE大小(4KB)

支持的单个文件名(当前某一路径下的文件名,不是绝对路径)最长是128个字符,包括字符串结束符

支持的绝对路径文件名是1024个字符,包括字符串结束符

文件的最大规格是MAXFILESIZE

下面是利用了结构体struct File对"文件"这一概念进行的抽象

下图是对于硬盘布局的描述图

第一扇区是boot, 用于储存系统的启动信息

第二个是super, 用于

第三个区域用于记录各种inode,由于是连续区域,方便index 索引.后面就是实际储存数据的区域了.

最后是log区域.

文件的类型也就两种,一种普通的文件,一种是目录

上面见过文件的抽象了 struct File

对于目录,用于描述目录的结构体在 fs/fsformat.h里面

我们能看到,对于一个目录来说,继承自结构体struct File,实质上目录也是个文件,只是这个文件提供各种其他普通文件的入口,并计数,一个目录能装的最大文件数目是 MAX_DIR_ENTS 128

值得注意的是第一个初始化的文件,是啥?根目录哇...

描述根目录的结构体 struct OpenFile被初始化为 0, 0 , 1 ,0

这里的这个1就是O_WRONLY

可以在inc/lib.h里面能找到各种文件打开权限(如果你看过APUE,就会有种老乡见老乡的感觉了...)

我们看看,究竟是怎么创建起一个文件系统的~

去kern/init.c里面.你会发现这里第一个被创建的内核创建的进程是 fs_fs.

下面是链接器的信息 fs_fs进程对应的起始地址在0xf01c9efe

下面是fs/Makefrag 的部分信息,生成程序fs/fs

重点来了,第一个进程用来初始化文件系统的进程fs_fs对应serv.c里面的umain.c

这里会有serve_init()还有fs_init()的初始化.

最后调用serve()启动文件系统服务

我们看看serve_init()

看,这里就是初始化opentab结构体数组.

这里值得注意的是FILEVA,这个地址开始,为每个文件储存对应的struct Fd,每个文件占用1页的大小.

在inc/fd.h里面你能看到这下面两个结构体,struct Fd定义如下:

对于 fs_init()

能很明显的看到super指针被赋值为指向硬盘第一块block的区域.(第0块是boot block)

bitmap指向第二块区域.

最后程序调用serve()函数开始启动文件系统的服务

这个文件系统进程基于进程通信完成对硬盘文件的读写!

大体的文件系统构造就是这样,后续如果有必要会继续update ...

主要是为lab 5做铺垫准备

  "故事的小黄花 从出生那年就飘着"

时间: 2024-08-26 04:29:53

The File System in JOS的相关文章

MIT-6.828-JOS-lab5:File system, Spawn and Shell

Lab 5: File system, Spawn and Shell tags: mit-6.828 os 概述 本lab将实现JOS的文件系统,只要包括如下四部分: 引入一个文件系统进程(FS进程)的特殊进程,该进程提供文件操作的接口. 建立RPC机制,客户端进程向FS进程发送请求,FS进程真正执行文件操作,并将数组返回给客户端进程. 更高级的抽象,引入文件描述符.通过文件描述符这一层抽象就可以将控制台,pipe,普通文件,统统按照文件来对待.(文件描述符和pipe实现原理) 支持从磁盘加载

MIT6.828 Lab 5: File system, Spawn and Shell

Introduction 在这次实验中将会实现创建进程并调用库函数装载和运行磁盘上的可执行文件.同时实现在操作系统内核的console上运行shell.这些特点都需要实现文件系统,在这里我们将实现1个简单可读写的文件系统. 本次实验新增加的文件如下: fs/fs.c 操作文件系统在磁盘上的结构. fs/bc.c 基于用户级页错误处理机制的块缓存. fs/ide.c 最简单基于PIO的IDE磁盘驱动. fs/serv.c 文件系统与客户端进程进行交互的服务端代码 lib/fd.c 实现传统UNIX

Google File System读书笔记

GFS是google分布式存储的基石,其他存储系统,比如Google的bigtable.megastore.percolator均直接或者间接的构建在GFS上. 系统架构 GFS Master维护了系统的元数据,包括文件及chunk命名空间.文件到chunk的映射关系.chunk的位置信息:复制整个系统的全局控制,master定期会与CS通过心跳的方式交换信息 GFS ChunkServer(CS,数据块服务器)64MB的chunk块,由master在创建时分配一个64位全局唯一的chunk句柄

NW.JS File System 文件夹的操作( 创建, 删除, 读取 )

<script type="text/javascript"> /* * 引入File System 模块 */ var fs = require("fs"); /* * 创建文件夹的方法 * mkdir(path, callback(){}) * path: 文件夹所在路径 * callback("错误信息 <成功返回null>"): 回调函数 */ fs.mkdir('./test', function(err){ i

NFS中小企业常见的网络文件系统服务(network file system)

NFS中小企业常见的网络文件系统服务(network file system) RPC服务最主要的功能就是记录每个NFS功能所对应的端口号,并在NFS客服端请求时将该端口和功能对应的信息传递个给请求数据的NFS客服端 流程: 1,先开启RPC服务 2,再启动NFS服务 3,NFS服务向RPC注册启动的端口 4,客服请求NFS服务 5,RPC返回端口给客服端 环境搭建: 服务端为 nfsserver  客服端为 nfsclient NFS服务需要安装的软件包: yum install nfs-ut

名字就叫&quot;nfs&quot;-(network file system)

一.简介   NFS(network file system)网络文件系统.通过网络让不同的主机系统之间可以实现文件或目录共享.分为客户端和服务器,NFS网络文件系统很像windows系统的网络共享.安全功能.网络驱动器和Samba服务类似. 二.安装及其配置 服务器端配置如下: 1)安装nfs-utils和rpcbind两包 yum -y install nfs-utils rpcbind 2)启动服务 service nfs start或/etc/init.d/nfs start    /e

Can Microsoft’s exFAT file system bridge the gap between OSes?

转自:http://arstechnica.com/information-technology/2013/06/review-is-microsofts-new-data-sharing-system-a-cross-platform-savior/ With Apple's licensing of Microsoft's exFAT file system, it seems like we finally have a good option for OS X and Windows d

Windows -&gt;&gt; Windows下一代文件系统 -- Resilient file system(ReFS)

Comming soon!!! 参考文献: Building the next generation file system for Windows: ReFS ReFS: What you need to know about the Resilient File System (Part 1)

Hadoop -&gt;&gt; HDFS(Hadoop Distributed File System)

HDFS全称是Hadoop Distributed File System.作为分布式文件系统,具有高容错性的特点.它放宽了POSIX对于操作系统接口的要求,可以直接以流(Stream)的形式访问文件系统中的数据. HDFS能快速检测到硬件故障,也就是数据节点的Failover,并且自动恢复数据访问. 使用流形式的数据方法特点不是对数据访问时快速的反应,而是批量数据处理时的吞吐能力的最大化. 文件操作原则: HDFS文件的操作原则是“只写一次,多次读取”.一个文件一旦被创建再写入数据完毕后就不再