首先分析这个源码,我们可以先从入口函数进行入手,首先我们来到ssd.c这个文件里面,来到它的main函数里面,首先我们先看这个比较重要的函数,initiation函数。
void main()
{
unsigned int i,j,k;
struct ssd_info *ssd;
#ifdef DEBUG
printf("enter main\n");
#endif
ssd=(struct ssd_info*)malloc(sizeof(struct ssd_info));
alloc_assert(ssd,"ssd");
memset(ssd,0, sizeof(struct ssd_info));
ssd=initiation(ssd);
make_aged(ssd);
pre_process_page(ssd);
for (i=0;i<ssd->parameter->channel_number;i++)
{
for (j=0;j<ssd->parameter->die_chip;j++)
{
for (k=0;k<ssd->parameter->plane_die;k++)
{
printf("%d,0,%d,%d:%5d\n",i,j,k,ssd->channel_head[i].chip_head[0].die_head[j].plane_head[k].free_page);
}
}
}
fprintf(ssd->outputfile,"\t\t\t\t\t\t\t\t\tOUTPUT\n");
fprintf(ssd->outputfile,"****************** TRACE INFO ******************\n");
ssd=simulate(ssd);
statistic_output(ssd);
/* free_all_node(ssd);*/
printf("\n");
printf("the simulation is completed!\n");
/* _CrtDumpMemoryLeaks(); */
}
首先我们进入initiation函数里面,我们可以看见,有许多输入参数的地方,然后接下来,我对这些参数进行下解释
struct ssd_info *initiation(struct ssd_info *ssd)
{
unsigned int x=0,y=0,i=0,j=0,k=0,l=0,m=0,n=0;
errno_t err;
char buffer[300];
struct parameter_value *parameters;
FILE *fp=NULL;
printf("input parameter file name:");
// gets(ssd->parameterfilename);
strcpy_s(ssd->parameterfilename,16,"page.parameters");
printf("\ninput trace file name:");
//gets(ssd->tracefilename);
strcpy_s(ssd->tracefilename,25,"example.ascii");
printf("\ninput output file name:");
//gets(ssd->outputfilename);
strcpy_s(ssd->outputfilename,10,"test.out");
printf("\ninput statistic file name:");
//gets(ssd->statisticfilename);
strcpy_s(ssd->statisticfilename,16,"test.dat");
/*strcpy_s(ssd->statisticfilename2 ,16,"statistic2.dat");*/
//导入ssd的配置文件
parameters=load_parameters(ssd->parameterfilename);
ssd->parameter=parameters;
ssd->min_lsn=0x7fffffff;
ssd->page=ssd->parameter->chip_num*ssd->parameter->die_chip*ssd->parameter->plane_die*ssd->parameter->block_plane*ssd->parameter->page_block;
//初始化 dram
ssd->dram = (struct dram_info *)malloc(sizeof(struct dram_info));
alloc_assert(ssd->dram,"ssd->dram");
memset(ssd->dram,0,sizeof(struct dram_info));
initialize_dram(ssd);
//初始化通道
ssd->cha