在Tanenbaum的操作系統設計和實現上,第154頁說,位圖對每個NR_SYS_PROCS(32)都有一個位。澄清本書的解釋和源代碼:#define BITCHUNK_BITS(sizeof(bitchunk_t)* CHAR_BIT)
而在MINIX /內核/ table.c年底,有檢查,以確保的啓動映像中的進程數不超過IPC面具更大:
/*驗證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爲無符號短符號且CHART_BIT爲8.
爲什麼要確保引導映像中的進程數小於16而不是32,以便可以添加更多用戶專業版cesses到啓動圖像?
嗯,作爲一個0進入陣列也是非法的,我不知道他們爲什麼不直接使用'僞[BITCHUNK_BITS> NR_BOOT_PROCS - 1]'。 – Olaf
@Olaf可能是因爲一些編譯器有非法的非標準設置,例如'gcc -std = gnu90',它允許零大小的數組。 (這是爲了啓用舊的「結構黑客」技巧,GNU在90年代發明了這個技術,作爲一個解決方案,以便在C99中引入靈活的陣列成員之前使「struct hack」安全) – Lundin
嗯,我以爲是隻適用於'struct'中的數組(完全是爲了提供一個flex數組成員)。也許我會檢查它是否也適用於全局數組(在沒有意義的情況下,這樣的數組無法在運行時擴展)。好的,我查了一下。這實際上是一個允許初始化者定義的數組的允許的事情。 – Olaf