OS/2 FAQ


OS/2 General FAQ - Общая часть. Статья 119

Q Как в OS/2 обрабатываются ситуации с недостатком памяти?
A
(Vitalie Vrabie, 2:469/15.89)

  1. аллокация памяти
    в каждом процессе есть указатель на процедуру обработки ошибок с аллоцированием памяти (memory allocation error handler). функционально почти идентично тому что был в RTL от BP. эта процедура получает в качестве параметра кол-во байт которое не удалось проаллоцировать, а в качестве результата выдаёт одно из:
    • попробовать переаллоцировать.
      это когда хендлер написан таким что он освобождает требуемое количество памяти.
    • вернуть null pointer.
      в этом случае вызов getmem возвращает null. если программа проверяет результат getmem, она может пожаловаться (пользователю, в логи и т.п.). если же она этого не проверяет, то естественно прога вылетит по GPF когда попробует туда залезть.
    • трапнуться.
      без комментариев. :)

    1. minfree
      при аллокации (вызове getmem, или как там его), если свободного места на разделе со своппером меньше чем minfree, выскакивает варнинг (через harderr).

      смотрим хелп:

      [----------- ]
      SWAPPATH Command:  Minfree Parameter
      [^Y]
      This value does not define the amount of
      free space on the disk at any given time
      because applications can cause less free
      space to be available on the disk than
      what is specified by minfree.
      [----------- ]
      

  2. дисковые операции
    для ошибок с дисковыми операциями тоже существует некая процедура (handler) их обработки. и в контексте каждого процесса тоже существует поинтер на неё. кстати, в досе такое тоже есть (именно через него всякие нортоны/dn/tvision/command.com/whatever и выводят свои abort/retry/ignore, а затем передают ответ юзера системе).

    эксперимента ради, посмотрите fc/2. он всегда будет выводить красное окошко с retry/cancel, вне зависимости от autofail. и почему? потму что он устанавливает собственный хендлер ошибки дисковых операций.

    аналогично и BP/VP RTL пользуется этим хендлером для {$I+}/{$I-}.

    посмотрите у ральфа брауна, там про дос. но и в оси/виндах всё семантически аналогично.

    единственное что в досе/виндах нельзя настроить дефолтное поведение. :)

  3. autofail
    autofail=yes отрубает всякие интерактивные возникания harderr.exe (кстати, нафига он болтается, его ж никогда не вызовут*). в случае с дисковыми операциями возвращается "fail", а в случае с аллокацией памяти он выбирает либо пункт 1.b, либо пункт 1.c - точно не скажу, но по-моему 1.b.

    при autofail=no возвращается то что выбрал юзер.

конкретику (названия функций / номера прерываний) не приведу. никогда ими напрямую не пользовался - только через VP/BP RTL и твижн.

* наверное, таки вызывают. но он просто не задаёт интерактивных вопросов. :)


К предыдущей статье | К оглавлению раздела | К следующей статье

Вернуться к списку разделов FAQ.

Если у вас есть вопросы или пожелания, пишите, мы будем рады.

Данный FAQ cоставили Ivan Borovicov и Viatcheslav Odintsov (2:5020/181) на основе OS/2 FAQ Дмитрия Завалишина (dz) и материалов переписки в группе эхоконференций su.os2.*. Оформление статей: Николай Королев. Программирование JSP для RU/2: Евгений Кулешов. Благодарности: Дмитрию Максимовичу (MaximDim) за громадную помощь на первых этапах и Дмитрию Бану (banshee) за его помощь при проверке текста.



Интересные ссылки:
Комментариев к странице: 0 | Добавить комментарий
Домой | Проект ядро Core/2 | Проект OS/4 Download | Новости | Гостевая книга | Подробно обо всем | Нужные программы | Проекты | OS/2 FAQ | Всячина | За и Против | Металлолом | #OS2Russian | RDM/2 | Весёлые картинки | Наша галерея | Доска объявлений | Карта сайта | ПОИСК | ФОРУМ