课程内容
**
内存条、总线、DMA
**、
内存调用、OS内存管理与分类。
总线在主板上:数据总线、地址总线、i/o总线
CPU与内存条是通过地址总线和数据总线直接相连的
南桥里有一个DMA控制器芯片**(与并发、多线程相关)**
DMAC 直接内存访问控制器
当CPU把活交给DMAC时、会顺带把所有总线控制权给DMAC、所以DMAC可以进行数据访问和读写。
PS:DMAC并不是一直掌握总线当控制权,而是切片这种,1ms交换,不然的话读文件的时候鼠标键盘会失灵。同时也正因为如此,访问内存大文件传输玩游戏会卡顿? :(
DMAC和CPU不能同时使用总线;
在DMA方式下,CPU和总线是隔离的
【OS】操作系统的内存管理
为什么要有逻辑地址?
1.程序无法知道可用的物理地址,所以必须作出映射。
操作系统是多进程的,当前进程可能操作的地址在其他进程中正在使用,所以说除非是单进程机器,多进程机器需要有逻辑地址,映射。
逻辑地址与物理地址如何映射?内碎片外碎片是啥?
这个不太好,1.我们无法知道程序使用的具体内存,如果划分个最大内存会造成实际使用往往没有辣么多,造成***内碎片***。 2.当程序运行完内存会被释放,如下图,新程序进不来,外碎片
为了减少碎片问题,进行分页
为了区分逻辑内存和物理内存
把逻辑内存分为多个页(page)、物理内存分为多个帧(page frame)
并通过页表联系,如下图
每个进程映射关系是独立的,所以每个进程都有独立的映射表
https://www.bilibili.com/video/BV1u7411z7Sv?from=search&seid=8912249440231407534
这个视频8分处有一道计算物理地址偏移量的题目,待及时解决0.0
很多时候如果我们又打开游戏又放歌又打开另外一个游戏打开很多进程,可能会造成他们使用的内存大于我们计算机的内存条大小总和,这个时候就需要通过分页把不着急的内存放到磁盘里。(分页)
好的,,讲讲页表访问的优化
linux下的内存情况
内存相关的系统调用
系统调用是用户态切内核态的方式之一,申请内存就需要使用系统调用。
以c语言 malloc函数为例,malloc函数是c语言申请内存的函数,他其实是sbrk和mmap封装好的函数,内存申请小于128k时调用sbrk。
可见,sbrk申请内存是连续的。
brk1 实际上申请了4k内存 4096个字节
java中的内存
https://www.bilibili.com/video/BV1454y1X7rk?p=5
等尚硅谷课学到一定程度在学习吧