磁盘存储空间地分配和回收
计算机操作系统简答题答案版
计算机操作系统简答题答案版一、什么是操作系统?它的主要功能有哪些?操作系统是管理计算机硬件与软件资源的程序,是计算机系统的内核与基石。
它负责控制和协调计算机系统的各种活动,为用户和应用程序提供一个方便、高效、安全的工作环境。
操作系统的主要功能包括:1、进程管理:负责创建、调度和终止进程,确保多个进程能够合理地共享系统资源,并按照一定的规则有序执行。
2、内存管理:管理计算机的内存资源,包括分配和回收内存空间,实现虚拟内存以扩展物理内存的容量。
3、文件管理:对计算机中的文件和目录进行组织、存储、检索和访问控制,确保文件的安全性和完整性。
4、设备管理:管理各类输入输出设备,如键盘、鼠标、显示器、打印机等,为设备提供驱动程序和接口,实现设备的共享和高效使用。
5、提供用户接口:操作系统为用户提供了命令行接口和图形用户接口,使用户能够方便地与计算机进行交互。
二、进程和线程的区别是什么?进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
线程是进程中的一个执行单元,是进程内的一个可调度实体。
它们的主要区别在于:1、资源拥有:进程拥有独立的地址空间和资源,如内存、文件等;而线程共享所属进程的资源,只拥有少量的运行时必需的资源,如程序计数器、寄存器和栈。
2、调度:进程的调度开销较大,因为涉及到资源的切换;线程的调度开销小,切换速度快。
3、并发性:多个进程可以并发执行,但进程之间的通信相对复杂;同一进程内的多个线程可以更方便地共享数据和进行通信,实现更高的并发性。
4、健壮性:一个进程的崩溃通常不会影响其他进程;而一个线程的错误可能导致整个进程崩溃。
三、操作系统中的死锁是什么?产生死锁的必要条件有哪些?死锁是指在多进程或多线程环境下,两个或多个进程(线程)因互相等待对方持有的资源而导致的一种僵持状态,在这种状态下,所有涉及的进程(线程)都无法继续执行。
产生死锁的必要条件有以下四个:1、互斥条件:资源在某一时刻只能被一个进程(线程)占用。
电脑存储空间管理指南清理磁盘释放空间
电脑存储空间管理指南清理磁盘释放空间电脑存储空间管理指南:清理磁盘释放空间在当今数字化的时代,电脑成为人们生活中的必需品。
然而,随着时间的推移,电脑内存中的数据越来越多,存储空间的不足成为了一个普遍问题。
本文旨在为大家提供一份电脑存储空间管理指南,教你如何清理磁盘并释放空间。
一、删除临时文件电脑在运行过程中会生成大量的临时文件,这些文件占据了宝贵的存储空间。
要清理这些临时文件,可以按下"Win + R"组合键,输入“%temp%”并按下回车键,进入临时文件夹,然后将其中的文件逐一删除。
二、清理回收站回收站是电脑中被删除文件的暂存地,清空回收站能够释放大量的存储空间。
点击桌面上的回收站图标,然后点击“清空回收站”按钮即可完成清理。
三、卸载不需要的程序电脑上可能安装了很多我们不再使用的程序,这些程序占据了大量的存储空间。
我们可以通过以下步骤进行卸载:1.打开控制面板,点击“程序”或“程序和功能”选项;2.在列表中选择要卸载的程序,右键点击并选择“卸载”选项;3.按照提示完成卸载过程。
四、清理系统文件除了清理临时文件和卸载不需要的程序外,还可以清理一些系统文件来释放存储空间。
Windows操作系统具有一个内置的“磁盘清理”工具,通过以下步骤可以进行清理:1.在“开始”菜单中搜索“磁盘清理”并打开该程序;2.选择要清理的磁盘驱动器,然后点击“确定”按钮;3.在弹出的窗口中,选择要清理的文件类型,例如“临时文件”、“下载文件”等;4.点击“确定”按钮,然后再次确认清理操作。
五、使用优化软件除了Windows自带的磁盘清理工具,还有很多第三方的优化软件可供选择。
这些软件通常具有更加全面和高效的清理功能,能够帮助你轻松管理存储空间。
值得一提的是,在使用这些软件前,一定要选择可信赖的软件,并注意备份重要数据,以免造成意外损失。
六、定期整理文件为了避免存储空间不足的问题,我们需要定期整理电脑中的文件。
文件系统及其组成要素
文件系统及其组成要素文件系统是操作系统中的一个重要组成部分,负责管理计算机中的文件和目录。
它通过一定的组织结构和算法来管理存储设备上的数据,并提供对文件的读写、修改、删除等操作。
文件系统的组成要素包括文件、目录、磁盘空间管理、文件命名规则、文件系统接口等。
首先,文件是文件系统的基本组成单位,是用户存储信息的载体。
文件系统通过文件来组织和管理数据,为用户提供对数据的访问和操作。
文件可以是文本文件、图像文件、视频文件等不同类型的数据文件,每个文件都有唯一的标识符来区分其他文件。
其次,目录是文件系统中用来组织和管理文件的一种结构。
目录可以包含文件和其他目录,通过目录可以方便地查找和访问文件。
目录的功能包括创建、删除、重命名、复制等操作,用户可以通过目录来组织自己的文件,并进行文件的管理。
磁盘空间管理是文件系统的重要组成部分,它负责管理存储设备上的物理空间。
文件系统通过磁盘空间管理来分配存储空间给文件,保证文件的存储安全和高效管理。
磁盘空间管理包括分配、释放、回收等操作,它确保文件系统能够充分利用存储设备的空间。
文件命名规则是文件系统中的重要组成要素,通过文件命名规则来唯一标识每个文件。
文件系统通常有一定的文件命名规则,比如文件名的长度、允许使用的字符、大小写敏感等规定。
良好的文件命名规则能够方便用户识别和管理文件。
文件系统接口是用户与文件系统之间的接口,用户通过文件系统接口来进行文件的读写、修改等操作。
文件系统接口包括命令行接口和图形界面接口,用户可以通过不同的方式来操作文件系统,实现对文件的管理。
文件系统接口也提供了一些高级功能,比如文件夹打开、文件搜索等操作,提升了用户对文件系统的使用体验。
总的来说,文件系统及其组成要素是操作系统中的重要组成部分,它通过文件、目录、磁盘空间管理、文件命名规则、文件系统接口等组成要素来管理和组织数据。
合理使用文件系统及其组成要素,能够提高文件的管理效率,保证数据的安全性和可靠性。
(完整)文件管理习题及答案
第七章一.选择题1.FAT能描述文件的_B__特征.A。
文件逻辑 B。
文件物理结构 C.文件共享 D.文件保护2。
文件的符号名与物理地址的转换是通过_C__来实现的。
A。
索引 B.索引节点 C。
文件目录 D。
二级索引3。
在UNIX文件系统中,为了对磁盘空间的空闲块进行有效的管理,采用的方法是_B__。
A。
空闲表 B。
成组链接法 C.FAT D.位示图法4.为了实现对文件的共享访问,在读写文件时需对文件加锁。
现在已有一个用户对某文件进行了读加锁,则另一个用户对该文件的_B__加锁操作可以成功。
A。
加读锁和写锁均不能成功 B.加读锁能成功C。
加读锁和写锁均能成功 D. 加写锁能成功5.操作系统实现文件管理后,允许用户对流式文件进行存取的最小单位是___D__。
A。
数据项 B。
记录 C。
文件 D。
字符6。
操作系统采用多级目录结构可以__A__。
A.解决命令冲突B.节省存储空间C.缩短文件传送时间 D。
减少系统开销7。
下述有关文件管理的叙述中,_C__是正确的。
A.一个文件不能同时多次建立B.在一级目录结构中,不同用户可以用相同的文件名C.文件系统主要是实现按名存取D。
逻辑记录的大小与存储介质块的大小必须一一对应8.文件系统是指___D__。
A。
文件的集合 B。
实现文件管理的一组软件C。
文件的目录 D.文件及其属性、管理文件的软件和文件系统接口9.文件系统的主要目的是__A__。
A.实现对文件的按名存取 B。
实现虚拟存储C。
提高外存的读写速度 D。
用于存储系统文件10.操作系统实现文件管理后,用户对记录式文件进行存取的最小单位是_C__.A.扇区 B。
字节 C。
目录 D.记录11。
为了解决不同用户文件的“命名冲突”问题,通常在文件系统中采用以下_B__方法。
A.约定的方法 B。
多级目录 C。
路径 D.索引12。
文件的绝对路径是指_C__。
A。
文件名和文件扩展名B。
一系列的目录文件名和该文件的文件名C.从根上到该文件所经历的路径中各符号名的集合D。
利用二进制位来表示磁盘中盘块空闲情况的方法(一)
利用二进制位来表示磁盘中盘块空闲情况的方法(一)利用二进制位表示磁盘中盘块空闲情况引言在计算机系统中,磁盘是一种重要的存储介质。
为了管理磁盘上不同的盘块,我们需要记录盘块的空闲情况。
一种常见的方法是利用二进制位来表示盘块的空闲情况。
本文将详细介绍几种常见的方法。
方法一:位图法位图法是一种使用位图来记录盘块的空闲情况的方法。
位图由多个字节组成,每个字节表示一个盘块的状态,其中每个比特位表示该盘块是否空闲。
比如,0表示空闲,1表示已被占用。
利用位图法来表示磁盘中盘块的空闲情况,可以使用以下步骤:1. 初始化位图,将所有的比特位置为0,表示所有盘块均为空闲。
2. 当一个盘块被占用时,将对应的比特位置为1。
3. 当需要查找空闲盘块时,遍历位图找到第一个为0的比特位所对应的盘块。
优点: - 简单、直观,易于实现和理解。
- 占用的存储空间相对较小。
缺点: - 当磁盘较大时,位图占用的存储空间会较大。
- 查找空闲盘块的效率较低,需要逐一遍历位图。
方法二:位示图法位示图法是位图法的改进版,通过使用更小的单位来记录盘块的空闲情况。
比如,一个字节可以表示8个盘块的状态,一个位可以表示一个盘块的状态。
利用位示图法来表示磁盘中盘块的空闲情况,可以使用以下步骤:1. 初始化位示图,将所有的位置为0,表示所有盘块均为空闲。
2.当一个盘块被占用时,将对应的位置为1。
3. 当需要查找空闲盘块时,首先找到一个字节中值为0的位,然后根据位的位置计算出对应的盘块。
优点: - 存储空间占用更小,比位图法更节约空间。
- 查找空闲盘块的效率较高,因为一次可以处理多个盘块。
缺点: - 实现相对复杂,需要进行位操作。
- 当磁盘较大时,位示图占用的存储空间仍然会较大。
方法三:链表法链表法是一种使用链表来记录盘块的空闲情况的方法。
每个链表节点表示一个盘块,将空闲的盘块通过链表链接起来,已被占用的盘块不在链表中。
利用链表法来表示磁盘中盘块的空闲情况,可以使用以下步骤:1. 初始化链表,将所有盘块都加入链表中。
vmfs5空间回收操作_解释说明
vmfs5空间回收操作解释说明1. 引言1.1 概述本文旨在介绍和解释vmfs5空间回收操作的概念、重要性以及实施方法。
随着虚拟化技术的快速发展,虚拟机文件系统(VMFS)作为一种常用的存储格式,在虚拟化环境中扮演着至关重要的角色。
而VMFS5空间回收操作作为一种优化存储资源利用的手段,对于提升存储性能和节省存储容量具有重要意义。
1.2 文章结构本文将从引言开始,详细介绍和解释vmfs5空间回收操作。
首先,将阐述什么是vmfs5空间回收操作,并强调其重要性。
然后,将深入探讨vmfs5空间回收操作的实施方法,包括具体步骤和注意事项。
接下来,将进一步解释回收操作对存储性能和容量的影响,并提供建议和注意事项供读者参考。
最后,我们将总结回收操作的重要性和优势,并提出未来研究方向建议。
1.3 目的本文旨在帮助读者全面了解vmfs5空间回收操作以及其对存储系统的影响。
通过深入解释回收操作的实施方法和优势,读者将能够更好地利用存储资源,提升虚拟化环境的性能,并减少存储容量成本。
此外,本文还将提供建议和注意事项,以帮助读者在实施回收操作时避免可能出现的问题。
通过阅读本文,读者将具备在实际应用中正确使用vmfs5空间回收操作的能力。
2. vmfs5空间回收操作2.1 什么是vmfs5空间回收操作vmfs5空间回收操作是一种在VMware虚拟化环境中用于回收未使用的存储空间的技术。
在虚拟机使用过程中,由于文件删除、移动或缩减等操作,会产生大量的废弃块和碎片化的存储空间。
通过进行空间回收操作,可以有效地清理这些废弃块和碎片化空间,从而提高存储资源利用率。
2.2 vmfs5空间回收操作的重要性vmfs5空间回收操作对于维护存储系统的性能和容量效率至关重要。
未经回收的废弃块和碎片化空间会导致存储资源浪费,并且对存储性能造成负面影响。
通过进行定期的空间回收操作,可以及时释放未使用的存储空间,优化文件分配方式,提高数据访问速度和整体性能。
内存地址分配的详细过程是什么
内存地址分配的详细过程是什么?内存地址分配是计算机内存管理中的一个核心过程,涉及操作系统、硬件和应用程序之间的紧密协作。
以下是内存地址分配的一个详细过程:初始化:当计算机启动或重启时,内存会进行初始化。
操作系统会接管内存管理,并确定哪些内存区域用于存储操作系统本身(内核空间),哪些区域用于存储用户应用程序(用户空间)。
进程创建:当一个进程(例如,用户启动的一个应用程序)被创建时,操作系统需要为它分配内存。
这通常涉及以下几个步骤:地址空间分配:操作系统为每个进程分配一个独立的地址空间。
这个地址空间是虚拟的,意味着它并不直接对应于物理内存。
虚拟地址空间允许每个进程有自己的内存布局,而无需担心与其他进程的地址冲突。
内存页分配:操作系统使用页表(Page Table)将虚拟地址空间映射到物理内存。
页表是一个数据结构,它记录了每个虚拟地址页对应的物理内存页。
当进程首次访问某个虚拟地址时,如果相应的物理内存页尚未分配(即,它还没有被加载到内存中),则会触发一个页面错误(Page Fault)。
页面错误处理:当发生页面错误时,操作系统会选择一个物理内存页(可能是通过页面替换算法,如LRU或FIFO),并将其加载到内存中,同时更新页表以反映新的映射关系。
如果所需的页面在磁盘上的文件系统中,那么还需要执行磁盘I/O操作来读取数据。
内存访问:一旦内存页被分配并映射到虚拟地址空间,进程就可以通过虚拟地址访问内存。
当CPU接收到内存访问请求时,它会查找页表以获取相应的物理地址,然后执行内存读写操作。
内存释放:当进程结束时,操作系统会回收其占用的内存。
这包括释放已分配的内存页和清理相关的数据结构(如页表)。
内存碎片管理:随着时间的推移,内存中的空闲区域可能会变得碎片化,即存在许多小的、不连续的空闲块。
操作系统使用各种算法(如伙伴系统、空闲列表等)来管理这些碎片,以便在需要时能够高效地分配内存。
交换空间(Swap Space):如果物理内存不足,操作系统还可以使用交换空间(通常是磁盘上的一个区域)来暂时存储不活跃的内存页,从而释放出物理内存供其他进程使用。
位示图管理磁盘存储空间用位示图管理磁盘存储空间用位示图管理磁盘存储空间用位示图管理磁盘存储空间
用位示图管理磁盘存储空间一、实习内容模拟磁盘空闲空间的表示方法,以及模拟实现磁盘空间的分配和回收。
二、实习目的磁盘初始化时把磁盘存储空间分成许多块(扇区),这些空间可以被多个用户共享。
用户作业在执行期间常常要在磁盘上建立文件或把已经建立在磁盘上的文件删去,这就涉及到磁盘存储空间的分配和回收。
一个文件存放到磁盘上,可以组织成顺序文件(连续文件)、链接文件(串联文件)、索引文件等,因此,磁盘存储空间的分配有两种方式,一种是分配连续的存储空间,另一种是可以分配不连续的存储空间。
怎样有效地管理磁盘存储空间是操作系统应解决的一个重要问题,通过本实习使学生掌握磁盘存储空间的分配和回收算法。
三、实验分析连续的磁盘存储空间的分配和回收。
四、算法及说明(1) 为了提高磁盘存储空间的利用率,可在磁盘上组织成链接文件、索引文件,这类文件可以把逻辑记录存放在不连续的存储空间。
为了表示哪些磁盘空间已被占用,哪些磁盘空间是空闲的,可用位示图来指出。
位示图由若干字节构成,每一位与磁盘上的一块对应,“1”状态表示相应块已占用,“0”状态表示该块为空闲。
(2) 申请一块磁盘空间时,由分配程序查位示图,找出一个为“0”的位,计算出这一位对应块的磁盘物理地址,且把该位置成占用状态“1”。
假设现在有一个盘组共8个柱面,每个柱面有2个磁道(盘面),每个磁道分成4个物理记录。
那么,当在位示图中找到某一字节的某一位为“0”时,这个空闲块对应的磁盘物理地址为:柱面号=字节号磁道号= 位数/ 4物理记录号= 位数% 4(3) 归还一块磁盘空间时,由回收程序根据归还的磁盘物理地址计算出归还块在位示图中的对应位,把该位置成“0”。
按照(2)中假设的盘组,归还块在位示图中的位置计算如下:字节号=柱面号位数=磁道号 4+物理记录号五、用到的数据结构及模块说明int area[8][8]; 表示位示图,每一位与磁盘上的一块对应,“1”状态表示相应块已占用,“0”状态表示该块为空闲。
操作系统原理
操作系统原理操作系统是计算机系统中的核心软件,它负责管理计算机硬件资源和提供用户与计算机之间的接口。
操作系统原理是指操作系统设计与实现的基本原理和机制,包括进程管理、内存管理、文件系统、设备管理等方面。
一、进程管理进程是计算机中正在运行的程序的实例,是操作系统中最核心的概念之一。
进程管理的主要任务包括进程的创建、调度、同步与通信等。
进程的创建是指操作系统根据用户的请求或系统的需要,创建新的进程。
进程的调度是指操作系统根据调度算法,按照一定的优先级将CPU时间分配给不同的进程。
进程的同步与通信是指多个进程之间的数据共享和互斥操作,确保进程之间能够有效地进行合作和协调。
二、内存管理内存管理是指操作系统对计算机内存资源的分配与管理。
在多道程序环境下,操作系统需要合理地管理内存空间,提供给正在运行的进程使用。
内存管理的主要任务包括地址映射、地址转换、内存分配与回收等。
地址映射是指将逻辑地址转换为物理地址,以实现程序对实际内存的访问。
地址转换是指操作系统通过分页或分段机制,将逻辑地址转换为物理地址的过程。
内存分配与回收是指操作系统根据进程的需要,动态地分配和回收内存空间,以满足不同进程的需求。
三、文件系统文件系统是指操作系统对存储设备中数据进行组织和管理的机制。
操作系统使用文件系统来管理硬盘、磁盘和其他存储设备上的文件。
文件系统将文件组织成目录结构,并提供对文件的读取、写入、删除等操作。
文件系统的设计要考虑文件的命名、存储、保护等方面,以提高文件的访问效率和数据的安全性。
四、设备管理设备管理是指操作系统对计算机硬件设备进行管理和控制。
在多道程序环境下,计算机系统中会有多个设备与操作系统交互,如磁盘、打印机、键盘等。
设备管理的主要任务包括设备的分配与释放、设备的请求与响应、设备的故障处理等。
设备的分配与释放是指操作系统根据进程的需求,动态地分配和释放设备资源。
设备的请求与响应是指操作系统接收到设备请求后,将请求分配给相应的设备,并在设备完成操作后将结果返回给进程。
操作系统复习题(附答案与解析)
一、选择题1. 计算机启动是执行的一个程序是()。
A.引导扇区B.bootC.BIOS D.Load解析:CPU加电后会首先执行BIOS程序,其中POST加电自检程序是执行的第一个例行程序。
2. 执行进程调度就是()。
A.一号变迁B.二号变迁C.三号变迁D.四号变迁解析:进程调度就是就绪态到执行态,也就是一号变迁3. 操作系统的主要功能是管理计算机的()A.进程B.作业C.进程和数据D.资源解析:操作系统是为了合理组织计算机工作流程,管理分配计算机系统的硬件和软件资源最大限度地提高计算机系统的利用率。
4. 属于内中断的是()A.内存校验错B.进程缺页C.设备完成了任务D.键盘输入一个字符解析:处理机外部发生的中断叫外中断,当前进程发生的中断叫内中断。
5. 进程运行的三种基本状态是指()A.就绪、执行、阻塞B.就绪、执行、挂起C.就绪、执行、死锁D.就绪、执行、停止6. 产生死锁的4个必要条件是互斥、()、请求与保持、环路等待。
A.请求与阻塞B.不剥夺C.请求与释放D.阻塞与释放7.()是指程序员发出命令到系统给出结果的时间间隔A.响应时间B.周转时间C.等待时间D.运行时间8.()淘汰算法的淘汰次数最少。
A.最不经常使用B.先进先出C.最佳D.最近最少用解析:最佳页面置换算法具有最低缺页率,算法无法实现,但是可以去评价其他算法。
最佳页面置换算法、先进先出页面置换算法、最近最少使用页面置换算法、最近未使用置换算法NRU 、时钟页面置换算法、二次机会页面置换法9. 不需要用缓冲技术的是()A.输入速率> 输出速率B.输入速率< 输出速率C.输入速率!= 输出速率D.输入速率== 输出速率解析:缓冲是为了缓和CPU与I/O设备速度不匹配的矛盾,提高CPU和I/O 设备的并行性。
10. 用硬盘模拟打印机属于()设备。
A.共享B.虚拟C.独占D.块解析;模拟体现了虚拟性。
11. 与计算机硬件直接打交道的是()A.操作系统B.编译系统C.系统应用程序D.命令处理程序解析:操作系统是用户与计算机硬件系统之间的接口12. 嫦娥三号的操作系统spaceOS2是()A.批处理操作系统B.实时操作系统C.分时操作系统D.网络操作系统解析:实时操作系统比分时操作系统可靠,专门用于特定的处理,如航天。
简述存储管理的五大功能
简述存储管理的五大功能存储管理是计算机系统中的重要组成部分,它负责对计算机的存储器进行有效的管理和优化。
存储管理的五大功能包括内存分配与回收、内存保护、内存扩充、虚拟内存和文件管理。
一、内存分配与回收内存分配与回收是存储管理的基本功能之一。
计算机系统中的内存是有限的资源,需要根据应用程序的需求动态分配内存空间。
当一个进程结束或者释放了内存空间,系统需要将这部分空间回收,以便其他进程使用。
内存分配与回收的目标是高效利用内存资源,避免内存碎片化,提高系统的性能。
二、内存保护内存保护是指通过硬件和软件手段保护系统的内存不被非法访问和破坏。
计算机系统中的内存被划分为多个区域,不同的进程或用户只能访问自己被分配的内存空间,不能越界访问其他区域。
内存保护的目标是保障系统的安全性和稳定性,防止恶意程序对内存进行破坏。
三、内存扩充内存扩充是指通过一定的技术手段扩大计算机系统的内存容量。
在传统的计算机系统中,内存的容量是有限的,无法满足大规模应用程序的需求。
为了解决这个问题,可以通过多道程序设计、虚拟内存等技术手段来扩大内存的容量,提高系统的并发处理能力和运行效率。
四、虚拟内存虚拟内存是一种将物理内存和磁盘空间结合起来使用的技术。
它可以将暂时不被使用的部分数据或程序从内存中转移到磁盘上,以释放内存空间,让更多的程序能够运行。
虚拟内存的优点是可以大大提高系统的可用内存空间,并且可以提高程序的运行效率。
五、文件管理文件管理是指对计算机系统中的文件进行管理和组织。
文件是计算机系统中存储数据的重要方式,它们被组织成一种层次结构,并按照一定的规则进行存储、访问和管理。
文件管理的功能包括文件的创建、读取、写入、删除等操作,以及文件的共享、保护和安全等方面的管理。
存储管理的五大功能包括内存分配与回收、内存保护、内存扩充、虚拟内存和文件管理。
这些功能的合理实现可以提高计算机系统的性能和稳定性,使其能够更好地满足用户的需求。
在今后的计算机系统设计中,存储管理的优化将继续是一个重要的研究方向,以进一步提高系统的性能和可用性。
简述内存空间的分配和回收的含义与处理方法。
内存空间的分配和回收是操作系统存储管理的重要功能。
内存空间的分配是指将内存空间分配给进程或程序的过程。
在分配内存空间时,操作系统需要确定申请者的需求,并根据一定的策略和规则找出足够的空间进行分配。
这些策略和规则可以包括按需分配、最先适应、最佳适应和最坏适应等。
内存空间的回收则是指当进程或程序结束运行时,操作系统需要将其所占用的内存空间收回,以便重新分配给其他进程或程序使用。
回收内存空间时,操作系统需要进行一系列操作,例如将回收的内存空间标记为空闲区域,以便后续的分配使用。
对于内存空间的分配和回收,操作系统通常会设置一张表格来记录内存的使用情况,包括哪些区域尚未分配,哪些区域已经分配以及分配给哪些进程等。
这样,系统可以根据申请者的要求和表格记录的信息,快速有效地进行内存空间的分配和回收。
以上信息仅供参考,如有需要,建议查阅相关书籍或咨询专业人士。
全国自考操作系统(文件系统)模拟试卷2(题后含答案及解析)
全国自考操作系统(文件系统)模拟试卷2(题后含答案及解析) 题型有:1. 单项选择题 3. 填空题 4. 简答题 5. 综合题 6. 判断题单项选择题1.属于逻辑结构概念的文件是_______。
A.连续文件B.系统文件C.目录文件D.流式文件正确答案:D解析:连续文件属于物理结构的概念,系统文件和目录文件属于文件类型的概念。
知识模块:文件系统2.一个采用单纯二级索引的文件系统,文件块大小为4KB,文件块地址用4字节表示,则能管理的最大文件是_______GB。
A.8B.4C.2D.1正确答案:B解析:一级索引能记录1k个二级索引块地址项,每一个二级索引能记录1k 个文件块地址项,每个文件块大小为4KB,则能管理的最大文件是1k×1k×4KB=4GB。
知识模块:文件系统3.操作系统为了管理文件,设置了专门的数据结构——文件控制块(FCB),FCB是在执行_______时建立的。
A.打开B.读/写C.链接D.创建正确答案:D 涉及知识点:文件系统4.在Linux中,_______在文件系统中没有相应的inode节点。
A.网络设备B.打印机C.终端D.磁盘正确答案:A 涉及知识点:文件系统5.UNIX系统的磁盘存储空间的空闲块成组链接管理方式可用于_______的分配与回收。
A.外存inodeB.文件目录块C.文件超级块D.磁盘自举块正确答案:B解析:申请空闲文件目录块、文件索引块和文件数据块时,都是通过磁盘存储空间的空闲块成组链接管理结构获得。
知识模块:文件系统6.文件保密的目的是防止文件被_______。
A.篡改B.破坏C.窃取D.删除正确答案:C 涉及知识点:文件系统填空题7.按文件的逻辑结构可将文件分为_______文件和_______文件。
正确答案:记录式、流式涉及知识点:文件系统8.在UNIX系统中,以文件类型分,主要可分为_______文件、_______文件和_______文件三种类型。
计算机操作系统第四版-汤小丹-教案第八章
第八章
磁盘存储器的管理
连续组织方式的主要缺点如下:
(1) 要求为一个文件分配连续的存储空间。 (2) 必须事先知道文件的长度。 (3) 不能灵活地删除和插入记录。 (4) 对于那些动态增长的文件。
7
第八章
磁盘存储器的管理
8.1.2 链接组织方式
如果可以将文件装到多个离散的盘块中,就可消除连续 组织方式的上述缺点。在采用链接组织方式时,可为文件分
35
第八章
磁盘存储器的管理
3. 盘块的回收
盘块的回收分两步: (1) 将回收盘块的盘块号转换成位示图中的行号和列号。 转换公式为: i = (b - 1)DIV n + 1
j = (b - 1)MOD n + 1
(2) 修改位示图。令map[i, j] = 0。
36
第八章
磁盘存储器的管理
8.2.3 成组链接法
8
第八章
磁盘存储器的管理
1. 隐式链接
在采用隐式链接组织方式时,在文件目录的每个目录项 中,都须含有指向链接文件第一个盘块和最后一个盘块的指 针。
9
第八章
磁盘存储器的管理
图8-2 磁盘空间的链接式分配
10
第八章
磁盘存储器的管理
2. 显式链接
这是指把用于链接文件各物理块的指针显式地存放在内 存的一张链接表中。该表在整个磁盘中仅设置一张,如图83所示。
存放下一个盘块号,它实际上是用于盘块之间的链接的指针, 通过它可以将一个文件的所有的盘块链接起来,而将文件的
第一个盘块号放在自己的FCB中。
13
第八章
磁盘存储器的管理
图8-4 MS-DOS的文件物理结构
14
第八章
磁盘存储空间的分配和回收
真习六磁盘保存空间的调配战回支之阳早格格创做一、真习真质模拟磁盘空忙空间的表示要领,以及模拟真止磁盘空间的调配战回支.二、真习手段磁盘初初化时把磁盘保存空间分成许多块(扇区),那些空间不妨被多个用户共享.用户做业正在真止功夫时常要正在磁盘上建坐文献或者把已经建坐正在磁盘上的文献删去,那便波及到磁盘保存空间的调配战回支.一个文献存搁到磁盘上,不妨构造成程序文献(连绝文献)、链交文献(串联文献)、索引文献等,果此,磁盘保存空间的调配有二种办法,一种是调配连绝的保存空间,另一种是不妨调配不连绝的保存空间.何如灵验天管造磁盘保存空间是支配系统应办理的一个要害问题,通过原真习使教死掌握磁盘保存空间的调配战回支算法.三、真习题目原真习模拟三种磁盘保存空间的管造要领.第一题:连绝的磁盘保存空间的调配战回支.[提示]:(1) 要正在磁盘上建坐程序文献时,必须把逆次排列的逻辑记录依次存搁正在磁盘的连绝保存空间中.可假定磁盘初初化时,已把磁盘保存空间区分成若搞等少的块(扇区),按柱里号战盘里号的程序给每一齐决定一个编号.随着文献的建坐、简略、磁盘保存空间被分成许多区(每一区包罗若搞块),有的区存搁着文献,而有的区是空忙的.当要建坐程序文献时必须找到一个符合的空忙区去存搁文献记录,当一个文献被简略时,则该文献占用的区应成为空忙区.为此可用一弛空忙区表去记录磁盘保存空间中尚已占用的部分,要领如下:(2) 要建坐文献时,先查找空忙区表,从状态为“已调配”的备案栏目中找出一个块数能谦脚央供的区,由起初空忙块号能依次推得可使用的其余块号.若不需要占用该区的所有块时,则结余的块仍应为已调配的空忙块,那时要建改起初空忙块号战空忙块数.若占用了该区的所有块,则相映备案栏中的状态建改成“空表目”.简略一个文献时,从空忙区表中找一个状态为“空表目”的备案栏目,把送还的起初块号战块数挖进对付应的位子.磁盘保存空间的调配战回支算法类似于主保存器的可变分区办法的调配战回支.共教们可参照真习四的第一题.(3) 当找到空忙块后,必须开用磁盘把疑息存搁到指定的块中,开用磁盘必须给出由三个参数组成的物理天点:柱里号、磁讲号战物理记录号.故必须把找到的空忙块号换算成磁盘的物理天点.为了缩小移臂次数,磁盘上的疑息按柱里上各磁讲程序存搁.现假定一个盘组公有200个柱里,(编号0-199)每个柱里有20个磁讲(编号0-19,共一柱里上的各磁讲分散正在各盘里上,故磁讲号即盘里号.),每个磁讲被分成等少的6个物理记录(编号0-5,每个盘里被分成若搞个扇区,故每个磁讲上的物理记录号即为对付应的扇区号.).那么,空忙块号与磁盘物理天点的对付应闭系如下:假设 , }则 = m }] (4) 磁盘上的起初天点战逻辑记录个数,假定每个逻辑记录占磁盘上的一齐,则可推算出送还后的起初空忙块号战块数,备案到空忙区表中.换算闭系如下:起初空忙块号=(柱里号´20+磁讲号)´6+物理记录号 空忙块数=逻辑记录数(5) 请安排磁盘保存空间的调配战回支步调,央供把调配到的空忙块变换成磁盘物理天点,把送还的磁盘空间变换成空忙块号.假定空忙区表的初值如提示(1)中指出,现有一文献要占用10块,运止您所安排的调配步调,隐现或者挨印调配后的空忙区表以及调配到的磁盘空间的起初物理天点.而后,有一文献被简略,它占用的磁盘空间为:1号柱里2号磁讲,0号物理记录开初的4块,运止您所安排的回支步调,隐现或者挨印回支后的空忙区表.第二题:用位示图管造磁盘保存空间 [提示]:(1) 为了普及磁盘保存空间的利用率,可正在磁盘上构造成链交文献、索引文献,那类文献不妨把逻辑记录存搁正在不连绝的保存空间.为了表示哪些磁盘空间已被占用,哪些磁盘空间是空忙的,可用位示图去指出.位示图由若搞字节形成,每一位与磁盘上的一齐对付应,“1”状态表示相映块已占用,“0”状态表示该块为空忙.位示图的形式与真习四中的位示图一般,但是要注意,对付于主保存空间战磁盘保存空间该当用分歧的位示图去管造,绝不可混用.(2) 申请一齐磁盘空间时,由调配步调查位示图,找出一个为“0”的位,估计出那一位对付应块的磁盘物理天点,且把该位子成占用状态“1”.假设目前有一个盘组共80个柱里,每个柱里有二个磁讲,每个磁讲分成4个物理记录.那么,当正在位示图中找到某一字节的某一位为“0”时,那个空忙块对付应的磁盘物理天点为:柱里号=字节号] }(3) 理天点估计出送还块正在位示图中的对付应位,把该位子成“0”.依照(2)中假设的盘组,送还块正在位示图中的位子估计如下:字节号=柱里号 位数=磁讲号´4+物理记录号(4) 安排申请一齐磁盘空间战送还一齐磁盘空间的步调.央供能隐现或者挨印步调运止前战运止后的位示图;调配时把调配到的磁盘空间的物理天点隐现或者挨印出去,送还时把送还块对付应于位示图的字节号战位数隐现或者挨印出去.(5) 假定已犹如表6-1的磁盘空间被占用了,目前要申请五块磁盘空间,运止调配步调,按(4)中央供隐现或者挨印运止的截止.而后再送还如表6-2的空间,运止回支步调,按(4)中的央供隐现或者挨印运止截止.表6-1表6-2第三题:模拟UNIX系统的空忙块成组链交法,真止磁盘保存空间的管造.[提示]:(1) 假定磁盘保存空间已被区分发展度为n的等少块,公有M块可供使用.UNIX系统中采与空忙块成组链交的要领去管造磁盘保存空间,将磁盘中的每N个空忙块(N<M)分成一组,末尾一组不妨缺累N块,每组的第一齐中备案了下一组空忙块的块数战块号,第一组的块数战块号备案正在博用块中,备案的要领如下:当第一项真质为“0”时,则第二项起指出的空忙块是末尾一组.(2) 现模拟UNIX系统的空忙块成组链交,假定公有8块可供使用,每3块为一组,则空忙块成组链交的初初状态为:开初时,空忙块号是程序排列的,但是经若搞次的调配战送还支配后,空忙块的链交便一定逆次排列了.用二维数组A:array [0…M-1] of array [0…n-1]去模拟管造磁盘空间,用A[i]表示第I块,第0块A[0]动做博用块.(3) 成组链交的分组情况记录正在磁盘物理块中,为了查找链交情况,必须把它们读进主存,故当磁盘初初化后,系统先将博用块真质复造到主存中.定义一个数组MA存搁博用块真质,即MA: =A[0].申请一齐磁盘空间时,查MA,从中找出空忙块号,当一组的空忙块只剩第一齐时,则应把该块中指出的下一组的空忙块数战块号复造到博用块中,而后把该块调配给申请者.当一组的空忙块调配完后则把博用块真质(下一组链交情况)复造到主存,再为申请者调配.调配算法如图6-1.图6-1 采与成组链交的调配算法(4) 送还一齐时给出送还的块号,叵目前组不谦确定块数时,将送还块备案进该组;若目前组已谦,则另建一新组,那时送还块动做新一组的第一齐,应把主存中备案的一组链交情况MA复造到送还块中,而后正在MA沉新备案一个新组.送还一齐的算法如图6-2.图6-2 采与成组链交的回支算法(5) 安排调配战送还磁盘空间的步调,能隐现或者挨印调配的磁盘空间的块号,正在完毕一次调配或者送还后能隐现或者挨印各空忙块组的情况(各组的空忙块数战块号).原真习省去了块号与物理天点之间的变换处事,而正在本质的系统中必须举止块号与物理天点的变换处事.(6) 运止您所安排的步调,假定空忙块链交的初初状态如提示(2),现先调配4块,再依次送还第2块战第6块.把真止后调配到的块号依次隐现或者挨印出去,且隐现或者挨印空忙块组的情况.正在上次真止的前提上继承调配3块,而后送还第1块,再申请5块,隐现或者挨印依次调配到的块号及空忙块组情况.四、相闭数据结构及证明struct freeblock {int FBbegin;//起初空忙块号int num;//空忙块数char state;//状态struct freeblock *next; }struct filetowrite {char name[10];//文献名int size;//文献大小int addr_cylinder;//拆进磁盘的尾天点_柱里号int addr_track;//拆进磁盘的尾天点_磁讲号int addr_note;//拆进磁盘的尾天点_物理记录号struct filetowrite *next; }六、源代码及注释1、题一源代码:#include<stdlib.h>#include<stdio.h>int getmalloc()//调配磁盘空间 {int flag=0;struct freeblock *p=FBhead;struct filetowrite *File;File=(struct filetowrite *)malloc(sizeof(struct filetowrite));printf("输进要拆进的文献名:");scanf("%s",File->name);printf("输进所需的磁盘空间大小:");scanf("%d",&File->size);for(p=FBhead->next;p!=NULL;p=p->next)if((File->size)<=(p->num))//调配空间{flag=1;File->addr_cylinder=((p->FBbegin)/6)/20;File->addr_track=((p->FBbegin)/6)%20;File->addr_note=(p->FBbegin)%6;File->next=Filehead->next;//加进文献链表Filehead->next=File;if((File->size)<(p->num))//建改该快的起初天点战块数{p->FBbegin=p->FBbegin+File->size;p->num=p->num-File->size; }else p->state='U';break; }if(flag==0)printf("抱愧!暂时不脚够的磁盘空间调配给该文献.\n");else {printf("调配磁盘乐成!\n该文献的物理天点:\n柱里号\t 磁讲号\t物理块号\n ");printf(" %d\t %d\t %d\n",File->addr_cylinder,File->addr_tr ack,File->addr_note); } }int deletelfree()//回支磁盘空间 {char name[10]; int flag=0;struct filetowrite *p;printf("输进要简略的文献名:");scanf("%s",&name);for(p=Filehead;p->next!=NULL;p=p->next){if(strcmp(p->next->name,name)==0)//找到该文献{flag=1;int funion=0,nunion=0;int m=p->next->addr_cylinder;int n=p->next->addr_track;int k=p->next->addr_note;int addr=(m*20+n)*6+k;//起初空忙块号int tail=p->next->size+addr;struct freeblock *pnode,*qnode,*tnode,*snode;pnode=FBhead->next;while(pnode!=NULL)//先思量战后里的部分或者许有合并的情况{if((pnode->FBbegin)==tail){pnode->FBbegin=addr;pnode->num=pnode->num+p->next->size;nunion=1;break; }pnode=pnode->next; }qnode=FBhead->next;while(qnode!=NULL)//再思量是可战前里的不妨合并{if((qnode->FBbegin+qnode->num)==addr){if(nunion==0){qnode->num=qnode->num+p->next->size;funion=1;break; }else{qnode->num=qnode->num+pnode->num; tnode=FBhead;while(tnode->next!=pnode)tnode=tnode->next;tnode->next=pnode->next;free(pnode);funion=1;break;}}qnode=qnode->next; }if(funion==0&&nunion==0)//若不战前里的或者后里的举止合并,则新建一个表目{snode=(struct freeblock *)malloc(sizeof(struct freeblock));snode->FBbegin=addr;snode->num=p->next->size;snode->state='F';if(FBhead->next==NULL){FBhead->next=snode;snode->next=NULL;}else{snode->next=FBhead->next;FBhead->next=snode; } }struct filetowrite *q;q=p->next;//除该文献p->next=p->next->next;free(q); break; } }if(flag==0)printf("不该文献!\n");else {printf("文献简略乐成!\n"); }int dispfree()//隐现磁盘空忙区表{int i=1;struct freeblock *p=FBhead;printf("\n磁盘空忙区表\n");printf("序号\t起初空忙块号\t空忙块个数\t 状态\n");for(p=FBhead->next;p!=NULL;p=p->next){if((p->state)=='F')printf(" %d\t %d\t\t %d\t\t已调配\n",i++,p->FBbegin,p->num);elseprintf(" %d\t\t\t\t\t空表目\n",i++); } }int dispfile(){char name[10];struct filetowrite *p=Filehead; printf("输进要查看的文献名:");scanf("%s",&name);for(p=Filehead->next;p!=NULL;p=p->next){if(strcmp(p->name,name)==0) {printf("该文献的物理天点:\n柱里号\t磁讲号\t物理块号\n ");printf(" %d\t %d\t %d\n",p->addr_cylinder,p->addr_track, p->addr_note); break; } }if(p==NULL)printf("不该文献!\n"); }int main() {int n,i,A[MAX],B[MAX];//A[MAX]表示起初空忙块号,B[MAX]表示空忙块个数char ch;struct freeblock *pnew;FBhead=(struct freeblock *)malloc(sizeof(struct freeblock));FBhead->next=NULL;printf("输进磁盘空忙区个数:");scanf("%d",&n);for(i=1;i<=n;i++) {pnew=(struct freeblock *)malloc(sizeof(struct freeblock ));pnew->next=NULL;pnew->next=FBhead->next;FBhead->next=pnew;printf("起初空忙块号:");scanf("%d",&pnew->FBbegin);printf("空忙块个数:");scanf("%d",&pnew->num); pnew->state='F'; pnew =pnew->next; }Filehead=(struct filetowrite *)malloc(sizeof(struct filetowrite ));Filehead->next=NULL;do {system("cls");printf("\n\t\t ********** 主菜单 **********\n\n");printf("\t\t\t1.新建文献\n");printf("\t\t\t2.简略文献\n");printf("\t\t\t3.查看磁盘\n");printf("\t\t\t4.查看文献\n");printf("\t\t\t5.退出\n"); printf("请采用:");scanf("%c",&ch);switch(ch) {case '1':getmalloc();system("pause");break;case '2':deletelfree();system("pause");break;case '3':dispfree();system("pause");break;case '4':dispfile();system("pause");break;case '5':exit(1);break;default:printf("输进过得!请沉新输进.\n"); }printf("\n");getchar(); }while(ch!=4);return 0;2、题二源代码:#include <stdio.h>#include <process.h>void Initbitmap(int map[8][8]) {int cylinder,track,sector;char choice='Y';printf("初初化位视图...\n");while(choice=='y'||choice=='Y') {printf("柱里号:");scanf("%d",&cylinder);printf("磁讲号:");scanf("%d",&track);printf("物理记录号:");scanf("%d",§or);map[cylinder][4*track+sector]=1;printf("contiune?");getchar();scanf("%c",&choice); } }void allocate(int map[8][8]) {int i,j;int flag=0;int cylinder,track,sector;for(i=0;i<8;i++){ for(j=0;j<8;j++)if(map[i][j]==0){map[i][j]=1;flag=1;break;}if(flag==1) break;}if(flag==1){cylinder=i; track=j/4; sector=j%4;printf("调配到的柱里号、磁讲号、物理记录数");printf("%d\t%d\t%d",cylinder,track,sector);printf("\n"); }else printf("空间缺累,调配波折!"); }void reclaim(int map[8][8]){ int cylinder,track,sector;printf("柱里号:");scanf("%d",&cylinder);printf("磁讲号:");scanf("%d",&track);printf("物理记录号:");scanf("%d",§or);if(map[cylinder][4*track+sector]==0) {printf("此块为已调配块!回支堕落!");getchar(); }else {map[cylinder][4*track+sector]=0;printf("回支块对付应的字节号:%4d\t位数:%4d\n",cylinder,4*track+sector); } }void main() {int bitmap[8][8]; int i,j; int choice;or(i=0;i<8;i++) for(j=0;j<8;j++)bitmap[i][j]=0; Initbitmap(bitmap);while(1) {printf("\n请输进采用:");printf("1--调配,2---回支,3--隐现位示图,0--退出\n");scanf("%d",&choice); switch(choice) {case 1:allocate(bitmap);break;case 2:reclaim(bitmap);break;case 3:for(i=0;i<8;i++){for(j=0;j<8;j++)printf("%8d",bitmap[i][j]);printf("\n"); }break;case 0:exit(0);default:printf("过得采用!");break; } } }3、第三题源步调:#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("\ninput your choice:(1--assign,2--callback):");scanf("%d",&choice);getchar();if(choice==1)assign();else if(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(); } }int main() { int i;for(i=0;i<=3;i++)MA[i]=A[0][i]; display(); menu(); }七、运止截止1、题一运止截止:2、题二运止截止:3、题三运止截止:。
第5章 存 储 管 理习题答案
第5章存储管理(1) 存储管理的任务和功能是什么?解:存储管理的主要任务是:1.支持多道程序的并发执行,使多道程序能共享存储资源,在互不干扰的环境中并发执行。
2.方便用户,使用户减少甚至摆脱对存储器的管理,使用户从存储器的分配、保护和共享等繁琐事物中解脱出来。
3.提高存储器的利用率和系统吞吐量。
4.从逻辑上扩充内存空间,支持大程序能在小的内存空间运行或允许更多的进程并发执行。
为了完成上述任务,现代操作系统的存储管理应具有以下功能:1. 存储空间的分配和回收。
2. 地址转换,实现逻辑地址到物理地址的映射。
3. 主存空间的共享。
4. 主存空间的保护。
5. 主存储空间的扩充。
6. 对换,对换的主要任务是实现在内存和外存之间的全部或部分进程的对换,即将内存中处于阻塞状态的进程调换到外存上,而将外存上处于就绪状态的进程换入内存。
对换的目的主要是为了提高内存利用率,提高系统的吞吐量。
(2) 为什么要配置层次式存储器?解:为了解决CPU和存储器之间速度上的不匹配,在现代计算机系统中,存储系统通常采用层次结构,存储层次可粗略分为三级:最高层为CPU寄存器,中间为主存,最底层是辅存。
根据具体功能还可以细分为寄存器、高速缓存、主存储器、磁盘缓存、辅存储设备(固定磁盘、可移动存储介质)5层。
一个文件的数据可能出现在存储系统的不同层次中,例如,一个文件数据通常被存储在辅存中(如硬盘),当其需要运行或被访问时,就必须调入主存,也可以暂时存放在主存的磁盘高速缓存中。
大容量的辅存常常使用磁盘,磁盘数据经常备份在可移动磁盘或者光盘上,以防止硬盘故障时丢失数据。
(3) 什么是逻辑地址?什么是物理地址?为什么要进行二者的转换工作?解:逻辑地址是应用程序中使用的访存地址,有时也称为相对地址,由逻辑地址构成的地址空间称为逻辑空间。
每个应用程序的逻辑地址空间都是从零号地址码开始的。
物理地址是内存储器的实际存储单元地址,有时也称为绝对地址,由物理地址构成的地址空间称为物理空间。
磁盘分配空间
磁盘分配空间在计算机系统中,磁盘是存储数据的主要设备之一。
磁盘的存储容量是有限的,因此需要对磁盘空间进行合理的分配。
磁盘空间的分配不仅影响到计算机系统的性能,还直接关系到数据的安全性和可靠性。
本文将介绍磁盘分配空间的相关知识和技术。
一、磁盘空间的组织结构磁盘空间是由磁盘块组成的,每个磁盘块都有一个唯一的编号。
在计算机系统中,磁盘块通常是以扇区为单位进行管理的。
一个扇区通常包含512个字节的数据。
磁盘块的编号是按照一定的规则进行编排的,通常是从0开始递增的。
磁盘块的编号就是磁盘块地址,也称为逻辑块号(Logical Block Number,LBN)。
为了方便用户进行文件管理,磁盘空间通常被划分为若干个分区。
每个分区都有一个唯一的标识符,称为分区号。
分区可以是主分区或扩展分区。
主分区最多只能有4个,扩展分区只能有1个。
在一个扩展分区中,可以创建若干个逻辑分区。
逻辑分区也有唯一的标识符,称为逻辑分区号。
磁盘分区的大小是固定的,一旦分区创建完成,就不能再改变它的大小。
因此,磁盘分区的大小的选择非常重要。
如果分区过小,就可能导致存储空间不够用;如果分区过大,就会浪费存储空间。
为了解决这个问题,可以使用动态分区的技术。
二、磁盘空间的动态分配动态分区是指磁盘空间的大小可以根据需要进行调整。
动态分区需要使用一种特殊的文件系统,称为动态文件系统。
动态文件系统可以在不破坏原有数据的情况下,动态地调整磁盘空间的大小。
动态文件系统通常采用一种称为日志文件系统的技术。
日志文件系统可以记录所有对磁盘空间的操作,包括文件的创建、修改、删除等。
当磁盘空间需要扩容或缩容时,日志文件系统可以根据记录的操作,动态地调整磁盘空间的大小。
动态分区的优点是灵活性高,可以根据需要随时调整磁盘空间的大小。
但是,动态分区的缺点是复杂性高,需要使用特殊的文件系统和技术。
三、磁盘空间的管理磁盘空间的管理是指对磁盘空间进行监控、维护和优化的过程。
磁盘空间的管理可以分为以下几个方面。
磁盘 分配管理
磁盘分配管理
、磁盘分配管理是指系统对磁盘空间进行规划和管理,包括对磁盘进行分区、格式化,并对文件系统进行选择和优化,以提高系统的性能和可靠性。
磁盘分配管理的原理主要涉及到磁盘空间的分配、文件系统的选择、磁盘调度算法和磁盘容量规划等方面。
通过合理规划和管理磁盘空间,可以充分利用磁盘资源,提高系统性能和稳定性。
常见的磁盘分配管理方法包括:
1.磁盘分区:将硬盘分割成多个分区,便于管理
和使用。
2.格式化:将分区格式化成不同的文件系统,以
便于存储和管理数据。
3.挂载:将一个设备挂接到一个已存在的目录上,以便于访问和管理数据。
磁盘分配管理是计算机系统中非常重要的一个环节,它涉及到计算机系统的性能、稳定性和数据安全性等方面。
因此,在进行磁盘分配管理时,需要综合考虑各种因素,选择合适的方案,以确保计算机系统的正常运行。
计算机操作系统习题5参考答案
习题5参考答案Ⅰ问答题1. 存储管理的主要功能是什么?答:(1)主存空间的分配与回收。
系统按照一定的算法把某一空闲的存储空间分配给作业或进程;用户不需要时,及时回收,以供其它用户程序使用。
(2)地址转换(地址重定位)。
把作业地址空间中使用的逻辑地址转换成存空间中的物理地址。
(3)主存空间的共享和保护。
可用的主存空间可由两个或多个进程共享。
同时要保护系统程序区不被用户有意或无意的侵犯,不允许用户程序读写不属于自己地址空间的数据,避免各道程序间相互干扰。
特别是当一道程序发生错误时,不至于影响其它程序的运行。
(4)主存空间的扩充。
使用虚拟存储或自动覆盖技术提供比实际存更大的空间。
2. 指出逻辑地址与物理地址的不同点。
答:用户的源程序一旦编译之后,每个目标模块都以0为基地址进行编址,这种地址称为逻辑地址或相对地址。
为了便于CPU访问,存中的每个物理存储单元都有一个编号,这个编号称为存地址,即物理地址(也称绝对地址)。
3. 何谓地址转换(重定位)?有哪些方法可以实现地址转换?答:当作业运行时,不能用逻辑地址在存中读取信息,必须把作业地址空间中使用的逻辑地址转换成存空间中的物理地址,这种转换称为地址转换。
实现地址转换的方法有:静态地址转换和动态地址转换。
4. 简述什么是覆盖?什么是交换?覆盖和交换的区别是什么?答:覆盖技术主要是指同一主存区可以被不同的程序段重复使用。
交换,就是系统根据需要把主存中暂时不运行的某个(或某些)作业部分或全部移到外存,而把外存中的某个(或某些)作业移到相应的主存区,并使其投入运行。
交换是由操作系统完成,用户并不知道。
操作系统按一定的策略采用“强占”和“礼让”的方法,把存部分容暂时放到硬盘交换区中。
覆盖是由用户控制,操作系统提供覆盖机制,用户给出该程序的覆盖结构。
覆盖机构将整个作业分为常驻和覆盖两部分。
子程序不会同时调入存。
用户只要将最大的子程序作为覆盖区告诉系统即可。
5. 简述固定分区存储管理和可变分区存储管理的区别。
操作系统-资源分配
操作系统-资源分配操作系统资源分配在我们日常使用计算机或其他智能设备时,操作系统扮演着至关重要的角色。
它就像是一个高效的管家,默默地管理着各种资源,确保各个程序和任务能够顺利运行。
其中,资源分配是操作系统的核心功能之一。
想象一下,我们的计算机系统就像一个繁忙的工厂,有各种各样的任务在同时进行,比如运行软件、处理数据、连接网络等等。
而资源,就像是工厂里的原材料、设备和工人,包括 CPU 时间、内存空间、磁盘存储、网络带宽等等。
操作系统需要合理地分配这些资源,以满足不同任务的需求,同时避免资源的浪费和冲突。
让我们先来说说 CPU 资源的分配。
CPU 是计算机的大脑,它的运算速度非常快,但也是有限的。
如果多个程序同时请求 CPU 时间,操作系统就需要决定哪个程序先获得,哪个程序需要等待。
这就像是一个老师在课堂上分配回答问题的机会,要保证每个学生都有公平的机会,同时也要让课堂的进度不被耽误。
操作系统通常采用时间片轮转的方法来分配 CPU 时间。
这意味着每个程序都会被分配一个固定的时间片,在这个时间片内,程序可以使用 CPU 进行计算。
当时间片用完后,操作系统会暂停当前程序,切换到下一个程序,依次轮流进行。
这种方式可以保证每个程序都能得到一定的 CPU 资源,不会有某个程序一直独占 CPU 而导致其他程序无法运行。
除了 CPU 时间,内存也是一项重要的资源。
当我们打开多个程序时,它们都需要占用一定的内存空间来存储数据和代码。
如果内存不足,系统可能会变得卡顿甚至崩溃。
操作系统通过内存管理来解决这个问题。
内存管理包括内存分配和回收两个方面。
当一个程序需要使用内存时,操作系统会为其分配一块合适大小的内存空间。
当程序结束运行或不再需要某些内存时,操作系统会将其回收,以便再次分配给其他程序使用。
为了提高内存的利用率,操作系统还会采用一些技术,比如虚拟内存。
虚拟内存使得计算机可以使用硬盘空间来模拟内存,当物理内存不够用时,将一部分暂时不用的数据存储到硬盘上,从而为正在运行的程序腾出更多的内存空间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实习六磁盘存储空间的分配和回收一、实习内容模拟磁盘空闲空间的表示方法,以及模拟实现磁盘空间的分配和回收。
二、实习目的磁盘初始化时把磁盘存储空间分成许多块(扇区),这些空间可以被多个用户共享。
用户作业在执行期间常常要在磁盘上建立文件或把已经建立在磁盘上的文件删去,这就涉及到磁盘存储空间的分配和回收。
一个文件存放到磁盘上,可以组织成顺序文件(连续文件)、链接文件(串联文件)、索引文件等,因此,磁盘存储空间的分配有两种方式,一种是分配连续的存储空间,另一种是可以分配不连续的存储空间。
怎样有效地管理磁盘存储空间是操作系统应解决的一个重要问题,通过本实习使学生掌握磁盘存储空间的分配和回收算法。
三、实习题目本实习模拟三种磁盘存储空间的管理方法。
第一题:连续的磁盘存储空间的分配和回收。
[提示]:(1) 要在磁盘上建立顺序文件时,必须把按序排列的逻辑记录依次存放在磁盘的连续存储空间中。
可假定磁盘初始化时,已把磁盘存储空间划分成若干等长的块(扇区),按柱面号和盘面号的顺序给每一块确定一个编号。
随着文件的建立、删除、磁盘存储空间被分成许多区(每一区包含若干块),有的区存放着文件,而有的区是空闲的。
当要建立顺序文件时必须找到一个合适的空闲区来存放文件记录,当一个文件被删除时,则该文件占用的区应成为空闲区。
为此可用一张空闲区表来记录磁盘存储空间中尚未占用的部分,格式如下:(2) 要建立文件时,先查找空闲区表,从状态为“未分配”的登记栏目中找出一个块数能满足要求的区,由起始空闲块号能依次推得可使用的其它块号。
若不需要占用该区的所有块时,则剩余的块仍应为未分配的空闲块,这时要修改起始空闲块号和空闲块数。
若占用了该区的所有块,则相应登记栏中的状态修改成“空表目”。
删除一个文件时,从空闲区表中找一个状态为“空表目”的登记栏目,把归还的起始块号和块数填入对应的位置。
磁盘存储空间的分配和回收算法类似于主存储器的可变分区方式的分配和回收。
同学们可参考实习四的第一题。
(3) 当找到空闲块后,必须启动磁盘把信息存放到指定的块中,启动磁盘必须给出由三个参数组成的物理地址:柱面号、磁道号和物理记录号。
故必须把找到的空闲块号换算成磁盘的物理地址。
为了减少移臂次数,磁盘上的信息按柱面上各磁道顺序存放。
现假定一个盘组共有200个柱面,(编号0-199)每个柱面有20个磁道(编号0-19,同一柱面上的各磁道分布在各盘面上,故磁道号即盘面号。
),每个磁道被分成等长的6个物理记录(编号0-5,每个盘面被分成若干个扇区,故每个磁道上的物理记录号即为对应的扇区号。
)。
那么,空闲块号与磁盘物理地址的对应关系如下:假设,则(4) 数,假定每个逻辑记录占磁盘上的一块,则可推算出归还后的起始空闲块号和块数,登记到空闲区表中。
换算关系如下:起始空闲块号=(柱面号⨯20+磁道号)⨯6+物理记录号空闲块数=逻辑记录数(5) 请设计磁盘存储空间的分配和回收程序,要求把分配到的空闲块转换成磁盘物理地址,把归还的磁盘空间转换成空闲块号。
假定空闲区表的初值如提示(1)中指出,现有一文件要占用10块,运行你所设计的分配程序,显示或打印分配后的空闲区表以及分配到的磁盘空间的起始物理地址。
然后,有一文件被删除,它占用的磁盘空间为:1号柱面2号磁道,0号物理记录开始的4块,运行你所设计的回收程序,显示或打印回收后的空闲区表。
第二题:用位示图管理磁盘存储空间[提示]:(1) 为了提高磁盘存储空间的利用率,可在磁盘上组织成链接文件、索引文件,这类文件可以把逻辑记录存放在不连续的存储空间。
为了表示哪些磁盘空间已被占用,哪些磁盘空间是空闲的,可用位示图来指出。
位示图由若干字节构成,每一位与磁盘上的一块对应,“1”状态表示相应块已占用,“0”状态表示该块为空闲。
位示图的形式与实习四中的位示图一样,但要注意,对于主存储空间和磁盘存储空间应该用不同的位示图来管理,绝不可混用。
(2) 申请一块磁盘空间时,由分配程序查位示图,找出一个为“0”的位,计算出这一位对应块的磁盘物理地址,且把该位置成占用状态“1”。
假设现在有一个盘组共80个柱面,每个柱面有两个磁道,每个磁道分成4个物理记录。
那么,当在位示图中找到某一字节的某一位为“0”时,这个空闲块对应的磁盘物理地址为:柱面号=字节号(3) 由回收程序根据归还的磁盘物理地址计算出归还块在位示图中的对应位,把该位置成“0”。
按照(2)中假设的盘组,归还块在位示图中的位置计算如下:字节号=柱面号位数=磁道号⨯4+物理记录号(4) 设计申请一块磁盘空间和归还一块磁盘空间的程序。
要求能显示或打印程序运行前和运行后的位示图;分配时把分配到的磁盘空间的物理地址显示或打印出来,归还时把归还块对应于位示图的字节号和位数显示或打印出来。
(5) 假定已有如表6-1的磁盘空间被占用了,现在要申请五块磁盘空间,运行分配程序,按(4)中要求显示或打印运行的结果。
然后再归还如表6-2的空间,运行回收程序,按(4)中的要求显示或打印运行结果。
表6-1表6-2第三题:模拟UNIX系统的空闲块成组链接法,实现磁盘存储空间的管理。
[提示]:(1) 假定磁盘存储空间已被划分成长度为n的等长块,共有M块可供使用。
UNIX系统中采用空闲块成组链接的方法来管理磁盘存储空间,将磁盘中的每N个空闲块(N<M)分成一组,最后一组可以不足N块,每组的第一块中登记了下一组空闲块的块数和块号,第一组的块数和块号登记在专用块中,登记的格式如下:当第一项内容为“0”时,则第二项起指出的空闲块是最后一组。
(2) 现模拟UNIX系统的空闲块成组链接,假定共有8块可供使用,每3块为一组,则空闲块成组链接的初始状态为:开始时,空闲块号是顺序排列的,但经若干次的分配和归还操作后,空闲块的链接就未必按序排列了。
用二维数组A:array [0…M-1] of array [0…n-1]来模拟管理磁盘空间,用A[i]表示第I块,第0块A[0]作为专用块。
(3) 成组链接的分组情况记录在磁盘物理块中,为了查找链接情况,必须把它们读入主存,故当磁盘初始化后,系统先将专用块内容复制到主存中。
定义一个数组MA存放专用块内容,即MA: =A[0]。
申请一块磁盘空间时,查MA,从中找出空闲块号,当一组的空闲块只剩第一块时,则应把该块中指出的下一组的空闲块数和块号复制到专用块中,然后把该块分配给申请者。
当一组的空闲块分配完后则把专用块内容(下一组链接情况)复制到主存,再为申请者分配。
分配算法如图6-1。
图6-1 采用成组链接的分配算法(4) 归还一块时给出归还的块号,叵当前组不满规定块数时,将归还块登记入该组;若当前组已满,则另建一新组,这时归还块作为新一组的第一块,应把主存中登记的一组链接情况MA复制到归还块中,然后在MA重新登记一个新组。
归还一块的算法如图6-2。
图6-2 采用成组链接的回收算法(5) 设计分配和归还磁盘空间的程序,能显示或打印分配的磁盘空间的块号,在完成一次分配或归还后能显示或打印各空闲块组的情况(各组的空闲块数和块号)。
本实习省去了块号与物理地址之间的转换工作,而在实际的系统中必须进行块号与物理地址的转换工作。
(6) 运行你所设计的程序,假定空闲块链接的初始状态如提示(2),现先分配4块,再依次归还第2块和第6块。
把执行后分配到的块号依次显示或打印出来,且显示或打印空闲块组的情况。
在上次执行的基础上继续分配3块,然后归还第1块,再申请5块,显示或打印依次分配到的块号及空闲块组情况。
四、相关数据结构及说明struct freeblock {int FBbegin;//起始空闲块号int num;//空闲块数char state;//状态struct freeblock *next; }struct filetowrite {char name[10];//文件名int size;//文件大小int addr_cylinder;//装入磁盘的首地址_柱面号int addr_track;//装入磁盘的首地址_磁道号int addr_note;//装入磁盘的首地址_物理记录号struct filetowrite *next; }六、源代码及注释1、题一源代码:#include<stdlib.h>#include<stdio.h>int getmalloc()//分配磁盘空间{int flag=0;struct freeblock *p=FBhead;struct filetowrite *File;File=(struct filetowrite *)malloc(sizeof(struct filetowrite));printf("输入要装入的文件名:");scanf("%s",File->name);printf("输入所需的磁盘空间大小:");scanf("%d",&File->size);for(p=FBhead->next;p!=NULL;p=p->next)if((File->size)<=(p->num))//分配空间{flag=1;File->addr_cylinder=((p->FBbegin)/6)/20;File->addr_track=((p->FBbegin)/6)%20;File->addr_note=(p->FBbegin)%6;File->next=Filehead->next;//加入文件链表Filehead->next=File;if((File->size)<(p->num))//修改该快的起始地址和块数{p->FBbegin=p->FBbegin+File->size;p->num=p->num-File->size; }else p->state='U';break; }if(flag==0)printf("抱歉!目前没有足够的磁盘空间分配给该文件.\n");else {printf("分配磁盘成功!\n该文件的物理地址:\n柱面号\t磁道号\t物理块号\n ");printf(" %d\t %d\t %d\n",File->addr_cylinder,File->addr_track,File ->addr_note); } }int deletelfree()//回收磁盘空间{char name[10]; int flag=0;struct filetowrite *p;printf("输入要删除的文件名:");scanf("%s",&name);for(p=Filehead;p->next!=NULL;p=p->next){if(strcmp(p->next->name,name)==0)//找到该文件{flag=1;int funion=0,nunion=0;int m=p->next->addr_cylinder;int n=p->next->addr_track;int k=p->next->addr_note;int addr=(m*20+n)*6+k;//起始空闲块号int tail=p->next->size+addr;struct freeblock *pnode,*qnode,*tnode,*snode;pnode=FBhead->next;while(pnode!=NULL)//先考虑和后面的部分或许有合并的情况{if((pnode->FBbegin)==tail){pnode->FBbegin=addr;pnode->num=pnode->num+p->next->size;nunion=1;break; }pnode=pnode->next; }qnode=FBhead->next;while(qnode!=NULL)//再考虑是否和前面的可以合并{if((qnode->FBbegin+qnode->num)==addr){if(nunion==0){qnode->num=qnode->num+p->next->size;funion=1;break; }else{qnode->num=qnode->num+pnode->num;tnode=FBhead;while(tnode->next!=pnode)tnode=tnode->next;tnode->next=pnode->next;free(pnode);funion=1;break;}}qnode=qnode->next; }if(funion==0&&nunion==0)//若没有和前面的或后面的进行合并,则新建一个表目{snode=(struct freeblock *)malloc(sizeof(struct freeblock));snode->FBbegin=addr;snode->num=p->next->size;snode->state='F';if(FBhead->next==NULL){FBhead->next=snode;snode->next=NULL;}else{snode->next=FBhead->next;FBhead->next=snode; }}struct filetowrite *q;q=p->next;//除该文件p->next=p->next->next;free(q); break; } }if(flag==0)printf("没有该文件!\n");else {printf("文件删除成功!\n"); }int dispfree()//显示磁盘空闲区表{int i=1;struct freeblock *p=FBhead;printf("\n磁盘空闲区表\n");printf("序号\t起始空闲块号\t空闲块个数\t 状态\n");for(p=FBhead->next;p!=NULL;p=p->next){if((p->state)=='F')printf(" %d\t %d\t\t %d\t\t未分配\n",i++,p->FBbegin,p->num);elseprintf(" %d\t\t\t\t\t空表目\n",i++); } }int dispfile(){char name[10];struct filetowrite *p=Filehead; printf("输入要查看的文件名:");scanf("%s",&name);for(p=Filehead->next;p!=NULL;p=p->next){if(strcmp(p->name,name)==0) {printf("该文件的物理地址:\n柱面号\t磁道号\t物理块号\n ");printf(" %d\t %d\t %d\n",p->addr_cylinder,p->addr_track,p->add r_note); break; } }if(p==NULL)printf("没有该文件!\n"); }int main() {int n,i,A[MAX],B[MAX];//A[MAX]表示起始空闲块号,B[MAX]表示空闲块个数char ch;struct freeblock *pnew;FBhead=(struct freeblock *)malloc(sizeof(struct freeblock));FBhead->next=NULL;printf("输入磁盘空闲区个数:");scanf("%d",&n);for(i=1;i<=n;i++) {pnew=(struct freeblock *)malloc(sizeof(struct freeblock) );pnew->next=NULL;pnew->next=FBhead->next;FBhead->next=pnew;printf("起始空闲块号:");scanf("%d",&pnew->FBbegin);printf("空闲块个数:");scanf("%d",&pnew->num); pnew->state='F';pnew=pnew->next; }Filehead=(struct filetowrite *)malloc(sizeof(struct filetowrite));Filehead->next=NULL;do {system("cls");printf("\n\t\t ********** 主菜单**********\n\n");printf("\t\t\t1.新建文件\n");printf("\t\t\t2.删除文件\n");printf("\t\t\t3.查看磁盘\n");printf("\t\t\t4.查看文件\n");printf("\t\t\t5.退出\n"); printf("请选择:");scanf("%c",&ch);switch(ch) {case '1':getmalloc();system("pause");break;case '2':deletelfree();system("pause");break;case '3':dispfree();system("pause");break;case '4':dispfile();system("pause");break;case '5':exit(1);break;default:printf("输入错误!请重新输入.\n");}printf("\n");getchar(); }while(ch!=4);return 0;2、题二源代码:#include <stdio.h>#include <process.h>void Initbitmap(int map[8][8]) {int cylinder,track,sector;char choice='Y';printf("初始化位视图...\n");while(choice=='y'||choice=='Y') {printf("柱面号:");scanf("%d",&cylinder);printf("磁道号:");scanf("%d",&track);printf("物理记录号:");scanf("%d",§or);map[cylinder][4*track+sector]=1;printf("contiune?");getchar();scanf("%c",&choice); } }void allocate(int map[8][8]) {int i,j;int flag=0;int cylinder,track,sector;for(i=0;i<8;i++){ for(j=0;j<8;j++)if(map[i][j]==0){map[i][j]=1;flag=1;break;}if(flag==1) break;}if(flag==1){cylinder=i; track=j/4; sector=j%4; printf("分配到的柱面号、磁道号、物理记录数");printf("%d\t%d\t%d",cylinder,track,sector);printf("\n"); }else printf("空间不足,分配失败!"); }void reclaim(int map[8][8]){ int cylinder,track,sector;printf("柱面号:");scanf("%d",&cylinder);printf("磁道号:");scanf("%d",&track);printf("物理记录号:");scanf("%d",§or);if(map[cylinder][4*track+sector]==0) {printf("此块为未分配块!回收出错!");getchar(); }else {map[cylinder][4*track+sector]=0;printf("回收块对应的字节号:%4d\t位数:%4d\n",cylinder,4*track+sector); } }void main() {int bitmap[8][8]; int i,j; int choice;or(i=0;i<8;i++) for(j=0;j<8;j++)bitmap[i][j]=0; Initbitmap(bitmap);while(1) {printf("\n请输入选择:");printf("1--分配,2---回收,3--显示位示图,0--退出\n");scanf("%d",&choice); switch(choice) {case 1:allocate(bitmap);break;case 2:reclaim(bitmap);break;case 3:for(i=0;i<8;i++){for(j=0;j<8;j++)printf("%8d",bitmap[i][j]);printf("\n"); }break;case 0:exit(0);default:printf("错误选择!");break; } } }3、第三题源程序:#include<stdio.h>int MA[4]; /*空闲块数组*/int A[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("\ninput your choice:(1--assign,2--callback):");scanf("%d",&choice);getchar();if(choice==1)assign();else if(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(); } }int main() { int i;for(i=0;i<=3;i++)MA[i]=A[0][i]; display(); menu(); }七、运行结果1、题一运行结果:2、题二运行结果:3、题三运行结果:。