O Sistemas Operacionais
Por: YdecRupolo • 24/11/2018 • 5.367 Palavras (22 Páginas) • 281 Visualizações
...
ESTRUTURA DO LINUX
Como citado anteriormente o Linux é um sistema operacional monolítico sendo assim o sistema é estruturado de forma que todas rotinas podem interagir livremente entre si. Para resolver o problema de reconstrução (recopilação) do sistema após alguma modificação como por exemplo a instalação de um novo drive de dispositivo, o kernel do Linux foi estruturado em blocos independentes, compilados fora do núcleo, chamados Loadable Kernel Modules com duas principais características:
Dinamic Linking – modulo do kernel que pode ser carregado mesmo com o kernel em execução facilitando assim a configuração do kernel, um programa usuário pode carregar ou liberar módulos utilizando comando como insmod, modprobr e rmmod.
Stackeble Linking – modulo do kernel que organiza os demais módulos em uma hierarquia onde os módulos individuais casos sejam referenciados por módulos clientes servem como bibliotecas.
A arquitetura do Linux está dividida em três partes bem definidas o próprio kernel o qual é responsável por todas as abstrações relevantes e importantes do sistema realizando a interface direta com o hardware, as bibliotecas do sistema as quais definem as funções que por meio destas os programas e aplicações interagem com kernel e os utilitários do sistema programas que executam tarefas de gerenciamento individual e especializado, o kernel sempre será executado em modo de privilégio sem códigos de usuário embutidos no kernel. [pic 2]
Diagrama Básico da Estrutura Linux
PROCESSOS E THREADS NO LINUX
No sistema operacional Linux não há distinção entre processos e threads, ambos são reconhecidos e identificados por um PID (identificador de processo) tornado assim as threads, conceitualmente um processo. Devido a todas as threads serem implementadas como processos padrão o único diferencial entre processos e threads está em que as threads compartilham os recursos disponíveis. O kernel do Linux utiliza threads especificas para executar operações em segundo plano, essas threads existem apenas no núcleo do kernel e não tem um endereço para requisição, porém são programáveis e antecipadas como processos normais e solicitados pela função kernelthreads().
Para visualização das threads que estão abertas em execução em um sistema Linux usamos o comando TOP, pressionado a tecla ”SHIFT” + H (com esse comando será imprimido na tela os processos e suas threads).
Exemplo do comando top:
# top (Pressionar shift +h)
Pode-se também verificar as threads utilizando o comando “ps”, para a interpretação do resultado deste comando será necessário conhecimento da estrutura de saída e retorno de informações do Linux.
Exemplo do comando “ps”:
# ps –elf
Os PID’s de processos e threads serão mostrados na segunda coluna e na terceira coluna será mostrado o PID dos processos pais.
GERÊNCIA DO PROCESSADOR E PROCESSOS NO LINUX
Considerando que um processo pode ser entendido como um programa ou parte deste em execução e que este processo sendo um elemento ativo, que altera seu estado, a medida que executa um programa, utilizando recursos de hardware de computador como, processador, memória, etc... para efetivar as tarefas esperadas pelo usuário.
Para melhor especificar e entender como o Linux gerencia os processos e o processador se faz necessário compreensão da estrutura de um processo, a qual é formada pelo contexto de hardware, contexto de software e espaço de endereçamento, juntas essas três partes concentram todas as informações necessárias para execução de um programa em sistema multiporgramável de processos concorrentes.
1 Contexto de hardware -processo que armazena o conteúdo dos registradores da CPU (registradores Gerais, de Status, SP – Stack Point e PC), quando um processo está em execução, o seu contexto de hardware está armazenado nos registradores da CPU, o sistema operacional gerencia a troca de contexto implementando concorrência salvando o conteúdo (informações) dos registradores do processo que está deixando a CPU e carregando nos registadores o contexto do novo processo que entrará em execução, esta gerência de troca dos contextos e base fundamental para os sistemas multiprogramáveis.
2 Contexto de software – Especifica as características e limites dos recursos a serem alocados pelos processos, as informações deste contexto ficam armazenadas em um arquivo do sistema operacional – arquivo de usuários: este especifica os limites dos recursos que cada processo pode utilizar, sendo gerenciado pelo administrador do sistema levando em consideração as informações de identificação quotas e privilégios ou direitos.
3 Espaço de endereçamento - área da memória reservada para o processo onde serão armazenadas instruções e dados do programa, cada processo ocupa um espaço da memória bem determinado de forma que nenhum dos processos estoure o endereçamento invadindo o espaço de outro processo.
Tendo em vista que o Linux é um sistema operacional open source, desde seu início devido ao grande número de colaboradores espalhados pelo mundo e empenhados em agregar melhorias e recursos em seu kernel faz com que o Linux tenha um dos melhores conjuntos de algoritmos para o gerenciamento de processos.
Como em todo sistema operacional de compartilhamento (fatiamento) de tempo, teremos a impressão que todos os programas estão sendo executados ao mesmo tempo, para isso o Linux implementa e segue uma série de regras, protocolos para a maior ocupação eficiente do hardware disponibilizado para as aplicações em execução. Os escalonadores de processos decidem no kernel qual a política de escalonamento será implementada, sempre visando o melhor resultado possível.
A primeira função do Linux para escalonamento é a “start kernel” a qual tem a responsabilidade de startar uma thread, sendo este o processo zero, o primeiro dentre todos, após o “start kernel” esse realiza a chamada da função “Init” a qual por sua vez chama o sistema “execve” para rodar e dar início ao processo executável “init” o qual também é conhecido por processo 1, pai de todos os outros processos, sendo o segundo processo a subir e um dos últimos a ser finalizado.
Cada processo no Linux assume um estado
...