# 2024-2025-1 20241325 《计算机基础与程序设计》第12周学习总结
2024-2025-1 学号 20241325 《计算机基础与程序设计》第12周学习总结
作业信息
|这个作业属于 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP|
|-- |-- |
|这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK12
|这个作业的目标|<加入云班课,参考本周学习资源
自学教材
《C语言程序设计》第11章并完成云班课测试
|
|作业正文|https://www.cnblogs.com/wangxianglong999/p/18608780 |
教材学习内容总结
文件系统
文件系统是操作系统用于明确存储设备(如硬盘、U盘、光盘等)或分区上的文件的方法和数据结构。以下是详细内容:
一、基本概念
- 文件:文件是存储在存储介质上的具有标识名的一组相关信息的集合。它可以是文档(如文本文件、Word文件)、程序(可执行文件)、图像、音频、视频等各种数据类型。例如,一篇论文就是一个文件,它包含了文字内容、格式信息等相关数据。
- 目录(文件夹):目录是一种用于组织文件的结构。它就像是一个容器,可以包含文件和其他目录。通过建立不同层次的目录,可以方便地对文件进行分类管理。例如,在计算机的“文档”目录下,可能会有“工作文档”“个人文档”等子目录,这些子目录下又存放着具体的文件。
二、文件系统的功能
- 存储管理
- 文件系统负责分配和管理存储设备上的存储空间。它会跟踪哪些区域是空闲的,哪些区域已经被文件占用。当创建一个新文件时,文件系统会找到足够的空闲空间来存储该文件。例如,在一个硬盘上,文件系统会将硬盘划分为多个小块(如扇区、簇等),并记录每个文件占用了哪些小块。
- 文件命名和访问控制
- 提供文件名机制,使得用户可以通过文件名来访问文件。同时,文件系统还可以设置文件的访问权限,如只读、读写、可执行等权限。这样可以保护文件的安全性和隐私性。例如,在一个多用户的操作系统中,系统管理员可以设置某些文件只有特定用户或用户组可以访问。
- 文件组织和目录结构
- 支持目录的创建和管理,以方便用户对文件进行分类和查找。目录可以嵌套,形成层次结构。例如,一个公司的文件服务器可能会按照部门、项目等层次来组织文件目录,使得员工可以快速定位到自己需要的文件。
- 文件操作支持
- 文件系统允许用户进行各种文件操作,如创建文件、删除文件、打开文件、关闭文件、读取文件内容、写入文件内容等。这些操作是通过操作系统提供的系统调用或者应用程序接口(API)来实现的。例如,当你在文字处理软件中保存一个文档时,软件会通过文件系统的写入操作将文档内容存储到磁盘上。
三、常见的文件系统类型
- FAT(文件分配表)系列
- FAT12:是一种比较古老的文件系统,主要用于早期的软盘等小容量存储设备。它的文件名长度有限,最多支持8.3格式(文件名8个字符,扩展名3个字符)。
- FAT32:是对FAT12和FAT16的改进,支持更大的分区(最大分区容量可达32GB)和更长的文件名。它被广泛应用于闪存盘、移动硬盘等外部存储设备,并且兼容性较好,几乎可以被所有的操作系统识别。
- NTFS(新技术文件系统)
- NTFS是Windows NT及后续Windows操作系统所使用的主要文件系统。它具有更高的安全性,支持文件加密、访问控制列表(ACL)等高级功能。例如,在企业环境中,NTFS可以通过设置ACL来严格控制用户对敏感文件的访问。NTFS还支持大文件存储和高效的磁盘空间利用,最大分区容量理论上可以达到2^64 - 1个簇。
- ext系列(主要用于Linux)
- ext2:是Linux系统中广泛使用的文件系统,它具有良好的性能和稳定性。它采用了索引节点(inode)来管理文件,每个文件和目录都对应一个inode,inode中存储了文件的属性、数据块位置等信息。
- ext3:在ext2的基础上增加了日志功能。日志文件系统可以在系统崩溃或突然断电等情况下,更快地恢复文件系统的一致性,减少文件损坏的风险。
- ext4:是ext3的升级版,它进一步提高了文件系统的性能、容量和可靠性。它支持更大的文件和分区(最大文件大小可达16TB,最大分区大小可达1EB),并且在存储效率等方面也有所改进。
四、文件系统的性能优化
- 磁盘碎片整理
- 随着文件的不断创建、删除和修改,文件在磁盘上的存储位置可能会变得分散,形成磁盘碎片。磁盘碎片会降低文件系统的读写性能。磁盘碎片整理程序可以将文件的碎片重新组合,使文件存储在连续的磁盘空间上,从而提高读写速度。例如,在Windows操作系统中,可以定期使用磁盘碎片整理工具来优化磁盘性能。
- 缓存机制
- 文件系统可以利用缓存来提高性能。缓存是一种将经常访问的数据存储在内存中的技术。当用户再次访问这些数据时,可以直接从缓存中获取,而不需要从磁盘等慢速存储设备中读取,从而大大提高了访问速度。例如,操作系统的文件系统缓存会将最近读取过的文件内容或目录信息存储在内存中。
目录
- 目录的定义
- 目录(在图形化界面中通常也被称为文件夹)是文件系统中的一种组织结构。它用于将相关的文件和其他目录组合在一起,方便用户对文件进行分类、存储和管理。就像在一个实体的文件柜中,不同的文件夹用于存放不同类型的文件,如合同文件放在一个文件夹,报告文件放在另一个文件夹。
- 目录的层次结构
- 根目录:是文件系统层次结构的起点,所有其他的目录和文件都是从根目录衍生出来的。在不同的操作系统中,根目录的表示方式有所不同。例如,在Unix/Linux系统中,根目录用“/”表示;在Windows系统中,每个分区都有自己的根目录,通常用盘符(如C:\、D:\)来表示。
- 子目录:位于其他目录内部的目录称为子目录。例如,在Windows的“C:\Program Files”目录下,可能会有许多软件安装目录作为子目录,像“Adobe”“Microsoft Office”等子目录,这些子目录中又包含了软件的可执行文件、库文件等各种文件。这种层次结构可以无限嵌套,使得文件系统能够组织海量的文件。
- 目录的功能
- 文件分类与组织:目录最主要的功能就是对文件进行分类。例如,在一个个人电脑上,可以根据文件的用途建立不同的目录,如“工作文档”目录用于存放工作相关的文件,“娱乐”目录用于存放电影、音乐等文件,“学习资料”目录用于存放学习相关的电子书、笔记等文件。这样,用户在查找文件时,就可以根据目录的类别快速定位到所需文件。
- 访问权限控制:目录也可以用于控制对其内部文件和子目录的访问权限。在多用户操作系统中,管理员可以设置不同用户或用户组对特定目录的访问权限。例如,在一个公司的服务器上,只有特定部门的用户才能访问“财务数据”目录,其他部门的用户则被禁止访问。通过这种方式,可以保护敏感信息的安全。
- 提供命名空间隔离:目录为文件提供了不同的命名空间。这意味着在不同目录下可以有相同名称的文件,而不会产生冲突。例如,在“C:\Windows\System32”目录和“C:\Users\YourName\Downloads”目录中都可以有一个名为“test.txt”的文件,它们在文件系统中是相互独立的,因为它们位于不同的目录路径下。
- 目录的操作
- 创建目录:在操作系统中,用户可以通过命令行或者图形化界面工具来创建目录。例如,在Windows的命令提示符中,可以使用“md”(Make Directory)命令来创建新目录,如“md NewFolder”就会在当前目录下创建一个名为“NewFolder”的新目录。在Unix/Linux系统中,可以使用“mkdir”命令来创建目录。
- 删除目录:同样可以通过命令行或图形化界面进行操作。不过,在删除目录时,需要注意目录是否为空。一般情况下,非空目录不能直接删除,需要先删除目录中的文件和子目录。在Windows命令提示符中,可以使用“rd”(Remove Directory)命令来删除目录,并且可以通过添加参数来强制删除非空目录。在Unix/Linux系统中,“rmdir”命令用于删除空目录,“rm -r”命令可以用于删除非空目录,但使用“rm -r”命令要特别小心,因为它会递归删除目录中的所有内容。
- 移动和复制目录:用于改变目录的位置或者创建目录的副本。在Windows中,可以通过鼠标拖动(在图形化界面下)或者使用“xcopy”(用于复制目录)和“move”(用于移动目录)等命令来进行操作。在Unix/Linux系统中,“cp -r”命令用于复制目录,“mv”命令用于移动目录。
- 遍历目录:在编程和系统管理等场景中,经常需要遍历目录来查找文件或者对目录中的所有内容进行操作。例如,在编写一个文件搜索程序时,需要遍历目录及其子目录来查找符合条件的文件。在Unix/Linux系统中,可以使用“find”命令来遍历目录,在Python等编程语言中,也有相应的库函数(如“os.walk”)来实现目录遍历。
磁盘调度
- 磁盘调度的定义与重要性
- 磁盘调度是指操作系统用于决定磁盘I/O请求的执行顺序的一种机制。磁盘是计算机系统中相对较慢的存储设备,而处理器和内存的速度远快于磁盘。当有多个磁盘I/O请求同时出现时,合理的调度策略可以有效减少磁盘寻道时间和旋转延迟,从而提高磁盘I/O的整体效率,改善系统性能。例如,在一个频繁读写磁盘文件的数据库服务器中,高效的磁盘调度策略能够显著提升数据库的响应速度。
- 磁盘访问时间的组成部分
- 寻道时间:是指磁头从当前位置移动到目标磁道所需要的时间。它是磁盘访问时间中最主要的可变部分,取决于磁头移动的距离。例如,磁头从最外层磁道移动到最内层磁道的时间会比移动到相邻磁道的时间长得多。寻道时间通常用平均寻道时间来衡量,不同的磁盘型号其平均寻道时间不同,一般在几毫秒到十几毫秒之间。
- 旋转延迟:是指目标扇区旋转到磁头下方所需要的时间。磁盘以一定的转速旋转,例如常见的硬盘转速有5400转/分钟、7200转/分钟等。旋转延迟取决于磁盘的转速和目标扇区的初始位置,平均旋转延迟是磁盘旋转半周所需的时间。对于7200转/分钟的磁盘,其平均旋转延迟约为4.17毫秒($60\times1000\div(2\times7200)$)。
- 传输时间:是指数据从磁盘传输到内存或者从内存传输到磁盘所需要的时间。它取决于磁盘的数据传输率和要传输的数据量。传输时间相对寻道时间和旋转延迟来说比较固定,且在现代高速磁盘中,传输时间所占的比例相对较小。
- 常见的磁盘调度算法
- 先来先服务(FCFS)
- 原理:按照磁盘I/O请求到达的先后顺序进行服务。例如,有请求序列为50、100、150、200(这里的数字代表磁道号),如果磁头初始位置在0,那么就会先移动到50,再到100,然后150,最后200。
- 优缺点:这种算法简单公平,但性能较差。因为它没有考虑磁盘的寻道特性,可能会导致磁头频繁地大幅度移动,产生较长的寻道时间。例如,当新的请求不断加入且磁道号分散时,会导致磁头来回移动,效率低下。
- 最短寻道时间优先(SSTF)
- 原理:总是选择离当前磁头位置最近的磁道进行访问。例如,磁头在50,请求序列为30、70、100,那么会先访问70,因为70离50最近。
- 优缺点:相比FCFS,SSTF能有效减少平均寻道时间,提高磁盘I/O效率。但是,它可能会导致某些请求长时间得不到服务,产生饥饿现象。例如,如果一直有离磁头较近的新请求加入,那么距离较远的请求可能会被无限期推迟。
- 扫描算法(SCAN)
- 原理:也称为电梯算法。磁头从磁盘的一端开始,向另一端移动,在移动过程中处理经过的磁道的请求。到达磁盘的另一端后,磁头改变移动方向,继续处理请求。例如,磁头从最外层磁道开始向最内层磁道扫描,在扫描过程中处理遇到的I/O请求。
- 优缺点:这种算法避免了饥饿问题,并且考虑了磁盘的整体布局。不过,它可能会导致一些离磁头较近但方向相反的请求等待较长时间,直到磁头改变方向。
- 循环扫描算法(C - SCAN)
- 原理:磁头单向移动,例如从最外层磁道向最内层磁道移动,处理经过的磁道的请求。当到达最内层磁道后,磁头直接回到最外层磁道,开始下一轮扫描,而不是像SCAN算法那样改变方向。
- 优缺点:C - SCAN提供了更可预测的服务时间,减少了响应时间的方差,但它在磁头返回起始位置的过程中没有处理请求,可能会浪费一些磁盘I/O资源。
- N - step - SCAN和FSCAN
- 原理:N - step - SCAN算法将磁盘请求队列分成多个长度为N的子队列。每次用SCAN算法处理一个子队列,新到达的请求放入下一个子队列。FSCAN是N - step - SCAN的简化版本,它使用两个队列,一个用于当前正在扫描的队列,另一个用于新到达的请求。
- 优缺点:这些算法在一定程度上结合了SSTF和SCAN的优点,既减少了寻道时间,又避免了饥饿现象。不过,它们的实现相对复杂一些。
- 先来先服务(FCFS)