Concorrencia
Os sistemas operacionais podem ser vistos como um conjunto de rotinas que executam concorrentemente de forma ordenada. A possibilidade de o processador executar instruções em paralelo com operações de E/S permite que diversas tarefas sejam executadas concorrentemente. O conceito de concorrência é o princípio básico para o projeto dos sistemas multiprogramáveis. Os sistemas multiprogramáveis surgiram a partir de limitações existentes nos sistemas operacionais monoprogramáveis. Nestes sistemas, somente um programa pode estar em execução por vez, permanecendo o processador dedicado a uma tarefa. Nesse tipo de sistema ocorre um desperdício na utilização do processador, pois enquanto uma leitura em disco é realizada, o processador permanece ocioso. O tempo de espera é relativamente longo, já que as operações com dispositivos de entrada e saída são muito lentas se comparadas com a velocidade com que o processador executa instruções. Outro aspecto a ser considerado é a subutilização da memória principal. Um programa que não ocupe totalmente a memória ocasiona a existência de áreas livres sem utilização. Nos sistemas multiprogramáveis, vários programas podem estar residentes na memória, concorrendo pela utilização do processador. Neste caso, a CPU permanece menos tempo ociosa e a memória principal é utilizada de forma mais eficiente. A utilização concorrente da CPU deve ser implementada de maneira que,quando um programa perde o uso do processador e depois retorna para continuar sua execução, seu estado deve ser idêntico ao do momento em que foi interrompido. O programa deverá continuar sua execução exatamente na instrução em que havia parado, aparentando ao usuário que nada aconteceu. No caso de periféricos, é comum termos, em sistemas monoprogramáveis impressoras paradas por um grande período de tempo e discos com acesso restrito a um único usuário. Esses problemas são minimizados em sistemas multiprogramáveis, onde é possível compartilhar dispositivos de