I'm surprised no-one has mentioned that UNIX from Bell Labs was first developed on a 16-bit system, the PDP-11. 1BSD and 2BSD were both consequently 16-bit, and it wouldn't be until a separate small team from Bell Labs ported it to the VAX in a release called "32V" that it became 32 bit at all.
(This release and increase in word size revealed a lot of bugs in the 16 bit only Unix and C compiler -- I recommend reading the porting paper if this sort of thing interests anyone)
To answer your question from the paper, it appears all the other data types were 2 bytes, except for char, which was one byte. And long/float, which were handled specially, I believe by the PDP-11's floating point co-processor "C code for the PDP-11 uses the FP-11 convention for storing long integers"
Sure, I linked it in. I posted the first response from my phone, took me a bit to find everything on my computer...
The PDP-11 has an MMU and supports what's essentially segmented memory (https://gunkies.org/wiki/PDP-11_Memory_Management), with different address spaces for a kernel and for a userspace. It also supports a 22-bit "real" address space, hence when 2BSD and other "older" PDP-11 unixes can use up to 4MB of real memory (and 2.10BSD's kernel actually used more memory than could fit in a 16 bit address space at once -- needing to be manually chunked and loaded in/out of memory. In the release notes (http://www.krsaborio.net/bsd/research/1987/0715.htm) the authors said "Yes, [this is the last release] at least by us; quite frankly, we'd rather sacrifice our chance at heaven than look at a 16-bit machine again.", so it's about as nightmarish as it sounds.
It doesn't support paging, though, so no real virtual memory. I'm not really sure how thorough the process isolation was -- I know in the early releases, there was basically none, and a bad user process would crash the whole machine. I believe by later models (the MMU did change over time) it was "good enough" to keep the userland from crashing the kernel, at least.
Wasn't until 3BSD from Berkeley that proper virtual memory was added -- hence why the kernel's name was changed from /unix to /vmunix. Which is where the "vm" in "vmlinux" comes from, in case anyone's curious.
> Wasn't until 3BSD from Berkeley that proper virtual memory was added -- hence why the kernel's name was changed from /unix to /vmunix. Which is where the "vm" in "vmlinux" comes from, in case anyone's curious.
(This release and increase in word size revealed a lot of bugs in the 16 bit only Unix and C compiler -- I recommend reading the porting paper if this sort of thing interests anyone)
Edit: Paper is here https://www.bell-labs.com/usr/dmr/www/otherports/32v.html
To answer your question from the paper, it appears all the other data types were 2 bytes, except for char, which was one byte. And long/float, which were handled specially, I believe by the PDP-11's floating point co-processor "C code for the PDP-11 uses the FP-11 convention for storing long integers"