void initialize_system ()
{
    
   FILE *fconfig;

  fconfig = fopen ("config.sys", "r");
  fscanf (fconfig, "%d\n", &Observe);
  fscanf (fconfig, "%d %d\n", &cpuQuantum, &idleQuantum);
  fscanf (fconfig, "%d %d %d %d\n", &pageSize, &memSize, &swapSize, &OSmemSize);
  fscanf (fconfig, "%d\n", &periodAgeScan);
  fscanf (fconfig, "%d\n", &spoolPsize);
  fclose (fconfig);
    
    OriginalPages= find_pages(memSize,pageSize);
    OriginalPages_swapspace = find_pages(swapSize,pageSize);

    rem_pages = OriginalPages;
    rem_pages_swapspace = OriginalPages_swapspace;

    #undef num_pages
    #define num_pages OriginalPages;
    
    OSpages= find_pages(OSmemSize,pageSize);
    
    printf("OS Size is %d , OS pages are %d\n", OSmemSize, OSpages);
    
    rem_pages= OriginalPages-OSpages;
    
    idlePages= find_pages(3, pageSize);

 /*printf("Idle Size is 256, Idle pages are %d, rem pages are %d \n", idlePages, rem_pages);
    
    rem_pages = rem_pages-idlePages;*/
    
    printf("remaining pages are %d\n", rem_pages);
    
    
     #undef num_pages
     #define num_pages rem_pages;
   
   printf("Number of frames in Main memory is %d remaininng pages are %d\n", OriginalPages, rem_pages);
   
    
  initialize_cpu ();
    printf("initialized CPU \n");
  initialize_swap_freelist(rem_pages_swapspace, OriginalPages_swapspace);
     printf("initialized Swap Space \n");
  initialize_freelist(rem_pages, OriginalPages);
    printf("initialized Main Memory \n");  
   initialize_timer ();
     printf("initialized timer \n");
   initialize_memory ();
      printf("initialized memory \n");
  initialize_process ();
      printf("initialized process \n");
     //   initialize_memory ();
   // printf("initialized memory \n");
  
}
示例#2
0
文件: parse.c 项目: sajin71/ish-shell
static job* initialize_job() {

    job *j;
    
    if((j = (job*)malloc(sizeof(job))) == NULL) 
	return NULL;

    j->mode = FOREGROUND;
    j->process_list = initialize_process();
    j->next = NULL;

    return j;
}
示例#3
0
文件: parse.c 项目: sajin71/ish-shell
/* 受け付けた文字列を解析して結果をjob構造体に入れる関数 */
job* parse_line(char *buf) {

    job *curr_job = NULL;
    process *curr_prc = NULL;
    parse_state state = ARGUMENT;
    int index=0, arg_index=0;

    /* 改行文字まで解析する */
    while(*buf != '\n') {
	/* 空白およびタブを読んだときの処理 */
        if(*buf == ' ' || *buf == '\t') { 
	    buf++;
	    if(index) {
		index = 0;
		state = ARGUMENT;
		++arg_index;
	    }
	} 
	/* 以下の3条件は、状態を遷移させる項目である */
        else if(*buf == '<') { 
	    state = IN_REDIRCT; 
	    buf++; 
	    index = 0; 
	} else if(*buf == '>') {
	    buf++; 
	    index = 0;
            if(state == OUT_REDIRCT_TRUNC) { 
		state = OUT_REDIRCT_APPEND;
		if(curr_prc)
		    curr_prc->output_option = APPEND;
	    } 
	    else { 
		state = OUT_REDIRCT_TRUNC; 
	    }
        } else if(*buf == '|') { 
	    state = ARGUMENT; 
	    buf++; 
	    index = 0; 
	    arg_index = 0;
	    if(curr_job) {
		strcpy(curr_prc->program_name, 
		       curr_prc->argument_list[0]);
		curr_prc->next = initialize_process();
		curr_prc = curr_prc->next;
	    }
	}
	/* &を読めば、modeをBACKGROUNDに設定し、解析を終了する */
        else if(*buf == '&') {  
	    buf++;
	    if(curr_job) {
		curr_job->mode = BACKGROUND;
		break;
	    }
	}
	/* 以下の3条件は、各状態でprocess構造体の各メンバに文字を格納する */
        /* 状態ARGUMENTは、 リダイレクション対象ファイル名以外の文字(プログラム名、オプション)を
           読む状態 */
	/* 状態IN_REDIRCTは入力リダイレクション対象ファイル名を読む状態 */
	/* 状態OUT_REDIRCT_*は出力リダイレクション対象ファイル名を読む状態 */
	else if(state == ARGUMENT) {
	    if(!curr_job) {
		curr_job = initialize_job();
		curr_prc = curr_job->process_list;
	    }

	    if(!curr_prc->argument_list[arg_index])
		initialize_argument_list_element(curr_prc, arg_index);

	    curr_prc->argument_list[arg_index][index++] = *buf++;
	} else if(state == IN_REDIRCT) {
	    if(!curr_prc->input_redirection) 
		initialize_input_redirection(curr_prc);

            curr_prc->input_redirection[index++] = *buf++;
        } else if(state == OUT_REDIRCT_TRUNC || state == OUT_REDIRCT_APPEND) {
	    if(!curr_prc->output_redirection) 
		initialize_output_redirection(curr_prc);

            curr_prc->output_redirection[index++] = *buf++;
        }
    }

    /* 最後に、引数の0番要素をprogram_nameにコピーする */
    if(curr_prc)
	strcpy(curr_prc->program_name, curr_prc->argument_list[0]);

    return curr_job;
}