The RSX-11 {D/M/M-PLUS/S} family of operating systems, running on PDP-11 minicomputers, divided real memory into partitions. Partitions were mostly set up at system generation time; you could define partitions in a running system, but that was less common.
The RSX-11 family were a reimplementation, on the 16-bit PDP-11, of RSX-15 on the 18-bit PDP-15, so many of the ideas were carried over from there. This includes partitioning of memory.
To quote from the RSX-15 exec manual,
Partitions and SYSTEM COMMON Blocks are fixed at system configuration
time and cannot be altered at run time. Tasks are built to execute in
specific partitions, and, any number of Tasks may be built to execute
in the same. partition.
This to me is the essential feature of partitioning - they are relatively static memory allocations, certainly not created 'on demand' as programs start executing.
I'm much more familiar with the PDP-11 systems, but the principle is the same. One important fact is that smaller 11's may not have memory management hardware (and thus had no more than 28K words memory).
This means that tasks (a term used for both the program-on-disk and program-in-executions) needed to be built for the address they'd be loaded at. That meant in turn that in practical terms you'd need to define a set of useful base addresses, which is to say, to partition memory. You'd create one partition for every task you wanted to be running and in memory simultaneously. You then had to decide at task-build time ("link time" in other operating systems) which partition a task would execute in, and the task builder would base the task for that address.
Example: you'd create partitions A, B, C, and D - this would allow 4 tasks to be in memory at the same time; the exact mix that was possible depended on which tasks were built for each partition: A, B, C or D.
The system could checkpoint (swap out) a task to permit a higher-priority task to be loaded into a particular partition. However, one task at most was 'in' a partition at any point in time. (And the partition still existed when no tasks were in it).
Mapped RSX-11M (i.e., running on a PDP-11 with memory management hardware and thus capable of having more memory) also allowed fixed memory partitioning, and required it to some degree, though since tasks started at virtual 0, there was no need to build a task for a particular partition.
But it was still good practice to dedicate partitions for certain uses, as (for example) you could avoid the memory fragmentation that would result if you loaded device drivers into the same partition used for user tasks -- the driver would be immovable once loaded.
It was also somewhat common to dedicate partitions for high-priority tasks, for example the file system ACP (handled file actions except for the actual read-write calls) might get its own partition to avoid fighting for memory with user tasks.
It was however not a necessity to partition memory in a fine-grained manner in such a system. Typically, "most" of memory was allocated to a general partition, which could, as a partition-definition option, be dynamically sliced up into subpartitions (one per task) to meet the need for whatever was currently executing -- i.e., it worked like you expect non-paged systems to work, each task got a contiguous piece of memory that matched its size requirements.
So: partitions had a fixed size, but partitions could optionally be allowed to be split into dynamically-allocated subpartitions.
Here's part of the partition layout from a running RSX-11M-Plus system (a large-PDP-11 system, but it's all I have handy). Partitions and subpartitions appear in real-memory order.
>PAR
SECPOL 117734 00200400 00200000 SEC POOL
SYSPAR 117670 00400400 00205400 MAIN
117624 00400400 00115300 RO COM !DIR11M!
117434 00515700 00005200 TASK <...LDR>
117230 00523100 00033300 TASK <MCR...>
117024 00556400 00010500 TASK [TKTN ]
116620 00567100 00003200 TASK [SHF...]
116414 00572300 00013500 TASK [RCT...]
DRVPAR 116334 00606000 00173000 MAIN
116270 00606000 00006600 RO COM !TTEXT !
116204 00614600 00020600 RO COM !TTCOM !
116120 00635400 00034200 DRIVER (TT:)
115450 00671600 00001300 DRIVER (DK:)
...
110560 00777300 00001500 DRIVER (RD:)
GEN 110514 01001000 15777000 MAIN
110450 01001000 00002000 RO COM !DYCOM !
025544 01003000 00007500 TASK <PMT...>
...
All of the partitions (SECPOL, SYSPAR, DRVPAR, GEN) are fixed-size paritions. SECPOL is a memory pool for the OS; SYSPAR is for system-critical tasks and the directives (syscalls); DRVPAR is for drivers; and GEN is for everything else. The partition sizes are determined - with user input - at system generation time.
The numerical columns are (as far as I recall) address of the partition control block, base of partition, length of partition. All in octal, since we only have 8 fingers.
Each of those partitions is dynamically divided into subpartitions by the OS as objects (drivers, tasks, etc.) are loaded into the partitions.