操作系统之位图代码分析

位图是一种压缩存储方式,常用于内存管理和虚拟地址转换。本文深入解析位图在内存管理中的应用,包括页目录、页表的概念,以及32位虚拟地址的转换过程。在操作系统中,通过pte_ptr和pde_ptr函数实现对页表项和页目录项的修改,以创建和管理虚拟地址与物理地址的映射。
摘要由CSDN通过智能技术生成

位图:综合起来,位图就是用字节中的 1 位来映射其他单位大小(默认一页4K)的资源,按位与资源之间是一对一的对应关系。
那么一字节八位对应32K,40000*32K=
本质上是压缩存储来方便管理
在书中

struct bitmap {
   uint32_t btmp_bytes_len;
/* 在遍历位图时,整体上以字节为单位,细节上是以位为单位,所以此处位图的指针必须是单字节 */
   uint8_t* bits;
};

后续的内存管理中多处用到了位图
管理虚拟地址用到了位图:memory.h

/* 用于虚拟地址管理 */
struct virtual_addr {
/* 虚拟地址用到的位图结构,用于记录哪些虚拟地址被占用了。以页为单位。*/
   struct bitmap vaddr_bitmap;
/* 管理的虚拟地址 */
   uint32_t vaddr_start;
};
struct virtual_addr kernel_vaddr;	 // 此结构是用来给内核分配虚拟地址

用内存池pool管理物理地址,比虚拟地址复杂,分为kernel和user两个pool:memory.c

/* 内存池结构,生成两个实例用于管理内核内存池和用户内存池 */
struct pool {
   struct bitmap pool_bitmap;	 // 本内存池用到的位图结构,用于管理物理内存
   uint32_t phy_addr_start;	 // 本内存池所管理物理内存的起始地址
   uint32_t pool_size;		 // 本内存池字节容量
};

struct pool kernel_pool, user_pool;      // 生成内核内存池和用户内存池

32位虚拟地址的转换过程
1.高10位࿰

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值