存储管理(上)

内存的管理

三层结构

缓存:当有要多次重复利用的信息先到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就指执行

不停分配回收空间

隔一段时间进行一次碎片的整理工作

空闲分区以链表的形式组织起来

物理上是不相邻的但是在感觉上是连在一起的

内容不一定清掉只是连接到空闲空间那里去

每个空闲分区都有一个特别的块来单独的存储该分区的存储信息

该空间的首地址+空闲的空间

首次适应:

一个模块申请完之后当下一个模块进来之后将之前的模块覆盖掉

猜你喜欢

转载自blog.csdn.net/qq_29235677/article/details/90598638