Das ist lange her und war teilweise noch vor meiner Zeit: Auch wenn es schon seit den 1960er SMP-Maschinen gab, kamen SMP-Maschinen für die Masse erst in den 90er Jahren auf. Entsprechend konnte der Unix-Kernel - sofern man denn bei der Fragmentierung nach etwa 1980 von so etwas sprechen kann - kein SMP. In den SysV-Zweig wurden Anfang der 90er einige kommerzielle Derivate SMP-fähig, vor allem SunOS 5 aka Solaris. In der BSD-Welt stammen meines Wissens alle SMP-Kernel von FreeBSD ab. Dazu kommt, dass es lange Zeit keine standardisierte Thread-Bibliothek gab, pthreads setzten sich erst Anfang des Jahrtausends durch. Vorher nutzt man proprietäre Implementierungen, wie beispielsweise LinuxThreads oder unter FreeBSD libc_r.
FreeBSDs SMP-Kernel wurde ab Mitte der 90er in einem eigenen Branch entwickelt, der irgendwann in 3-CURRENT gemerged (Mergen war mit CVS ein Hampelkram zum Quadrat) und 1998 mit FreeBSD 3.0 veröffentlicht wurde. Es war eine aus heutiger Sicht recht primitive Implementierungen, mit einem globalen Kernellock (der berüchtigte GIANT) und an einigen ausgewählten Stellen wie der Prozessverwaltung ich meine 4 granularer Locks. Damit konnten Userland-Prozesse parallel laufen und Threads implementieren, der Kernel lief aber weiterhin singlethreaded. Das klingt schlimmer als es war, für die damaligen Maschinen war es ausreichend und konkurrenzfähig zu Linux. Daher kommt wahrscheinlich auch die Bitmaske, es war eine simple Lösung für das Problem.
Bald wurden Computer aber schneller, vor allem gab es mehr Sockel. Mit bis zu 8 CPUs im Massenmarkt mit der Pentium 3 Generation. Und pthreads setzten sich durch. Damit funktionierte dieser simple Ansatz nicht mehr. BSDi - vor allem durch BSD-Klage bekannt - nahm FreeBSDs SMP, mergte es in ihr eigenes 4.4BSD-Derivat BSD/OS und baute den Kernel teilweise auf Fine Grained Locking um. Nachdem BSDi pleite gegangen war, spendeten sie den Code und FreeBSD mergte ihn in das eigene System zurück. Das bildete die Grundlage für den radikalen Umbaue des Kernels im Rahmen von SMPng, was nach schmerzhaften Jahren als FreeBSD 5 veröffentlicht wurde. FreeBSD 6 stabilisierte es und mit FreeBSD 7 war es dann voll da. Das bedeutete aber auch, dass die BSD-Kernel stark voneinander zu divergieren begannen. Und FreeBSD 13 wird sich durch den Wechsel von Locks auf Epochs in den meisten bis allen performancekritischen Pfaden noch mal weiter von den anderen BSDs entfernen.
FreeBSD behielt die Bitmaske noch lange bei, ich meine mich zu erinnern, dass erst FreeBSD 8 sie durch die cpuset() API ersetzte. Wobei auch cpuset() unten drunter mit Bitmasken arbeitet, sie sind halt nur nicht statisch alokiert. NetBSD und OpenBSD veröffentlichten die ersten SMP-Kernel erst um und bei 2004, sie übernahmen die Implementierung im Großen und Ganzen aus FreeBSD (also vor SMPng), wodurch sie auch die Bitmaske erbten.