Antes dos sistemas operacionais, que conceito era usado para fazê-los funcionar? [fechadas]

50

Os sistemas operacionais estão intimamente relacionados à arquitetura do computador. Um sistema operacional cuida de todas as entradas e saídas de um sistema de computador. Ele gerencia usuários, processos, gerenciamento de memória, impressão, telecomunicações, rede etc. Envia dados para um disco, impressora, tela e outros periféricos conectados ao computador.

Antes da introdução do sistema operacional,

O que foi usado nos sistemas de computador para fazê-los funcionar?

Qual conceito foi usado para o sistema operacional em nossa evolução do computador?

Itachi Uchiha
fonte
5
"Antes disso, o que era usado em sistemas de computadores ..." - Era o mesmo que se você não executasse um sistema operacional hoje. Você executa tarefas em lote entregando todo o sistema do computador a um único usuário, um de cada vez.
sawdust
4
Pense no código executado em um microcontrolador. Ele não roda em um sistema operacional, mas é o código C que se compara ao código da máquina e é executado em um dispositivo físico real (depois que esse código da máquina é "piscado" para o firmware). Os sistemas operacionais apenas facilitam a interação de vários programas ao mesmo tempo com todas as partes do computador, usando os conceitos de compartilhamento de recursos e agendamento de processos . Da mesma forma, você também pode usar um sistema operacional nesse pequeno microcontrolador - se necessário.
Revelação
Muitas das respostas estão focadas em E / S, como os programas são carregados e dispositivos periféricos. Mas isso apenas obscurece o objetivo do sistema operacional: gerenciamento e compartilhamento de recursos e, possivelmente, capacidade para vários usuários. O objetivo do sistema operacional não muda se você carregar o código da placa de arame ou fita ou tambor perfurado ou usar um cartão SD moderno.
sawdust
Baralho de cartas. Fita de papel perfurada. Operador para alimentar o mesmo através do computador.
Daniel R Hicks

Respostas:

42

Os computadores antigos executavam um programa por vez.

Os programas foram carregados diretamente (por exemplo) de fita de papel com furos.

Você programava os computadores mais antigos configurando um grande conjunto de interruptores liga / desliga.

Colosso:

Atlas:

Manchester:


Estou usando a palavra "Computador" para significar o tipo de dispositivo que existe hoje em bilhões. Desse vasto número de computadores, quase um número insignificantemente pequeno são computadores programáveis ​​eletrônicos digitais com programas armazenados. Tenho certeza de que a pergunta original não é sobre como as pessoas com o cargo "Computador" passaram o dia útil. Entre esses dois tipos de computador, há uma progressão de dispositivos interessantes não abordados nesta resposta.

RedGrittyBrick
fonte
11
Tenho um hardware com o qual trabalho que usa esses comutadores na segunda imagem. Também executa programas exatamente da mesma maneira. Upvote para usar uma imagem tão grande
Ramhound
os primeiros, por exemplo, ENIAC, não seriam conectados? Não mudou nem possui programas armazenados? Ou isso é não um computador por causa disso ... curioso
rico Homolka
11
@RichHomolka: Como você sugere, isso realmente depende do que você considera um computador. Hoje em dia, a maioria das pessoas provavelmente significa um computador programável eletrônico digital. É claro que havia, por exemplo, computadores analógicos mecânicos e os computadores mais antigos eram pessoas (era um cargo). Se eu tiver tempo, posso expandir a resposta para resolver isso. Acredito que o ENIAC foi programado manipulando interruptores e cabos.
RedGrittyBrick 10/09
Os sistemas operacionais chegaram bastante cedo (1956 - veja en.wikipedia.org/wiki/GM-NAA_I/O ). O primeiro computador produzido em massa foi de cerca de 1954
Bruce Martin
“Tenho certeza de que a pergunta original não é sobre como as pessoas com o cargo" Computador "passaram o dia de trabalho" - minha avó era um computador.
Paul D. Waite
13

Fonte: História dos Sistemas Operacionais

Os sistemas operacionais evoluíram através de várias fases ou gerações distintas, que correspondem aproximadamente às décadas.

Os anos 40 - Primeiras gerações

Os primeiros computadores digitais eletrônicos não tinham sistema operacional. As máquinas da época eram tão primitivas que os programas eram frequentemente inseridos um pouco de cada vez em fileiras de interruptores mecânicos (plugues) . As linguagens de programação eram desconhecidas (nem mesmo as linguagens de montagem). Os sistemas operacionais eram inéditos.

Os anos 50 - Segunda Geração

No início dos anos 50, a rotina havia melhorado um pouco com a introdução de cartões perfurados. Os Laboratórios de Pesquisa General Motors implementaram os primeiros sistemas operacionais no início dos anos 50 para o IBM 701 . O sistema dos anos 50 geralmente executava um trabalho por vez. Esses foram chamados de sistemas de processamento em lote de fluxo único porque os programas e os dados foram enviados em grupos ou lotes.

Fonte: http://en.wikipedia.org/wiki/History_of_operating_systems

Os computadores mais antigos eram mainframes que não possuíam nenhuma forma de sistema operacional.

Cada usuário fazia uso exclusivo da máquina por um período agendado e chegava ao computador com programa e dados, geralmente em cartões de papel perfurados e fita magnética ou de papel. O programa seria carregado na máquina e a máquina seria configurada para funcionar até que o programa fosse concluído ou travasse.

Os programas geralmente podem ser depurados por meio de um painel de controle usando interruptores e luzes do painel. Dizem que Alan Turing era um mestre nisso na máquina Manchester Mark 1, e ele já estava derivando a concepção primitiva de um sistema operacional dos princípios da máquina Universal Turing.

DavidPostill
fonte
10

Voltando ao início dos sistemas de computador, você não tinha sistemas de computador único; em vez disso, você tinha mainframes.

insira a descrição da imagem aqui

Esses mainframes seriam executados em cartões perfurados que conteriam seu programa (e freqüentemente seus dados). As pessoas recebiam tempo alocado nesses sistemas, traziam seus cartões e os conectavam nas máquinas para processamento. A máquina executaria o programa até terminar, e o próximo usuário acompanharia a fita e os cartões.

Basicamente, foi assim que funcionou.

Matthew Williams
fonte
4
Então o "sistema operacional" aqui é ... quem está fazendo o agendamento para os usuários?
Kyle Strand
2
O que quero dizer é que sua resposta não explica realmente o que você quer dizer com "Estritamente falando, os sistemas operacionais existem há muito tempo, de uma forma ou de outra". Você fornece uma descrição básica dos mainframes, mas não está claro que esses mainframes tenham algo remotamente semelhante ao que chamamos de "sistemas operacionais".
Kyle Strand
3
Sei o que você está tentando dizer, mas não me sinto muito à vontade com essa descrição, tendo idade suficiente para trabalhar em mainframes que atendam à sua descrição precisa de um mainframe acima, mas que realmente continha um sistema operacional. O mainframe em sua imagem provavelmente seria um mainframe IBM da década de 1970 (como / 360 ou s / 370?) Executando o OS / 360 ou uma versão anterior do MVS.
precisa saber é o seguinte
2
Não existem cartões magnéticos perfurados . Sua foto de um "mainframe" está de acordo com a visão de Hollywood e dos leigos de um computador: linhas de transporte de fita magnética.
sawdust
11
Aqui estão algumas declarações errôneas. Como o @sawdust disse, os cartões perfurados não eram magnéticos. Além disso, cartões perfurados geralmente continham seu programa e seus dados; ou seu programa pode estar em fita (perfurada) de papel. Carretéis de fita magnética foram muito mais tarde. Antes disso, os programas eram carregados por meio de comutadores de painel, conforme mostrado na resposta da RedGrittyBrick, ou religando o computador por meio de um painel de controle. Encontrei Father, Son & Co. história interessante e informativa.
Stephen P
6

1890-1950 - Operação inerente ao sistema Os computadores mais antigos tinham o equivalente ao que um sistema operacional faz agora. Você (o operador) também fazia parte do sistema operacional. Você ligou os interruptores de registro (ou usou um cartão perfurado) e os fios de barramento fisicamente trocados (pense na antiga estação telefônica) e a memória foi conectada (através dos fios físicos) diretamente à lâmpada (o monitor do dia) e às impressoras ( armazenamento de longo prazo) de forma que a saída do programa acenda e imprima diretamente no dispositivo, à medida que ele é colocado no buffer de memória de saída. Não era necessário um driver para essas coisas porque (devido à maneira como esses fios físicos eram executados) "apenas funcionavam" (também não havia monitor nos dias de hoje). De fato, ainda demorariam algumas décadas até que um display numérico digital fosse inventado, para que você pudesse realmente ver os números que já havia inserido no registro e a saída como números decimais; as impressoras governaram toda essa época até os monitores. Eles foram conectados exatamente como precisavam para funcionar corretamente. Nada dessa parte realmente mudou muito com a mudança do mecânico (1890) para o analógico elétrico (1910) para o digital (1930). Essa arquitetura 'Plug N play' foi substituída pelo sistema de interrupção durante esse período e não voltaria à tona novamente até o final dos anos 90; é claro que até lá haveria muito menos entupimento. Com interrupções, os dispositivos podiam levar tempo de CPU, o que permitia arquiteturas que não eram ' t diretamente ligado ao hardware, mas levou várias gerações para que esse fosse realmente o processo simplificado que vemos no x86 arch (e mais recente); os primeiros sistemas frequentemente enfrentavam condições horríveis de corrida, problemas de compatibilidade / atraso de hardware e outros comportamentos estranhos no que diz respeito a interrupções. Porque cada máquina usou arquiteturas radicalmente diferentes (experimentais) nesse período; quase todos os dispositivos foram feitos sob medida para a máquina em que trabalhavam.

1950-1973 - Operação dentro de um sistema Esta era viu o advento da maioria dos recursos que pensamos quando falamos sobre um verdadeiro sistema operacional. Depuração, linguagens de programação, multiusuários, multitarefas, terminais, unidades de disco, rede, padronização de componentes etc. foram todos introduzidos nesta era. Desta vez, houve um grande salto em direção à padronização de grande parte disso, o que significava que tínhamos dispositivos mais padronizados, mas ainda cada SO era criado manualmente para cada máquina, o que significava que a funcionalidade do SO era severamente limitada pelo que os engenheiros que projetaram esse sistema específico decidiram que precisavam. . Durante esse período, houve uma área cinzenta substancial no que era um sistema operacional, porque as diferentes arquiteturas lidam com as coisas de maneira muito diferente e uma máquina de uso geral precisará de muito mais SO do que uma máquina que inclui hardware para lidar com os mesmos trabalhos. O fato é que o hardware sempre será mais rápido que o software e praticamente tudo o que é feito em software pode ser teoricamente feito em hardware (é custo \ flexibilidade \ tamanho \ tempo \ etc, o que nos limita a criar versões quase puras de tudo. dia). Um sistema operacional foi criado para um computador ou tipo de computador específico; não funcionaria em outro lugar. Cada novo design de computador precisava que todos os softwares de baixo nível do SO fossem reescritos do zero para funcionar com um modelo de máquina específico. Perto do final desse período, surgiu um novo sistema operacional que em breve mudaria esse paradigma, o UNIX, escrito no Bell Labs por Ken Thompson e Dennis Ritchie.

1973 - Operação entre sistemas Um único programa mudou tudo isso, mas não era o UNIX. Era o compilador C (que foi famoso em uma garagem por Ken Thompson e Dennis Ritchie depois que o Bell Labs o cortou). Até esse momento, sempre que você escrevia um código, ele era um código de máquina (código que a máquina entende diretamente, mas não é portátil) ou foi escrito em uma linguagem que compilava seu código em código de bytes (código que é interpretado por outro programa como corre). A enorme diferença para os sistemas operacionais que C trouxe com ele foi a capacidade de fazer o que é conhecido como compilação cruzada no código da máquina. Isso significava que o código poderia ser escrito uma vez e compilado para rodar em muitos tipos diferentes de máquinas nativamente, desde que um compilador tivesse sido escrito para essa máquina. Os sistemas operacionais devem ser escritos em código de máquina, porque o código de máquina é literalmente o único código que a máquina conhece.

Eu diria que não foi até Ken e Dennis compilarem o kernel UNIX pela primeira vez usando um compilador C que nasceu um verdadeiro sistema operacional no sentido moderno. Antes disso, um sistema operacional era um objeto físico ou simplesmente um pedaço de espaço de memória pré-inicializado, projetado especificamente para uma máquina específica. Adicionar novos dispositivos ao sistema literalmente exigia que o código do 'kernel' fosse reescrito. Agora, o sistema operacional UNIX que eles haviam projetado para uma máquina específica poderia ser recompilado e executado em outras máquinas sem reescrever TUDO (desde que essa máquina fosse capaz de compilar um compilador C a partir de um ambiente de inicialização, o restante do sistema operacional poderia ser escrito em o código C de nível relativamente alto).

krowe
fonte
11
Alguém mencionou que o OS \ 360 veio antes do UNIX. Isso também é verdade, mas, como todos os outros sistemas operacionais daquele dia, foi codificado manualmente para cada modelo de máquina individual em que era executado.
krowe
11
Alguém mencionou que o FORTRAN também pode cruzar a compilação. o que é verdade, o mesmo aconteceu com o ALGOL (o antecessor de C), mas C foi o primeiro a ser inicializado para criar um sistema operacional independente da máquina.
krowe
11
" até Ken e Dennis compilarem o kernel UNIX pela primeira vez ... que um verdadeiro sistema operacional no sentido moderno nasceu .." OMG. Palavras menos verdadeiras raramente foram escritas neste site. Não há sentido em que esta declaração seja remotamente precisa.
precisa saber é o seguinte
11
também ignora MULTICS (e BCPL)
Francis Davey
A maioria das coisas listadas acima sobre a precedência do UNIX e C está incorreta, principalmente porque o UNIX e o C eram tão importantes na história dos sistemas operacionais. Isso se deve, quase totalmente, ao Decreto de Consentimento de 1974 contra a AT&T, o que significava que ele (e muitas outras tecnologias da AT&T) era gratuito , incluindo o código-fonte . Por causa disso, é verdade que os primeiros foram os primeiros sistemas operacionais modernos gratuitos e compiladores de baixo nível, incluindo todo o código-fonte. Uma posição solitária que ocuparia por 10 a 20 anos antes que seus concorrentes admitissem honestamente a vantagem que isso lhe proporcionava.
precisa saber é o seguinte
3

No começo, os programas eram conectados ao computador, o que começaria a executar o programa imediatamente a partir de um local específico na inicialização.

Em seguida, várias formas de armazenamento offline foram inventadas: cartões perfurados, fita adesiva, bateria e até discos. Muito mais flexível. Mas não diretamente acessível a partir da CPU. O programa precisa ser carregado na memória antes de poder ser executado. Então você escreve um programa para carregar seu programa. Isso é conhecido como carregador ou bootstrap (da expressão "para se destacar pelas tiras de inicialização").

À medida que o sistema fica mais complicado, você pode ter um carregador simples carregando um carregador mais complexo. Isso começou com os microcomputadores: o carregador de fita normal era lento; portanto, carregue um descompressor e carregue rapidamente o restante da fita. Ou carregadores de velocidade de disco que funcionavam como sistemas de proteção contra cópia, fazendo coisas fora do padrão com o disco.

Ou o processo de inicialização do PC pré-UEFI: o processador começa a executar no BIOS. Isso carrega o primeiro setor do disco e salta para ele. Isso procura por uma partição ativa e carrega um gerenciador de inicialização a partir daí, que carrega o sistema operacional. Originalmente, isso teria sido o COMMAND.COM para MSDOS; agora é geralmente NTLDR.EXE para Windows.

pjc50
fonte
3

Deve-se notar que no hardware inicial (antes de 1960), a E / S era muito mais simples. Você pode ler um cartão, perfurar um cartão ou imprimir uma linha na impressora, cada uma com uma única instrução: o tamanho do buffer foi corrigido e, freqüentemente, o endereço do buffer também foi corrigido.

Mesmo no início dos anos 60, com processadores mais sofisticados (por exemplo, o 7090), você ainda podia ler ou perfurar cartões com uma rotina pequena (cerca de 20 instruções), que era facilmente copiada em cada programa.

Como o computador foi totalmente dedicado a um único trabalho, não importava se o processador estava ocioso enquanto esperava o leitor de cartões estar pronto para ler o próximo cartão ou se a impressora de linha alimentava a próxima linha.

Bem, importava, porque o tempo de computação era realmente caro. É por isso que as pessoas inventaram o multiprocessamento, o compartilhamento de tempo, adicionaram E / S assíncrona e interrompem e controlam dispositivos e sistemas operacionais. As interfaces de dispositivo de hardware tornaram-se mais complexas, para o programador, fornecendo acesso a registros de E / S de nível inferior, o que exigia mais complexidade dos drivers de dispositivo. Esse custo de complexidade (memória, tempo de programação) foi amortizado nos vários programas usando os dispositivos "simultaneamente", multiplexados pelo sistema operacional.

Ainda nos anos 80, eu estava usando um computador com microprocessador, emulando um desses sistemas mais antigos. As instruções da máquina tinham um formato uniforme acima de 80 bits (10 octetos), e a instrução para ler o primeiro setor do primeiro disco rígido e armazená-lo na memória no endereço 0 era muito conveniente: 0000000000. Portanto, o procedimento de inicialização consistia todas as manhãs para digitar esta instrução no terminal, que a armazenou no endereço 0 e a executou, que carregou o setor de inicialização e continuou a execução na próxima instrução (no endereço 10). O sistema de arquivos consistia em um arquivo estático de mapeamento de tabela "nomes" para intervalos de setores, que foram alocados manualmente! A E / S foi feita no assembler para esses arquivos, lendo ou gravando diretamente os setores, compensada pela posição do arquivo no disco rígido que foi recuperado pelo "

Pascal Bourguignon
fonte
2

A primeira geração de computadores projetados para uso pessoal mais amplo havia chamado "Monitor" na ROM (memória somente leitura).

Imediatamente após a inicialização, o monitor forneceu uma interface de linha de comando muito limitada, principalmente para carregar o programa do armazenamento de dados como um gravador e iniciar a execução (alguns outros comandos estavam disponíveis para a entrada manual de código, embora raramente necessários). Somente um programa pode ser executado por vez.

Diferentemente do sistema operacional, o Monitor não tinha suporte para nenhum sistema de arquivos. O operador humano foi responsável por encontrar a fita certa, colocá-la no gravador e posicionar no início do programa necessário para carregar.

Monitore as funções combinadas do BIOS e do sistema operacional e já era claramente um software.

Depois de ligar, o sinal curto de "reset" estava zerando o contador de programa da mesma forma que qualquer outro contador, ao mesmo tempo em que trocava o mapeador de memória (se houver algum) para mapear o endereço 0000 para a ROM do Monitor. Era comum haver algum circuito de hardware para remapear o Monitor no espaço de endereço alto posteriormente. Além da inicialização do código, o botão "Redefinir" também foi usado para finalizar o programa em execução, para que outro pudesse ser carregado.

O rudimentar botão "redefinir" pode ser encontrado em alguns PCs de mesa mesmo hoje em dia.

h22
fonte
Isso vale para a primeira (ou segunda) geração de "computadores pessoais" para uso doméstico. Antes de existirem, os alunos das escolas secundárias tinham acesso remoto a computadores de tempo compartilhado, que funcionavam de maneira diferente, mas ainda teriam sido "projetados para uso mais amplo". Não sei se a primeira geração de computadores domésticos, os Altairs e os Heathkits, todos tinham monitores de linha de comando.
RedGrittyBrick
0

O antecessor mais direto do sistema operacional seria uma combinação de bibliotecas padrão para interface com dispositivos e o sistema do carregador de inicialização para colocar um programa na memória e começar a executar.

keshlam
fonte