问答题 用C语言函数模拟简单分段系统的存储器管理硬件,编写一个函数Trans,把分段的虚地址转换成物理地址,并返回一个int类型的物理地址。假设已经编写了一个处理分段错误的函数Fault。segTable变量包含了段表。
Struct SegTableType {
int loc; /*段起始地址*/
int len; /*段的字节数即长度*/
};
Struct VirtualAddressType {
int seg; /*段地址*/
int off; /*偏移量*/
};
Struct SegTableType segTable[NUMBER_SEGMENTS];
Void Fault(); /*处理分段错误*/
【正确答案】
【答案解析】函数代码如下:
int Trans(struct VirtualAddressType virtAddr) {
int physAddr=-1;
if(virtAddr.off>=segTable(virtAddr.seg).len)
fault();
else
physAddr=segTable(virtAddr.seg).loc+virtAddr.off;
return physAddr;
}