磁盘存储空间的管理实践报告
- 格式:doc
- 大小:166.00 KB
- 文档页数:21
磁盘管理的实验报告实验报告:磁盘管理一、引言(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.成功实现了一个简单的磁盘缓存管理系统,并通过测试验证了其正确性。
一、实训背景随着信息技术的飞速发展,磁盘管理在计算机系统中扮演着至关重要的角色。
为了提高自己的计算机操作技能,我参加了磁盘管理实训课程。
通过本次实训,我对磁盘管理有了更加深入的了解,以下是我在实训过程中的心得体会。
二、实训内容本次实训主要围绕以下几个方面展开:1. 磁盘分区管理:了解磁盘分区的概念、类型和分区工具,学习使用fdisk、parted等命令进行磁盘分区。
2. 磁盘格式化:掌握磁盘格式化的方法,了解不同格式化方式的优缺点。
3. 磁盘挂载与卸载:学习磁盘挂载与卸载的原理和操作方法,了解挂载点的作用。
4. 磁盘空间管理:掌握磁盘空间管理的技巧,包括磁盘清理、压缩、分区等。
5. 磁盘备份与恢复:了解磁盘备份的重要性,学习使用tar、rsync等工具进行磁盘备份与恢复。
三、实训心得1. 磁盘分区的重要性通过实训,我深刻认识到磁盘分区对于计算机系统的重要性。
合理的磁盘分区可以提高系统性能,方便数据管理和备份。
在实训过程中,我学会了如何使用fdisk、parted等工具进行磁盘分区,并对分区类型、分区大小等有了更深入的了解。
2. 磁盘格式化的技巧实训中,我学习了磁盘格式化的不同方法,如MBR、GPT等。
了解到不同格式化方式对磁盘性能和兼容性的影响。
在实际操作中,我掌握了如何根据需求选择合适的格式化方式,并学会了使用fdisk、mkfs等命令进行磁盘格式化。
3. 磁盘挂载与卸载的操作实训过程中,我学习了磁盘挂载与卸载的操作方法。
通过挂载磁盘,可以使系统访问磁盘中的文件,提高数据传输效率。
同时,卸载磁盘可以避免误操作导致的数据丢失。
在实际操作中,我熟练掌握了挂载与卸载命令,并了解了挂载点的作用。
4. 磁盘空间管理的技巧实训让我了解到磁盘空间管理的重要性。
通过实训,我学会了使用du、df等命令查看磁盘空间使用情况,掌握了磁盘清理、压缩、分区等技巧。
在实际操作中,我能够根据需求对磁盘空间进行合理管理,提高系统运行效率。
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. 掌握存储管理的常用方法和技术;3. 分析实验结果,探讨存储管理的优化策略。
二、实验环境本次实验使用了一台配置较高的计算机,具备较大的内存和高速的硬盘。
实验环境如下:1. 操作系统:Windows 10;2. 内存:16GB;3. 硬盘:1TB。
三、实验过程1. 内存管理实验在内存管理实验中,我们使用了一段较大的程序代码进行测试。
首先,我们通过编程语言将程序代码写入内存中,然后通过内存管理技术将程序代码加载到内存的合适位置。
在加载过程中,我们使用了分页和分段两种常用的内存管理技术,并比较了它们的性能差异。
实验结果显示,分页技术相对来说更加高效,能够更好地利用内存资源,提高系统的运行速度。
2. 外存管理实验在外存管理实验中,我们模拟了大文件的读写操作。
首先,我们将一个较大的文件写入硬盘中,然后通过外存管理技术将文件加载到内存中进行读取。
在加载过程中,我们使用了磁盘调度算法和文件系统管理技术,并比较了它们的性能差异。
实验结果显示,磁盘调度算法的选择对系统的读写速度有较大的影响,而文件系统的合理管理能够提高文件的存取效率。
四、实验结果分析通过对实验结果的分析,我们可以得出以下结论:1. 内存管理中,分页技术相对于分段技术更加高效,能够更好地利用内存资源,提高系统的运行速度;2. 外存管理中,磁盘调度算法的选择对系统的读写速度有较大的影响,合理选择磁盘调度算法能够提高系统的性能;3. 文件系统的合理管理能够提高文件的存取效率,减少文件的碎片化,提高系统的整体性能。
一、实验目的本次实验旨在让学生了解磁盘管理的基本概念和操作,掌握磁盘分区、格式化、挂载等基本技能,熟悉磁盘空间分配策略和优化方法,提高学生对磁盘管理的实际操作能力。
二、实验环境操作系统: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`命令,将分区挂载到挂载点。
实训报告磁盘管理一、实训目的掌握磁盘管理的知识与技能二、实训环境装有Windows Server 2003 操作系统计算机三、实训内容及步骤:1、对硬盘进行分区。
2、修改硬盘逻辑驱动器、光驱、移动硬盘、U 盘等设备的盘符。
四、实训过程1、在操作系统中利用磁盘管理对硬盘进行分区。
Windows 本身自带有一个磁盘管理工具,可以对未安装操作系统的那些分区或是另外一块硬盘重新配置分区。
下面几种情况都可以用磁盘管理工具搞定重新分区的操作。
(1)硬盘原来已经划了两个或是更多的分区,C 盘不想变动,但是想把后面的分区删掉,重新划成一个或是几个分区。
(2)装系统的时候只用硬盘的一部分空间划了个C 盘,还有一些空间没有划成分区。
(3)电脑又新加了一块硬盘上去,想要对新加的这块硬盘进行重新分区的操作。
不过,磁盘管理的分区功能也是一种破坏性的操作,凡是操作中涉及到的分区数据都会全部丢掉。
只是这个办法既不用借助于其它的工具,而且在Windows 下就可以进行操作,所以还是有些用处的。
下面这个例子是属于上述的第二种情况,装系统的时候我只划了一个40GB 的C 盘,别的空间都没有分区。
现在我想要在系统中把剩余的空间划分成两个分区,步骤如下:1、右键点击『我的电脑』,选择『管理』,打开计算机管理窗口。
2、在打开的计算机管理窗口中点击屏幕左侧的『磁盘管理』,进入如下图所示的磁盘管理界面。
大家可以看到屏幕右侧,磁盘0 右边有一块黑色的未指派空间,右键点击之,选择『新建磁盘分区』。
3、弹出新建磁盘分区向导。
直接点『下一步』。
4、然后让选择创建的磁盘分区。
这里我们应该选择『主磁盘分区』,然后点击『下一步』。
除了主磁盘分区,其余的空间需要划分成一个扩展磁盘分区,然后再在扩展磁盘分区上来划分逻辑磁盘分区。
扩展磁盘分区是无法直接引导操作系统的,而且一块硬盘,只能划分一个扩展磁盘分区。
举例来说,如果一块硬盘划分成了C、D、E、F 四个分区,此时C 是主磁盘分区,D、E、F 是逻辑磁盘分区,这三个逻辑磁盘分区又都是建立在这个硬盘的扩展磁盘分区上的。
磁盘管理实验报告心得引言磁盘是计算机中重要的硬件设备,负责存储和管理大量的数据。
磁盘管理是操作系统中非常重要的一部分,对系统的性能和稳定性有着直接的影响。
在这次磁盘管理实验中,我深入了解了磁盘的内部组织结构以及常见的磁盘管理算法,并通过实验学习了磁盘的分区、格式化、文件读写等操作。
这次实验让我对磁盘管理有了更深入的理解,并且增强了我在操作系统方面的实践能力。
实验内容这次实验主要包括以下几个方面的内容:1. 磁盘的组织结构和工作原理:了解磁盘的物理结构,包括道、磁头和扇区的概念,以及磁盘读写的基本原理。
2. 分区与格式化:了解磁盘分区和格式化的概念和操作方法,并通过实验进行磁盘分区和格式化的操作。
3. 文件读写:学习文件的逻辑结构和文件读写的基本原理,通过实验实现一些简单的文件读写操作。
4. 空闲空间管理:了解磁盘上空闲空间的管理方法,包括位图法和链表法,并通过实验实现了位图法的空闲空间管理算法。
实验过程在实验过程中,我首先通过阅读相关资料了解了磁盘的组织结构和工作原理。
磁盘是由多个碟片组成的,每个碟片分为若干个圆环状的道,每个道又被划分为若干个弧段,也就是扇区。
每个碟片上还有一个或多个磁头,可以在碟片上进行磁道和扇区的读写操作。
接着,我进行了磁盘的分区和格式化操作。
分区是将一个物理磁盘划分为多个逻辑区域,每个逻辑区域可以独立管理。
格式化是对分区进行初始化操作,以便后续的文件读写等操作。
通过实验,我成功地对磁盘进行了分区和格式化,并对分区和格式化的过程有了更深入的了解。
在文件读写方面,我学习了文件的逻辑结构和文件读写的基本原理。
文件是操作系统中的基本单位,有顺序文件和随机文件两种不同的逻辑结构。
顺序文件的读写是按照文件中记录的顺序进行的,而随机文件的读写则是按照文件中记录的位置进行的。
通过实验,我实现了一些简单的文件读写操作,并加深了对文件读写原理的理解。
最后,我学习了磁盘空闲空间的管理算法。
磁盘上有大量的空闲空间,如何高效地管理这些空闲空间对系统的性能有着重要的影响。
实验五磁盘存储空间的管理一、实验目的磁盘格式化时,系统把磁盘存储空间分成许多磁道。
每个磁道又分成若干个扇区(又叫做磁盘块)。
之后用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个磁盘请求,并分别使用以上算法进行处理。
在每次处理完一个请求后,我们记录下当前的磁道位置,并计算出寻道时间、旋转延迟和传输时间。
最后,我们计算出每种算法的平均寻道时间、平均旋转延迟和平均传输时间,并进行对比分析。
四、实验结果和分析根据实验结果,我们得到了每种算法的平均寻道时间、平均旋转延迟和平均传输时间。
实训报告磁盘管理一、实训目的掌握磁盘管理的知识与技能二、实训环境装有Windows Server 2003 操作系统计算机三、实训内容及步骤:1、对硬盘进行分区。
2、修改硬盘逻辑驱动器、光驱、移动硬盘、U 盘等设备的盘符。
四、实训过程1、在操作系统中利用磁盘管理对硬盘进行分区。
Windows 本身自带有一个磁盘管理工具,可以对未安装操作系统的那些分区或是另外一块硬盘重新配置分区。
下面几种情况都可以用磁盘管理工具搞定重新分区的操作。
(1)硬盘原来已经划了两个或是更多的分区,C 盘不想变动,但是想把后面的分区删掉,重新划成一个或是几个分区。
(2)装系统的时候只用硬盘的一部分空间划了个C 盘,还有一些空间没有划成分区。
(3)电脑又新加了一块硬盘上去,想要对新加的这块硬盘进行重新分区的操作。
不过,磁盘管理的分区功能也是一种破坏性的操作,凡是操作中涉及到的分区数据都会全部丢掉。
只是这个办法既不用借助于其它的工具,而且在Windows 下就可以进行操作,所以还是有些用处的。
下面这个例子是属于上述的第二种情况,装系统的时候我只划了一个40GB 的C 盘,别的空间都没有分区。
现在我想要在系统中把剩余的空间划分成两个分区,步骤如下:1、右键点击『我的电脑』,选择『管理』,打开计算机管理窗口。
2、在打开的计算机管理窗口中点击屏幕左侧的『磁盘管理』,进入如下图所示的磁盘管理界面。
大家可以看到屏幕右侧,磁盘0 右边有一块黑色的未指派空间,右键点击之,选择『新建磁盘分区』。
3、弹出新建磁盘分区向导。
直接点『下一步』。
4、然后让选择创建的磁盘分区。
这里我们应该选择『主磁盘分区』,然后点击『下一步』。
除了主磁盘分区,其余的空间需要划分成一个扩展磁盘分区,然后再在扩展磁盘分区上来划分逻辑磁盘分区。
扩展磁盘分区是无法直接引导操作系统的,而且一块硬盘,只能划分一个扩展磁盘分区。
举例来说,如果一块硬盘划分成了C、D、E、F 四个分区,此时C 是主磁盘分区,D、E、F 是逻辑磁盘分区,这三个逻辑磁盘分区又都是建立在这个硬盘的扩展磁盘分区上的。
目录1.相关知识 (4)1.1空闲盘块的组织 (4)1.2空闲盘块的分配与回收 (5)2.系统设计 (5)2.1算法及说明 (5)2.2算法流程图 (6)2.3数据结构及各子程序 (6)3.成果 (7)3.1磁盘存储空间的分配 (7)3.2磁盘存储空间的回收 (7)3.3结束 (8)4.总结 (9)4.1 个人总结赵勋 (9)4.2 个人总结史迎丰 (10)4.3 个人总结齐泓洋 (11)4.4 个人总结李霖 (12)5.参考文献 (12)《操作系统》课程设计任务书1.相关知识1.1空闲盘块的组织(1)空闲盘块好栈用来存放当前可用的一组空闲的盘块好(最多含100个号),以及栈中尚有的空闲盘块号数N。
顺便指出,N还兼作栈顶指针用。
(2)文件区中的所以空闲盘块被分成若干组,比如,将每100个盘块作为一组。
假定盘上共有1000个盘块,每块大小为1kb,其中201~7999号盘块用于存放文件,即作为文件区,这样,该区的最末一组盘块号应为7901~7999;次末组为7801~7900….;第二组盘块号为301~400;第一组为201~300(3)将每一组含有的盘块总数N和该组所有的盘块记入其前一组的第一个盘块的S.freee(0)~S.free(99)中。
这样,由各组的第一个盘块可链成一条链。
(4)将第一组的盘块总数和所有的盘块号记入空闲盘块号栈中,作为当前可供分配的空闲盘块号。
(5)最末一组只有99个盘块,其盘块号分别记入其前一组的S.freee(1)~S.free(99)中,而在S.freee(0)中则存放“0”,作为空闲盘块链的结束标志。
1.2空闲盘块的分配与回收当系统要为用户分配文件所需的盘块时,须调用盘块分配过程来完成。
该过程首先检查空闲盘块号栈是否上锁,如未上锁,便从栈顶取出一空闲盘块号,将与之对应的盘块分配给用户,然后将栈顶指针下移一格。
若该盘块号已是栈底,即S.freee(0),这是当前栈中最后一格可分配的盘块号。
磁盘管理实训报告一、实训目的本次实训旨在通过实际操作,使学生掌握Linux系统下磁盘管理的相关知识,包括磁盘分区、格式化、挂载等基本操作,提高学生在实际工作中处理磁盘问题的能力。
二、实训环境1. 操作系统:Linux(CentOS 7)2. 磁盘:一块2G的虚拟硬盘3. 工具:fdisk、parted、mkfs.ext4、mount等三、实训内容1. 磁盘分区(1)使用fdisk命令创建分区首先,使用fdisk命令对虚拟硬盘进行分区操作。
在Linux终端输入以下命令:```fdisk /dev/sdb```其中,/dev/sdb表示虚拟硬盘的设备名称。
(2)选择分区类型进入fdisk交互模式后,按p键查看当前磁盘的分区情况。
按n键创建新分区,然后根据提示选择分区类型(主分区或扩展分区)。
这里以创建主分区为例。
(3)设置分区大小和起始位置根据提示输入新分区的大小和起始位置。
这里以创建一个2G的主分区为例。
(4)保存分区表创建完分区后,按w键保存分区表。
2. 格式化分区使用mkfs.ext4命令对新建的分区进行格式化。
格式如下:```mkfs.ext4 /dev/sdb1```其中,/dev/sdb1表示新建的主分区。
3. 挂载分区(1)创建挂载点在Linux系统中,需要创建一个挂载点来存放分区中的文件。
使用mkdir命令创建挂载点:```mkdir /mnt/sdb1```(2)挂载分区使用mount命令将分区挂载到挂载点:```mount /dev/sdb1 /mnt/sdb1```4. 查看磁盘空间使用情况使用df命令查看磁盘空间使用情况:```df -h```5. 卸载分区使用umount命令卸载分区:```umount /mnt/sdb1```四、实训总结通过本次实训,我掌握了以下磁盘管理操作:1. 使用fdisk命令创建、删除和修改分区。
2. 使用mkfs.ext4命令对分区进行格式化。
一、实验目的1. 理解磁盘存储的基本原理和结构;2. 掌握磁盘分区、格式化、挂载等基本操作;3. 了解磁盘调度算法及其应用;4. 学会使用磁盘管理工具,提高磁盘存储效率。
二、实验环境1. 操作系统:Linux Ubuntu 20.042. 硬件设备:计算机、硬盘(至少一块)3. 软件:fdisk、mkfs.ext4、mount、df、du等三、实验内容1. 磁盘存储原理及结构(1)磁盘存储原理:磁盘存储器是一种利用磁性材料记录信息的存储设备,通过改变磁性材料的磁化方向来存储数据。
(2)磁盘结构:磁盘存储器主要由以下几个部分组成:- 磁盘:存储数据的载体,由多个同心圆盘片组成;- 磁头:负责读写数据的装置,包括读写磁头和磁臂;- 控制器:负责控制磁盘的转速、读写操作等;- 适配器:连接磁盘与计算机主板的接口。
2. 磁盘分区及格式化(1)分区:将磁盘划分为多个逻辑分区,每个分区可以独立格式化和挂载。
- 使用fdisk命令进行磁盘分区:```sudo fdisk /dev/sdb```根据提示进行分区操作,例如创建主分区、扩展分区和逻辑分区等。
- 使用mkfs.ext4命令对分区进行格式化:```sudo mkfs.ext4 /dev/sdb1```其中,/dev/sdb1为已创建的分区。
3. 磁盘挂载及管理(1)挂载:将已格式化的分区挂载到文件系统,以便于访问。
- 使用mount命令挂载分区:```sudo mount /dev/sdb1 /mnt```其中,/dev/sdb1为已格式化的分区,/mnt为挂载点。
- 使用df命令查看磁盘使用情况:```df -h```- 使用du命令查看文件/文件夹大小:```du -h /mnt```4. 磁盘调度算法(1)磁盘调度算法的作用:为了提高磁盘访问效率,磁盘调度算法对磁盘的读写顺序进行优化。
(2)常用磁盘调度算法:- 先来先服务(FCFS):按照请求的顺序进行访问;- 最短寻道时间优先(SSTF):选择寻道时间最短的请求进行访问;- 电梯调度算法(SCAN):按照磁头移动方向进行访问;- 循环扫描算法(C-SCAN):类似于SCAN算法,但磁头在移动到末尾时会返回起始位置。
存储管理实验报告总结本次实验主要是针对存储管理进行的。
存储管理是操作系统中非常重要的一部分,它负责管理计算机系统的内存空间,为进程提供必要的存储资源。
通过本次实验,我对存储管理的相关概念和技术有了更加深入的了解。
在实验中,我首先学习了存储管理的基本原理。
操作系统将内存分为若干个大小相等的页框,而进程的内存空间则被划分为若干个大小相等的页。
通过页表的映射关系,操作系统可以将进程的页映射到物理内存的页框上。
这样,进程就可以方便地访问内存中的数据。
在实验中,我还学习了虚拟内存的概念和实现方法。
虚拟内存是一种扩展内存的方法,它允许进程访问超出物理内存容量的数据。
虚拟内存通过将进程的页映射到磁盘上的页面文件中,实现了内存的扩展。
当进程需要访问某个页面时,操作系统会将该页面从页面文件中加载到物理内存中,并更新页表的映射关系。
在实验中,我还学习了页面置换算法的原理和实现。
页面置换算法是虚拟内存中非常重要的一部分,它负责决定哪些页面需要被置换出去。
常见的页面置换算法有FIFO算法、LRU算法和Clock算法等。
不同的算法有着不同的性能特点和适用场景,我们需要根据具体的应用场景选择合适的页面置换算法。
在实验中,我还学习了内存分配和回收的方法。
操作系统通过内存分配算法为进程分配内存空间,而通过内存回收算法回收进程不再使用的内存空间。
内存分配算法的选择会影响到系统的性能和资源利用率,我们需要根据具体的应用场景选择合适的内存分配算法。
通过本次实验,我深入了解了存储管理的相关概念和技术。
存储管理是操作系统中非常重要的一部分,它直接影响到系统的性能和资源利用率。
合理地管理存储资源可以提高系统的运行效率和稳定性,从而提升用户的体验。
在今后的学习和工作中,我将进一步深化对存储管理的理解,不断提升自己的技术水平。
一、实训背景随着信息技术的飞速发展,数据存储需求日益增长,磁盘管理作为维护计算机系统稳定运行的重要环节,显得尤为重要。
为了提高我对磁盘管理的实际操作能力,我参加了本次磁盘管理实训,通过实际操作掌握了磁盘的基本管理方法。
二、实训目标1. 熟悉磁盘分区的基本概念和操作方法。
2. 掌握磁盘格式化、挂载、卸载等基本操作。
3. 了解磁盘性能优化方法。
4. 能够解决磁盘故障。
三、实训内容1. 磁盘分区(1)使用fdisk工具进行磁盘分区:首先,通过lsblk命令查看当前磁盘及分区表类型,确定分区管理工具。
然后,使用fdisk命令对系统当前磁盘进行分区。
进入fdisk交互工作模式,依次完成以下操作:查看当前磁盘的分区情况、创建新分区、设置分区大小、设置分区类型、写入分区表、退出fdisk。
(2)使用parted工具进行磁盘分区:通过parted命令查看磁盘分区表类型(MBR 或GPT),根据需要选择相应的分区工具。
进入parted交互工作模式,依次完成以下操作:查看磁盘分区表、创建新分区、设置分区大小、设置分区类型、写入分区表、退出parted。
2. 磁盘格式化使用mkfs命令对磁盘分区进行格式化。
根据需要选择相应的文件系统类型,如ext4、xfs等。
3. 磁盘挂载与卸载使用mount命令将磁盘分区挂载到文件系统中,使用umount命令卸载磁盘分区。
4. 磁盘性能优化(1)使用swap分区:在内存不足的情况下,使用swap分区可以释放内存,提高系统性能。
(2)调整文件系统参数:根据实际情况调整文件系统参数,如inode数量、块大小等。
(3)使用磁盘缓存:通过调整缓存参数,提高磁盘访问速度。
5. 磁盘故障处理(1)使用fsck命令检查文件系统错误:当文件系统出现问题时,使用fsck命令检查并修复错误。
(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.相关知识 (4)1.1空闲盘块的组织 (4)1.2空闲盘块的分配与回收 (5)2.系统设计 (6)2.1算法及说明 (6)2.2算法流程图 (7)2.3数据结构及各子程序 (7)3.成果 (8)3.1磁盘存储空间的分配 (8)3.2磁盘存储空间的回收 (8)3.3结束 (9)4.总结 (10)4.1 个人总结勋 (10)4.2 个人总结史迎丰 (11)4.3 个人总结齐泓洋 (13)4.4 个人总结霖 (15)5.参考文献 (16)《操作系统》课程设计任务书1.相关知识1.1空闲盘块的组织(1)空闲盘块好栈用来存放当前可用的一组空闲的盘块好(最多含100个号),以及栈有的空闲盘块号数N。
顺便指出,N还兼作栈顶指针用。
(2)文件区中的所以空闲盘块被分成若干组,比如,将每100个盘块作为一组。
假定盘上共有1000个盘块,每块大小为1kb,其中201~7999号盘块用于存放文件,即作为文件区,这样,该区的最末一组盘块号应为7901~7999;次末组为7801~7900….;第二组盘块号为301~400;第一组为201~300(3)将每一组含有的盘块总数N和该组所有的盘块记入其前一组的第一个盘块的S.freee(0)~S.free(99)中。
这样,由各组的第一个盘块可链成一条链。
(4)将第一组的盘块总数和所有的盘块号记入空闲盘块号栈中,作为当前可供分配的空闲盘块号。
(5)最末一组只有99个盘块,其盘块号分别记入其前一组的S.freee(1)~S.free(99)中,而在S.freee(0)中则存放“0”,作为空闲盘块链的结束标志。
1.2空闲盘块的分配与回收当系统要为用户分配文件所需的盘块时,须调用盘块分配过程来完成。
该过程首先检查空闲盘块号栈是否上锁,如未上锁,便从栈顶取出一空闲盘块号,将与之对应的盘块分配给用户,然后将栈顶指针下移一格。
若该盘块号已是栈底,即S.freee(0),这是当前栈中最后一格可分配的盘块号。
由于在该盘块号所对应的盘块号记有下一组可用的盘块号,因此,须调用磁盘读过程,将栈底盘块号所对应的盘块的容读入栈中,作为新的盘块号栈的容,并把原栈底对应的盘块分配出去。
然后,再分配一相应的缓冲区。
最后,把栈中的空闲盘块数减1并返回。
在系统回收空闲盘块时,须调用盘块回收过程进行回收。
它是将回收盘块的盘块号记入空闲盘块号栈的顶部,并执行空闲盘块数加1操作。
当栈中空闲盘块号数目已达100时,表示栈已满,便将现有栈中的100盘块号记入新回收的盘块中,再将其盘块号作为新栈底。
、2.系统设计2.1算法及说明首先定义磁盘分配数组并初始化,9个一维数组分别表示9个空闲块,程序运行时,先将专用块A〔0〕复制到存中,然后进行功能选择,分配时,查MA,从中找出空闲块号,当一组的空闲块只剩第一块时,应把该块中指出的下一组的空闲块数和块号复制专用块这,然后把该块分配给申请者,当一组的空闲块分配完后则把专用块容(下一组情况)复制到存,再为申请者分配。
回收时,输入待回收的块号,查找该块是否已被分配,若未分配,退出,否则,当前组不满规定块数时,将归还块登记入该组,若当前组已满,则另建一新组,这时归还块作为新一组的第一块,应把存中登记的一组情况MA复制到归还块中,然后在MA这重新登记一个新组。
显示分组情况。
2.2算法流程图2.3数据结构及各子程序(1) int MA; /*空闲块数组*/(2) int A[9][6]={{5,1,2,3,4,5},{5,6,7,8,9,10},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{5,0,11,12,13,14},{0,0,0,0,0,0},{0,0,0,0,0,0}};/*磁盘空间*/(3) int mark[9]; /*存放已分配的块*/int No=0; /*已分配的块数*/(4) void display() /*显示分组情况*/(5) void assign() /*分配空闲块*/(6) void callback() /*回收空闲块*/(7) void menu() /*功能选择函数*/3.成果3.1磁盘存储空间的分配运行后,显示文件区中的所有空闲盘块号,将其分为三组,每组5个盘块。
则第一组为1~5号盘块,第二组为6~10号盘块,第三组即最末一组为11~14号盘块。
(注:最后一组的盘块数为5是因为这是指可供使用的空闲盘块,在S.free(0)中存放的0为空闲盘块的结尾标志。
)之后键盘输入,输入1分配磁盘存储空间(每次仅分配一个存储空间)。
3.2磁盘存储空间的回收输入y表示继续。
接着继续输入2可以将已分配的磁盘存储空间进行回收。
3.3结束若在选择continue or not?时选择n,则结束程序。
4.总结4.1 个人总结勋在一的课设中,我对操作系统中的磁盘存储空间的管理有了更深的认识,同时对其中的算法“成组法”进行了深入的理解与运用,在VC6.0平台上运用C/C++语言对磁盘存储空间的管理进行了编程实现,在实践过程中也遇到了多的困难,但是在小组共同努力,共同合作的基础上,我们还是圆满的完成了任务。
同时深刻的理解了所学的知识。
对知识的理解程度要看你运用的好不好,实践时检验真理的标准,我也从中学到了很多东西。
在一的过程中,大家都付出了努力和汗水。
一起交流,一起共同进步。
同时我也了解到了团队合作的重要,一家都分工明确,各司其职,最终编写出完整可运行的程序。
磁盘存储空间一般可有空闲表法和空闲链表法来管理,但是空闲表法和空闲链表法都不适用于大型文件系统,因为这会使空闲表和空闲链表太长。
在UNIX 系统中采用的是成组法,这是将上述两种法相结合而形成的一种空闲盘快管理法,他兼备了上述两种法的优点而克服了两种法均有的表太长的缺点。
对成组法进行了编程实现让我更好的了解了该法的各项原理,同时也对我后续的课程乃至毕业后找工作都有很大的帮助。
总之,我很高兴能顺利完成任务并且学到很多东西。
4.2 个人总结史迎丰通过一的课设,我对操作系统有了进一步的了解,尤其是对成组法有了更深的学习和运用。
我更深刻地领会了操作系统工作原理和操作系统实现法,并提高了程序设计能力,虽然实验的过程中遇到一些困难,但及时发现仔细研究解决使我更能深刻的理解所学知识。
一过得很快,但是我们组很好的完成了任务,大家都付出了努力和汗水。
一起交流,一起共同进步。
我学会了团队的合作是多么重要,不管你个人是多么的厉害,如果是只要你一个人去完成这次课程,那都是很有难度的,但如果整个团队齐心协力的去完成它,那么就会达到事半功倍的效果。
我们分工明确,每个人都非常认真的去完成自己的任务。
这次课设,我受益匪浅,不仅学习到了知识,还学会了团队合作。
同时,这次课设由c语言来完成,我发现我的c语言基础不是很扎实,不过通过同学的指导,我的c语言能力有了显著的提升。
认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。
所以这次课设对我们的作用是非常大的,我从中学会了很多平时上课学不到的东西。
这次课设虽然有些辛苦,但是我们能完美的完成任务,我感到很高兴,而且学到了很多。
4.3 个人总结齐泓洋时间如梭,一的操作系统课设即将结束,时间虽短,但对于我来说,却是受益匪浅的,这期间,在老师和组员们的关心支持下,我逐步对成组法有了更深一步的了解。
空闲表法和空闲链表法都不适用于大型文件系统,因为这会使空闲表和空闲链表太长。
在UNIX系统中采用的是成组法,这是将上述两种法相结合而形成的一种空闲盘快管理法,他兼备了上述两种法的优点而克服了两种法均有的表太长的缺点。
在UNIX系统中,将空闲块分成若干组,每100个空闲块为一组,每组的第一空闲块登记了下一组空闲块的物理盘块号和空闲块总数。
如果一个组的第一个空闲块号等于0,则有特殊的含义,意味着该组是最后一组,即无下一个空闲块。
分配空闲块的时候,从前往后分配,先从第一组开始分配,第一组空闲的100块分完了,才进入第二组。
释放空闲块的时候正好相反,从后往前分配,先将释放的空闲块放到第一组,第一组满了,在第一组前再开辟一组,之前的第一组变成第二组。
做课程设计时,指导老师给了我们很大帮助,发现了很多我们没有想到的问题,提了很多改进系统的意见。
课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,这次课程设计虽然很累,但我学到了不少东西,对软件的设计过程和法有了更深入的了解,培养了我们的团队精神,锻炼了我们的沟通和表达能力。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
4.4 个人总结霖通过本学期的操作系统课程进程控制、请求分页存储器管理、设备管理、文件管理、进程调度等实验,模拟操作系统原理的实现,使我能更深刻地领会操作系统工作原理和操作系统实现法,并提高程序设计能力,虽然实验的过程中遇到一些困难,但及时发现仔细研究解决使我更能深刻的理解所学知识。
实验程序仍有诸多不足之处,但实验过程中收获颇多,也为以后的实验积累了经验,这也更能促使我进步。
在UNIX系统中,将空闲块分成若干组,每100个空闲块为一组,每组的第一空闲块登记了下一组空闲块的物理盘块号和空闲块总数。
如果一个组的第一个空闲块号等于0,则有特殊的含义,意味着该组是最后一组,即无下一个空闲块。
分配空闲块的时候,从前往后分配,先从第一组开始分配,第一组空闲的100块分完了,才进入第二组。
释放空闲块的时候正好相反,从后往前分配,先将释放的空闲块放到第一组,第一组满了,在第一组前再开辟一组,之前的第一组变成第二组。
通过本次课程设计,让我对UNIX操作系统有了一定的了解,特别是掌握了一些基本的UNIX操作指令,对核的修改,调用,以及实现文件管理两面功能也加深了索引部分的认识,以前只是知道个原理性的东西,为接下来的UNIX学习打下了基础。
同时,也加深了对计算机操作系统这门课的部分知识点的理解。
也加强了我的调试能里,以及遇到问题能基本靠自己或上网检索的能力。
这个课设让我做使不那么死板,后来遇到问题我不会非得按照那个貌似正确的步骤一步一步来做,而是会去想它的原理,用自己的法从本质上把问题解决。
这个课设既有趣又让我学到了不少东西,感老师的指导!5.参考文献《计算机操作系统》汤小丹电子科技大学出版社《操作系统课程设计》善平季江民大学出版社C/C++源代码:#include<stdio.h>int MA[6]={5,1,2,3,4,5};/*空闲块数组*/int A[9][6]={{5,1,2,3,4,5},{5,6,7,8,9,10},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{5,0,11,12,13,14},{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<=5;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); }elseif(MA[0]==1)/*只剩一个空闲块*/{if(MA[1]!=0)/*还有其它空闲块组*/{s=MA[1];for(i=0;i<=5;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<=5;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]<5)/*当前组不满5块*/{i=MA[0];MA[i+1]=j;MA[0]++;}else/*已有5块*/{for(i=0;i<=5;i++)A[j][i]=MA[i];MA[0]=1;MA[1]=j;}display();/*显示*/}void menu()/*功能选择函数*/{int choice;char judge;printf("\ninput your choice:(1--assign,2--callback):"); scanf("%d",&choice);getchar();if(choice==1)assign();elseif(choice==2)callback();elseprintf("\ninvalid command!");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");getchar();}}void main(){..w int i;for(i=0;i<=5;i++) MA[i]=A[0][i]; display();menu();}。