电商网站设计注意事项,模板网站怎么优化,网站开发后台技术,最好的免费logo设计网站内存#xff1a;即内存条#xff0c;也称主存储器#xff08;简称主存#xff09;#xff0c;用于存放数据。
为了缓和CPU和外存#xff08;磁盘#xff09;的速度矛盾#xff0c;外存的程序先放入内存才能被CPU处理。
内存地址从0开始#xff0c;每个内存地址对应一…内存即内存条也称主存储器简称主存用于存放数据。
为了缓和CPU和外存磁盘的速度矛盾外存的程序先放入内存才能被CPU处理。
内存地址从0开始每个内存地址对应一个存储单元。
存储单元的大小依据计算机的编址按字节编址则一个存储单元大小是1个字节按字编址32位计算机的一个存储单元大小是一个字即32位即4个字节64位计算机中一个存储单元大小是一个字即64位即8个字节。
参考主存储器【计算机组成原理】 内存的分配与回收
内存的分配程序装入内存时为进程分配内存空间并记录内存分配情况内存分配表。
内存的回收程序撤销或者主动归还内存资源时收回进程占用的内存空间并修改内存分配表。 1、连续分配管理方式给每个进程分配的内存区域必须是连续的。 内部碎片内存中已经分配给了进程但没用上的那部分区域。 外部碎片内存中部分空闲区域太小难以分配给进程。 1-1单一连续分配内存的用户区只能给一道用户程序。适用于早期的单道程序系统。
内存分为系统区存放操作系统相关的数据和用户区用户进程相关数据。
采用栅栏寄存器存放系统区和用户区的界限地址进行内存保护避免用户访问或修改系统区。
实现简单没有外部碎片但只能一道程序内存利用率低产生内部碎片。 1-2固定分区分配 内存的用户区分成固定大小的分区分区大小相等或者分区大小不等。适用于多道程序。需要分区说明表数据结构记录各个分区的分配和回收情况通常按分区大小排列。
实现简单无外部碎片但有内部碎片内存利用率低若所有分区都无法满足大程序用覆盖技术解决将降低性能。分区大小相等缺少灵活性不利于大程序分区大小不等增加了灵活性满足不同大小的进程需求。 1-3动态分区分配可变分区分配在进程装入内存时根据进程大小动态建立分区。适用于多道程序。需要空闲分区表/空闲分区链数据结构记录各个空闲分区。需要一定的算法动态安排分配。回收分区时需注意合并分区。
没有内部碎片但有外部碎片。但可用“拼凑”技术解决。“拼凑”技术即紧凑技术若各空闲内存空间都不够分配给进程但总和超过进程大小将分配给各进程的空间挪到一起将零碎的空闲空间拼凑成一个大的连续的空闲空间 动态分区分配算法 首次适应算法 First Fit 最佳适应算法 Best Fit 最坏适应算法 Worst Fit 邻近适应算法 Next Fit 分区排序 按地址递增 分区排序 按容量递增 分区排序 按容量递减 分区排序 按地址递增 从头开始查找 从第一个大小适合的分区分配 优先从大小最适合的分区分配优先从容量最大的分区分配 从上次查找结束位置开始 从第一个大小适合的分区分配 综合看性能最好。算法开销小不需重新排序大分区容易被保留下来。但容易有外部碎片算法开销大需按容量重新排序减少难以利用的小碎片。但不利于大进程算法开销大需按容量重新排序算法开销小不需重新排序。但可能会使高地址的大分区也被用完 动态分区分配的回收分区 回收区的前后没有空闲分区空闲分区表/空闲分区链中添加表项/节点。回收区的前或后有空闲分区空闲分区表/空闲分区链中修改对应的表项/节点。回收区的前后都有空闲分区空闲分区表/空闲分区链中合并对应的表项/节点删除一个表项/节点并修改对应的表项/节点。 2、非连续分配管理方式给每个进程分配的内存空间是离散的不连续的。 2-1分页存储管理
内存划分成大小相等的分区称为页框/页帧/物理块/物理页面/内存块每个分区有编号称为页框号/页帧号/物理块号/物理页号/内存块号页框号从0开始。进程也划分成与页框大小相等的部分称为页/页面每个部分有编号称为页号/页面号页号从0开始。以页框为单位为进程分配内存空间。程序执行时进程的页面复制到内存中的页框中。进程的各个页面在内存中的存放是离散的但每个页面内部的存放是连续的。通过页表数据结构来记录进程的页面与实际存放的内存块的映射关系。 页表又称慢表【数据结构】 在内存中通常存放在系统区的进程控制块PCB中。记录进程的页面与实际存放的内存块的映射关系包括页号内存中的页框号等。一个进程对应一张页表。一个页面对应一个页表项。页号从0开始。页表的页表项是连续存放的因此页号可隐含即不记录页号不占存储空间。 页面大小一个页面占多少存储空间。页表长度页表中有多少页表项即有多少页面。页表项长度一个页表项占多少存储空间。 页表太大时采用多级页表机制 一个页面对应一个页表项将页面分组使用多个页表。内存中一个页框存放一个页表页表长度 页框大小 / 页表项长度。 例如两级页表 二级页表若干个记录页面在内存的地址。页目录表又称外层页表/顶层页表一个所有二级页表的目录。记录二级页表在内存的地址。 若使用虚拟存储技术页目录表在内存其他页表在外存中需要时才调入内存。各级页表中还将记录是否在内存、在外存的地址等信息 地址转换机构 页表寄存器PTR 存放 页表在内存中的起始地址F 和 页表长度M。 进程未执行前页表在内存中的起始地址和页表长度是存放在进程控制块PCB中。进程被调度时操作系统内核才将页表在内存中的起始地址和页表长度放入页表寄存器中。 页表长度用于判断逻辑地址中的页号是否越界若页号页表长度则页号越界。 快表又称联想寄存器 英文缩写TLBTranslation Lookaside Buffer。在CPU中。访问速度比内存中的页表慢表快。存放最近访问过的页表项的副本。即存放页表的部分副本 逻辑地址 到 物理地址 的转换
逻辑地址又称虚拟地址/相对地址程序员视角的地址。
物理地址又称绝对地址实际在内存中的地址。 页号 逻辑地址 / 页面大小 【除法取整数部分】 页内偏移量又称页内地址 逻辑地址 % 页面大小 【除法取余数部分】 若逻辑地址是二进制表示且页面大小是2的整数幂例如则 页内偏移量为逻辑地址的末尾k位。逻辑地址的其他二进制位为页号。 页表的起始地址进程执行前在PCB中进程执行时在页表寄存器中。 页表中页面对应页表项的起始地址页表的起始地址 页号 * 页表项长度 页面在内存中的起始地址页框号 * 页框大小 实际的物理地址页面在内存中的起始地址 页面偏移量 地址转换过程
根据逻辑地址获取页号和页内偏移量。根据页表寄存器中的页表长度检查逻辑地址中的页号是否越界若越界发出越界中断。在快表中查询若快表命中直接获得页面在内存中的起始地址。若快表未命中根据页表寄存器中的页表起始地址和逻辑地址中的页号在内存的页表中查询获取页面在内存中的起始地址。根据页面在内存中的起始地址和页内偏移量得到实际的物理地址。根据实际的物理地址在内存获取相应的数据。 2-2分段存储管理
程序按照自身逻辑分成若干个段用户给每个段定义段名每个段的段长不同。以段为单位为进程分配内存空间。各段在内存的存放是离散的每个段的内部的存放是连续的。通过段表记录进程的各段与段在内存中的地址的映射关系。段表寄存器存放段表的起始地址F和段表长度M。进程未执行前F和M存放在PCB中。 段表 在内存中。记录进程的段号、段长、段在内存中的起始地址即段基址等。一个段表项对应一个段段表中有多少段表项就表示进程有多少段。每个段表项长度相同段表项连续存放段号可隐含即不占存储空间。 段表的起始地址进程执行前在PCB中进程执行时在页表寄存器中。 段表中段对应段表项的存放地址段表起始地址段号*段表项长度 段在内存中的起始地址对应段表项中的段基址 实际的物理地址段在内存中的起始地址段内地址 用户需提供段名和段内地址。编译程序会把段名转换为段号。
逻辑地址可拆分为段号和段内地址。段号的位数代表进程最多分多少段段内地址的位数代表段长最大是多少。 地址转换过程
通过用户提供的逻辑地址获取段号和段内地址。根据段表寄存器中的段表长度判断逻辑地址中的段号是否越界若段号段表长度则越界发出越界中断。在快表中查若快表命中直接找到对应段表项。若快表未命中根据段表寄存器中的段表起始地址和逻辑地址中的段号在内存的段表中查获得对应段表项。根据段表项中的段长判断逻辑地址中的段内地址是否越界若段内地址段长则越界发出越界中断。根据段表项中的段基址和逻辑地址中的段内地址获取实际的物理地址。根据实际的物理地址从内存获取相应数据。 分页存储管理和分段存储管理的区别
分页存储管理和分段存储管理的区别 分页存储管理分段存储管理以页框为单位为进程分配内存空间以段为单位为进程分配内存空间页框大小相同段长不同页表记录页号、在内存中的页框号 段表记录段号、段长、在内存中的起始地址 用户只需提供助记符 即分页的地址空间是一维的。 用户需提供段名和段内地址 即分段的地址空间是二维的。 页是信息的物理单位。 分页由系统完成对用户不可见 段是信息的逻辑单位。 分段对用户可见用户显示给出段名 提高内存的空间利用率。 不会产生外部碎片会产生少量内部碎片。 方便用户编程方便信息共享和保护。会产生外部碎片。 注只有纯代码/可重入代码可以共享纯代码/可重入代码不能修改的信息。不属于临界资源 2-3段页式存储管理分段和分页的结合
内存分成若干个大小相等的页框。程序按自身逻辑分段各段再分成若干个大小相等的页面。页面大小与内存的页框大小相同。通过段表记录各段的各页面在内存中的地址。段表包括段号、页表长度、页表在内存中的起始地址。段表寄存器存放段表的起始地址F和段表长度M。进程未执行前F和M存放在PCB中。一个进程对应一个段表一个段表项对应一个段一个段对应一个页表一个页表项对应一个页面。
用户提供段名和段内地址编译程序将段名转换为段号系统将段内地址转化为页号和页内偏移量。
逻辑地址可拆分成段号、页号、页内偏移量又称页内地址。段号的位数表示进程最多分多少段页号的位数表示每个段最多有多少页面页内偏移量的位数表示页面大小是多少或内存的页框大小是多少。 地址转换过程
根据逻辑地址获得段号、页号、页内偏移量。根据段表寄存器中的段表长度判断逻辑地址中的段号是否越界若段号段表长度则越界发出越界中断。根据段号和页号在快表中查若快表命中直接获得页面在内存中的页框号跳转到8。若快表未命中根据段表寄存器中的段表起始地址和逻辑地址中的段号获得对应段表项。根据段表项中的页表长度判断逻辑地址中的页号是否越界若页号页表长度则越界发出越界中断。根据段表项中的页表起始地址和逻辑地址中的页号在页表中查询获得对应页表项。根据页表项中的页面在内存中的页框号和逻辑地址中的页内偏移量获得实际的物理地址。根据实际的物理地址在内存获取相应的数据。 虚拟内存 以请求分页存储管理为例
在离散分配的基础上物理上内存容量不变逻辑上通过外存进行了扩充使用户感觉内存容量比实际的大很多就是虚拟内存。
传统存储的特征一次性驻留性。即程序一次性调入内存并常驻内存直到运行结束。
虚拟内存的特征多次性对换性虚拟性。即程序存放在外存中程序装入时很快使用的页面先调入内存。程序运行时用到的页面再调入内存若内存空闲空间不够通过一定置换算法先将暂时用不到的页面从内存调出到外存再将需要的页面调入内存。
虚拟内存需具备请求调页和页面置换功能。即需要的页面调入内存空间不够时不需要的页面调出到外存。
虚拟内存基于局部性原理。时间局部性现在访问的信息将来可能仍访问。空间局部性现在访问的信息附近的将来可能被访问。
地址转换过程
根据逻辑地址获取页号和页内偏移量。检查页号是否越界若越界发出越界中断。在快表中查询若快表命中直接获得页面在内存中的起始地址。若快表未命中在内存的页表中查询根据页表项的状态位判断页面是否调入内存若已调入内存获取页面在内存中的起始地址并将页表项复制到快表。若未调入内存发生缺页中断系统进行中断处理将页面从外存调入内存获得页面在内存中的起始地址修改页表项并将页表项复制到快表。根据页面在内存中的起始地址和页内偏移量得到实际的物理地址。根据实际的物理地址在内存获取相应的数据。
传统存储管理和虚拟内存的区别 传统存储管理虚拟内存 页表包括页号、在内存的地址。 页表包括页号、在内存中的地址、状态位是否在内存、访问字段最近访问几次或上次访问时间用于页面置换做参考、修改位调入内存后是否修改、在外存中的地址。无 需要缺页中断机构需判断页面是否已在内存若不在则发生缺页中断系统将页面从外存调入内存有可能需要页面置换。 缺页中断属于内中断。一条指令可能多次缺页中断。 无 页表项需要通过状态位检查页面是否在内存中 若页面不在内存需要请求调页 若内存空间不够需根据一定算法进行页面置换将某页面从内存调出到外存需要的页面调入内存 页面调入内存后需修改页表项并将页表项复制到快表中。
页面分配策略 驻留集操作系统为进程分配的内存块的集合。
抖动/颠簸分配的内存空间太小或者页面置换算法设计不当会导致页面频繁调入调出。
工作集某时间间隔里进程实际被访问页面的集合。驻留集大小一般不能小于工作集大小。
页面分配、置换策略
固定分配局部置换系统给进程分配的内存空间大小固定缺页时进程在自己的内存区域进行页面置换。可变分配局部置换系统给进程分配一定的内存空间缺页时进程在自己的内存区域进行页面置换系统检测到页面置换频繁或着缺页率低将适当调整分配给进程的内存空间。可变分配全局置换系统给进程分配一定的内存空间缺页时系统将分配空闲内存空间若没有空闲内存空间将任意进程的未锁定页面调出到外存再将需要的页面调入内存。
何时调入页面
预调页策略进程运行前进程首次调入时由程序员指出调入部分一次将若干个相邻的页面调入内存。请求调页策略进程运行期间发生缺页时将页面从外存调入到内存。
从何处调入页面
外存的对换区足够大页面从外存的文件区复制到外存的对换区在对换区和内存之间调入调出。外存的对换区不大不会被修改的数据直接从文件区调入内存不需要写回外存下次需要再从文件区调入内存会被修改的数据复制到对换区在对换区和内存之间调入调出。UNIX方式第一次使用的页面都从文件区调入内存调出的页面放入对换区需要时再从对换区调入。
在外存和内存之间调入调出需要启动I/O操作将产生一定的系统开销。
缺页率 访问的页面不在内存的次数 / 访问页面总次数
为获取更大的虚拟地址空间除了磁盘硬盘还会扩展到固态硬盘甚至网络硬盘。
参考虚拟存储 虚拟存储技术是内存容量扩充的一种方式。 内存保护
多道程序时内存中存放多个进程各个进程必须只能访问各自的内存区域确保不会越界访问。
即本进程的内存区域可读可写非本进程的内存区域不可读写共享的内存区域根据授权。
方法1重定位寄存器又称基址寄存器界地址寄存器又称限长寄存器。分别存放进程在内存中的起始地址和最大逻辑地址。方法2下限寄存器上限寄存器。分别存放进程在内存中的起始地址和结束地址。 补充 链接方式静态链接、装入时动态链接、运行时动态链接。
静态链接程序装入内存前就已经将各目标模块和相关的库函数链接成完整的可执行文件装入模块也就确定了完整的逻辑地址。链接完成后装入模块再装入内存运行。装入时动态链接程序在装入内存时边装入边链接形成完整的逻辑地址。链接完成后已在内存。运行时动态链接程序在运行时使用到的模块装入内存并链接没有用到的模块不用装入内存链接。链接完成后已在内存。 装入方式绝对装入、可重定位装入又称静态重定位、动态运行时装入又称动态重定位。
绝对装入单道程序系统编译时就知道在内存的位置编译程序将逻辑地址转为物理地址。装入程序按照装入模块中的地址将相关数据装入内存中。装入模块中的地址已经是物理地址可重定位装入又称静态重定位。装入模块的地址从0开始指令或数据的地址都是相对于起始地址的逻辑地址装入内存时对地址进行重定位一次将逻辑地址全部转为物理地址。装入模块中的地址是逻辑地址装入内存时转为物理地址。运行期间不能移动不能再申请内存动态运行时装入又称动态重定位。装入模块的地址从0开始指令或数据的地址都是相对于起始地址的逻辑地址装入内存时依然是逻辑地址。需要重定位寄存器存放装入模块在内存中的起始地址。程序运行时通过重定位寄存器中的起始地址和逻辑地址得到物理地址。装入模块中的地址是逻辑地址装入内存时依然是逻辑地址运行时转为物理地址。内存地址可以不连续运行期间可以移动 程序放入内存运行时系统会建立相应的进程。进程在内存中包括两部分程序段存放指令等和数据段存放变量等。