文件管理 · 2024年1月30日

整个文件残留区的数据包括|电脑中的本地磁盘哪些文件可以删除哪些文件不可以删除

① 缓存数据包括哪些

手机里的缓存数据指的是什么? 就是你上网浏览时产生的临时文件。 手机缓存数据是什么意思 缓存是指临时文件交换区,手机把最常用的文件从存储器里提出来临时放在缓存里,就像把工具和材料搬上工作台一样,这样会比用时现去仓库取更方便。因为缓存往往使用的是RAM(断电即掉的非永久储存),所以在忙完后还是会把文件送到手机存储器里, 什么是缓存数据?(手机上的) 缓存(Cache memory)是硬盘控制器上的一块内存芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器。由于硬盘的内部数据传输速度和外界介面传输速度不同,缓存在其中起到一个缓冲的作用。缓存的大小与速度是直接关系到硬盘的传输速度的重要因素,能够大幅度地提高硬盘整体性能。当硬盘存取零碎数据时需要不断地在硬盘与内存之间交换数据,有大缓存,则可以将那些零碎数据暂存在缓存中,减小外系统的负荷,也提高了数据的传输速度为了提高访问网页的速度,浏览器会采用累积式加速的方法,将曾经访问的网页内容(包括图片以及cookie文件等)存放在电脑里。这个存放空间,就称它为IE缓存。以后每次访问网站时,浏览器会首先搜索这个目录,其中已经有访问过的内容,那I就不必从网上下载,而直接从缓存中调出来,从而提高了纤简访问网站的速度 qq缓存文件包括哪些内容? 缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。因为缓存往往使用的是RAM(断电即掉的非永久储存),所以在用完后还是会把文件送到硬盘等存储器里永久存储。电脑里最大的缓存就是内存条了,最快的是CPU上镶的L1和L2缓存,显卡的显存是给显卡运算毁御裤芯片用的缓存,硬盘上也有16M或者32M的缓存。 如何清理 打开qq,点击下方导航菜单中的设置图标,进入系统设置里面,进入基本设置——》文件管理,接下来,会进行缓存文件的扫描,需要等待几分钟,如果你很久没有清理过的话。扫描完成后,点击全部删除。同时,你也可以勾选上自动清理的qq产生的缓存文件的勾选项,以后就会自动清理了。点击全部删除后,耐心待定删除,一会就删除成功了, 手机里的缓存文件是什么? 那只是一些临时信息而已,删除无影响的,那些设置信息还在的【如果要重置该软件,要在手机里清除数据就好 缓存有什么作用,应用程序缓存分为哪4种 硬盘的缓存主要起三种作用: 1、预读取 当硬盘受到CPU指令控制开始读取数据时,硬盘上的控制芯片会控制磁头把正在读取的簇的下一个或者几个簇中的数据读到缓存中(由于硬盘上数据存储时是比较连续的,所以读取命中率较高),当需要读取下一个或者几个簇中的数据的时候,硬盘则不需要再次读取数据,直接把缓存中的数据传输到内存中就可以了,由于缓存的速度远远高于磁头读写的速度,所以能够达到明显改善性能的目的。 对写入动作进行缓存 2、是对写入动作进行缓存。当硬盘接到写入数据的指令之后,并不会马上将数据写入到盘片上,而是先暂时存储在缓存里,然后发送一个“数据已写入”拆悉的信号给系统,这时系统就会认为数据已经写入,并继续执行下面的工作,而硬盘则在空闲(不进行读取或写入的时候)时再将缓存中的数据写入到盘片上。虽然对于写入数据的性能有一定提升,但也不可避免地带来了安全隐患——如果数据还在缓存里的时候突然掉电,那么这些数据就会丢失。对于这个问题,硬盘厂商们自然也有解决办法:掉电时,磁头会借助惯性将缓存中的数据写入零磁道以外的暂存区域,等到下次启动时再将这些数据写入目的地。 临时存储最近访问过的数据 3、是临时存储最近访问过的数据。有时候,某些数据是会经常需要访问的,硬盘内部的缓存会将读取比较频繁的一些数据存储在缓存中,再次读取时就可以直接从缓存中直接传输。缓存就像是一台计算机的内存一样,在硬盘读写数据时,负责数据的存储、寄放等功能。这样一来,不仅可以大大减少数据读写的时间以提高硬盘的使用效率。同时利用缓存还可以让硬盘减少频繁的读写,让硬盘更加安静,更加省电梗更大的硬盘缓存,你将读取游戏时更快,拷贝文件时候更快,在系统启动中更为领先。 QQ设置里的,清空缓存数据是什么意思? 您好 清空缓存是清空你收到的图片或者临时文件。(比如别人发的表情) 希望可以帮到你 清空所有聊天记录和清空缓存数据有什么区别 两者不同概念,,一个是聊天工具,,一个是电脑浏览器,, 缓存和内存有什么区别 CPU缓存(Cache Memory)位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。由此可见,在CPU中加入缓存是一种高效的解决方案,这样整个内存储器(缓存+内存)就变成了既有缓存的高速度,又有内存的大容量的存储系统了。缓存对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与缓存间的带宽引起的。 缓存的工作原理是当CPU要读取一个数据时,首先从缓存中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。 正是这样的读取机制使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在缓存中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先缓存后内存。 最早先的CPU缓存是个整体的,而且容量很低,英特尔公司从Pentium时代开始把缓存进行了分类。当时集成在CPU内核中的缓存已不足以满足CPU的需求,而制造工艺上的限制又不能大幅度提高缓存的容量。因此出现了集成在与CPU同一块电路板上或主板上的缓存,此时就把 CPU内核集成的缓存称为一级缓存,而外部的称为二级缓存。一级缓存中还分数据缓存(Data Cache,D-Cache)和指令缓存(Instruction Cache,I-Cache)。二者分别用来存放数据和执行这些数据的指令,而且两者可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了处理器效能。英特尔公司在推出Pentium 4处理器时,用新增的一种一级追踪缓存替代指令缓存,容量为12KμOps,表示能存储12K条微指令。 随着CPU制造工艺的发展,二级缓存也能轻易的集成在CPU内核中,容量也在逐年提升。现在再用集成在CPU内部与否来定义一、二级缓存,已不确切。而且随着二级缓存被集成入CPU内核中,以往二级缓存与CPU大差距分频的情况也被改变,此时其以相同于主频的速度工作,可以为CPU提供更高的传输速度。 二级缓存是CPU性能表现的关键之一,在CPU核心不变化的情况下,增加二级缓存容量能使性能大幅度提高。而同一核心的CPU高低端之分往往也是在二级缓存上有差异,由此可见二级缓存对于CPU的重要性。 CPU在缓存中找到有用的数据被称为命中,当缓存中没有CPU所需的数据时(这时称为未命中),CPU才访问内存。从理论上讲,在一颗拥有二级缓存的CPU中,读取一级缓存的命中率为80%。也就是说CPU一级缓存中找到的有用数据占数据总量的80%,剩下的20%从二级缓存中读取。由于不能准确预测将要执行的数据,读取二级缓存的命中率也在80%左右(从二级缓存读到有用的数据占总数据的16%)。那么还有的数据就不得不从内存调用,但这已经是一个相当小的比例了。目前的较高端的CPU中,还会带有三级缓存,它是为读取二级缓存后未命中的数据设计的—种缓存,在拥有三级缓存的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率。 为了保证CPU访问时有较高的命中率,缓存中的内容应该按一定的算法替换。一种较常用的算法是“最近最少使用算法”(LRU算法),它是将最近一段时间内最少被访问过……>> 手机软件清除缓存和清除数据有什么不一样? 帐号密码还里面下载的表情聊天背景等,没清除什么重要东西。放心清楚吧

② 电脑中的本地磁盘,哪些文件可以删除,哪些文件不可以删除

除了C盘的文件,其它盘的文件都可以删除。如果你一定要清理C盘的文件,那么建议你看看下面的操作:方法/步骤1一、清理Documents and Settings目录 “Documents and Settings”是XP中比较特殊的目录,它记录了用户的一些特别的文件信息。下面来看看有什么内容是可以删除的。 C:\Documents and Settings\All Users\Application Data\Microsoft\User Account Pictures\Default Pictures 在设置账户或使用MSN时都会使用到。这些图片没什么特别,可以删除,也可以用自己喜欢的图片来替代。 C:\Documents and Settings\用户名\My Documents\My Music 一般人们都在硬盘中开辟专门的存放音乐的地方,那么把它删除吧。有一点要注意:如果经常播放WMA文件,难免会下载一些音乐播放许可证到本地硬盘,而系统默认会把这些许可证放在这个目录中,如果在目录中看到“许可证备份”目录,建议把它复制到其他位置,并在WMP的“工具/许可证管理”中更改路径。 C:\Documents and Settings\用户名\[开始]菜单\程序\附件 这个目录是一些程序的快捷图标。在附件中真正用到的功能很少,常用的只有“记事本”、“Windows资源管理器”。把需要的程序快捷图标复制到“C:\Documents and Settings\All Users\[开始]菜单\程序\附件”中,然后再删除此目录。 C:\Documents and Settings\用户名\Favorites 这里的快捷图标,“MSN.com”和“Radio Station Guide”,这些你用过吗?没用就删吧。 C:\Documents and Settings\用户名\Favorites\Links 与上面一样,如果用不到,就可删除这个目录。在这里还要修改一下注册表,以永久删除链接文件夹。在注册表中找到“HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Toolbar”项,将右侧的“LinksFolderName”的值删除。 目的:精简目录结构和程序快捷图标。 2二、程序文件也可删除 “C:\Program Files”大家很熟悉,因为在安装程序时,其默认的安装路径就在这里,下面看看里面有什么内容可删除。 C:\Program Files\Windows Update 这个目录用于在线升级,可以删除。只要再次登录Windows Update的升级网站进行升级,这个目录会被自动重建。 C:\Program Files\Windows Media Player\Skins 这是WMP自带的“皮肤”,相信很多“皮肤”不会用到,不如只留下几个常用的,把其余的删掉。 C:\Program Files\Common Files\Microsoft Shared\Stationery 这是Outlook中的信纸图案,有用的留着,用不到的就删除。如果不用Outlook收发邮件,则全部删掉。 目的:删除程序中不用的组件。 3三、Windows目录也可清理 不要被“C:\Windows”所吓倒,这里面同样有不少东西可删除。在这个目录下,“.BAK、.BMP、.OLD、.TMP”类型的文件可以删除。除SchedLgU.txt(它被用于计划任务程序服务),“.TXT”文件也可删除。另外,clock.avi、Control.ini文件也可删除,它不会对系统造成任何影响。 C:\Windows\$NtUninstall$ 这是在线升级Windows时系统自动创建的目录,其作用是方便卸载已安装的系统补丁。如果补丁正常运行了,这些目录就无意义了,可安全删除这些目录及文件。你可在“添加或删除程序”中去卸载这些补丁,当然补丁并没有真正删除,只是让“添加或删除程序”窗口变得干净些。 C:\Windows\Help 在第一次运行Windows XP时,系统总会提示运行“漫游Windows XP”,中文版使用的是一个HTML格式的文件,只有文件,没有声音。其实在系统中还安装了英文版的漫游功能,虽然是英文,但有语言,有音乐,还有漂亮的动画。它就是“Tours/mmtour”目录中的“tour.exe”。如果没有用了,则可将“Tours”整个目录删掉。在这之前,应先在“C:\Windows\System32\dllcache”中删除“tourstrt.exe、tourW.exe以及“C:\Windows\System32”目录下的“tourstart.exe”文件。 C:\Windows\inf (隐藏) 在这个目录中会看到很多相同文件名,不同后缀的文件,分别为“.inf”和“.pnf”,“.pnf”是“.inf”文件的预编译文件,如果没有“.pnf”文件,“.inf”文件运行时会自动建立相应的“.pnf”文件。因此,这个目录的所有“.pnf”文件都可以删除。 (显示)你打开“我的电脑”后,在项目栏的“工具”里点“文件夹选项”,弹出的对话框点“查看”,在隐藏文件和文件夹下选上“显示所有文件和文件夹”,点“应用”就可以了 C:\Windows\Media 这是系统自带的一些MID和WAV音效,喜欢的留下,不喜欢的也可删除。 C:\Windows\Web 这里的“gif”和“htm”文件均可删除。到“Wallpaper”目录中看看,系统自带的大部分桌面背景都在这里,不喜欢的均可删除。 C:\Windows\System32 这里有很多名如“1033”的文件夹,这些主要存放系统出现的错误报告,其中大部分是空文件夹,这些空文件夹可放心删除。 C:\Windows\System32\ReinstallBackups 这里有很多子目录,它们分别是电脑中硬件的驱动程序备份。如果对某一硬件进行升级或更换,并且确定不会再使用原来的驱动程序,则可以删除相应的目录。 目的:删除系统目录中冗余的备份文件。4【删除多余系统文件】 删除【驱动备份】 */Windows/driver cache/i386 目录下的 Driver.cab 文件(73MB) 删除【不常用的输入法】 */Windows ime 目录下CHTIME 繁体中文 IMJP8_1 日文 IMKR6_1 韩文 删除【备用的DLL文件】 */Windows/system32/dllcache下文件(200-300MB) 运行 “sfc.exe /purgecache”也行 删除【帮助文件】 */Windows/Help/目录中的帮助文件 删除【多余的屏幕保护】 开始/搜索/,在弹出对话框中选单击“所有文件或文件夹”命令,在文件名框中输入“.scr”(不带引号),再在“在这里寻找”下拉列表中,选择存储系统文件的驱动器,单击“搜索”按钮,然后删除想要删除就可以。保留(默认logon) 关闭【系统还原】 控制面板/性能和维护/系统/系统还原/中的勾选在所有驱动器上关闭系统还原。 取消【远程】 控制面板/性能和维护/系统/远程/取消【远程协助】前的面的勾,取消【远程桌面】前面的勾。 卸载【Windows Messenger】命令 开始/运行,在“运行”对话框中输入 RunDll32 advpack.dll,LaunchINFSection %Windir%\inf\msmsgs.inf,BLC.Remove 此命令将卸载 Windows Messenger 卸载【NetMeeting】命令 rundll32.exe setupapi,InstallHinfSection NetMtg.Remove 132 msnetmtg.inf 此命令将卸载 NetMeeting 【删除多余系统注册表】 开始/运行,在对话框中输入“Regedit”,调出注册表进行如下逐项操作: 清除多余的【窗口配色方案】 HKEY_CURRENT_USER\Control Panel\Appearance\Schemes\ 保留“Windows 标准(默认)”即可。(Windows 2000) (Windows XP) 删除【运行】项中的历史记录 HKEY_CURRENT_USERS\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU\ 删除右边,运行中的记录本 删除多余的【鼠标外观】 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Cursors\Schemes\ 保留 Windows 默认 删除多余的【世界时区】 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones\ 保留“北京时间”删除其余的时区设置。 清除多余【国家列表】 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Telephony\Country List\ 保留“86 中国”删除多余的国家代码。 删除多余的【区域设置】 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Nls\Locale\ 保留“英文:00000409 /中文:00000804”键值。 删除多余的【键盘布局】 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes 保留“英文:00000409 /中文:00000804”键值。 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Keyboard Layouts\ 保留。 00000409 (默认) 美国英语 00000804 中文 (简体) – 美式键盘 E0010804 中文 (简体) – 全拼 E0030804 中文 (简体) – 郑码 E0040804 中文 (简体) – 智能 ABC E00E0804 中文 (简体) – 微软拼音输入法 3.0 版 (系统自带) 【删除多余的软件自定义】 删除IE工具栏上的自定义图标 HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Extensions\ 键值下找到IE工具栏上的自定义图标删除就行了。 删除IE工具栏的“FlashGet Bar” HKEY_LOCAL_MACHINE\Software\Microsoft\Intermet Explorer\Toolbar\ 删除【添加/删除程序】中的残留项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ 主键并选中它,在该键下找到应用程序相对应的主键,然后删除即可。 删除多余的DLL文件 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\SharedDlls\ 键值为0X00000001(1)表明不被任何程序共享,可以删除。5新建一个记事本并输入以下的内容: @echo off echo 正在清除系统垃圾文件,请稍等…… del /f /s /q %systemdrive%\*.tmp del /f /s /q %systemdrive%\*._mp del /f /s /q %systemdrive%\*.log del /f /s /q %systemdrive%\*.gid del /f /s /q %systemdrive%\*.chk del /f /s /q %systemdrive%\*.old del /f /s /q %systemdrive%\recycled\*.* del /f /s /q %windir%\*.bak del /f /s /q %windir%\prefetch\*.* rd /s /q %windir%\temp & md %windir%\temp del /f /q %userprofile%\小甜饼s\*.* del /f /q %userprofile%\recent\*.* del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*" del /f /s /q "%userprofile%\Local Settings\Temp\*.*" del /f /s /q "%userprofile%\recent\*.*" echo 清除系统垃圾完成!

③ 程序员必备知识(操作系统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-⊂(`ω´∩)