Cтраница 2
Аппаратные ошибки, генерирующие исключения Win32, - это деление на ноль, а также некорректное обращение к памяти. В ответ на определенные ошибки программного обеспечения ( например, нехватка памяти), некоторые функции Win32 API также генерируют исключение, а не просто возвращают код ошибки. Например, если функции:: НеарА11ос передается флаг HEAP GENERATE EXCEPTIONS, то при неудачной попытке распределения памяти генерируется исключение. Для каждой функции Win32 API, которая может генерировать исключения, в документации описаны все случаи, в которых происходит вызов исключения. Отметим: функиии Win32 API вызываются из консольных приложений ( см. гл. [16]
Нехватка памяти возможна и в случае статических объектов с динамическими полями. Так, при размещении конструктором динамических полей в куче может возникнуть нехватка памяти. Но, поскольку объект статический, нельзя передать сигнальное значение nil в ссылку - ее попросту нет. Вместо этого предлагается использовать имя конструктора как логическую функцию. Если внутри конструктора была вызвана процедура Fail, то в имени конструктора вернется значение False. [17]
В целях оптимизации сборка мусора выполняется только тогда, когда возникает ошибка страницы памяти. Таким образом, работающий в памяти код остается там до тех пор, пока нехватка памяти не активизирует процесс сборки мусора. Это приводит к увеличению скорости выполнения приложения. [18]
Однако эта скорость, определяемая количеством предоставляемого программе процессорного времени, зачастую снижается в связи с нехваткой памяти. Расширение предоставляемой программам памяти основано на предположении о том, что, располагая памятью большего объема, программы способны работать более эффективно. [19]
В последнее время в MVS по сравнению с ранними версиями немного изменен механизм управления страничной организацией. Исходно аппарат замещения считался весьма удобным, и при возрастании нагрузки на систему, что выражалось в нехватке памяти, некоторые программы просто удалялись из состава смеси. Система регулярно запускала так называемый процесс переупорядочения, позволяющий изменять рабочие Пространства всех активных программ на основе информации о текущей интенсивности использования каждой из страниц. В дальнейшем этот механизм был заменен механизмом LRU, обеспечивающим более динамичную подкачку страниц по запросам. [20]
Наиболее часто команда STATUS используется в конфликтной ситуации. Например, если часто происходят аварийные сбои AutoCAD, то список, подобный представленному на рис. 12.1, укажет, что возможной причиной отказов является нехватка памяти. Можно даже послать этот список в другой офис вашему коллеге, которому приходится работать с этим же чертежом. [21]
Каждая логическая запись, помещаемая в банк данных, при необходимости должна быть получена без особых на то затрат. В связи с этим в большинстве случаев в СУБД используют индексно-последовательную организацию файлов, предполагающую наличие объемов памяти для хранения записей и блоков, каталога указателей на местоположение записей и блоков файла и области переполнения, используемой при нехватке памяти под каталог, хранилище и отдельные записи и блоки файла. При отсутствии свободного места в области переполнения выдается указание о необходимости перехода на работу с другим физическим носителем информации. [22]
Что касается файлов с произвольной организацией, то максимальный раздел стека пропорционален значению log N ( см. раздел ссылок), однако в условиях вырожденного случая стек может расширяться до размеров, пропорциональных N, как показано на рис. 7.5. В самом деле, наиболее трудный случай имеет место тогда, когда файл уже отсортирован. Потенциальная возможность увеличения размеров стека до пропорциональных размерам сортируемого файла в условиях рекурсивной реализации быстрой сортировки представляет собой не очевидную, но в то же время вполне реальную проблему: в условиях этого метода сортировки всегда используется стек, а в вырожденном случае при работе с файлом большого размера подобное обстоятельство может послужить причиной аварийного останова программы ввиду нехватки памяти. Такое поведение совершенно недопустимо для библиотечной программы сортировки. [23]
Результат работы операторов пакета ФАП-КФ - координаты вершин фигуры и топология их соединения - хранятся в двух массивах, оформленных как COMMON - блоки языка ФОРТРАН, и длина этих массивов, определяемая в управляющей программе, должна быть заранее рассчитана по количеству вершин и линий, составляющих изображение фигуры. Это обстоятельство приводит к некоторым неудобствам для пользователя при работе с пакетом, поскольку заранее достаточно трудно оценить объем получаемых данных. Как следствие, возможны указания из программ пакета о нехватке памяти, отведенной под массивы. Устранение возникающих ошибок такого сорта возможно лишь путем повторного запуска в решение исправленной задачи. [24]
Предположим, что имеется запрос, скажем, на п последовательных слов, а все свободные блоки слишком малы. Но уплотнение выполняется медленно; в подавляющем большинстве случаев, когда при использовании метода первого подходящего обнаруживалась нехватка памяти, вскоре после этого пространство исчерпывалось полностью независимо от того, сколько раз делалось уплотнение и переуплотнение. Поэтому писать программу уплотнения, как правило, нецелесообразно, за исключением особых обстоятельств, связанных со сбором мусора ( см. упр. Если заведомо известно, что переполнение произойдет, можно воспользоваться каким-либо методом для вытеснения элементов из оперативной памяти с сохранением их на внешних запоминающих устройствах, обеспечивая при этом пересылку вытесненной информации, когда она понадобится назад в оперативную память. Это означает, что все программы, работающие с областями динамической памяти, должны подчиняться жестким ограничениям, касающимся допустимых ссылок на другие блоки. [25]
Обратите внимание, что оба этих показателя очень высоки. Высокий процент кэш-попаданий говорит о том, что в распоряжении SQL-сервера очень много памяти. Однако высокий процент использования файла подкачки обычно означает, что либо слишком мал 1сам файл подкачки, либо системе приходится подкачивать чересчур много информации. Одной из причин избыточной подкачки данных является нехватка памяти. Если выделить SQL-серверу чрезмерный объем памяти, то операционной системе Windows NT, возможно, придется прибегнуть к подкачке для получения необходимой памяти. К сожалению, если использовать статистику только SQL-сервера, эта проблема не видна. Действительно, если контролировать процент кэш-попаданий, то можно подумать, что все в порядке. Поэтому не забывайте, что SQL-сервер существует не сам по себе: рекомендуется вместе с показателями баз данных контролировать также индикаторы операционной системы. [26]
Может случиться, что в области списочной памяти не было ни одной свободной ячейки. В этом случае подпрограмма cons обращается к подпрограмме reclaim, называемой также мусорщиком. Если на этих участках выявляется мусор - ячейки, содержимое которых уже не может понадобиться программе, то он передается в резерв свободной памяти и происходит возврат и подпрограмму cons. Если и после уборки мусора в области списочной памяти не образовалось свободных ячеек, то выполнение программы прекращается и печатается сообщение о нехватке памяти - причине, по которой программа не может работать дальше. Работа мусорщика подробно описана в разд. [27]
Пакет PSTricks содержит набор средств высокого уровня для обычных задач графического представления информации в разнообразных форматах на основе считанных из внешних файлов данных. Эти команды, входящие в дополнительный пакет pst-plot, приведены в разд. Простейшим форматом данных является перечень чисел, разделенных запятыми или пробелами, но числа также могут быть заключены в фигурные () или круглые ( О) скобки. Если все данные заключены внутри одной пары квадратных ( [ ]) скобок и открывающая скобка [ расположена в начале строки, они считываются гораздо быстрее. Однако в этом случае T jX быстрее начинает жаловаться на нехватку памяти. [28]
Одной из поразительных черт сбора мусора как метода утилизации памяти является то, что затраты на его выполнение ( приблизительно) обратно пропорциональны объему утилизуемой памяти; сбор мусора обходится тем дороже, чем меньше памяти утилизуется. Причина этого в том, что большая часть затрат на сбор мусора приходится на фазу маркировки, а маркировка тем сложнее, чем больше активных элементов в куче. В противоположность этому стоимость утилизации памяти с использованием счетчиков ссылок строго пропорциональна объему утилизуемой памяти. Как результат такого свойства сбора мусора этот метод становится очень дорогостоящим, когда куча почти заполнена активными элементами. В действительности часто программа, которая близка к тому, чтобы использовать всю кучу ( и, следовательно, остановиться из-за нехватки памяти), перед этим инициирует ряд дорогостоящих и сравнительно бесполезных процедур сбора мусора, каждая из которых освобождает лишь несколько ячеек памяти, тут же потребляемых при возобновлении счета, что быстро приводит к новому сбору мусора. [29]
Средства являются инструментом синхронизации взаимодействующих процессов модели. Различают четыре типа средств: устройства, памяти, флаги и сигналы. Устройства и памяти выполняют те же функции, что и в других языках моделирования. Любое устройство может быть захвачено и полностью освобождено любым процессом. Память обладает емкостью, которая может выделяться процессам и освобождаться по частям. В случае занятости устройства, нехватки памяти процессы выстраиваются в соответствующие очереди и ожидают его освобождения. Для моделирования механизмов синхронизации процессов используются флаги. Процессы могут реагировать на выставленный флаг и могут его игнорировать. В случае реакции на флаг и установки флага процессы также выстраиваются в соответствующие очереди и ожидают момента снятия флага. Сигналы являются средством прерывания выполнения алгоритма процесса. Исследователь устанавливает, какие процессы обслуживают непересекающие множества сигналов. Обслуживающие процессы могут прерываться при выставлении маски, запрещающей их реализацию на сигналы. Процессы могут активизировать и дезактивизиро-вать сигналы. При отсутствии маскирования сигналов управляющая программа активизирует обслуживающие процессы, реагирующие на эти сигналы. [30]