Ручка (вычисление) - Handle (computing)

В компьютерное программирование, а ручка это абстрактный ссылка к ресурс это используется, когда программное обеспечение ссылки на блоки объем памяти или объекты, которые управляются другой системой, например база данных или Операционная система.

Дескриптор ресурса может быть непрозрачный идентификатор, и в этом случае это часто целое число число (часто индекс массива в массиве или «таблице», которая используется для управления этим типом ресурса), или это может быть указатель что позволяет получить доступ к дополнительной информации. Распространенные дескрипторы ресурсов включают файловые дескрипторы, сетевые розетки, подключения к базе данных, идентификаторы процесса (PID) и идентификаторы вакансий. PID и идентификаторы заданий - это явно видимые целые числа; в то время как файловые дескрипторы и сокеты (которые часто реализуются как форма файлового дескриптора) представлены как целые числа, они обычно считаются непрозрачными. В традиционных реализациях файловые дескрипторы представляют собой индексы в (для каждого процесса) таблица дескрипторов файлов, отсюда a (общесистемный) таблица файлов.

Сравнение с указателями

Хотя указатель содержит адрес элемента, к которому он относится, дескриптор - это абстракция ссылки, управляемой извне; его непрозрачность позволяет системе перемещать референт в памяти без аннулирования дескриптора, что невозможно с указателями. Дополнительный слой косвенное обращение также увеличивает контроль системы управления над операциями, выполняемыми над референтом. Обычно дескриптор является индексом или указателем на глобальный массив надгробия.

А справиться с утечкой это тип программная ошибка это происходит, когда компьютерная программа запрашивает дескриптор ресурса, но не освобождает дескриптор, когда он больше не используется; это форма утечка ресурсов, аналогично утечка памяти для указателя на память.

Безопасность

В безопасные вычисления термины, поскольку доступ к ресурсу через дескриптор осуществляется через другую систему, дескриптор функционирует как способность: он не только идентифицирует объект, но и связывает права доступа. Например, в то время как имя файла можно подделать (это просто угадываемый идентификатор), дескриптор данный для пользователя внешней системой и, таким образом, представляет собой не только личность, но и предоставляется доступ.

Например, если программа желает прочитать файл системного пароля (/ etc / passwd) в режиме чтения / записи (O_RDWR), он может попытаться открыть файл с помощью следующего вызова:

int fd = открыто("/ etc / passwd", O_RDWR);

Этот вызов просит операционную систему открыть указанный файл с указанными правами доступа. Если ОС позволяет это, она открывает файл (создает запись в каждом процессе таблица дескрипторов файлов ) и возвращает дескриптор (дескриптор файла, индекс в эту таблицу) пользователю: фактический доступ контролируется ОС, а дескриптор является жетон того, что. И наоборот, ОС может запретить доступ и, таким образом, не открыть файл и не вернуть дескриптор.

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

С другой стороны, в системах, не основанных на возможностях, каждый процесс должен получить свой собственный отдельный дескриптор, указав идентификатор ресурса и желаемые права доступа (например, каждый процесс должен сам открывать файл, задавая имя файла и режим доступа). Такое использование более распространено даже в современных системах, которые поддерживают дескрипторы передачи, но оно подвержено уязвимостям, таким как запутанная депутатская проблема.

Примеры

Ручки были популярным решением управление памятью в операционных системах 1980-х годов, таких как Mac OS[1] и Windows. Структура данных FILE в Стандартная библиотека ввода-вывода C это дескриптор файла, абстрагируясь от базового представления файла (на Unix это файловые дескрипторы ). Как и другие окружения рабочего стола, то Windows API активно использует дескрипторы для представления объектов в системе и обеспечения канала связи между операционной системой и пространство пользователя. Например, окно на рабочий стол представлен ручкой типа HWND (ручка, окно).

Вдвойне косвенный ручки в последнее время вышли из моды, так как объем доступной памяти увеличился и виртуальная память алгоритмы сделали использование более простого указателя более привлекательным. Однако во многих операционных системах этот термин все еще применяется к указателям на непрозрачные, «частные». структуры данныхнепрозрачные указатели —Или индексам во внутренние массивы, переданные из одного процесс к его клиент.

Смотрите также

Рекомендации

  1. ^ Герцфельд, Энди (Январь 1982 г.), Оригинальный Macintosh: венгерский, получено 2010-05-10

внешняя ссылка