![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e7cac09709e140a8dd1621c5a272d893.png#pic_center)
一、操作系统虚拟内存
虚拟内存主要提供了三种能力(三种原因):
【1】将主存看成是一个存储在磁盘上的地址空间的高速缓存(作为缓存)
【2】为每个进程提供一致的地址空间,从而简化内存管理(作为内存管理)
【3】防止每个进程的地址空间被其他进程所破坏(作为内存保护)
(一)虚拟内存原理(局部性原理)
局部性原理的定义是在一段时间内,程序的执行仅局限于某个部分;相应地,它所访问的存储空间也局限于某个区域内。出现局部性原理有如下原因:
程序在执行时,除了少部分的转移和过程调用指令外,大多数仍是顺序执行的;
子程序调用将会使程序的执行由一部分内存区域转至另一部分区域,也就是说程序只是从一个局部跳跃到另一个局部而已;
程序中存在许多循环结构,循环体中的指令被多次执行;程序中还包括许多对数据结构的处理,如对连续的存储空间——数组的访问,往往局限于很小的范围内。
虚拟内存是一种允许进程部分装入内存就可以执行的技术,它基于的原理就是局部性原理,因为程序具有局部性,所以只需要把当前需要执行的程序内容装入内存即可,这个时候用户看到的逻辑地址空间就比物理地址空间大,要实现这个功能就必须允许页面能够被换入和换出。
1.页面调入策略
- 预测调页策略:主动的页面调入策略,即把那些预计很快会被访问的程序或数据所在的页面,预先调入内存;这个策略的性能取决于预测的准确率,预测的准确率不高(50%),主要用于进程的首次调入。也有的系统将预调页策略用于请求调页。
- 请求调页策略:当进程在运行中发生缺页时,由系统将缺页调入内存;目前虚拟存储器系统大多采用此策略;但在调页时须花费较大的系统开销,如需频繁启动磁盘I/O。
2.页面置换策略
内存可能会有装满的情况下,这个时候如果来了新的程序想要进入内存,就必须执行页面置换,将内存中暂不使用的程序先从内存调出到外存。
最佳页面置换算法
先进先出置换算法
最近最久未使用算法LRU
时钟页面置换算法
最不常用算法LFU
(二)进程地址空间(内存管理)
1.进程内存
- 代码段:程序代码,存放函数体的二进制代码。
- 数据段:在程序运行初已经对变量进行初始化的数据。
- BSS:在程序运行初未对变量进行初始化的数据。
- 栈 (Stack):存储局部、临时变量,函数调用返回值。
- 堆(Heap):存储动态内存分配,需要程序员手工分配,手工释放。
Linux的虚拟地址空间范围为0~4G,Linux内核将这4G字节的空间分为两部分, 将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF)供内核使用,称为“内核空间”。而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF)供各个进程使用,称为“用户空间。因为每个进程可以通过系统调用进入内核,因此,Linux内核由系统内的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有4G字节的虚拟空间。
- 进程中变量的存放在进程中都是相较进程地址起始地址的逻辑地址。
- 虚拟地址到物理地址转换过程有操作系统和CPU共同完成(操作系统为CPU设置好页表,CPU通过MMU单元进行地址转换)
2.线程共享的进程空间和线程独立空间
3.进程、线程、协程的对比
- 协程既不是进程也不是线程,协程仅仅是一个特殊的函数,协程它进程和进程不是一个维度的。
- 一个进程可以包含多个线程,一个线程可以包含多个协程。
- 一个线程内的多个协程虽然可以切换,但是多个协程是串行执行的,只能在一个线程内运行,没法利用CPU多核能力。
- 协程与进程一样,切换是存在上下文切换问题的(只在用户态切换)。
二、CPU缓存
CPU直接读取的数据来自寄存器,L1缓存是离cpu核最近的缓存大小为32k,L2是下一级缓存,大小为256k,L1和L2是每个核心独有的,而L3是多个核心所共有的一块高速缓存,大小大概是几MB到几十MB。L1,L2和L3都是SRAM缓存,而内存是DRAM缓存,数据都被存在电容中,需要不停的刷新。
CPU缓存一致性问题
由于CPU是多核的,且每个核独立拥有L1、L2级缓存,共享L3级缓存,所以会导致CPU缓存一致性问题。
解决方案:
- 总线嗅探:当某个CPU核更新了cache中的数据,要通过总线将更新事件广播给其他CPU核。
- MESI协议:用modifed(修改)、exclusive(独占)、shared(共享)和invalidated(失效)四个状态来修饰Cache Line的状态。
(如有错误,请评论指正)
参考链接:
[1]: 小林coding,图解系统
[2]: https://blog.csdn.net/zhangzhebjut/article/details/39060253
[3]: https://blog.csdn.net/zheng199172/article/details/88800275