内存的管理
三层结构
缓存:当有要多次重复利用的信息先到cache中 再到主存找 还没有到外存(思想)
每一个存储单元都有地址(主 外 缓)该地址唯一表示
内存以字节为单位 外存以块为单位
用户空间:用户应用占的内存空间 (OS也是软件运行本身要要内存)
系统空间:os占的内存 (存储管理管理的位置)
例如写一个c语言程序从 编写-->编译-->链接-->运行 整个过程中存在以下3种地址空间
变量名/函数名 符号地址(不是真正的地址)
指令地址和操作数地址 逻辑地址空间
.h ---编译-->obj---->运行
静态分配:基地址不能变(上面的1000)1000+200 限制了内存的使用不够灵活
动态分配:程序在解析(一行一行读)的时间运行时到系统中申请一段内存空间,发现申请到的地址为2000,记下来
再运行到200时
运行到哪一步再给他分配(如读到变量i 就给i分配 当i不用了释放内存)
不同的应用有自己各自的内存防止被其他应用破坏存储
基地址+长度 限长保护
寄存器本身也是一段存储空间(集成在CPU中)主板也有
存动态的信息
将物力内存分成一小片一小片的连续空间,每次给进程分配其中的一个
例如:每个小内存分成2K 程序需要7K的内存
申请4个块
运行结束之后将4个块还回去
如果程序需要的内存不够,那么就在那等,等其他程序运行结束之后,释放内存 该程序需要的内存如果满足就运行
动态的分配:
第1个程序来 产生一些碎片
第2个程序来 产生一些碎片
第3个程序来 产生一些碎片
第4个不够了, 系统会将碎片整理起来如果够程序4就指执行
不停分配回收空间
隔一段时间进行一次碎片的整理工作
空闲分区以链表的形式组织起来
物理上是不相邻的但是在感觉上是连在一起的
内容不一定清掉只是连接到空闲空间那里去
每个空闲分区都有一个特别的块来单独的存储该分区的存储信息
该空间的首地址+空闲的空间
首次适应:
一个模块申请完之后当下一个模块进来之后将之前的模块覆盖掉