精华内容
下载资源
问答
  • 2021-12-24 23:29:08

    感谢关注!!

    本程序使用c/c++实现了操作系统课程设计《磁盘空间管理的模拟》题目

    使用了位示图法(位图)实现功能

    代码已实现在vc++6.0中成功运行(运行出现问题欢迎私信)

    此题目说明书,任务书,课程设计所有内容部分已打包,需要的私信取!!

    代码如下:

    #include<stdio.h>
    #include<windows.h>
    unsigned int size[5]={0,0,0,0,0};//保存位示图
    
    void out()//输出位示图函数
    { 	
    	printf("当前位示图:\n");
    	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;
    		}
    		printf("\n");
    	}
    
    	system("pause");//冻结屏幕
    	system("cls");//清屏
    }
    
    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\t%d %d\n",zhm,cid,sq);
    	}
    	system("pause");//冻结屏幕
    	system("cls");//清屏
    }
    
    void callback()//回收函数
    {
    	unsigned int i,j,s=1,q,m,sq,zhm,cid;
    	printf("输入要回收块的柱面号、磁道号、扇区号:\n");
    	scanf("%d",&zhm);
    	scanf("%d",&cid);
    	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("回收成功!\n");
    	}
    	else
    		printf("该块未被分配,无需回收!\n");
    	system("pause");//冻结屏幕
    	system("cls");//清屏
    }
    
    void main()
    {
    	printf("\n");
    	printf("	1.分配磁盘空间\n");
    	printf("	2.回收磁盘空间\n");
    	printf("	3.查看当前位示图\n");
    	printf("	4.退出\n");
    	printf("\n");
    	printf("请输入你的选择:");
    	int x;
    	scanf("%d",&x);
    	while (x > 4 || x < 0)
        {	
            printf("选择有误!\n请重新输入:");
    		scanf("%d",&x);
        }
    	switch (x)
    	{
    		case 1:x = 1;
    			assign();
    			main();
    			break;
    		case 2:x = 2;
    			callback();
    			main();
    			break;
    		case 3:x = 3;
    			out();
    			main();
    			break;
    		case 4:x = 4;
    			exit(0); 
    			break;
    	}
    }
    

    更多相关内容
  • Linux操作系统硬盘空间管理的策略与实践.pdf
  • 3. 依次显示每次分配或回收后的磁盘空间情况,以及每个文件物理地址(物理块号); 4. 磁盘空间采用成组链接;文件物理结构采用索引结构。
  • Qt制作的操作系统课程设计 文件物理结构与磁盘空间管理相关知识运用。 实现连续分配、链接文件,能够根据文件物理结构选用恰当的磁盘空间管理方法,实现记录逻辑块到物理块的地址映射。能够显示文件空间占用情况和...
  • 操作系统用位示图管理磁盘空间的分配与回收
  • 操作系统课程设计一小题---磁盘空间管理模拟实验
  • 用java写的操作系统磁盘管理程序,有详细的源代码和代码注释,如有错漏,欢迎指正…………
  • 掌握UNIX外存空间管理中的分组链接算法。 编写C语言程序,模拟UNIX磁盘空间管理中使用的分组链接法。
  • 操作系统磁盘管理

    千次阅读 2017-07-14 10:43:44
    对于操作系统来说,管理磁盘的三大要求和目标是: (1)合理有效利用磁盘:采用合理的文件存储空间分配算法,尽量减少磁盘碎片,提高硬盘的利用率; (2)提高磁盘的I/O速度:采用缓存等技术,提供访问速度; ...

    磁盘存储器具有容量大、存取速度快、支持随机存取的特点,因此被广泛应用于计算机系统中。对于操作系统来说,管理好磁盘的三大要求和目标是:
    (1)合理有效利用磁盘:采用合理的文件存储空间分配算法,尽量减少磁盘碎片,提高硬盘的利用率;
    (2)提高磁盘的I/O速度:采用缓存等技术,提供访问速度;
    (3)提高磁盘可靠性:采用冗余和纠错检错等技术,保证磁盘的数据不会被破坏。

    外存的组织方式

    文件是存放在磁盘上的,而磁盘是以盘块为基本的分配单位的,那么一个文件是怎么存放在磁盘上的呢,这就是外存的组织方式,主要有以下三种:
    (1)连续组织方式:要求为每一个文件分配一组相邻接的盘块。就好像分配一个连续的数组给文件使用一样,不过数组元素是磁盘的盘块。它的优点在于顺序访问容易,访问速度快,因为都放在相邻磁道上,寻道时间很小。缺点为容易产生外部碎片,难以知道文件长度,难以为其分配空间,不利于删除和插入记录。
    (2)链接组织方式:为每个文件分配不连续的磁盘空间,通过链接指针将一个文件的所有盘块链接在一起,由此形成链式文件结构。这种方式可以克服连续组织方式的缺点,分为隐式链接和显示链接两种形式。
    其中隐式链接的目录项需要包含文件的第一个盘块和最后一个盘块号,每一个盘块都有一个指向下一块盘块的指针(最后一个盘块除外)。但是这样只能顺序查找,速度慢。
    而现实链接指用于链接文件的各物理块的指针显式地存放在内存的一张链接表中,该表在整个磁盘中仅设置一张。而文件第一个盘块号作为文件的物理地址存放在FCB(文件控制块中,详情见文件管理一文)。而那个链接表则叫做文件分配表(FAT:file allocation table)。
    那么查找的时候,将会把该表拷贝至内存中,大大减少访问磁盘速度,提高了检索的速度。
    这里写图片描述
    (3)索引组织方式:链接组织方式虽然克服了连续组织方式的弊端,但是仔细一看,我们可以发现,FAT技术并没有解决掉查找文件必须要顺序访问的问题,同时为了查找一个文件,必须将整个FAT加载到内存中,因此是需要占用内存空间的。
    其实,在打开一个文件时,只需要把该文件占用的盘块编号调入内存即可,而不是整个FAT,因此,我们可以将分配给一个文件的所有盘块号集中在一起,按顺序放入一个磁盘块中(称为索引块),这就是索引组织方式。
    索引组织方式中,分直接索引分配和多级索引分配,直接索引分配中索引盘块号就是文件内容:这里写图片描述
    二级索引中,一级索引中的盘块仍然存放索引信息,第二级索引的盘块才是真正存放文件内容:
    这里写图片描述直接索引的缺点在于不能够存放大文件的信息,而多级索引大大加快大型文件的查找速度,但是启动磁盘的次数也增多,对于小文件也是如此。在Unix系统中,通常采用直接索引和多级索引混合的方式,以适应不同大小文件的空间需求。

    磁盘空闲盘块的管理

    在上面的外存组织方式中,为一个文件分配空闲盘块,就需要知道哪些盘块是空闲的,记录磁盘有哪些空闲盘块有以下方法:
    (1)空闲表法:为外存上所有区域建立一张空闲表,每个空闲区对应于一个空闲表项,空闲表项里面有表项的序号、空闲区的第一个盘块号、空闲盘块数等信息:
    这里写图片描述
    对于空闲表法的空间分配和回收跟内存空间的动态分区分配类似,同样可以采用首次适应、最佳适应等算法,回收时,也会考虑回收区间相邻的空间,进行适当的拼接。
    (2)空闲链表法:将所有空闲盘块区拉成一条空闲链。这种方法对分配和回收比较简单,但是空闲盘块链可能会很长。
    (3)位示图法:利用磁盘空间的每一位来表示磁盘一个盘块是否空闲:
    这里写图片描述
    位示图法的分配和回收就是把相应的位置为0或者1,这种方法占用的空间小,适合保存在内存中,就不需要每次都访问磁盘。
    (4)成组链接法:参见这篇文章:成组链接法

    提高磁盘I/O速度-磁盘高速缓存

    磁盘的读取速度跟内存的读取速度相差4~6个数量级,为了提高磁盘访问速度,我们可以在内存中为磁盘盘块设置一个缓冲区,称为磁盘高速缓存,在缓冲区中保存一些盘块的副本,当有一个磁盘请求时,先在缓冲区里面查找是否有该盘块,若有,直接从缓冲区获取数据;如果没有再启动磁盘读入,并将内容送至缓冲区,以便下次访问。

    廉价磁盘冗余阵列(RAID)

    设置多台磁盘存储器,并行地读取磁盘内容,加快I/O速度,同时采用容错技术提高可靠性。

    展开全文
  • 实 训验项目单 实 训验项目单 实训七 配置与管理基本磁盘 项目名称 配置与管理基本磁盘 实训对象 网络1901班 学时 2 课程名称 网络操作系统 教 材 网络操作系统项目教程 实训目的 掌握初始化磁盘 掌握创建主分区和...
  • 操作系统存储管理

    万次阅读 多人点赞 2021-10-24 09:11:23
    目录 - 3.1 内存的基础知识 - 3.1.1 什么是内存,有何作用 - 3.1.2 进程运行的基本原理 - 3.2 内存管理的概念 ... - 3.3 覆盖与交换 ... - 3.4 连续分配管理... - 3.10 基本分段存储管理方...

    目录

    - 3.1 内存的基础知识

        - 3.1.1 什么是内存,有何作用

        - 3.1.2 进程运行的基本原理

    - 3.2 内存管理的概念

    - 3.3 覆盖与交换

    - 3.4 连续分配管理方式

    - 3.5 动态分区分配算法

    - 3.6 基本分页存储管理的基本概念

    - 3.7 基本地址变换机构

    - 3.8 具有快表的地址变换机构

    - 3.9 两级页表

    - 3.10 基本分段存储管理方式

    - 3.11 段页管理方式

    - 3.2.1 虚拟内存的基本概念

    - 3.2.2 请求分页管理方式

    - 3.2.3 页面置换算法

    - 3.2.4 页面分配策略

    3.1 内存的基础知识

    3.1.1 什么是内存,有何作用

    1. 内存:用于存放数据的硬件。程序执行前需要先放到内存中才能被CPU处理。
    2. 存储单元
      1. 内存地址从0开始,每个地址对应个存储单元
      2. 内存中也有一个一个的“小房间”,每个小房间就是一个“存储单元”
      3. 如果计算机“按字节编址”则每个存储单元大小为1字节,即1B,即8个二进制位
      4. 如果字长为16位的计算机“按字编址”,则每个存储单元大小为1个字;每个字的大小为16个二进制位
      5. 一台手机/电脑有4GB内存,是什么意思?
        1. 是指该内存中可以存放4*230个字节。如果是按字节编址的话,也就是有4*230 = 232个“小房间”
    3. 内存地址

    3.1.2 进程运行的基本原理

    1. 指令的工作原理
      1. 我们写的代码要翻译成CPU能识别的指令。这些指令会告诉CPU应该去内存的哪个地址存/取数据,这个数据应该做什么样的处理。在这个例子中,指令中直接给出了变量x的实际存放地址(物理地址)。但实际在生成机器指令的时候并不知道该进程的数据会被放到什么位置。所以编译生成的指令中一般是使用逻辑地址(相对地址)
    2. 逻辑地址VS物理地址
      1. 指令中的地址也可以采用这种思想。编译时产生的指令只关心“相对地址”,实际放入内存中时再想办法根据起始位置得到“绝对地址”。
      2. Eg:编译时只需确定变量x存放的相对地址是100(也就是说相对于进程在内存中的起始地址而言的地址)。CPU想要找到x在内存中的实际存放位置,只需要用进程的起始地址+100即可。
      3. 相对地址又称逻辑地址,绝对地址又称物理地址
    3. 从写程序到程序运行:编辑--编译--链接--装入
      1. 编译:由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译为机器语言)
      2. 链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在起,形成一个完整的装入模块
      3. 装入(装载):由装入程序将装入模块装入内存运行

       

    4. 三种链接方式
      1. 静态链接:在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。
      2. 装入时动态链接:将各目标模块装入内存时,边装入边链接的链接方式。
      3. 运行时动态链接:在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享。
    5. 三种装入方式
      1. 绝对装入---(只适用于单道程序环境)
        1. 绝对装入:在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存。
      2. 静态重定位---(早期的多道批处理系统)
        1. 静态重定位:又称可重定位装入。编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对地址进行“重定位”,将逻辑地址变换为物理地址(地址变换是在装入时一次完成的)。
      3. 动态重定位----(现代操作系统)
        1. 动态重定位:又称动态运行时装入。编译、链接后的装入模块的地址都是从0开始的。装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持。(允许程序在内存中移动)

    3.2 内存管理的概念

    操作系统作为系统资源的管理者,当然也需要对内存进行管理,要管些什么呢?

    操作系统要怎么记录哪些内存区域已经被分配出去了,哪些又还空闲?

    当进程运行结束之后,如何将进程占用的内存空间回收?

    很多位置都可以放,那应该放在哪里?

    1. 内存空间的分配与回收
      1. 连续分配管理方式
        1. 单一连续分配
        2. 固定连续分配
          1. 分区大小相等
          2. 分区大小不等
        3. 动态分区分配
      2. 非连续分配管理方式
        1. 基于分页存储管理
        2. 基于分段存储管理
        3. 段页式存储管理
    2. 内存空间的扩充
      1. 覆盖技术
      2. 交换技术
      3. 虚拟存储技术
    3. 地址转换
      1. 操作系统负责实现逻辑地址到物理地址的转换
      2. 三种方式:
        1. 绝对装入
        2. 可重定位装入
        3. 动态运行时装入
    4. 存储保护
      1. 各个进程只能访问自己进程对应的内存空间,而不能访问操作系统或其他进程的内存空间。
      2. 保证各进程在自己的内存空间运行,不能越界访问。
      3. 方法一:在CPU中设置一对上、下限寄存器,存放进程的上、下限地址。进程的指令要访问某个地址时,CPU检查是否越界。
      4. 方法二:采用重定位寄存器(又称基址寄存器)和界地址寄存器(又称限长寄存器)进行越界检查。重定位寄存器中存放的是进程的起始物理地址。界地址寄存器中存放的是进程的最大逻辑地址。

    3.3 覆盖与交换

    3.3.1覆盖技术

    1. 早期的计算机内存很小,比如 IBM推出的第一台PC机最大只支持1MB大小的内存。因此经常会出现内存大小不够的情况。
    2. 后来人们引入了覆盖技术,用来解决“程序大小超过物理内存总和”的问题
    3. 覆盖技术的思想:将程序分为多个段(多个模块)。常用的段常驻内存,不常用的段在需要时调入内存。
    4. 内存中分为一个“固定区”和若干个“覆盖区”。
    5. 需要常驻内存的段放在“固定区”中,调入后就不再调出(除非运行结束)
    6. 不常用的段放在“覆盖区”,需要用到时调入内存,用不到时调出内存
    7. 必须由程序员声明覆盖结构,操柞系统完成自动覆盖。缺点:对用户不透明,增加了用户编程负担。

    3.3.2交换技术

    1. 交换(对换)技术的设计思想:内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)
    2. 具有对换功能的操作系统中,通常把磁盘空间分为文件区和对换区两部分。
      1. 文件区主要用于存放文件,主要追求存储空间的利用率,因此对文件区空间的管理采用离散分配方式;
      2. 对换区空间只占磁盘空间的小部分,被换出的进程数据就存放在对换区。由于对换的速度直接影响到系统的整体速度,因此对换空间的管理主要追求换入换出速度,因此通常对换区采用连续分配方式(学过文件管理章节后即可理解)。总之,对换区的I/O速度比文件区的更快。
    3. 交换通常在许多进程运行且内存吃紧时进行,而系统负荷降低就暂停。例如:在发现许多进程运行时经常发生缺页,就说明内存紧张,此时可以换出一些进程;如果缺页率明显下降,就可以暂停换出。
    4. 可优先换出阻塞进程;可换出优先级低的进程;为了防止优先级低的进程在被调入内存后根快又被换出,有的系统还会考虑进程在内存的驻留时间..

    3.3.3 覆盖技术与交换技术的区别

    1. 覆盖是在同一个程序或进程中的
    2. 交换是在不同进程(或作业)之间的

    3.4 连续分配管理方式

    1. 连续分配管理方式 -- 用户进程分配的必须是一个连续的内存空间
      1. 单一连续分配
        1. 在单一连续分配方式中,内存被分为系统区用户区。系统区通常位于内存的低地址部分,用于存放操作系统相关数据;用户区用于存放用户进程相关数据。
        2. 内存中只能有一道用户程序,用户程序独占整个用户区空间。
        3. 优点:实现简单;无外部碎片;可以采用覆盖技术扩充内存;不一定需要采取内存保护(eg:早期的PC操作系统MS-Dos) 。
        4. 缺点:只能用于单用户、单任务的操作系统中;有内部碎片;存储器利用率极低。
      2. 固定连续分配(无外部碎片,有内部碎片
        1. 20世纪60年代出现了支持多道程序的系统,为了能在内存中装入多道程序,且这些程序之间又不会相互干扰,于是将整个用户空间划分为若干个固定大小的分区,在每个分区中只装入一道作业,这样就形成了最早的、最简单的一种可运行多道程序的内存管理方式。
        2. 操作系统需要建立一个数据结构―一分区说明表,来实现各个分区的分配与回收。每个表项对应一个分区,通常按分区大小排列。每个表项包括对应分区的大小、起始地址、状态(是否已分配)。
        3. 分区大小相等
          1. 分区大小相等:缺乏灵活性,但是很适合用于用一台计算机控制多个相同对象的场合(比如:钢铁厂有n个相同的炼钢炉,就可把内存分为n个大小相等的区域存放n个炼钢炉控制程序)
        4. 分区大小不等
          1. 分区大小不等:增加了灵活性,可以满足不同大小的进程需求。根据常在系统中运行的作业大小情况进行划分(比如:划分多个小分区、适量中等分区、少量大分区)
      3. 动态分区分配(有外部碎片,无内部碎片
        1. 动态分区分配又称为可变分区分配。这种分配方式不会预先划分内存分区,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统分区的大小和数目是可变的。(eg:假设某计算机内存大小为64MB,系统区8MB,用户区共56 MB.….)
        2. 动态内存分配的内部碎片与外部碎片
          1. 内部碎片,分配给某进程的内存区域中,如果有些部分没有用上
          2. 外部碎片,是指内存中的某些空闲分区由于太小而难以利用
        3. 系统要用什么样的数据结构记录内存的使用情况?
          1. 空闲分区表
            1. 每个空闲分区对应一个表项。表项中包含分区号、分区大小、分区起始地址和状态等信息
          2. 空闲分区链
            1. 每个分区的起始部分和末尾部分分别设置前向指针和后向指针。起始部分处还可记录分区大小等信息
        4. 当很多个空闲分区都能满足需求时,应该选择哪个分区进行分配?
          1. 动态分区分配算法:
            1. 从空闲分区表(或空闲分区链)中选出一个分区分配给该作业。由于分配算法算法对系统性能有很大的影响,因此人们对它进行了广泛的研究。
        5. 如何进行分区的分配与回收操作?
          1. 第一个情况:重写内存分区表/链
          2. 第二种情况:删除内存分区表/链
        6. 如何进行分区的分配与回收操作?
          1. 修改内存分区表
          2. 合并内存分区表
    2. 非连续分配管理方式

    3.5 动态分区分配算法

    1. 首次适应算法(First Fit)
      1. 算法思想:每次都从低地址开始查找,找到第一个能满足大小的空闲分区。
      2. 如何实现:空闲分区以地址递增的次序排列。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。
    2. 最佳适应算法(Best Fit)
      1. 算法思想:由于动态分区分配是一种连续分配方式,为各进程分配的空间必须是连续的一整片区域。因此为了保证当“大进程”到来时能有连续的大片空间,可以尽可能多地留下大片的空闲区,即,优先使用更小的空闲区。
      2. 如何实现:空闲分区按容量递增次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。
    3. 最坏适应算法(Worst Fit)
      1. 算法思想:为了解决最佳适应算法的问题――即留下太多难以利用的小碎片可以在每次分配时优先使用最大的连续空闲区,这样分配后剩余的空闲区就不会太小,更方便使用。
      2. 如何实现:空闲分区按容量递减次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。
    4. 邻近适应算法(Next Fit)
      1. 算法思想:首次适应算法每次都从链头开始查找的。这可能会导致低地址部分出现很多小的空闲分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销。如果每次都从上次查找结束的位置开始检索,就能解决上述问题。
      2. 如何实现:空闲分区以地址递增的顺序排列(可排成一个循环链表)。每次分配内存时从上次查找结束的位置开始查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

     

    3.6 基本分页存储管理的基本概念

    1. 将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个“页框”,或称“页帧”、“内存块”、“物理块”。每个页框有一个编号,即“页框号”(或者“内存块号”、“页帧号”、“物理块号”)页框号从0开始。
    2. 将用户进程的地址空间也分为与页框大小相等的一个个区域,称为“页”或“页面”。每个页面也有一个编号,即“页号”,页号也是从0开始。
    3. (注:进程的最后一个页面可能没有一个页框那么大。因此,页框不能太大,否则可能产生过大的内部碎片)
    4. 操作系统以页框为单位为各个进程分配内存空间。进程的每个页面分别放入一个页框中。也就是说,进程的页面与内存的页框有一一对应的关系。
    5. 各个页面不必连续存放,也不必按先后顺序来,可以放到不相邻的各个页框中。
    6. 计算步骤:
      1. 要算出逻辑地址对应的页号(页号 = 逻辑地址 / 页面长度 )取整
      2. 要知道该页号对应页面在内存中的起始地址
      3. 要算出逻辑地址在页面内的“偏移量(页内偏移量 = 逻辑地址 % 页面长度)取余
      4. 物理地址 = 页面地址 + 页内偏移量
    7. 页表
      1. 为了能知道进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表。
      2. 一个进程对应一张页表
      3. 进程的每一页对应一个页表项
      4. 每个页表项由“页号”和“块号”组成
      5. 页表记录进程页面和实际存放的内存块之间的对应关系
      6. 每个页表项的长度是相同的,页号是“隐含”的

       

     

    3.7 基本地址变换机构

    1. 用于实现逻辑地址到物理地址转换的一组硬件机构
    2. 通常会在系统中设置一个页表寄存器(PTR),存放页表在内存中的起始地址F页表长度M。进程未执行时,页表的始址和页表长度放在进程控制块(PCB)中,当进程被调度时,操作系统内核会把它们放到页表寄存器中。
    3. 设页面大小为L,逻辑地址A到物理地址E的变换过程如下:
      1. 计算页号Р和页内偏移量w(如果用十进制数手算,则P=A/L,W=A%L;但是在计算机实际运行时,逻辑地址结构是固定不变的,因此计算机硬件可以更快地得到二进制表示的页号、页内偏移量)
      2. 比较页号P和页表长度M,若P>M,则产生越界中断,否则继续执行。(注意:页号是从O开始的,而页表长度至少是1,因此P=M时也会越界)
      3. 页表中页号p对应的页表项地址=页表起始地址F+页号p*页表项长度,取出该页表项内容b,即为内存块号。(注意区分页表项长度、页表长度、页面大小的区别。页表长度指的是这个页表中总共有几个页表项,即总共有几个页;页表项长度指的是每个页表项占多大的存储空间;页面大小指的是一个页面占多大的存储空间)

       

    3.8 具有快表的地址变换机构

    1. 局部性原理
    2. 什么是快表(TLB)
    3. 引入快表后,地址的变换过程

    展开全文
  • 操作系统总结之磁盘管理

    千次阅读 2018-07-08 23:03:30
    对于操作系统来说,管理磁盘的三大要求和目标是: (1)合理有效利用磁盘:采用合理的文件存储空间分配算法,尽量减少磁盘碎片,提高硬盘的利用率; (2)提高磁盘的I/O速度:采用缓存等技术,提供访问速度; ...

      磁盘存储器具有容量大、存取速度快、支持随机存取的特点,因此被广泛应用于计算机系统中。对于操作系统来说,管理好磁盘的三大要求和目标是:

    (1)合理有效利用磁盘:采用合理的文件存储空间分配算法,尽量减少磁盘碎片,提高硬盘的利用率;
    (2)提高磁盘的I/O速度:采用缓存等技术,提供访问速度;
    (3)提高磁盘可靠性:采用冗余和纠错检错等技术,保证磁盘的数据不会被破坏。

    1. 外存的组织方式

      文件是存放在磁盘上的,而磁盘是以盘块为基本的分配单位的,那么一个文件是怎么存放在磁盘上的呢,这就是外存的组织方式,主要有以下三种:

    	1.连续组织方式
    	2.链接组织方式
    	3.索引组织方式
    

    文件的物理结构与外存分配方式有关,在采用连续分配方式时的文件物理结构是顺序式的文件结构,在采用链接分配方式将形成链接式文件结构,而索引分配方式将形成索引式文件结构。

    1.1 连续组织方式:

      要求为每一个文件分配一组相邻接的(也就是连续的)盘块。就好像分配一个连续的数组给文件使用一样,不过数组元素是磁盘的盘块。它的优点在于(1)顺序访问容易,(2)访问速度快,因为都放在 相邻或者同一个磁道 上,寻道时间很小。缺点为容易产生外部碎片,难以知道文件长度,难以为其分配空间,不利于删除和插入记录。

    1.2 链接组织方式:

      为每个文件分配不连续的磁盘空间,通过链接指针将一个文件的所有盘块链接在一起,由此形成链式文件结构。这种方式可以克服连续组织方式的缺点,分为隐式链接和显式链接两种形式。

    1.2.1 隐式链接:

      其中隐式链接的目录项需要包含文件的第一个盘块和最后一个盘块号,每一个盘块都有一个指向下一块盘块的指针(最后一个盘块除外)。但是这样只能顺序查找,速度慢。 此外,其可靠性较差,任何一个指针出现问题,都会导致整个链的断开。可以将几个盘块组成一个簇,然后以簇为单位进行分配,会减少查找指定块的时间,但是会增加内部碎片。
    这里写图片描述

    1.2.2 显式链接:

      **用于链接文件各物理块的指针显式地存放在内存的一张链接表中,该表在整个磁盘中仅设置一张。而文件第一个盘块号作为文件的物理地址存放在FCB中。**而那个链接表则叫做文件分配表(FAT:file allocation table)。

    	那么查找的时候,将会把该表拷贝至内存中,大大减少访问磁盘速度,提高了检索的速度。 
    

      这里写图片描述
      说明:表的序号从0开始,直至N-1,N为盘块总数,在每个表项中存放链接指针,即下一个盘块号,在该表中,凡是属于某一文件的第一个盘块号,或者说是每一条链的链首指针所对应的盘块号,均作为文件地址被填入相应的文件的FCB(File Control Block)的物理地址字段中,由于查找记录的过程是在内存中进行的,因而提高了检索速度,减少了访问磁盘的次数,由于分配给文件的所有盘块号都在该表中,故把该表称为文件分配表FAT(File Allocation Table)。

      缺点:不能支持高效的直接存储(要对一个较大的文件进行直接存取,须首先在FAT中顺序地查找很多盘块号);FAT需要占用较大的内存空间(由于一个文件所占用的盘块的盘块号是随机地分布在FAT中的,因而只有将整个FAT调入内存,才能保证FAT中找到一个文件的所有盘块号,当磁盘容量较大时,FAT占用的容量更大)

    1.2 索引组织方式:

    事实上,在打开某个文件时,只需要把该文件占用的盘块号的编号调入内存即可,完全没有必要把整个FAT调入内存,为此,应该将每个文件所对应的盘块号集中地放在一起,索引分配方式就是基于这种想法所形成的一种分配方式。其为每个文件分配一个索引块(表),再把分配给该文件的所有盘块号都记录在该索引块中,因而该索引块就是一个含有许多磁盘块号的数组。在建立一个文件时,只需要在为之建立的目录项中填上指向该索引块的指针(单级索引)。
      这里写图片描述

    说明:**索引方式支持直接访问,可在索引块中找到第i个盘块,索引方式也不会产生外部碎片,**当文件较大时,索引分配方式要优于链接分配方式。其主要问题在于:可能需要花费较多的外存空间,每当建立一个文件时,便须为之分配一个索引块,将分配给该文件的所有盘块号记录其中。对于小文件而言,索引块的利用率非常低。

    当OS为一个大文件分配磁盘空间时,如果所分配的盘块的盘块号已经装满一个索引块时,OS便为该文件分配另一个索引块,用于将以后继续为之分配的盘块号记录于其中,以此类推,然后再通过链指针将各索引块按序链接起来,当文件太大时,索引块太多,效率是低效的。此时,应该为这些索引块再建立一级索引,称为第一级索引,还可再建立索引,称为第二级索引等等。称为多级索引分配。
      这里写图片描述
       说明:在二级索引分配方式下,若每个盘块的大小为1KB,每个盘块号占4个字节,则在一个索引块可以存放256个盘块号,这样,在两级索引时,最多可以包括存放文件的盘块号总数为64K(256 * 256)个盘块号,所允许文件最大文件大小为64MB,若盘块号为4KB,则一级索引的最大文件大小为4MB,二级索引的最大文件大小为4GB。

    索引块 == 特殊的盘块,所以还是1KB == 1024B == 4*256 B    
    

    1.2.1 伟大的 Linux 系统所采用的索引组织方式之混合索引分配方式

    思想:

    ④ 将多种索引分配方式相结合而形成的一种分配方式:

    •  小文件:
      

    (1)直接地址(在FCB中设置10个直接地址项,每项中所存放的是该文件数据所在盘块的盘块号,假如每个盘块大小为4KB,当文件不大于40KB时,可以直接从FCB中读出该文件的全部盘号)

    •  中等文件:
      

    (2)一次间接地址(**为文件建立一个索引表,然后将该表首地址放入FCB中,需要时找到索引表的首地址,从而通过索引表找到所有的盘块号 。**其实质就是一级索引分配方式)

    •  大文件或者特大文件:
      

    (3)多次间接地址(当文件大于4MB + 40KB时,系统采用二次间址分配方式,其实质是两级索引分配方式,采用二次间址的最大文件大小为4GB,同理,可采用三次间接地址,允许文件最大大小为4TB)。

    实现:

    每个文件的索引结点含13个地址项 i.addr(0)~ i.addr(12), 每项2个字节; 前10项存放直接地址(物理块号), 若文件大于40kB,则用i.addr(10)指向单级索引块进行一次间接寻址,该块中最多可放1k个物理块号,文件可长达4MB; 还可用 i.addr(11) 和 i.addr(12) 作为二次和三次间接寻址, 文件最大长度分别可达4GB和4TB。

    这里写图片描述

    2. 磁盘空闲盘块的管理

    在上面的外存组织方式中,为一个文件分配空闲盘块,就需要知道哪些盘块是空闲的,记录磁盘有哪些空闲盘块有以下方法:
    (1)空闲表法:为外存上所有区域建立一张空闲表,每个空闲区对应于一个空闲表项,空闲表项里面有表项的序号、空闲区的第一个盘块号、空闲盘块数等信息:
    这里写图片描述
    对于空闲表法的空间分配和回收跟内存空间的动态分区分配类似,同样可以采用首次适应、最佳适应等算法,回收时,也会考虑回收区间相邻的空间,进行适当的拼接。
    (2)空闲链表法:将所有空闲盘块区拉成一条空闲链。这种方法对分配和回收比较简单,但是空闲盘块链可能会很长。
    (3)位示图法:利用磁盘空间的每一位来表示磁盘一个盘块是否空闲:
    这里写图片描述

    位示图法的分配和回收就是把相应的位置为0或者1,这种方法占用的空间小,适合保存在内存中,就不需要每次都访问磁盘。
    (4)成组链接法:(略)。

    3.提高磁盘I/O速度的途径

                            磁盘高速缓存
    

    磁盘的读取速度跟内存的读取速度相差4~6个数量级,为了提高磁盘访问速度,我们可以在内存中为磁盘盘块设置一个缓冲区,称为磁盘高速缓存,在缓冲区中保存一些盘块的副本,当有一个磁盘请求时,先在缓冲区里面查找是否有该盘块,若有,直接从缓冲区获取数据;如果没有再启动磁盘读入,并将内容送至缓冲区,以便下次访问。

    4.廉价磁盘冗余阵列(RAID)

    	设置多台磁盘存储器,并行地读取磁盘内容,加快I/O速度,同时采用容错技术提高可靠性。
    

    参考链接:

    https://blog.csdn.net/Ajay666/article/details/75098446
    https://www.cnblogs.com/tangshiguang/p/6746235.html

    展开全文
  • 操作系统磁盘空闲管理之位示图法

    千次阅读 2021-01-01 17:00:25
    位示图格式 从1开始的位示图 从0开始的位示图(最常用) 横向纵向N∗NN*NN∗N共N2N^2N2块 计算方式 已知第i行,第j列,盘块号B,位示图为N∗N的矩阵已知第i行,第j列,盘块号B,位示图为N*N的矩阵已知第i行,第j列...
  • 操作系统用位示图管理磁盘空间的分配与回收,c++
  • 计算机操作系统-4-设备管理

    千次阅读 2022-03-08 09:12:58
    计算机操作系统-4-设备管理
  • 用位示图管理磁盘空间,设计一个申请与申请与回收一个或几个磁盘块的分配与回收算法。要求打印或显示程序运行前和运行后的位示图,以及分配和回收磁盘的物理过程 提示: (1)磁盘的位示图用若干个字节构成,每一位对应...
  • 操作系统磁盘文件空间共有500块,若用字长为32位的位示图管理磁盘空间,试问: (1)位示图需多少个字? (2)第i字第j位对应的块号是多少? (3)给出申请/归还一块的工作流程 (1)位示图需要的字数计算:INT...
  • 操作系统文件管理实验代码

    千次阅读 2020-12-22 18:08:36
    实现了简单的文件系统操作。 没有实现磁盘块之间的连接,目录与磁盘属于一对一链接,没法指定磁盘块存放并且文件内容超出磁盘块就无法存储了。 #include<iostream> #include<string> using namespace ...
  • 超详细|一篇搞定操作系统——文件管理

    千次阅读 多人点赞 2021-01-06 00:28:16
    文章目录5.1 文件管理概述5.2 文件结构5.2.1 文件的逻辑结构5.2.2 文件的物理结构5.3 文件目录管理5.4 文件的存储设备5.4.1 文件的存储...所以在操作系统中又增加了文件管理功能,即构成一个文件系统,负责管理在外存
  • 今天和大家分享一下关于对win7系统对未分配磁盘空间进行分区设置的方法,在使用win7系统的过程中经常不知道如何去对win7系统对未分配磁盘空间进行分区进行设置,有什么好的办法去设置win7系统对未分配磁盘空间进行...
  • 文件系统管理的最小磁盘空间单位是()正确答案: C 你的答案: A (错误)扇区页面簇文件微软操作系统(DOS、WINDOWS等)中磁盘文件存储管理的最小单位叫做“簇”扇区:硬盘不是一次读写一个字节而是一次读写一个扇区...
  • Linux 磁盘操作管理

    千次阅读 2018-04-26 13:31:15
    实验九、磁盘操作管理一、实验要求(1)掌握常用的磁盘操作命令;(2)掌握挂载和卸载移动存储介质的方法。二、实验内容和实验步骤1、常用的磁盘操作命令【操作要求1】查看系统所识别的存储设备的命名。【操作步骤】...
  • 操作系统作业-模拟文件管理系统 文末有源码 文章目录操作系统作业-模拟文件管理系统项目需求基本任务功能描述项目目的开发环境项目结构系统分析显示链接法位图、FAT表系统设计及实现组件设计功能实现创建文件删除...
  • 实现内存空间扩充的技术 一、覆盖技术 用于解决“程序大小超过物理内存总和”的问题。 思想: 将程序分为多个段,常用的段常驻在内存,不常用的段在需要时才从外存调入内存。 内存中分为一个“固定区”和若干个...
  • 操作系统实习 磁盘管理 磁盘初始化时把磁盘存储空间分成许多块(扇区),这些空间可以被多个用户...怎样有效地管理磁盘存储空间操作系统应解决的一个重要问题,通过本实习使学生掌握磁盘存储空间的分配和回收算法。
  • 操作系统学习笔记:文件管理

    千次阅读 2020-12-13 21:50:17
    对于文件及文件系统的概念、存放文件的介质、文件存放形式、文件操作形式、文件系统的安全性、磁盘调度算法的知识进行了相关的介绍!
  • Linux——磁盘管理与文件系统

    千次阅读 2022-03-28 18:08:22
    磁盘管理与文件系统一、磁盘结构和分区表示1.1 磁盘基础1.1.1 硬盘的结构1.1.2 硬盘的接口1.2磁盘分区表示二、管理磁盘及分区 一、磁盘结构和分区表示 1.1 磁盘基础 硬盘(Hard Disk Driver),简称HDD,是计算机常用...
  • 文件管理 文件和文件系统 ...在操作系统中增加文件管理功能,专门管理在外存上的文件,并把对文件的存取、共享和保护等手段提供给用户。 文件和文件系统 文件系统的管理功能,是通过把它所管理的程...
  • 操作系统之文件管理

    千次阅读 多人点赞 2020-09-22 03:05:15
    一、文件与文件系统 1.1 文件是什么 文件是对磁盘的抽象 所谓文件是指一组带标识(标识即为文件名)的、在逻辑上有完整意义的信息项的序列。...从操作系统角度:怎样组织、管理文件 * 文件的描述、分类
  • 操作系统对内存管理

    万次阅读 2017-04-20 11:08:11
    地址空间也可以这样理解,32位机上,创建进程时操作系统为进程分配4GB的独立地址空间,用户可以使用这4GB的独立地址空间。但是,反过来一想,给每个进程都分配4GB地址空间,对于8GB内存的计算机而

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 405,190
精华内容 162,076
关键字:

操作系统磁盘空间管理

友情链接: Dlg4.rar