На практике это не может быть сделано, потому что ОС придется выделять намного больше памяти для отслеживания того, какие дескрипторы используются различными процессами. В примере кода C, как показано ниже, я продемонстрирую простую структуру процесса ОС, хранящуюся в циклической очереди для примера ...
struct ProcessRecord{
int ProcessId;
CPURegs cpuRegs;
TaskPointer **children;
int *baseMemAddress;
int sizeOfStack;
int sizeOfHeap;
int *baseHeapAddress;
int granularity;
int time;
enum State{ Running, Runnable, Zombie ... };
/* ...few more fields here... */
long *fileHandles;
long fileHandlesCount;
}proc;
Представьте, что fileHandles - это указатель на массив целых чисел, каждое из которых содержит местоположение (возможно, в закодированном формате) для смещения в таблице ОС, где файлы хранятся на диске.
Теперь представьте, сколько памяти может поглотить и замедлить работу всего ядра, возможно, приведет к нестабильности, так как концепция многозадачности системы упадет из-за необходимости отслеживать, сколько файловых дескрипторов используются и предоставляют механизм для динамического увеличения / уменьшения указателя на целые числа, что может повлиять на замедление пользовательской программы, если ОС выдает файловые дескрипторы по требованию пользовательской программы.
Надеюсь, это поможет вам понять, почему оно не реализовано и не практично.
Надеюсь, это имеет смысл,
С наилучшими пожеланиями,
Том.