内存管理 - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
- 描述 UNIX 内存管理的策略
- 参看 pdp11:内存管理
- UNIX核心态内存使用 用KISA KISD寄存器管理(参看pdp11:内存管理)
- 以下寄存器 在系统初启时固定
- KISA0/KISD0 - KISA5/KISD5 载入 UNIX代码
- KISA7/KISD7 为 系统I/O页
- KISA6/KISD6 指向了现行进程的ppda区(参看 进程图像)
- UNIX用户态内存使用 用UISA UISD寄存器管理(参看pdp11:内存管理)
举例说明
- 设 有一用户进程,共享正文段占内存页2.5页,数据段2.25页,栈段0.5页 (128内存块/页,64字节/内存块)
- ta 为 共享正文段的起始地址
- da 为 ppda区的起始地址
- 进程迁入内存时,地址映照表中da和ta取相应值
- 进程迁出内存时,地址映照表中da取0,ta取16 (PPDA区长为16块)
- 关于栈段起始地址的算法
- 栈段起始地址 = 数据段结束地址 + 栈段长度 - 128
- 数据段结束地址为 da+288
- 栈段长度为 64 块
- 栈段起始地址 = da + 288 + 64 - 128 = da + 224
- 栈段起始地址 = 数据段结束地址 + 栈段长度 - 128