Размер страниц и фрагментация

Тема в разделе "WASM.BEGINNERS", создана пользователем DeathAndDevastating, 8 май 2008.

  1. DeathAndDevastating

    DeathAndDevastating New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2007
    Сообщения:
    24
    Здравствуйте.
    Изучаю виртуальную память и страничную организацию, а конкретно в данный момент фрагментацию.
    Наткнулся на совершенно непонятный текс у Таненбаума.

    Вот раздел целеком:
    Мне совсем ничего не ясно, откуда взялась цифра 80Мб и почему такая разница (80 и 10)?
    Что тут вообще происходит. Причем текст перед этим выделенным абзацем вполне ясен.

    Помогите пожалуйста разобраться.
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    В рассматриваемом случае элементы матрицы хранятся последовательно по стобцам (т.е. сначала идут эл-ты столбца 1, затем 2 и т.д.). Поэтому если последовательно обрабатыывать элементы не столбца, а строки, то обращение к каждому элементу будет означать обращение к новой странице. Поскольку элементов в строке 10000, т.е. нужно будет обратиться к 10000 страницам, поэтому если размер страницы 8К, то получаем 80Мб, если 1К, то 10Мб

    PS: вообще-то в данном сл.размер страницы притянут за уши, т.к. при обработке больших матриц нужно просто соблюдать принцип "локализации данных", т.е. обрабатывать их в той последовательности в которой они хранятся в памяти (в данном сл.нужно обрабатывать не строки а столбцы).
     
  3. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    DeathAndDevastating
    Еще растолкую на всякий случай. Т.е. речь шла не о том сколько памяти требуется, а сколько должно присутствовать в реальной памяти при обработке одной строки. Достаточно было теперь вторую строку обрабатывать в обратном порядке, чтобы оптимизировать подкачку.
    В конце концов было доказано или принято, что большие страницы - это лучше.
     
  4. DeathAndDevastating

    DeathAndDevastating New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2007
    Сообщения:
    24
    А откуда взялась цифра 80Мб? Ведь 10 000 * 10 000 * 8байт = 800 000 000 байт. Потом выше написано, что неполной страницей может быть только последняя страница. Матрица представляется в памяти линейно (т.е. для 2x2 так: 0,0; 0,1; 1,0; 1,1) и вся матрица принадлежит одной программе -какая разница как обрабатывать матрицу?
    Почему каждая область отделена от другой на 79 992 байт (9999 элемнтов)?

    Ничего не могу понять вообще..( Скорее всего я тупой.

    leo
    если каждому столбцу из 10000 элемнотов соответсвует страница 8k, то как же столбец уместился в эту страницу, если 10 000 элементов по одному байту занимают 10 000 байт = 9,765625 Кб? -а в примере говорится о том что элемент равен слову из 8 байт, т.е. еще больше.
     
  5. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    DeathAndDevastating
    Просто у Таненбаума неправильная матрица. Элементы его матрицы располагаются в памяти вот так (для 3х3): 0,0; 1,0; 2,0; 0,1; 1,1; 2,1; 0,2; 1,2; 2,2.

    Представь матрицу в виде вектора. Допустим, если у нас есть матрица 16384х16384, то её можно представить как вектор из 268 435 456 элементов. Пусть программа работает только с одной строкой Таненбаумовской матрицы. Тогда в памяти должны находиться страницы с каждым шестнадцатитысячным трёхсот восьмидесяти четвёртым элементом. При размере элемента в 8 байт и размере страницы 8кб в память будут загружены следующие элементы вектора:
    00000..01023
    16384..17407
    32768..33791
    И т.д., хотя реально использоваться будут только нулевой, шестадцатитысячный трёхс.., тридцатидвухтысячный семьс.., и т.д.
    Т.е. 1023/1024 памяти расходуется впустую.

    При размере страницы в 1кб будут загружены следующие элементы вектора:
    00000..00127
    16384..16411
    32768..32895
    Теперь впустую расходуется лишь 127/128 памяти.
     
  6. DeathAndDevastating

    DeathAndDevastating New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2007
    Сообщения:
    24
    Sol_Ksacap
    Большое спасибо за помощь!!! Я все понял) Еще раз огромное спасибо!)

    leo
    valterg
    Большое спасбо Вам за помощь!!

    П.С.
    Просто я с самого начала не о том начал думать.. и ушел в другое направление.
    (надо тренировать мозг)
     
  7. DeathAndDevastating

    DeathAndDevastating New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2007
    Сообщения:
    24
    С днем победы!