Что такое резидентная программа в компьютере
Резидентная программа - в операционной системе MS-DOS (МС-ДОС) программа, возвращая управление операционной системы оболочка или надстройка над операционной системой, но память персонального компьютера. ЦР программа aktiviziruyutsya при возникновении прерывания, вектор которого эта программа изменила на адрес одной из своих процедур.
Когда вы работаете с MS-DOS (МС-ДОС) TSR широко использована для различных целей.
По способу инициализации и вызова операционной системой резидентные программы необходимо отличать от водителя "настоящих" MS-DOS (МС-ДОС), встраиваемых операционной системой в ядре во время загрузки.
В эпоху многозадачных ОС иногда называют программу-резидент загружен и постоянно работает в фоновом режиме. но использование этого термина некорректно по поводу многозадачности ОС.
1. Основные понятия. (Basic concepts)
Резидентные программы могут переключать на обработку прерывания, такие как печать или обращение к клавиатуре и т. д.
Эти программы обычно запускаются через файл AUTOEXEC.BAT или, если необходимо. они перехватывают прерывания, предназначенные для работы с клавиатурой. как только пользователь нажимает заданную комбинацию клавиш, ЦР программа aktiviziruyutsya. поверх имеющегося на экране изображения выводится диалоговое окно ЦРС.
Иногда ЦР используется вместо драйверов для обслуживания нестандартной аппаратуры. В этом случае резидентная программа может встроить свой обработчик, через который все прикладные программы может обернуться для оборудования.
Аналогичным образом, работа с модулями житель некоторых системах управления базами данных СУБД. прикладная программа посылает запросы к базе данных через прерывание, установить при запуске базы данных.
На ЦРС наложены многочисленные ограничения, которые препятствуют работе программиста.
Например, программы стажировки не допускается использование прерываний MS-DOS (МС-ДОС) всякий раз, когда вы хотите. это связано с тем, что MS-DOS (МС-ДОС) с самого начала проектировалась как однозадачная операционная система, так что прерывание функции MS-DOS (МС-ДОС) не обладают свойством реентерабельности вновь vhodnosti.
Представьте себе такую ситуацию.
Пусть обычная программа вызвала прерывания MS-DOS (МС-ДОС), выполнение которых требует относительно длительного времени, такие как запись на диск.
Так как пользователь может активизировать резидентную программу в любой момент, если не принимать особых мер предосторожности, можно повторно вызвать ту же функцию, что обработка еще не завершена. В этом случае мы получим вызова функции MS-DOS (МС-ДОС), который является недействительным в связи с тем, что функции MS-DOS (МС-ДОС) нереентерабельна.
Функция BIOS (БИОС) также не все реентерабельны. ЦР программы можно смело назвать исключением прерывания INT 16h (ИНТ 16ч), который предназначен для работы с клавиатурой. если в памяти резидентную программу, нужно выводить что-то на экране, вместо перерыва INT 10h (ИНТ 10ч) вы должны выполнить прямую запись символов и их атрибуты в памяти.
Не принимая особых мер предосторожности ЦР программа не может вызвать библиотечную функцию переводчика, как последний причиной прерывания MS-DOS (МС-ДОС). например, функция malloc (Танос) причины прерывания MS-DOS (МС-ДОС), чтобы определить объем свободной памяти в системе.
Программа имеет два варианта, чтобы остаться в памяти - использовать прерывания INT 27h (ИНТ 27ч) или функция 31h (31х) прерывания INT 21h (ИНТ 21ч).
Для использования прерываний INT 27h (ИНТ 27ч) регистр сегмента CS должен указывать на PSP (ПСП) программа. в этом случае DX, чтобы записать смещение последнего байта программы плюс один байт.
Нетрудно видеть, что этот метод лучше всего подходит для COM-программ с прерываниями INT 27h (ИНТ 27ч) нельзя оставлять в программу резидентной памяти долго 64 КБ.
Еще более удобный способ-это вызвать функцию 31h (31х) прерывания INT 21h (ИНТ 21ч). В реестр AL вы можете указать код завершения программы, регистр DX должен содержать длину резидентной части программы в параграфах. там не указаны ограничения на размер программы.
Для того, чтобы оставить программу резидентной памяти превышает 64 КБ, можно использовать только последний способ. но не ввязываться в большие резидентные программы, поскольку занимаемая ими память нужна другим программам.
2. Структура ЦР. (Structure of TSR)
Сначала в памяти расположение данных, то прерывание обработчик вектора, и, наконец, инициализации разделе которого имеет точку входа INIT и в этот момент передается управление при запуске программы. Главная задача инициализации-установить резидент в памяти, она нужна лишь при установке программы, потом он удаляется из памяти. в этом разделе помещаются в местах, так как "обрезать" мы можем только старшие адреса.
2.1. Структура ЦР. Инициализация функции. (Initialization functions)
- Поймал векторов прерываний установить свои обработчики.
- Удаление резидента из памяти. во-первых, восстановить старый вектор прерывания из раздела данных, и, во-вторых, удалить окружение TSR и PSP TSR (PSP В ЦР).
- Передача параметров в обработчики прерываний ISR. значения этих параметров находятся в области данных, в качестве параметра может быть кнопка "горячего"вызова резидента.
- Функция минимизации занимаемой памяти резидента.
- Программа заканчивается т. о., в памяти остается резидентом только часть.
- Решение повторного запуска TSR не воспроизводить копии TSR в памяти, что секция инициализации необходимо определить, есть программа в памяти или нет.
3. Инициализация резидентной программы. (Initialize memory-resident programs)
Для использования прерываний 27h (27ч) сегментный регистр CS должен указывать на PSP (ПСП) программы, а в случае DX должен содержать смещение последнего байта программы плюс один байт. легко видеть, что этот путь, чтобы остаться резидентом больше подходит для программного обеспечения в формате COM (Ком). вы можете не оставаться резидентной программой долго 64 килобайт.
Еще более удобный способ-использовать функцию 31h (31х) прерывания INT 21h (ИНТ 21ч). В регистре AL вы можете указать код завершения программы, регистр DX в этом случае, должен содержать длину резидентной части программы в параграфах. нет никаких ограничений 64 килобайт продолжительность программы. для использования этой функции - единственный способ сохранить резидентную программу, долгий 64 килобайт.
Но не ввязывайтесь в долгое программ ЦР, как обычно освободить память, которая уже стала ненужной резидентной программы, это возможно только с помощью перезагрузки операционной системы.
Функции библиотеки Quick C (Быстрая) содержит специальную функцию для оставления резидентную программу в памяти. Эта функция использует прерывание INT 21h (ИНТ 21ч) функция 31h (31х) и называется _dos_keep. первый параметр функции автозавершения кода, который записывается в регистр AL, а второй-длина резидентной части программы в параграфах.
4. Решение проблемы повторного запуска. (The solution to the problem of re-launch)
Вам нужно определить уже запущен TSR или нет. есть несколько вариантов начать определений TSR:
- Метод мультиплексного прерывания наиболее часто используется на практике. В DOS (Дос) перерыв int 2Fh, который используется для некоторых пользовательских соединения между прикладной программы и операционной системы. суть номера-стандарт связи состоит в том, что пользователь может написать собственные функции для прерывания int 2Fh. например, предположим, что, когда вы скачать Resident устанавливает новый обработчик для вектора 2Fh старый комбайн включает корпус новый. пусть будет функция обработчик ах=2АВСһ и результатом этой функции должно быть AL=0FFh (Аль=0FFh) эти два коды играть роль подписи. раздел инициализации выполняет следующие действия.
- Подпись резидента. подпись-это определенная последовательность кода. идея заключается в том, что в тексте резидентной части программы-это специальные подписи, например, название программы. при перезагрузке TSR просканировал весь компьютер памяти для поиска такой подписью. Если подпись как минимум в два раза, это попытаться 2-й загрузка. используйте этот метод антивирусной программы. для улучшения надежности и скорости работы метода, сканирование памяти осуществляется на блоках. в этом случае будет анализироваться только блоки PSP (ПСП) и фиксированное смещение по отношению к PSP (ПСП).
- Использование статической памяти в компьютере. В таком случае, какой-то фиксированный адрес-это флаг, который устанавливается при первом запуске TSR. в следующий раз флаг проанализировал F=1 (Ф=1) затем TSR уже установлен, и если F=0 флаг установлен и есть попытка повторно загрузить TSR. такое статические ячейки, вы можете выбрать в поле векторов, например пусть неиспользуемый вектор FF использует этот флаг в младших адресах. или можно использовать память ОЗУ дисплея за пределами 640 КБ. В ОЗУ имеются неиспользованные области памяти, которые не отображаются, и эта память может использоваться в качестве флага. недостаток этого метода заключается в том, что разные TSR можете использовать тот же флаг, результат может быть что-то блокирует скачивание новых TSR.
Преимущество: широкое использование. недостаток: набор сигнатуры ограничено, подписи могут случайно совпадать. надежность меньше, чем 2-го метод.
- Анализ окружения процесса. во имя выполнения задачи определить такие программы загружается в память или нет. недостаток: если вы измените имя резидента, то вы можете снова загрузить копию.
5. Взаимодействие новых и старых обработчиков прерываний ISR. (The interaction of the new and the old interrupt handlers ISR)
При установке резидентной программы в память перехваченные векторы. в этом случае между старым и новым обработчика прерывания возможны следующие взаимодействия:
- Старый обработчик исключений нет взаимодействия. недостаток: если старый обработчик реализует некоторые полезные функции, которые нужно оставить, эти функции должны быть продублированы в новом. например, если рассматривать обработчика прерываний клавиатуры INT 9 (ИНТ 9), его функция является довольно сложным.
- Принимает код с клавиатуры.
- Ставит код в очереди в буфере клавиатуры.
- Говорит на клавиатуре, что код принят то.
- Обрабатывает код из SCAN код ASCII код.
- Вызвать старый обработчик с JMP (СПМ).
Возврата из старого обработчика. цепи между крюками недостаток.: это часто необходимо, чтобы новая функция выполняется после Старого. по этой схеме невозможно.
- Вызвать старый обработчик с помощью команды CALL (Звоните).
6. Уровни сложности TSR и взаимодействие нового ISR друг с другом. (The levels of difficulty TSR and the interaction of the new ISR with each other)
В зависимости от взаимодействия новой ISR выделяет различные уровни сложности.
- В то время как RF стек текущего процесса. примером такой TSR может быть щелкающим клавиатуры.
- ISR не взаимодействуют друг с другом и только один ISR.
- Время выполнения RF настолько мал, что нет необходимости в защите от повторной активации.
- Простой TSR, их характеристика.
- Функции резидента RF не использует в своей работе функции BIOS (БИОС) или DOS (Дос).
- TSR 2 Уровень сложности. общие характеристики (TSR 2 the Level of difficulty. General characteristics) - с помощью функции BIOS (БИОС).
- RF использует прерывания BIOS (БИОС).
- Резидент раздел программы состоит из нескольких интерактивных ISR.
- Защиты используется, повторную активацию RF.
- Использовать стек текущего процесса.
Если вы посмотрите на функции BIOS (БИОС) во время своей работы, мы видим, что они не являются реентерабельными, это относится к функциям диска INT 13 (ИНТ 13) и экран INT 10 (ИНТ 10). Реентерабельность-это свойство, которое позволяет программа или часть его разорвать и запустить снова с начала. так что программа может прекратить себя. Т. о. функция BIOS (БИОС) areentirely. классика будет нужно написать новый обработчик INT 13 (ИНТ 13). пусть резидент функция вызывается при нажатии любой клавиши, тогда вам нужно использовать обработчик прерывания клавиатуры INT 9 (ИНТ 9), который должен проверить флаг: работа с диском или нет. если флаг равен нулю, то вы можете позвонить в нашу программу RF работает с INT 13 (ИНТ 13). защита только от прерывания INT 13 (ИНТ 13), как и другие прерывания использовать функции DOS (Дос).
Эти программы, в которых житель функция использует функции DOSнапримеp RF использует INT 21 (ИНТ 21). INT 21 (ИНТ 21) areentirely. можно было бы решить эту проблему точно так же, как с INT 13 (ИНТ 13). но этот метод не работает, так как функции DOS (Дос) не всегда есть стандартная концовка есть некоторые мероприятия, которые невозможно контролировать. К таким функциям относятся 4C и 4B. В OC есть специальный флаг - флаг активности DOS (Дос) называют INDOS (ИНДОС). этот флаг 0 если функция INT 21 (ИНТ 21) выполняется, и не равен 0 если он выполнен. Т. о. в программе надо анализировать INDOS (ИНДОС). есть стандартная функция для получения флага INDOS (ИНДОС), это AH=34h (Ах=34ч) прерывания int 21 (инт 21). В этой функции ES:BX (ЭС:ВХ) -&ГТ inDOS (индос). эта функция 34h (34ч) должны быть выполнены в инициализации. нужно записать адрес этого флага INDOS (ИНДОС) в статической ячейке памяти, а затем использовать его в обработчик прерывания.
- TSR 4-й уровень сложности. некоторые из прерывания функция INT 21 (ИНТ 21) очень долго, например ввод с клавиатуры с ожиданием. если есть запрос на вызов функции или житель RF на данный момент, это действительно вызов RF не произойдет до тех пор, пока INT 21 (ИНТ 21) пока вы не нажмете любую клавишу Enter (Введите). все функции DOS (Дос) разделены на 2 класс.
- 00.0Ch (00.0) клавиатура, экран.
- 0Dh. - этот файл является хорошим.
Когда вы 1-я группа, то вы можете выполнять функции другой группы, но не первой, и наоборот. Чтобы решить проблему запуска резидентной функции во время выполнения функции 1-й группа использует специальные прерывания INT 28 (ИНТ 28). пользователь может перехватить вектор INT 28 (ИНТ 28) и выполнить соответствующие действия 2-й группа. например, предположим, что наш резидент функция использует только 2-ю группа функций. если DOS (Дос) активные TSR только INT 28 (ИНТ 28), а если не активный, это только прерывания от таймера. экран вывода можно сделать непосредственно в ОЗУ дисплея в обход DOS (Дос) и BIOS (БИОС). для работы с клавиатурой используйте функции BIOS (БИОС). для работы с экраном и клавиатурой функции используются 2-й группа, но экран и клавиатура рассматриваются как устройства CON (Кон) и работать с ними как файл.
E Вкратце Я хочу начать серию статей по повышению безопасности наших компьютеров. В этих статьях мы увидим, как установить различные антишпионские программы (антишпионские программы), такие как Поиск и уничтожение Spybot o el Ad-Aware и важно, чтобы вы знали, что это резидентная программа, чтобы в дальнейшем избежать головной боли, когда мы начнем говорить о них в этих статьях.
Резидентная программа - это программа, которая остается в памяти компьютера, поэтому мы говорим о резидентных программах в памяти. Любое приложение, которое вы используете на своем компьютере (игра, p2p, редактор изображений, слово и т. Д.), Занимает определенный объем памяти, но когда вы закрываете программу, память освобождается и может использоваться для других целей. Резидентные программы остаются в памяти все время, даже если вы не используете их в это время, и поэтому постоянно занимают часть памяти вашего компьютера.
P Чтобы было немного понятнее, предположим, что, например, когда вы прекращаете играть в одну из своих игр, она полностью освобождает память, но если вы используете антивирус для анализа файла, после его анализа антивирус остается в памяти, защищая ваш компьютер.
Каждый раз, когда вы включаете компьютер, резидентные программы, такие как антивирус, загружаются вместе с операционной системой, так что эти программы доступны с первого момента. В случае с антивирусом это позволяет защитить систему с момента запуска компьютера без необходимости открывать антивирус при каждом включении компьютера.
C Как видите, хорошо, что такие программы, как антивирус, запускаются автоматически при включении компьютера и остаются в памяти для непрерывного использования. Другие программы, которые также находятся в памяти, предназначены для ускорения загрузки приложения, например, программа Acrobat Reader, который используется для открытия файлов PDF, частично находится в памяти, ожидая, когда вы захотите открыть файл PDF, таким образом, когда вы открываете один из этих файлов, программа уже частично загружается, и загрузка выполняется быстрее (если вы хотите заменить Acrobat Reader подумайте о Foxit PDF).
P С другой стороны, может случиться так, что на вашем компьютере установлено много программ, что-то вполне нормальное, и что многие из этих программ хотят частично загружаться при запуске, чтобы они были доступны более быстрым способом, это означает, что запуск компьютера замедляется. (одна из проблем медленного компьютера в том) и что все эти резидентские программы в памяти потребляют большую часть памяти, доступной в системе. Поэтому то, что на первый взгляд может показаться преимуществом, в конечном итоге становится неудобством, поскольку компьютер замедляется, потребление ЦП без надобности и последнее тоже может привести к чрезмерному нагреву процессора (особенно летом).
P Правда, если вы посмотрите в правый нижний угол рабочего стола (в Windows XP), вы увидите множество значков, каждый из которых представляет программу, которая запускается при запуске и остается резидентной в памяти. Мы уже говорили, что некоторые из них необходимы, например антивирус, но другие потребляют ресурсы только без надобности. Например, предположим, что вы устанавливаете Winamp Потому что по выходным вы любите слушать музыку на компьютере, но в течение недели вы работаете со своим компьютером и не используете его, при установке Winamp он всегда запускается вместе с компьютером, так что остается в памяти до тех пор. так как ваш компьютер ждет, когда вы воспользуетесь плеером, но вы используете его только по выходным, поэтому Зачем хранить эту программу в памяти, если вы не собираетесь ее использовать?. С другой стороны, даже если вы используете программу каждый день, разница между запуском ее с нуля и запуском из памяти минимальна, но все время, когда вы не используете плеер, он будет занимать ресурсы. Не лучше ли запретить запуск программы при запуске ПК и предотвратить ее сохранение в памяти?.
Как предотвратить загрузку программы в память при запуске компьютераP Чтобы программа не загружалась в память и не запускалась с операционной системой, у нас есть несколько методов, но мы увидим только один, который для меня самый простой.
1-й) Перейдите в меню «Пуск» и нажмите «Выполнить»:
2-й) Откроется окно с названием «Выполнить», в котором необходимо ввести "Msconfig" (без кавычек). Затем нажмите «Принять».
3-й) Откроется окно «Утилита настройки системы», нажмите на последнюю вкладку выше, где написано «Пуск».
4-й) Теперь вы можете увидеть все программы, которые загружаются при включении компьютера.
5-й) Чтобы ни один из них не загружался, снимите соответствующий флажок. Например, чтобы предотвратить загрузку Winamp, снимите флажок рядом с «winampa», который соответствует «агенту Winamp», программе Winamp, которая загружается при запуске.
6-й) После того, как мы сняли все флажки, соответствующие программам, которые мы НЕ хотим загружать в начале, мы должны нажать «Применить», а затем «Закрыть». Важно, чтобы вы не начинали снимать флажки как сумасшедшие и снимали только те, которые, как вы знаете, соответствуют программам, которые вы хотите удалить с самого начала. После нажатия на «Close» появится следующее окно, в котором вы должны выбрать между перезапуском системы сейчас или позже.
B Ну вот и все, при перезагрузке компьютера появится окно, информирующее о том, что использовалась утилита настройки системы, установите флажок, чтобы она больше не показывалась вам, и закройте окно. Выбранные вами программы больше не будут загружаться, это не означает, что вы их удалили, вы просто запретили им запускаться вместе с операционной системой и потреблять ресурсы. Помните, что есть резидентные программы, такие как антивирус и другие программы операционной системы, которые не следует отключать. По любым вопросам используйте комментарии. Поздравления с виноградниками.
Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.
Существуют программы, остающиеся в памяти компьютера после завершения своей работы. Эти программы носят название резидентных или TSR-программ (от английского словосочетания "Terminate and State Resident" - "завершиться и остаться в памяти").
Резидентные программы - это постоянно находящиеся в памяти программы помощи (POP UP HELP), калькуляторы, справочники и словари, программы копирования и качественной печати экрана, русификаторы, вирусы и многое другое.
Находясь в оперативной памяти, резидентная программа пассивна до наступления ключевого события - таким событием может быть прерывание.
При активизации резидентной программы не имеет значения, какая программа выполняется в этот момент, и нет необходимости завершать ее работу.
В дальнейшем мы будем называть программу, выполняющуюся в момент активизации резидентной программы, основным процессом, а саму резидентную программу - фоновым процессом.
Что такое прерывание
Прерыванием называются действия, производимые компьютером для выполнения системных и сервисных функций во время работы основного процесса.
Если основной процесс - просмотр текста в экранном редакторе, то примером прерывания является вызов резидентного калькулятора.
Процесс прерывания (в дальнейшем его будем называть просто прерыванием) проходит в три стадии:
Резидентная программа собственно и осуществляет обработку прерываний.
Здесь следует сделать уточнение. Программист пишет программу, логически анализирующую возникшую ситуацию - это обработка прерывания на высоком уровне. Для выполнения действий по управлению аппаратурой (ввод/вывод символа, чтение с жесткого диска и т. д.) используются процедуры базовой системы ввода/вывода BIOS (Base Input/Output System). Обращение к ним из программы также называется прерыванием, более точно - сервисным прерыванием.
Отличием программ обработки прерываний от обычных подпрограмм, является то, что система перед их вызовом помещает в стек регистр слова состояния процессора (PSW) для его восстановления в конце прерывания, а управление всегда передается с помощью косвенной адресации.
Аппаратные и сервисные прерывания
Рассмотрим в качестве примера задачу контроля за функционированием химического реактора. Требуется автоматизировать принятие экстренных мер по сигналу с датчиков, контролирующих параметры процесса, в случае отклонения этих параметров от заданных.
Невозможно заранее предугадать, когда произойдет подобное событие. Компьютер в этот момент может выполнять любую программу, например, тестировать обслуживающий персонал на знание техники безопасности или управлять оптимальной загрузкой производственного оборудования. Когда поступает сигнал с датчиков о нештатной работе, выполнение основного процесса должно быть прервано.
Такие прерывания называются асинхронными или аппаратными. Они генерируются системой MS DOS при получении от оборудования сигнала о каком-либо событии.
Аппаратные прерывания нумеруются в порядке приоритета вызова от 0-го до 15-го для IBM PC/AT и от 0-го до 7-го для IBM PC/XT. Все эти прерывания, кроме 2-го (IRQ2), могут быть запрещены ("маскированы") путем сброса флага "I" в регистре слова состояния процессора (бит 7), и затем снова разрешены обратным действием. Не рекомендуется надолго (более 1/18 секунды реального времени) запрещать прерывания, так как это приведет к отставанию системных часов от абсолютного времени.
В отличие от аппаратных, сервисные прерывания происходят только если в программе есть явное указание произвести прерывание. Сервисные прерывания используются для реализации функций работы с внешними или внутренними устройствами, такими, как диски, экран дисплея, принтеры, мышь и т. д. Практически все сервисные прерывания могут выполнять большой набор функций для реализации различных операций работы с внешними устройствами.
Как вызвать сервисное прерывание
Каждое прерывание имеет уникальный порядковый номер. В руководствах по MS DOS и BIOS для каждого прерывания описаны действия, выполняемые компьютером. Например, чтобы прочитать символ, вводимый с клавиатуры, необходимо осуществить прерывание с номером 16H и функцией 00H.
происходит прерывание, и символ, введенный с клавиатуры, помещается в регистр AL.
В таблице приведены примеры аппаратных и сервисных прерываний для IBM PC/AT.
Некоторые из этих прерываний дополняют друг друга. При нажатии клавиши на клавиатуре, системой генерируется аппаратное прерывание INT 09H (IRQ 1), при обработке которого сканкод нажатой клавиши помещается в буфер клавиатуры, а одна из функций сервисного прерывания INT 16H позволяет считать этот код из буфера клавиатуры и возвращает ASCII-код символа, соответствующего нажатой клавише.
Как устанавливаются в системе резидентные программы обработки прерываний
В оперативной памяти компьютера первые 256*2 слов зарезервированы для хранения сегментных адресов программ обработки прерываний. Например, адрес программы обработки прерывания от клавиатуры INT 16H находится в ячейках 16H*2 (базовый адрес сегмента) и в 16H*2+1 (смещение). Зарезервированное поле адресов программ носит специальное название - область векторов прерываний. При возникновении события, вызывающего прерывание, система читает соответствующий событию вектор прерывания и вызывает программу обработки прерывания, помещенную по адресу, на который указывает этот вектор. Процесс обработки прерывания считается завершенным, когда программа обработки прерывания засылает в порт с адресом 20H микросхемы контроллера прерываний код 20H.
Разработчики аппаратуры персонального компьютера придерживались идеологии "открытой архитектуры". К компьютеру можно подключать множество периферийных устройств, а изменять стратегию управления этими устройствами очень просто - достаточно поместить в область векторов прерываний адрес программы, обслуживающей новое устройство.
Таким же точно образом устанавливаются в систему и резидентные программы.
Работать с векторами прерываний можно двумя способами. Первый способ - это прямая запись и чтение оперативной памяти в области векторов прерываний. Второй и более удобный способ - использование сервисного прерывания DOS INT 21H, функция 35H которого позволяет считать вектор прерывания в двухсловный элемент памяти, а функция 25H позволяет установить нужный вектор прерывания по адресу, помещенному в двухсловный элемент памяти.
Структура резидентной программы
В отличие от обычных программ, подавляющая часть кода которых выполняется в интервале с момента запуска до завершения, резидентные программы состоят из двух частей: собственно резидентной и вспомогательной части. При запуске программы выполняется только вспомогательная часть, подготавливающая резидентную часть к активизации.
Вспомогательная часть выполняет следующие действия:
1.) сохраняет векторы "захватываемых" прерываний во внутренних переменных;
2.) устанавливает эти векторы по адресу резидентной части программы;
3.) инициализирует внутренние переменные резидентной части;
4.) завершает работу программы без удаления резидентной части из памяти компьютера.
Реализация этих действий на низком уровне представляет собой:
1.) вызов 35-й функции прерывания DOS INT 21H (GET VECTOR), которая позволяет сохранить вектор прерывания в двухсловной метке;
2.) вызов 25-й функции прерывания DOS INT 21H (SET VECTOR), которая позволяет установить вектор прерывания по известному адресу;
3.) присвоение начальных значений внутренним переменным в зависимости от их назначения в программе;
4.) вызов прерывания DOS 27H (KEEP), которое позволяет завершить выполнение программы без удаления резидентной части из памяти компьютера.
С того момента как резидентная часть программы находится в ОЗУ, и на нее указывает вектор "захваченного" прерывания, она может быть активизирована путем вызова этого прерывания.
Построение резидентной части может осуществляться по трем схемам выполнения.
В схеме "А" сначала вызывается системная обработка, а затем производится добавочная пользовательская обработка, написанная программистом. Эта схема подходит в том случае, когда программист хочет чем-либо дополнить системную обработку. Например, можно заставить машину менять по нажатию клавиш Ctrl-Alt атрибуты яркости символов на противоположные.
Пример 1. Резидентная программа, которая инвертирует яркость всех символов на экране при нажатии сочетания клавиш Ctrl-Alt.
Программа, построенная по схеме "B", выполняет сначала пользовательскую обработку и только потом системную. Этот случай пригоден для изменения содержимого регистров или осуществления каких-либо действий перед системной обработкой. Схемой "B" пользуются все вирусные программы, отслеживающие прерывание запуска программы для того, чтобы присоединиться к ее концу. В примере 2 программа, написанная по схеме "B", при выводе по прерыванию на экран символа "пробел", заставляет систему выводить его на красном фоне. Данная программа перехватывает вектор сервисного прерывания INT 10H, функции 09H и 0AH которого служат для вывода символов на экран с текущей позиции курсора. Когда вызывается одна из этих функций, резидентная программа проверяет номер символа, выводимого на экран (он находится в регистре AL), и в зависимости от результата проверки переустанавливает цвет символа (регистр BL). После проверки производится переход на системную обработку, выводящую символ на экран с установленными при пользовательской обработке параметрами, и возвращается управление основному процессу.
Схема "C" полностью исключает системную обработку и заменяет ее пользовательской. При необходимости вообще исключить обработку данного прерывания резидентная часть должна состоять лишь из операторов засылки в порт 20H сигнала о конце прерывания (код 20H) и оператора возврата IRET. Пример 3 иллюстрирует рассматриваемую схему. Программа использует пользовательское прерывание по таймеру INT 1CH и выводит в левом верхнем углу значение счетчика. Системный таймер генерирует прерывание INT 1CH ("тикает") приблизительно 18,5 раз в секунду. Программа дожидается 10 таких "тиков" и увеличивает номер символа, выводимого в левом верхнем углу экрана, на единицу.
Активизация резидентных программ по горячим клавишам
Самым распространенным способом активизации резидентных программ по прерыванию является вызов по так называемым "горячим" клавишам ("hot keys"), т. е. по заранее установленной комбинации клавиш.
Легче всего обрабатывать сочетания клавиш Ctrl, Alt, LeftShift и RightShift. Резидентная программа, вызываемая по "горячим клавишам", обычно устанавливается на прерывание INT 09H, хотя может устанавливаться и на прерывание INT 16H. В начале резидентной части необходимо проверить байт памяти, находящийся по адресу 0000:0417H, в котором хранятся битовые флаги состояния клавиатуры, т. е. информация о нажатых в данный момент управляющих клавишах. Если значение бита равно 1 (бит "взведен"), значит соответствующая клавиша в данный момент нажата или включен соответствующий режим.
Пример 1 иллюстрирует резидентную программу, использующую вызовы по "горячим" клавишам. Программа перехватывает аппаратное прерывание INT 09H и производит сначала системную обработку (схема "A"), затем проверяет флаги клавиатуры. Если флаги клавиатуры указывают на нажатие клавиш Ctrl и Alt, то программа осуществляет предписанные ей действия и передает управление основному процессу.
Если необходимо использовать для активизации резидентной программы дополнительные (не входящие в байт флагов состояния клавиатуры) клавиши, то следует добавочно использовать порт клавиатуры. Далее приведен фрагмент резидентной части, активизирующейся по сочетанию клавиш Ctrl-Alt-R.
Некоторым резидентным программам для нормальной работы необходимо захватывать более одного вектора прерываний. Примером таких программ являются русификаторы. Эти программы перехватывают прерывание INT 09H и с его помощью отслеживают момент смены режимов "Рус/Лат" по "горячим" клавишам, а также перехватывают функцию 00H прерывания INT 10H для загрузки в знакогенератор шрифтов различных размеров при смене одного видеорежима на другой (к примеру, при смене текстового режима 25*80 со шрифтом 8*14 точек на текстовый режим 42*80 со шрифтом 8*8 точек).
Особенности программирования
Правильное построение резидентной и вспомогательной частей обеспечивает нормальную активизацию и работу фонового процесса, но после его завершения программу ожидает еще один важный этап - возврат управления основному процессу, во время выполнения которого была активизирована резидентная программа. Для успешного возврата в основной процесс необходимо восстановить значения всех регистров, которые были использованы во время работы резидентной части. Удобнее всего это сделать, поместив в начале работы фонового процесса значения этих регистров в стек, а в конце работы восстановить прежние значения, взяв их из стека.
Если регистры не будут восстановлены, то нормальный возврат в основной процесс не произойдет. Это скорее всего приведет к краху системы. Такая ошибка довольно часто допускается программистами, начинающими работать над написанием резидентных программ.
В резидентных программах необходимо аккуратно работать со стеком, так как при недостаточном его размере будет портиться память, находящаяся после резидентной программы.
К непредсказуемым последствиям приводит также несбалансированность операторов PUSH (положить в стек) и POP (извлечь из стека).
Все резидентные программы обработки прерываний должны заканчиваться командой IRET, так как она кроме возврата осуществляет восстановление слова состояния процессора (PSW).
Может сложиться впечатление, что писать резидентные программы можно только на языках низкого уровня. Пример 4 опровергает это представление. Более того, транслятор языка TurboPascal дает возможность реализации рассмотренных выше функций загрузки и чтения векторов прерываний на высоком уровне с помощью собственных библиотечных процедур. При использовании транслятора TurboPascal программист не обязан следить за восстановлением регистров, так как это осуществляется автоматически при выходе из подпрограмм типа "Interrupt".
Написание резидентных программ ошибочно считается в среде пользователей и программистов "высшим пилотажем". Каждый программист, понимающий процессы, происходящие в компьютере, может достичь успехов в этой области.
В данной курсовой работе рассмотрена программа-резидент, остающаяся в памяти после закрытия окна программы и обозначающая свое присутствие значком в трее.
Цель работы состоит в разработке программы-резидента, делающей снимок экрана с заданной периодичностью и сохраняющая файлы в выбранной папке.
Содержание
Введение 5
1. Постановка задачи и ее решение 6
1.1. Формулировка задачи 6
1.2 Спецификация задачи 6
2 Техническая реализация алгоритма решения 6
2.1 Выбор языка и среды программирования 6
2.2 Описание алгоритмов и программы 6
2.3 Описание методов программирования 8
3 Тестирование программы 11
Заключение 13
Список литературы 14
Приложение А. Листинг программы 15
Работа содержит 1 файл
Пояснительная записка.docx
Пояснительная записка курсовой работы содержит _16_ страниц, _8_ рисунков,_4_ источника, _1_ приложение.
Ключевые слова: ПРОГРАММА, РЕЗИДЕНТ, ТРЕЙ, СКРИНШОТ, ПУТЬ К ПАПКЕ, ТАЙМЕР
В данной курсовой работе рассмотрена программа-резидент, остающаяся в памяти после закрытия окна программы и обозначающая свое присутствие значком в трее.
Цель работы состоит в разработке программы-резидента, делающей снимок экрана с заданной периодичностью и сохраняющая файлы в выбранной папке.
1. Постановка задачи и ее решение 6
1.1. Формулировка задачи 6
1.2 Спецификация задачи 6
2 Техническая реализация алгоритма решения 6
2.1 Выбор языка и среды программирования 6
2.2 Описание алгоритмов и программы 6
2.3 Описание методов программирования 8
3 Тестирование программы 11
Список литературы 14
Приложение А. Листинг программы 15
Системное программное обеспечение — это комплекс программ, которые обеспечивают эффективное управление компонентами компьютерной системы , такими как процессор , оперативная память , устройства ввода-вывода , сетевое оборудование , выступая как «межслойный интерфейс», с одной стороны которого аппаратура, а с другой - приложения пользователя. В отличие от прикладного программного обеспечения , системное не решает конкретные прикладные задачи, а лишь обеспечивает работу других программ, управляет аппаратными ресурсами вычислительной системы и т.д.
При работе с MS-DOS резидентные программы широко использовались для достижения различных целей (например, русификаторы клавиатуры , программы доступа к локальной сети , менеджеры отложенной печати , вирусы ).
По способу инициализации и вызова операционной системой резидентные программы необходимо отличать от «настоящих» драйверов MS-DOS, встраиваемых операционной системой в своё ядро во время загрузки. В эпоху многозадачных ОС резидентными иногда называют программы, загруженные постоянно и работающие в фоновом режиме.
Разработать программу, работающую в фоновом режиме. Программа должна оставаться в памяти после закрытия главного окна и обозначать свое присутствие значком в системном трее. Также программа должна с заданной периодичностью делать снимки экрана и сохранять их в выбранную пользователем папку.
- периодичность в секундах;
- папка для сохранения скриншотов.
- иконка с системном трее
- Техническая реализация алгоритма решения
- Выбор языка и среды программирования
- «Настройка» - открывается главное окно программы, в котором можно задать интервал таймера, выбрать папку для сохранения скриншотов, свернуть окно и закрыть программу;
- «Свернуть» - при выборе этого пункта меню сворачивается в трей главное окно программы;
- «Запустить» - запускается таймер, с заданной периодичностью программа делает снимки экрана и сохраняет в выбранную папку. По умолчанию интервал таймера – 5 секунд, а папка сохранения – диск C. В режиме работы таймера нельзя изменить периодичность сохранения скриншотов.
- «Остановить» - остановка таймера, режим ожидания. В этом режиме можно изменить интервал таймера.
- «Выход» - полное закрытие программы
В качестве среды разработки была выбрана IDE Visual Studio 2010 Express Edition, поскольку она обладает удобным интерфейсом, богатыми средствами для отладки, широко распространена и бесплатна для некоммерческого использования.
При запуске программы в системном трее появляется значок. Таймер автоматически не запускается, программа находится в режиме ожидания. Контекстное меню открывается нажатием правой кнопкой мыши по иконке. Меню состоит из следующих пунктов:
Рисунок 1- Диаграмма состояний и переходов
Код формы, создание иконки в трее.
notifyIcon.Icon = new Icon (ICON_FILE_NAME);
Код создания и настройки контекстного меню, запуск и остановка таймера.
ContextMenu menu = new ContextMenu ( new MenuItem []
new MenuItem (ITEM_SHOW_WINDOW),
new MenuItem (ITEM_HIDE_WINDOW),
new MenuItem (ITEM_ACTION),
new MenuItem (ITEM_STOP),
new MenuItem (ITEM_EXIT_ APPLICATION)>);
foreach ( MenuItem menuItem in menu.MenuItems)
menuItem.Click += new EventHandler (OnMenuItemClick);
//Делаем доступным пункт Hide, а пункт Show - запрещаем
protected override void OnLoad( EventArgs e)
notifyIcon.ContextMenu. MenuItems[0].Enabled = false ;
notifyIcon.ContextMenu. MenuItems[1].Enabled = true ;
//Делаем доступным пункт Show, а пункт Hide - запрещаем
protected override void OnClosed( EventArgs e)
notifyIcon.ContextMenu. MenuItems[0].Enabled = true ;
notifyIcon.ContextMenu. MenuItems[1].Enabled = false ;
Читайте также: