Prévia do material em texto
🤍 Projeto avaliativo que irá compor parte da prova final Resumo teórico s.o A teoria dos sistemas operacionais, foi fundamental para compreendermos melhor o que estávamos fazendo na prática da instalação do ubuntu server. Por exemplo, ao entender como o sistema gerencia processos e memória, podemos otimizar a performance do servidor e garantir sua estabilidade. HISTÓRIA E INTRODUÇÃO AOS S.O: Um computador moderno consiste em: Um ou mais processadores. Memória principal. Discos. Impressoras. Diversos dispositivos de entrada e saída. Para gerenciar todos esses componentes é necessária uma camada de software – ( Projeto avaliativo que irá compor parte da prova final ) ( 1 ) o sistema operacional. Revolução do software com o crescente uso efetivo da IA nos últimos anos. PROCESSOS: os processos são fundamentais para o funcionamento de um sistema operacional, permitindo a execução de programas de forma concorrente e compartilhando recursos do sistema de maneira eficiente. Exemplo para entender melhor: Imagine que você está cozinhando uma refeição na sua cozinha. O processo de cozinhar pode ser dividido em várias etapas: Preparação dos Ingredientes Você começa reunindo os ingredientes necessários para a receita. Isso envolve cortar legumes, medir temperos, etc. Montagem dos Ingredientes Você combina os ingredientes preparados de acordo com as instruções da receita. Por exemplo, você coloca a massa em uma panela, adiciona o molho e os vegetais cortados. Cozimento Depois de montar os ingredientes, você coloca a panela no fogão e cozinha a comida até que esteja pronta. Servir Finalmente, você serve a refeição cozida em pratos e a coloca na mesa para ser consumida. Nesse exemplo: Cada etapa representa uma parte do processo de cozinhar, assim como um processo em um sistema operacional é uma parte da execução de um programa. O conjunto completo de etapas, desde a preparação até o serviço, é como um processo completo de cozinhar, assim como um programa completo em execução no computador. Durante cada etapa, diferentes recursos são usados, como facas, panelas, fogão, etc., assim como os recursos (memória, CPU, etc.) são utilizados por um processo em um sistema operacional. Eventos que causam a criação de processos: Inicialização de sistema. Execução de uma chamada de sistema de criação de processo por um processo em execução. Requisição do usuário para criar um novo processo. Inicialização de uma tarefa em lotes. Eventos que causam o término de um processo: Saída normal (voluntária). Saída por erro (voluntária). Erro fatal (involuntário). Cancelamento por outro processo (involuntário). Estados de um processo: Pronto O processo está pronto para ser executado pela CPU, mas ainda não foi selecionado para execução. O processo bloqueia aguardando uma entrada. Execução O processo está sendo executado pela CPU no momento. O escalonador seleciona outro processo. Bloqueado O processo está aguardando algum evento externo para continuar sua execução, como operações de entrada/saída. O escalonador seleciona esse processo. Encerrado O processo concluiu sua execução e foi encerrado, liberando os recursos associados a ele. A entrada torna-se disponível. Campos de um processo: Identificador de Processo PID Um número único atribuído a cada processo pelo sistema operacional para identificação. Estado do Processo Indica o estado atual do processo (pronto, em execução, bloqueado, encerrado). Contexto do Processo Compreende informações importantes para a execução do processo, como: Registradores da CPU Valores dos registradores do processador (como PC, SP, etc.). Contador de Programa PC Endereço da próxima instrução a ser executada. Ponteiro de Pilha SP Indica o topo da pilha de execução do processo. Prioridade do Processo Nível de prioridade atribuído ao processo, utilizado pelo escalonador do sistema operacional para decidir sua ordem de execução. Recursos Alocados Informações sobre os recursos do sistema alocados para o processo, como memória, tempo de CPU, identificadores de arquivos abertos, etc. Informações de Propriedade Nome do usuário ou grupo ao qual o processo pertence, permissões de acesso, entre outros detalhes relacionados à segurança e propriedade do processo. Estado de Sinais Indica se o processo recebeu algum sinal (por exemplo, um sinal de interrupção) e como o processo deve reagir a ele. Informações de Contabilidade Informações sobre o consumo de recursos pelo processo, como tempo de CPU utilizado, tempo de espera, etc. Informações de Memória Espaço de endereço do processo na memória, limites de segmentos de código e dados, entre outros detalhes relacionados à alocação de memória. Interrupção de baixo nível: Uma interrupção de baixo nível é como uma mensagem importante que chega de repente em um escritório muito ocupado. Quando algo importante acontece em um computador, como um mouse sendo clicado ou um teclado sendo pressionado, um sinal chamado de interrupção é enviado para o processador. É como se o computador dissesse: "Ei, pare o que você está fazendo agora e lide com isso imediatamente!". Então, o processador pausa o que está fazendo, atende à interrupção e diz: "Ok, vamos lidar com isso". Ele executa um pequeno pedaço de código chamado de "tratador de interrupção" que sabe o que fazer com a informação recebida, como registrar um clique do mouse ou registrar a tecla pressionada. Depois de lidar com a interrupção, o processador volta ao que estava fazendo antes, como se nada tivesse acontecido, e continua trabalhando normalmente. É assim que o computador lida com coisas importantes que acontecem fora do programa principal que está sendo executado. Thread e multithread é um divisor de processos. Um servidor web multithread é um servidor que utiliza múltiplas threads para lidar com várias solicitações de clientes simultaneamente. Cada solicitação de cliente é tratada por uma thread separada, permitindo que o servidor processe as solicitações de forma concorrente e eficiente. Isso é útil em ambientes onde há um grande volume de solicitações de clientes, pois permite que o servidor atenda a múltiplos clientes ao mesmo tempo. ESCALONAMENTO: O escalonador trabalha com 2 tipos de processos: CPUBound (surto de CPU. I/OBound Surto de I/O. Os algoritmos de escalonamento podem ser: Não Preemptivos - quando um processo é executado até que ele seja bloqueado por um I/O. Preemptivos - quando um processo é executado por um tempo fixo determinado Quantum). Escalonamento em Sistemas em Lote: Algoritmo Primeiro a chegar, primeiro a ser servido FIFO First In, First Out). Esse algoritmo trabalho no formato de uma fila, sendo que o primeiro processo que requisitou a CPU, conseguirá acesso a CPU primeiro. É um algoritmo fácil de entender e programar, além de ser justo. O problema é que ele não é justo com os processos que necessitam de mais CPU Tarefa mais curta primeira (shortest job first). Esse algoritmo separa as tarefas por tamanho, sendo que as menores tarefas serão executadas primeiro. Convém observar que a tarefa mais curta primeira é adequado somente na situação em que todas as tarefas estejam disponíveis ao mesmo tempo. Próximo de menor tempo restante. Esse algoritmo executa o processo cujo tenha o menor tempo para a finalização O tempo de execução deve ser previamente conhecidos. Escalonamento em Sistemas Interativos: Escalonamento por chaveamento circular (round-robin). É implementado uma lista circular de processos que desejam entrar na CPU. A cada processo é atribuído uma fatia de tempo (quantum), igual a todos os processos, que ao ser expirado será realizado a troca de contexto. Esse método é fácil de implementar, contudo, se o quantum for muito grande, os processos ocuparam a CPU sem necessidade, e se ele for muito pequeno o tempo de troca de contexto desperdiçará tempo de CPU. Valor de 20ms a 50ms é um valor razoável de quantum. Escalonamento por prioridades. No escalonamentocircular pressupõe que todos os processos tenham a mesma importância, contudo essa afirmação é falsa. Nesse algoritmo cada processo recebe uma prioridade e ao processo com maior prioridade é concedido a utilização de CPU. Para evitar que os processos de alta prioridade monopolizem a CPU, o escalonador de processos pode diminuir a prioridades dos mesmos. Uma complementação é a atribuição de um quantum máximo para o processo, sendo que uma vez terminado esse quantum, o escalonador escolherá o próximo processo de mais alta prioridade. As prioridades podem ser atribuídas estática ou dinamicamente. Outro método é classificar em classes de prioridades. Podemos criar filas múltiplas com classes de prioridades. Escalonamento por próximo processo mais curto (shortest process next). Realiza uma análise em cada processo, verificando o tempo que cada um precisa para ser finalizado. O processo com o menor tempo de uso da CPU irá para a execução. O grande problema é conseguir realizar a análise de cada processo. Para tentar solucionar o problema, pode-se criar uma estimativa das execuções anteriores. Escalonamento por loteria. sorteio. A ideia básica é fornecer um bilhete de loteria aos processos, cujos prêmios são vários recursos do sistema, como tempo de CPU. Para processos com mais prioridade, o algoritmo pode fornecer bilhetes extras a esses processos. Garante a igualdade entre processos antigos e novos. Escalonamento por fração justa (fair-share). Nesse modelo, o escalonador visa a divisão do tempo de CPU por usuário e não por processo. Sendo assim, o usuário 1 tiver 9 processos e o usuário 2 tive 3 processos, a maior parte do tempo de CPU não estará nas mãos do usuário 1. Escalonamento em Sistemas Tempo Real: o fato tempo é essencial para o escalonador. tempo real crítico: os prazos são absolutos e devem ser cumpridos. tempo real não crítico: alguns descumprimentos dos prazos são aceitáveis. Os algoritmos de tempo real podem ser estáticos ou dinâmicos, sendo os estáticos, pré - configurados pelo administrador, já o escalonador dinâmico seleciona os processos automaticamente. DEADLOCK: O que é deadlock, e quais as suas possíveis causas? O deadlock é quando dois processos estão bloqueados e assim permanecem eternamente. Ele é causado quando dois ou mais threads entram em conflito sobre algum recurso, de modo que nenhuma execução seja possível. O que é recurso e como podemos categorizar? Um recurso pode ser um dispositivo de hardware ou um conjunto de informações, é qualquer coisa que pode ser usada somente por um único processo. Os recursos dividem-se em dois tipos: Recurso Preemptível - é aquele que pode ser tirado do processo que é proprietário sem nenhum problema. Recurso não-Preemptível - é aquele que não pode ser tirado de seu proprietário atual sem causar falha na computação. Quais as 4 condições para o deadlock? Condição de exclusão mútua Um recurso só pode estar alocado para um processo em um determinado momento. Condição de posse e espera (hold and wait) Processos que já possuem algum recurso podem solicitar novos recursos. Condição de não preempção Recursos já alocados não podem ser retirados do processo que os alocou; Somente o processo que alocou o recurso pode liberá-lo. Condição de espera circular Deve ser uma cadeia circular de dois ou mais processos; Cada um está à espera de recurso retido pelo membro seguinte dessa cadeia. Descreva as estratégias para lidar com impasses. Ignorar por completo o problema. Detectar e recuperar o problema: deixar os deadlocks ocorrerem, detectá-los e agir; Evitar dinamicamente o problema: alocação cuidadosa de recursos; Prevenir o problema: negação de uma das quatro condições necessárias para gerar deadlocks; RAID: 1. Conceito Básico de RAID RAID é uma tecnologia que combina vários discos rígidos para melhorar o desempenho, a redundância ou ambos. Os discos são organizados em uma matriz para fornecer benefícios específicos, como tolerância a falhas ou aumento da velocidade de leitura/gravação. 2. Níveis de RAID Existem vários níveis de RAID, cada um com características e benefícios distintos. Os mais comuns incluem: RAID 0 Striping, sem redundância, focado em desempenho. RAID 1 Espelhamento, duplicação dos dados para redundância. RAID 5 Distribuição de dados e paridade, bom desempenho e tolerância a falhas. RAID 6 Similar ao RAID 5, mas com capacidade de sobrevivência a duas falhas de disco. RAID 10 Combinação de RAID 1 e RAID 0, oferecendo redundância e desempenho. 3. Benefícios e Limitações RAID pode oferecer vantagens significativas, como aumento de desempenho, tolerância a falhas e capacidade de recuperação de dados. No entanto, também tem limitações, como custo adicional de hardware, complexidade de configuração e potencial de desempenho reduzido em alguns cenários. 4. Implementação na Engenharia de Software RAID é frequentemente utilizado em sistemas de armazenamento de dados críticos para garantir a disponibilidade e a integridade dos dados. Os engenheiros de software precisam entender os diferentes níveis de RAID e suas aplicações para projetar sistemas de armazenamento robustos e eficientes. 5. Software vs. Hardware RAID RAID pode ser implementado tanto por meio de soluções de software quanto de hardware. As soluções de hardware geralmente oferecem melhor desempenho e são mais fáceis de configurar, mas também são mais caras. As soluções de software são mais flexíveis e econômicas, mas podem exigir mais recursos do sistema. 6. Considerações de Desempenho e Escalabilidade Ao projetar sistemas que usam RAID, os engenheiros de software devem considerar cuidadosamente os requisitos de desempenho e escalabilidade, bem como os custos associados, para escolher a configuração de RAID mais adequada para o aplicativo específico. 7. Manutenção e Monitoramento É crucial monitorar regularmente os sistemas RAID para detectar e corrigir falhas de disco ou outras questões de integridade dos dados. Os engenheiros de software devem implementar práticas robustas de monitoramento e manutenção para garantir a confiabilidade contínua do sistema. OS PRINCIPAIS COMANDOS DOS SISTEMAS OPERACIONAIS: No Windows, o terminal, conhecido como Prompt de Comando ou simplesmente CMD, é a porta de entrada para uma série de comandos poderosos. Aqui estão alguns dos comandos fundamentais: dir: Lista os arquivos e diretórios no diretório atual. cd: Altera o diretório atual. mkdir: Cria um novo diretório. del: Exclui um arquivo. copy: Copia arquivos de um local para outro. ipconfig: Exibe informações sobre configuração de IP. tasklist: Lista os processos em execução. O Linux é conhecido por seu terminal robusto e flexível, permitindo aos usuários uma grande variedade de comandos para manipular o sistema. Aqui estão alguns dos comandos mais comuns: ls: Lista os arquivos e diretórios no diretório atual. cd: Altera o diretório atual. mkdir: Cria um novo diretório. rm: Exclui um arquivo. cp: Copia arquivos e diretórios. ifconfig ou ip addr: Exibe informações sobre configuração de IP. ps: Lista os processos em execução. No macOS, o terminal oferece uma poderosa interface de linha de comando, herdada do Unix, proporcionando aos usuários um conjunto robusto de comandos. Aqui estão alguns dos mais utilizados: ls: Lista os arquivos e diretórios no diretório atual. cd: Altera o diretório atual. mkdir: Cria um novo diretório. rm: Exclui um arquivo. cp: Copia arquivos e diretórios. ifconfig ou ipconfig: Exibe informações sobre configuração de IP. ps: Lista os processos em execução.