Como é um sistema operacional antes de um shell ser executado?
Depende do sistema operacional e de como você o configura. O Linux pode ser configurado para gravar o texto de inicialização em um dispositivo do console, seja um console de modo de texto, um console de buffer de quadros ou uma porta serial. Também pode ser configurado para ficar perfeitamente silencioso. Alguns SOs / sistemas podem gravar informações de diagnóstico em uma memória não volátil que pode ser acessada colocando o sistema no modo de desenvolvedor, depuração ou diagnóstico. Muitos sistemas operacionais suportam a saída de informações de inicialização e diagnóstico para alguma forma de UART, que pode estar disponível de alguma forma na unidade, mesmo que oculta ao usuário (google "Adicionar porta serial ao DD-WRT") para exemplos de onde os fabricantes ocultam portas seriais e como você pode chegar até eles).
Um sistema operacional não precisa ter um monitor externo - é apenas outro dispositivo para o sistema operacional.
Como os sistemas foram usados antes do primeiro shell ser desenvolvido (por exemplo, UNIX no início dos anos 70)?
Essencialmente (e deixando de fora muita coisa, mas isso deve lhe dar a idéia) - Você carregou o programa, alternando interruptores em um painel ou usando um leitor de fita de papel (esses dispositivos gravariam na memória diretamente sem a intervenção da CPU) e, em seguida, iniciavam a CPU com outro switch. A CPU executaria esse programa, geraria sua saída e pararia. Este é o processamento em lote, em oposição ao processamento interativo. Se você queria executar um programa diferente, precisava fazer isso novamente.
Se um computador não pode sequer aceitar comandos (não há linha de comando), como um usuário pode interagir com ele?
Não sou especialista nesta área, mas computadores antigos e antigos, como o Altair, IMSAI e PDP-8, tinham interruptores no painel frontal que controlavam diretamente a CPU e podiam ler e gravar memória diretamente sem intervenção da CPU.
Qual é a interface mais básica?
Acredito que a maioria, senão todas as CPUs modernas, têm uma "porta JTAG" que permite o mesmo tipo de operações diretas. Lembre-se de que, durante muito tempo, espera-se que a maioria dos computadores possua ROM ou firmware que controle o sistema quando ele é ligado antes de ser entregue a um sistema operacional. Aqui, os utilitários de pré-inicialização podem existir ou existe um mecanismo mínimo para carregar esses utilitários. Alguns gerenciadores de inicialização, como o U-Boot, podem ser acessados via porta serial. Os gerenciadores de inicialização não correm "atrás" do sistema operacional, eles carregam o sistema operacional, controlam o controle manualmente e não estão mais em execução.
Posso executar essa interface em um emulador de terminal ou não há como ficar atrás de um shell?
Não, você precisa de uma interface JTAG. Isso está mergulhando no mundo da eletrônica e admito que não sei muito sobre isso, exceto que o meu GuruPlug vem com um e eu posso programar diretamente o chip flash na placa do GuruPlug com ele - ou seja, se algo matar o gerenciador de inicialização no GuruPlug, eu tenho uma maneira "independente da CPU" de voltar a piscar.