4、内存映射
在最初的DOS时代,都是只支持单进程的,后来为了支持多进程,遇到了很多问题。
解决内存撑爆问题:
如下图:
把每个程序分块装入内存页框中,装入的是程序分成的页内存,大小4k。内存也分成大小4k的页框。
当运行一个程序时候,并不是一次就把这个程序分成的所有页内存都给放到内存中,而成用到哪个就加载入哪个。
LRU算法:当内存中放入满了的时候,会把一些不常用的页内存放在一个SWAP区,这一步骤由硬件完全操作,所以速度非常慢的。所有的关于缓存的算法,大多都是是由LRU算法。
解决相互打扰问题
这些页内存都是放在虚拟内存的,这个虚拟内存是比物理内存要大的多。如果是是64位的操作系统,那么它的虚拟内存就是2^64 byte大小的物理内存,同理,32位的操作系统就是2^32大小
比如上图,虚拟内存有这些的存放不同数据的空间,当然不止这些。其中可读写数据 或者 只读的代码数据,里面放的才是一块一块的4k大小的页内存,当使用的时候和物理内存的地址引用对应着,这个就是内存映射。
MMU
如上图,有4个进程P1,P2,P3,P4
它们共享一个虚拟内存地址,然后通过MMU,把数据同虚拟内存地址映射到物理内存,P4进程蓝色的暂时没有用到,所以扔在了SWAP区,也是物理磁盘上。
CPU如何区分立即数还是指令?
总线内部分为:数据总线、地址总线、控制总线。
地址总线目前46位。
比如CPU读取一个数据0100
,它到底是汇编mov指令呢,还是数字4呢?
《三体》中有句话——弱小和无知不是生存的障碍,傲慢才是。
所以我们不要做一个小青蛙
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2020-12-13 适配器模式