0% acharam este documento útil (0 voto)
23 visualizações27 páginas

Trabalho S.O

O documento aborda a instalação e configuração do Ubuntu Server em uma máquina virtual, detalhando o processo passo a passo e os comandos utilizados. Além disso, discute a teoria dos sistemas operacionais, incluindo gerenciamento de processos, escalonamento e deadlocks. A experiência prática foi fundamental para consolidar o aprendizado teórico sobre segurança e administração de servidores.

Enviado por

gicaa b
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
23 visualizações27 páginas

Trabalho S.O

O documento aborda a instalação e configuração do Ubuntu Server em uma máquina virtual, detalhando o processo passo a passo e os comandos utilizados. Além disso, discute a teoria dos sistemas operacionais, incluindo gerenciamento de processos, escalonamento e deadlocks. A experiência prática foi fundamental para consolidar o aprendizado teórico sobre segurança e administração de servidores.

Enviado por

gicaa b
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd

P R O JE T O A V A L I A T I V O

Neste trabalho, aprendemos sobre a instalação do Ubuntu Server e a teoria dos


sistemas operacionais. Passo a passo, configuramos, entendendo como cada
componente funciona e interage.

Documentação do Ubuntu Server

Primeiro, fizemos a instalação da versão mais recente da máquina virtual no site do


Virtual Box: https://www.virtualbox.org/wiki/Downloads

Instalamos também os pacotes adicionais para o funcionamento do aplicativo


Com a VM instalada, instalamos a imagem ISO do Ubuntu Server no site oficial
https://ubuntu.com/download/server:
Após a instalação da ISO, criamos e configuramos uma nova máquina virtual no
Virtual Box para a utilização do Linux:

Alocando memória e processador:


Alocando espaço, e sumário:
Após isso, iniciamos a configuração dentro do Linux, definindo o idioma:

Definindo o teclado:
Definindo tipo de instalação, Ubuntu Server padrão:

Configuração de rede padrão já definido pelo Virtual Box:


Sem PROXY:

Procurando espelho:
Alocando todo o espaço já reservado anteriormente, e sumário:

Após a instalação, definimos o usuário da máquina:


Selecionando a opção de instalação OpenSSH (opcional) para possível uso remoto:

Terminando a instalação:
Após a instalação, logamos com o usuário e senha criado:

Uso dos comandos

Principais comandos usados para a configuração após a instalação do Linux:

Primeiro, elevamos o nosso usuário para root, criando uma senha para ele com o
comando “sudo passwd root” e depois alternamos da sessão normal, para a root:
Adicionamos um novo usuário com o comando “sudo adduser” e definimos as
configurações padrão:

Para completar, usamos o comando “cat /etc/passwd” para ver todos os usuários
registrado e usuários de início:
Logo após, usamos o comando “sudo apt update” para atualizar a lista de pacotes
disponíveis, e em seguida, usamos “apt upgrade” para atualizar os pacotes
instalados:

Depois, definimos o IP como fixo, antes, instalamos o pacote que estava faltando com
o comando “apt install net-tools”:
Entramos no diretório para ver nossas configurações “sudo nano 50-cloud-init.yaml”,
e gravamos os dados para alterar:
E alteramos as configurações, com um Ctrl + O, e depois aplicamos com o comando
“sudo netplan apply”:

Finalizando, verificamos o status do Firewall, com o comando “sudo ufw status”:


Referências
Atividades passadas pelo professor no laboratório de linux.

 https://www.youtube.com/watch?v=PaDTA4B7K4U&t=101s (VM)

 https://www.youtube.com/watch?v=kVcWoiaa21c (Linux)

 https://simplificandoredes.com/instalar-ubuntu-server-virtualbox/
#google_vignette (Linux)

Essa experiência não só nos deu habilidades práticas, como a resolução de problemas
e automação de tarefas, mas também nos ajudou a entender a importância da
segurança na administração de servidores. Aplicar esses conhecimentos teóricos na
prática foi essencial para consolidar nosso aprendizado.
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 ao 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 – o


sistema operacional.

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:
1. Preparação dos Ingredientes: Você começa reunindo os ingredientes
necessários para a receita. Isso envolve cortar legumes, medir temperos, etc.
2. 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.
3. Cozimento: Depois de montar os ingredientes, você coloca a panela no
fogão e cozinha a comida até que esteja pronta.
4. 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:
1. 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.
2. Execução: O processo está sendo executado pela CPU no momento. O
escalonador seleciona outro processo.
3. 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.
4. 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:
1. Identificador de Processo (PID): Um número único atribuído a cada
processo pelo sistema operacional para identificação.
2. Estado do Processo: Indica o estado atual do processo (pronto, em
execução, bloqueado, encerrado).
3. Contexto do Processo: Compreende informações importantes para a
execução do processo, como:
o Registradores da CPU: Valores dos registradores do
processador (como PC, SP, etc.).
o Contador de Programa (PC): Endereço da próxima instrução a
ser executada.
o Ponteiro de Pilha (SP): Indica o topo da pilha de execução do
processo.
4. Prioridade do Processo: Nível de prioridade atribuído ao processo,
utilizado pelo escalonador do sistema operacional para decidir sua ordem
de execução.
5. Recursos Alocados: Informações sobre os recursos do sistema alocados
para o processo, como memória, tempo de CPU, identificadores de
arquivos abertos, etc.
6. 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.
7. 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.
8. Informações de Contabilidade: Informações sobre o consumo de
recursos pelo processo, como tempo de CPU utilizado, tempo de espera,
etc.
9. 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:
o CPU- Bound (surto de CPU).
o I/O-Bound (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.
 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 escalonamento circular 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.


 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 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.

Você também pode gostar