① 操作系统的内存分配一般有哪几种方式,各有什么优缺点
变长:内存时比较灵活,但是易产生内存碎片。
定长:灵活性差,但分配效率较高,不会产生内存碎片。
② 26 文件外存分配方式
目前,常用的外存分配方法有 连续分配 、 链接分配 和 索引分配 三种。采用不同的分配方式时,将形成不同的文件物理结构。
连续分配方式对应顺序式文件结构,链接分配方式形成链接式文件结构,索引分配方式将形成索引式文件结构。有的系统(如DOS操作系统)对三种方法都支持,但是更普遍的是 一个系统只提供一种方法的支持 。
连续分配方法要求每个文件在磁盘上占有一组连续的块,如图所示。这样所形成的文件结构称为 顺序文件结构 ,此时的物理文件称为 顺序文件 。这种分配方式保证了逻辑文件中的的记录顺序与存储器中的文件占用盘块的顺序是 一致的 。
优点是 实现简单、存取速度快 ,支持顺序访问和直接访问,作业访问磁盘时需要的寻道数和寻道时间最短。
缺点在于,文件长度 不宜动态增加 ,因为一个文件末尾后的盘块可能已经分配给其他文件,一旦需要增加, 就需要大量移动盘块。在外存上使用紧凑技术所花费的时间远比内存紧凑一次所花费的时间多得多。
此外,反复增删文件后会产生 外部碎片 (与内存管理分配方式中的碎 片相似),并且很难确定一个文件需要的空间大小,因而只适用于长度固定的文件。
链接分配是釆取 离散分配 的方式,消除了外部碎片,故而显着地 提高了磁盘空间的利用率 ;又因为是根据文件的当前需求,为它分配必需的盘块,当文件动态增长时,可以动态地再为它分配盘块,故而 无需事先知道文件的大小 。此外,对文件的 增、删、改也非常方便 。
链接分配又可以分为隐式链接和显式链接两种形式。
文件,目录中每个目录项都包括 指向链接文件第一盘块和最后一个盘块的指针 。磁盘块分布在磁盘的任何地方,除最后一个盘块外,每一个盘块都有指向下一个盘块的指针,这些指针对用户是透明的。
为了提高检索速度和减小指针所占存储空间,可以将几个盘块组成一个簇(cluster),虽然成倍 减少了访问时间,以及指针存储空间,但却增大了内部碎片,改进很有限 。
显示链接把用于链接文件各物理块的指针,显示地存放在内存的一张链接表中。该表在整个磁盘仅设置一张。
表的序号从0开始,直至N-1,N为盘块总数,在每个表项中存放链接指针,即下一个盘块号。
在该表中,凡是属于某一文件的第一个盘块号(链首指针所对应的盘块号)均作为文件地址被填入相应的文件的FCB的物理地址字段中。
由于查找记录的过程是 在内存中进行的,因而提高了检索速度,减少了访问磁盘的次数 。由于分配给文件的所有盘块号都在该表中,故把该表称为文件分配表FAT(File Allocation Table)。
在打开某个文件时,只需把该文件占用的盘块号的编号调入内存即可, 无需把整个FAT调入内存 。为此,将每个文件所对应的盘块号集中地放在一起,索引分配方式就是基于此想法所形成的一种分配方式。
其为每个文件分配一个索引表,再把分配给该文件的所有盘块号都记录在该索引块中,因而该索引块就是一个含有许多磁盘块号的数组。在建立一个文件时,只需要在为之建立的目录项中填上指向该索引块的指针。
当文件太大时,索引块太多,单级索引是低效的 。此时,为这些索引块再建立一级索引,称为第一级索引,还可再建立索引,称为第二级索引等等。称为多级索引分配。
在二级索引分配方式下,若每个盘块的大小为1KB,每个盘块号占4个字节,在一个索引块可以存放256个盘块号。则,在两级索引时,最多可以包括存放文件的盘块号总数为64K(256 * 256)个盘块号,所允许文件最大长度为64MB。
若盘块号为4KB,则一级索引的最大文件大小为4MB,二级索引的最大文件大小为4GB。
将 多种索引分配方式相结合 而形成的一种分配方式,如直接地址,一次间接地址,多次间接地址。
Unix SystemV的分配采用了三级索引分配方式。共设置了13个索引地址项。前10个:iaddr(0)~iaddr(9)为直接地址项,iaddr(10)为一次间接地址项,iaddr(11)为二次间接地址项,iaddr(12)为三次间接地址项。
③ 操作系统中文件系统经常使用的分配方式
一、程序载入
在早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址。当计算机同时运行多个程序时,必须保证这些程序用到的内存总量要小于计算机实际物理内存的大小。
这样会造成的问题有:
(1):进程地址空间不隔离。由于程序都是直接访问物理内存,所以恶意程序可以随意修改别的进程的内存数据,以达到破坏的目的。有些非恶意的,但是有bug的程序也可能不小心修改了其它程序的内存数据,就会导致其它程序的运行出现异常。
(2):内存使用效率低。有大量的数据在装入装出,导致效率十分低下。
(3):程序运行的地址不确定。因为是随机分配的,所以程序运行的地址是不确定的。
二、虚拟内存
为了解决上述问题,人们想到了一种变通的方法,就是增加一个中间层,利用一种间接的地址访问方法访问物理内存。按照这种方法,程序中访问的内存地址不再是实际的物理内存地址,而是一个虚拟地址,然后由操作系统将这个虚拟地址映射到适当的物理内存地址上。这样,只要操作系统处理好虚拟地址到物理内存地址的映射,就可以保证不同的程序最终访问的内存地址位于不同的区域,彼此没有重叠,就可以达到内存地址空间隔离的效果。人们之所以要创建一个虚拟地址空间,目的是为了解决进程地址空间隔离的问题。但程序要想执行,必须运行在真实的内存上,所以,必须在虚拟地址与物理地址间建立一种映射关系。这样,通过映射机制,当程序访问虚拟地址空间上的某个地址值时,就相当于访问了物理地址空间中的另一个值。人们想到了一种分段(Sagmentation)的方法,它的思想是在虚拟地址空间和物理地址空间之间做一一映射。
这种分段的映射方法虽然解决了上述中的问题一和问题三,但并没能解决问题二,即内存的使用效率问题。在分段的映射方法中,每次换入换出内存的都是整个程序,这样会造成大量的磁盘访问操作,导致效率低下。所以这种映射方法还是稍显粗糙,粒度比较大。实际上,程序的运行有局部性特点,在某个时间段内,程序只是访问程序的一小部分数据,也就是说,程序的大部分数据在一个时间段内都不会被用到。基于这种情况,人们想到了粒度更小的内存分割和映射方法,这种方法就是分页(Paging)。
(三):分页
分页的基本方法是,将地址空间分成许多的页。每页的大小由CPU决定,然后由操作系统选择页的大小。目前Inter系列的CPU支持4KB或4MB的页大小,而PC上目前都选择使用4KB。按这种选择,4GB虚拟地址空间共可以分成1048576个页,512M的物理内存可以分为131072个页。显然虚拟空间的页数要比物理空间的页数多得多。分页方法的核心思想就是当可执行文件执行到第x页时,就为第x页分配一个内存页y,然后再将这个内存页添加到进程虚拟地址空间的映射表中,这个映射表就相当于一个y=f(x)函数。应用程序通过这个映射表就可以访问到x页关联的y页了。
一 页式管理
1 页式管理的基本原理将各进程的虚拟空间划分成若干个长度相等的页(page),页式管理把内存空间按页的大小划分成片或者页面(page frame),然后把页式虚拟地址与内存地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题。页式管理采用请求调页或预调页技术实现了内外存存储器的统一管理。 它分为
1 静态页式管理。静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。系统通过存储页面表、请求表以及页表来完成内存的分配工作。静态页式管理解决了分区管理时的碎片问题。但是,由于静态页式管理要求进程或作业在执行前全部装入内存,如果可用页面数小于用户要求时,该作业或进程只好等待。而且作业和进程的大小仍受内存可用页面数的限制。
2 动态页式管理。动态页式管理是在静态页式管理的基础上发展起来的。它分为请求页式管理和预调入页式管理。
优点: 没有外碎片,每个内碎片不超过页大小。一个程序不必连续存放。便于改变程序占用空间的大小(主要指随着程序运行而动态生成的数据增多,要求地址空间相应增长,通常由系统调用完成而不是操作系统自动完成)。
缺点:程序全部装入内存。
要求有相应的硬件支持。例如地址变换机构,缺页中断的产生和选择淘汰页面等都要求有相应的硬件支持。这增加了机器成本。增加了系统开销,例如缺页中断处理机,请求调页的算法如选择不当,有可能产生抖动现象。 虽然消除了碎片,但每个作业或进程的最后一页内总有一部分空间得不到利用果页面较大,则这一部分的损失仍然较大。
二 段式管理的基本思想
把程序按内容或过程(函数)关系分成段,每段有自己的名字。一个用户作业或进程所包含的段对应一个二维线形虚拟空间,也就是一个二维虚拟存储器。段式管理程序以段为单位分配内存,然后通过地址影射机构把段式虚拟地址转换为实际内存物理地址。
程序通过分段(segmentation)划分为多个模块,如代码段、数据段、共享段。其优点是: 可以分别编写和编译。 可以针对不同类型的段采取不同的保护。 可以按段为单位来进行共享,包括通过动态链接进行代码共享。
三 段页式管理的实现原理
1 虚地址的构成
一个进程中所包含的具有独立逻辑功能的程序或数据仍被划分为段,并有各自的段号s。这反映相继承了段式管理的特征。其次,对于段s中的程序或数据,则按照一定的大小将其划分为不同的页。和页式系统一样,最后不足一页的部分仍占一页。这反映了段页式管理中的页式特征。从而,段页式管理时的进程的虚拟地址空间中的虚拟地址由三部分组成:即段号s,页号P和页内相对地址d。虚拟空间的最小单位是页而不是段,从而内存可用区也就被划分成为着干个大小相等的页面,且每段所拥有的程序和数据在内存中可以分开存放。分段的大小也不再受内存可用区的限制。
2 段表和页表
为了实现段页式管理,系统必须为每个作业或进程建立一张段表以管理内存分配与释放、缺段处理、存储保护相地址变换等。另外,由于一个段又被划分成了若干页,每个段又必须建立一张页表以把段中的虚页变换成内存中的实际页面。显然,与页式管理时相同,页表中也要有相应的实现缺页中断处理和页面保护等功能的表项。另外,由于在段页式管理中,页表不再是属于进程而是属于某个段,因此,段表中应有专项指出该段所对应页表的页表始址和页表长度。
3 动态地址变换过程
在一般使用段页式存储管理方式的计算机系统中,都在内存中辟出一块固定的区域存放进程的段表和页表。因此,在段页式管理系统中,要对内存中指令或数据进行一次存取的话,至少需要访问三次以上的内存:
第一次是由段表地址寄存器得段表始址后访问段表,由此取出对应段的页表在内存中的地址。
第二次则是访问页表得到所要访问的物理地址。
第三次才能访问真正需要访问的物理单元。
显然,这将使CPU的执行指令速度大大降低。为了提高地址转换速度,设置快速联想寄存器就显得比段式管理或页式管理时更加需要。在快速联想寄存器中,存放当前最常用的段号s、页号p和对应的内存页面与其它控制用栏目。当要访问内存空间某一单元时,可在通过段表、页表进行内存地址查找的同时,根据快速联想寄存器查找其段号和页号。如果所要访问的段或页在快速联想寄存器中,则系统不再访问内存中的段表、页表而直接把快速联想寄存器中的值与页内相对地址d拼接起来得到内存地址。
总之,因为段页式管理是段式管理的页式管理方案结合而成的,所以具有它们二者的优点。但反过来说,由于管理软件的增加,复杂性和开销也就随之增加了。另外,需要的硬件以及占用的内存也有所增加。更重要的是,如果不采用联想寄存器的方式提高CPU的访内速度,将会使得执行速度大大下降
④ 多处理机中存储器的地址有几种分配方法
电脑存储器分为内存储器和外存储器:内存又分为随机存取存储器(RAM)和只读存储器(ROM)两种。ROM是只能读出信息,不能写入信息,这里的存放信息能长期保存而不受停电的影响,关机后开机,又可以从中读出信息。因此ROM中常存放管理机器本身的监控程序和一些服务程序。RAM的特点是可读可写,但关机后里面的信息自动消失。因此一般用来存储电脑运行时所需要的程序,我们通常说的内存条指的就是RAM。外存是电脑中存储信息的重要部件,它用来存储大量数据,有硬盘、软盘、光盘、U盘、移动硬盘等等。其中硬盘固定在电脑主机箱内,容量从几十G到几百G不等。 )SBBAX, H; )MOVAX,SEGTABL·给DMA控制逻辑指明数据传送方向是输入(主存写)还是输出(主存读);·向DMA设备地址寄存器送入设备号,并启动设备;·向DMA主存地址寄存器送入交换数据的主存起始地址;·对字计数器赋以交换数据的个数。我只负责整理
⑤ 内存为程序分配空间的四种分配方式
存储器是个宝贵但却有限的资源。一流的操作系统,需要能够有效地管理及利用存储器。
内存为程序分配空间有四种分配方式:
1、连续分配方式
2、基本分页存储管理方式
3、基本分段存储管理方式
4、段页式存储管理方式
首先讲连续分配方式。 连续分配方式 出现的时间比较早,曾广泛应用于20世纪60~70年代的OS中,但是它至今仍然在内存管理方式中占有一席之地,原因在于它 实现起来比较方便,所需的硬件支持最少 。连续分配方式又可细分为四种: 单一连续分配、固定分区分配、动态分区分配和动态重定位分区分配 。
其中固定分区的分配方式,因为分区固定,所以缺乏灵活性,即 当程序太小时,会造成内存空间的浪费( 内部碎片 ) ; 程序太大时,一个分区又不足以容纳,致使程序无法运行( 外部碎片 ) 。但尽管如此,当一台计算机去控制多个相同对象的时候,由于这些对象内存大小相同,所以完全可以采用这种内存管理方式,而且是最高效的。这里我们可以看出存储器管理机制的多面性:没有那种存储器管理机制是完全没有用的,在适合的场合下,一种被认为最不合理的分配方案却可能称为最高效的分配方案。 一切都要从实际问题出发,进行设计。
为了解决固定分区分配方式的缺乏灵活性,出现了 动态分配方式 。动态分配方式采用一些 寻表(Eg: 空闲链表 ) 的方式,查找能符合程序需要的空闲内存分区。但代价是增加了系统运行的开销,而且内存空闲表本身是一个文件,必然会占用一部分宝贵的内存资源,而且有些算法还会增加内存碎片。
可重定位分区分配通过对程序实现成定位,从而可以将内存块进行搬移,将小块拼成大块,将小空闲“紧凑”成大空闲,腾出较大的内存以容纳新的程序进程。
连续分配方式 会形成许多“碎片”,虽然可以通过“紧凑”方式将许多碎片拼接成可用的大块空间,但须为之付出很大开销。所以提出了“ 离散分配方式 ”的想法。如果 离散分配的基本单位是页 ,则称为 分页管理方式 ;如果离散分配的基本单位是段,则称为 分段管理方式 。
分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页、第1页等。相应地,也把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框(frame),也同样为它们加以编号,如0#块、1#块等等。在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为“ 页内碎片 ”。
在分页系统中,允许将进程的各个页离散地存储在内存不同的物理块中(所以能实现离散分配方式) ,但系统应能保证进程的正确运行,即能在内存中找到每个页面所对应的物理块。为此,系统又为每个进程建立了一张页面映像表,简称 页表 。在进程地址空间内的所有页,依次在页表中有一页表项,其中记录了相应页在内存中对应的物理块号。在配置了页表后,进程执行时,通过查找该表,即可找到每页在内存中的物理块号。可见, 页表的作用是实现从页号到物理块号的地址映射 。
为了能够将用户地址空间中的 逻辑地址,变换为内存空间中的物理地址 ,在系统中必须设置 地址变换机构 。地址变换任务是借助于页表来完成的。
页表 的功能可由一组专门的寄存器来实现。由于寄存器成本较高,且大多数现代计算机的页表又很大,使页表项总数可达几千甚至几十万个,显然这些页表项不可能都用寄存器来实现,因此,页表大多驻留在内存中。因为一个进程可以通过它的PCB来时时保存自己的状态,等到CPU要处理它的时候才将PCB交给寄存器,所以,系统中虽然可以运行多个进程,但也只需要一个页表寄存器就可以了。
由于 页表是存放在内存中 的,这使得 CPU在每存取一个数据时,都要两次访问内存 。为了提高地址变换速度,在地址变化机构中增设了一个 具有并行查询能力的高速缓冲寄存器 ,又称为“联想寄存器”(Associative Lookaside Buffer)。
在单级页表的基础上,为了适应非常大的逻辑空间,出现了两级和多级页表,但是,他们的原理和单级页表是一样的,只不过为了适应地址变换层次的增加,需要在地址变换机构中增设外层的页表寄存器。
分段存储管理方式 的目的,主要是为了满足用户(程序员)在编程和使用上多方面的要求,其中有些要求是其他几种存储管理方式所难以满足的。因此,这种存储管理方式已成为当今所有存储管理方式的基础。
分段管理方式和分页管理方式在实现思路上是很相似的,只不过他们的基本单位不同。分段有 段表 ,也有 地址变换机构 ,为了提高检索速度,同样增设 联想寄存器(具有并行查询能力的高速缓冲寄存器) 。所以有些具体细节在这个不再赘述。
分页和分段的主要区别:
1、两者相似之处:两者 都采用离散分配方式,且都要通过地址映射机构来实现地址变换 。
2、两者的不同之处:
(1)页是信息的 物理单位 ,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率。或者说,分页仅仅是由于 系统管理的需要 而不是用户的需要。段则是信息的 逻辑单位 ,它含有一组其意义相对完整的信息。 分段的目的是为了能更好地满足用户的需要 。
(2) 页的大小固定 且由系统决定,而 段的长度却不固定 。
(3)分页的作业地址空间是 一维 的,即单一的线性地址空间;而分段的作业地址空间则是 二维 的。
前面所介绍的分页和分段存储管理方式都各有优缺点。 分页系统能有效地 提高内存利用率 ,而分段系统则能很好地 满足用户需求 。 我们希望能够把两者的优点结合,于是出现了段页式存储管理方式。
段页式系统的基本原理,是分段和分页原理的结合,即 先将用户程序分成若干个段,再把每个段分成若干个页 ,并为每一个段赋予一个段名。在段页式系统中,地址结构由段号、段内页号和页内地址三部分组成。
和前两种存储管理方式相同,段页式存储管理方式同样需要增设联想寄存器。
离散分配方式 基于将一个进程直接分散地分配到许多不相邻的分区中的思想,分为分页式存储管理,分段式存储管理和段页式存储管理. 分页式存储管理旨在提高内存利用率,满足系统管理的需要,分段式存储管理则旨在满足用户(程序员)的需要,在实现共享和保护方面优于分页式存储管理,而段页式存储管理则是将两者结合起来,取长补短,即具有分段系统便于实现,可共享,易于保护,可动态链接等优点,又能像分页系统那样很好的解决外部碎片的问题,以及为各个分段可离散分配内存等问题,显然是一种比较有效的存储管理方式。
更多Linux内核视频教程文档资料免费领取【 内核 】自行获取。
内核学习网站:
Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-学习视频教程-腾讯课堂
⑥ 分区存储管理中常用哪些分配策略
1、固定分区存储管理
其基本思想是将内存划分成若干固定大小的分区,每个分区中最多只能装入一个作业。当作业申请内存时,系统按一定的算法为其选择一个适当的分区,并装入内存运行。由于分区大小是事先固定的,因而可容纳作业的大小受到限制,而且当用户作业的地址空间小于分区的存储空间时,造成存储空间浪费。
一、空间的分配与回收
系统设置一张“分区分配表”来描述各分区的使用情况,登记的内容应包括:分区号、起始地址、长度和占用标志。其中占用标志为“0”时,表示目前该分区空闲;否则登记占用作业名(或作业号)。有了“分区分配表”,空间分配与回收工作是比较简单的。
二、地址转换和存储保护
固定分区管理可以采用静态重定位方式进行地址映射。
为了实现存储保护,处理器设置了一对“下限寄存器”和“上限寄存器”。当一个已经被装入主存储器的作业能够得到处理器运行时,进程调度应记录当前运行作业所在的分区号,且把该分区的下限地址和上限地址分别送入下限寄存器和上限寄存器中。处理器执行该作业的指令时必须核对其要访问的绝对地址是否越界。
三、多作业队列的固定分区管理
为避免小作业被分配到大的分区中造成空间的浪费,可采用多作业队列的方法。即系统按分区数设置多个作业队列,将作业按其大小排到不同的队列中,一个队列对应某一个分区,以提高内存利用率。
2、可变分区存储管理
可变分区存储管理不是预先将内存划分分区,而是在作业装入内存时建立分区,使分区的大小正好与作业要求的存储空间相等。这种处理方式使内存分配有较大的灵活性,也提高了内存利用率。但是随着对内存不断地分配、释放操作会引起存储碎片的产生。
一、空间的分配与回收
采用可变分区存储管理,系统中的分区个数与分区的大小都在不断地变化,系统利用“空闲区表”来管理内存中的空闲分区,其中登记空闲区的起始地址、长度和状态。当有作业要进入内存时,在“空闲区表”中查找状态为“未分配”且长度大于或等于作业的空闲分区分配给作业,并做适当调整;当一个作业运行完成时,应将该作业占用的空间作为空闲区归还给系统。
可以采用首先适应算法、最佳(优)适应算法和最坏适应算法三种分配策略之一进行内存分配。
二、地址转换和存储保护
可变分区存储管理一般采用动态重定位的方式,为实现地址重定位和存储保护,系统设置相应的硬件:基址/限长寄存器(或上界/下界寄存器)、加法器、比较线路等。
基址寄存器用来存放程序在内存的起始地址,限长寄存器用来存放程序的长度。处理机在执行时,用程序中的相对地址加上基址寄存器中的基地址,形成一个绝对地址,并将相对地址与限长寄存器进行计算比较,检查是否发生地址越界。
三、存储碎片与程序的移动
所谓碎片是指内存中出现的一些零散的小空闲区域。由于碎片都很小,无法再利用。如果内存中碎片很多,将会造成严重的存储资源浪费。解决碎片的方法是移动所有的占用区域,使所有的空闲区合并成一片连续区域,这一技术称为移动技术(紧凑技术)。移动技术除了可解决碎片问题还使内存中的作业进行扩充。显然,移动带来系统开销加大,并且当一个作业如果正与外设进行I/O时,该作业是无法移动的。
3、页式存储管理
基本原理
1.等分内存
页式存储管理将内存空间划分成等长的若干区域,每个区域的大小一般取2的整数幂,称为一个物理页面有时称为块。内存的所有物理页面从0开始编号,称作物理页号。
2.逻辑地址
系统将程序的逻辑空间按照同样大小也划分成若干页面,称为逻辑页面也称为页。程序的各个逻辑页面从0开始依次编号,称作逻辑页号或相对页号。每个页面内从0开始编址,称为页内地址。程序中的逻辑地址由两部分组成:
逻辑地址
页号p
页内地址 d
3.内存分配
系统可用一张“位示图”来登记内存中各块的分配情况,存储分配时以页面(块)为单位,并按程序的页数多少进行分配。相邻的页面在内存中不一定相邻,即分配给程序的内存块之间不一定连续。
对程序地址空间的分页是系统自动进行的,即对用户是透明的。由于页面尺寸为2的整数次幂,故相对地址中的高位部分即为页号,低位部分为页内地址。
3.5.2实现原理
1.页表
系统为每个进程建立一张页表,用于记录进程逻辑页面与内存物理页面之间的对应关系。地址空间有多少页,该页表里就登记多少行,且按逻辑页的顺序排列,形如:
逻辑页号
主存块号
0
B0
1
B1
2
B2
3
B3
2.地址映射过程
页式存储管理采用动态重定位,即在程序的执行过程中完成地址转换。处理器每执行一条指令,就将指令中的逻辑地址(p,d)取来从中得到逻辑页号(p),硬件机构按此页号查页表,得到内存的块号B’,便形成绝对地址(B’,d),处理器即按此地址访问主存。
3.页面的共享与保护
当多个不同进程中需要有相同页面信息时,可以在主存中只保留一个副本,只要让这些进程各自的有关项中指向内存同一块号即可。同时在页表中设置相应的“存取权限”,对不同进程的访问权限进行各种必要的限制。
4、段式存储管理
基本原理
1.逻辑地址空间
程序按逻辑上有完整意义的段来划分,称为逻辑段。例如主程序、子程序、数据等都可各成一段。将一个程序的所有逻辑段从0开始编号,称为段号。每一个逻辑段都是从0开始编址,称为段内地址。
2.逻辑地址
程序中的逻辑地址由段号和段内地址(s,d)两部分组成。
3.内存分配
系统不进行预先划分,而是以段为单位进行内存分配,为每一个逻辑段分配一个连续的内存区(物理段)。逻辑上连续的段在内存不一定连续存放。
3.6.2实现方法
1.段表
系统为每个进程建立一张段表,用于记录进程的逻辑段与内存物理段之间的对应关系,至少应包括逻辑段号、物理段首地址和该段长度三项内容。
2.建立空闲区表
系统中设立一张内存空闲区表,记录内存中空闲区域情况,用于段的分配和回收内存。
3.地址映射过程
段式存储管理采用动态重定位,处理器每执行一条指令,就将指令中的逻辑地址(s,d)取来从中得到逻辑段号(s),硬件机构按此段号查段表,得到该段在内存的首地址S’, 该段在内存的首地址S’加上段内地址d,便形成绝对地址(S’+d),处理器即按此地址访问主存。
5、段页式存储管理
页式存储管理的特征是等分内存,解决了碎片问题;段式存储管理的特征是逻辑分段,便于实现共享。为了保持页式和段式上的优点,结合两种存储管理方案,形成了段页式存储管理。
段页式存储管理的基本思想是:把内存划分为大小相等的页面;将程序按其逻辑关系划分为若干段;再按照页面的大小,把每一段划分成若干页面。程序的逻辑地址由三部分组成,形式如下:
逻辑地址
段号s
页号p
页内地址d
内存是以页为基本单位分配给每个程序的,在逻辑上相邻的页面内存不一定相邻。
系统为每个进程建立一张段表,为进程的每一段各建立一张页表。地址转换过程,要经过查段表、页表后才能得到最终的物理地址。
⑦ mc51单片机中通用的存储器地址两种分配方法
8051片内有4kB的程序存储单元,其地址为0000H—0FFFH,其中一组特殊是0000H—0002H单元,系统复位后,PC为0000H,单片机从0000H单元开始执行程序 ,另一组特殊单元是0003H—002AH,这40个单元各有用途,它们被均匀地分为五段,它们的定义如下:
0003H—000AH 外部中断0中断地址区。
000BH—0012H 定时/计数器0中断地址区。
0013H—001AH 外部中断1中断地址区。
001BH—0022H 定时/计数器1中断地址区。
0023H—002AH 串行中断地址区。
可见以上的40个单元是专门用于存放中断处理程序的地址单元
二、数据存储器
MCS-51内部RAM有128或256个字节的用户数据存储(不同的型号有分别),它们是用于存放执行的中间结果和过程数据的。MCS-51的数据存储器均可读写,部分单元还可以位寻址。
1、 8051内部RAM共有256个单元,这256个单元共分为两部分。其一是地址从00H—7FH单元(共128个字节)为用户数据RAM。从80H—FFH地址单元(也是128个字节)为特殊寄存器(SFR)单元。从图1中可清楚地看出它们的结构分布。
在00H—1FH共32个单元中被均匀地分为四块,每块包含八个8位寄存器,均以R0—R7来命名,我们常称这些寄存器为通用寄存器。
内部RAM的20H—2FH单元为位寻址区,既可作为一般单元用字节寻址,也可对它们的位进行寻址。位寻址区共有16个字节,128个位,位地址为00H—7FH。。
⑧ 存储器管理的连续分配存储管理方式有哪些
连续分配方式.它是指为了一个用户程序分配一个连续的内存空间.可以分为单一连续分配、固定分区分配、动态分区分配以及动态重定位分区分配四种方式。不过今天我们讲的是固定分区分配和动态分区分配。
固定分区分配是最简单的一种可运行多道程序的存储管理方式。 一、基本思想:在系统中把用户区预先划分成若干个固定分区(每个分区首地址固定,每个分区长度是固定),每个分区可供一个用户程序独占使用。注意:每个分区大小可以相同,也可以不相同。 二、主存分配与回收:借助主存分配表。 三、地址转换(静态重定位):物理地址=分区起始地址+逻辑地址。其中划分分区方法包括分区大小相等和分区大小不等。
动态分区分配是根据进程的实际需要,动态地为之分配内存空间。一、基本思想:按用户程序需求动态划分主存供用户程序使用。(每个分区首地址是动态的,每个分区的长度也是动态的) 二、主存分配与回收-->(1)未分配表(登记未分配出去的分区情况);(2)已分配表(登记已经分配出去的分区情况)。 三、地址转换:物理地址=分区起始地址+逻辑地址。 四、分区分配算法:从空闲分区中选择分区分www.hbbz08.com 配给用户程序的策略。 (1)首次适应算法(最先适应)顺序查询为分配表,从表中找出第一个可以满足作业申请的分区划分部分分配给用户作业。 (2)循环首次适应算法 (3)最佳适应算法:从空闲分区中找出一个能满足用户作业申请的最小空闲分区划分给用户作业使用(有利于大作业执行) (4)最坏适应算法:从空闲分区中挑最大的分区划分给用户程序使用(有利于中、小作业执行)
⑨ 常见的存储分配策略有几种它们都适合于什么性质的语言
1 静态分配若在编译阶段就能确定源程序中各个数据实体的存储空间大小,则可以采用较简单的静态存储管理。适合静态管理的语言应具备条件:数组上下界是常数、过程调用不允许递归、不允许动态建立数据实体。
2栈式分配适用于允许递归调用的程序设计语言
3 堆式分配对于允许程序在运行时为变量动态申请和释放存储空间的语言,采用堆式分配是最有效的解决方案