导航:首页 > 文件目录 > 操作系统中什么是空闲文件

操作系统中什么是空闲文件

发布时间:2024-09-25 19:24:01

⑴ 常用文件存储设备管理方法有哪些操作系统课后题

常用的文件储存设备管理方法主要是指对文件的储存设备的空闲区进行管理.可分为三个数据组织策略:空闲文件目录(空闲区索引法、空闲表法)空闲链链表法(自由链法)及成组空闲区链链表法位示图或位图向量法.

空闲文件目录(空闲区索引法、空闲表法):

为连续的空闲分区建立指针,该指针和空闲块号、空闲块个数、第一个空闲块号等作为一个表项存放在一个叫空闲文件目录的物理块中.可采用空闲连续区的内存管理算法的变形进行分配和回收.空闲文件目录适用于连续文件结构的文件储存区的分配和回收.

空闲链链表法(自由链法)及成组空闲区链链表法:

空闲链链表法(自由链法),将所有空闲盘区拉成一条空闲链,根据空闲链所有的基本元素不同,可以把链表分成两种形式:空闲盘块链和空闲盘区链

空闲盘块链是将磁盘上的所有空闲分区,以盘块为单位拉成一条链,当用户创建文件请求分配存储空间时,系统从链首开始,依次摘下适当数目的空闲盘块分配给用户;当用户删除文件时,系统将回收的盘块依次加入到空闲盘块链的末尾。

空闲盘区链是将磁盘上的所有空闲盘区(每个空闲盘区可包含若干个盘块)拉成一条链。在管理的线性表中,每一个表项对应一个空闲区,增加一项存放指向空闲块的指针,将磁盘上的所有空闲区(可包含若干个空闲块)拉成一条链。每个空闲区上除含有用于指示下一个空闲区的指针外,还有本盘区大小(盘块数)的信息。

成组空闲区链链表法,空闲表法和空闲链表由于空闲表太长而不适合大型文件系统的使用。成组链接法是两种方法相结合的一种管理方法,兼备了两种方法的优点而克服了两种方法的缺点。其大致的思想是:把空闲的n个顺序(可以是地址,也可以说是其他)空闲扇区的地址保存在其第一个空闲扇区内,其后一个空闲扇区内则保存另一组顺序空闲扇区的地址,以此类推,直至所有空闲扇区都予以链接。

位示图或位图向量法:

本方法利用二进制的一位来表示磁盘中一个盘块的使用情况,磁盘上所有的盘块都有与之对应的一个二进制位。当其值为0时,表示对应的盘块空闲,当其值为1时,表示对应的盘块已经分配。

大晚上的,求几个赞!!

这个题难点在于怎么理解 常用文件存储设备管理方法 属于哪一个管理层次.文件有逻辑结构(大约4个)->存取方法(大约3个)->文件物理结构(大约3个)->存储空间管理(由于文件储存设备是分成若干个大小相等的物理块,并以块为单位交换信息,所以文件储存空间的管理实质上是一个空间块的组织和管理问题,包括空闲块的组织、分配、回收等.)(大约4个) ->文件目录管理 ->... ->... ->

上述 (大约xx个) 主要是怕被人怼,望不要介意!!

⑵ System Idle Process是什么

System Idle Process是系统闲置进程的意思。

System Idle Process是核心虚拟出来的,多任务操作系统都会存在,在没有可用的进程时,系统处于空运行状态,此时就是System Idle Process SYSTEM在运行,故它占用百分之九十以上CPU时间,说明你的机器负荷很轻。

(2)操作系统中什么是空闲文件扩展阅读

System Idle Process是一个系统进程,通常表示的就是CPU的空闲率,所以说大家可以理解为,System Idle Process的占用越高,说明CPU越空闲。

这个进程对电脑运行速度是没有任何影响的,它是一个系统进程,而且只会后台运行,并且不会使用网络,也不会对任何硬件产生联动。

例如:当你关闭了IE,IE停止向远程发送数据,但仍然收到了远程的数据包,而没有进程接收它,就归到了System Idle Process里面。

这种情况下,可以用内存整理软件整理一下内存,网络访问便会消失。但当你再次退出需要联网的程序(例如:IE)时,此进程的网络访问会再次出现,一般可以不做理会。

⑶ 系统临时文件、IE缓存文件和windows预读文件都是什么

你好朋友;
系统临时文件;就是你在运行程序或操作系统在运行过程中产生的一种文件;
扩展名为.tmp有一些还是.temp的;临时文件属于垃圾文件的一种;
ie缓存文件;
ie缓存文件实际上就是internet临时文件;这种文件是你用浏览器上网时候产生的;
浏览器在访问网站的过程中;是先把网站服务器硬盘中的内容【包括视频;音乐;图片;vbs脚本;js脚本】这些东西先以缓存的方式储存到你电脑中的internet临时文件夹内;然后再在屏幕上显示和播放出来的;
windows的预读文件; Win XP用来放预读文件的文件夹预读是微软采用的一种加速程序进程启动速度的技术;主要原理是在开机加载操作系统的时候读取常用程序的主要内容以备该程序启动时耗费大量时间来读取本身的数据。
目录
数据预读机制
常见问题
解决办法
局部碎片整理
开启预存取
defrag的参数
经验谈
MS网站上对prefetch的解释
数据预读机制
微软采用的一种全新系统后台数据预读机制;它可以提高系统性能;加快Windows XP/2003的启动速度;经过预读的程序全部存放在系统所在文件夹下的prefetcher目录中(图1);文件名格式类似于下面这个样子;FOXMAIL.EXE-2B721FDE.pf(这是Foxmail的预读文件);Windows XP/2003虽然采用了预读取机制;但是默认设置下比较保守;我们可以自己来定义程序的预读取方式;大幅度提高系统的性能;
常见问题;
在使用Windows XP较长时间后;我们会发现系统运行速度明显慢了下来;用多优化软件;卸载已经安装的软件都解决不了问题;究竟为什么呢?原来罪魁祸首就是预读设置;在“Windows\Prefetch”文件夹面有很多个以PF为扩展名的文件;这就是预读文件;如果将里面的文件清空以后;你就会发现系统运行速度又恢复正常了;看来;预读设置可以提高系统速度;但是使用一段时间后;预读文件夹里的文件又会变得很多了;导致系统搜索花费的时间变得很长;而且有些应用程序会产生死链接文件;进而加重了系统搜索的负担;
解决办法;
因此;我们应该定期删除这些预读文件;用以提高开机速度;当然;Windows XP重新设置预读对象是允许的;具体方法是;打开注册表编辑器;依次展开HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters分支;在右侧窗口中双击“EnablePrefetcher”;在打开的“Dword”值编辑窗口中;可以对Windows XP进行预读设置;将该值设置为“0”;即为取消预读功能;设置为“1”;系统将只预读应用程序;设置为“2”;系统将只预读Windows系统文件;设置为 “3”;系统将预读Windows系统文件和应用程序;一般我们将该值设置为“2”即可;当然;如果你的计算机配置很高;如使用PIII 800MHz CPU以上的建议将数值数据更改为4或5;也可以保留数值数据为默认值即3;这样可以加快系统运行速度;prefetch;预存取;这在vista用户可能知道的多些;其实xp下就有这一技术了;只是官方少有这方面介绍;更别提技术文档了;这是xp一个隐藏的特性;用处是在xp登录进度条出现时;就把c:\windows\prefetch目录下的*.pf文件信息预先装载到内存中;以便于提高系统性能;这些*.pf文件是系统和应用程序启动时留下的预存取文件;描述了系统和应用程序每次启动时装载模块的信息和顺序;并且其命名方式中包含一个描述其完整路径的十六进制值;另外;prefetch目录中还有一个重要文件;就是layout.ini这个磁盘布局初始化文件;它记录了所有预存取程序及文件的加载信息和顺序(按优先级排列);这也为这些程序文件的磁盘分配提供了最优化方案的依据;
局部碎片整理;
说到这;不得不提一下“局部碎片整理”;按照官方所说;xp每隔3天就会自动进行一次局部碎片整理;我发现这个整理动作是分步实施的;而且是在系统空闲时才会运行;这多亏了刚装上的SSM截获了defrag的这个动作信息;连命令行参数都一并截获;这个重点留待稍后再说;(其实系统在启动时也可以进行局部碎片整理;使得启动时需要的文件能够被整理到相邻位置;这个功能可以在注册表中开启;HKLM\SOFTWARE\Microsoft\Dfrg\BootOptimizeFunetion下enable键由默认的N改为Y即可)用Filemon跟踪发现;系统进行局部碎片整理时;先读取layout.ini文件;然后调用defrag针对layout.ini中涉及的文件进行整理;然后把转移信息再写入到layout.ini中;这个自动整理不同于server2003系统的自动碎片整理功能(Auto Defragmenter);
开启预存取;
至于是否开启预存取;有不少争论;但是我坚决认为应该开启;否则系统速度会变得更慢;HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters目录下;EnablePrefeteher子键的值决定以何种方式开启prefetch;0取消;1只预存取应用程序;2只预存取windows系统文件;3同时存取系统和应用程序文件;xp默认情况下是3;以上这些prefetch相关功能依赖于task schele计划任务这项服务;defrag的参数;
现在该说那个重点了;系统自动调用的defrag的参数是什么?是-p -s和-b。-p后面跟着一个常量;例如5E4;-s后也跟一个常量;比如000018A4;-b后跟着盘符C:;那么这个命令行的例子就是;defrag.exe -p 5E4 -s 000018A4 -b C: 了;-b这个参数网上一直有传言;说是defrag的隐藏参数;但是官方不给出澄清;我也不知道是否真的存在;这回算是证实了;-b C:就是对预存取的文件进行局部整理;并且每次仅针对一个pf文件相关程序文件进行整理;-p和-s应该就是用来选择哪一个pf的;但具体那两个常量和被选pf文件有什么联系;还有待进一步分析;平时如果想对系统和应用程序文件进行一次优化碎片整理;可以在命令行中敲入defrag.exe C: -b;这样会对所有prefetch文件进行整理;完成后你会觉得系统的速度有一定提升;
段经验谈
经验之谈;如果不小心删除了prefetch目录下的文件;尤其是layout.ini文件;如何重建?敲入rundll32.exe advapi32.dll,ProcessIdleTasks命令;然后重启三次系统;就可以重建layout.ini文件;为什么是三次;我也不知道;大概和每隔三天整理一次有关系吧;windows xp开机有一个进度条;会一遍一遍的跑;不少人认为只跑两圈就进去的就是开机速度快;网上出现过一种优化方式;修改注册表将所谓的“开机预读取”设置为“不预读”;则可以大大减少进度条“跑”的次数;但是这种“优化方法”出来不久;便有更多的文章指出这是“谬误”;还举出相当多的事例;或是试验;说明不预读并不能减少开机时间;大多的理由是进度条消失后的“黑屏时间”增加;因为一直用的休眠;所以我一直也没怎么在意;前两天和别人谈到这个问题;我便好好研究一番;结论是;其实关于这个问题;所谓设置为“不预读”的优化方法也并非谬误;而这个所谓的预读也并非没有用处;否则MS怎么也不会花人力物力弄这么个浪费开机时间的东西;先说说什么是所谓的“预读取”;预读取分两种;一种是“系统文件预读”;一种是“应用程序预读”;具体的不去讨论;现在只讨论预读取对速度的影响;我们都有经验;当第一次打开word的时候会等待比较长的时间;硬盘灯不停的在亮;但是关闭再次打开;word启动速度就快得多了;这个其实就是windows的预读取做的优化;windows预读取发现你带开了一个他的预读取数据库没有的应用程序时;他就会将这个应用程序中某些信息在内存中留下一个映象;下次打开这个程序就不用再去硬盘上找文件;能大大加块程序启动速度;问题来了;内存中的映象重新启动之后就会消失;下次开机启动程序依然很慢;怎么办呢?这就需要“开机预读取”功能;Windows会把使用频率较高的一些应用程序的信息记录下来;每次开机时;就完成一次对程序的预读取;从而大大加快应用程序的启动速度;你大概已经猜到;那个“进度条”一遍一遍的跑的时候,windows就在进行开机预读取的工作;因此;如果直接取消掉注册表中的“预读取功能”是一定会大大降低应用程序的启动速度的;当然开机速度会有一定的增加;不过这是得不偿失;因为没有了那一段必要的“系统文件预读取”;在进度条消失之后系统会从硬盘上去寻找大量的系统文件;反而影响启动速度;而且应用程序的启动速度也是一定会大大减慢的;其实比较好的优化办法是这样;找到“开机预读取”的信息;手动把不是很常用;不需要预读取的应用程序删除;尽量减少开机预读取的应用程序的数量;由此来加快启动速度!;位置在x:\windows\prefetch下面;命名是 exe文件名-16进制hash.exe;有一些实测数据;一台装了许多应用软件的电脑;不作处理;开机29s,取消预读取;开机32s;删除prefetch文件夹下面大部分文件后;开机23s,有比较明显的开机速度提升;不过第一次运行应用程序的时候速度的确有所下降;并且prefetch文件夹下文件会自动生成;越来越多;其中最“有效”的一个文件是NTOSBOOT-B00DFAAD.pf;它可以大大提高Windows的启动速度;如果只求启动速度的话;可以只保留这个文件和Layout.ini;然后将Task Scheler服务设为手动;当然;要想真正看到预读效果;必须保证开机后内存占用小于物理内存量;(比如:开机后从任务管理器看出内存占用是480MB;而你的物理内存是256MB的;那么就几乎看不到预读的效果;
MS网站上对prefetch的解释;
Prefetch;All versions of Windows except real-mode Windows 3x are demand-paged operating systems, where file data and code is faulted into memory from disk as an application attempts to access it. Data and code is faulted in page-granular chunks where a page's size is dictated by the CPU's memory management hardware. A page is 4KB on the x86. Prefetching is the process of bringing data and code pages into memory from disk before it's demanded. In order to know what it should prefetch, the Windows XP Cache Manager monitors the page faults, both those that require that data be read from disk (hard faults) and those that simply require that data already in memory be added to a process's working set (soft faults), that occur ring the boot process and application startup. By default it traces through the first two minutes of the boot process, 60 seconds following the time when all Win32 services have finished initializing, or 30 seconds following the start of the user's shell (typically Microsoft Internet Explorer), whichever of these three events occurs first. The Cache Manager also monitors the first 10 seconds of application startup. After collecting a trace that's organized into faults taken on the NTFS Master File Table (MFT) metadata file (if the application accesses files or directories on NTFS volumes), the files referenced, and the directories referenced, it notifies the prefetch component of the Task Scheler by signaling a named event object. The Task Scheler then performs a call to the internal NtQuerySystemInformation system call requesting the trace data. After performing post-processing on the trace data, the Task Scheler writes it out to a file in the \Windows\Prefetch folder. The file's name is the name of the application to which the trace applies followed by a dash and the hexadecimal representation of a hash of the file's path. The file has a .pf extension, so an example would be NOTEPAD.EXE-AF43252301.PF. An exception to the file name rule is the file that stores the boot's trace, which is always named NTOSBOOT-B00DFAAD.PF (a convolution of the hexadecimal-compatible word BAADF00D, which programmers often use to represent uninitialized data). Only after the Cache Manager has finished the boot trace (the time of which was defined earlier) does it collect page fault information for specific applications. 这个似乎是最影响启动速度的文件,也就是所谓的“系统文件预读取”吧 When the system boots or an application starts, the Cache Manager is called to give it an opportunity to perform prefetching. The Cache Manager looks in the prefetch directory to see if a trace file exists for the prefetch scenario in question. If it does, the Cache Manager calls NTFS to prefetch any MFT metadata file references, reads in the contents of each of the directories referenced, and finally opens each file referenced. It then calls the Memory Manager to read in any data and code specified in the trace that's not already in memory. The Memory Manager initiates all of the reads asynchronously and then waits for them to complete before letting an application's startup continue. How does this scheme provide a performance benefit? The answer lies in the fact that ring typical system boot or application startup, the order of faults is such that some pages are brought in from one part of a file, then from another part of the same file, then pages are read from a different file, then perhaps from a directory, and so on. This jumping around results in moving the heads around on the disk. Microsoft has learned through analysis that this slows boot and application startup times. By prefetching data from a file or directory all at once before accessing another one, this scattered seeking for data on the disk is greatly reced or eliminated, thus improving the overall time for system and application startup. Figure 1 Prefetch Directory To minimize seeking even further, every three days or so, ring system idle periods, the Task Scheler organizes a list of files and directories in the order that they are referenced ring a boot or application start, and stores the list in a file named \Windows\Prefech\Layout.ini. Figure 1 shows the contents of a prefetch directory, highlighting the layout file. Then it launches the system defragmenter with a command-line option that tells the defragmenter to defragment based on the contents of the file instead of performing a full defrag. The defragmenter finds a contiguous area on each volume large enough to hold all the listed files and directories that reside on that volume and then moves them in their entirety into that area so that they are stored one after the other. Thus, future prefetch operations will even be more efficient because all the data to be read in is now stored physically on the disk in the order it will be read. Since the number of files defragmented for prefetching is usually only in the hundreds, this defragmentation is much faster than full defragmentations.

⑷ 程序员必备知识(操作系统5-文件系统)

本篇与之前的第三篇的内存管理知识点有相似的地方

对于运行的进程来说,内存就像一个纸箱子, 仅仅是一个暂存数据的地方, 而且空间有限。如果我们想要进程结束之后,数据依然能够保存下来,就不能只保存在内存里,而是应该保存在 外部存储 中。就像图书馆这种地方,不仅空间大,而且能够永久保存。

我们最常用的外部存储就是 硬盘 ,数据是以文件的形式保存在硬盘上的。为了管理这些文件,我们在规划文件系统的时候,需要考虑到以下几点。

第一点,文件系统要有严格的组织形式,使得文件能够 以块为单位进行存储 。这就像图书馆里,我们会给设置一排排书架,然后再把书架分成一个个小格子,有的项目存放的资料非常多,一个格子放不下,就需要多个格子来进行存放。我们把这个区域称为存放原始资料的 仓库区 。

第二点,文件系统中也要有 索引区 ,用来方便查找一个文件分成的多个块都存放在了什么位置。这就好比,图书馆的书太多了,为了方便查找,我们需要专门设置一排书架,这里面会写清楚整个档案库有哪些资料,资料在哪个架子的哪个格子上。这样找资料的时候就不用跑遍整个档案库,在这个书架上找到后,直奔目标书架就可以了。

第三点,如果文件系统中有的文件是热点文件,近期经常被读取和写入,文件系统应该有 缓存层 。这就相当于图书馆里面的热门图书区,这里面的书都是畅销书或者是常常被借还的图书。因为借还的次数比较多,那就没必要每次有人还了之后,还放回遥远的货架,我们可以专门开辟一个区域, 放置这些借还频次高的图书。这样借还的效率就会提高。

第四点,文件应该用 文件夹 的形式组织起来,方便管理和查询。这就像在图书馆里面,你可以给这些资料分门别类,比如分成计算机类.文学类.历史类等等。这样你也容易管理,项目组借阅的时候只要在某个类别中去找就可以了。

在文件系统中,每个文件都有一个名字,这样我们访问一个文件,希望通过它的名字就可以找到。文件名就是一个普通的文本。 当然文件名会经常冲突,不同用户取相同的名字的情况还是会经常出现的。

要想把很多的文件有序地组织起来,我们就需要把它们成为 目录 或者文件夹。这样,一个文件夹里可以包含文件夹,也可以包含文件,这样就形成了一种 树形结构 。而我们可以将不同的用户放在不同的用户目录下,就可以一定程度上避免了命名的冲突问题。

第五点,Linux 内核要在自己的内存里面维护一套数据结构,来保存哪些文件被哪些进程打开和使用 。这就好比,图书馆里会有个图书管理系统,记录哪些书被借阅了,被谁借阅了,借阅了多久,什么时候归还。

文件系统是操作系统中负责管理持久数据的子系统,说简单点,就是负责把用户的文件存到磁盘硬件中,因为即使计算机断电了,磁盘里的数据并不会丢失,所以可以持久化的保存文件。

文件系统的基本数据单位是 文件 ,它的目的是对磁盘上的文件进行组织管理,那组织的方式不同,就会形成不同的文件系统。

Linux最经典的一句话是:“一切皆文件”,不仅普通的文件和目录,就连块设备、管道、socket 等,也都是统一交给文件系统管理的。

Linux文件系统会为每个文件分配两个数据结构: 索引节点(index node) 和 目录项(directory entry) ,它们主要用来记录文件的元信息和目录层次结构。

●索引节点,也就是inode, 用来记录文件的元信息,比如inode编号、文件大小访问权限、创建时间、修改时间、 数据在磁盘的位置 等等。 索引节点是文件的唯一标识 ,它们之间一一对应, 也同样都会被 存储在硬盘 中,所以索引节点同样占用磁盘空间。

●目录项,也就是dentry, 用来记录文件的名字、索引节点指针以及与其他目录项的层级关联关系。多个目录项关联起来,就会形成 目录结构 ,但它与索引节点不同的是,目录项是由内核维护的一个数据结构,不存放于磁盘,而是 缓存在内存 。

由于索引节点唯一标识一个文件,而目录项记录着文件的名,所以目录项和索引节点的关系是多对一,也就是说,一个文件可以有多个别字。比如,硬链接的实现就是多个目录项中的索引节点指向同一个文件。

注意,目录也是文件,也是用索引节点唯一标识,和普通文件不同的是,普通文件在磁盘里面保存的是文件数据,而目录文件在磁盘里面保存子目录或文件。

(PS:目录项和目录不是一个东西!你也不是一个东西(^_=), 虽然名字很相近,但目录是个文件。持久化存储在磁盘,而目录项是内核一个数据结构,缓存在内存。

如果查询目录频繁从磁盘读,效率会很低,所以内核会把已经读过的目录用目录项这个数据结构缓存在内存,下次再次读到相同的目录时,只需从内存读就可以,大大提高了 文件系统的效率。

目录项这个数据结构不只是表示目录,也是可以表示文件的。)

磁盘读写的最小单位是 扇区 ,扇区的大小只有512B大小,很明显,如果每次读写都以这么小为单位,那这读写的效率会非常低。

所以,文件系统把多个扇区组成了一个 逻辑块 ,每次读写的最小单位就是逻辑块(数据块) , Linux中的逻辑块大小为4KB,也就是一次性读写 8个扇区,这将大大提高了磁盘的读写的效率。

以上就是索引节点、目录项以及文件数据的关系,下面这个图就很好的展示了它们之间的关系:

索引节点是存储在硬盘上的数据,那么为了加速文件的访问,通常会把索引节点加载到内存中。

另外,磁盘进行格式化的时候,会被分成三个存储区域,分别是超级块、索引节点区和数据块区。

●超级块,用来存储文件系统的详细信息,比如块个数、块大小、空闲块等等。

●索引节点区,用来存储索引节点;

●数据块区,用来存储文件或目录数据;

我们不可能把超级块和索引节点区全部加载到内存,这样内存肯定撑不住,所以只有当需要使用的时候,才将其加载进内存,它们加载进内存的时机是不同的.

●超级块:当文件系统挂载时进入内存;

●索引节点区:当文件被访问时进入内存;

文件系统的种类众多,而操作系统希望 对用户提供一个统一的接口 ,于是在用户层与文件系统层引入了中间层,这个中间层就称为 虚拟文件系统(Virtual File System, VFS) 。

VFS定义了一组所有文件系统都支持的数据结构和标准接口,这样程序员不需要了解文件系统的工作原理,只需要了解VFS提供的统一接口即可。

在Linux文件系统中,用户空间、系统调用、虚拟机文件系统、缓存、文件系统以及存储之间的关系如下图:

Linux支持的文件系统也不少,根据存储位置的不同,可以把文件系统分为三类:

●磁盘的文件系统,它是直接把数据存储在磁盘中,比如Ext 2/3/4. XFS 等都是这类文件系统。

●内存的文件系统,这类文件系统的数据不是存储在硬盘的,而是占用内存空间,我们经常用到的/proc 和/sys文件系统都属于这一类,读写这类文件,实际上是读写内核中相关的数据。

●网络的文件系统,用来访问其他计算机主机数据的文件系统,比如NFS. SMB等等。

文件系统首先要先挂载到某个目录才可以正常使用,比如Linux系统在启动时,会把文件系统挂载到根目录。

在操作系统的辅助之下,磁盘中的数据在计算机中都会呈现为易读的形式,并且我们不需要关心数据到底是如何存放在磁盘中,存放在磁盘的哪个地方等等问题,这些全部都是由操作系统完成的。

那么,文件数据在磁盘中究竟是怎么样的呢?我们来一探究竟!

磁盘中的存储单元会被划分为一个个的“ 块 ”,也被称为 扇区 ,扇区的大小一般都为512byte.这说明即使一块数据不足512byte,那么它也要占用512byte的磁盘空间。

而几乎所有的文件系统都会把文件分割成固定大小的块来存储,通常一个块的大小为4K。如果磁盘中的扇区为512byte,而文件系统的块大小为4K,那么文件系统的存储单元就为8个扇区。这也是前面提到的一个问题,文件大小和占用空间之间有什么区别?文件大小是文件实际的大小,而占用空间则是因为即使它的实际大小没有达到那么大,但是这部分空间实际也被占用,其他文件数据无法使用这部分的空间。所以我们 写入1byte的数据到文本中,但是它占用的空间也会是4K。

这里要注意在Windows下的NTFS文件系统中,如果一开始文件数据小于 1K,那么则不会分配磁盘块来存储,而是存在一个文件表中。但是一旦文件数据大于1K,那么不管以后文件的大小,都会分配以4K为单位的磁盘空间来存储。

与内存管理一样,为了方便对磁盘的管理,文件的逻辑地址也被分为一个个的文件块。于是文件的逻辑地址就是(逻辑块号,块内地址)。用户通过逻辑地址来操作文件,操作系统负责完成逻辑地址与物理地址的映射。

不同的文件系统为文件分配磁盘空间会有不同的方式,这些方式各自都有优缺点。

连续分配要求每个文件在磁盘上有一组连续的块,该分配方式较为简单。

通过上图可以看到,文件的逻辑块号的顺序是与物理块号相同的,这样就可以实现随机存取了,只要知道了第一个逻辑块的物理地址, 那么就可以快速访问到其他逻辑块的物理地址。那么操作系统如何完成逻辑块与物理块之间的映射呢?实际上,文件都是存放在目录下的,而目录是一种有结构文件, 所以在文件目录的记录中会存放目录下所有文件的信息,每一个文件或者目录都是一个记录。 而这些信息就包括文件的起始块号和占有块号的数量。

那么操作系统如何完成逻辑块与物理块之间的映射呢? (逻辑块号, 块内地址) -> (物理块号, 块内地址),只需要知道逻辑块号对应的物理块号即可,块内地址不变。

用户访问一个文件的内容,操作系统通过文件的标识符找到目录项FCB, 物理块号=起始块号+逻辑块号。 当然,还需要检查逻辑块号是否合法,是否超过长度等。因为可以根据逻辑块号直接算出物理块号,所以连续分配支持 顺序访问和随机访问 。

因为读/写文件是需要移动磁头的,如果访问两个相隔很远的磁盘块,移动磁头的时间就会变长。使用连续分配来作为文件的分配方式,会使文件的磁盘块相邻,所以文件的读/写速度最快。

连续空间存放的方式虽然读写效率高,但是有 磁盘空间碎片 和 文件长度不易扩展 的缺陷。

如下图,如果文件B被删除,磁盘上就留下一块空缺,这时,如果新来的文件小于其中的一个空缺,我们就可以将其放在相应空缺里。但如果该文件的大小大于所

有的空缺,但却小于空缺大小之和,则虽然磁盘上有足够的空缺,但该文件还是不能存放。当然了,我们可以通过将现有文件进行挪动来腾出空间以容纳新的文件,但是这个在磁盘挪动文件是非常耗时,所以这种方式不太现实。

另外一个缺陷是文件长度扩展不方便,例如上图中的文件A要想扩大一下,需要更多的磁盘空间,唯一的办法就只能是挪动的方式,前面也说了,这种方式效率是非常低的。

那么有没有更好的方式来解决上面的问题呢?答案当然有,既然连续空间存放的方式不太行,那么我们就改变存放的方式,使用非连续空间存放方式来解决这些缺陷。

非连续空间存放方式分为 链表方式 和 索引方式 。

链式分配采取离散分配的方式,可以为文件分配离散的磁盘块。它有两种分配方式:显示链接和隐式链接。

隐式链接是只目录项中只会记录文件所占磁盘块中的第一块的地址和最后一块磁盘块的地址, 然后通过在每一个磁盘块中存放一个指向下一 磁盘块的指针, 从而可以根据指针找到下一块磁盘块。如果需要分配新的磁盘块,则使用最后一块磁盘块中的指针指向新的磁盘块,然后修改新的磁盘块为最后的磁盘块。

我们来思考一个问题, 采用隐式链接如何将实现逻辑块号转换为物理块号呢?

用户给出需要访问的逻辑块号i,操作系统需要找到所需访问文件的目录项FCB.从目录项中可以知道文件的起始块号,然后将逻辑块号0的数据读入内存,由此知道1号逻辑块的物理块号,然后再读入1号逻辑块的数据进内存,此次类推,最终可以找到用户所需访问的逻辑块号i。访问逻辑块号i,总共需要i+ 1次磁盘1/0操作。

得出结论: 隐式链接分配只能顺序访问,不支持随机访问,查找效率低 。

我们来思考另外一个问题,采用隐式链接是否方便文件拓展?

我们知道目录项中存有结束块号的物理地址,所以我们如果要拓展文件,只需要将新分配的磁盘块挂载到结束块号的后面即可,修改结束块号的指针指向新分配的磁盘块,然后修改目录项。

得出结论: 隐式链接分配很方便文件拓展。所有空闲磁盘块都可以被利用到,无碎片问题,存储利用率高。

显示链接是把用于链接各个物理块的指针显式地存放在一张表中,该表称为文件分配表(FAT, File Allocation Table)。

由于查找记录的过程是在内存中进行的,因而不仅显著地 提高了检索速度 ,而且 大大减少了访问磁盘的次数 。但也正是整个表都存放在内存中的关系,它的主要的缺点是 不适 用于大磁盘 。

比如,对于200GB的磁盘和1KB大小的块,这张表需要有2亿项,每一项对应于这2亿个磁盘块中的一个块,每项如果需要4个字节,那这张表要占用800MB内存,很显然FAT方案对于大磁盘而言不太合适。

一直都在,加油!(*゜Д゜)σ凸←自爆按钮

链表的方式解决了连续分配的磁盘碎片和文件动态打展的问题,但是不能有效支持直接访问(FAT除外) ,索引的方式可以解决这个问题。

索引的实现是为每个文件创建一个 索引数据块 ,里面存放的 是指向文件数据块的指针列表 ,说白了就像书的目录一样,要找哪个章节的内容,看目录查就可以。

另外, 文件头需要包含指向索引数据块的指针 ,这样就可以通过文件头知道索引数据块的位置,再通过索弓|数据块里的索引信息找到对应的数据块。

创建文件时,索引块的所有指针都设为空。当首次写入第i块时,先从空闲空间中取得一个块, 再将其地址写到索引块的第i个条目。

索引的方式优点在于:

●文件的创建、增大、缩小很方便;

●不会有碎片的问题;

●支持顺序读写和随机读写;

由于索引数据也是存放在磁盘块的,如果文件很小,明明只需一块就可以存放的下,但还是需要额外分配一块来存放索引数据,所以缺陷之一就是存储索引带来的开销。

如果文件很大,大到一个索引数据块放不下索引信息,这时又要如何处理大文件的存放呢?我们可以通过组合的方式,来处理大文件的存储。

先来看看 链表+索引 的组合,这种组合称为 链式索引块 ,它的实现方式是在 索引数据块留出一个存放下一个索引数据块的指针 ,于是当一个索引数据块的索引信息用完了,就可以通过指针的方式,找到下一个索引数据块的信息。那这种方式也会出现前面提到的链表方式的问题,万一某个指针损坏了,后面的数据也就会无法读取了。

还有另外一种组合方式是 索引+索引 的方式,这种组合称为多级索引块,实现方式是通过一个索引块来存放多个索引数据块,一层套一层索引, 像极了俄罗斯套娃是吧๑乛◡乛๑ 

前面说到的文件的存储是针对已经被占用的数据块组织和管理,接下来的问题是,如果我要保存一个数据块, 我应该放在硬盘上的哪个位置呢?难道需要将所有的块扫描一遍,找个空的地方随便放吗?

那这种方式效率就太低了,所以针对磁盘的空闲空间也是要引入管理的机制,接下来介绍几种常见的方法:

●空闲表法

●空闲链表法

●位图法

空闲表法

空闲表法就是为所有空闲空间建立一张表,表内容包括空闲区的第一个块号和该空闲区的块个数,注意,这个方式是连续分配的。如下图:

当请求分配磁盘空间时,系统依次扫描空闲表里的内容,直到找到一个合适的空闲区域为止。当用户撤销一个文件时,系统回收文件空间。这时,也需顺序扫描空闲表,寻找一个空闲表条目并将释放空间的第一个物理块号及它占用的块数填到这个条目中。

这种方法仅当有少量的空闲区时才有较好的效果。因为,如果存储空间中有着大量的小的空闲区,则空闲表变得很大,这样查询效率会很低。另外,这种分配技术适用于建立连续文件。

空闲链表法

我们也可以使用链表的方式来管理空闲空间,每一个空闲块里有一个指针指向下一个空闲块,这样也能很方便的找到空闲块并管理起来。如下图:

当创建文件需要一块或几块时,就从链头上依次取下一块或几块。反之,当回收空间时,把这些空闲块依次接到链头上。

这种技术只要在主存中保存一个指针, 令它指向第一个空闲块。其特点是简单,但不能随机访问,工作效率低,因为每当在链上增加或移动空闲块时需要做很多1/0操作,同时数据块的指针消耗了一定的存储空间。

空闲表法和空闲链表法都不适合用于大型文件系统,因为这会使空闲表或空闲链表太大。

位图法

位图是利用二进制的一位来表示磁盘中一个盘块的使用情况,磁盘上所有的盘块都有一个二进制位与之对应。

当值为0时,表示对应的盘块空闲,值为1时,表示对应的盘块已分配。它形式如下:

在Linux文件系统就采用了位图的方式来管理空闲空间,不仅用于数据空闲块的管理,还用于inode空闲块的管理,因为inode也是存储在磁盘的,自然也要有对其管理。

前面提到Linux是用位图的方式管理空闲空间,用户在创建一个新文件时, Linux 内核会通过inode的位图找到空闲可用的inode,并进行分配。要存储数据时,会通过块的位图找到空闲的块,并分配,但仔细计算一下还是有问题的。

数据块的位图是放在磁盘块里的,假设是放在一个块里,一个块4K,每位表示一个数据块,共可以表示4 * 1024 * 8 = 2^15个空闲块,由于1个数据块是4K大小,那么最大可以表示的空间为2^15 * 4 * 1024 = 2^27个byte,也就是128M。

也就是说按照上面的结构,如果采用(一个块的位图+ 一系列的块),外加一(个块的inode的位图+一系列的inode)的结构能表示的最大空间也就128M,

这太少了,现在很多文件都比这个大。

在Linux文件系统,把这个结构称为一个 块组 ,那么有N多的块组,就能够表示N大的文件。

最终,整个文件系统格式就是下面这个样子。

最前面的第一个块是引导块,在系统启动时用于启用引导,接着后面就是一个一个连续的块组了,块组的内容如下:

● 超级块 ,包含的是文件系统的重要信息,比如inode总个数、块总个数、每个块组的inode个数、每个块组的块个数等等。

● 块组描述符 ,包含文件系统中各个块组的状态,比如块组中空闲块和inode的数目等,每个块组都包含了文件系统中「所有块组的组描述符信息」。

● 数据位图和inode位图 ,用于表示对应的数据块或inode是空闲的,还是被使用中。

● inode 列表 ,包含了块组中所有的inode, inode 用于保存文件系统中与各个文件和目录相关的所有元数据。

● 数据块 ,包含文件的有用数据。

你可以会发现每个块组里有很多重复的信息,比如 超级块和块组描述符表,这两个都是全局信息,而且非常的重要 ,这么做是有两个原因:

●如果系统崩溃破坏了超级块或块组描述符,有关文件系统结构和内容的所有信息都会丢失。如果有冗余的副本,该信息是可能恢复的。

●通过使文件和管理数据尽可能接近,减少了磁头寻道和旋转,这可以提高文件系统的性能。

不过,Ext2 的后续版本采用了稀疏技术。该做法是,超级块和块组描述符表不再存储到文件系统的每个块组中,而是只写入到块组0、块组1和其他ID可以表示为3、5、7的幂的块组中。

在前面,我们知道了一个普通文件是如何存储的,但还有一个特殊的文件,经常用到的目录,它是如何保存的呢?

基于Linux 一切切皆文件的设计思想,目录其实也是个文件,你甚至可以通过vim打开它,它也有inode, inode 里面也是指向一些块。

和普通文件不同的是, 普通文件的块里面保存的是文件数据,而目录文件的块里面保存的是目录里面一项一项的文件信息 。

在目录文件的块中,最简单的保存格式就是 列表 ,就是一项一项地将目录下的文件信息(如文件名、文件inode.文件类型等)列在表里。

列表中每一项就代表该目录下的文件的文件名和对应的inode,通过这个inode,就可以找到真正的文件。

通常,第一项是「则」,表示当前目录,第二项是.,表示上一级目录, 接下来就是一项一项的文件名和inode。

如果一个目录有超级多的文件,我们要想在这个目录下找文件,按照列表一项一项的找,效率就不高了。

于是,保存目录的格式改成 哈希表 ,对文件名进行哈希计算,把哈希值保存起来,如果我们要查找一个目录下面的文件名,可以通过名称取哈希。如果哈希能够匹配上,就说明这个文件的信息在相应的块里面。

Linux系统的ext文件系统就是采用了哈希表,来保存目录的内容,这种方法的优点是查找非常迅速,插入和删除也较简单,不过需要一些预备措施来避免哈希冲突。

目录查询是通过在磁盘上反复搜索完成,需要不断地进行/0操作,开销较大。所以,为了减少/0操作,把当前使用的文件目录缓存在内存,以后要使用该文件时只要在内存中操作,从而降低了磁盘操作次数,提高了文件系统的访问速度。

感谢您的阅读,希望您能摄取到知识!加油!冲冲冲!(发现光,追随光,成为光,散发光!)我是程序员耶耶!有缘再见。<-biubiu-⊂(`ω´∩)

⑸ 进程项 System Idle Process 是什么东西

SystemIdleProcess是系统空闲进歼前程。

当CPU处于空闲状态时,发出闹穗一个IDLE命令来挂起CPU(暂时停止工作),可以有效降低CPU内核的温度。在操作系统服务中没有禁用它的选项。

它是除当前应用程序分配的处理器(CPU)百分比外,所有其他应用程序消耗的处理器(CPU)百分比;一旦应用程序发出请求,处理器立即响应。在这个进程中出现的CPU使用量不是实际的CPU使用量,而是CPU空闲率。

数字越大,CPU空闲率越高,反之亦然,液改卜如果开机后发现系统空闲进程的CPU使用率很低,应注意后台运行的大程序或感染病毒。数字越小,CPU越紧。这个过程是系统所需要的,不能被禁用。

(5)操作系统中什么是空闲文件扩展阅读:

系统的空闲进程不是一个真实的进程,系统的空闲进程是虚拟的核心,多任务操作系统将会存在。

当没有可用进程时,系统处于空闲运行状态,这意味着系统空闲进程系统正在运行,因此,它占用了超过90%的CPU时间,这表明您的机器负载非常轻。

如果我们使用Photoshop来绘制,你会发现系统空闲进程系统的CPU消耗一直在变化,而且越来越小。

系统空闲进程中的空闲指的是空闲,系统空闲进程,系统空闲进程使用的CPU越多,您的计算机就越空闲,当系统空闲进程达到5%以下时,可以选择重启。

阅读全文

与操作系统中什么是空闲文件相关的资料

热点内容
starbound星球文件格式 浏览:137
javathis和super 浏览:782
iphone5左上角翘屏 浏览:863
自制音乐节奏灯教程 浏览:963
java获取jar文件路径 浏览:227
手机test文件可删除么 浏览:719
升win10卡在34 浏览:962
sfc文件 浏览:262
公牛苹果数据线2a什么意思 浏览:489
勒索蠕虫检测工具 浏览:68
苹果手表固件描述文件下载 浏览:330
android获取sd卡视频文件 浏览:949
苹果手机设置通用网络设置 浏览:83
md298zpa是什么版本 浏览:317
srslog文件在哪个目录 浏览:948
无法找到文件中可删除的图片 浏览:739
dnf90版本副职业 浏览:848
c只读打开文件 浏览:575
如何在电脑文件上添加图片 浏览:297
xslist网站怎么登录 浏览:735

友情链接