🔥 博客主页: 我要成为C++领域大神
🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】
❤️感谢大家点赞👍收藏⭐评论✍️本博客致力于分享知识,欢迎大家共同学习和交流。
计算机系统结构
什么是内存
内存(Memory),通常指计算机内存,是计算机系统中的一种存储设备,用于临时存储数据和指令,以便处理器能够快速访问和处理。内存是计算机系统的重要组成部分,主要用于存储正在运行的程序和操作系统的数据,确保系统能够高效地执行任务。内存通常分为两大类:随机存取存储器(RAM)和只读存储器(ROM)。
内存的分类
随机存取存储器(RAM)
动态随机存取存储器(DRAM):需要周期性刷新以维持数据,常用于主内存。
静态随机存取存储器(SRAM):不需要刷新,速度快,但成本高,通常用于缓存(Cache)。
只读存储器(ROM)
存储永久性数据,通常包含系统引导程序和固件,不易修改。
内存的功能
存储操作系统、应用程序和数据:内存提供一个临时存储区域,存储当前正在使用的数据和程序。
高速访问:内存的读取和写入速度远快于硬盘等存储设备,因此系统能更快地响应用户操作和执行任务。
数据交换:内存用于在CPU和其他硬件设备之间传输数据,确保高效的数据处理和系统运行。
内存的工作原理
- 加载数据:当程序或操作系统需要处理数据时,这些数据会从较慢的存储设备(如硬盘)加载到内存中。
- 执行指令:CPU从内存中读取指令和数据进行处理,执行操作。
- 临时存储:处理中间结果和临时数据存储在内存中,以便快速访问和修改。
- 数据交换:内存与CPU、硬盘、输入/输出设备之间进行数据交换。
内存的主要特性
易失性:RAM是易失性的,当电源关闭时,存储在其中的数据会丢失。
容量和速度:内存的容量和速度决定了系统的性能和多任务处理能力。更多的内存容量和更快的速度可以显著提高系统性能。
存取时间:内存的存取时间通常以纳秒(ns)为单位,表示读取或写入数据所需的时间。
内存结构
内存通常以层次结构组织,包括以下层次:
- 寄存器:CPU内部的高速存储单元,存取速度最快,但容量有限。
- 缓存(Cache):位于CPU和主内存之间,分为L1、L2、L3等不同级别,用于加速数据访问。
- 主内存(RAM):主要用于存储正在执行的程序和数据,容量较大,但存取速度相对较慢。
内存的应用
操作系统运行:操作系统核心及其服务和驱动程序运行在内存中。
应用程序执行:应用程序及其数据加载到内存中执行。
数据缓存:临时存储常用数据和指令,提高系统响应速度。
内存管理
连续分配管理(工业使用较多)
单一连续分配
只能用于单用户单任务操作系统。作业一旦进入内存,要等结束之后释放。无法实现多个进程共享主存
固定分区分配
将内存分成若干区,不同区可以放不同程序。
要先确定,运行就不能改变。通常采用静态重定位方式装内存。
动态分区分配
是可变分区分配。根据作业大小动态分配创建分区
非连续分配管理
页式存储
物理内存空间分为块(不一定连续),块大小与页大小相同,从0开始编号
逻辑空间等分为页,从0开始编号,页面大小为4KB
逻辑地址结构:页号,位移量(页内地址)
地址长度为32位,0~11位为页内地址,即,每页大小为4KB;12~31位为页号,最多220页
逻辑地址/212=页号%212=页内地址
物理地址=块号*块大小+偏移量
缺页中断与页面置换算法
OPT:最优页面置换算法
当发生缺页中断时,对于保存在内存中的每个逻辑页,计算在它的下一次访问之前,还需要等待多长时间,从中选择一个等待时间最长的页,作为被置换的页。
FIFO:先进先出算法
选择在内存中驻留时间最长的页面作为被置换页
LRU:最近最久未使用算法
选择最久未使用的页面,作为被置换页
页式存储优缺点
优点:
很好的解决外部碎片问题,只会产生内部碎片
打破内存分配的连续性需求
提高主存的利用率
缺点:
程序需要全部装入内存,需要有相应的硬件支持
会有内部碎片产生
动态的地址变化、方案实施需要耗用额外的系统资源
存储扩展问题没有解决一一进程大小受限制,可用块数小于进程需要的块数时需要等待
段式存储
段式存储基本原理:
用户编制的程序是由若干段组成的:
一个程序可以由一个主程序、若干子程序、符号表、栈以及数据等若于段组成。
每一段都有独立、完整的逻辑意义,每一段程序都可独立编制,且每一段的长度可以不同。
每一段都可从“0”编址,段与段之间地址不连续,但段内地址是连续的。
分段式存储管理为作业的每一个段分配一个连续的内存区域,用来存放该段信息。
段式管理的数据结构
逻辑地址结构:段号,位移量(段内地址)
段内地址 16位 即段最大大小64KB
逻辑地址/216=段号%216=段内地址
物理地址=基址+段内地址
段式存储优缺点
优点:
没有内部碎片
可以以段为单位编写和编译,隔断程序修改互相不影响
可以针对不同类型的段采取不同的保护
可以以段为单位进行共享,包括通过动态链接进行代码共享
缺点:
会产生外部碎片,不过由于进程被分为多个小块,所以外部碎片也会很小
段页式存储
段页式存储原理
用户程序先分段,每个段内部再分页 (内部原理同基本的分页、分段相同)
段页式存储总结
1、结合了段式和页式的优点;但是增加了表 (存储表和查询表)开销,只在大型计算
机系统中使用
2、段页式存储会产生外部碎片,还会产生内部碎片
段式和页式和段页式存储的比较
页式存储 就是说将程序分页时,页的大小是固定的,只根据页面大小强硬的将程序切割开而分段时比较灵活,只有一段程序有了完整的意义才将这一段切割开
分页式作业的地址空间是一维的,页间的逻辑地址是连续的,而分段式作业的地址空间则是二维的,段间的逻辑地址是不连续的
在页式、段式存储管理中,为获得一条指令或数据,须两次访问内存而段页式则须三次访问内存
内存碎片
内存碎片主要分为,内部内存碎片和外部内存碎片。
内存分页由于内存空间都是预先划分好的,页与页之间是紧密排列的,所以不会有外部碎片。
但是,因为内存分页机制分配内存的最小单位是一页,即使程序不足一页大小,我们最少只能分配一个页,所以页内会出现内存浪费,所以针对内存分页机制会有内部内存碎片的现象。
内存分段管理可以做到段根据实际需求分配内存,所以有多少需求就分配多大的段,所以不会出现内部内存碎片。
但是由于每个段的长度不固定,所以多个段未必能恰好使用所有的内存空间,会产生了多个不连续的小物理内存,导致新的程序无法被装载,所以会出现外部内存碎片的问题。