О разработке и реализации операционных систем Tanenbaum, стр.154 говорит, что битмап имеет бит для каждого из NR_SYS_PROCS (32).Уточнение пояснения и исходного кода книги: #define BITCHUNK_BITS (sizeof (bitchunk_t) * CHAR_BIT)
И в конце Minix/ядра/table.c, есть проверка, чтобы убедиться, что количество процессов в загрузочном образе не больше КУМИ маски:
/* проверить, что первый кусок маски ipc имеет достаточно бит для размещения процессов
* на картинке. */
extern int dummy[(BITCHUNK_BITS > NR_BOOT_PROCS - 1) ? 1 : -1];
Я смотрел в размер BITCHUNK_BITS, думая, что это был бы равен 32, но он равен 16, как определено в /minix/kernal/const.h
#define BITCHUNK_BITS (sizeof(bitchunk_t) * CHAR_BIT)
где bitchunk_t не имеет знака short и CHART_BIT - 8.
Почему необходимо удостовериться, что количество процессов в загрузочных образах меньше 16, а не 32, когда можно добавить больше пользователей pro загружается ли загрузочный образ?
Хм, а массив 0-запись также является незаконным, я задаюсь вопросом, почему они не просто использовать 'фиктивный [BITCHUNK_BITS> NR_BOOT_PROCS - 1] '. – Olaf
@Olaf Вероятно, потому что у некоторых компиляторов есть злые нестандартные настройки, например, например, 'gcc -std = gnu90', который позволяет массивы нулевого размера. (Он делает это, чтобы включить старый трюк «struct hack». GNU придумал это в 90-х годах в качестве рабочего процесса, чтобы сделать «хакерство» безопасным, до того, как на C99 были введены гибкие элементы массива). – Lundin
Хм, я думал, что это было справедливо для массивов в 'struct' (чтобы обеспечить член гибкого массива). Может быть, я проверю, верно ли это для глобальных массивов (где нет смысла, так как такой массив не может быть расширен во время выполнения). Хорошо, я проверил. Это действительно вязаная вещь, которая также допускает определенные пользователем массивы. – Olaf