资源简介
使用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个文件信息
- 上一篇:c++类型长度查看方式
- 下一篇:c++写的库存管理程序
评论
共有 条评论