栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

2021-10-24

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-24

**

编写一个段页式存储管理模拟程序

**
用C语言编写的一个段页式存储管理模拟程序

#include 
#include 
#include 
#define Maxn 5
 
int page_table[5] = {2,3,6,8,9};//段内页号
int Seg_address[5] = {2,12,30,45,73};//段内地址
bool page_state[10];//页表状态
int address[100];
int tran_address[100];//转换的物理地址
int num;
int Seg_table_register[2];
 
typedef struct
{
    int seg_address;//段表开始的地址
    int seg_final_address;
} Box;
 
typedef struct
{
    Box data[Maxn];
} Segment;
 
Segment seg_table;
 
void Seg_table()
{
    Seg_table_register[0] = Seg_address[0];
    Seg_table_register[1] = Maxn;
    memset(page_state,false,sizeof(page_state));
    for(int i = 0; i<5; i++)
    {
        seg_table.data[i].seg_address = Seg_address[i];
        seg_table.data[i].seg_final_address = page_table[4] + Seg_address[i] - Seg_table_register[0];
        page_state[page_table[i]] = true;
		printf("%dt%dn",seg_table.data[i].seg_address,seg_table.data[i].seg_final_address);
    }
}
 
void init()
{
    printf("请输入地址数量:");
	scanf("%d",&num);
    printf("请输入地址数大小:");
    for(int i = 0; i= seg_table.data[i].seg_address) && (address[k] <= seg_table.data[i].seg_final_address))
            {
                int index = 0;
                for(int j = 0; j<5; j++)
                {
                    if(seg_table.data[i].seg_address + page_table[j] - Seg_table_register[0] == address[k]
                            && page_state[page_table[j]] == true)
                    {
                       printf("%d的转换地址n",address[k]);
                       printf("段号:%dn",i);
					   printf("段号对应的地址:%dn",Seg_address[i]);
					   printf("页号:%dn",j);
                       printf("块号:%dn",page_table[j]);
                        page_state[page_table[j]] = false;
                        index = 1;
                        i = Maxn;
                    }
                }
                if(index == 0)
                {
					printf("在页表中没能找到:%d !!!n",address[k]);
                    i = Maxn;
                }
            }
            else if(address[k] < Seg_table_register[0])
            {
				printf("地址太低:%d !n",address[k]);
                i = Maxn;
            }
            else if(address[k] > seg_table.data[Maxn-1].seg_final_address)
            {
				printf("地址越界:%d !n",address[k]);
                i = Maxn;
            }
            else
            {
                if(i == Maxn - 1)
					printf("在段表中没能找到:%d !!n",address[k]);
            }
        }
    }
}
 
int main()
{
    address_translation();
    return 0;
}

程序输出的结果为:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/347818.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号