xv6 PGROUNDUP PGROUNDDOWN 4k 地址对齐

#define PGSIZE          4096    // bytes mapped by a page

#define PGROUNDUP(sz)  (((sz)+PGSIZE-1) & ~(PGSIZE-1))
#define PGROUNDDOWN(a) (((a)) & ~(PGSIZE-1))

        PGROUNDUP PGROUNDDOWN 宏源代码在 mmu.h文件中。

        PGROUNDUP 为往上4k地址对齐,相当于可以把一个地址转换为比此地址高的4k地址。

        PGROUNDDOWN 为往下4k地址对齐,相当于可以把一个地址转换为比此地址低的4k地址。

参考下面代码查看地址转换结果

#include<stdio.h>
#define PGSIZE          4096    // bytes mapped by a page
#define PGROUNDDOWN(a) (((a)) & ~(PGSIZE-1))    //往低地址处对齐4k地址
#define PGROUNDUP(sz)  (((sz)+PGSIZE-1) & ~(PGSIZE-1))   //往高地址处对齐4k地址
#define KERNBASE 0x100F         // First kernel virtual address 可以尝试其它地址值
typedef unsigned int   uint;
  
int main()
{
	void *va;
	va = (void*)KERNBASE;
	char *a, *b;
	a = (char*)PGROUNDDOWN((uint)va);
	b = (char*)PGROUNDUP((uint)va);
	printf("PGROUNDDOWN=%x \nPGROUNDUP=%x\n",a,b);
	return 0;
}

可以参考stackoverflow的问答:

https://stackoverflow.com/questions/43289022/what-do-pgroundup-and-pgrounddown-in-xv6-mean

如有错误,欢迎批评指正

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值