存储器管理

操作系统之存储器管理 存储器的层次结构存储器的层次如下图:上图中,寄存器和主存储器称为可执行存储器。高速缓存的作用是缓和CPU与内存之间的速度差异,主要由硬件实现。磁盘缓存的出现是由于内存容量不够,需要引入磁盘,然而磁盘的I/O速度远低于主存的访问速度,为了缓和两者之间在速度上的差异,设置了磁盘缓存。磁盘缓存与高速缓存不同,它本身并不是实际存在的存储器,是利用主存中的部分空间暂时存放从磁盘中读出写入的信息。程序的装入与链 阅读详情

OS系统存储器管理的任务,就是动态实现用户区的管理,以便将尽可能多的进程装入存储器中,踢高存储器的利用率。存储器管理要实现的目标是:为用户提供方便、安全和充分大的存储空间。

存储管理应具有下列功能:

(1)分配和回收。由OS完成内存空间的分配和管理,使程序员摆脱存储空间分配的麻烦,提高编程效率。为此系统应该记住内存空间的使用情况,实施内存的分配,回收系统或应用释放的空间。

(2)抽象和映射。主存储器被抽象,使得进程认为分配给它的是地址空间。在多道程序设计系统中,地址空间中的逻辑地址和物理地址不可能一致,因此,存储管理必须将物理地址转换为虚拟地址。

(3)内存的扩充。借助覆盖技术和虚拟存储技术,为用户提供比内存空间更大的地址空间,从而实现从逻辑上实现扩大内存容量的目的。

(4)存储的保护。保护进入内存的各道作业都在自己的内存空间运行,互不干扰。既要防止一道作业由于错误而破坏其他作业,也要防止破坏系统程序。这种保护一般由硬件和软件配合完成。

存储管理的基本概念

程序的装入

在多道程序环境下,只有当先为某个程序创建进程后,该程序才能运行。创建进程,首先需要将程序和数据装入内存。将一个用户源程序变成一个可在内存中执行的程序,通常需要经过以下几步:

(1)编译。由编译程序将用户源代码编译成若干个目标模块。

(2)链接。由链接程序将编译后形成的目标模块以及它们所需的函数库链接在一起,形成一个装入模块。

(3)装入。由装入程序将装入模块装入内存。

为了提高利用率,引入了动态装入方式,上述几个步骤往往交织在一起。

1.绝对装入方式。

在编译时如果知道程序驻留在内存的什么地方,那么编译程序将产生绝对地址的目标代码。绝对装入程序按照装入模块的地址,将程序和数据装入内存。装入模块被装入内存后,由于程序中的逻辑地址和实际内存地址相同,故不需对程序和数据进行修改。

这种装入方式的特点是:

(1)知道程序在内存中的位置,故编译时产生绝对地址。

(2)装入模块后,由于程序中的逻辑地址和实际地址完全相同,不需对程序和数据进行修改。

(3)只能将目标模块装入内存中事先指定的位置,仅适用于单道程序环境。

(4)通常在程序中采用符号地址,然后在汇编和编译时,再将这些符号地址转换为绝对地址。

2.可重定位装入方式。

一个应用程序编译后,通常会形成若干个目标模块程序,这些模块再经过链接而形成可装入执行的程序。这些程序的地址都从“0”开始编址,程序中的其他地址都相对于该地址进行计算;由这些地址形成的地址范围被称为地址空间,其中的地址称为逻辑地址。逻辑地址又称为虚地址、相对地址。存储空间也称为内存空间,是指内存中一系列存储信息的物理单元的集合,称为物理地址,又称为绝对地址和实地址。为了保证程序的正确性,需要对程序中的地址进行变换,这种将逻辑地址转换为物理地址的过程也称为地址重定位,也称为地址映射或地址变换。这种地址变换只在装入时一次完成,以后不再改变,所以称为静态重定位。静态重定位的特点是在一个作业装入内存时必须分配其所要求的全部内存空间,如果没有足够的内存空间空闲,那么就不能装入内存。作业一但装入内存后就不能在内存移动,也不能申请内存空间。

可重定位装入方式的特点

(1)装入模块的逻辑地址一般与实际装入内存的物理地址不同。

(2)实际装入内存的物理地址=逻辑地址+程序起始地址。

3.动态运行时装入方式

动态运行时装入程序,把装入模块装入内存后,并不立即把装入模块的逻辑地址转换为物理地址,而是把这种地址转换推迟到程序要真正执行时才进行。因此,装入内存后的所有地址仍为逻辑地址。为了不影响指令的执行速度,这种方法需要特殊的硬件支持,把这种地址变换方式称为动态重定位。动态重定位是指在程序执行过程中,每当访问指令或数据时,将要访问的指令或数据的逻辑地址转换为物理地址。由于重定位过程是在程序执行期间随着指令的逐步执行完成的,所以叫做动态重定位。动态重定位需要依靠硬件地址变换机构,最后简单的方法是利用一个重定位寄存器。当某个作业开始执行时OS负责把该作业在内存中的起始地址送入重定位寄存器,之后,在作业的整个执行过程中,每当访问内存时,系统自动将重定位寄存器中的内容加到逻辑地址中去,从而得到该逻辑地址对应的物理地址。动态重定位的特点是可以将程序分配到不连续的存储区中,在程序运行之前可以只装入它的部分代码即可投入运行,然后在程序运行期间再根据需要动态分配内存空间;便于程序段的共享,可以向用户提供一个比内存的存储空间大得多的地址空间。

程序的链接

实现链接的方法有三种:静态链接、装入时动态链接和运行时动态链接。

(1)静态链接方式

编译后形成目标模块后,其起始地址都是“0”,每个模块的地址都是相对于0的。在将目标模块链接成一个装入模块时,某些模块的起始地址不再是0,因此要进行修改。这种先进行链接所形成的一个完整的装入模块,称为可执行文件。静态链接是在生成可执行文件时进行的,可执行文件形成后,通常不再拆开它,要运行时可直接将它装入内存。这种事先进行连接,以后不再拆开的方式称为静态链接方式。

(2)装入时动态链接

采用装入时动态链接,用户源程序经编译后得到的目标模块,是在装入内存时边装入边链接的。即在装入一个目标模块时,若发生一个外部模块调用,则将引起装入程序去寻找相应的外部模块,并将它装入内存,同时修改目标模块中的相对地址。

装入时动态链接的优点是:(1)便于软件版本的修改和更新。(2)便于实现目标模块的共享。

3.运行时动态链接

在执行过程中,当发现一个目标模块尚未被装入内存时,由OS去找到该模块,将它装入内存,并将其链接到调用者模块上,这种链接方式称为运行时动态链接。

耦合性:也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。内聚性:又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。
内存保护。

在多道程序环境下OS必须提供存储保护机制,存储保护机制是为了防止一个进程有意或无意地破坏用户进程或系统进程。常用的存储保护方法有:

(1)界限保护(界限存储器)。通过对每一个进程设置一对界限存储器来防止越界访问,达到存储保护的目的。采用界限存储器实现存储保护又有两种实现方法:上、下寄存器方法和基址、限长存储器方法。用上、下界存储器分别存放进程存储空间的起始地址和结束地址。在进程运行中,将每一个访问内存的地址都同这两个寄存器的内容相比较,在正常情况下,这个地址应该大于起始地址小于结束地址。若超出了上下界存储器的范围,则产生越界中断信号哦,并停止进程的运行。用基址和现场寄存器分别存放进程空间的初始地址和进程地址的空间长度。当进程执行时访问内存的逻辑地址超出了限长,则产生越界中断信号,并停止进程的运行。

(2)访问方式保护(保护键)。通过保护键匹配来判断存储访问方式是否合法,对于允许多个进程共享的存储区域,每个进程都有自己的访问权限。存储保护键方法是给每个存储块分配一个单独的保护键,它相当于一把锁。进入系统的每个进程也赋予一个保护键,它相当于一把钥匙,查看钥匙和锁是否匹配,若不匹配,则系统发出保护性中断信号,停止进程运行。

(3)环保护。处理器状态分为多个环,分别具有不同的存储访问特权级别,通常规定环的编号越小特权级别越高。

此外还有四种存储权限:禁止任何操作、只能执行、只能读、读/写。

单一连续分配

一种最简单的存储管理方式,通常只能用于单用户、单任务的操作系统中,这种存储管理方式将内存分为两个连续存储区域,其中一个存储区域固定分配给OS使用,另一个存储区域分配给用户作业使用。单一连续内存方式主要采用静态分配,即作业一旦进入内存,就要等到它执行结束后才能释放内存。采用这种存储分配方式,内存中只能装入一道作业,从而降低了资源利用率。

分区存储管理

是满足多道程序设计需要的一种最简单的存储管理方法。在分区存储管理中,内存被划分为若干个分区,分区的大小可以相等也可以不等,除操作系统占有一个分区外,其余的每个分区可以容纳一个用户作业。按照作业的变化情况可以将分区存储管理进一步分为固定分区存储管理和动态分区存储管理。

固定分区

固定分区存储管理方法是一种可以运行多道程序的存储管理方法,它将内存事先划分为若干个固定大小的分区,分区的大小可以不等,但事先必须确定,运行时不能改变。为了实现固定分区分配,系统需要建立一张分区说明表,以记录分区的使用情况,其中包括分区号、分区大小、分区地址及状态等信息。当某个用户程序要装入内存时,由内存分配程序检索分区说明图,从图中找到一个能满足要求的空闲分区分配给该程序,然后修改分区说明图中相应表项的状态信息。当程序执行完毕,释放程序占用的分区,并将对应的分区状态信息设置为未分配即可。作业的大小不一定与某个分区大小相等。

动态分区

又称为可变分区分配,是一种动态划分存储器的分区方法,这种分配方法并不预先设置分区的数目,而是在作业装入内存时,根据作业的大小动态建立分区,使分区正好满足作业的需要。 因此分区的大小可变,数目也可变。

1.分区分配中的数据结构

系统需要设置相应的数据结构来记录内存的使用情况,常用的数据结构形式有空闲分区表和空闲分区链。

(1)空闲分区表。内存中的每个空闲分区占用一个表项,每个表项包含分区号、分区起始地址、分区大小及状态等。

(2)空闲分区链。使用链表指针将内存中的空闲区链接起来,为此应该在每个空闲分区的起始若干字节存放分区的若干字节中存放分区的相关信息,包括空闲分区的大小和指向下一个空闲分区的指针。

2.分区分配算法。为了将一个作业装入内存,应按照一定的分配算法从空闲分区表(或空闲分配链)选出一个满足作业需求的分区分配给作业,如果这个空闲分区的容量大于作业申请的空间容量,则将该分区一分为二,一部分分配给作业,剩下的一部分仍然留在空闲分区表(或空闲分配链),同时还需要对空闲分区表(或空闲分配链)中的有关信息进行修改。目前采用的分区分配算法有:首次适应算法、循环首次适应算法、最佳适应算法及最坏适应算法。

(1)首次适应算法。又称最先适应算法,该算法要求空闲分区按地址递增的次序排列。从空闲分区表(或空闲分配链)首开始顺序查找,一直查找到第一个能满足其大小要求的内存空间为止。

(2)循环首次适应算法。下次适应算法。从上次分找到的空闲分区继续向后查找到第一个满足作业申请空间的空闲分区。

(3)最佳适应算法。要求空闲分区按照容量的大小递增的次序排列,在进行内存分配时,从空闲分区表(或空闲分配链)首开始顺序查找,直到找到第一个能满足作业申请空间的空闲分区。

(4)最坏适应算法。要求按容量大小递减的次序排列,在进行内存分配时,先检查空闲分区表(或空闲分配链)的第一个分区,若第一个空闲分区小于作业要求的大小,则分配失败。否则从空闲分区划出与作业大小相等的一块内存空间分配给请求者,将余下的空闲分区留在空闲分区表(或空闲分配链)中。

分区的回收

当作业执行结束时,应回收已利用完毕的分区。系统根据回收分区的大小及起始地址在空闲分区表(或空闲分配链)中检查是否有与其相邻的空闲分区,若有相邻空闲分区,合并为一个更大的空闲区,然后修改有关分区的状态信息。

回收分区与已有空闲分区的相邻情况有以下四种:

(1)回收分区r上邻接一个空闲分区。(2)回收分区r下邻接一个分区。(3)回收分区r上、下邻接空闲分区。(4)回收分区无邻接空闲分区,这时应为回收分区单独建立一个新表项,填入分区大小及起始地址等信息,并将其加入到空闲分区表(或空闲分配链)中的适当位置。

可重定位分区分配

在分区存储管理中必须将作业装入到一段连续的内存空间。

1.拼接技术。

内存中无法使用的内存空间称为碎片或零头。在分区存储管理方式下,系统运行一段时间后,内存中的碎片会占据相当数量的空间。根据碎片出现的位置,可以将碎片分为内部碎片和外部碎片。内部碎片是指分配给作业时未被使用的部分,外部碎片是指系统中无法利用的存储块。如固定分区分配中存在内部碎片,动态分区分配时存在外部碎片。解决碎片问题的方法之一是将存储器中所有已分配区移动到内存的一端,使本来分散的空闲区连成一个大的空闲区。通过移动把多个小空闲分区拼接成一个大的空闲分区的方法称为拼接或紧凑,也可以称为紧缩。在拼接过程中,进程需要在内存中移动,因此要用到动态重定位技术支持。

2.可重定位分区分配技术

在可重定位分区分配算法中,若系统中存在满足作业要求的空闲分区,则按照与动态分区非配相同的方式分配内存;若系统找不到满足作业要求的空闲分区,且系统分区的总容量和大于作业申请的内存空间,则进行拼接。

伙伴系统

固定分区存储管理限制了内存中近程的数目,并且可能存在大量碎片,动态分区虽然能通过拼接技术较好地解决碎片问题,拼接会带来大的系统开销。较为实用的动态存储管理方式——伙伴系统。

伙伴系统结合计算机二进制的特点来划分存储空间,使每个存储块的长度都限制为2的k次方,k为自然数。伙伴系统采用伙伴算法对内存空间进行管理,该方法通过不断对分大的存储块来获得小的存储块。当进程执行完毕释放所占用的空间时,系统应检查释放块的伙伴是否是空闲块,若是则合并为大的空闲块,然后继续找,继续合并,直到找不到空闲的伙伴为止。只有伙伴才能合并,非伙伴不能合并。不足:在分配和回收时,需要对伙伴进行拆分和合并,另外存储空间还有一定的浪费。

覆盖与交换

所谓覆盖技术就是把一个大程序划分为一系列覆盖,每个覆盖是一个相对独立的程序单位,把程序执行时不要求同时装入内存的覆盖组成一组,称为覆盖段,将每一个覆盖段分配到同一个存储区中,这个存储区叫做覆盖区,它与覆盖段一一对应。覆盖段的大小应由覆盖段中最大的覆盖来确定。覆盖技术要求程序员把一个程序划分为不同的程序段,并规定好他们的执行和覆盖顺序,OS按照程序员提供的覆盖结构来完成程序段之间的覆盖。覆盖技术目标是在较小的可用内存中运行较大的内存。

交换技术也称为对换技术,交换是指把暂时不能运行的进程部分(或全部)从内存调换到外存中去,或将重又具备运行条件的进程调入到内存中,并将控制权交给它,让其在系统上运行的一种技术。交换进程由换入和换出两个过程组成。交换技术的特点:增加并发运行的进程数目,并给用户提供适当的响应时间,编写程序时不影响程序结构。

分页存储管理

也称为页式存储管理。

在分页存储管理中,将作业的地址空间划分为若干个大小相等的区域,称为页或页面,每个页面有个编号,称为页号,页号从零开始编号。相应地,也将内存空间划分为与页大小相等的区域,称为块或物理块,同样每个物理块也有编号称为块号,也从零开始编排。在为作业分配内存空间时,总是以块为单位来进行分配,可以将作业的某一页放入内存的某一个空闲块中。作业的大小通常不是页面大小的整数倍,因此最后一页往往装不满,这种浪费的空间称为页内碎片。在调度作业运行时,必须将作业的所有页面一次调入内存,若内存中没有足够的空间,则作业等待。这样的存储管理方式被称为分页存储管理方式,又称简单分页存储管理方式,纯分页存储管理方式。分页存储管理系统中的逻辑地址包括两部分,前一部分是页号P,后一部分是页内位移W,也称做页内地址。一般来说,特定机器的地址结构是确定的。

页表及存储块表

在分页存储管理系统中,进程的各个页面分散存放在内存中,为了便于在内存中找到进程的各个页面所对应的物理块,系统为每个进程建立一张页面映像表,简称页表,记录各页面在内存中对应存放的物理块号。在分页存储管理系统中,也买你的大小选择非常重要。为了实现内存的管理,OS还应该知道内存中的哪些物理块已经使用,哪些物理块空闲,总共有多少物理块等信息。这些信息存放在称为内存块表(MBT)的数据结构中,整个系统只建立一张MBT,记录内存物理块的使用情况。内存块表有两种实现方式。位示图方法:利用一位二进制数表示物理块的状态,1表示物理块已分配,0表示物理块未分配(空闲)。空闲存储块链:将系统中所有的空闲存储块用链表指针链接起来,用空闲物理块中的单元存放指向下一个物理块的指针。

基本地址变换机构

在分页存储管理系统中,逻辑地址到物理地址的变换需要借助页表实现。由于页表通常放在内存中,为了实现的方便,系统中设置了一个页表寄存器,用来存放页表在内存中的地址和页表长度。进程未执行时,页面的起始地址和长度存放在PCB中。当进程执行时,才将页表起始地址(页表地址)和长度存入页表寄存器。当进程要访问某个逻辑地址中的指令或数据时,分页系统的地址变换机构自动将地址分为页号和页内位移,然后以页号为索引去检索页表。在检索之前,先将页号与页表长度比较,若超出页表长度,则表示本次所访问的地址已超越进程地址空间,发出越界中断。若未出现越界,则由页表地址和页号计算出相应页表项的位置,从中得到存放该页的物理块号。最后将物理块号与页内位移拼接在一起,就形成了访问内存的物理地址。

具有快表的地址变换机构

若页表全部存放在内存中,则存取一个数据或一条指令至少需要访问两次内存,一次是访问页表,找到所存取的物理地址,第二次才根据所得到的物理地址存取指令或数据。为了提高地址变换的速度,可以在地址变换机构中增设一个具有并行查找能力的高速缓冲存储器(又称联想存储器或快表),将页表放在这个快表中。高速缓冲存储器一般是由半导体存储器实现的,其工作周期与CPU工作周期大致相同,但造价较高。为了降低成本,通常是在快表中存放正在运行作业当前访问的那些页表项,页表的其余部分依然存放在内存中。在快表中找到指定页表项的次数与总搜索次数的比称作快表命中率。由于成本关系,快表的空间不能再设置太大,一般由几十个单元组成。

多级页表和反置页表。

将页表分为若干较小的片段,离散地存放在内存中;或者只将当前需要的部分表项存放在内存中,其余存放在磁盘上,需要时再动态调入。

多级页表:拥有两级页表的系统中,地址变换的过程是:利用逻辑地址中的一级页号p1作为索引访问一级页表,找到第二级页表的地址;再利用二级页号p2找到指定页表项,从中取出物理块号与页内地址w连接形成物理地址。

反置页表(倒置页表,反向页表):通常每个进程都有一个页表,进程中的每一页在页表中都有一个表项与其对应,也就是说页表是按虚拟地址来排序的,这样OS能够方便地使用页号获得页面存放的物理块号。反置页表为每个物理块设置了一个页表项,并将这些页表项按物理块号大小排序,表项内容为页号以及隶属进程的标识号等信息。这样整个系统只有一个页表,每个内存物理块对应页表中的一个表项。利用反置页表进行地址转换的过程是:利用进程标识号及页号检索反置页表,则该表项的序号就是页面在内存中的物理块号,将物理块号与页内地址拼接就形成了物理地址。如果搜索完整个页表也没有找到相匹配的页表项,则发生了非法地址访问,说明此页目前不在内存,对具有请求调页功能的存储管理系统,应产生请求调页的中断;若系统不支持此功能,则表示地址有错。不足:增加了检索的时间,在支持请求调页的系统中,由于进程的某些页面没有存放在内存中,还必须为进程创建一张传统的页表并存放在外存中,当访问页不在内存时将使用这张页表。

分段存储管理

之前介绍的各种存储管理技术,用户逻辑地址空间是一个线性的地址空间。而通常情况下,一个作业由多个程序段和数据段组成,这就要求编译链接程序将它们按一维线性排列,从而给程序及数据的共享和保护带来了困难。分段存储管理又叫做段式存储管理。

在分段存储管理系统中,作业的地址空间由若干个逻辑分段组成,每个分段是一组逻辑意义相对完整的信息集合,每个分段都有自己的名字,每个分段都从0开始编址并采用一段连续的地址空间。分段存储管理以段为单位分配内存,每段分配一个连续的内存区,但各段之间不要求连续。内存的分配和回收类似动态分区分配。分段存储管理系统的逻辑地址由段号S和段内位移W(段内地址)组成。

断表及地址变换

与分页存储管理类似,为了实现逻辑地址到物理地址的转换,系统为每一个进程建立一个段表,其中每个表项描述一个分段的信息,表项中包括段号、段长及该段的内存起始地址。段表一般放在内存中。

为了便于实现地址转换,系统设置了段表寄存器,用于存放段表起始地址和段表长度。在进行地址转换时,系统将逻辑地址中的段号与段表长度进行比较,若越界则产生越界中断信号,未越界则根据段表起始地址计算出该段对应段表项的位置,从中读出该段在内存中的起始地址,然后检查段内位移是否超出了该段的段长,超出则发出越界中断信号,未越界则将该段的起始地址与段内地址相加得到要访问的物理地址。为了提高访问速度也可以使用快表。

分页与分段的区别

两者都是用离散分配方式,且都要通过地址变换机构来实现地址变换。区别:

(1)页是信息的物理单位,分页是为了实现离散分配方式,以减少内存的碎片,提高内存利用率。段是信息的逻辑单位,它含有一组意义相对完整的信息。

(2)页的大小由系统固定,把逻辑地址分为页号和页内位移,由硬件实现。段的长度不固定,由编译系统在对源程序进行编译时根据信息的性质来划分。

(3)分页系统中作业的地址空间是一维的,而分段系统中作业的地址空间是二维的,程序员在标识一个地址时,既要给出段名又要给出段内位移。

在段页式管理系统中,作业的地址空间首先被分为若干个逻辑分段,每段都有自己的段号,然后再将每一段分为若干个大小固定的页。对于内存空间的管理仍然和分页管理一样,将其分成若干个和页面大小相同的物理块,对内存的分配以物理块为单位。在段页式管理系统中,作业的逻辑地址包括:段号S、段内页号P、及页内位移D。为了实现地址变换,段页式管理系统中需要同时设立段表和页表。系统为每个进程建立一张段表,而每个分段有一张页表。段表表项中至少包括段号、页表始址和页表长度,页表始址指出该段的页表在内存中的起始位地址,页表表项中至少应包括页号和块号。此外,为了便于实现地址变换,系统还要配置一个段表寄存器,其中存放段表的起始地址和段表长度。在进行地址变换时,首先利用段号S与段表寄存器中的段表长度进行比较,若小于段表长度,则说明没有越界,于是,利用段内始址和段号求出该段对应段表项的位置,从中得到该段的页表始址,再利用逻辑地址中的段内号P获得对应页表项的位置,从中读出该页所在的物理块号,然后与页内位移拼接形成物理地址。

最后:

存储分配方式有三种:直接分配方式、静态分配方式和动态分配方式。直接分配是指程序员在编写程序或编译程序对源程序进行编译时采用物理内存地址;静态分配指在作业装入内存时确定他们在内存中的位置,作业一旦进入内存后在整个运行过程中不能在内存中移动,也不能再申请内存空间;动态分配指在装入时确定作业在内存中的位置,但在其运行过程中可根据需要申请附加的内存空间。

[嵌入式]存储器管理 存储器管理 5.1 存储器分类 存储器组织结构 在复杂的嵌入式系统中,存储器系统的组织结构按作用可以划分为4级:寄存器、cache、主存储器和辅助存储器,如下图所示。当然,对于简单的嵌入式系统来说,没有必要把存储器系统设计成4级,最简单的只需寄存器和主存储器即可。 阅读详情

相关推荐

C语言实现存储器管理

为了比较真实地模拟存贮器管理,可预先生成一个大致符合实际情况的指令地址流。然后,通过模拟这样一种指令序列的执行来计算和分析比较各种算法的访问命中率

【学习笔记之操作系统原理篇】存储管理

存储管理基本概念 物理内存(即内存地址) 字节编号,从0开始,是“一维”的地址。 例题: 1.外存上存放的数据( 必须在访问前先装入内存 )。 存储管理的主要任务 如何将可用内存有效地分配给多个进程? 如何让存储容量大于可用内存的大进程得以运行? 如何保护和共享内存? ①内存的分配与回收 静态分配 —次性全部载入内存,运行过程中不再变化。 动态分配 先分配必需的基本空间,运行过程中动态载入。 内存分配表 已使用的内存记录,未使用的内存记录。 ②地址变换

IsQiya Bug Worlde 3408

存储器分配与回收C代码

存储器分配与回收C代码亲测可用

计算机存储管理有什么功能,操作系统的存储管理功能实际上是管理什么?

操作系统的存储管理功能实际上是管理什么?操作系统的存储管理功能实际上是管理内存资源.操作系统的五大管理功能:(1)作业管理:包括任务、界面管理、人机交互、图形界面、语音控制和虚拟现实等;(2)文件管理:又称为信息管理;(3)存储管理:实质是对存储“空间”的管理,主要指对主存的管理;(4)设备管理:实质是对硬件设备的管理,其中包括对输入输出设备的分配、启动、完成和回收;(5)进程管理:实质上是对处理...

weixin_29291573的博客 2689

飞书多维表格+影刀RPA:我如何用3个指令搞定每周的销售数据自动汇总(附完整配置截图)

本文详细介绍了如何利用飞书多维表格和影刀RPA实现销售数据的自动化汇总,通过三个核心指令(建立链接、列出记录、更新记录)简化繁琐的手工操作。文章包含完整的配置截图和实战指南,帮助用户快速部署自动化流程,提升工作效率。

weixin_29273849的博客 284

C#通过Aforge调用电脑摄像头(附代码)

C#标准库本身不带有能调用电脑摄像头的库,如果利用windows自身的API来实现的话,着实有些麻烦。Aforge这个第三方库能很好的实现调用、处理的功能。 PS:文末给大家分享了完整的项目源码,各位最好先下载下来,对照着来看 1、先看一下效果 2、Aforge介绍 AForge.NET是一个专门为开发者和研究者基于C#框架设计的,这个框架提供了不同的类库和关于类库的资源,还有很多应用程序例子,包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,机器人等领域。 3、我使用的开发环境 操作系统

weixin_44996090的博客 1万+

2019.6.21 存储器管理

1.你怎么理解操作系统里的内存碎片,有什么解决办法? 考察点:内存碎片 参考回答: 内存碎片分为:内部碎片和外部碎片。 内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间; 内部碎片是处于区域内部或页面内部的存储块。占有这些区域或页面的进程并不使用这个存储块。而在进程占有这块存储块时,系统无法利用它。直到进程释放它,或进程结束时,系统才有可能利用这个存储块。 单...

qq_31194443的博客 319

Power BI常见问题篇1:无法打开文档

Power BI常见问题篇1:无法打开文档

weixin_48273257的博客 3304

王道计组——计算机硬件部件以及工作过程

——本节内容为Bilibili王道考研《计算机组成原理》P5视频内容笔记。目录一、主存储器1.组成(1)存储体(2)MAR存储地址寄存器(3)MDR存储数据寄存器2.具体操作过程(1)读取数据 (2)写入数据 3.存储体组成详解二、运算器1.图示2.功能3.组成4.存放作用三、控制器1.图示2.组成3.具体操作过程四、计算机工作过程1.举例2.步骤(1)执行主存地址为0的指令 (2)执行主存地址为1的指令(3)执行主存地址为2的指令(4)执行主存地址为3的指令(5)执行主存地址为4的指令3.总结

weixin_64084604的博客 1309

8、水力压裂引起的地质材料力学性质变化的可视化研究

本研究探讨了水力压裂引起的地质材料力学性质变化的可视化方法。利用超声剪切波形数据,通过短时傅里叶变换(STFT)和主成分分析(PCA)进行特征提取和降维,并应用K-means聚类、凝聚聚类和DBSCAN等无监督学习方法对地质力学变化进行非侵入式可视化分析。研究比较了不同特征工程、聚类方法和降维策略对可视化效果的影响,并结合位移不连续性理论为聚类结果分配地质力学变化指数,以提高结果的物理解释性。最终,该方法成功实现了对水力压裂引起的岩石力学性质变化的高效、可靠可视化。

emacs5lisp的博客 109

UNet 改进(3):CBAM模块的融合创新

CBAM模块可以灵活地添加到网络的不同位置,本实现选择在初始卷积后添加,既提升了性能又不过度增加计算负担。UNet_CBAM通过集成注意力机制,使网络能够自动聚焦于图像中最相关的区域和特征通道,从而提升了分割性能。然而,传统的UNet在处理复杂场景时,对所有空间位置和通道特征一视同仁,这可能导致对重要特征的关注不足。在实际应用中,特别是在医学图像分析等需要精确分割的场景中,UNet_CBAM展现出了优异的性能。:CBAM添加的计算量很小,却能带来显著的性能提升,具有很好的性价比。

2401_82355416的博客 1642

【汤4操作系统】深入掌握操作系统-存储器管理篇

一般的通用计算机至少将存储器分为三个层次,而在较高档的计算机中,还将存储器进一步细分为寄存器、高速缓存、主存储器、固定磁盘、可移动介质等多层次在存储层次中,层次越高,存储介质的访问速度越快,价格越高,相应的存储容量也越小。其中寄存器、高速缓存、主存储器、磁盘缓存均属于操作系统存储管理的管辖范畴,掉电后存储信息不再存在低层的固定磁盘、可移动存储介质则属于设备管理范畴,存储信息将长久保存。

Trae1ounG的博客 911

Python 爬虫实战:美团大众点评餐厅数据爬取与分析

本文摘要:美团/大众点评餐厅数据爬虫实战指南 本文详细介绍了如何开发一个完整的餐厅数据爬虫系统,涵盖从环境配置到数据可视化的全流程。主要内容包括: 项目目标:爬取餐厅基本信息(名称、评分、价格等)及详情数据,支持市场分析和商业决策 技术方案:使用Python生态工具(Requests、Playwright、Pandas等)构建爬虫系统 核心挑战:破解大众点评的字体反爬机制和美团的API签名验证 实现细节:提供完整的代码示例,包括字体解析、签名生成、请求重试等关键功能 数据应用:支持将结果导出为CSV/Exc

u014481728的博客 312

操作系统4——存储器管理

本篇博客主要介绍操作系统第四章存储器管理与第五章虚拟存储器的相关知识。

转载请标明出处,完整项目/代码详见github:https://github.com/yiru1225 8737

STM32 实现 4*4 矩阵键盘扫描(HAL库、标准库 都适用)

本文实现的代码是基于STM32HAL库的基础上的,不过标准库也可以用,只是调用的库函数不同,逻辑跟配置是一样的,按我这里的逻辑来配置即可。 1、键盘原理图: 原理举例:先把 F0-F7 内部拉高,这样这个8个引脚都是高电平,然后就进行列扫描。例如:假如按下3按钮,Y3 列扫描,把F4先拉低,然后读取F0-F3的状态,就会读出为1110,这就可 以知道是F3行拉低了,同时这时候是程序控制F4拉低的,这样就可以知道是F4列导致它转态变化了的,这样就可以定位出是F4列F3行的按键按下了;其他的列也是这样子扫描

lhh_qrsly的博客 7058

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

存储器管理知识点总结

存储器管理知识点总结 文章目录存储器管理知识点总结存储管理逻辑地址(相对地址):用户编程所使用的地址空间逻辑地址从0开始编号,两种形式:段式程序设计物理地址(绝对地址):程序执行所使用的地址空间主存储器的复用存储管理的基本模式地址转换(重定位):把逻辑地址转换成绝对地址主存储器空间的分配与去配主存储器空间的共享存储保护主存储器空间的扩充虚拟存储器思想的提出主存容量限制带来诸多不便用户编程行为分析考虑部分调入进程内容基本思想实现思路存储管理涉及的存储对象高速缓存存储器(Cache)单连续分区存储管理:每个进

low5252的博客 1749

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

操作系统—存储器管理

存储器管理 1 存储器的层次结构 ​ 计算机执行时,几乎每条指令都涉及对存储器的访问。因此要求对存储器的访问速度跟得上处理机的运行速度。考虑到价格和现实因素,如今的计算机大都采用了多层结构的存储器系统 1.1 存储器的多层结构 存储层次至少应具有三级:最高层为CPU寄存器、中间为主存、最底层为辅存 从上到下:①访问的速度越来越慢 ② 空间容量越来越大 ③单位价格越来越低 CPU 寄存器和主存又被称为可执行存储器,其中的信息在掉电后不复存在。但是辅存中的信息可以长期保存。 对于可执行存储器和辅存,计算机访问

weixin_45709829的博客 4572

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

计算机操作系统——存储器管理

根据我们前面讲的操作系统的内容,说白了这章我们处理的就是作业来了放哪里?存储器历来都是计算机系统的重要组成部分。近年来,随着计算机技术的发展,系统软件和应用软件在种类、功能上都急剧地膨胀,虽然存储器容量一直在不断扩大,但仍然不能满足现代软件发展的需要。因此,存储器仍然是一种宝贵而又稀缺的资源。如何对它加以有效的管理,不仅直接影响到存储器的利用率,而且对系统性能也有重大影响。存储器管理的主要对象是内存。

2301_81776550的博客 1246

【操作系统】存储器管理

操作系统第四章笔记

Pqf18064375973的博客 1435

存储器管理概述----功能、管理对象、基本模式

存储器一直都是计算机系统的重要组成部分。近年来,随着技术的发展,虽然存储器的容量一直在不断扩大,但是仍不能满足现代软件发展的需要。存储器仍然是一种宝贵而稀缺的资源。如果有效的来管理存储器,不仅直接影响到存储器的利用率,而且对系统的性能也有重大影响。 本文对存储器管理的功能,管理对象,基本模式进行讨论,并介绍了虚拟存储器的概念...

丹丹的后花园 8524
上一篇: 死锁
下一篇: JAVA开发之多线程程序设计基础
Linux修炼
博客等级 码龄9年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值