| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 289 人关注过本帖
标题:作了一个实验出现了一下错误不知道啥意思可以帮我看一下不
只看楼主 加入收藏
丽丽love
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-12-3
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
作了一个实验出现了一下错误不知道啥意思可以帮我看一下不
#include <stdio.h>
#define n 64 /*模拟实验中假定的页表长度*/
#define length 10 //后面定义了页号数组p[length],意味着最多length个页面同时在内存中

struct
{
    int lnumber;/*页号 logic pagenumber*/
    int flag; /*表示该页是否在内存,"1"表示在内存中,"0"表示不在*/
    int pnumber;/*该页所在内存的物理块号physical number,-1表示不在内存*/
    int write; /*该页是否被修改过,"1"表示修改过,"0"表示没有修改过*/
    int dnumber;/*该页存放在磁盘上的位置,即磁盘块号disk number*/
}page[n]; /*页表定义*/

int m; /*m为该作业在内存中的内存块块数*/
unsigned int page_length;/*页表实际长度*/
int p[length]; /*存放在内存中页的页号数组(内存中最多可装入length个页面)*/
int head; /*内存中页号队列*/  //head始终指向进入内存最早的页面,也就是将被淘汰页

void page_interrupt(int lnumber)

{
    //第lnumber页缺页中断处理
    int j;
    printf("调入第%d页时发生缺页中断\n",lnumber);
    /*淘汰页*///这里采用的是先进先出算法,head始终指向进入内存最早的页面
    j=p[head];
    p[head]=lnumber;
    head=(head+1)%m;
    if (page[j].write==1)
        printf("将页 %d写回磁盘第%d块\n",j,page[j].dnumber); //模拟将修改过的页面写回磁盘的操作
    page[j].flag=0;/* 第j页存在标志改为"0"*/
    page[lnumber].pnumber=page[j].pnumber;    //将被淘汰页所占内存中的物理块分配给要调入的页面
    page[lnumber].flag=1;/* 第lnumber页存在标志改为"1",表示已调入内存*/
    page[lnumber].write=0;/* 第lunmber页修改标志改为"0",表示尚未被修改*/
    printf("淘汰内存块%2d中的页%2d,从磁盘第%d块中调入页面%2d\n",
        page[j].pnumber,j,page[lnumber].dnumber,lnumber);
    page[j].pnumber=-1; //对调出的页面进行的处理
    page[j].write=0;
}


void command(unsigned laddress, int write)
{    /*模拟指令的执行过程
    传入参数:laddress逻辑地址,write修改数据标志*/
    unsigned paddress,ad,pnumber,lnumber;//物理地址,页内位移,外存物理块号,页号
kk:
    /*取出逻辑地址laddress中的页号lnumber(高6位)和页内地址ad*/
    lnumber=laddress>>10;//取高6位
    ad=laddress&0x3ff;//取低10位
    printf("该指令对应的页号为%2d,页内地址为%x\n",lnumber,ad);
    if(lnumber>=page_length) /*如果页号超出页表长度*/
    {
        printf("不存在该页\n");
        return;
    }

    if(page[lnumber].flag==1) //页号为lnumber的页面在内存中
    {
        pnumber=page[lnumber].pnumber;/* 从页表中取得内存物理块号*/  
        paddress=pnumber<<10|ad;/* 合并块号和块内地址形成物理地址paddress*/
        printf("逻辑地址是:%x 对应物理地址是:%x\n",laddress,paddress);
        if(write==1)/*如果需要写,修改页的修改标志位*/
            page[lnumber].write=1;
    }
    else




下面是出现的错误提示pp1.cpp
C:\Documents and Settings\user\桌面\wo\Cpp1.cpp(66) : fatal error C1004: unexpected end of file found
执行 cl.exe 时出错.

Cpp1.exe - 1 error(s), 0 warning(s)
搜索更多相关主题的帖子: physical include number write 
2014-12-03 10:46
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:20 
这个程序是用来干嘛的?

一片落叶掉进了回忆的流年。
2014-12-03 11:50
快速回复:作了一个实验出现了一下错误不知道啥意思可以帮我看一下不
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043450 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved