Calculating number of page faults for 2-d array

后端 未结 4 529
天命终不由人
天命终不由人 2021-02-05 12:11

I am trying to study for an exam..and I found this example but can\'t understand how they got the answer. Can anyone explain it please?

Question:

4条回答
  •  离开以前
    2021-02-05 13:09

    Let’s look at a contrived but informative example. Assume that pages are 128 words in size. Consider a C program whose function is to initialize to 0 each element of a 128-by-128 array. The following code is typical:

    int i, j;
    int[128][128] data;
    for (j = 0; j < 128; j++)
      for (i = 0; i < 128; i++)
    data[i][j] = 0;

    Notice that the array is stored row major; that is, the array is stored data[0][0], data[0][1], ···, data[0][127], data[1][0], data[1][1], ···, data[127][127]. For pages of 128 words, each row takes one page. Thus, the preceding code zeros one word in each page, then another word in each page, and so on. If the operating system allocates fewer than 128 frames to the entire program, then its execution will result in 128 × 128 = 16,384 page faults.

    In contrast, suppose we change the code to

    int i, j;
    int[128][128] data;
    for (i = 0; i < 128; i++)
    for (j = 0; j < 128; j++)
    data[i][j] = 0;

    This code zeros all the words on one page before starting the next page, reducing the number of page faults to 128.

提交回复
热议问题