小林coding之--图解网络/阅读记录
route -n: 查看路由表
arp -a: 查看arp缓存
内存分段:
- 虚拟地址:段选择子,段内偏移量
- 段寄存器,:段号 -> 段表
- 段表项:段的基地址,段的界限和特权等级
分段机制,程序被分为几个段(代码段,数据段,栈段,堆段),整个程序不必放在一个连续的
内存中,但是一个段必须放在连续的内存中。毕竟我们访问一个段时,是通过基地址+段内偏移量
定位的,如果一个段不是连续的,那么通过这种定位方式就会出错。、
参考
https://www.eet-china.com/mp/a122058.html
内存分页:
虚拟地址 -> 切分成:虚拟页号和页偏移
查页表:虚拟页号->物理页号
例如,在32位系统下,页面大小为4KB,每个进程都有一个页表,每个页表都有2^20个项。
每项占4B的话,每个进程就都有一个4MB的页表。
4MB的页表需要1024个页来存储(一页为4KB)
多级页表:节约页表的内存占用。原因:根据需要动态创建二级页表
那么为什么不分级的页表就做不到这样节约内存呢?
我们从页表的性质来看,保存在内存中的页表承担的职责是将虚拟地址翻译成物理地址。
假如虚拟地址在页表中找不到对应的页表项,计算机系统就不能工作了。所以页表一定要覆盖全部虚
拟地址空间,不分级的页表就需要有 100 多万个页表项来映射,而二级分页则只需要 1024 个页表
项(此时一级页表覆盖到了全部虚拟地址空间,二级页表在需要时创建)。
参考:
https://blog.csdn.net/CillyB/article/details/73522516
https://blog.51cto.com/u_15169172/2986431
内存分配和回收
- malloc分配的是虚拟内存,且只在对虚拟内存进行读写时才真正的去分配物理内存
- 后台内存回收(kswapd
- 直接内存回收(direct reclaim
- OOM(out-of-memory) :/proc/pid/oom_score_adj
- 回收匿名页的倾向:/proc/pid/oom_score_adj
参考: https://xiaolincoding.com/os/3_memory/mem_reclaim.html
待看:
内存管理单元:MMU
页表是存储在内存里的,内存管理单元 (MMU)就做将虚拟内存地址转换成物理地址的工作。
而当进程访问的虚拟地址在页表中查不到时,系统会产生一个缺页异常,进入系统内核空间分配物理内存、更新进程页表,最后再返回用户空间,恢复进程的运行。
直接回收内存会阻塞当前的进程,什么叫阻塞当前进程?
后台回收内存不会阻塞当前进程,为什么?

浙公网安备 33010602011771号