The system became in charge of more and more processing needed by different applications, and part of the system was copied into read-only memory. Different kinds of memory and storage of information appeared, each with a speciality. Then, programs became divided into procedures, thus allowing collective work on the same software. And later, programs could communicate with each other, adding another level of complexity. The operating systems became composed of many layers separated by specific interfaces.
Abstraction is useful tool to reduce complexity.
As software became more complex the ability to work with it using abstractions became more important. One such abstraction that became interesting and useful from research in the 70's is the Abstract Data Type. It is said to be encapsulated when its state is implied, meaning that it is only visible and accessible through the procedures. Languages that implemented ADT's were Modula2 and Ada. Today, ADT's utility has evolved into a collection of languages said to be object-oriented.