Изобретение относится к способу доступа к файлам на уровне операционной системы компьютерной системы.
Иногда требуется модифицировать работу компьютерной системы таким образом, чтобы сделать ее прозрачной как для пользователя, так и для операционной системы компьютерной системы.
Одна из типичных ситуаций, когда возникает данное требование, появляется при стремлении сохранить прикладные программы в сетевом файл-сервере, а не в отдельно стоящем персональном компьютере. Тогда сетевой системный сервер должен лишь инсталлировать одну копию прикладной программы в файл-сервере, которая затем может быть доступна любой машине или рабочей станции в сети. Этот подход обеспечивает повышенную гибкость, например, при изменении параметров настройки прикладной программы или при модификации прикладной программы и уменьшает общее время инсталляции для конкретной прикладной программы, поскольку потребуется только одна инсталляция (которая может занять час или более) для каждого файл-сервера, а не для каждой рабочей станции.
В связи с вышеуказанным подходом возникает проблема лицензирования прикладной программы. По существу все прикладные программы лицензированы с условием, разрешающим их использование либо на одной машине, либо на заранее оговоренном, фиксированном максимальном количестве машин.
Обычно отсутствуют (либо весьма незначительны) технические ограничения на количество пользователей, которые могут одновременно использовать конкретную прикладную программу, инсталлированную в сетевом файл-сервере. Следовательно, чтобы остаться в рамках лицензионной договоренности о количестве пользователей, необходимо реализовать некоторый вариант программного подсчета, предназначенного для ограничения одновременно работающих пользователей прикладной программы в пределах заранее оговоренного максимального числа, определенного в лицензии.
Обычно программный счет осуществляется путем перехвата запросов на выполнение конкретной прикладной программы и проверки того, сколько пользователей уже пользуются данной прикладной программой. Если максимальное количество пользователей уже достигнуто, то последующие запросы на выполнение прикладной программы отвергаются. Если максимальное число не достигнуто, то "копий в работе" увеличивается на единицу и запрос допускается к выполнению как нормальный. По завершении выполнения контролируемой прикладной программы этот факт фиксируется и число "копий в работе" уменьшается на единицу.
Такой контроль с подсчетом обеспечивается по одному из трех вариантов. Во-первых, путем использования резидентной сервисной программы (утилиты) на каждой рабочей станции, которая перехватывает запросы на выполнение сетевых программ и разрешает выполнение в зависимости от числа "копий в работе", поддерживаемого в общем файле сервера. Во-вторых, путем переименования файла запуска сетевой программы, так чтобы вместо сетевой программы выполнялась "заглушка" (пустая подпрограмма). При выполнении заглушка проверяет число "копий в работе", хранящееся в общем файле сервера, и выполняет сетевую программу как дочерний (порожденный) процесс, если максимальное число пользователей не было превышено при выполнении сетевой программы. В-третьих, путем использования сервисной резидентной программы (утилиты) в файл-сервере, которая перехватывает запросы на доступ к сетевой программе и разрешает выполнение на основе значения локального счетчика "копий в работе". Если максимальное количество пользователей уже достигнуто, то тогда сервисная программа посылает код ошибки обратно на рабочую станцию.
Мы считаем, что каждый из вышеупомянутых способов имеет свои преимущества. Первый не надежен, поскольку его можно обойти, не загрузив или наоборот блокировав резидентную сервисную программу рабочей станции. Как в первом, так и во втором способе используется дефицитная память рабочей станции, что уменьшает объем памяти, доступный на рабочей станции (для всех прикладных программ в случае первого способа и для каждой контролируемой сетевой программы в случае второго способа). Третий способ обычно вызывает сообщение о серьезной и возможно неисправимой ошибке от операционной системы рабочей станции, когда выполнение отвергается файл-сервером.
Примеры известных способов блокирования файлов или запрещения выполнения программ известны из патентов США US-A- 5327563 (Singh) и US-A-5155827 (Chering). У Singh блокирование программных файлов в конкретном запоминающем устройстве достигается путем записи зашифрованной информации, определяющей местоположение программных файлов в запоминающей среде, и анализа адресов программного файла до выполнения. У Chering исполняемые файлы перемещаются с жесткого диска на дискету и заменяются на командный файл, использующий известные команды MS-DOS. Соответственно при широком толковании изобретение обеспечивает улучшенный способ доступа к файлам.
Различные аспекты настоящего изобретения определены в независимых пунктах формулы изобретения, приведенной ниже, к которым теперь следует обратиться. Полезные признаки изобретения установлены в зависимых пунктах.
В частности, предлагается способ работы компьютерной системы, имеющей средство памяти, центральный процессор для выполнения работы операционной системы и запоминающее устройство для хранения файла, в которой операционная система периодически выполняет запрос на открытие файла, хранящегося в запоминающем устройстве, причем способ включает захват на уровне операционной системы запроса на открытие файла, идентифицирующего файл, подлежащий открытию. Кроме того, способ включает выделение из запроса на открытие файла идентификатора первого файла и затем определения того, следует ли заменить идентификатор первого файла на идентификатор замещающего файла, подлежащего открытию вместо первого файла, и, если определено, что идентификатор должен быть заменен, то изменение запроса для замены идентификатора первого файла на идентификатор замещающего файла. Затем запрос на открытие файла передается на выполнение либо исправляется или не исправляется в соответствии с результатом определения (необходимости замены идентификатора).
Способ может быть приспособлен для использования как операционной системой, так и пользователем. Способ согласно изобретению, в котором запрос поступает от пользователя, является прозрачным как для операционной системы, так и для пользователя. В частности, он применим для захвата запросов пользователей на открытие файла как в случае, когда запрос исходит от рабочей станции компьютерной сети, так и от автономно работающей машины. В случае, когда компьютерная система является компьютерной сетью, содержащей файл-сервер и, по крайней мере, одну рабочую станцию, способ может включать шаги поддержки записи количества копий первого файла, находящихся в работе в сети, и определения того, следует ли заменить идентификатор первого файла на идентификатор замещающего файла путем проверки того, указывает ли запись на то, что превышено заданное число копий файла в работе из-за выполнения запроса на открытие файла. Таким образом, программный подсчет может быть целиком реализован в файл-сервере без использования какой-либо дополнительной памяти рабочей станции. Затем можно обеспечить отказ по запросам на выполнение сетевой программы благоприятным для пользователя образом или, если подходящее число копий не было превышено, обеспечить для пользователя прозрачное принятие запросов.
Способ может включать выбор замещающего файла из множества потенциальных замещающих файлов в соответствии с идентификатором первого файла. Такой выбор может включать определение того, является ли первый файл исполняемым или нет, и может доходить до определения типа исполняемого первого файла, так что замещающий файл выбирается в соответствии с определенным типом исполняемого файла. Определение типа исполняемого файла может быть выполнено путем сравнения по меньшей мере части имени первого файла с заранее заданным списком имен файлов.
Также предлагается компьютерная система, имеющая средство памяти, центральный процессор для выполнения работы операционной системы и запоминающее устройство для хранения файла, причем операционная система приспособлена для периодического выполнения запросов на открытие файла, хранящегося в запоминающем устройстве, при этом система, кроме того, включает средство для захвата на уровне операционной системы запроса на открытие файла, идентифицирующего первый файл, подлежащий открытию. Система, кроме того, содержит средство для выделения из запроса идентификатора первого файла и средство для определения того, следует ли заменить идентификатор первого файла на идентификатор замещающего файла, подлежащего открытию, и, если определено, что идентификатор заменить следует, изменение запроса для замены идентификатора первого файла на идентификатор замещающего файла. Также предусматривается средство для проведения запроса к месту его возникновения для выполнения.
Теперь, лишь в качестве примера, будет описан предпочтительный вариант воплощения изобретения со ссылками на сопровождающие чертежи, на которых:
фиг. 1 - блок-схема, показывающая типичную компьютерную систему;
фигуры 2A-2B - диаграммы, показывающие соответственно карту распределения памяти системы на уровне операционной системы и системы, модифицированной для работы согласно изобретению;
фиг. 3 - блок-схема, иллюстрирующая принцип изобретения;
фиг. 4 - блок-схема, иллюстрирующая способ программного счета согласно изобретению.
На фиг. 1 показано, как реализовано изобретение в компьютерной системе 10, содержащей блок центрального процессора (CPU) 12, устройство памяти 14 и запоминающее устройство 16 (изображенное в данном случае в виде дисковода).
Компьютерная система 10 работает с операционной системой. В нижеописанном варианте воплощения это операционная система DOS, используемая в IBM-совместимых персональных компьютерах, но способ согласно изобретению применим с самыми разными операционными системами.
Как показано на фиг. 2A, во всех операционных системах прежде чем использовать файл, хранящийся в запоминающем устройстве 16, осуществляется вызов операционной системы (в данном случае посредством прерывания 21h), который запрашивает открытие файла, поименованного в вызове. Открывая файл, операционная система берет поступившее к ней имя файла и присваивает ему индекс (обычно просто номер), который возвращается назад к процессу, запрашивающему файл для открытия. Индекс файла уникально идентифицирует открытый файл. Когда файл открывается в первый раз, операционная система выполняет различные функции, такие как блокирование файла в запоминающем устройстве 16. Используя индекс файла для его последующей идентификации, удается избежать затрат времени на выполнение этих функций, поскольку конкретные детали файла могут храниться в таблице, которая соотносит элементы файла с его индексом. Если файл для процесса больше не требуется, то он закрывается, что вызывает удаление элемента таблицы, относящегося к этому индексу.
На фиг. 2B отражена ситуация в среде MS-DOC и где путем повторной векторизации точки входа прерывания 21h в новую часть программы может быть перехвачен каждый запрос на открытие файла. Затем выполняется переход к части программы, предназначенной для выполнения, когда появляется это прерывание (как показано стрелками в левой части фигуры). Основные шаги в новой части программы показаны на фиг. 3. Во-первых, выполняется проверка для определения того, появилось ли прерывание благодаря запросу на открытие файла. Если нет, то немедленно осуществляется переход к обычной части программы. Если был захвачен запрос на открытие файла (шаг 20), то путем считывания указанной строки парой регистров CPU DS : DX выделяется имя файла, подлежащего открытию (шаг 22). Эта строка содержит имя файла, подлежащего открытию. Далее определяется, необходима ли замена файла (шаг 24). Это зависит главным образом от того, какой способ используется; несколько примеров использования приведены ниже.
Если файл должен быть заменен, имя в запросе на открытие файла заменяется на имя замещающего файла путем изменения содержимого пары регистров DS : DX для указания на строчку, содержащую имя замещающего файла. Затем осуществляется выполнение обычной части программы (шаг 26). Однако, если определено, что замещение не требуется, то выполняется непосредственный переход к обычной части программы без замещения имени файла (шаг 28).
Замещение является прозрачным как для запрашивающего процесса, так и операционной системы. Запрашивающий процесс просто получает индекс файла, который, как ожидается, относится к файлу, запрашиваемому для открытия, хотя в действительности он относится к замещающему файлу. В противном случае операционная система не сможет определить, что имя файла, подлежащего открытию, было изменено, если процесс произвел запрос, и просто воспринимает то, что появляется, как обычный запрос на открытие файла.
Предпочтительно, чтобы, если исходный файл является исполняемым файлом, замещающий файл являлся исполняемым файлом того же типа. Это может быть важным, поскольку процесс, который запросил исполняемый файл, подлежащий открытию, вероятно затем вызовет выполнение файла. Если замещающий файл не является исполняемым файлом либо является исполняемым файлом другого типа (например, для машины другого типа), то тогда, если замещающий файл будет выполняться, то могут появиться непредсказуемые результаты.
Тип исполняемого исходного файла может быть определен, например, из предположения, что в MS-DOS-совместимой среде существует только пять типов исполняемой программы, а именно, DOS COM, DOS EXE, Windows EXE, OS/2 EXE и Windows NT EXE.
Программа "СОМ" может быть идентифицирована по меньшей мере по расширению имени файла "COM". Все остальные исполняемые программы имеют расширение имени файла "EXE", но также имеют заголовок файла, который уникально идентифицирует, какой же тип файла EXE имеет место. Все файлы EXE кроме файлов DOS EXE имеют сегментированный исполняемый заголовок, который содержит известные байты, идентифицирующие тип исполняемого файла. Файл DOS EXE может быть идентифицирован по расширению "EXE" и отсутствию сегментированного исполняемого заголовка.
Таким образом, тип исполняемого файла может быть определен путем использования комбинации расширений имен файлов, заголовка файла и информации в сегментированном исполняемом заголовке.
Операционные системы должны всегда открывать исполняемый файл для считывания содержимого в память и в общем случае определения размера исполняемой программы из самого файла. Таким образом, нет необходимости, чтобы замещающая программа имела тот же размер, что и исходная запрашиваемая программа, хотя она не должна требовать больше памяти, чем потребовала бы исходная программа, если она должна надежно выполняться.
В предпочтительном варианте воплощения реализуется программный подсчет, как это показано на фиг. 4.
Решение о том, разрешить ли выполнение файла, реализуется в файл-сервере с помощью управляющей утилиты. Как показано на блок-схеме фиг. 4, запрос рабочей станции на открытие файла захватывается (шаг 32) в файл-сервере, и выделяется имя файла, подлежащего открытию (шаг 34). Выделенное имя сравнивается со списком имен файлов, чтобы проверить, является ли данный файл файлом, который контролируется. Если файл не контролируется, то запрос на открытие файла обрабатывается обычным путем (шаг 36). Если файл контролируется, проверяется значение счетчика "копий в работе", чтобы узнать, имеется ли уже в работе максимальное число копий (шаг 38). Если максимальное количество копий еще не достигнуто, то содержимое счетчика увеличивается на единицу (шаг 39) и запрос на открытие файла обрабатывается обычным путем (шаг 36).
Если уже достигнуто максимальное значение счетчика, то тогда необходимо отвергнуть запрос рабочей станции на выполнение программы. Сначала (на шаге 40) определяется тип исполняемого файла (в стандартной MS-DOS среде это может быть, например, выбор между программами Windows и DOS). После определения типа исполняемого файла предпринимается попытка обнаружить подходящую замену (шаг 42). Если замена имеется, то имя файла в запросе на открытие заменяется именем заместителя (шаг 44) и запрос на открытие обрабатывается обычным способом (шаг 36). Если замена не имеется, то на рабочую станцию посылается код ошибки (шаг 46).
Подробнее: если выполнение должно быть отвергнуто, управляющая утилита сначала определяет тип исполняемого файла, к которому осуществляется доступ, используя либо заранее составленную таблицу, либо динамически используя комбинацию из имени файла, расширения, атрибутов директории и/или заголовка файла. На практике большинство типов исполняемых программ, встречающихся в LAN файл-серверах, может быть определено путем использования этого способа вместе с операционными системами DOS, Windows, Windows NT, OS/2 и Macintosh.
Имея определенный тип файла, управляющая утилита заменяет имя файла в запросе на открытие файла на имя замещающей программы того же исполняемого типа и затем разрешает продолжать выполнение запроса.
После замены файла, который рабочая станция собиралась выполнить, на другой файл рабочая станция будет выполнять замещающую программу, когда она поступит, чтобы исполнить открытый файл. Ни рабочая станция, ни операционная система не обнаружат какое-либо изменение. Замещающая программа может быть использована для отображения соответствующего сообщения на рабочую станцию, информирующего пользователя, что данная прикладная программа в настоящее время используется максимальным количеством пользователей и, следовательно, было отказано в ее выполнении. Программа может также предоставить возможность вручную или автоматически попытаться повторно выполнить прикладную программу.
Поскольку в общем случае замещающая программа может определить из операционной системы свое собственное имя и местоположение (то есть имя, которое изначально использовалось в запросе на открытие файла), она может как отобразить имя запрашиваемой прикладной программы, так и вновь попытаться исполнить прикладную программу по цепочке, то есть завершив свое выполнение, и вызвать программу с другим именем (исходную прикладную программу), чтобы начать ее выполнение. Если теперь прикладная программа доступна, то начнется ее выполнение. Если она не доступна, то снова будет выполняться замещающая программа.
Иметь замещающую программу для каждого возможного типа исполняемых файлов нет необходимости, поскольку, в худшем случае, в запросе на открытие файла может быть отказано с выдачей кода ошибки, если нет в наличии замещающей программы или если тип исполняемого файла не может быть определен.
Другой вариант воплощения изобретения позволяет сетевому системному менеджеру посылать сообщение любому пользователю, используя конкретную прикладную программу путем замещения прикладной программы программой, которая генерирует сообщение и затем сцепляется с прикладной программой. Это является улучшением по сравнению с известными утилитами сообщений, которые ограничены адресами конкретной группы поименованных пользователей, вместо того, чтобы адресоваться к пользователю, выполняющему прикладную программу.
При использовании способа согласно изобретению сообщение посылается только тогда, когда выполняется конкретная прикладная программа. Типичное сообщение может представлять собой: "Please note that spreadsheet sales files have been moved to directory X'' (Пожалуйста, имейте ввиду, что табличные файлы продаж были перемещены в директорию X''). Таким образом данное сообщение показывается только заинтересованным пользователям и только в тот момент, в который сообщение актуально.
Еще один вариант воплощения изобретения касается операции, посредством которой сетевой пользователь входит в сеть и которая может быть использована для выполнения работы либо открыто, либо скрытно по отношению к пользователю и/или к операционной системе, как это описано ниже. Программа входа в систему обычно хранится в файл-сервере и может быть замещена способом, подобным тому, который был предложен выше и который связан с подсчетом выполняемых копий прикладной программы. Замещающая программа может быть предназначена для автоматической модификации программного обеспечения рабочей станции, например программ сетевых драйверов, и затем может быть сцеплена с исходной программой входа в сеть. Таким образом, системный менеджер может модифицировать файлы рабочей станции, не появляясь лично на каждой рабочей станции и не полагаясь на пользователя, что он выполнит эту работу. Поскольку управляющая утилита может определить физический адрес рабочей станции, для разных рабочих станций могут выполняться различные операции.
Изобретение относится к способу доступа к файлам на уровне операционной системы. Технический результат заключается в повышении надежности лицензирования прикладной программы. Технический результат достигается за счет того, что способ работы компьютерной системы, в которой операционная система периодически осуществляет запросы на открытие файла, хранящегося в запоминающем устройстве, заключается в том, что захватывают запрос на открытие файла, идентифицирующего первый файл, подлежащий открытию, на уровне операционной системы, выделяют из запроса на открытие файла идентификатор первого файла, определяют, следует ли заменить идентификатор первого файла на идентификатор замещающего файла, подлежащего открытию вместо первого файла, и, если определено, что идентификатор должен быть заменен, заменяют в запросе на открытие файла идентификатор первого файла на идентификатор замещающего файла, и передают запрос на открытие файла в операционную систему для выполнения. 4 с. и 10 з.п. ф-лы, 4 ил.
US 5327563 A, 05.07.1994 | |||
УСТРОЙСТВО ЗАЩИТЫ ПАМЯТИ | 1991 |
|
RU2006923C1 |
US 5155827 A, 13.10.1992 | |||
УСТРОЙСТВО для ОПРЕДЕЛЕНИЯ ЧИСТОТЫ ПОВЕРХНОСТИМАТЕРИАЛОВ | 0 |
|
SU254854A1 |
US 4757533 A, 12.07.1988. |
Авторы
Даты
2001-02-27—Публикация
1995-09-06—Подача