minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
A necessidade de computação é generalizada na história da humanidade, e seu desenvolvimento geralmente passou pelo processo de desenvolvimento desde ferramentas de computação em geral até computadores mecânicos e até os atuais computadores eletrônicos.
A necessidade da humanidade por computação nos leva a inventar e melhorar continuamente os computadores. A era atual é a era dos “computadores eletrônicos”, e a tendência de desenvolvimento é: mais rápida, mais estável e menor.
Livros recomendados: "Uma Breve História dos Computadores"
Ponto 1
Computadores modernos, a maioria está em conformidade comArquitetura de Von Neumann
John von Neumann (28 de dezembro de 1903 - 8 de fevereiro de 1957), matemático e cientista da computação húngaro-americano
Cientista, físico e um dos matemáticos mais importantes do século XX. Von Neumann é Ph.D. em matemática pela Universidade de Budapeste. Ele é uma das mentes científicas mais versáteis nas áreas de computadores modernos, teoria dos jogos, armas nucleares e armas biológicas. pai dos computadores modernos” e “o pai da teoria dos jogos”.
A seguir, usamos um processo do zero para construir uma CPU passo a passo. Podemos usar esse processo para entender os princípios de funcionamento dos principais componentes do computador, como CPU e memória.
Chave eletrônica – Relé Mecânico
Através de chaves eletrônicas, podemos implementar operações lógicas aparentemente inúteis de 1 bit (bit), mas pelo menos funciona, certo?
Aprenderemos mais sobre como usar chaves eletrônicas para combinar componentes lógicos verdadeiramente úteis.
A essência dos futuros tubos de vácuo e transistores é realizar trabalhos semelhantes, mas os princípios físicos são mais complexos, por isso não iremos levá-lo através de uma explicação detalhada.
A seguir, aprenderemos como usar chaves eletrônicas para construir alguns componentes úteis - operações lógicas básicas de 1 bit podem ser realizadas.
ALU é o componente central para operações aritméticas e lógicas em computadores e é o cérebro matemático do computador. Em seguida, usamos as portas lógicas construídas acima para completar nossa própria ALU, para aprender e compreender seu modo de funcionamento, de modo a para. aprofundar nossa compreensão dos princípios modernos da computação.
A unidade aritmética é responsável por todas as operações digitais no computador, como as quatro operações aritméticas. Claro, ela pode fazer muito mais do que isso. A seguir, mostrarei como implementar um somador (somador) de 8 bits. todo o processo e outras operações não vou mais explicar o dispositivo.
Neste ponto, criamos um somador de 8 bits do zero. As operações da unidade aritmética são, obviamente, muito mais do que estas. Ao continuar a combinar portas lógicas, a unidade aritmética pode realizar adição, subtração, multiplicação, divisão e ainda mais operações aritméticas, mas um somador é suficiente como demonstração. Na verdade, a dificuldade de fazer multiplicadores e divisores é maior do que a de somadores e subtratores. Se tiver interesse, você pode tentar aprender mais.
As unidades lógicas são usadas principalmente para realizar operações lógicas. As operações mais básicas são operações AND, OR e NOT, mas não são apenas a comparação de números de um bit.
经过我们的努力,通过基本的逻辑门电路,我们⼀步步地做出了⼀个 8 位(bits) ALU,甚至比 Intel 74181 还要强大,Intel 74181 只是⼀个 4 位(bits) ALU(😀)。当然现代的计算机中的 ALU 部件非常强大,复杂度远远超过了我们的想象,32 位 甚至 64 位基本已经普及全球了。但无论如何,再复杂的ALU 也是芯片工程师像我们这样,一层又一层, 一步又一步地将其抽象出来的。ALU 是第⼀次将人类历史上的数学和逻辑学学科有机地结合起来,可以视为人类智慧发展的现代巅峰.
A ALU por si só não é suficiente. Não podemos fornecer componentes de armazenamento para a ALU, então, a seguir, usamos circuitos de porta para explicar brevemente a produção de armazenamento. Observe que, embora não seja mostrado claramente na figura, esses requisitos de armazenamento devem permanecer ligados. , ou seja, esses armazenamentos são voláteis (voláteis)
Escondemos alguns detalhes de implementação no meio, e o efeito final é: quando a linha de desabilitação é definida, a entrada é 1, e 1 é salvo quando a entrada é 0, 0 é salvo quando a linha de habilitação não está na posição; , a gravação é inválida.
Podemos usar fechaduras para construir os registros e a memória de que precisamos.
A construção da memória é um pouco mais complicada que isso, mas os princípios básicos são os mesmos. A memória construída desta forma é chamada de RAM (Random Access Memory) e pode suportar complexidade de tempo O(1) para acessar dados em qualquer local. Isso significa que nossa operação de acesso ao subscrito do array é O(1).
suporte de hardware.
Agora temos ALU e armazenamento, mas isso ainda não é suficiente para fazer nosso computador funcionar. Precisamos de um componente para direcionar a ALU para realizar que tipo de cálculos, e esse componente é a unidade de controle (CU).
Ponto 2
O número de caixas na imagem acima pode ser considerado como o número de núcleos. Conforme mostrado na imagem, é uma CPU de dezesseis núcleos.
As primeiras CPUs tinham um único núcleo. Com o desenvolvimento dos tempos, temos requisitos cada vez maiores para a velocidade de processamento da CPU. Neste momento, precisamos tornar a CPU mais integrada e conter mais unidades de computação para calcular mais rapidamente. unidade de computação seja pequena (processo de fabricação de CPU, como 5nm, etc.). Neste momento, a mecânica clássica torna-se inválida e começa a entrar no campo da mecânica quântica.
Neste momento, é proposto o conceito de multi-core.
A velocidade de computação da CPU é descrita pela frequência, que pode ser simplesmente entendida como quantas instruções podem ser executadas em um segundo (não rigoroso). Por exemplo, a velocidade acima pode ser entendida como os cálculos da CPU cerca de 3,4 bilhões de vezes por segundo. .
A frequência da CPU muda dinamicamente com base na carga de trabalho, conforme a frequência aumenta, ela consome mais energia e gera mais calor. Para proteger a CPU de queima devido ao superaquecimento, ela reduzirá automaticamente a frequência.
Ponto 3
Primeiro, vamos apresentar as instruções de que precisamos.
A chamada instrução, ou seja, o comando que orienta a CPU na execução do trabalho, consiste principalmente em código de operação + operando.
O opcode é usado para indicar qual ação deve ser executada, e o operando são os dados a serem operados por esta instrução, que pode ser um endereço de memória ou um número de registro, etc.
A instrução em si também é um número armazenado em uma determinada área da memória em formato binário.
Os programas que escrevemos em linguagens de programação devem eventualmente ser traduzidos em “instruções binárias executadas na CPU”.
As instruções também são linguagem de máquina (binária) e linguagem assembly. A linguagem de máquina e a linguagem assembly têm uma correspondência um-para-um.
CPUs diferentes suportam instruções diferentes no nível micro, como instruções x86 e instruções arm, o que causa problemas de compatibilidade.
Quais instruções uma CPU pode executar podem ser consideradas estipuladas quando a CPU foi originalmente projetada. A imagem acima lista algumas instruções simplificadas.
A instrução de 8 bits pode ser dividida em duas partes.
Os primeiros 4 bits são o código de operação (opcode) que indica o que a instrução faz.
Os últimos 4 bits são operandos (semelhantes aos parâmetros)
O nome do registro AB na tabela acima é fictício. O nome do registro real da CPU está no formato: eax, ebx, esp, ebp...)
Existe um registro especial na CPU, o “contador de programa” (será configurado automaticamente pelo sistema após o carregamento do exe na memória), que salva o local da memória a partir do qual a instrução será executada a seguir. tempo, conforme a instrução é executada, o valor do "contador do programa" também será atualizado de acordo. Por padrão, é um processo de incremento automático de +1 (executando instruções em sequência, se uma instrução de salto for encontrada). como (se, enquanto, para, chamada de função...), será definido com outro valor.
Dividimos a execução das instruções em três etapas:
1) Busca de instruções, a CPU lê o conteúdo da instrução da memória para a CPU (existem registros especiais para salvar as instruções lidas).
2) Analise a instrução e identifique sua função, funções e operandos correspondentes
3) Execute instruções
A execução de cada instrução deve passar pelas três etapas acima, e a conclusão de uma tarefa requer a execução de várias instruções acima. Por exemplo, um processo de adição pode exigir três instruções acima, o que parece muito problemático, mas devido ao cálculo da CPU É. muito rápido (as operações acima podem ser realizadas mais de um bilhão de vezes em um segundo) e não leva muito tempo para um computador.
O chamado programa é um conjunto de instruções e os dados a serem processados por esse conjunto de instruções. Num sentido estrito, um programa geralmente aparece para nós como um conjunto de arquivos.
Programa = instrução + dados a serem processados pela instrução.
Esta é uma pequena história interessante que circulou anteriormente, mas é claro que não é verdade.Mas para os primeiros computadores, a programação realmente exigia
Programado com 0 e 1 (Σ(っ°Д °;)っ)
A imagem abaixo mostra o computador Altair 8800, um dos primeiros microcomputadores. O usuário precisa controlar o switch e inserir o programa no computador pouco a pouco.
Se todos os usuários de computador forem obrigados a usar programação binária, todos ficarão loucos. Este é um limite muito alto. Assim surgiram as linguagens de programação.
Para melhorar a eficiência da programação, o conceito de linguagem assembly foi criado pela primeira vez. Na verdade, a linguagem assembly e a linguagem de máquina (isto é, as instruções) estão diretamente em correspondência um-para-um. Acontece que, em relação aos números 0 e 1, alguns símbolos foram inventados para ajudar os humanos a lembrá-los e compreendê-los. é o que temos acima. O que você vê é semelhante a LOAD_A, LOAD_B, etc. Depois que os programadores concluem a programação, eles precisam usar um assembler para traduzir a linguagem assembly em linguagem de máquina.
Embora a montagem reduza o custo de memória do programador, ainda exige que o programa domine todo o conhecimento do hardware do computador. Com o número crescente de fabricantes de computadores, os programas escritos de uma só vez são frequentemente adequados apenas para um tipo de computador. Isso está longe de ser suficiente, então surgiram linguagens mais avançadas. Linguagens de alto nível protegem os detalhes do hardware e permitem que os programadores pensem em seus negócios em um nível mais alto. Aqui tomamos a linguagem C como exemplo. Depois que o programador termina de escrever o programa, ele precisa usar um compilador e um vinculador para traduzir o programa para a linguagem assembly e, em seguida, usar o assembler para transformá-lo na linguagem de máquina final.
Com a ajuda da ideia de encapsulamento, fica cada vez mais fácil aprender programação. No entanto, existem vantagens e desvantagens. O elevado grau de abstracção faz com que muitos programadores considerem o computador uma caixa negra e sejam completamente incapazes de compreender como funcionam os seus próprios programas.
A linguagem Java que usamos é um pouco mais avançada que a linguagem C, mas não há muita diferença nos princípios abstratos básicos, então não iremos entrar em detalhes sobre isso por enquanto.
Nota: Uma instrução em linguagem de alto nível geralmente corresponde a muitas instruções a serem completadas.
Ponto 4
Sistema operacional é um nome coletivo para um conjunto de software que gerencia recursos do computador. Atualmente, os sistemas operacionais comuns incluem: série Windows, série Unix, série Linux, série OSX, série Android, série iOS, Hongmeng, etc.
Os programas executados em sistemas diferentes são diferentes (os programas não são compatíveis devido a diferentes KPI)
Um sistema operacional tem duas funções básicas:
1) Evite que o hardware seja abusado por aplicativos espaço-temporais; forneça KPI ao aplicativo e deixe que o aplicativo o chame para concluir diferentes funções.
2) Fornecer aos aplicativos mecanismos simples e consistentes para controlar dispositivos de hardware de baixo nível complexos e muitas vezes muito díspares.
Um sistema operacional faz principalmente as duas coisas a seguir:
1) Gerenciar diferentes dispositivos de hardware Os computadores podem acessar muitos dispositivos, como scanners de código, equipamentos médicos, máquinas de ultrassom B...
2) Fornecer um ambiente operacional estável para o software Os sistemas operacionais modernos precisam executar muitos programas ao mesmo tempo. Espera-se que esses programas não possam interferir uns nos outros. .
Quando cada aplicativo é executado em um sistema operacional moderno, o sistema operacional fornecerá uma abstração, como se apenas este programa estivesse sendo executado no sistema, e todos os recursos de hardware fossem usados por este programa. Essa ilusão é alcançada pela abstração do conceito de processo, sem dúvida um dos conceitos mais importantes e bem-sucedidos da ciência da computação.
Um processo é uma abstração de um programa em execução pelo sistema operacional. Em outras palavras, o processo pode ser considerado como um processo em execução do programa, ao mesmo tempo, dentro do sistema operacional, o processo é a unidade básica de alocação de recursos; pelo sistema operacional.
Ponto 5
Processos são alguns aplicativos que estão sendo executados em nossos computadores (Quando falamos de um aplicativo, existem dois estados. Quando não está em execução, é um arquivo exe que está no disco rígido; quando está em execução, o exe será. carregado na memória e a CPU executa as instruções dentro).
Processo é a unidade básica de alocação de recursos pelo sistema operacional.
Ponto 6
Como existem muitos processos no sistema, eles precisam ser gerenciados
1) A descrição expressa vários atributos do processo através de estruturas/classes (sistemas convencionais são implementados através de C/C++)
2) A organização conecta as múltiplas estruturas (descrições) acima por meio da estrutura de dados e ainda realiza várias adições, exclusões, modificações e verificações...
Por exemplo, o sistema operacional Linux usa uma estrutura chamada "PCB" para descrever as informações do processo (PCB significa bloco de controle de processo). Simplificando, os vários PCBs mencionados acima são agrupados por meio de uma lista vinculada para criar um processo (duplo). -clique no exe, executando o programa) equivale a criar uma estrutura de PCB. Destruir o processo significa excluir o PCB da lista de conexões e liberar a estrutura do PCB significa percorrer a lista de conexões e exibir as informações correspondentes em sequência. .
PCB é uma estrutura muito complexa que contém muitos atributos. Vamos aprender algumas informações importantes abaixo.
1.Identificador de processo PID
Ao mesmo tempo, o PID é único entre vários processos em uma máquina e não será repetido. Muitas operações internas no sistema encontram o processo correspondente por meio do PID.
2. Ponteiro de memória (um conjunto)
Descreve a área onde as instruções e dados dependentes do processo são armazenados
Quando o sistema operacional executa o exe, ele lê as instruções e os dados do exe e os carrega na memória (endereço de memória).
De lado, mostra que a execução do processo requer determinados recursos de memória.
3. Tabela de descrição de arquivo (tabela/matriz de sequência)
Descreve quais arquivos são abertos pelo processo, correspondentes aos dados do disco rígido
Quando um arquivo é aberto no processo, um item será adicionado à tabela de sequências para facilitar a leitura.
Os itens a seguir determinam em conjunto o cronograma do processo, que está intimamente relacionado ao nosso desenvolvimento diário.
Ponto 7
A chave para o agendamento de processos do sistema operacionalMultiplexação de compartilhamento de tempo
Os sistemas operacionais atuais são todos "sistemas multitarefa" que podem executar vários processos ao mesmo tempo. Os sistemas operacionais anteriores eram chamados de "sistemas de tarefa única" e só podiam executar um processo ao mesmo tempo.
Compreensão da multiplexação de compartilhamento de tempo: em um determinado momento, a CPU executa o processo 1, executa por um tempo, a CPU executa o processo 2 e executa o processo 3 depois de um tempo... Como a velocidade de computação da CPU e a velocidade de comutação são muito rápidas, não é perceptível a olho nu. Do ponto de vista humano, equivale à execução simultânea, "execução simultânea".
Execução paralela: agora com CPUs multi-core, cada núcleo e entre núcleos também podem executar processos diferentes ao mesmo tempo em um nível microscópico.
A simultaneidade ou simultaneidade é agendada uniformemente pelo kernel do sistema operacional e não pode ser percebida por programadores/usuários comuns. Portanto, paralelismo e simultaneidade são geralmente chamados coletivamente de "simultaneidade", e as técnicas de programação correspondentes também são chamadas de "programação simultânea".
4. Status do processo
Estado pronto: o processo pode ser agendado para a CPU executar instruções a qualquer momento
Estado bloqueado: O processo não pode ser programado para executar instruções na CPU. O motivo pelo qual está bloqueado é que ele precisa realizar algumas outras operações, como operações de IO (leitura e gravação de discos rígidos ou leitura e gravação de placas de rede, como. entrada de varredura). Quando a entrada do usuário é necessária, o processo entra no estado de bloqueio)
Os dois estados acima são os dois principais estados do processo. Existem outros estados também, então não entrarei em muitos detalhes...
5. Prioridade do processo
Prioridade é literalmente a ordem dos processos.
6. Contexto do processo
Multiplexação de compartilhamento de tempo Depois de um processo ser executado por um tempo, ele será transferido da CPU. Depois de um tempo, ele continuará a ser executado junto com os resultados da última execução. os resultados intermediários da execução anterior (vários valores no registro da CPU) são salvos para uso na próxima vez.
7. Informações contábeis do processo
Com o apoio de prioridades, os recursos consumidos por diferentes processos podem tornar-se cada vez mais diferentes...
Os atributos acima são usados para suportar a execução simultânea do processo de agendamento.
O sistema operacional aloca recursos de memória usando um modelo espacial – diferentes processos usam diferentes áreas da memória sem interferir uns nos outros.
Conforme mencionado acima, o processo é a menor unidade de alocação de recursos do sistema operacional, o que significa que cada processo não pode sentir a existência um do outro. Esta é a intenção original do sistema operacional de abstrair o conceito de processo, o que provoca. o processo Eles têm "isolamento" um do outro.
No entanto, os aplicativos modernos muitas vezes não conseguem concluir um requisito de negócios complexo por meio de um processo de forma independente. Eles sempre exigem que o processo e o processo cooperem para atingir o objetivo do aplicativo. A necessidade de comunicação entre processos surgiu no momento histórico.
Atualmente existe apenas um método principal de comunicação entre processos em Java, através da rede (socket)
A rede é um mecanismo IPC relativamente especial. Além de suportar a comunicação entre dois processos no mesmo host, também suporta a comunicação entre processos em diferentes hosts dentro da mesma rede.