首页 > 其他分享 >简记操作系统中逻辑地址到物理地址的转换

简记操作系统中逻辑地址到物理地址的转换

时间:2022-10-11 16:58:08浏览次数:53  
标签:操作系统 int 地址 lenOfPT 物理地址 简记 进程 struct

这里稍微整理一下操作系统中进程逻辑地址到实际物理地址中的转换,可惜开始没注意到用的笔太细了,当然,本身写字也比较随意。

image

image

#include<iostream>
using namespace std;
#define sizeofPageTable 4 //这里就是 存储一个页地址用的大小,3B或者4B 
#define sizeofPage 4096	//这里假设按照4096字节将物理空间分页 
typedef struct pageTable {
	char arr[sizeofPageTable];//便于理解,表示这个数据结构可人工设置大小 
} *PageTable;

typedef struct pcb {
	PageTable* PT;	//一片连续的存储进程页表信息的空间 
	int lenOfPT; //PTR中的页表长度? 代表进程已分配的页的数量 
} *PCB;

typdef struct pcr {
	unsigned int addrOfStart;	//进程在内存中的起始物理地址
	int lenOfPT; //页表长度 代表进程已分配的页的数量 
} *PCR; 
int main()
{
	unsigned int logicAddr = 0x123456;	//随便写的
	int pageIndex = logicAddr>>20;	//pcb中PT数组的下标 
	int pageOff = logicAddr&(sizeofPage - 1);	//即保留低位12bit,即为页内偏移地址 
	
	if(pageIndex >= PCR->lenOfPT)
	{
		printf("空间越界!该进程并没有分配这么多的空间!\n");
		return -1;
	}
	//随便写的,只是便于理解;这里的前提是系统的物理地址为4GB,并且一个页面大小为4096B 
	int realAddr = PCR->addrOfStart + PCB->PT[pageIndex]*sizeofPage + pageoff; 
}

欢迎指正,本人不过总结当前所学,并无实际调试经验,能力有限,若有错误,也是难免。

标签:操作系统,int,地址,lenOfPT,物理地址,简记,进程,struct
From: https://www.cnblogs.com/dayq/p/16779741.html

相关文章