Before operating systems, assembly language was used to interact directly with hardware. Early computer systems in the 1940s were mainly used by researchers who were both programmers and end users. There are two types of multiprocessing: asymmetric, where each processor has a specific task and uses a master-slave relationship, and symmetric, where all processors are peers without a master-slave relationship. Operating systems operate in two modes - kernel mode and user mode, with a mode bit indicating the current mode.