Cтраница 4
При генерировании системы сначала задают тип центрального процессора и размер его главной памяти. Разумеется, следует проверить, допускают ли эти данные применение приобретенной ОС. Информация о размере памяти используется, чтобы указать различным компонентам ОС, какой объем памяти выделяется для построения таблиц и других средств распределения памяти. Эта информация нужна ОС и при управлении системой. Вспомогательная память может использоваться программами контроля адресов, включаемыми в программы пользователя для предотвращения ошибок, обусловленных переполнением памяти. [46]
Если сборщик мусора нашел объекты, на которые нет ни одной ссылки, он пытается обратиться к процедуре финализации ( подготовки удаления) этих объектов. Финализация может осуществляться или деструкторами, о которых уже говорилось выше, или методом Finalize. NET, наследует метод Finalize. Сборщик мусора вызывает этот метод, когда собирается удалить объект. Это происходит в непредсказуемый момент времени, так как сборщик мусора работает асинхронно и удаляет объекты тогда, когда наступает переполнение памяти. [47]
Потребность в памяти для любой из структур - нейтральной цепочки, активной цепочки, стека аргументов и памяти бланков - может превзойти любую заранее установленную границу. Если для этих структур выделяются фиксированные области памяти, то любая из них может переполниться, в то время как в остальных свободного пространства будет хоть отбавляй. Имеется стандартный путь решения этой проблемы. Рассмотрим сначала нейтральную и активную цепочки. Поскольку нейтральная цепочка естественно смотрится слева от активной, выделим им одну область памяти на двоих; в этой области нейтральная цепочка будет расти от левого края вправо, а активная цепочка, наоборот, от правого края влево. При таком способе действий переполнение памяти не наступит, пока активная и нейтральная цепочки не используют в сумме всю выделенную им память. Стек аргументов можно таким же образом объединить с памятью бланков; один из двух промежутков между объединенными парами можно использовать для временного хранения цепочек, переписываемых с одного места на другое. [48]
Блок управления для устройств с перфолентой можно сделать очень простым. При перфорировании ленты информация передается в этот блок посимвольно. Символ остается в регистре данных блока управления до тех пор, пока устройство не сообщит о том, что перфорирование завершено. Затем в блок передается следующий символ. При считывании данные из выходного регистра устройства считывания передаются в ЦП или ЗУ посимвольно. В этом случае она подключается к каналу с косвенным программным управлением, что гарантирует от переполнения памяти. [49]
Существует два способа распределения участков памяти. Первым способом является жесткое закрепление однаго ( или некоторой группы) участка за каждым каналом. Другой способ заключается в свободном размещении, при котором поступающая информация накапливается в любом, в данный момент незанятом участке памяти. Однако в некоторых случаях, чтобы выполнить вышеуказанное требование, необходимо иметь большой объем памяти, значительная часть которого редко используется. Для сокращения объема памяти при условии недопустимости потери информации предусматриваются определенные меры. К ним относится предотвращение поступления информации, которое приводит к задержке в передаче информации, или расширение этой памяти за счет заполнения объемов, занятых для других целей. Чтобы рационально выбрать объем памяти АС, необходимо оценить частоту и длительность ситуаций, когда возможно переполнение памяти, и влияние этих характеристик на основные параметры системы. [50]
Мы обязаны сохранить этот след адреса, поскольку нет взаимно-однозначаного соответствия между операторами Простотрона и инструкциями ЯМП. Например, оператор if / goto в строке с номером 20 компилируется в три инструкции ЯМП. Каждый раз, когда генерируется инструкция, мы должны увеличивать счетчик команд, указывающий следующую ячейку массива ЯМП. Заметим, что объем памяти Простотрона может создать проблему для программ на ЯП, содержащих много операторов, переменных и констант. Возможно, что компилятор выйдет за пределы памяти. Чтобы проверять этот случай, следует включить в вашу программу счетчик данных для хранения адреса следующей переменной или константы в массиве ЯМП. Если значение счетчика команд больше значения счетчика данных, значит массив ЯМП полностью заполнен. В этом случае процесс компиляции должен завершиться и компилятор должен выдать сообщение об ошибке переполнения памяти во время компиляции. Следует отметить, что хотя компилятор освобождает программиста от забот о памяти, сам компилятор должен корректно вычислять местоположение команд и данных в памяти и обнаруживать такие ошибки, как отсутствие свободного места в памяти во время компиляции. [51]