SII писал(а):
Чтобы использовать глобальный объект, задача его должна сначала открыть, а открываются они по именам (прям как в Винде). Если ж объект не должен быть глобальным, то при его создании имя просто остаётся пустым. В результате успешного открытия (или создания) задача получает 16-разрядный ссылочный номер, с которым потом работает дальше.
В винде чтобы открыть процесс нужен идентификатор, который может быть получен не только по имени процесса. В никсах вообще не используются (локальные) описатели процессов, только (глобальные) идентификаторы. Локальные описатели могут стать причиной неоправданной заморозки "глобальных входов". Естественно, если "глобальный вход" заморожен, не может быть никакой речи о его повторном использовании. Короче я против того, чтобы абсолютно все объекты открывать через локальные таблицы, как ты, видимо, и делаешь.
418ImATeapot писал(а):
Имеется таблица потоков и таблица процессов (максиум, на 2048 записей). Требуется привязать потоки к процессам. Можно, конечно, индефицировать по LDT, но как-то это по ламерский. Могут быть разные нюансы.
Имеет ли смысл брать 4 байта (исключительно из соображения быстродействия)?
Ты реально не умеешь задавать вопросы. Естественно внутренние описатели объектов, используемые ядром, могут иметь сокращенную размерность. Точнее если они являются индексами или адресами в таблицах, то могут, а если полными адресами, то нет. У меня поля T(hread)S(tructure).proc, TS.pred, TS.next являются полными адресами структур процесса и потоков соответственно, т.е. 32-битными ("исключительно из соображения быстродействия"). Однако в тоже самое время к примеру поле D(evice)S(tructure).master, содержащее ссылку на поток, захвативший устройство, является индексом, т.е. 16-разрядным (исключительно ради уплотнения структуры устройства). Способ представления внутренних описателей, используемых в ядре, может меняться от версии к версии, если ты конечно не задекларировал неизменность такого представления для системных разработчиков и всяких там исследователей ядра (т.е. не сделал глупости). Не вижу никакого ламерства и в использовании селекторов или индексов в процессорных таблицах в качестве внутренних описателей, если это целесообразно. Например, до того, как я перешел на чистое flat-ядро, у меня каждый модуль ядра идентифицировался селектором первого из пары смежных дескрипторов (code & data) в GDT, описывающих адресное пространство модуля.