一亩三分地

 找回密码 注册账号

扫描二维码登录本站


Salarytics=Salary Analytics
查询工资数据
系统自动计算每年收入

码农求职神器Triplebyte
不用海投
内推多家公司面试

科技公司如何
用数据分析驱动产品开发
coupon code 250off 立减$250

深入浅出AB Test
从入门到精通
coupon code 250off 立减$250
游戏初创公司招聘工程师、UIUX Designer和游戏策划
坐标湾区
DreamCraft创始团队
招聘游戏开发工程师
查看: 653|回复: 2
收起左侧

如何设计文件系统

[复制链接] |试试Instant~
我的人缘0

分享帖子到朋友圈
liux0656 | 显示全部楼层 |阅读模式
本楼: 👍   100% (1)
 
 
0% (0)   👎
全局: 👍   99% (464)
 
 
0% (4)    👎

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
如何设计文件系统?

要回答如何设计,首先我们要搞清楚为什么需要文件系统?
我们的第一个需求是保存数据。如果要保存“Wikipedia”这个单词,最早的程序员需要使用以下的纸带才行。

参考资料:https://en.wikipedia.org/wiki/Punched_tape

纸带能够满足我们的需求吗?
不能,因为我们希望保存的数据越来越多,希望读取的速度越来越快,也希望更易保存。
我们需要什么?
一个超级的纸带来满足我们的需求。

如何保存数据?
从头开始把数据写入。

如何修改数据?
给我一个能修改的纸带吧。于是有了一个超大的磁带。
通过修改每个位置的磁性,我能够修改0或者1。
如何存放A和B两个人的数据?
把A的数据放在一起,把B的数据放在一起。
知识点:Block:实际记录文件的内容

如何知道A和B的数据各在哪里?
在起始的地方添加指向A和B数据的地址的信息。
知识点:inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码

如果一个人有多个文件怎么办?
多个指针。
如果文件有层次结构怎么办?
目录结构。
怎么保证一个人的文件只能被自己访问?
用户权限。
知识点:相关内容还有权限、属性(拥有者、群组、时间)
用户权限保存在哪里?
指针处。
如何知道还有多少剩余空间?
BitMap来记录。
Bitmap存在哪里?
起点(Superblock)
如何减少Bitmap占用的空间?
分块。
如何不断的添加数据?
添加数据会造成数据不连续。
如何记录一个文件不连续的存储空间?
链表式。
如何加速链表式的检索?
索引式。
如果文件特别大,怎么保存信息?
2级+3级(256*256)
如何知道整个文件系统的信息?
superblock:记录文件系统的信息,包括inode/block的总量、使用量、剩余量, 以及文件系  统的格式与相关信息等
硬盘太大了,如何拆开一个存电影,一个存操作系统,一个存游戏?
分区
知识点:MBR(Master Boot Record)(446Byte)紧接着的分割表(64Byte)、64/(8*2)=4
为什么inode需要这么多信息?
该文件的存取模式(read/write/excute);
该文件的拥有者与群组(owner/group);
该文件的容量;
该文件创建或状态改变的时间(ctime);
最近一次的读取时间(atime);
最近修改的时间(mtime);
定义文件特性的旗标(flag),如 SetUID...;
该文件真正内容的指向 (pointer);

为什么Superblock需要这些信息?
block 与 inode 的总量;
未使用与已使用的 inode / block 数量;
block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128 bytes);
filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统的相关信息;
一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1 。

目录信息要如何存储?
想一想如何结合inode和data node
在数据写入过程中,系统崩溃了怎么办?
状态位检查 vs 日志

参考文献:http://wuchong.me/blog/2014/07/19/linux-file-system/
参看文献:http://vbird.dic.ksu.edu.tw/linu ... system.php#harddisk

延展问题:如何让Linux支持打印机、网络传输?
Everything is a file.觉得自己已经信心满满的回答任何问题啦,那就再挑战一下Linux文件系统十问吧,
  • 机械磁盘随机读写时速度非常慢,操作系统是采用什么技巧来提高随机读写的性能的?
  • touch一个新的空文件占用磁盘空间吗? 占用的话占用多少?
  • 新建一个空目录占用磁盘空间吗?占用多少?和新建一个文件相比,哪个占用的更大?
  • 你知道文件名是记录在磁盘的什么地方吗?
  • 文件名最长多长?受什么制约?
  • 文件名太长了会影响系统性能吗?为什么会产生影响?
  • 一个目录下最多能建立多少个文件?
  • 新建一个内容大小1k的文件,实际会占用多大的磁盘空间?
  • 向操作系统发起读取文件2Byte的命令,操作系统实际会读取多少呢?
  • 我们使用文件时要怎么样来能提高磁盘IO速度?


参考文献:http://djt.qq.com/article/view/620


评分

参与人数 4大米 +8 收起 理由
旋风少女 + 2 给你点个赞!
cecr + 2 给你点个赞!
zbh9000510 + 2 很有用的信息!
ripxdanni + 2 给你点个赞!

查看全部评分


上一篇:技术人员的常用网站集合
下一篇:Linux network上可以Ping, 但是python程序读不到数据

本帖被以下淘专辑推荐:

我的人缘0
luoyu 2019-8-21 09:30:39 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (17)
 
 
0% (0)    👎
学到了谢谢
回复

使用道具 举报

我的人缘0
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   36% (80)
 
 
63% (141)    👎
想起当年写 OS 的 bootloader 用 x86 汇编写 fs driver…
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法 - 不要多加空格: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版||一亩三分地

GMT+8, 2019-9-18 22:02

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表