(一)内存
程序运行起来要加载到内存里
(二)内存管理
操作系统对应用程序一种使用内存的管理方式,能够保证所有应用程序正常运行,避免不同的应用程序使用同一块内存,造成数据混乱。
不使用内存管理会造成内存泄漏、系统容易崩溃和死机等问题,会造成系统空间的资源浪费、安全问题等。使用内存管理在出现问题时系统会自动提醒你。
(三)内存管理的分类
1.连续分配管理:
必须是连续的空间,当剩余空间总大小足够,但内存地址不是连续的,应用程序就无法进行。
(1)单一连续分配:只能用于单用户单任务操作系统。作业一旦进入内存,要等待结束之后释放。无法实现多个进程共享主存。任务只能执行一个,等待任务完成后才能再进行下一个任务,不区分用户。当前内存只给这一个任务使用,任务占用了整个内存,无论任务大小。
(2)固定分区分配:将内存分成若干取不同区可以放不同程序要先确定大小,大小可以不同。运行就不能改变,通常采用静态重定位方式装内存。内存大小分配之后不能改变。
(3)动态分区分配:是可变分区分配。根据作业大小动态分配创建分区。
都具有连续分配管理的普遍缺点
2.非连续性分配管理:
非连续性分配管理不一定是连续的空间,空间大小足够大,分散的空间也可以让应用程序运行。
(1)页式存储
基本原理:页的大小固定,可以是1k/2k/4k。把应用程序分成大小固定的页,把内存空间分成大小固定的块,页和块的大小相等。把页中的程序装到某个块里。页表用来记录页中的程序的去向。
页式存储优缺点
优点:
很好的解决外部碎片问题,只会产生内部碎片
打破内存分配的连续性需求
提高主存的利用率
缺点:
程序需要全部装入内存,需要有相应的硬件支持
会有内部碎片产生3.动态的地址变化、方案实施需要耗用额外的系统资源
存储扩展问题没有解决--进程大小受限制,可用块数小于进程需要的块数时需要等待页表与地址映射
(2)段式存储
基本原理:用户编制的程序是由若干段组成的:一个程序可以由一个主程序、若干子程序、符号表、栈以及数据等若干段组成。每一段都有独立、完整的逻辑意义,每一段程序都可独立编制,且每一段的长度可以不同。每一段都可从“0”编址,段与段之间地址不连续,但段内地址是连续的。分段式存储管理为作业的每一个段分配一个连续的内存区域,用来存放该段信息
段式存储优缺点:
优点:
没有内部碎片
可以以段为单位编写和编译,隔断程序修改互
相不影响
可以针对不同类型的段采取不同的保护
可以以段为单位进行共享,包括通过动态链接进行代码共享缺点:会产生外部碎片,不过由于进程被分为多个小块,所以外部碎片也会很小段式存储地址映射 内存空间(基址+段内地址)
(3)段页式存储
用户程序先分段,每个段内再分页
结合了段式和页式的优点;会产生内部碎片和外部碎片
(4)三种存储的比较
页式存储,就是说将程序分页时,页的大小是固定的,只根据页面大小强硬的将程序切割开。而分段式比较灵活,只有一段程序有了完整的意义才将这一段切割开。
分页式作业的地址空间是一维的,页间的逻辑地址是连续的而分段式作业的地址空间则是二维的,段间的逻辑地址是不连续的。
在页式、段式存储管理中,为获得一条指令或数据,须两次访问内存;而段页式则须三次访问内存缺页中断与页面置换算法
(5)缺页中断与页面换算的算法
在系统内存用完了再运行一个进程,系统会在外存中申请空间来保存此时系统进程中被替换的块中的数据,然后将腾出的空间用于运行将要运行的进程,其中数据被改变,当用户想要访问被替换的进程时,触发缺页中断,发生缺页中断后就会把存到外存中的数据放回到原来的块中,进程中的数据存放到外存中
OPT:
最优页面置换算法当发生缺页中断时,对于保存在内存中的每个逻辑页,计算在它的下一次访问之前,还需要等待多长时间,从中选择一个等待时间最长的页,作为被置换的页。
FIFO:
先进先出算法选择在内存中驻留时间最长的页面作为被置换页
LRU:
最近最久未使用算法选择最久未使用的页面,作为被置换页,
(四)地址与碎片
逻辑地址:虚拟地址,是CPU生成的地址,不是真实的内存地址,但可以通过计算算出真实地址,虚拟地址的大小取决于处理器和操作系统的设计。 (VirtualAddress)
物理地址:真实的内存的地址 (Real Address),不是映射关系
虚拟内存:私有的内存空间,逻辑地址对应虚拟内存,内存大小也是假的
内部碎片:分配的空间剩下一部分多余的空间
外部碎片:总的内存空间给每个进程分配完了之后剩余的内存空间
Comments NOTHING