复习
- 页表和虚拟地址空间 虚拟内存
- 无穷大与无穷小在计算机的世界里不存在,与数学不一样。数值的表示方式。
- 使用n节b+树管理???page frame?每个叶子节点4096字节
- 当内存不足的时候 收回page frame 写进磁盘
- 策略的问题:已经分配的page frame中回收谁?page fault
- 换页算法,两种fault,第一种总是会的fresh,第二种refault 再次访问如何解决?FIFO算法。Belady反对。
- 提出了opt算法,预测未来,最远的地方被访问。先跑一遍,再replay.有已知答案,空间站
- LRUs时间 LFU频度 ; 复杂度提升。时间戳 频次
- access bit dirty bit 只给2bit , dirty bit 写操作
- access bit? 记录的物理地址?MMU?分级页表。有无被访问过。
- 12bit页表象空位 2位的置位操作由MMU来做 /
- cpu发出的读写操作使得相应页表象发生变化
- clock 算法
- 周期性扫描清空 access bit,若扫描到它为0,说明一分钟内没有人访问它。
- 使用两位 加上 dirty bit ;换出换两位都为0的页表项
- 若访问内存的周期与clock周期相同
- 写回磁盘昂贵操作,所以不会一下子写会,等到没有人访问再写回
-
给一个进程分配多大的物理空间?
-
工作集:动态概念随着时间推移 发生变化;一段时间内 进程曾经访问的物理页。也许过去访问的代表未来的。要访问的页面的集合。
-
常驻集:在当前时刻 ,实际上访问的 。常驻集是工作集的超集。
-

-
上一次访问的时间距离现在 满足时间
-
什么时候增加物理页?有page fault
-
没有人要求的情况下主动释放内存 ,理论上存在。有一个线程周期性查看
缺页率算法
- 在系统发生缺页时 在事件中


机制与策略
应用程序不同,策略不同。不同的函数
不同系统的替换策略
水位线
:空闲的页 预留,低于Low 扫描一遍 回收不怎么访问的内存 一直到high watermark.内存压力。到达Low的时候 ,悄悄回收 ,进程并未停止。min watermark 停下调度器,没有运行的进程,将水位线回到high
oom panic out of memory 当到达最下方尖处
MGLRU
两个指针 红色指针记录衰老程度。
从年龄最大的开始找,扩展位数 ,4;
图片来源,更加详细的介绍 todo
虚拟页式存储外存管理
- 哪些数据适合换出去?
- 非栈段
段式管理
- 只在80386中实现。。。灵活
内存管理+
-
页表结构是谁构建的? os内核,页表项记录物理地址。
-
一开始记录了宏。os知道虚拟地址与物理地址的对应关系
-
cpu运行 虚拟地址
-
系统当中有几个页表?
- 一张表pagelist 管理物理内存
- 每一个进程一个pagetable
- maps 虚拟地址空间布局规划 用掉的区域 每个进程一个

-
进程切换 换b+树树根
-
创建进程时,内存模块发生了什么?
- linux fork,调用后得到了自己的复制体,指令,上下文一模一样,有两个进程同时停在fork()==0判断条件,但是两者返回值不一样,分为两片 ,一个进程走上面,一个进程走下面。
- exec?按照提供的地址空间 重新构造
- shell

-
Fork负责创建一个新的进程 Fork由父进程调用,创建一个新的进程为子进程 新的进程与原进程共享所有的资源 页表复用,写时复制 新的进程为就绪态等待调度
-
Exec负责让进程执行一个特定的程序 Exec由子进程调用,改变其执行的内容 依据二进制文件格式重新建立页表映射
-
fork是为了 exec,
-
复制根节点和分支节点,叶子节点共享 写是复制。先复制再修改

-
第一个进程?
-
进程的内存回收?
wait(&rtn)父进程,等待并回收。没有人wait 僵尸z进程,回收;- 孤儿进程:父进程先亡。
- 垃圾收集。僵尸进程。
-
进程调度时发生了什么?
- 占据cpu
- 页表的树根填进satp
- mmu 重新分配 tlb清空
- cache清空? 数据局部性问题。游戏切换到音乐播放器。
- 未占据cpu
- 释放内存
- 占据cpu
-
抖动?thrashing
-
算力换存储。压缩算法。图片。不活跃的内存压缩。zram智能移动设备。flash设备性能寿命有限。