История изменений
Исправление faq2, (текущая версия) :
Дескриптор, он же хэндл(в windows терминологии) - это способ инкапсуляции.
Например, у тебя есть в ядре структура описывающая файл, она хранится где-то в области памяти ядра буквально как указатель на структуру. Но, чтобы твои кривые ручки из юзерленда не попортили эту структуру (ну и не получили segfault), введён мэппинг «чиселко»:«указатель на структуру». Чиселки даются в юзерлэнд, а внутри вызовов ядра конвертируются обратно в указатели. Дескриптор не обязан быть чиселком, но чаще всего это всё-таки оно.
Т.е. это буквально способ надёжно разделить два слоя, ценой определённых накладных расходов на мэппинг. Так делают не только в ситуации юзерлэнд<->ядро, но и в случаях например клиент <-> проприетарная библиотека.
Иногда, хэндл отличают от дескриптора по признаку: хэндл может быть передан на другой узел через IPC и останется после этого валидным, а дескриптор не может.
Исходная версия faq2, :
Дескриптор, он же хэндл(в windows терминологии) - это способ инкапсуляции.
Например, у тебя есть в ядре структура описывающая файл, она хранится где-то в области памяти ядра буквально как указатель на структуру. Но, чтобы твои кривые ручки из юзерленда не попортили эту структуру (ну и не получили segfault), ввён мэппинг «чиселко»:«указатель на структуру». Чиселки даются в юзерлэнд, а внутри вызовов ядра конвертируются обратно в указатели. Дескриптор не обязан быть чиселком, но чаще всего это всё-таки оно.
Т.е. это буквально способ надёжно разделить два слоя, ценой определённых накладных расходов на мэппинг. Так делают не только в ситуации юзерлэнд<->ядро, но и в случаях например клиент <-> проприетарная библиотека.
Иногда, хэндл отличают от дескриптора по признаку: хэндл может быть передан на другой узел через IPC и останется после этого валидным, а дескриптор не может.