编程演示三种存储管理方式的地址换算过程.docx
《编程演示三种存储管理方式的地址换算过程.docx》由会员分享,可在线阅读,更多相关《编程演示三种存储管理方式的地址换算过程.docx(26页珍藏版)》请在冰豆网上搜索。
编程演示三种存储管理方式的地址换算过程
实习题目
指导教师
职称
学生姓名
学号
日期
实习题目
指导教师
职称
学生姓名
学号
日期
内蒙古师范大学计算机与信息工程学院
《操作系统》课程设计报告
实习题目
指导教师
职称
学生姓名
学号
日期
设计题目
编程演示三种存储管理方式的地址换算过程
指导教师
翟烨
职称
姓名
聂斐斐
学号
20111501182
日期
2014.6.27
计算机科学与技术专业课程设计任务书
学生姓名
聂斐斐
专业班级
13专升本
学号
20111501182
题目
编程演示三种存储管理方式的地址换算过程
课题性质
其它
课题来源
指导教师
翟烨
同组姓名
无
主要内容
1、分页方式的地址换算
2、分段方式的地址换算
3、段页式的地址换算
任务要求
要求演示正确、清晰,编程所用工具不限。
参考文献
张丽芬李侃刘利雄《操作系统学习指导与习题解析》电子工业出版社2006
谭浩强《C程序设计》清华大学出版社2008
任满杰等《操作系统原理实用教程》电子工业出版社2006
汤子瀛《计算机操作系统》(修订版)西安电子科技大学出版社2001
张尧学史美林《计算机操作系统教程》实验指导清华大学出版社2000
罗宇等《操作系统课程设计》机械工业出版社2005
审查意见
指导教师签字:
教研室主任签字:
年月日
说明:
本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页
1需求分析
编程演示三种存储管理方式的地址换算过程,分别为分页方式的地址换算,分段方式的地址换算,段页式的地址换算。
分页方式通过逻辑地址算出页号与叶内地址,然后通过页表来实现向物理地址的转换。
分段方式通过段号和段内地址得到物理地址。
段叶式通过段号得到页表首地址,通过页号得到块号,进而得到物理地址。
2概要设计
程序主要有三个功能,分别是分页方式的地址换算,分段方式的地址换算,段页式的地址换算。
利用可视化界面进行选择。
3运行环境
软件环境:
WindowXP,VisualC++6.0
4开发工具和编程语言
开发工具:
VisualC++6.0
编程语言:
C++语言
5详细设计
5.1流程图
5.2界面设计
5.3代码设计
//dizhizhuanhuanDlg.cpp:
implementationfile
//
#include"stdafx.h"
#include"dizhizhuanhuan.h"
#include"dizhizhuanhuanDlg.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
#include
#include
intpage(intA,intL);
intSegment(intsn,intsl);
intSegPagt(intsn,intpn,intpd);
typedefstructsegtable{
intsegf[256];
intsegl[256];
}segtable;
structsegtablest;
typedefstructsegpagt{
//intsegf[256];
intsegl[4];
intptl;
intpt[3][500];
//intpf[256];
intpl;
}segpagt;
structsegpagtsp;
inti,j;
intd,P;
intA,L;
intWD,wd;
intPT[4];
inttemp;
intkd;
intsn,sd;
intpn,pd;
/////////////////////////////////////////////////////////////////////////////
//CAboutDlgdialogusedforAppAbout
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
:
IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
voidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//Nomessagehandlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CDizhizhuanhuanDlgdialog
CDizhizhuanhuanDlg:
:
CDizhizhuanhuanDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CDizhizhuanhuanDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CDizhizhuanhuanDlg)
m_A=_T("");
m_L=_T("");
m_s=_T("");
m_sn=_T("");
m_sd=_T("");
m_sn1=_T("");
m_pn1=_T("");
m_pd1=_T("");
m_y1=_T("");
m_y2=_T("");
m_y3=_T("");
m_y4=_T("");
m_d0=_T("");
m_d1=_T("");
m_d2=_T("");
m_d3=_T("");
m_d00=_T("");
m_d11=_T("");
m_d22=_T("");
m_d33=_T("");
m_dy11=_T("");
m_dy12=_T("");
m_dy13=_T("");
m_dy14=_T("");
m_dy21=_T("");
m_dy22=_T("");
m_dy23=_T("");
m_dy24=_T("");
m_dy31=_T("");
m_dy32=_T("");
m_dy33=_T("");
m_dy34=_T("");
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
voidCDizhizhuanhuanDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDizhizhuanhuanDlg)
DDX_Text(pDX,IDC_EDIT1,m_A);
DDX_Text(pDX,IDC_EDIT2,m_L);
DDX_Text(pDX,IDC_JEIGUO,m_s);
DDX_Text(pDX,IDC_EDIT3,m_sn);
DDX_Text(pDX,IDC_EDIT4,m_sd);
DDX_Text(pDX,IDC_EDIT5,m_sn1);
DDX_Text(pDX,IDC_EDIT6,m_pn1);
//DDX_Text(pDX,IDC_EDIT7,m_pd1);
DDX_Text(pDX,IDC_Y1,m_y1);
DDX_Text(pDX,IDC_Y2,m_y2);
DDX_Text(pDX,IDC_Y3,m_y3);
DDX_Text(pDX,IDC_Y4,m_y4);
DDX_Text(pDX,IDC_D0,m_d0);
DDX_Text(pDX,IDC_D1,m_d1);
DDX_Text(pDX,IDC_D2,m_d2);
DDX_Text(pDX,IDC_D3,m_d3);
DDX_Text(pDX,IDC_D00,m_d00);
DDX_Text(pDX,IDC_D11,m_d11);
DDX_Text(pDX,IDC_D22,m_d22);
DDX_Text(pDX,IDC_D33,m_d33);
DDX_Text(pDX,IDC_DY11,m_dy11);
DDX_Text(pDX,IDC_DY12,m_dy12);
DDX_Text(pDX,IDC_DY13,m_dy13);
DDX_Text(pDX,IDC_DY14,m_dy14);
DDX_Text(pDX,IDC_DY21,m_dy21);
DDX_Text(pDX,IDC_DY22,m_dy22);
DDX_Text(pDX,IDC_DY23,m_dy23);
DDX_Text(pDX,IDC_DY24,m_dy24);
DDX_Text(pDX,IDC_DY31,m_dy31);
DDX_Text(pDX,IDC_DY32,m_dy32);
DDX_Text(pDX,IDC_DY33,m_dy33);
DDX_Text(pDX,IDC_DY34,m_dy34);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDizhizhuanhuanDlg,CDialog)
//{{AFX_MSG_MAP(CDizhizhuanhuanDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_RADIO1,OnYeshi)
ON_BN_CLICKED(IDC_RADIO2,OnDuanshi)
ON_BN_CLICKED(IDC_RADIO3,OnDuanyeshi)
ON_EN_CHANGE(IDC_EDIT1,OnChangeEdit1)
ON_BN_CLICKED(IDC_BUTTON1,OnButton1)
//ON_BN_CLICKED(IDC_BUTTON2,OnButton2)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CDizhizhuanhuanDlgmessagehandlers
BOOLCDizhizhuanhuanDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);//Setbigicon
SetIcon(m_hIcon,FALSE);//Setsmallicon
//TODO:
Addextrainitializationhere
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
voidCDizhizhuanhuanDlg:
:
OnSysCommand(UINTnID,LPARAMlParam)
{
if((nID&0xFFF0)==IDM_ABOUTBOX)
{
CAboutDlgdlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog:
:
OnSysCommand(nID,lParam);
}
}
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//thisisautomaticallydoneforyoubytheframework.
voidCDizhizhuanhuanDlg:
:
OnPaint()
{
if(IsIconic())
{
CPaintDCdc(this);//devicecontextforpainting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
//Centericoninclientrectangle
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//Drawtheicon
dc.DrawIcon(x,y,m_hIcon);
}
else
{
CDialog:
:
OnPaint();
}
}
//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags
//theminimizedwindow.
HCURSORCDizhizhuanhuanDlg:
:
OnQueryDragIcon()
{
return(HCURSOR)m_hIcon;
}
voidCDizhizhuanhuanDlg:
:
OnYeshi()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
YS();
UpdateData(false);
xz=1;
}
voidCDizhizhuanhuanDlg:
:
OnDuanshi()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
DS();
UpdateData(false);
xz=2;
}
voidCDizhizhuanhuanDlg:
:
OnDuanyeshi()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
DYS();
UpdateData(false);
xz=3;
}
voidCDizhizhuanhuanDlg:
:
OnChangeEdit1()
{
//TODO:
IfthisisaRICHEDITcontrol,thecontrolwillnot
//sendthisnotificationunlessyouoverridetheCDialog:
:
OnInitDialog()
//functionandcallCRichEditCtrl().SetEventMask()
//withtheENM_CHANGEflagORedintothemask.
//TODO:
Addyourcontrolnotificationhandlercodehere
}
voidCDizhizhuanhuanDlg:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
if(xz==1)
{
A=(int)atof(m_A);
L=(int)atof(m_L);
P=A/L;
d=A%L;
if(P>=4)
{
m_s=(CString)"页号大于页表长度,越界中断\n";
}
else
{
kd=PT[P];//根据页号随机产生快号
WD=kd*L+d;//计算物理地址的公式
temp=WD;
m_s.Format("%d",temp);
}
//return(0);
}
if(xz==2)
{
sn=(int)atof(m_sn);
sd=(int)atof(m_sd);
if(sn>4)
m_s=(CString)"段号大于段表长度4,越界中断";
elseif(sd>st.segl[sn])
m_s=(CString)"段内地址大于段长度,越界中断";
else
{
wd=st.segf[sn]+sd;//计算物理地址的算法
temp=wd;
m_s.Format("%d",temp);
}
}
if(xz==3)
{
sn=(int)atof(m_sn1);//段号
A=(int)atof(m_pn1);//逻辑地址
//pd=(int)atof(m_pd1);
pn=A/1024;
pd=A%1024;
if(sn>3)
m_s=(CString)"段号大于段表长度3,越界中断";
elseif(pn>=4)
m_s=(CString)"页号大于页表长度4,越界中断";
else
{
kd=sp.pt[sn-1][pn-1];
wd=kd*1024+pd;//计算物理地址的公式
temp=wd;
m_s.Format("%d",temp);
}
}
UpdateData(false);
}
intCDizhizhuanhuanDlg:
:
YS()
{
//intd,P,kd,i;
//intA,L;
//intWD;
//intPT[4];
for(i=1;i<=4;i++)
{
PT[i]=rand()%500;//定义随机产生的快号在1到500之间
}
m_y1.Format("%d",PT[1]);
m_y2.Format("%d",PT[2]);
m_y3.Format("%d",PT[3]);
m_y4.Format("%d",PT[4]);
return(0);
}
intCDizhizhuanhuanDlg:
:
DS()
{
//inti,wd;
//intsn,sd;
for(i=0;i<4;i++)
{
st.segf[i]=rand()%200;//定义随机产生段首地址
st.segl[i]=rand()%2000;//定义随机产生段长度
}
m_d0.Format("%d",st.segf[0]);
m_d1.Format("%d",st.segf[1]);
m_d2.