对文件系统原理学习的理解
按需分配。打开的文件属性才放入内存中。
关键点是记录某个文件用到哪几块磁盘地址。一个文件可能占多个磁盘块,可能是一个。关键在于文件的的大小
文件名,磁盘块地址,多个。
连续分配:一个文件占据了3个磁盘块。是连续在一起的。
读的性能很好,读一个文件的内容只要一次操作,找到第一个磁盘块,后面的磁盘块就知道了。不用继续旋转。
缺点是,磁盘碎片多。要想避免碎片,要多进行碎片整理(不显示,太耗费性能)。所以这种方式不适合变化大小的文件。适合固定大小。比如CD文件。
链表分配:解决磁盘碎片。文件占用三个磁盘块,这三个磁盘块可以在任意位置,很方便扩充文件的容量。比如文件增加内容,要加一个磁盘块,随便去哪里拖一个磁盘块挂上去。有一个指针指向磁盘块地址。
缺点是,随机读写耗费性能。比如要读一个文件的第6个磁盘块的内容,必须从找到文件的第一个磁盘块然后顺着顺序第二,第三.....第五全部读到,才能知道第六个磁盘块在哪里。
为了提高速度。把文件的链表放到内存中。
在内存中存储链表。
多少个文件。就要多少个链表项吗?
为了解决占用内存过多问题(磁盘容量比内存大多了。
关键点是记录某个文件用到哪几块磁盘地址。一个文件可能占多个磁盘块,可能是一个。关键在于文件的的大小
文件名,磁盘块地址,多个。
连续分配:一个文件占据了3个磁盘块。是连续在一起的。
读的性能很好,读一个文件的内容只要一次操作,找到第一个磁盘块,后面的磁盘块就知道了。不用继续旋转。
缺点是,磁盘碎片多。要想避免碎片,要多进行碎片整理(不显示,太耗费性能)。所以这种方式不适合变化大小的文件。适合固定大小。比如CD文件。
链表分配:解决磁盘碎片。文件占用三个磁盘块,这三个磁盘块可以在任意位置,很方便扩充文件的容量。比如文件增加内容,要加一个磁盘块,随便去哪里拖一个磁盘块挂上去。有一个指针指向磁盘块地址。
缺点是,随机读写耗费性能。比如要读一个文件的第6个磁盘块的内容,必须从找到文件的第一个磁盘块然后顺着顺序第二,第三.....第五全部读到,才能知道第六个磁盘块在哪里。
为了提高速度。把文件的链表放到内存中。
在内存中存储链表。
多少个文件。就要多少个链表项吗?
为了解决占用内存过多问题(磁盘容量比内存大多了。
疑问,这个链表项是如何设计的呢。
链表这种数据结构要看看。。
文件名,目录是特殊的文件。
目录下有子目录如何实现的。文件最终在目录下
文件系统几种实现方式
文件系统要解决的本质问题是,一个文件在磁盘上如何组其内容。
然后记录这个文件分布在哪几个磁盘块上,这样当读取文件内容的时候知道去磁盘哪里找。
1、连续分配法
一个文件的内容存储在连续的磁盘块上。
这样实现很简单:记录文件第一块磁盘块位置,然后记录一个往后推的数字号。做简单的加法即可找到内容。
缺点:造成磁盘碎片。发生在删除文件的时候,这个文件占据的磁盘块就是空闲状态。
刚开始不会有这问题,因为磁盘有足够的空间可用。不用管这些空闲块。但是后面磁盘空间不够用的时候呢,还是要来使用它们。
如何让新加的文件使用这些空闲块呢?
你存入数据之前必先先知道这个文件大小,文件大小要是固定的。比如5k。不是固定的话,文件内容增长,超过5k后呢?
这样计算大小的方式实际好不好?
假设你打开一个wps进行编辑,必须要先问用户,你的文件打算多大空间。这样才能去选择合适的磁盘块存储这个文件。
用户怎么知道?
2、链表分配法
磁盘块形成一个链表。串起来。相信我们生活中用的链子,是不是一个节点一个一起串起来的。
磁盘块看成是节点。
每个磁盘块第一个字节,存一个指针,这个指针就是指向下一个磁盘块。
想象一下房间号。
找出一批量房间给这些运动员的居住的。
现在明白了,内存中的文件分配表。
实际上就是为每个文件做一个条目。这个条目里面记着磁盘块的指针,指针是从开始到结束,按照顺序来的。
为什么window要进行分区而linux系统不用分区?
现在明白其中原理了。
window 之所以要进行分区。就是因为,它需要区分不同的文件系统。当你请求一个文件时,给出路径,操作系统就能知道向哪个文件系统去请求,就是因为分区。一个分区只能有一个文件系统。window通过盘符(c,d,e,f等字母)来确定文件系统。
Linux不需要分区。因为它做了一个抽象层。来管理所有文件系统。
操作系统针对这个抽象层来获取数据。使用挂载的方式。a 和b两个磁盘可以挂载到同一个目录下去。读取文件的时候,关心的是所有文件系统的抽象层操作,可以理解成接口。
分段和分页技术
至今都没搞明白,段和页的区别。
页是操作系统的看法,它将内存划分成一块一块。
有什么用呢?
搞清楚操作系统为什么要这样子做。
难道是为了解决内存不够的问题吗?
页是操作系统的看法,它将内存划分成一块一块。
有什么用呢?
搞清楚操作系统为什么要这样子做。
难道是为了解决内存不够的问题吗?
分段技术早于分页技术。
最先有分段,它的特点是,程序需要多少内存空间,就以多少空间为整体换入磁盘,在磁盘和内存之间移动。
这里的段很形象解释了,程序运行在哪个内存区间,这就是段。分段,以段为单位来分配内存?
这样效率并不高。提出一个分页思想,通俗就是等份大小的内存。明显的问题我还没看到。
操作系统为每个进程分配时间片
为什么操作系统要设计成抢占资源的方式呢?这一让每个任务都能得到处理 如果一个任务将要耗费很长时间那么,它就会占着cpu,结果导致其他任务无法处理。
现实中有这样的思想和案例。
上下文切换,是不是指的就是这种调度呢?
上下文切换:保持当前进程状态(应该是放到磁盘上去?),然后把另外一个进程调入进去供cpu执行。
现实中有这样的思想和案例。
上下文切换,是不是指的就是这种调度呢?
上下文切换:保持当前进程状态(应该是放到磁盘上去?),然后把另外一个进程调入进去供cpu执行。