As a software engineer at Pyramid Technology, Symmetric Multi-Processors (SMPs) served as a technology backbone. An SMP system essentually consists of multiple cpus that all use the same physical memory.
Each cpu ran some flavor of the Unix operating system. In Unix, user spaces processes have seperate physical address spaces, so user processes are not a problem in SMP. But the kernel maps to hard-wired physical addresses; thus multiple cpus, running the same kernel in SMP, is a problem.
SMP Locks to Avoid Corruption
A problem occurs when data structures are manipulated or changed. If the same code or related code (on different cpus) is changing the same data structure, at the same time, then data corruption can occur. To prevent this data corruption, we protect the data structures with locks. That is, a process must obtain a read or write lock before accessing a data structure. Such operations thus synchronize data access.
So how many locks do we add?
AT&T was one of the first companies to create an SMP system: the 3B5000. This system consisted of multiple cpus running Unix (AT&T invented Unix) and a single kernel lock. This single lock was used to make sure that one and only one process was in the kernel at the same time.
If a process was in user mode, then performance was wonderful. On the other hand, if a process needed to be in kernel mode, then performance could be terrible. Adding additional cpus did not improve the problem since only a single process could be in the kernel. Thus this lock did not scale. That is, adding X number of cpus did not result in a linear increase in system performance, since all processes need the kernel at some point.
In this blog entry, I have described the SMP problem. My next blog post will describe the solution.