Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
нешарящий Гость
|
Добавлено: Пн Апр 29 2002 09:27 Заголовок сообщения: Чем отличаются понятия "фрагментация диска" и "фрагментация памяти" с точки зрения FreeBSD? |
|
|
По-моему память в FreeBSD не фрагментируется. |
|
Вернуться к началу |
|
|
Dmitry.Karpov http://www. Гость
|
Добавлено: Пн Апр 29 2002 14:03 Заголовок сообщения: Это общее явление, оно не зависит от операционки. И именно это я буду спрашивать у своих студентов во вторник! :-) |
|
|
Точнее, в разных архитектурах и в разных операционках есть свои особенности - например, сегментная модель памяти имеет проблемы, которых нет в страничной модели (в обоих случаях говорится о процессоре i*86). Но тем не менее, у всех случаев наблюдаются общие закономерности.
Фрагментация и диска, и памяти имеют два аспекта: "фрагментация данных" и "фрагментация свободного пространства", причем четыре (= два * два) сочетания дают самые разнообразные эффекты.
Пока дам одну подсказку: у диска время позиционирования головок весьма велико по сравнению со временем чтения/записи (часто на позиционирование головок уходит больше времени, чем на собственно чтение и запись), а у памяти что-то в этом духе есть ("3-1-1-1" в CMOS Setup), но оно гораздо слабее выражено из-за кэширования и из-за малого объема блока памяти (восемь байт для Pentium) по сравнению с блоком диска (полкилобайта).
Сегментация памяти в Unix обусловлена разницей между malloc() и brk(), причем эту моду из него взяли многие другие операционки. А еще очень различается подход к работе с памятью у языка C и одной стороны и языков Fortran, Pascal и особенно Java с другой стороны. |
|
Вернуться к началу |
|
|
ilyasov Гость
|
Добавлено: Вт Апр 30 2002 13:00 Заголовок сообщения: Re: Не должно отличаться в любой системе |
|
|
Если изъять глупости в ОС, то фрагментация памяти связана с попыткой выделить блок данных размером большим, чем уже имеющийся в наличии. С точки зрения программы, быстродействие выше если данные лежат непрерывным блоком (но это подразумевает правильную организацию кода, что не всегда имеет место). Фрагментация диска -сродни этому процессу, но вовлекает слишком много дополнительных элементов, связанных с свойствами файловой системы. Механизмы доступа к диску часто более сложные и в промежуточной фазе обязательно связаны с тем или иным видом кэширования. |
|
Вернуться к началу |
|
|
Dmitry.Karpov http://www. Гость
|
Добавлено: Вт Апр 30 2002 22:26 Заголовок сообщения: Не совсем так |
|
|
Вторник прошел, студентов я помучил - теперь можно и тут ответить.
Существуют фрагментация данных и фрагментация свободного пространства. В памяти фрагментация данных отстутсвует, т.к. там нет операции append, а realloc при невлзможности расширить кусок памяти перемещает его в новое место (это - одно из главных отличий). А вот фрагментация свободного пространства приводит к утечке памяти, т.к. объем занятой памяти превышает объем используемой памяти (утечка памяти - возвратная, т.к. при осовобождении занятой памяти неиспользуемые куски все-таки вернутся); это связано с тем, что malloc распределяет память меньшими кусками, чем sbrk. При свопинге это приведет к замедлению работы, но только если не хватит оперативной памяти. А фрагментация диска приводит только к замедлению доступа, причем сразу, и никогда - к потере дискового пространства. |
|
Вернуться к началу |
|
|
ilyasov Гость
|
Добавлено: Вт Май 07 2002 10:19 Заголовок сообщения: Re: Не совсем так |
|
|
Как потребителя меня не особо интересуют внутренние механизмы работы системы в части доступа к диску и памяти. Моя основная задача -получить максимальный выигрыш в быстродействии программы. Поэтому, если я динамически выделяю память под данные может возникнуть ситуация, когда они (данные) будут расположены в памяти не рядом, а с каким-либо промежутком (разрывом), который снизит быстродействие при обращении к данным (если, конечно, я к ним буду обращаться последовательно). Такая ситуация может возникнуть и в тех случаях, когда никакой фрагментации с точки зрения системы нет -все данные принадлежат моей программе, но при этом я сам плохо распределил выделенное мне просранство. Это первый момент. Второй момент -я выделяю последовательно блоки данных с все увеличивающимся размером, а старые -возвращаю. В конце данной процедуры я приду к состоянию, когда у меня не будет возможности выделить свободную память при ее кажущемся наличии. Это второй момент. Другие ситуации измыслить сложнее (да и интерес к ним, наверное, ниже). |
|
Вернуться к началу |
|
|
Dmitry.Karpov http://www. Гость
|
Добавлено: Ср Май 08 2002 13:21 Заголовок сообщения: Время доступа и все такое прочее |
|
|
Жесткий диск отличается тем, что при запросе на чтение или на запись он в среднем проводит пол-оборота в ожидании подхода нужного сектора под головку, а если надо переместить головку, то еще прибавлается время на разгон влока головок, подход к нужному месту, торможение и уточнение позиции - и лишь потом происходит ожидание подхода нужного сектора. Именно поэтому для диска столь актуально упреждающее чтение - у памяти ображение к рядом стоящим блокам памяти и к произвольно разбросанным занимает почти одинаковое время (есть некоторые моменты, связанные с эффективностью использования кэша - предыдущее рассуждение актуально при размере единовременно запрашиваемого блока данных размером со строкУ кэша или более).
Утечки же памяти, связанные с фрагментацией свободного пространства, имеют место быть только в оперативной памяти, но не на диске (впрочем, когда появится библиотека процедур типа molloc()/free() для файлов, там это тоже станет актуально).
Конечного юзера типа секретарши вообще не волнует ничего, кроме работоспособности Ворда и Солитера. Но те, кто не хотят переплачивать (а тем более те, кто не хотят заставлять переплачивать пользователей написанных ими программ) за машинную мощность, должны понимать работу аппаратных и программных реализаций используемых ими функций. Мой курс - не для секретарш; я готовлю людей к администрированию сетей, а попутно в некоторой степени - к проектированию компьютеров (они еще молоды, и я надеюсь, они успеют застать момент краха писюково-совместимого единства архитектур). |
|
Вернуться к началу |
|
|
ilyasov Гость
|
Добавлено: Ср Май 08 2002 16:24 Заголовок сообщения: Re: У памяти разброс тоже есть |
|
|
При обращении к последовательно расположенным данным в памяти и к произвольно разбросанным можно получить различие в временах доступа до десяти и более, что существенным образом скажется на работе программы. Для диска та же ситуация дает разброс в почти тысячу. |
|
Вернуться к началу |
|
|
Dmitry.Karpov http://www. Гость
|
Добавлено: Ср Май 08 2002 17:31 Заголовок сообщения: ... но разница в разбросах памяти и диска очень разная |
|
|
Честно говоря, я слабо представляю себе, откуда может взяться различие в десять раз при обращении к памяти - разве что читать отдельные байты. Для диска задержка зависит от расстояния между точками перехода, причем это расстояние меряется не по кратчайшему пути, а только по ходу вращения диска; для памяти же различаются только последовательное обращение и произвольное, причем при произвольном доступе скорость не зависит от расположения ячеек, к которым мы обращаемся, есть зависимость только при от наличия данной ячейки в кэшах 1-го и 2-го уровней, а там могут находиься произвольные ячейки памяти. |
|
Вернуться к началу |
|
|
|