third generation computersemiconductor memories in addition to, and later instead of, ferrite core memory. The two main types of semiconductor memory are Read-Only Memory (ROM) and read-and-write memories called random-access memory (RAM). A technique called microprogramming became widespread and simplified the design of the CPUs and increased their flexibility. This also made possible the development of operating systems as software rather than as hard-wiring. A variety of techniques for improving processing efficiency were invented, such as pipelining, (parallel operation of functional units processing a single instruction), and multiprocessing (concurrent execution of multiple programs). As the execution of a program requires that program to be in memory, the concurrent running of several programs requires that all programs be in memory simultaneously. Thus the development of techniques for concurrent processing was matched by the development of memory management techniques such as dynamic memory allocation, virtual memory, and paging, as well as compilers producing relocatable code. The LILLIAC IV is an example of a third generation computer. The CTSS (Compatible Time-Sharing System) was developed at MIT in the early 1960s and had a considerable influence on the design of subsequent timesharing operating systems. An interesting contrasting development in this generation was the start of mass production of small low-cost "minicomputers".