• 大小: 937KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: C/C++
  • 标签:

资源简介

使用c++写的对操作系统内存仿真算法,其中给了仿真要求和源代码,共大家仿真参考

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#define MAX_QUEUE_LEN 1000000
/*Event struct*/
typedef struct Event {
int page;
char mod;
}Event;
/*memory struct*/
typedef struct Memory{
int page;
char mod;
int ref;
int age; /*use for FIFO*/
}Memory;

/*convert a hex string to decimal int*/
int Hex2Decimal(char *hex);
/*init memory queue*/
Memory *initMemory(int NUMPAGES);
/*read the event file to Event queue*/
void readEventsFile(char *filename Event *eint *events_sizeint PAGESIZE);
/*SC */
void SC(Event *events int events_sizeint NUMPAGES);
/*ESC */
void ESC(Event *events int events_size int NUMPAGE);
/*ARB */
void ARB(Event *events int events_size int NUMPAGEint INTERVAL);
/*EARB */
void EARB(Event *events int events_size int NUMPAGE int INTERVAL);
/*print result*/
void printResult(int events int read int write);
int main(int argcchar** argv)
{
Event *events = (Event*)malloc(MAX_QUEUE_LEN*sizeof(Event));
int events_size; 
readEventsFile(argv[1]events&events_size atoi(argv[2]));
if (strcmp(argv[4]“SC“)==0)
SC(events events_size atoi(argv[3]));
else if (strcmp(argv[4] “ESC“) == 0)
ESC(events events_size atoi(argv[3]));
else if (strcmp(argv[4] “ARB“) == 0)
ARB(events events_size atoi(argv[3]) atoi(argv[5]));
else if (strcmp(argv[4] “EARB“) == 0)
EARB(events events_size atoi(argv[3]) atoi(argv[5]));
else return -1;
getchar();
}

void readEventsFile(char *filename Event *eint *e_sizeint PAGESIZE)
{
FILE *fin = fopen(filename“r“);
char s[100];
*e_size = 0;
while (fgets(s100fin))
{
if (s[0] == ‘R‘ || s[0] == ‘W‘)
{
char tmp[9];
sscanf(s “%c%s“ &e[*e_size].mod tmp);
e[*e_size].page = Hex2Decimal(tmp)/PAGESIZE;
++(*e_size);
}
}
}

int Hex2Decimal(char *hex)
{
int len = strlen(hex);
unsigned num = 0;
int shift;

for (int i = 0 temp = 0; i < len; i++ temp = 0)
{
char c = *(hex + i);
if (isalpha(c))
temp = isupper(c) ? c - 55 : c - 87;
if (isdigit(c))
temp = c - ‘0‘;
shift = (len - i - 1) * 4;
temp = temp << shift;
num = num | temp;
}
return num;
}

Memory * initMemory(int NUMPAGES)
{
Memory *m = malloc(NUMPAGES * sizeof(Memory));
for (int i = 0; i < NUMPAGES; ++i)
{
m[i].page = -1;
m[i].ref = -1; /*-1 is no page in this memory*/
m[i].mod = 0;
}
return m;
}

void SC(Event *events int events_size int NUMPAGES)
{
int disk_reads_count = 0 disk_writes_count = 0; /*result count*/
int m_ptr = 0; /*current memory pointer*/
Memory *memory = initMemory(NUMPAGES);
for (int i = 0; i < events_size; ++i) /*for each page in event queue*/
{
int hit = 0; 
for (int j = 0; j < NUMPAGES; ++j)
{
if (memory[j].ref != -1 && memory[j].page == events[i].page)
{//hit this page
/*if hit a no dirty memory change memory state*/
memory[j].mod = memory[j].mod == ‘R‘?events[i].mod:memory[j].m

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       10922  2018-10-11 16:46  memsim.c
     目录           0  2018-10-11 16:57  作业要求\
     文件      107404  2018-09-27 19:48  作业要求\example file 总览.pdf
     目录           0  2018-10-11 16:57  作业要求\example input files\
     文件       14340  2018-09-27 19:53  作业要求\example input files\.DS_Store
     目录           0  2018-10-11 16:57  作业要求\example input files\example input 1/output 1\
     文件        6148  2018-09-27 19:45  作业要求\example input files\example input 1/output 1\.DS_Store
     文件         221  2018-09-27 19:41  作业要求\example input files\example input 1/output 1\input1.trace
     文件          68  2018-09-27 19:42  作业要求\example input files\example input 1/output 1\input1_4096_8_ARB_2.expected
     文件          68  2018-09-27 19:46  作业要求\example input files\example input 1/output 1\input1_4096_8_EARB_2.expected
     文件          68  2018-09-27 19:47  作业要求\example input files\example input 1/output 1\input1_4096_8_ESC.expected
     文件          68  2018-09-27 19:41  作业要求\example input files\example input 1/output 1\input1_4096_8_SC.expected
     文件         566  2018-09-27 19:43  作业要求\example input files\example input 1/output 1\input1_ARB.detailed
     文件         542  2018-09-27 19:43  作业要求\example input files\example input 1/output 1\input1_EARB.detailed
     文件         558  2018-09-27 19:43  作业要求\example input files\example input 1/output 1\input1_ESC.detailed
     文件         582  2018-09-27 19:43  作业要求\example input files\example input 1/output 1\input1_SC.detailed
     目录           0  2018-10-11 16:57  作业要求\example input files\example input 2/output 2\
     文件        6148  2018-09-27 19:51  作业要求\example input files\example input 2/output 2\.DS_Store
     文件         220  2018-09-27 19:49  作业要求\example input files\example input 2/output 2\input2.trace
     文件          68  2018-09-27 19:50  作业要求\example input files\example input 2/output 2\input2_4096_8_ARB_1.expected
     文件          68  2018-09-27 19:50  作业要求\example input files\example input 2/output 2\input2_4096_8_EARB_1.expected
     文件          68  2018-09-27 19:50  作业要求\example input files\example input 2/output 2\input2_4096_8_ESC.expected
     文件          68  2018-09-27 19:49  作业要求\example input files\example input 2/output 2\input2_4096_8_SC.expected
     文件         513  2018-09-27 19:50  作业要求\example input files\example input 2/output 2\input2_ARB.detailed
     文件         489  2018-09-27 19:50  作业要求\example input files\example input 2/output 2\input2_EARB.detailed
     文件         529  2018-09-27 19:50  作业要求\example input files\example input 2/output 2\input2_ESC.detailed
     文件         537  2018-09-27 19:50  作业要求\example input files\example input 2/output 2\input2_SC.detailed
     目录           0  2018-10-11 16:57  作业要求\example input files\example input 3_output 3\
     文件        6148  2018-09-27 19:52  作业要求\example input files\example input 3_output 3\.DS_Store
     文件         440  2018-09-27 19:51  作业要求\example input files\example input 3_output 3\input3.trace
     文件          68  2018-09-27 19:51  作业要求\example input files\example input 3_output 3\input3_4096_12_ARB_4.expected
............此处省略56个文件信息

评论

共有 条评论

相关资源