磁盘空间管理模拟实验

合集下载

磁盘管理的实验报告

磁盘管理的实验报告

磁盘管理的实验报告实验报告:磁盘管理一、引言(100字)磁盘是计算机中主要的存储介质之一,磁盘管理是操作系统中的一项重要任务。

本实验旨在通过模拟磁盘管理的相关操作,加深对磁盘管理的理解,并学习实际应用中磁盘管理的策略。

二、实验目的(100字)1.了解磁盘管理的基本原理和相关概念;2.学习磁盘分区的原理及实践;3.理解磁盘调度算法的工作原理;4.掌握常用的磁盘管理策略。

三、实验内容(300字)1.磁盘分区:a.使用磁盘分区工具将物理磁盘划分为若干个分区;b.使用命令查看已分区、格式化后的磁盘分区。

2.磁盘调度算法:a.了解并实现FCFS(先来先服务)、SSTF(最短寻道时间优先)和SCAN(扫描)等磁盘调度算法;b.分别使用模拟程序测试不同算法的性能。

3.磁盘缓存:a.实现一个简单的磁盘缓存管理系统;b.学习并使用命令进行磁盘缓存管理的相关操作。

四、实验步骤(400字)1.磁盘分区:a.打开磁盘分区工具,选择对应磁盘进行分区,设置分区大小和类型;b.格式化已分区的磁盘,创建文件系统;c.使用命令查看分区情况,确认分区操作是否成功。

2.磁盘调度算法:a.阅读并理解给定的FCFS、SSTF和SCAN算法的伪代码;b.根据伪代码实现相应的算法,并进行测试;c.分别使用模拟程序测试不同算法的性能,根据性能结果评估各算法的优劣。

3.磁盘缓存:a.阅读并理解磁盘缓存管理的相关原理和命令;b.实现一个简单的磁盘缓存管理系统,包括缓存页面的替换策略;c.使用命令进行磁盘缓存管理的相关操作,通过测试验证缓存管理系统的正确性。

五、实验结果(150字)1.磁盘分区工具成功将物理磁盘划分为若干个分区,并格式化后创建了文件系统;2.使用命令查看分区情况,确认分区操作成功;3.实现了FCFS、SSTF和SCAN算法,并成功模拟了它们的运行过程;4.使用模拟程序测试了不同算法的性能,分析并比较了各算法的优劣;5.成功实现了一个简单的磁盘缓存管理系统,并通过测试验证了其正确性。

管理磁盘存储实训报告

管理磁盘存储实训报告

Windows网络操作系统管理课程实训报告实训名称:管理磁盘存储实训h-OX»|I G,T fl.SQ-QOflifidJXlB gw QJCT2.使用服务器管理器,在第一个磁盘上创建一个主分区号为X;文件系统为ReFS;卷标为Data。

4.使用磁盘管理,将卷X ,扩展到4096 MB 。

文世闺»^AJ« = M 品沏林0 31目USr X 01 BE工■可闰市! 凌串 |胃行蓄差W7S一三二二・ 二回-0« i» 网 -rue 花+周干 置羊 虫 *唯 S3:SiNTK挈工 而陪艇NJF5状石艮F L-iUiBUJ(-4XHR1F L 状哼吃21© Me 200 MB 里他G& 47.W 驰 杂 XGB 4.30 GB 加 MB4&1MBtoo % 79 U97% 年了 M.叱i 於工■55.M GB 呢C-sta -X: 5.00 GB 3汽54J87 G :B■丑士2设ttA (曲凤敦胧 G6 504 M B NIF S 聚仁UlSff■ * 4 ■ _ -.■二■ F 3堂5M9 GB iWffi■吐[之任里年. |概t旨i 、Eax» miME己叩印用1 】g#3 理事..不%48 仃寤融 79%C-dLa Dtl降百庆时: 一11£0日i^bM& 至**由川寿四土费NTFSWi M s4MMRq 『,ww gi ; moo ME NTFSH.ROfl装万良牙5.将C:\Windows\System32\imgageres.dll复制到卷Z,再复制出9个副本文件。

a. 茎事至百G 5号一■楸摩田 3 \:青=*。

诏(7:'停表3 If ML*也博时可■ S3mg—时=ru.dl25,仃.弓。

15:: 2宜阳等寸温力Kfi・Egag白七-副豆.dll2C 寸:0口15:1.5度用磐F属OKE♦卜科E!X.L3J dll15455.!wr©*tj p fl IIICB* 1力呜d拒rl - E S® 3 dll20"仃巧1。

分区存储管理模拟实验报告

分区存储管理模拟实验报告

分区存储管理模拟实验报告分区存储管理模拟实验报告1.实验目的了解动态分区存储管理方式中的数据结构和分配算法,加深对动态分区存储管理方式及其实现技术的理解。

2. 实验内容▪用C语言或Pascal语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程Allocate()和回收过程Free()。

其中,空闲分区采用空闲分区链来组织,内存分配时,优先使用空闲区低地址部分的空间。

▪假设初始状态,可用内存空间为640KB,作业请求序列如下(也可以编程从键盘输入,R 表示请求,F表示释放):✧作业1请求130 KB。

✧作业2请求60 KB。

✧作业3请求100 KB。

到第一个足以满足要球的空闲块就停止查找,并把它分配出去;如果该空闲空间与所需空间大小一样,则从空闲表中取消该项;如果还有剩余,则余下的部分仍留在空闲表中,但应修改分区大小和分区始址。

最佳适应算法:当要分配内存空间时,就查找空闲表中满足要求的空闲块,并使得剩余块是最小的。

然后把它分配出去,若大小恰好合适,则直按分配;若有剩余块,则仍保留该余下的空闲分区,并修改分区大小的起始地址。

内存回收:将释放作业所在内存块的状态改为空闲状态,删除其作业名,设置为空。

并判断该空闲块是否与其他空闲块相连,若释放的内存空间与空闲块相连时,则合并为同一个空闲块,同时修改分区大小及起始地址。

typedef struct freearea{}ElemType;定义一个空闲区说明表结构,每申请一个作业,改作业便具有此结构体typedef struct DuLNode{}DuLNode,*DuLinkList;定义一个双向链表Status Initblock(){}开创带头结点的内存空间链表,通过双向链表把申请的作业链接起来,作业的插入和删除,和链表中节点的插入和删除类似。

双向链表如图1所示Status First_fit(int ID,int request){}传入作业名及申请量采用首次适应算法实现动态内存分区分配的模拟,初始态640KB,只是一个虚态,每申请成功一个作业,便相应的640KB做相应的减少,同过双向链表模拟主存的分配情况。

磁盘管理空间实验报告

磁盘管理空间实验报告

一、实验目的本次实验旨在让学生了解磁盘管理的基本概念和操作,掌握磁盘分区、格式化、挂载等基本技能,熟悉磁盘空间分配策略和优化方法,提高学生对磁盘管理的实际操作能力。

二、实验环境操作系统:Linux Ubuntu 20.04硬件环境:虚拟机,CPU:2.5GHz,内存:4GB,硬盘:100GB三、实验内容1. 磁盘分区(1)查看磁盘分区信息使用`fdisk -l`命令查看当前磁盘的分区信息。

(2)创建新分区使用`fdisk /dev/sdb`命令进入磁盘分区编辑模式,创建新分区。

(3)格式化分区使用`mkfs.ext4 /dev/sdb1`命令将新分区格式化为ext4文件系统。

2. 磁盘挂载(1)创建挂载点使用`mkdir /mnt/sdb1`命令创建挂载点。

(2)挂载分区使用`mount /dev/sdb1 /mnt/sdb1`命令将分区挂载到挂载点。

3. 磁盘空间分配策略(1)查看磁盘空间使用情况使用`df -h`命令查看磁盘空间使用情况。

(2)优化磁盘空间分配使用`du -sh `命令查看目录大小,删除不必要的文件。

4. 磁盘碎片整理(1)查看磁盘碎片情况使用`e2fsck -f /dev/sdb1`命令检查磁盘碎片情况。

(2)整理磁盘碎片使用`e2fsck -f /dev/sdb1`命令整理磁盘碎片。

四、实验步骤1. 查看磁盘分区信息执行`fdisk -l`命令,查看当前磁盘的分区信息。

2. 创建新分区执行`fdisk /dev/sdb`命令,进入磁盘分区编辑模式。

(1)输入`n`创建新分区。

(2)选择分区类型(主分区或扩展分区)。

(3)选择分区编号。

(4)设置分区起始扇区。

(5)设置分区结束扇区。

3. 格式化分区执行`mkfs.ext4 /dev/sdb1`命令,将新分区格式化为ext4文件系统。

4. 创建挂载点执行`mkdir /mnt/sdb1`命令,创建挂载点。

5. 挂载分区执行`mount /dev/sdb1 /mnt/sdb1`命令,将分区挂载到挂载点。

磁盘空间管理模拟实验之Linux磁盘空间管理

磁盘空间管理模拟实验之Linux磁盘空间管理

目录摘要 (2)前言 (3)正文 (4)1. 实验目的 (4)2. 设计思想 (4)3. 实验结构图 (5)4. 各模块的伪码算法 (5)5. 测试分析 (10)6. 测试结果 (11)7. 源程序 (14)总结 (24)参考文献 (25)致谢 (26)摘要要把文件信息存放在存储介质上,必须先找出存储介质上可供使用的空闲块。

存储介质上某个文件不再需要时,又要收回它所占的存储空间作为空闲块。

用户作业在执行期间经常要求建立一个新文件或撤消一个不再需要的文件,因此,文件系统必须要为它们分配存储空间或收回它所占的存储空间。

如何实现存储空间的分配和收回,取决于对空闲块的管理方法,主要有两种对磁盘存储空间的分配和收回的方法:位示图法(用一张位示图(简称位图)来指示磁盘存储空间的使用情况),空闲块链接法(在UNIX操作系统中,把磁盘存储空间的空闲块成组链接)。

关键词:磁盘的分配和回收管理;位示图;成组链接。

前言通过该题目的设计过程,掌握磁盘存储管理的原理、软件开发方法并提高解决实际问题的能力。

学习使用位示图管理磁盘空间的分配与回收,了解程序运行前和回收磁盘的物理地址过程。

学会用模拟UNIX系统的成组链接法实现磁盘空间的管理。

了解UNIX的命令及使用格式,熟悉UNIX/LINUX的常用基本命令,练习并掌握UNIX提供的vi编辑器来编译C程序,学会利用gcc、gdb编译、调试C程序。

希望通过本次设计过程可以提高自己的分析问题的能力和实际动手的能力,将学到的知识用于实践中。

正文1. 实验目的磁盘格式化时,系统把磁盘存储空间分成许多磁道。

每个磁道又分成若干个扇区(又叫做块)。

这些空间就是用来存放用户文件的。

当用户的文件不再需要时,就应该删除。

把一个文件存放到磁盘上时,可以组织成连续文件,链接文件,索引文件等。

因此,磁盘空间的分配方法也有两种,一种是连续空间的分配;一种是不连续空间的分配(又叫动态分配)。

如何充分有效的利用磁盘空间,是操作系统应解决的重要课题之一。

磁盘管理分区实验报告

磁盘管理分区实验报告

一、实验目的本次实验旨在掌握Linux系统中磁盘管理的相关操作,包括磁盘分区的创建、格式化、挂载以及分区信息的查看等。

通过实验,加深对磁盘分区概念的理解,并能够熟练运用相关命令进行磁盘管理。

二、实验环境操作系统:Ubuntu 20.04 LTS硬件设备:虚拟机(至少1GB内存,10GB硬盘空间)软件工具:Linux命令行终端三、实验内容1. 磁盘分区(1)查看现有磁盘信息使用`lsblk`命令查看系统中现有的磁盘和分区信息。

```bashlsblk```(2)创建分区使用`fdisk`命令创建新的分区。

以下示例中,我们将对/dev/sdb磁盘进行分区。

```bashsudo fdisk /dev/sdb```在`fdisk`命令的交互式界面中,按照以下步骤操作:- 输入`n`创建新的分区。

- 输入`p`创建主分区。

- 按提示输入分区号(例如1)。

- 按提示输入起始扇区,默认回车即可。

- 按提示输入结束扇区,默认回车即可。

- 输入`w`保存并退出`fdisk`。

(3)查看分区信息再次使用`lsblk`命令查看分区信息,确认新创建的分区。

2. 格式化分区(1)使用`mkfs`命令格式化分区。

以下示例中,我们将格式化新创建的分区/dev/sdb1。

```bashsudo mkfs.ext4 /dev/sdb1```(2)确认格式化结果使用`lsblk`命令查看分区信息,确认分区已格式化。

3. 挂载分区(1)创建挂载点在`/mnt`目录下创建一个挂载点,用于挂载新创建的分区。

```bashsudo mkdir /mnt/new_disk```(2)挂载分区使用`mount`命令将新创建的分区挂载到挂载点。

```bashsudo mount /dev/sdb1 /mnt/new_disk```(3)查看挂载信息使用`df -h`命令查看挂载信息,确认分区已挂载。

4. 卸载分区使用`umount`命令卸载已挂载的分区。

操作系统 磁盘空间管理的实验报告

操作系统 磁盘空间管理的实验报告

实验五磁盘存储空间的管理一、实验目的磁盘格式化时,系统把磁盘存储空间分成许多磁道。

每个磁道又分成若干个扇区(又叫做磁盘块)。

之后用fdisk命令对硬盘进行分区,即使只有一个分区,也必须用fdisk命令进行分区。

分区的目的,就是制作文件卷,形成文件系统。

一个文件卷一般都被划分成引导扇区、文件系统管理区和文件数据区。

其中,文件数据区用来存放系统文件和用户文件。

用户可以通过文件系统提供的API,创建、打开、关闭和对文件进行读写。

当用户的文件不再需要时,就应该删除。

把一个文件放到磁盘上时,可以组织成连续文件、链接文件或索引文件等。

因此,磁盘空间的分配方法也有两种,一种是连续空间的分配,一种是不连续空间的分配(又叫动态分配)。

如何充分有效地利用磁盘空间,是操作系统应解决的重要课题之一。

本实验模拟实现磁盘空间的分配与回收,使学生对磁盘空间的管理有一个较深入的理解。

二、实验要求书写实验报告,应该包括以下几项内容:(1)实验题目;(2)程序中使用的数据结构及主要符号说明;(3)程序流程图和带有详细注释的源程序;(4)执行程序名,并打印程序运行时的初值和运行结果;(5)通过实验后的收获与体验及对实验的改进意见和见解三、实验内容(1)假定现有一个磁盘组,共有40个柱面。

每个柱面4个磁道,每个磁道又划分成4个物理记录。

磁盘的空间使用情况用位示图表示。

位示图用若干个字构成,每一位对应一个磁盘道。

“1”表示占用,“0”表示空闲。

为了简单,假定字长为16位,一个字可用来模拟磁盘的一个柱面,其位示图如图5—1所示。

系统设置一个变量S记录当前的空闲磁盘块个数。

位示图的初始状态由户自己设定。

图5-1 位示图(2)申请一个磁盘块时,由磁盘块分配程序查位示图,找出一个为0的位,并计算磁盘的物理地址(即求出它的柱面号、磁道号和扇区号)。

①由位示图计算磁盘的相对块号的公式如下:相对块号=字号*16+位号②再将相对块号转换成磁盘的物理地址:柱面号=(相对块号/16)的商,也即柱面号=字号磁道号=((相对块号/16的余数)/4)的商,也即(位号/4)的商物理块号=(((相对块号/16)的余数)/4)的余数,也即(位号/4)的余数(3)当释放一个相对物理块时,运行回收程序,计算该块在位示图中的位置,再把相应由“1”改为“0”。

磁盘管理 实验报告

磁盘管理 实验报告

磁盘管理实验报告磁盘管理实验报告概述:磁盘管理是计算机操作系统中的重要组成部分,它负责管理计算机系统中的磁盘存储空间,确保数据的高效存取和安全性。

本实验旨在通过实际操作和测试,探究磁盘管理的原理和技术,并评估其对系统性能的影响。

实验目标:1. 理解磁盘管理的基本概念和原理。

2. 掌握磁盘分区和文件系统的创建与管理方法。

3. 了解磁盘调度算法的工作原理和性能特点。

4. 分析磁盘缓存和磁盘阵列技术对系统性能的影响。

实验环境:本次实验使用了一台配置较为普通的计算机,搭载了Windows 10操作系统和500GB机械硬盘。

实验步骤和结果:1. 磁盘分区和文件系统的创建与管理:在Windows 10操作系统中,我们使用了磁盘管理工具对硬盘进行了分区和格式化操作。

通过分区,我们将硬盘划分为多个逻辑驱动器,以便更好地管理和组织数据。

而文件系统的格式化则是为了在磁盘上创建文件系统,并对其进行初始化。

我们选择了NTFS文件系统,因为它支持更大的文件大小和更高的性能。

经过实验操作,我们成功地创建了多个分区,并将它们格式化为NTFS文件系统。

2. 磁盘调度算法的工作原理和性能特点:磁盘调度算法是为了优化磁盘访问的顺序和效率而设计的。

在本次实验中,我们选择了最常用的磁盘调度算法——SCAN算法,并通过实验测试其性能。

我们使用了一个模拟的磁盘访问序列,并记录了SCAN算法下的平均寻道时间和平均旋转延迟时间。

实验结果表明,SCAN算法在磁盘访问效率方面表现出色,能够较好地平衡磁盘访问的延迟和吞吐量。

3. 磁盘缓存和磁盘阵列技术对系统性能的影响:磁盘缓存和磁盘阵列技术是提高磁盘访问性能的两种常见方法。

磁盘缓存利用高速缓存存储器来暂存磁盘数据,以减少对磁盘的实际访问次数,从而提高系统的响应速度。

而磁盘阵列则是通过将多个磁盘组合成一个逻辑单元,实现数据的并行读写,从而提高磁盘的吞吐量。

通过实验测试,我们对比了启用和禁用磁盘缓存以及使用单个磁盘和磁盘阵列的情况下的磁盘访问性能。

磁盘管理实验报告

磁盘管理实验报告

磁盘管理实验报告磁盘管理实验报告一、引言磁盘管理是计算机操作系统中的重要组成部分,它负责管理磁盘上的文件存储和访问。

在本次实验中,我们将通过模拟磁盘管理的过程,探索不同的磁盘调度算法对系统性能的影响。

本报告将介绍实验的背景和目的,并详细讨论实验过程和结果。

二、实验背景和目的磁盘是计算机中常用的存储设备之一,它将数据以磁场的形式存储在磁道上。

磁盘的读写速度较慢,而且在多个进程同时访问磁盘时容易出现冲突。

因此,磁盘管理的优化对于提高系统的性能至关重要。

本次实验的目的是通过模拟不同的磁盘调度算法,比较它们在不同场景下的性能差异。

我们将使用C语言编写模拟程序,通过生成随机的磁盘请求序列,并使用不同的磁盘调度算法进行处理。

通过比较不同算法的平均寻道时间、平均旋转延迟和平均传输时间等指标,评估算法的优劣。

三、实验过程实验的第一步是编写模拟程序,我们使用C语言实现了一个简单的磁盘调度模拟器。

该模拟器可以生成指定数量的磁盘请求,并使用不同的磁盘调度算法进行处理。

我们实现了以下几种磁盘调度算法:1. 先来先服务(FCFS):按照请求的到达顺序进行处理。

2. 最短寻道时间优先(SSTF):选择离当前磁道最近的请求进行处理。

3. 扫描算法(SCAN):按照一个方向进行扫描,直到最边缘,然后改变方向继4. 循环扫描算法(C-SCAN):类似于SCAN算法,但是当到达最边缘时,直接返回到最开始的磁道。

5. 电梯算法(LOOK):类似于SCAN算法,但是当到达最边缘时,改变方向继续扫描。

在模拟程序中,我们使用随机数生成器生成了1000个磁盘请求,并分别使用以上算法进行处理。

在每次处理完一个请求后,我们记录下当前的磁道位置,并计算出寻道时间、旋转延迟和传输时间。

最后,我们计算出每种算法的平均寻道时间、平均旋转延迟和平均传输时间,并进行对比分析。

四、实验结果和分析根据实验结果,我们得到了每种算法的平均寻道时间、平均旋转延迟和平均传输时间。

磁盘管理实验

磁盘管理实验

一、实验目的:1、掌握基本磁盘的管理方法。

二、实验环境:操作系统:Windows Server 2003;本实验应采用虚拟机软件完成,以虚拟机为例进行实验。

三、实验内容:1、基本磁盘管理查看虚拟机硬盘分配情况,填入下表:回答下面的问题:(1)打开我的电脑,可以看到该硬盘中的哪几个分区?(2)能否创建扩展磁盘分区并为它指派一个驱动器号或路径?(3)如果把逻辑分区文件系统改为 NTFS,该如何做?(4)如果磁盘中仍有未指派的空间,能否将一个分区或逻辑驱动器的容量进行扩展?2、磁盘碎片整理用户保存文件时,字节数较大的文件常常被分段存放在磁盘不同位置。

较长时间地执行文件的写人、删除等操作后,许多文件分段分布在磁盘不同的位置,就形成了所谓的磁盘“碎片”。

碎片的增加,直接影响了大文件的存取速度,也必定降低了机器的整体运行速度。

磁盘碎片整理程序的作用是,重新安排磁盘中的文件和磁盘自由空间,使文件尽可能存储在连续的单元中,并使磁盘空闲的自由空间形成连续的块。

1.按下述方式启动磁盘碎片整理程序:“开始”--“程序”--“附件”--“系统工具”--“磁盘碎片整理程序”2.查看在磁盘碎片整理程序窗口的各项内容3.分析各驱动器是否需要磁盘碎片整理在磁盘碎片整理程序窗口中依次选择一个磁盘分区,选择“分析”,查看分析报告。

4.对D盘进行磁盘碎片整理5.在磁盘碎片整理程序窗口中选择D盘,选择“碎片整理”6.整理完成后在对D盘进行分析,查看与整理前的区别。

注意:1.碎片整理时要关闭其他正在运行的程序。

2.尽量不要整理其他的系统分区,该分区请在其系统内进行整理。

3、磁盘清理该工具可以辨别硬盘上的一些无用的文件,并征得用户许可后删除这些文件,以便释放一些硬盘空间。

所谓“无用文件”,如Internet临时文件,回收站等。

1.按下述方式启动磁盘碎片整理程序:“开始”--“程序”--“附件”--“系统工具”--“磁盘碎片整理程序”2.在出现的对话窗口中选择要进行清理的磁盘,确定3.提示信息将报告清理后可能释放的磁盘空间,列出可被删除的目标文件类型和每个目标文件类型的说明,并可以进一步详细查看某种文件类型中的所有目标文件列表。

磁盘调度的实验报告(3篇)

磁盘调度的实验报告(3篇)

第1篇一、实验目的1. 理解磁盘调度算法的基本原理和重要性。

2. 掌握几种常见的磁盘调度算法,包括先来先服务(FCFS)、最短寻道时间优先(SSTF)、扫描(SCAN)和循环扫描(C-SCAN)算法。

3. 通过模拟实验,分析不同磁盘调度算法的性能差异。

4. 优化磁盘调度策略,提高磁盘访问效率。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 磁盘调度算法模拟库:PyDiskScheduling三、实验内容1. FCFS算法:模拟实现先来先服务算法,按照请求顺序访问磁盘。

2. SSTF算法:模拟实现最短寻道时间优先算法,优先访问距离当前磁头最近的请求。

3. SCAN算法:模拟实现扫描算法,磁头从0号磁道开始向0号磁道移动,访问所有请求,然后返回到0号磁道。

4. C-SCAN算法:模拟实现循环扫描算法,与SCAN算法类似,但磁头在到达末尾磁道后返回到0号磁道。

四、实验步骤1. 导入PyDiskScheduling库。

2. 创建一个磁盘调度对象,指定磁头初始位置、请求序列和调度算法。

3. 运行调度算法,获取磁头移动轨迹和访问时间。

4. 分析算法性能,包括磁头移动次数、平均访问时间和响应时间等。

五、实验结果与分析1. FCFS算法:在请求序列较短时,FCFS算法表现较好。

但随着请求序列长度增加,磁头移动次数和访问时间明显增加。

2. SSTF算法:SSTF算法在请求序列较短时表现最佳,平均访问时间和响应时间较低。

但当请求序列较长时,算法性能下降,磁头移动次数增加。

3. SCAN算法:SCAN算法在请求序列较短时性能较好,但随着请求序列长度增加,磁头移动次数和访问时间逐渐增加。

与SSTF算法相比,SCAN算法在请求序列较长时性能更稳定。

4. C-SCAN算法:C-SCAN算法在请求序列较短时表现较好,但随着请求序列长度增加,磁头移动次数和访问时间逐渐增加。

与SCAN算法相比,C-SCAN算法在请求序列较长时性能更稳定,且磁头移动次数更少。

磁盘管理_实验报告

磁盘管理_实验报告

一、实验目的1. 理解磁盘的基本结构和工作原理。

2. 掌握Linux操作系统中磁盘管理的常用命令。

3. 学会使用磁盘分区、格式化、挂载等基本操作。

4. 了解磁盘故障的检测与修复方法。

二、实验环境1. 操作系统:Linux2. 硬件设备:计算机、硬盘(包括固态硬盘和机械硬盘)3. 软件工具:磁盘分区工具、格式化工具、磁盘检测工具等三、实验内容1. 磁盘结构和工作原理磁盘是计算机中常用的存储设备,主要由以下几个部分组成:磁头:用于读写磁盘上的数据。

磁盘片:由多个磁性盘片组成,用于存储数据。

控制单元:负责控制磁头的移动和数据读写。

磁盘的工作原理如下:1. 当读取数据时,磁头定位到指定位置,读取磁盘片上的数据。

2. 当写入数据时,磁头将数据写入磁盘片上的指定位置。

2. 磁盘管理命令Linux操作系统中,常用的磁盘管理命令如下:fdisk:用于磁盘分区。

mkfs:用于格式化磁盘分区。

mount:用于挂载磁盘分区。

df:用于查看磁盘使用情况。

du:用于查看文件/文件夹大小。

3. 磁盘分区磁盘分区是指将硬盘划分为多个逻辑分区,每个分区可以独立存储数据。

实验步骤:1. 使用fdisk命令创建新的磁盘分区。

2. 使用mkfs命令格式化磁盘分区。

3. 使用mount命令将磁盘分区挂载到文件系统。

4. 磁盘格式化磁盘格式化是指将磁盘分区上的数据全部清空,并建立文件系统。

实验步骤:1. 使用mkfs命令格式化磁盘分区。

2. 使用df命令查看磁盘使用情况。

5. 磁盘挂载磁盘挂载是指将磁盘分区与文件系统关联起来,以便用户访问。

实验步骤:1. 使用mount命令将磁盘分区挂载到文件系统。

2. 使用df命令查看磁盘挂载情况。

6. 磁盘故障检测与修复磁盘故障可能导致数据丢失或系统崩溃。

以下是一些常用的磁盘故障检测与修复方法:使用磁盘检测工具检测磁盘健康状态。

使用磁盘修复工具修复磁盘错误。

备份数据以防止数据丢失。

四、实验结果与分析通过本次实验,我们成功掌握了以下内容:1. 磁盘的基本结构和工作原理。

操作系统实验里模拟实现磁盘文件管理

操作系统实验里模拟实现磁盘文件管理

操作系统实验里模拟实现磁盘文件管理操作系统实验(七)磁盘文件1.实验内容使用C++模拟实现磁盘文件存储结构。

2.实验目的了解磁盘文件的存储物理结构。

3.实验题目实现磁盘文件写(必做)和插入(选做)操作。

4.程序流程图5.程序代码和结果#include <iostream>#include <string>using namespace std;typedef struct MULU{string name;int start;int length;}MULU;typedef struct FAT{int num;int next;}FAT;MULU mulu[10];int mulu_i=0;FAT fat[10];int allnum=10;int fat_i=0;void init(){for(int i=0;i<20;i++){fat[i].num=i;fat[i].next=0;}fat[0].next=-2;fat[1].next=-1;allnum-=2;}int getEmpty(){for(int i=0;i<20;i++){if(fat[i].next==0){ allnum--;return i;}}return -1;}int write(){cout<<"\n请输入文件名和记录数:"; string name; int n;int temp=0;int next=0;int s=0;cin>>name;cin>>n;if(n>allnum){cout<<"你输入的记录数过大!"<<endl;return -1;}for(int i=0;i<n*2;i++){next=getEmpty();if(next==-1){cout<<"没有空块!"<<endl;return -1;}if(i==0){s=next;}else{fat[temp].next=next;}temp=next;}fat[temp].next=-1;mulu[mulu_i].name=name;mulu[mulu_i].start=s;mulu[mulu_i].length=n;mulu_i++;cout<<"\n\t文件目录表"<<endl;for(i=0;i<mulu_i;i++)cout<<"\t"<<mulu[i].name<<"\t"<<mulu[i].start<<"\t"<< mulu[i].length<<"\t"<<endl; cout<<endl;cout<<"\tFAT表(-2表示FDF,-1表示FFF)"<<endl;for(int j=0;j<10;j++)cout<<"\t"<<fat[j].num<<"\t"<<fat[j].next<<"\t"<<endl;return 1;}int main(){init();int flag=1;while(flag<5){write();flag++;}return 0;}第二篇:实验一:磁盘与文件管理 3000字实验一:磁盘与文件管理【实训目的】1.掌握利用 NTFS 文件系统实现磁盘限额2.掌握利用 NTFS 文件系统压缩数据3.掌握利用 NTFS 文件系统中的 EFS 加密数据4.掌握共享文件夹的创建和访问5.掌握卷影副本的作用和使用方法【实验内容】1.使用 NTFS 文件系统实现磁盘限额2.使用 NTFS 文件系统压缩数据3.使用 NTFS 文件系统中的 EFS 加密数据4.练习创建、删除共享文件夹、访问共享文件夹、指定共享文件夹权限的方法5.练习使用卷影副本恢复受到损坏的共享文件夹6.验证用户的有效权限【实验环境】安装有 Windows Server 2003 操作系统的计算机【实训步骤】任务 1:NTFS 文件系统一、使用 NTFS 文件系统实现磁盘限额1.分配默认磁盘配额(1)为驱动器 c盘(必须是NTFS 分区)配置默认的限额管理设置值:磁盘空间限度:2MB;磁盘空间警告信息:1MB(2)建新用户 test,然后以 test 用户登录系统,向 data文件夹中分两次拷贝数据,1MB<第一次<2MB,第二次>2MB,哪一次拷贝成功?哪一次没成功?注:在“配额”选项卡中,若选中了“用户超出了配额限制时记录事件”和“用户超出了警告等级时记录事件” ,则可以在“事件查看器” (在“计算机管理”对话框中)中查看日志。

磁盘管理实验报告

磁盘管理实验报告

磁盘管理实验报告
磁盘管理实验报告
⼀、实验要求:
1.掌握磁盘分区技巧。

2.掌握虚拟内存的增配及优先级调配。

3.掌握tune2fs的使⽤⽅法。

⼆、实验过程:
1.磁盘的分区:
在linux中我们对磁盘进⾏分区时需要理解添加⼀个新的⽂件系统需要⽣成的⽂件树规则:定义⼀个设备
设备分区
创建⼀个⽂件系统(格式化)
建⽴⼀个卷标
写⼊到/etc/fstab
挂载新的⽂件系统
2.虚拟内存:
虚拟内存的创建有两种⽅式,⼀种是fdisk创建,⼀种是空设备⽂件创建。

(1)fdisk创建(在fdisk界⾯创建需要更改系统标识,然后格式化为swap格式):
(2)空设备创建(这个相当于在已有的分区中腾出空设备,给他名字,然后格式化为swap):
(3)swap优先调⽤级别调试:
3. tune2fs的使⽤:
tune2fs是查看某⼀个分区的详细信息,就如在windows下查看属性⼀样!
我们通过tune2fs -l /dev/sda5来查看sda5的详细信息。

其中我们
需要注意的是Default mount options (none)这⾥的none表⽰什么都没有,⽽/dev/sda2是系统缺省(默认)创建的分区。

Default mount options缺省挂载选项⾃动添加acl权限,不随系统创建,是⾃⼰之后创建出来的。

实验成功。

实验报告完成。

实验十四 Windows磁盘管理

实验十四  Windows磁盘管理

实验十四 Windows磁盘管理一、实验目的1.熟悉Windows系统下的磁盘管理。

2.掌握Windows系统的文件系统转换。

3.掌握基本磁盘与动态磁盘的转换。

4.熟悉在动态磁盘中创建各种卷。

二、实验属性验证性试验。

三、实验仪器设备及器材带网络连接的计算机。

四、实验要求1.预习报告中需解决以下问题:(1)主磁盘分区、扩展磁盘分区、逻辑驱动器;(2)基本磁盘;(3)动态磁盘;(4)简单卷、跨区卷、带区卷、镜像卷、RAID5卷。

2.试验中正确使用仪器设备,独立操作。

3.试验后按规定要求写出实验报告。

五、实验内容以下实验都在虚拟机里完成。

1.在启动虚拟机之前,先在虚拟机添加三块新硬盘,每个硬盘空间为8G(菜单VM—Settings--Hardware)。

2.启动虚拟机,打开“开始→控制面板→管理工具→计算机管理→磁盘管理”。

3.初始化三个“基本磁盘”。

不转换成“动态磁盘”。

4.以下在磁盘1中进行。

(1)创建一个主磁盘分区,设置大小为1GB,使用FAT32文件系统,记录分区颜色和盘符是什么?(2)创建一个主磁盘分区,设置大小为1GB,使用NTFS文件系统,记录分区颜色和盘符是什么?(3)创建一个扩展磁盘分区,设置大小为4GB,记录分区颜色,看扩展分区是否有盘符?(4)继续创建一个分区,看可选项里面是否可以再创建一个扩展分区?设置大小为1GB,使用FAT32文件系统,记录分区颜色和盘符是什么?不可以创建,颜色为蓝色,盘符为G卷(5)继续创建分区,此时出现什么情况?会创建不了。

(6)在刚才创建的的扩展分区下继续创建,此时创建的是什么?设置大小为1GB,使用NTFS文件系统,记录分区颜色和盘符是什么?此时创建的是逻辑驱动器,颜色为淡蓝色,盘符为J盘(7)创建完成的分区如下图所示。

5.将磁盘1、磁盘2、磁盘3全部转换成动态磁盘。

思考:转换成动态磁盘后,跟原来的磁盘分区有什么不一样,分区里的文件是否丢失?转换后,颜色跟之前的不一样有棕色变为黑色,此时的文件丢失。

操作系统磁盘空间管理实验报告

操作系统磁盘空间管理实验报告

操作系统磁盘管理一、实验目的怎样有效地管理磁盘存储空间是操作系统应解决的一个重要问题,通过本实习使学生掌握磁盘存储空间的分配和回收算法。

二、实验内容模拟磁盘空闲空间的表示方法,以及模拟实现磁盘空间的分配和回收。

本实习模拟用位示图管理磁盘存储空间的管理方法。

设计申请一块磁盘空间和归还一块磁盘空间的程序。

要求能显示或打印程序运行前和运行后的位示图;分配时把分配到的磁盘空间的物理地址显示或打印出来,归还时把归还块对应于位示图的字节号和位数显示或打印出来。

假定已有如表1的磁盘空间被占用了,现在要申请五块磁盘空间,运行分配程序,显示或打印运行的结果。

然后再归还如表2的空间,运行回收程序,显示或打印运行结果。

三、实验步骤本实验在Visual C++ 6.0编程平台下进行编程实现,详见实验内容。

1.算法设计流程,及源代码;算法思想,及算法流程:磁盘存储空间的分配有两种方式,一种是分配连续的存储空间,另一种是可以分配不连续的存储空间。

为了表示哪些磁盘空间已被占用,哪些磁盘空间是空闲的,可用位示图来指出。

位示图由若干字节构成,每一位与磁盘上的一块对应,“1”状态表示相应块已占用,“0”状态表示该块为空闲。

当申请一块磁盘空间时,由分配程序查位示图,找出一个为“0”的位,计算出这一位对应块的磁盘物理地址,且把该位置成占用状态“1”。

假设现在有一个盘组共80个柱面,每个柱面有两个磁道,每个磁道分成4个物理记录。

那么,当在位示图中找到某一字节的某一位为“0”时,这个空闲块对应的磁盘物理地址为:柱面号=字节号磁道号=[位数/4] 物理记录号={位数/4} 当归还一块磁盘空间时,由回收程序根据归还的磁盘物理地址计算出归还块在位示图中的对应位,把该位置成“0”。

归还块在位示图中的位置计算如下:字节号=柱面号位数=磁道号 4+物理记录号源程序:#include<iostream.h>#include<stdlib.h>#include<iomanip.h>#define A 10#define B 2#define C 4int koko[A][B][C];int M,N;int i,j,k;char ch;void i_koko(){for(i=0;i<A;i++){for(j=0;j<B;j++){for(k=0;k<C;k++){koko[i][j][k]=1;}}}}void Dispense(){do{cout<<"请输入字节号:"<<'\t';cin>>M;cout<<"请输入位数:"<<'\t';cin>>N;i=M;j=N/4;k=N%4;koko[i][j][k]=0;cout<<"是否继续输入(Y/N):"<<'\t';cin>>ch;}while(ch=='Y'||ch=='y');}void Recycle(){do{cout<<"请输入柱面号"<<'\t';cin>>i;cout<<"请输入磁盘号"<<'\t';cin>>j;cout<<"请输入逻辑记录号"<<'\t';cin>>k;koko[i][j][k]=1;cout<<"是否继续输入(Y/N):"<<'\t';cin>>ch;}while(ch=='Y'||ch=='y');}void Display(){int i,j,k;int flag=0;cout<<"**位示图**"<<endl;cout<<"字\位"<<setw(3);for(i=0;i<B*C;i++){cout<<i<<setw(3);}cout<<endl;for(i=0;i<A;i++){cout<<setw(3)<<i<<setw(6);for(j=0;j<B;j++){for(k=0;k<C;k++){cout<<koko[i][j][k]<<setw(3);flag++;if(flag%8==0)cout<<endl;}}}cout<<endl;cout<<"**磁盘分配图**"<<endl;cout<<"柱面号"<<'\t'<<"磁道号"<<'\t'<<"物理记录号"<<endl;for(i=0;i<A;i++){for(j=0;j<B;j++){for(k=0;k<C;k++){if(koko[i][j][k]==0)cout<<i<<'\t'<<j<<'\t'<<k<<endl;}}}cout<<endl<<endl;}void KOKO(){cout<<"**********************************"<<endl;cout<<"* 1.分配"<<"2.回收"<<"3.显示"<<"4.退出*"<<endl;cout<<"**********************************"<<endl;cout<<"选择所要执行的功能:"<<'\t';int x;cin>>x;cout<<endl;switch(x){case 1:Dispense(); break;case 2:Recycle();break;case 3:Display();break;case 4:exit(1);break;default:cout<<"Error! 该功能不存在请重新输入"<<endl<<endl;}}void main(){i_koko();while(1){KOKO();}}2.编译、调试程序;3.运行程序,记录结果。

磁盘管理实训报告

磁盘管理实训报告

磁盘管理
任务一创建磁盘
1.删除旧磁盘分区;
2.创建一个主磁盘分区,两个扩展磁盘分区,主磁盘分区占整个磁盘1/5,扩展磁盘分区各占2/5;
3.三个磁盘的驱动器名分别为F、H、G;
4.把F、H、G盘文件格式设置为NTFS;
5.创建F盘为简单卷,H盘为带区卷,G盘为镜像卷
操作过程:单击开始进入程序,选择附件,进入管理工具,选择计算机管理,进行任务一的相关操作,最终结果如下图:
任务二磁盘管理
1.将F盘级为动态磁盘;
2.将F、H、G磁盘驱动器号分别更改为C、D、E;
分别选中F 、H、G磁盘,单击右键,出现更改磁盘驱动号,一次把磁盘驱动器号分别更改为C、D、E。

3.把C盘文件格式更改为FA T;
4.把C盘顶端和底端的查看方式分别设置为磁盘列表和图形视图;
5.写出C、D、E盘磁盘的属性、状态、类型、容量、空闲等详细信息;
分别选中C、D、E盘,单击右键,打开属性,只截取C盘属性查看详细信息:
6.指定CD-ROM设备的驱动器名名为H;
打开虚拟机的“我的电脑”把CD-ROM设备的驱动器名名为H。

7.写出未指派、主磁盘分区、逻辑磁盘分区、简单区、带卷区、镜像卷分别是用什么样的颜色表示;
主磁盘分区是深蓝色,逻辑分区是浅蓝色。

文件系统存储空间管理模拟实验报告

文件系统存储空间管理模拟实验报告

课程名称计算机操作系统实验名称文件系统存储空间管理模拟姓名学号专业班级实验日期成绩指导老师一、实验目的根据提出的文件分配和释放请求,动态显示磁盘空闲空间的态以及文件目录的变化,以位示图和索引分配为例:每次执行请求后要求显示或打印位示图的修改位置、分配和回收磁盘的物理块地址、更新的位示图、目录。

二、实验原理用数组表示位示图,其中的每一位对应磁盘一个物理块的状态,0表示、空闲,1表示分配;当请求分配一个磁盘块时,寻找到数组中为0的位,计算相对磁盘块号,并计算其在磁盘中的物理地址(柱面号、磁道号、物理块号),并将其状态由0变到1。

当释放某一物理块时,已知其在磁盘中的物理地址,计算其相对磁盘块号,再找到位示图数组中的相应位,将其状态由1变为0。

三、主要仪器设备PC机(含有VC)四、实验内容与步骤实验内容:1. 模拟文件空间分配、释放过程,可选择连续分配、链式分配、索引分配方法;2. 文件空闲空间管理,可采用空白块链、空白目录、位示图方法;步骤如下:1. 输入磁盘基本信息参数,计算位示图大小,并随机初始化位示图;(1)磁盘基本信息:磁盘柱面数m, 每柱面磁道数p, 每磁道物理块数q;(2)假设采用整数数组存放位示图,则数组大小为:Size= ceil((柱面数*每柱面磁道数*每磁道物理块数)/(sizeof(int)*8))(3)申请大小为size的整数数组map,并对其进行随机初始化。

例如:假设m=2, p=4, q=8, 共有64个磁盘块,若sizeof(int)=2, 则位示图大小为4,map[4]如下:地址到高地址位上。

即map[0]的第0位到第15位分别对应0号磁盘块到15号磁盘块的状态,map[1]的第0位到第15位对应16号磁盘块到31号磁盘块的状2. 输出初始位示图信息;3. 输入文件分配或释放请求,(1)格式:“+ 文件名申请块数”或“ - 文件名”“+”表示申请文件分配,“-”表示删除文件如:+ F1 54. 根据请求完成相应操作。

实验 磁盘管理

实验 磁盘管理

磁盘管理一.实验目的与要求1.理解磁盘管理类型-基本磁盘的特点2.掌握基本磁盘管理方式3.掌握动态磁盘管理方式二.实验内容1.在虚拟机上添加3块虚拟硬盘,大小分别为1G、2G、3G。

2.初始化新添加的3块虚拟硬盘,并把它们从基本磁盘升级到动态磁盘。

3.在磁盘1上创建一个简单卷,大小为10MB,驱动器名为E,卷的文件系统格式为NTFS。

4.在磁盘1上扩展E卷,使其大小为20MB。

5.在磁盘2上扩展E卷,使其大小为40MB。

6.在磁盘1的15MB和磁盘2的30MB空间建立跨区卷F,并格式化为NTFS文件系统。

7.在磁盘1和磁盘2的20MB空间建立带区卷G,并格式化为NTFS 文件系统。

8.在磁盘1上创建一个大小为20MB的简单卷H,并将它和磁盘2的未指派空间组合成一个镜像卷。

9.将磁盘1和磁盘2的30MB空间合并建立镜像卷I,并格式化为NTFS文件系统。

10.中断镜像卷H,再恢复镜像卷H。

11.删除镜像卷H在磁盘1上的镜像。

12.删除镜像卷I。

13.在磁盘1、磁盘2、磁盘3的30MB空间上建立RAID-5卷J,并格式化为NTFS文件系统。

14.关闭虚拟机,删除磁盘2,再还原已损坏的镜像卷H和RAID-5卷J。

15.基本磁盘上主分区的创建16.基本磁盘上扩展分区的创建17.扩展分区上逻辑驱动器的创建18.修改驱动器字符和路径19.远程管理磁盘20.磁盘碎片整理21.磁盘清理三.实验参考步骤1.修改驱动器字符和路径step1: 在“管理工具”中打开“计算机管理”;step2: 在“计算机管理”中扩展“存储/磁盘管理”;step3: 右击要为修改驱动器字符或路径的磁盘驱动器,单击“更改驱动器字符和路径”;在更改驱动器字符和路径的对话框中,管理员可通过“添加”、“删除”和“修改”按钮完成相应操作:2.磁盘碎片整理step1: 单击“开始”按钮,选择“所有程序/附件/系统工具”;step2: 在“系统工具”中打开“磁盘碎片整理程序”;在“磁盘碎片整理程序”对话框中,选择要进行碎片整理分区,然后单击“碎片整理”按钮。

磁盘管理技术实验报告

磁盘管理技术实验报告

一、实验目的本次实验旨在使学生掌握磁盘管理的基本原理和方法,熟悉Linux操作系统中磁盘管理的常用命令和工具,了解磁盘分区、格式化、挂载等操作,提高学生在实际工作中处理磁盘问题的能力。

二、实验环境1. 操作系统:Linux Ubuntu 20.042. 硬件环境:虚拟机环境,至少一块硬盘3. 软件环境:fdisk、parted、mkfs、mount、df、du等磁盘管理工具三、实验内容1. 磁盘分区(1)使用fdisk命令创建磁盘分区首先,通过fdisk命令进入磁盘分区编辑模式,然后输入n创建新分区,选择分区类型(主分区或扩展分区),指定分区大小,最后输入t修改分区类型。

(2)使用parted命令创建磁盘分区parted命令可以用于创建、删除、修改磁盘分区。

首先,通过parted命令进入磁盘分区编辑模式,然后输入mkpart创建新分区,指定分区类型、大小和文件系统。

2. 磁盘格式化使用mkfs命令对磁盘分区进行格式化,指定分区类型(如ext4、ext3、ext2、fat32等)。

3. 磁盘挂载使用mount命令将磁盘分区挂载到文件系统,指定挂载点。

4. 磁盘使用情况查看使用df命令查看磁盘使用情况,包括总空间、已用空间、可用空间等信息。

5. 磁盘空间占用情况查看使用du命令查看文件或目录占用空间大小。

6. 磁盘配额设置使用quota命令设置磁盘配额,限制用户或用户组在磁盘上的使用量。

7. 逻辑盘配置使用lvm(逻辑卷管理)工具配置逻辑盘,包括创建物理卷、卷组、逻辑卷,以及拓展和缩小逻辑卷的大小。

四、实验步骤1. 创建磁盘分区首先,使用fdisk命令创建磁盘分区,然后使用parted命令创建磁盘分区。

2. 格式化磁盘分区使用mkfs命令对磁盘分区进行格式化,指定分区类型。

3. 挂载磁盘分区使用mount命令将磁盘分区挂载到文件系统,指定挂载点。

4. 查看磁盘使用情况使用df命令查看磁盘使用情况。

5. 查看磁盘空间占用情况使用du命令查看文件或目录占用空间大小。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录摘要 (2)前言 (3)正文 (4)1. 实验目的 (4)2. 设计思想 (4)3. 实验结构图 (5)4. 各模块的伪码算法 (5)5. 测试分析 (10)6. 测试结果 (11)7. 源程序 (14)总结 (24)参考文献 (25)致谢 (26)摘要要把文件信息存放在存储介质上,必须先找出存储介质上可供使用的空闲块。

存储介质上某个文件不再需要时,又要收回它所占的存储空间作为空闲块。

用户作业在执行期间经常要求建立一个新文件或撤消一个不再需要的文件,因此,文件系统必须要为它们分配存储空间或收回它所占的存储空间。

如何实现存储空间的分配和收回,取决于对空闲块的管理方法,主要有两种对磁盘存储空间的分配和收回的方法:位示图法(用一张位示图(简称位图)来指示磁盘存储空间的使用情况),空闲块链接法(在UNIX操作系统中,把磁盘存储空间的空闲块成组链接)。

关键词:磁盘的分配和回收管理;位示图;成组链接。

前言通过该题目的设计过程,掌握磁盘存储管理的原理、软件开发方法并提高解决实际问题的能力。

学习使用位示图管理磁盘空间的分配与回收,了解程序运行前和回收磁盘的物理地址过程。

学会用模拟UNIX系统的成组链接法实现磁盘空间的管理。

了解UNIX的命令及使用格式,熟悉UNIX/LINUX的常用基本命令,练习并掌握UNIX提供的vi编辑器来编译C程序,学会利用gcc、gdb编译、调试C程序。

希望通过本次设计过程可以提高自己的分析问题的能力和实际动手的能力,将学到的知识用于实践中。

正文1. 实验目的磁盘格式化时,系统把磁盘存储空间分成许多磁道。

每个磁道又分成若干个扇区(又叫做块)。

这些空间就是用来存放用户文件的。

当用户的文件不再需要时,就应该删除。

把一个文件存放到磁盘上时,可以组织成连续文件,链接文件,索引文件等。

因此,磁盘空间的分配方法也有两种,一种是连续空间的分配;一种是不连续空间的分配(又叫动态分配)。

如何充分有效的利用磁盘空间,是操作系统应解决的重要课题之一。

通过本实验,使学生对磁盘空间的分配与回收有一个较深入的理解。

2. 设计思想位示图法:一个简单的管理方法是用一张位示图(简称位图)来指示磁盘存储空间的使用情况。

一个盘组的分块确定后,根据分配的总块数决定位图由多少个字组成,位图中的每一位与盘组分块一一对应。

位示图是一张可以反映磁盘空间是否被占有的模拟图,用一个二维数组表示磁盘的空间,数组内每一个元素表示磁盘内相应的分块,数组元素为“1”表示该块已被占,“0”表示该块为空。

数组元素位置与磁盘分块一一对应,即可描述出磁盘空间的利用情况。

成组链接法:首先定义磁盘分配数组并初始化,9个一维数组分别表示9个空闲块,程序运行时,先将专用块A〔0〕复制到内存中,然后进行功能选择,分配时,查MA,从中找出空闲块号,当一组的空闲块只剩第一块时,应把该块中指出的下一组的空闲块数和块号复制到专用块这,然后把该块分配给申请者,当一组的空闲块分配完后则把专用块内容(下一组链接情况)复制到内存,再为申请者分配。

回收时,输入待回收的块号,查找该块是否已被分配,若未分配,退出,否则,当前组不满规定块数时,将归还块登记入该组,若当前组已满,则另建一新组,这时归还块作为新一组的第一块,应把内存中登记的一组链接情况MA复制到归还块中,然后在MA这重新登记一个新组。

显示分组情况。

系统初始化时先将专用块内容读入内存,当有申请空闲块要求时,就直接在内存专用块中找到哪些块是空闲的,每分配一块后把空闲块数减1。

但要把一组中第一块分配出去之前,可以先把登记在该块中的下一组的块号保存在专用块中(此时,原专用块中的信息巳经无用了,因它指示的一组空闲块都已分配掉)。

当中文组空闲块分配完后,则将下一组内容读入内存专用块中,以便继续分配时查找。

3. 实验结构图4. 各模块的伪码算法1)对位示图法申请磁盘块查看位示图找位号等是否找到是:由字位号计算相对块号和柱面号,磁道号,物理记录号,并输出这些相应参数否:返回,磁盘已满,本次无法分配置位示图相应位为1 返回定义分配函数:void assign(){unsigned int n=0,i,s=1,j,k,q,m,sq,zhm,cid;for(i=0 ,k=0;i<5;i++){q=size[i] ;j=0;while(1){j++ ;if((q%2)==0){ if(j==1) size[i]+=1;else{for(m=1;m<j;m++)s*=2 ;size[i]+=s;}k=1;break ;/*完成后退出*/}q=q/2;}if(k==1) /*将找到的位示图位转换成物理地址*/{ if((j-1)/8==1){zhm=2*i+1;cid=(j-9)/4;sq=(j-9)%4;}else{zhm=2*i;cid=(j-1)/4;sq=(j-1)%4;}n=1;break;/*退出for循环*/}}if(n==0)printf("没有空间可分配!\n");else{printf("分配成功!\n");/*输出物理地址*/printf("柱面号为: %d\n",zhm);printf("磁道号为: %d\n",cid);printf("扇区号为: %d\n",sq);}printf("分配后的位示图为:\n");out();}定义回收函数:void callback()/*回收函数*/{ unsigned int i,j,s=1,q,m,sq,zhm,cid;printf("确定要回收块的柱面号、磁道号、扇区号:\n");printf("请输入柱面号:");scanf("%d",&zhm);printf("\n请输入磁道号:");scanf("%d",&cid);printf("\n请输入扇区号:");scanf("%d",&sq);if(zhm%2==0)/*计算对应的位示图位置*/{ i=zhm/2;j=cid*4+sq+1;}else{ i=(zhm-1)/2;j=cid*4+sq+9;}q=size[i];m=j-1;while(m){q=q/2;m--;}if(q%2==1)/*判断该块是否被分配*/{if(j==1)size[i]-=1;/*将位示图对应为置零*/else{for(m=1;m<j;m++)s*=2 ;size[i]-=s;}printf("回收成功!");printf("回收后的位示图为:\n");out();}elseprintf("该块以被分配!");}2)对成组链接法void assign(){int s,i;if(MA[0]>1) /*若该组不止一个空闲块*/ { i=MA[0];s=MA[i];MA[0]--;printf("\nnumber of the block:%d",s);}else if(MA[0]==1) /*只剩一个空闲块*/ {if(MA[1]!=0) /*还有其它空闲块组*/ { s=MA[1];for(i=0;i<=3;i++)A[0][i]=A[s][i];MA[0]--;printf("\nnumber of the block:%d",s);}else /*没有其它空闲块组*/{ printf("\nThere isn't any space");return;}}else /*当前组已分配完*/{for(i=0;i<=3;i++)MA[i]=A[0][i];assign();}display(); /*显示分组情况*/}void callback(){ int i,j,temp;printf("\ninput the No. of the block you want to callback:");scanf("%d",&j);getchar(); /*得到待回收的空闲块号*/for(temp=1;temp<=No;temp++){ if(mark[temp]==j)break;}if(temp<No+1) /*若该空闲块已在,退出*/{ printf("\nThe block is in the disk");return;}if(MA[0]<3) /*当前组不满3块*/{ i=MA[0];MA[i+1]=j;MA[0]++;}else /*已有3块*/{for(i=0;i<=3;i++)A[j][i]=MA[i];MA[0]=1;MA[1]=j;}display(); /*显示*/}5. 测试分析用位示图表示的磁盘空间可以很形象的反映出磁盘中空间的利用情况,不足之处在于每次分配与回收只可以对单一的分块进行操作,不能同时进行几个块的分配与回收,要进行多个块的分配时,只能单独分配,且块之间没有相互链接,对于大的空间分配只能在连续空间进行。

用成组链接法模拟的磁盘空间能够解决用位示图中存在的问题,它可以通过链表的形式存取信息,对于较大的空间分配,若一个磁盘空间不够,通过指针找到下一个空闲的分区,但操作过程比较复杂,没有位示图方便,简捷。

6. 测试结果1)位示图法✧编译及连接时界面:✧刚运行时界面:✧分配空间时界面:✧回收空间时界面:2)成组链接法分配空间时界面:回收空间时界面:7. 源程序位示图法:#include<stdio.h>unsigned int size[5]={1,1,1,1,1};/*保存位示图*/void out()/*输出位示图函数*/{ unsigned int i,j,m;for(j=0;j<5;j++)/*循环输出size的各个数的各个二进制位*/{m=size[j];for(i=0;i<16;i++) /**/{printf("%d ",m%2);m=m/2;if(i==7)printf("\n");}printf("\n");}}void callback()/*回收函数*/{ unsigned int i,j,s=1,q,m,sq,zhm,cid;printf("确定要回收块的柱面号、磁道号、扇区号:\n");printf("请输入柱面号:");scanf("%d",&zhm);printf("\n请输入磁道号:");scanf("%d",&cid);printf("\n请输入扇区号:");scanf("%d",&sq);if(zhm%2==0)/*计算对应的位示图位置*/{ i=zhm/2;j=cid*4+sq+1;}else{ i=(zhm-1)/2;j=cid*4+sq+9;}q=size[i];m=j-1;while(m){q=q/2;m--;}if(q%2==1)/*判断该块是否被分配*/{if(j==1)size[i]-=1;/*将位示图对应为置零*/else{for(m=1;m<j;m++)s*=2 ;size[i]-=s;}printf("回收成功!");printf("回收后的位示图为:\n");out();}elseprintf("该块以被分配!");}void assign(){unsigned int n=0,i,s=1,j,k,q,m,sq,zhm,cid;for(i=0 ,k=0;i<5;i++){q=size[i] ;j=0;while(1){j++ ;if((q%2)==0){ if(j==1) size[i]+=1;else{for(m=1;m<j;m++)s*=2 ;size[i]+=s;}k=1;break ; /*完成后退出*/}q=q/2;}if(k==1) /*将找到的位示图位转换成物理地址*/{ if((j-1)/8==1){zhm=2*i+1;cid=(j-9)/4;sq=(j-9)%4;}else{zhm=2*i;cid=(j-1)/4;sq=(j-1)%4;}n=1;break;/*退出for循环*/}}if(n==0)printf("没有空间可分配!\n");else{printf("分配成功!\n");/*输出物理地址*/printf("柱面号为: %d\n",zhm);printf("磁道号为: %d\n",cid);printf("扇区号为: %d\n",sq);}printf("分配后的位示图为:\n");out();}void menu() /*功能选择函数*/ { int choice;char judge;printf("\n请选择操作:(1--分配,2--回收):");scanf("%d",&choice);getchar();if(choice==1)assign();else if(choice==2)callback();elseprintf("\n没有此项!");printf("\n继续还是退出?(y--继续,n--退出):");scanf("%c",&judge);getchar();if(judge=='y')menu();else{ printf("\n现在的位示图:\n");out();printf("\n按任意键退出!\n");getchar();}}main(){printf("\t\t————欢迎进入磁盘空间管理模拟实验————\n");printf( " \n");printf("★★★★08级计算机一08240128 李彦博★★★★\n");printf("﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌\n");out();menu();}成组链接法:#include<stdio.h>int MA[4]; /*空闲块数组*/intA[9][4]={{3,1,2,3},{3,4,5,6},{0,0,0,0},{0,0,0,0},{3,0,7,8},{0,0,0,0},{0,0,0,0} ,{0,0,0,0},{ 0,0,0,0}}; /*磁盘空间*/int mark[9]; /*存放已分配的块*/int No=0; /*已分配的块数*/void display1(){int i,j,temp,count;No=0;if(MA[1]!=0){i=MA[0];printf("\ngroup1:");for(j=1;j<=i;j++){ printf("%d ",MA[j]);mark[++No]=MA[j];}temp=MA[1];count=2;while(A[temp][1]!=0){ printf("\ngroup%d:",count);i=A[temp][0];for(j=1;j<=i;j++){printf("%d ",A[temp][j]);mark[++No]=A[temp][j];}count++;temp=A[temp][1];}printf("\ngroup%d:",count);i=A[temp][0];for(j=2;j<=i+1;j++)if(A[temp][j]>0){printf("%d ",A[temp][j]);mark[++No]=A[temp][j];}}else{i=MA[0];if(i==1)printf("\nThe blocks are all assigned");else{printf("\ngroup1:");for(j=2;j<=i;j++){printf("%d ",MA[j]);mark[++No]=MA[j];}}}}void display() /*显示分组情况*/{ int i,j;if(MA[0]!=0)display1();else{i=MA[1];for(j=0;j<=3;j++)MA[j]=A[i][j];display1();}}void assign() /*分配空闲块*/{int s,i;if(MA[0]>1) /*若该组不止一个空闲块*/ { i=MA[0];s=MA[i];MA[0]--;printf("\nnumber of the block:%d",s);}else if(MA[0]==1) /*只剩一个空闲块*/ {if(MA[1]!=0) /*还有其它空闲块组*/ { s=MA[1];for(i=0;i<=3;i++)A[0][i]=A[s][i];MA[0]--;printf("\nnumber of the block:%d",s);}else /*没有其它空闲块组*/{ printf("\nThere isn't any space");return;}}else /*当前组已分配完*/{for(i=0;i<=3;i++)MA[i]=A[0][i];assign();}display(); /*显示分组情况*/}void callback() /*回收空闲块*/{ int i,j,temp;printf("\ninput the No. of the block you want to callback:");scanf("%d",&j);getchar(); /*得到待回收的空闲块号*/for(temp=1;temp<=No;temp++){ if(mark[temp]==j)break;}if(temp<No+1) /*若该空闲块已在,退出*/{ printf("\nThe block is in the disk");return;}if(MA[0]<3) /*当前组不满3块*/{ i=MA[0];MA[i+1]=j;MA[0]++;}else /*已有3块*/{for(i=0;i<=3;i++)A[j][i]=MA[i];MA[0]=1;MA[1]=j;}display(); /*显示*/}void menu() /*功能选择函数*/{ int choice;char judge;printf("\n做出选择:(1--分配,2--回收):");scanf("%d",&choice);getchar();if(choice==1)assign();else if(choice==2)callback();elseprintf("\n错误请求!");printf("\ncontinue or not (y--Yes,n--Not):");scanf("%c",&judge);getchar();if(judge=='y')menu();else{ printf("\nNow the graph is:");display();printf("\npress any key to quit");}}main(){ int i;for(i=0;i<=3;i++)MA[i]=A[0][i];display();menu();}总结经过本次课程设计,完成题目“磁盘空间管理模拟实验”,熟悉了UNIX/LINUX 的常用基本命令,理解并掌握了UNIX提供的vi编辑器来编译C程序,学会利用gcc、gdb编译、调试C程序。

相关文档
最新文档