2 pontos por GN⁺ 2023-11-06 | 1 comentários | Compartilhar no WhatsApp
  • Intel 80386 foi a primeira CPU x86 de 32 bits e, além disso, ofereceu memória plana de 4 GiB junto com compatibilidade com o x86 existente, tornando-se a base dos sistemas operacionais modernos para PCs
  • No começo, a Intel dava mais peso a outras arquiteturas, como o iAPX 432 e o P7, mas o crescimento do mercado de PCs e a compatibilidade de software x86 fizeram da conclusão do 386 a prioridade máxima
  • Com o 386, a Intel não permitiu produção em second source por IBM e AMD e se tornou a fornecedora única; o Compaq Deskpro 386 abalou o fluxo de padronização de PCs centrado na IBM
  • O desempenho não era esmagadoramente superior ao dos chips RISC da época, mas a MMU presente em todos os modelos 386 e o modo Virtual 8086 se tornaram centrais na transição para UNIX, OS/2, Windows, NT e Linux
  • Com a produção em massa de PCs baseados no 386, a MMU se espalhou até os PCs de usuários comuns, e a popularização do Windows e o surgimento do Linux também ficaram fortemente ligados à adoção do 386

O x86 de 32 bits que a Intel não queria

  • O Intel 80386 foi a primeira CPU de 32 bits da família x86, mas não fazia parte do plano central inicial da Intel
  • No fim dos anos 1970, o projeto mais importante da Intel era o iAPX 432, pensado para ser o design principal da década de 1980
    • O iAPX 432 era uma CPU ambiciosa que buscava oferecer em hardware programação orientada a objetos e alocação de armazenamento, adaptada a linguagens de alto nível como ADA
    • Como parecia que o design levaria muito tempo para amadurecer, a Intel iniciou o 8086 em 1976 como um projeto temporário
  • A família 8086 conseguiu o contrato do IBM PC, e o iAPX 432 apareceu tardiamente em 1981, mas com desempenho decepcionante
    • Em benchmarks, alcançava cerca de 1/4 da velocidade de um 80286 muito mais barato na mesma frequência
  • Mesmo em 1982, a Intel ainda não reconhecia plenamente a importância da plataforma PC e da compatibilidade binária de software, e o 80286 também era próximo de outra CPU temporária
  • Depois de reconhecerem o fracasso da família 432, os engenheiros da Intel começaram a preparar uma nova arquitetura RISC de 32 bits chamada P7

Definição da direção do projeto 80386

  • Bob Childs, um dos projetistas do 286, organizou informalmente ideias para uma extensão de 32 bits do 286
  • Cerca de seis meses depois, a Intel concluiu que precisaria de mais uma iteração da família x86 antes que o P7 estivesse pronto e aprovou o desenvolvimento do 386
    • A equipe inicial era pequena e o orçamento também era limitado
    • Ao investigar as demandas dos clientes de x86, ficou claro que o modelo de memória segmentada do 8086 era amplamente criticado, e havia frustração por o 80286 não ter eliminado isso
  • Com o UNIX ganhando importância em workstations mais baratas, a equipe do 386 passou a mirar uma CPU adequada para UNIX
  • A exigência mais importante era o endereçamento de memória plana
    • Para manter compatibilidade com o x86 existente, o 386 também preservou a estrutura segmentada
    • Como cada segmento passou a poder ter até 4 GiB, a presença dos segmentos na prática perdeu importância
    • A decisão de oferecer paginação e memória virtual também foi tomada nessa fase
  • O conjunto de instruções existente e os registradores foram expandidos para 32 bits, mantendo a compatibilidade binária
    • Não foi adotado um esquema com um conjunto de instruções totalmente diferente atrás de um “cabeçalho de modo” separado
    • Em troca, não foi possível aumentar o pequeno número de registradores, uma das fraquezas do x86
  • Em certo momento também se considerou usar um novo barramento para o P7, mas a ideia foi abandonada porque ele era diferente demais do barramento do 286 e exigiria redesenho da placa-mãe e dos chips de suporte
    • Foi escolhida uma abordagem menos ambiciosa: ampliar o barramento existente para 32 bits
  • Por volta de 1984, com o mercado de PCs crescendo, a Intel entendeu a importância da família x86, e concluir o 80386 se tornou a prioridade máxima
    • O projeto P7 acabou levando ao i960 em 1988, e seu foco foi deslocado para o mercado embarcado para não canibalizar as vendas do 386

A estratégia da Intel de ser a única fornecedora do 386

  • O 80386 foi anunciado em outubro de 1985
  • Na época, era comum que empresas de design de chips como a Intel licenciassem CPUs para que outras empresas também as produzissem, garantindo second source
    • Assim, os clientes podiam evitar falta de CPU mesmo se o fornecedor principal tivesse problemas de rendimento
    • Intel e AMD mantinham uma longa relação de cooperação desde a era do 8085 e licenciavam produtos mutuamente
    • A IBM também tinha, desde 1983, licença para produzir diretamente o 808x e o 80286
  • No 80386, essa prática mudou
    • A Intel considerou importante tornar-se a fornecedora única para controlar diretamente a CPU, o componente mais valioso do PC
    • A IBM estava mais interessada em investir pesadamente no 286 do que no futuro 386
    • O acordo entre Intel e IBM foi renegociado para satisfazer a IBM em relação ao 286, mas a IBM não podia produzir o 386
  • A AMD também não tinha grande interesse em produzir o 386, e o acordo de second source com ela não foi estendido ao 386
  • Em período semelhante, no caso NEC vs Intel, saiu a decisão de que o microcódigo tinha proteção autoral e não podia ser copiado sem uma licença específica da Intel
    • Mesmo que a NEC pudesse fazer engenharia reversa do microcódigo do 8086, o 386 era tratado como algo praticamente impossível por causa da complexidade
  • Depois desse movimento, a Intel passou a ocupar, junto da Microsoft, uma posição para controlar o futuro do mercado de PCs

Compaq Deskpro 386 e a vitória dos PCs clone

  • O IBM PC usou componentes prontos para chegar rapidamente ao mercado e, como resultado, outras empresas também puderam comprar os mesmos componentes e criar máquinas compatíveis
  • A fabricante de clones mais bem-sucedida e ambiciosa foi a Compaq
    • Na época, a Compaq foi a empresa que chegou mais rapidamente a US$ 100 milhões em receita
  • Quase um ano após a Intel lançar o 80386, a Compaq anunciou o Deskpro 386 em setembro de 1986
    • O Deskpro 386 foi o primeiro computador com 386
    • Também foi o primeiro PC a não seguir a tentativa da IBM de retomar o controle do mercado com o PC/AT baseado no 286
  • Bill Gates disse que a IBM não confiava no 386 e que a Microsoft incentivou a Compaq a criar uma máquina com 386
    • Esse episódio se tornou um ponto de virada que mostrou que não era só a IBM que definia padrões: empresas como Compaq e Intel também podiam fazer coisas novas
  • O Compaq Deskpro 386 era muito caro no início, mas vendeu razoavelmente bem e mostrou que a IBM já não ocupava mais a posição de liderança
  • A IBM só lançou seu primeiro computador com 386, o PS/2 model 80, quase um ano depois
    • A linha PS/2 tentou recuperar o controle introduzindo um barramento proprietário muito avançado para a época
    • Porém, a IBM já não estava em posição de impor seu próprio caminho, e a linha PS/2 não cumpriu essa missão

O cenário competitivo e o desempenho do 386

  • Em 1985, o principal concorrente da família Intel x86 era a família Motorola 680x0
    • Muita gente via o 68000 como um chip muito superior ao 8086 e considerava que o 80286 havia perdido a chance de evoluir para uma arquitetura mais limpa
    • O 68020 foi a evolução natural para 32 bits das CPUs da Motorola
  • Com o 80386, a Intel passou a ter pela primeira vez um concorrente sério
    • Graças à MMU integrada e ao espaço de endereçamento plano de 4 GiB, também podia mirar o lucrativo mercado de workstations
  • No mercado de workstations, muitas empresas estavam adotando projetos RISC
    • O atrativo do RISC era poder ser mais rápido e mais barato de fabricar
    • O 386 era um design CISC que dependia de bastante microcódigo para lidar com o conjunto de instruções complexo do x86 e os modos de endereçamento do 80286
  • Em benchmarks, o 386 mostrou desempenho mediano
    • O Intel 80386 de 16 MHz fazia 4 MIPS, e o de 25 MHz fazia 6 MIPS
    • O Motorola 68030 de 25 MHz também fazia 6 MIPS
    • O Mips R2000 de 16 MHz fazia 16 MIPS, o Motorola 88000 de 16 MHz fazia 17 MIPS, e o Intel i960CA de 33 MHz fazia 66 MIPS
  • O desempenho não era revolucionário, mas ele tinha os recursos necessários para competir

386SX e a disseminação do software de 32 bits

  • Depois de se comprometer totalmente com o 386, a Intel introduziu o 386SX em 1988
  • O 386SX era internamente igual ao 386 original, e o 386 original passou a se chamar 386DX
    • O barramento de dados externo era de 16 bits
    • Era oferecido em encapsulamento plástico mais barato
    • Podia ser instalado em placas-mãe de 16 bits mais baratas
  • O principal objetivo do 386SX era substituir o 286 em faixas de preço semelhantes
    • O 286 ainda tinha fornecedores de second source
  • No começo dos anos 1990, a base instalada de 386 já era grande o bastante para que mais fabricantes de software pudessem aproveitar recursos de 32 bits e funcionalidades modernas
  • Foi decisivo o fato de todos os modelos 386, inclusive os de entrada, incluírem MMU integrada

Como a MMU mudou o gerenciamento de memória

  • MMU significa Memory Management Unit, um hardware que converte automaticamente endereços virtuais em endereços físicos
  • Os primeiros programas conseguiam ver todo o espaço de endereçamento da máquina
    • Quando o espaço de endereçamento era pequeno, isso era administrável, mas, com vários programas rodando ao mesmo tempo e o sistema operacional deixando de caber em ROM, o problema de isolamento cresceu
  • Uma das soluções iniciais foi a segmentação
    • O registrador de segmento funciona como endereço base
    • Quando o programa acessa um endereço, um valor de 16 bits é somado ao registrador de segmento para formar o endereço físico
    • Se o limite de tamanho do segmento for ultrapassado, ocorre uma fault, permitindo isolamento entre programas
    • O 8086 usava esse método segmentado para acesso à memória
  • O 80286 tinha uma MMU segmentada rica em recursos, com suporte a gerenciamento de memória mais complexo e acesso a até 16 MiB de memória
    • O OS/2 1.x aproveitou essa MMU para oferecer uma experiência mais moderna
  • Para programadores de PC, a memória segmentada era restritiva e difícil de lidar
  • Um design de MMU mais moderno gira em torno de paginação
    • A MMU divide o espaço de endereçamento virtual em páginas de tamanho fixo
    • Ao acessar uma página, lê um descritor de página para obter as informações de conversão para o endereço físico
    • Como os descritores de página normalmente ficam na memória, usa-se um cache TLB com descritores acessados recentemente para desempenho
  • Muitos sistemas operacionais modernos, especialmente portas de UNIX, combinavam melhor com paginação
    • Workstations baseadas no 68000 às vezes usavam uma MMU externa própria com paginação em vez da MC68451
    • A Motorola introduziu a 68851, uma MMU externa para o 68020

A estrutura e o diferencial da MMU do 80386

  • O 386 precisava ser adequado para sistemas operacionais modernos e, ao mesmo tempo, compatível com 8086, 80286 e software x86 existente
  • Para isso, a MMU do 386 foi organizada quase como dois dispositivos separados
    • Um para o modo segmentado
    • Outro para o modo de paginação
  • Os dois dispositivos operam em cadeia
    • O endereço lógico primeiro passa pelo dispositivo de segmentação para virar um endereço linear
    • Se a paginação estiver desligada, esse endereço linear já é o endereço físico
    • Se a paginação estiver ligada, um descritor de página é buscado na TLB ou na memória para gerar o endereço físico real
  • O dispositivo de segmentação não pode ser desativado, mas é possível representar todo o espaço de memória como segmentos de 4 GiB começando no endereço 0, usando-o como memória plana
  • O dispositivo de paginação divide os segmentos em páginas de 4 KiB
  • O 80386 introduziu quatro níveis de privilégio, os rings
    • Eles servem para proteger memória privilegiada contra leitura e escrita sem privilégio
    • Foram um dos elementos básicos sobre os quais os sistemas operacionais modernos com proteção se apoiaram
  • A MMU também participa do modo Virtual 8086
    • Programas de 8086 são executados como se controlassem um 8086 completo com até 1 MiB de memória
    • Várias máquinas virtuais V86 podem funcionar ao mesmo tempo
    • Ações como acesso a recursos protegidos geram interrupções tratadas por software privilegiado
  • A MMU do 386 foi projetada como uma parte integrada e organizada da CPU
    • Em condições ideais, não afeta o desempenho de acesso à memória
    • A MC68851 sempre adiciona pelo menos 1 ciclo de latência
  • Na família 68000, a MMU nem sempre existia
    • O 68020 exigia MMU externa
    • As versões EC de baixo custo do 68030 e 68040 não tinham MMU integrada
  • No 80386, até o 386SX de baixo custo incluía MMU
    • Programas que usavam MMU e modos avançados podiam rodar em qualquer 386

A transição de sistemas operacionais que o 386 tornou possível

  • O verdadeiro impacto do 386 não esteve no desempenho bruto, mas em tornar possíveis sistemas operacionais modernos no PC
  • Xenix

    • Xenix foi uma das primeiras portas de UNIX para microcomputadores, surgida da cooperação entre Microsoft e SCO
    • Uma porta para 8086 foi anunciada em 1980, mas, sem uma MMU real, não era possível ter proteção de memória nem separação entre espaço de usuário e espaço de kernel
    • A versão para 286 usou o modo protegido para se aproximar mais do UNIX de workstation
    • Em 1987, a porta para 386 reduziu essa distância usando paginação e se tornou o primeiro SO moderno de 32 bits rodando em x86
  • OS/2

    • OS/2 começou como um desenvolvimento conjunto da Microsoft com a IBM, e depois a Microsoft saiu para focar no Windows
    • Foi lançado em 1987, mas as primeiras versões miravam o 286
    • Isso porque muitos sistemas da linha IBM PS/2 vinham com 286
    • Aproveitava bem o modo protegido e era considerado um sistema operacional avançado na época
    • O OS/2 só se tornou um SO de 32 bits com a versão 2.0 de 1992
    • Antes disso, o modelo de memória segmentada e a ausência do modo Virtual 8086 prejudicavam o suporte a aplicações DOS, deixando-o atrás do Windows/386
    • O OS/2 2.0 foi o primeiro SO de 32 bits amplamente usado em computadores pessoais
  • Windows

    • O Windows passou a oferecer um ambiente operacional dedicado ao 80386 com o Windows/386 em 1987
    • O Windows/386 ainda era um SO de 16 bits e não expunha um espaço de memória plana de 32 bits
    • Em vez disso, usava recursos do 386 para virtualizar sessões DOS em modo Virtual 8086
    • Várias sessões DOS podiam rodar em paralelo sem perceber umas às outras
    • Isso foi importante para muitas empresas que dependiam de software DOS
    • Graças à MMU, também havia memória expandida por meio de drivers em modo protegido que emulavam EMS
    • Essa linha evoluiu no Windows 3.0 e no Windows 3.1, e o Windows 3.1 foi um grande sucesso
    • O Windows for Workgroups 3.11, de 1993, deixou de oferecer suporte a CPUs inferiores ao 386, e acesso a arquivos e muitos drivers passaram a ser de 32 bits
    • O Windows 95 aproveitou de fato a MMU do 386
      • Expunha um espaço de memória plana
      • Usava paginação e memória virtual
      • Parte do código ainda era de 16 bits, mas o DOS foi reduzido quase a um papel de bootloader
  • Windows NT

    • O primeiro Windows NT foi lançado em julho de 1993
    • Ao contrário do Windows 95, que evoluiu a partir do Windows 3.11 mantendo parte de código legado de 16 bits, o NT foi desenvolvido do zero para ser um Windows “puro” de 32 bits
    • Uma das principais características do NT era a independência de hardware, mas a porta mais importante era a do 80386
    • Fazia uso total de paginação, supervisor mode e proteção de memória
    • O NT compartilhava quase a mesma API do Windows 95 e podia executar muitos aplicativos Win32
    • O NT4 começou a impactar o mercado de UNIX para workstations em meados dos anos 1990
    • O Windows 11 é um descendente direto do kernel NT
  • Linux

    • O sistema operacional mais ligado ao 386 é o Linux
    • Linus Torvalds comprou um novo PC com 386 por volta de janeiro de 1991
    • Como purista da computação criado com o chip 68008, Linus não gostava de PCs, mas disse que, com a chegada do 386, os PCs começaram a parecer atraentes
    • O 386 conseguia fazer o que o 68020 fazia
    • Em 1990, ele já estava muito mais barato graças à produção em massa e à adoção de clones de baixo custo
    • Esse PC com 386 era adequado para rodar o Minix, um pequeno clone de UNIX voltado ao ensino interno de sistemas operacionais
    • Linus não ficou satisfeito com o emulador de terminal do Minix e começou a escrever o seu próprio
    • Um bom terminal era importante para acessar o computador da universidade
    • Ele o escreveu bare metal para aprender o hardware do 386
    • Implementou entrada via teclado e saída para a tela
    • Ao estruturar tudo em torno de duas threads independentes, escreveu um pequeno task switcher
    • Para baixar programas, precisava de um driver de disco para salvá-los, e, à medida que acrescentava funcionalidades uma a uma, foi se formando o sistema operacional que ficaria conhecido como Linux
    • Em meados de 1991, Linus pediu uma cópia da especificação POSIX e, em 25 de agosto de 1991, anunciou no grupo comp.os.minix que estava trabalhando em um novo sistema operacional
    • Na época, descreveu-o como “just a hobby, won’t be big and professional like gnu”

O impacto de longo prazo do 80386

  • O 80386 é considerado a CPU mais importante da família x86
  • Tecnicamente, o 80386 era um bom chip, mas não foi revolucionário em desempenho e ficava atrás dos chips RISC contemporâneos
  • O ponto central era a MMU moderna e rápida, junto de vários modos de operação
    • Ele podia acessar 4 GiB de memória plana
    • Mantinha compatibilidade com o software x86 existente
    • Permitia que o Windows se modernizasse gradualmente
  • A capacidade de tratamento de memória do 386 era boa o suficiente para que CPUs posteriores se tornassem mais poderosas, mas quase não adicionassem nada de grande nessa área por quase 20 anos
  • O Linux mainline só abandonou o suporte a i386 em 2013
  • Comercialmente, a importância do 386 também foi enorme
    • No começo, a Intel não acreditava na demanda por x86 de 32 bits, mas percebeu que o x86 era o futuro
    • Essa mudança sinalizou ao mercado que o x86 continuaria
    • A adoção do 386 pelos principais fabricantes de clones tirou a IBM do centro e mostrou que existia uma alternativa aberta confiável
    • A Intel se tornou a única fornecedora da CPU x86 mais poderosa, dando um passo importante rumo ao domínio do mercado de CPUs
  • Com máquinas baseadas no 386 sendo produzidas em massa, os preços caíram rapidamente e o acesso à MMU se popularizou
    • O Windows apresentou a computação moderna a milhões de pessoas
    • O kernel NT mostrou que um SO robusto podia rodar até em PCs baratos “bege”
    • Dá para dizer que o Linux não existiria sem o 386, de tão forte que é essa ligação

1 comentários

 
GN⁺ 2023-11-06
Opiniões no Hacker News
  • Acho que o projeto final do 80386 se beneficiou muito do Motorola 68000 e do m68020 que veio depois
    Se a Motorola não tivesse lançado uma CPU de 32 bits de verdade, sem concessões, é possível que a Intel tivesse lançado mais uma solução provisória depois do 80286. O próprio 80286 também não foi concebido como um sucessor de verdade do 8086/8088
    O 80386 real também tinha muitas concessões. Não havia nenhum cache além da fila de pré-busca de instruções de 16 bytes, enquanto o m68020 tinha um cache de instruções de 256 bytes. Também não havia instruções atômicas, e como LOCK não era muito útil para isso, muitos sistemas operacionais hoje dão suporte ao 80486, mas não ao 80386. Por causa da compatibilidade com o 8086, que exigia modo real ou VM86, levou bastante tempo até que o software passasse a aproveitar os novos recursos do 80386
    Ainda assim, foi um chip importante e também mostrou sinais iniciais de um padrão que depois se tornaria familiar na Intel. Tentativas de não competir com x86 ou de criar outro mercado sacrificando o x86 (iAPX 432, e 20 anos depois o Itanic), recursos acrescentados às pressas, como os do 80286, que depois precisaram ser carregados para sempre como suporte legado, e o movimento de correr atrás tardiamente quando outros fabricantes já tinham os recursos que todos queriam (suporte plano a 32 bits na época, suporte a 64 bits 20 anos depois), entre outras coisas

    • A máquina em que Linus Torvalds escreveu o primeiro kernel Linux era um 386, e o fato de o Linux ter dado suporte desde o início aos novos recursos do 386 foi uma das razões para sua rápida ascensão
    • Tenho dúvidas se a ausência de instruções atômicas no 386 foi realmente importante. Pelo que sei, o 386 não tinha multiprocessamento simétrico (SMP), e em um ambiente de processador único é possível tornar uma operação atômica desativando interrupções
  • Na época, a Intel estava em uma grande crise, e a empresa inteira dependia de esse chip sair excelente
    Poderia facilmente ter se desviado do caminho como Data General, Honeywell, CDC, AST, Tandy, Olivetti, Xerox, DEC Rainbow, AT&T Hobbit, Wang 2200 e Unisys. Há aqui um forte viés de sobrevivência. A maioria dos antigos gigantes, como SDS, SDC e Fairchild, hoje está quase esquecida
    A história da Intel originalmente era mais próxima da de uma fabricante de memória. Dá para dizer que hoje ela está numa posição complicada parecida. Sua participação em mobile e eletrônicos de consumo é praticamente 0%, e mesmo nos principais redutos que restaram, NVIDIA, AMD e ARM avançam como se estivessem saqueando um castelo. Espero que ela consiga escapar mais uma vez

    • A decisão de Andy Grove de levar a Intel de memória para microprocessadores foi uma decisão estratégica brilhante
      “O sucesso de um negócio carrega as sementes da própria destruição. O sucesso gera complacência, a complacência gera fracasso. Só os paranoicos sobrevivem”
      A direção da Intel nos anos 2010 não deu atenção suficiente a essa frase
    • O DEC Rainbow poderia ter ido bem se não tivesse feito a besteira de obrigar as pessoas a comprar disquetes proprietários por 5 dólares cada
      A DEC deveria ter empacotado o LSI-11 como uma máquina de consumo. O software todo já existia e era de nível altíssimo. Eu tinha um H-11, e era uma máquina excelente
    • A NVIDIA não consegue fazer uma boa CPU, e até seus SoCs dificilmente podem ser chamados de modernos. Quase não há adoção no mercado de massa, exceto por setores que só se preocupam com fornecimento de peças no longo prazo, como a indústria automotiva, e pelo Nintendo Switch
      O fato de o Switch ainda usar um chipset Tegra de 2015 provavelmente também se deve ao fato de que nem uma empresa grande como a Nintendo conseguiu pressionar a NVIDIA a entregar um novo projeto. A ARM não fabrica CPUs de servidor amplamente disponíveis para compra pelo público, e os produtos que existem são todos absorvidos pelas empresas de nuvem. Fora do Mac, também não há CPUs ARM decentes para desktops e notebooks. Isso porque a Qualcomm estragou esse mercado por anos
      Enquanto a ARM não apresentar uma solução capaz de competir com o Rosetta, e a Qualcomm não abandonar a mentalidade de “se mal roda, lança”, que pode até funcionar para fabricantes de smartphones, mas não serve para o mercado de PCs/desktops, a adoção de ARM nesse mercado parece difícil
      No fim, a única ameaça que resta para a Intel é a AMD, mas a AMD não tem capacidade fabril suficiente para ameaçar de verdade o fosso da Intel. Isso pode ou não ser extremamente frustrante para o estado da concorrência em computação de uso geral
    • Qual é a esperança da Intel agora? Será que existe alguma CPU desktop derivada do Quark no estilo do Dothan?
  • Gostaria que parassem de sobrepor ao 386 essa interpretação posterior de “32 bits plano”. Esse não era um objetivo explícito; estava mais próximo de adotar recursos importantes de arquitetura baseada em capacidades, que na época eram vistos como o futuro
    O contexto era anterior a ideias como Unix/C/RISC/modelo de supervisor único deslocarem, em áreas como segurança, os 30 anos anteriores de pesquisa em sistemas operacionais de mainframes e minicomputadores
    O que este texto não deixa devidamente claro é que os registradores de segmento agora tinham se tornado, basicamente, índices seletores em uma tabela com campos de endereço-base + comprimento (em unidades de página ou byte) e controle de permissões de execução. E esses seletores, junto com GDT/LDT/IDT/TSS/call gates/task gates etc., foram todos projetados para dar suporte a uma hierarquia de 4 níveis de privilégio, por exemplo usuário/biblioteca/driver/kernel
    Também era possível impor coisas como limites de tamanho de estruturas de dados passando seletores de acesso de um lado para outro e, para isso, FS/GS foram adicionados de modo que cada registrador de uso geral pudesse ter sua própria máscara de permissões
    Pensando de novo por um instante: ponteiros (capacidades, isto é, seletores) podiam ter não só um endereço-base, mas também limites impostos por hardware, e o modelo de permissões podia fazer com que funções como strcpy() não conseguissem escrever em memória que não fosse o buffer de destino ou sua própria área de trabalho. A linguagem e o SO poderiam impedir que a função chamada escrevesse na pilha de quem a chamou, ou até forçá-la a executar em uma pilha totalmente separada. Isso era só o começo
    Quase 40 anos depois, o setor ainda tenta se recuperar do erro de projetar sistemas operacionais e linguagens de programação em torno de um modelo de memória plano e de um modelo simples de privilégio usuário/supervisor. O 386 oferecia suporte de hardware para escrever recursos de SO que continuam incomuns hoje. Basta olhar para o CHERI, por exemplo

    • Mesmo dizendo que “ponteiros (capacidades, isto é, seletores) podiam ter não só um endereço-base, mas também limites impostos por hardware”, há apenas 8 mil ponteiros possíveis na LDT e mais 8 mil na GDT. O modelo de segmentos do x86 não é muito adequado para implementar capacidades
    • Faz tempo que não acompanho o grsecurity, mas não me surpreenderia se os registradores de segmento ainda fossem usados. Por exemplo, em algo como o PaX UDEREF
      https://forums.grsecurity.net/viewtopic.php?f=7&t=3046
      https://pax.grsecurity.net/docs/PaXTeam-H2HC12-PaX-kernel-se...
    • O modo protegido baseado em segmentos como um todo já tinha sido introduzido no 286. O 386 basicamente adicionou FS/GS e aumentou os segmentos para 32 bits
  • Quero enfatizar o quanto o 386SX foi importante. Meu pai queria um PC para mim e pediu a um amigo que montasse um clone de 286, mas esse amigo entregou um 386SX no lugar
    Ele disse: “custa quase o mesmo que um 286, mas o que você está recebendo é definitivamente uma CPU de 32 bits”, e estava certo. Dava para rodar Win 3.11 nele. Uma CPU de 32 bits pelo preço de um 286, portanto bem mais acessível, foi um produto genial

  • Seria bom dar algum crédito ao 286 aqui também. O 286 tinha uma quantidade de instruções por clock bem melhor que a geração anterior, então foi um chip bastante subestimado, e isso acabou levando a uma das principais críticas ao 386
    Ao rodar código 16-bit existente, a quantidade de instruções por clock do 386 era basicamente igual à do 286, e o clock inicial também era de 12 MHz, então era meio sem graça. Até os clocks começarem a subir de verdade e as pessoas começarem a usar os recursos de 32 bits, ele não era muito mais do que um concorrente caro do DOS/286

  • Pouco depois do lançamento do 386, eu, ainda adolescente, comprei meu primeiro computador. Na época havia PCs 286 e 386 no mercado, mas o 386 tinha um grande ágio no preço
    Eu não entendia bem a diferença na época, então comprei um sistema 286 e, depois de alguns anos, quando entendi a diferença, me arrependi muito de não ter juntado mais dinheiro para comprar um 386. Algum tempo depois comecei a escrever assembly de baixo nível, como bootstrap de sistema para sistemas operacionais de brinquedo, mas não podia usar o modo protegido de 32 bits. Além disso, a partir de certo momento começaram a aparecer jogos exclusivos para 386, então me senti bastante excluído até comprar meu primeiro 486

  • A Intel evoluiu a família x86 depois do 386 até o Pentium Pro e o amd64; fico me perguntando por que a Motorola não fez o mesmo com o 68k
    Já vi discussões que tratam quase como premissa que o 68k ficou obsoleto e precisava ser substituído pelo PowerPC, mas isso parece especulação. Nunca vi um argumento técnico, e o 68k parece uma arquitetura mais limpa para levar adiante do que o x86 pós-286

    • Não eram vendidos computadores suficientes usando 68k, então não havia demanda bastante pelos chips; por isso não dava para competir em preço com a Intel nem justificar grandes investimentos em P&D. A Intel tinha o mercado de compatíveis com PC, e isso gerava uma demanda enorme por chips
    • O problema não era técnico, e sim a ausência da “montanha de dinheiro” à qual a Intel tinha acesso, ao mesmo tempo em que os clientes exigiam compatibilidade retroativa
      A própria Intel tentou pelo menos duas vezes migrar para i860 ou Itanic, mas fracassou. Por isso, melhorar o x86 acabou sendo a opção vencedora
      https://news.ycombinator.com/item?id=37796469
    • Se a pergunta é se houve tentativas comerciais de criar sistemas IDE, VESA e PCI baseados em processadores 68k, houve, em certa medida. Existia o barramento VME
      Foi uma tentativa de criar um barramento baseado em padrões, interoperável entre vários fornecedores e também adequado a CPUs 88k. Não foi um sucesso enorme, mas teve algum sucesso
  • A expressão “o mais importante” soa um pouco como interpretação posterior. Se o 8086/8088 não tivesse se popularizado por acaso por meio do IBM PC, provavelmente não haveria nem 80286, muito menos 80386
    Ainda assim, o 386 foi uma realização de engenharia que mudou o mundo. Acho que, em uma linha do tempo mais justa e equilibrada, o 68030 teria dominado o mundo, mas isso não diminui o que a Intel conseguiu fazer

    • O 386 até pode ser o caso, mas o 286 provavelmente já estava pronto na época em que o IBM PC foi lançado, ou talvez até antes
  • O 386 foi o primeiro daquela família a oferecer suporte a memória virtual com paginação sob demanda, o que ampliou muito o que um SO podia fazer. Pessoalmente, vejo isso como o recurso mais importante que o 386 trouxe
    Meu segundo PC foi um 386 rodando SCO UNIX. O primeiro foi um Heathkit H-8 baseado em 8080 rodando CP/M

  • É surpreendente o trecho dizendo que Bob Childs foi um dos projetistas do 286 e que, informalmente, passou cerca de 6 meses concebendo a ideia de uma extensão de 32 bits para o 286
    Como é que isso era possível? Em 30 anos de trabalho, nunca tive um emprego em que não houvesse alguém me pressionando a entregar algum resultado visível a cada poucos dias