IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 2021-10-24 -> 正文阅读

[C++知识库]2021-10-24

**

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

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#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("%d\t%d\n",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<num; i++)
        scanf("%d",&address[i]);
    Seg_table();
}
 
void address_translation()
{
    init();
    for(int k = 0; k<num; k++)
    {
        for(int i = 0; i < Maxn; i++)
        {
            if((address[k] >= 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("段号:%d\n",i);
					   printf("段号对应的地址:%d\n",Seg_address[i]);
					   printf("页号:%d\n",j);
                       printf("块号:%d\n",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;
}

程序输出的结果为:

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-25 12:21:44  更:2021-10-25 12:23:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:07:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码