Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Различные авторы Весь текст 2311.07 Kb

Программирование и кодирование

Предыдущая страница Следующая страница
1 ... 98 99 100 101 102 103 104  105 106 107 108 109 110 111 ... 198
        #defineMREGNOVW   0x92  /*при передвижении области произошла
                                           частичная перезапись источника*/
        #defineMREGN2SM   0x93  /*область расширенной памяти слишком велика
                                  для указанного обработчика*/
        #defineMREGNOVL   0x94  /*области обычной и расширенной памяти пе-
                                                           рекрываются*/
        #defineLPGOF2BG   0x95  /*смещение  в пределах логической страницы
                                 превосходит длину логической страницы*/
        #defineMREGN2BG   0x96  /*длина области превышает предел в 1Мбайт*/
        #defineMREGNDUP   0x97  /*области расширенной памяти источника и
                                приемника имеют один и тот же обработчик и
                                                            перекрываются*/
        #defineMREGNUND   0x98  /*неопределенные/неподдерживаемые  типы
                                             памяти источника и приемника*/
        #defineAMRSNFD    0x9A  /*указанный альтернативный набор регистров
                                                отображения не существует*/
        #defineAMDRSINS   0x9B  /*все альтернативные наборы регистров отоб-
                                                 ражения/ПДП используются*/
        #defineAMDRSUNS   0x9C  /*не поддерживаются альтернативные наборы
                                                регистров отображения/ПДП*/
        #defineAMDRSUND   0x9D  /*указанный альтернативный набор регистров
                                отображения/ПДП не определен,  не размещен
                                                     или является текущим*/
        #defineDDMACUNS   0x9E  /*закрепленные каналы ПДП не поддерж-ся*/
        #defineDDMACNFD   0x9F  /*указанный закрепленный канал ПДП не су-
                                                                 ществует*/
        #defineHNDVLNFD   0xA0  /*не может быть найдено значение обработчи-
                                ка, соответствующее  указанному  имени об-
                                                                работчика*/
        #defineHNDNMDUP   0xA1  /*обработчик с указанным именем уже сущест-
                                                                     вует*/
        #defineMREGNWRP   0xA2  /*попытка перехода к началу 1-Мбайтного
                                адресного пространства во время передвиже-
                                                           ния или обмена*/
        #defineUSRDSFMT   0xA3  /*содержимое структуры данных пользователя,
                                переданное для функции  искажено  или бес-
                                                                смысленно*/
        #defineOPSYSACC   0xA4  /*операционная система не допускает обраще-
                                                            ния к функции*/
         -------------------------------------------------------------------



                                      - 7-28 -
         Поскольку  проверка  на  наличие  ошибок,  обнаруженных  монитором
         расширенной памяти  -  просто  вопрос тестирования регистра AH на
         нуль после каждого вызова,  всегда  оказывается  разочаровывающим
         наталкивание  на популярное коммерческое программное обеспечение,
         которое не удосуживается проделать это.  Избавьте себя  (и  Ваших
         пользователей) от забот отлавливания загадочных зависаний и отка-
         зов посредством проверки кода ошибки после каждого вызова  менед-
         жера расширенной памяти.
              Реакция программы на условие ошибки, возвращенное менеджером
         расширенной памяти,  зависит от природы ошибки и  от  возможности
         программы приспособиться к условиям, на которые спецификация рас-
         ширенной памяти LIM ссылается как на "невосстанавливаемые".   На-
         пример, программа может сделать очень немногое, получив от менед-
         жера расширенной памяти индикацию "Отказ  аппаратуры  расширенной
         памяти",  помимо  сообщения о проблеме пользователю и воздержания
         от дополнительного использования обслуживанием  менеджера  расши-
         ренной памяти.
              И, наоборот, адаптирующаяся программа могла бы быть способна
         восстанавливаться  из условий таких,  как "Недостаточно доступных
         страниц спецификации расширенной памяти", возможно, путем исполь-
         зования  дискового  файла в качестве временной области сохранения
         для данных, которые не могут поместиться в расширенной памяти.
              Другие условия такие,  как "Физическая страница вне диапазо-
         на", обычно показывают, что имеет место ошибка проектирования или
         программирования  в  приложении  спецификации расширенной памяти.
         Реализуйте Ваши программы обработки ошибок спецификации расширен-
         ной памяти так,  чтобы они сообщали ячейку в Вашей программе, где
         появилось условие ошибки,  предпочтительно таким образом, который
         связан с исходным кодом.

            Написание программ, которые пользуются расширенной памятью

              Все программы, которые пользуются расширенной памятью, долж-
         ны соблюдать определенный протокол.  Каждая программа должна  вы-
         полнять нижеследующие шаги в том порядке, как они перечислены:
              1. Обнаружить наличие менеджера расширенной памяти.
              2. Определить, есть ли в наличии достаточное для Вашего при-
         ложения количество страниц расширенной памяти.
              3. Получить адрес начала кадра страниц.
              4. Разместить страницы расширенной памяти.
              5. Отобразить страницы расширенной памяти в кадр страниц.
              6. Считывать,  записывать или выполнять данные в расширенной
         памяти.
              7. Возвратить страницы расширенной памяти  менеджеру  расши-
         ренной памяти перед завершением Вашего приложения.

                  Общие руководящие указания по программированию

              Характеристики расширенной памяти  и  менеджера  расширенной
         памяти  накладывают относительно небольшое количество ограничений
         на программы, которые их используют. Следующие руководящие указа-
         ние относятся ко всем программам,  которые пользуются расширенной
         памятью:

              * Программы,  использующие совмещение данных, должны гаранти-
         ровать, что система расширенной памяти поддерживает это. Совмеще-
         ние данных имеет место,  когда одна логическая страница расширен-

                                      - 7-29 -
         ной памяти отображается более,  чем в  одну  физическую  страницу
         кадра страниц.  В реализациях менеджера расширенной памяти, кото-
         рые используют аппаратуру  отображения  страниц,  эффект  данного
         способа  заключается в том,  что 16-Кбайтная страница расширенной
         памяти будет появляться более,  чем в одном 16-Кбайтном блоке ад-
         ресного  пространства  процессора.  Менеджеры расширенной памяти,
         написанные для истинных плат спецификации расширенной памяти, ап-
         паратурного страничного механизма 80386 и опции расширенной памя-
         ти 80286 IBM PS/2 - все могут поддерживать данный способ. Однако,
         чисто программные эмуляторы спецификации расширенной памяти,  ко-
         торые имитируют отображение страниц путем копирования блоков дан-
         ных в память, не могут выполнять совмещение данных.
              Ваша программа может выполнить следующую проверку  для того,
         чтобы определить поддерживает ли менеджер расширенной памяти сов-
         мещение данных:
              1. Отобразить  одну  логическую страницу,  по крайней мере в
         две физические.
              2. Записать данные в одну из физических страниц.
              3. Если данные,  записанные в физическую страницу на шаге 2,
         также  появляются  в других физических страницах,  в которые была
         отображена логическая страница, тогда реализация менеджера расши-
         ренной памяти поддерживает совмещение данных.
              На рис.  7-2  иллюстрируется  совмещение  данных.  Поскольку
         единственная  логическая  страница отображается в первую и третью
         физические страницы в пределах кадра страниц,  к элементу данных,
         находящемуся по смещению 2132Н в логической странице, можно обра-
         титься по физическим адресам CC00:2132 и D400:2132.

              * Приложения должны возвращать все размещенные  страницы  ме-
         неджеру расширенной  памяти  перед  завершением  программы.  Ваша
         программа должна возвратить каждый обработчик расширенной памяти,
         размещенный Вашей программой,  перед ее нормальным или ненормаль-
         ным завершением.
           Начальный сегмент     N физической
           физической страницы     страницы
                        CC00H    ЪДДДДДДД¬ДД      Элемент данных по
                                 ¦       ¦   \    смещению 2132Н в
                                 ¦   0   ¦     \  логической странице
                        D000H    ГДДДДДДДґД      \ЪДДДДДДДДДДДДДДДДД¬
                                 ¦       ¦ \    / ¦       ЪДДДДДД¬  ¦
                                 ¦   1   ¦   \/   ¦       ¦123.45¦  ¦
                        D400H    ГДДДДДДДґДД/  \  ¦       АДДДДДДЩ  ¦
                                 ¦       ¦      /\АДДДДДДДДДДДДДДДДДЩ
                                 ¦   2   ¦    /
                        D800H    ГДДДДДДДґДД/
                                 ¦       ¦
                                 ¦   3   ¦    Чтение/Запись: физические
                                 АДДДДДДДЩ    адреса CC00:2132 или
                                              D400:2132 будут ссылаться
                                              на один и тот же элемент
                                              данных в расширенной памяти

             Рис. 7-2. Совмещение данных  -  одна логическая страница,
                     отображенная более чем в одну физическую страницу

              Отказ от возврата всех страниц менеджеру  расширенной памяти
         может  вызвать  отказы  на последующие запросы расширенной памяти

                                      - 7-30 -
         вследствие нехватки страниц или обработчиков. Убедитесь, что коды
         выхода  по ошибке или аварийному завершению Вашей программы осво-
         бождают расширенную память также,  как и код нормального заверше-
         ния.

              * Отображайте  данные только в обычную память,  которую Ваша
         программа разместила из DOS.  Функция передвижения/обмена  облас-
         тей, введенная в спецификации расширенной памяти LIM 4.0, сделала
         возможным своппинг данных в или из адресного пространства, управ-
         ляемого DOS.  Перед своппингом любых данных в адресное пространс-
         тво DOS Ваша программа должна разместить их из DOS,  так как  ме-
         неджер расширенной памяти не управляет обычной памятью.  Отказ от
         соблюдения этого правила, вероятно, приведет к искажению данных и
         краху системы.

              * Любая структура данных,  адрес которой передается в вызове
         функции менеджера расширенной  памяти,  не  должна  находиться  в
         отображаемой памяти. За исключением функций "Изменить отображение
         страницы и перейти" и "Сменить отображение страницы  и  вызвать",
         которые  были специально разработаны для поддержки выполнения ко-
         довых объектов в расширенной памяти, структуры данных, адреса ко-
         торых передаются менеджеру расширенной памяти,  должны находиться
         в памяти, которая не может перестать отображаться. Например, Ваша
Предыдущая страница Следующая страница
1 ... 98 99 100 101 102 103 104  105 106 107 108 109 110 111 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама