目录
在存储管理中涉及到两个问题:
1、是否要把作业全部(一次性)装入内存,分为两种:
2、装入内存时是否要放在内存连续地址空间,分为两种:
采用全部装入和连续分配,进程执行时速度快、效率高;
采用部分装入和非连续分配都是为了进一步提高内存的利用率,使有限的内存装入更多更大的作业。
最简单的存储管理方式,在早期的单道批处理系统中使用这种管理方案。
采用这种管理方案时,内存被分成两个区域,一个是系统区域,仅供操作系统使用,可以驻留在内存的低地址部分,也可以驻留在高地址部分(通常设置在内存的低端);另一个是用户区,它是除系统区以外的全部内存区域,这部分区域是提供给用户使用的区域,任何时刻主存储器中最多只有一个作业,作业放在从用户区起始地址开始的连续地址区域。
注:单用户连续存储管理只适用于单用户单任务的情况。
单一连续分区使用静态重定位,不需要专门硬件进行地址变换,但是会有硬件保护机构,以确保不干扰系统区中的信息,方法有:上界寄存器和下界寄存器、内核态(系统态/管态)与用户态(目态)工作、不做特别管理。
将内存用户空间划分为若干个固定大小(不是相等大小)的区域,在每个分区中只装入一道作业,放在该分区起始地址开始的连续地址区间内。用户空间划分为几个分区,便允许有几道作业并发运行。当有一空闲分区时,便可以从外存的后备作业队列中选择一个适当大小的作业装入该分区,当该作业结束时,又可再从后备作业队列中找出另一作业调入该分区。实际上每一个分区就相当于一个单用户连续分配区间。固定分区分配很少用于现在的操作系统中,但在某些用于控制多个相同对象的控制系统中仍发挥着一定的作用。
固定分区存储管理实际中可采用可重定位装入(静态重定位)方式,也可采用运行时动态装入(动态重定位)方式:静态重定位方式、动态重定位方式
作业长度不能大于分区的大小,一个分区只能装入一个作业,一个作业只能装入一个分区。
无外部碎片,有内部碎片(一个分区会有剩余空间),作业大小比分区大小越小时,内部碎片越大,空间比较浪费。
分区的数量限制了作业的个数。
(1)数据结构
(2)内存分配(主要是分配算法)
效果比较:首次适应算法可能比最佳适应法效果好,而它们两者一定比最大适应法效果好。另外注意,在算法实现时,分配操作中最佳适应法和最大适应法需要对可用块进行排序或遍历查找,而首次适应法和邻近适应法只需要简单查找;回收操作中,当回收的块与原来的空闲块相邻时(有三种相邻的情况,比较复杂),需要将这些块合并。在算法实现时,使用数组或链表进行管理。除了内存的利用率,这里的算法开销也是操作系统设计需要考虑的一个因素。
连续分配存储管理方式产生的问题:
离散分配,允许将作业离散放到多个不相邻接的分区中。
页表存放在内存中,属于进程的现场信息。
用途:记录进程的内存分配情况;实现进程运行时的动态重定位。
访问指令或数据需访问内存2次(第一次访问内存中的页表,第二次访问内存中的指令或数据)。
系统同时增加页表寄存器,记录当前执行进程对应的页表的起始地址及长度。
① 空闲表法:系统为内存所有空闲区建立一张空闲表,每个表项对应一个空闲区,空闲表中包含序号、空闲区的第一块号、空闲块的块数等信息。空闲表法是基于连续分配的。
序号 起始块号 块数
1 25 8
2 106 39
3 … …
② 空闲链法:将所有空闲区拉成一条空闲链,根据空闲链所有的基本元素不同,可以分成空闲块链和空闲区链。• 空闲块链是将所有空闲分区,以块为单位拉成一条链,当为作业分配存储空间时,系统从链首开始,依次摘下适当数目的空闲块进行分配;当回收空间时,系统将回收的块依次加入到空闲块链的末尾。
• 空闲区链是将所有空闲区拉成一条链。每个空闲区除含有用于指示下一个空闲区的指针外,还有本区大小(块数)的信息。
③ 位示图法:利用二进制的一位来表示内存中一个块的使用情况,所有的块都有与之对应的一个二进制位。当其值为0时,表示对应的块空闲,当其值为1时,表示对应的块已经分配。
若页面较小:
减少页内碎片和总的内存碎片,有利于提高内存利用率。
每个进程页面数增多,使页表长度增加,占用内存较大。
页面换进换出速度将降低。
若页面较大:每个进程页面数减少,页表长度减少,占用内存较小。
页面换进换出速度将提高。
增加页内碎片,不利于提高内存利用率。
因此,页面的大小应选择适中,应是2的幂,通常为512B — 8KB。
分段存储管理方式的引入是为了满足用户的要求:
逻辑地址要用两个成分来表示:段号s和段内地址d
进程的逻辑地址空间是二维的
内存空间的分配与回收是基于可变分区管理,以作业的段为单位,按照某种分配算法,从空闲分区表/链中找到符合段所需大小的分区,一个段一个段,最终完成整个作业的内存空间分配。
分配算法与可变分区一样:
进程结束后,按照段表查找每段在内存的起始地址和大小,然后按段一个一个回收其占用的内存,同时修改空闲分区表,把进程所有段回收,则完成整个进程所占内存空间的回收。
① 存取控制
② 段表本身可起保护作用
③ 环保护机构:环保护机构是一种功能较完善的保护机制。在该机制中规定:低编号的环具有高优先权。OS核心处于0环内;某些重要的实用程序和操作系统服务占居中间环;而一般的应用程序则被安排在外环上。
段页式存储管理是分段和分页原理的结合,即先将用户程序分成若干个段(段式),并为每一个段赋一个段名,再把每个段分成若干个页(页式)。其地址结构由段号、段内页号、及页内位移三部分所组成。系统中设段表和页表,均存放于内存中。读一字节的指令或数据须访问内存三次。为提高执行速度可增设高速缓冲寄存器。每个进程一张段表,每个段一张页表。段表含段号、页表始址和页表长度。页表含页号和块号。
等分内存,内存分成与页大小相等的块,使用位示图管理内存。内存分配是以页为单位装入内存的块内。
文章浏览阅读112次。更多的配置:# ===================================================================# COMMON SPRING BOOT PROPERTIES## This sample file is provided as a guideline. Do NOT copy it in its# entire..._call: services/json/configure/testconnection -------------------------------
文章浏览阅读1k次,点赞14次,收藏10次。基于ssm+vue的校园驿站管理系统+(源码+部署说明+演示视频+源码介绍).zip
文章浏览阅读946次,点赞8次,收藏10次。div内容超出容器宽度,超出部分显示省略号且鼠标悬浮显示全部内容_div设置省略号
文章浏览阅读293次。1)类的重写# 如果子类想实现父类构造器中的方法,然后自己再写自己特殊的方法,便需要调用父类的__init__()方法class parent(object): # 定义父类的时候,一定要写继承object类,否则会报错 name = 'parent' sex = 'F' def __init__(self,address,age): self._重写方法其中的self变量怎么写
文章浏览阅读3k次,点赞2次,收藏10次。步骤1、你要检查json文件利用专门的解析json文件的网站校验进行https://www.sojson.com/2、不符合JSON语法格式的会报错,这时需要修改,直到正确3、Python读取一、JSON 语法规则数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组举例问题:它报错说逗号有问题,其实不是,问题出在缺少中括号。在最外层补充中括号,JSON文件就没问题了。二、Python读取json数据完整正确的代码:import jsonfile=r'中国合作t_python接口返回json数据是text格式
文章浏览阅读924次。1.4.B 编码规范——如何写出简洁优美的代码 下面是来自两位C语言程序员的实现相同功能的两段代码: l 月薪1000元的程序员的代码: #include int main() { FILE *Wenjian; char Str[100]; Wenjian = fopen("test.txt","w"); do_源代码 编码规范 调研表
文章浏览阅读248次。软件过程改进是指通过对软件开发过程的分析、评估和优化,以提高软件开发效率和质量的一系列活动。它包括对软件开发过程的规范、流程、工具和方法的改进,旨在使软件开发过程更加高效、可控和可持续。_为什么要进行软件过程改进
文章浏览阅读774次。2019独角兽企业重金招聘Python工程师标准>>> ..._springboot配置jdk1.6
文章浏览阅读1.2w次,点赞2次,收藏6次。解决’error_code’: 110, ‘error_msg’: 'Access token invalid or no longer valid(百度智能云使用方法)出现上述错误,是因为没有将例子中的access token的结果进行正确替换。具体做法如下:搜索百度智能云,注册登录以车牌识别为例:产品>汽车场景文字识别>立即使用>创建应用(归属选个人,免费)>查看详细信息(生成AD AK SK,将其复制)>使用方式>API文档获取accrss token_access token invalid or no longer valid
文章浏览阅读339次,点赞5次,收藏10次。密钥交换算法是指在不安全的通道上,通过某种算法交换一个密钥,常用的有Diffie-Hellman(DH)算法、椭圆曲线Diffie-Hellman(ECDH)算法等。消息摘要算法是一种单向加密算法,将任意长度的数据转换成固定长度的输出,常用的有MD5、SHA-1、SHA-2等。数字签名算法是将消息或数据进行哈希计算,然后用私钥签名,验证签名时使用公钥进行验证,常用的有RSA、DSA等。非对称加密算法使用一对密钥(公钥和私钥)对数据进行加密和解密,常用的有RSA、DSA、ECC等。3、确保数据的完整性。_aes加密 csdn
文章浏览阅读561次,点赞3次,收藏3次。随着计算机使用时间的增长,C盘(系统盘)中的临时文件、系统缓存和日志等数据会逐渐累积,占用大量磁盘空间,导致系统运行速度减慢。定期对C盘进行缓存清理是保持系统健康与高效的重要维护工作。本文将详细介绍如何安全且有效地清理C盘中的各类缓存,帮助用户释放宝贵的存储资源。_qindows清理c盘最终版
文章浏览阅读1.2k次。使用Python中的BeautifulSoup在HTML源代码中获取JS var值(Get JS var value in HTML source using BeautifulSoup in Python)我正在尝试使用BeautifulSoup从HTML源代码中获取JavaScript var值。例如我有:[other code]var my = 'hello';var name = 'hi'..._python 取得js返回值