Baixe o app para aproveitar ainda mais
Prévia do material em texto
SiStemaS OperaciOnaiS Andreo Costa Ramiro Córdova Júnior OBJETIVOS DO CAPÍTULO • Identificar como funciona o gerenciamento de processos; • Descrever o gerenciamento de memória; • Definir o conceito de gerenciamento de arquivos; • Identificar os sistemas de arquivos dos principais sistemas operacionais; • Instalar o Linux em uma máquina virtual – VirtualBox; • Resolver lista de comandos no Linux. 1 TÓPICOS DE ESTUDO Componentes de um sistema operacional • Gerência de processos. • Gerência de memória. • Modelo de memória de processo. • Gerenciamento de arquivo. CAPÍTULO 3 Sistema operacional Ramiro Córdova Júnior 2 Sistemas de arquivos em sistemas operacionais • Sistemas de arquivos dos principais sistemas operacionais. • Sistemas de arquivos para Windows. • Sistemas de arquivos para Linux. • Instalação de máquinas virtuais Linux. • Comandos do sistema operacional Linux. 55Sistemas Operacionais 3.1. Componentes de um sistema operacional Para que os usuários possam utilizar um computador, é necessário que ele possua um sistema operacional instalado e que esse sistema operacional seja constituído de vários componentes, como o sistema de arquivos, sistema de gerenciamento de memória, siste- ma que cuida da alocação do processador, sistema que cuida dos periféricos de entrada e saída, entre outros. Todos esses componentes devem funcionar de maneira organizada para que o sistema operacional possa desempenhar as tarefas que se propõe. Caso isso não ocorra, o usuário poderá ter problemas na utilização do computador. Neste capítulo, você vai estudar os principais componentes de um sistema operacional. 3.1.1. Gerência de processos Um sistema operacional é o que gerencia todos os processos e recursos do computa- dor em um sistema. É ele o responsável por organizar absolutamente tudo, evitando que existam conflitos entre os recursos. A gerência de processos é responsável pelas seguintes áreas do sistema operacional, entre outras: • Algoritmos e estruturas de dados para implementar processos e abstrações de recursos. • Escalonamento e sincronização de processos. • Estratégia para tratamento de bloqueios perpétuos (deadlocks). • Parte dos mecanismos de proteção e segurança. Processos Ao acessar o gerenciador de tarefas do Windows, você já deve ter se deparado com a aba Processos. Ali, aparecem diversos processos que estão sendo executados neste momen- to no sistema operacional, podendo ali mesmo encerrar o processo. Alguns processos não se- rão permitidos, pois são fundamentais para o funcionamento do sistema operacional. Sistemas Operacionais56 Figura 1. Gerenciador de tarefas do Windows Esclarecimento Processo é diferente de programa, visto que um programa pode ser repetida mente executado, gerando vários processos. Os processos podem ser classificados em: • I/O bound: delimitados pelo tempo de I/O. Gasta mais tempo fazendo I/O do que computações, muitas vezes pequenas rajadas (bursts) de CPU. • CPU bound: delimitados pelo tempo e CPU. Gasta a maior parte do tempo fazen- do computações. Realiza poucas rajadas longas de CPU. O bloco de controle de processo (em inglês: Proccess control block ou PCB) é uma es- trutura de dados no núcleo do sistema operacional que serve para armazenar a informação necessária para tratar um determinado processo. 57Sistemas Operacionais Figura 2. Bloco de controle Como o PCB contém informações críticas do processo, ele deve ficar armazenado em uma área da memória protegida do acesso de usuários. Em alguns sistemas operacionais, o PCB é alocado no início da pilha do núcleo do processo, já que é uma localização conve- nientemente protegida. Nele, estão contidas as seguintes informações: • Estado do processo. • Valor do PC (apontador de instruções). • Área para guardar valor dos registradores. • Informação para escalonamento do processo. • Informação para gerenciamento de memória. • Informação para contabilidade do processo. • Status das operações de I/O (ex.: arquivos usados). 3.1.2. Gerência de memória Quando o sistema operacional gerencia a memória do computador, duas grandes ta- refas precisam ser cumpridas. Cada processo deve ter memória suficiente para ser execu- tado. Ele não pode utilizar a memória de outro processo e outro processo também não pode utilizar a sua memória. Os diferentes tipos de memória no sistema devem ser bem utilizados para que cada processo seja executado de forma eficaz. Para realizar a primeira tarefa, o sistema operacional tem de definir os limites de me- mória para cada tipo de software e aplicativo. Sistemas Operacionais58 A maioria dos computadores trabalha com o conceito de hierarquia de memória, pos- suindo uma pequena quantidade de memória cache, muito rápida, uma quantidade de me- mória principal (RAM) e uma quantidade muito grande de memória de armazenamento em disco (HD), considerada lenta. O problema para o gerenciamento de memória é que os pro- gramas atuais são muito grandes para rodarem completamente na memória cache. O ge- renciador de memória deve ser capaz de controlar parte da memória que está em uso e quais não estão, alocar memória para processos quando eles necessitam e retirar quando eles terminam, mas, principalmente, gerenciar a troca entre a memória principal e o disco quando a memória principal é muito pequena para armazenar todos os processos. Existem dois tipos de memória principal: a memória lógica e a memória física. A memória lógica é aquela manipulada pelos programas: ela é visível para os programas. Sempre que um programa necessita alocar um espaço na memória esse espaço é alocado em memória lógica. A memória física é a memória implementada pelos circuitos integra- dos. É nela que os espaços alocados em memória lógica vão realmente residir, portanto, a memória física geralmente tem tamanho menor do que a memória lógica. Para isso, é ne- cessário realizar uma tradução de endereços lógicos para endereços físicos, pois, assim, um programa que aloca uma memória lógica pode ter de fato uma memória física alocada para si. Esse processo de tradução de endereços lógicos em endereços físicos é realizado por uma unidade de gerência de memória chamada Memory Management Unit (MMU). 3.1.3. Modelo de memória de processo Para que um programa seja executado, ele precisa ser transformado em processo(s). Assim, é necessário alocar o descritor de processos, alocar espaço na memória para o códi- go, os dados, que é área onde as variáveis são alocadas – globais, locais estáticas, buffers internos e a pilha que possui o HEAP, área onde se localizam as variáveis dinâmicas e o STACK, endereços de retorno de chamadas e parâmetros de funções. A atribuição de endereço físico para as áreas de código e áreas de dados pode ser fei- ta de três formas: em tempo de compilação, em tempo de carga e em tempo de execução. Em tempo de compilação, o programador já faz a conversão de endereço lógico em ende- reço físico, pois ele tem conhecimento de qual área da memória irá utilizar. Em tempo de carga, o código precisa ser realocável, de forma que todas as referências a memória sejam corrigidas para que o endereço de carga corresponda. Em tempo de execução, tem-se o có- digo absoluto, e é realizada uma relocação dinâmica usando a MMU, não sendo necessário corrigir os endereços no momento da carga do programa em memória. 59Sistemas Operacionais 3.1.4. Gerenciamento de arquivo O que é arquivo? Todos os dados armazenados em um computador precisam ser armazenados em fi- cheiros fechados, denominados de arquivos. Assim como em um arquivo físico, que tem pastas de documentos em uma empresa, no computador, o armazenamento também se dá por meio de arquivos, porém de um jeito diferente dos materiais físicos: no material físico, encontramos, dentro do arquivo, várias pastas, e, dentro dessas pastas, vários documentos. Virtualmente, podemos dizer que o nosso arquivo é um móvel para guardar pastas:seria nossa mídia de armazenamento digital. Existem diversos tipos de arquivos, como documentos de texto, planilhas de cálculos, imagens, entre outros. Todos esses são arquivos e são gravados em algum tipo de mídia, para posteriormente acessá-los. Sem uma mídia para gravação, o documento permanece residente em memória RAM, e, ao desligar o computador, tudo é apagado. Por isso é im- portante salvar os arquivos. Os arquivos comumente são salvos em discos rígidos no computador, mas podem ser salvos em outras mídias. Figura 3. Discos rígidos Os arquivos excluídos do sistema operacional, na realidade, não são excluídos da mí- dia em que foram gravados, apenas são removidos do índice. No pen-drive, para sobrescre- ver sobre alguma área, apaga em blocos, portanto, se o pen-drive está formatado em um sistema de arquivos com unidades de alocações menores que os blocos, ele salva o conteú- do na controladora, formata a área, e grava com as devidas modificações. Sistemas Operacionais60 Cada bloco pode variar conforme o tamanho do pen-drive, e por isto, quanto maior sua capacidade, maior será também sua taxa de transferência, porque os blocos serão maiores, e as controladoras serão mais eficazes para criar e reconstruir os blocos. Partição Assim como cada sistema operacional pode funcionar apenas com sua estrutura, e faz isso melhor com sua própria estrutura, também se encarrega de ter o sistema de arqui- vos aprimorados para trabalhar com discos que estejam preparados para o próprio sistema. Ou seja, particionar o disco é como “dizer ao disco rígido” que ele está trabalhando com um determinado tipo de sistema operacional. Atualmente, versões do Linux incorporam, em seu ambiente, a funcionalidade de ler e gravar em vários tipos de partições comerciais existentes, porém, não restam dúvidas de que as melhores partições para o Linux trabalhar são as dele próprias, devido sua estrutura familiar para trabalhar com os discos e com o gerenciamento geral do sistema operacional. Partições primárias são partições próprias para instalar o sistema operacional e po- dem ser carregadas com a inicialização do sistema. Já as partições estendidas oferecem su- porte para dividir o disco em várias unidades lógicas de armazenamento, podendo ocupar espaços em disco perdidos para novas unidades de armazenamento de dados. Gravação de arquivos Os arquivos, ao serem gravados no disco, não são gravados sequencialmente, apenas quando possível. Dessa forma, não são organizados por nome, por data, ou qualquer que seja um atributo, isto faria com que seu sistema tivesse que reconstruir todos os dados de seu disco rígido. Supondo que seu disco tenha 500 Gb, com taxa de transferência de 80 Mb/s e a orga- nização dos arquivos fosse definida pelo nome, e você criou um arquivo do Word iniciando com a letra “A”, todos os nomes de arquivos depois deste “A” teriam que ser movidos para seu arquivo ser gravado. Supondo que após este “A”, haja 300 Gb em dados gravados, leva- ria cerca de 64 minutos para salvar seu arquivo. 61Sistemas Operacionais Indexação Quando os arquivos são salvos, existem formas de encontrá-los rapidamente. Desde o Windows XP, foi adicionada a função de indexação dos arquivos, que foi aprimorada ape- nas no Windows Vista, em que o usuário tem rapidamente o que está procurando somente a partir do menu iniciar, não sendo mais necessária a ferramenta de busca dos sistemas an- teriores, que buscavam em toda a estrutura do disco procurando arquivos. Na indexação, ponteiros são salvos em um arquivo que, por sua vez, é pequeno. Cada alteração nesse arquivo move os ponteiros anteriores, e o arquivo de indexação é constan- temente atualizado e totalmente organizado, tornando fácil encontrar outros tipos de ar- quivo pelo sistema de arquivos. Toda vez que um novo arquivo ou dado é salvo pelo usuário e esse arquivo ainda não foi alocado em disco, o sistema operacional procura na hierarquia de arquivos, se há algu- ma entrada de unidade de alocação vazia para conseguir gravá-lo. Quando um computa- dor é novo, normalmente o disco não está fragmentado e não tem “buracos”. Ao começar a gravar e apagar arquivos, e dependendo da quantidade de arquivos, a situação vai se agra- vando dia após dia. O sistema de arquivos HPFS tenta encontrar unidades de alocação, ao máximo se- quenciais, ou seja, a fragmentação, neste tipo de partição, é algo que nem é possível de perceber. Mesmo o disco estando fragmentado, ao encontrar setores utilizados que são pe- quenos demais, que estão no meio do caminho, ele copia para outras unidades de alocação e aloca o novo arquivo no novo espaço. O NTFS faz um processo similar: ele até encontra as unidades de alocação, mas não fica buscando muito, então, encontrando as primeiras uni- dades de alocação entre 5 e 10 buscas, dependendo da velocidade do disco e sua fragmentação, grava a partir dessa que é a maior. Entretanto, se o disco está muito fragmentado e o arquivo for dividido, ele não realiza a busca para gravar o restante do arquivo, tornando-o sequenciais entre “buracos” encontrados no disco. Sistemas Operacionais62 3.2. Sistemas de arquivos em sistemas operacionais Você sabia que todas as informações que são armazenadas definitivamente em um computador, ou seja, que não se perdem com o desligamento, precisam estar armazenadas dentro de uma estrutura para posteriormente ser possível recuperá-las? Isso ocorre com todas as mídias de armazenamento, pois necessitam dessa estrutura lógica de organização dos arquivos e diretórios. Essa estrutura é chamada de sistemas de arquivos e varia confor- me o tipo de mídia e sistema operacional utilizado. Neste capítulo, você vai conhecer detalhadamente alguns sistemas de arquivos, bem como a instalaçao do Linux e alguns comandos de manipulação de arquivos. 3.2.1. Sistemas de arquivos dos principais sistemas operacionais Um sistema de arquivos é um conjunto de estruturas lógicas e de rotinas, que per- mitem ao sistema operacional controlar o acesso aos dados armazenados em dispostivos de memória de massa (discos). Diferentes sistemas operacionais usam diferentes sistemas de arquivos. Conforme cresce a capacidade dos discos e aumenta o volume de arquivos e acessos, essa tarefa torna-se mais e mais complicada, exigindo o uso de sistemas de arqui- vos cada vez mais complexos e robustos, ou seja, o sistema de arquivos varia conforme o sistema operacional utilizado e conforme a tecnologia dos discos. 3.2.2. Sistemas de arquivos para Windows O sistema operacional Windows é compatível com alguns sistemas de arquivos dife- rentes. O suporte aos tipos de sistemas de arquivos varia conforme a versão do sistema operacional Windows. Os sistemas de arquivos utilizados nas diferentes do Windows são: FAT (FAT 16 e FAT 32), NTFS e HPFS. Sistema de arquivos FAT Os sistemas de arquivo FAT foram os primeiros a serem criados e estão divididos em FAT (ou FAT 16) e FAT 32. A sigla FAT significa File Allocation Table ou tabela de alocação ele arquivos. A primeira versão do FAT foi criada para funcionar como sistema de arquivos oficial do MS-DOS no início da década de 1980 e foi usada como padrão até o lançamento do windows 95. 63Sistemas Operacionais O sistema FAT é um sistema de 16 bits que permite identificar um arquivo com um nome de até 8 caracteres e três extensões de caracteres. Por utilizar 16 bits, o sistema de arquivos FAT é um sistema 16 pode endereçar 65536 clusters, pois um cluser se compõe de um número fixo (4, 8, 16, 32, etc.) de setores de 512 bytes contíguos. Sendo assim, o tama- nho máximo de uma partição FAT pode ser determinado multiplicando o número de grupos pelo tamanho de um cluster. Com grupos de 32 KB, o tamanho máximo de uma partição FAT é, então, de 2 G B. A tabela de alocação de arquivos é uma lista de valores digitais que descrevem a alo- cação dos grupos de uma partição, ou seja, o estado de cada clusterda partição em que se encontra. Na verdade, a tabela de alocação corresponde a um cluster, em que cada célula con- tém um número que indica se um arquivo está utilizando o cluster e, se for caso disso, isso in- dicará a localização do próximo cluster no arquivo. Dessa forma, obtém-se uma cadeia FAT, ou seja, uma lista encadeada de referencias que apontam para os clusters sucessivos, até o fi- nal do arquivo. Cada entrada do FAT tem um comprimento de 16 ou 32 bits (dependendo, se for um FAT16 ou um FAT32). As duas primeiras entradas armazenam informações na própria tabela, enquanto as entradas seguintes fazem referência aos grupos. Certas entradas podem conter valores que indiquem o estado do cluster específico. Assim, o valor 0000 indica que você não está usando o cluster, FFF7 indica o grupo como defeituoso, por isso não será usado, e os valores compreendidos entre FFF8 e FFFF especificam que o duster contém o final de um arquivo. Na verdade, cada partição contém duas cópias da tabela, armazenadas de maneira contígua no disco, para poder recuperá-la se, por acaso, a primeira cópia estiver corrompida. O FAT32, sucessor da FAT 16, é um sistema que começou a ser utilizado por volta de 1994 no primeiro sistema operacional gráfico da Microsoft, o Windows 95. Depois, foi uti- liza do também pelos seus sucessores Windows 98 (1997) e Windows Millenium Edition (1999). Após essas versões, começou a ser substituído pelo sistema de arquivos NTFS (New Technology File System), mas ainda assim possui compatibilidade com o Windows 2000 (2000) e Windows XP (2002). O FAT32 é um tipo de sistema de arquivos bem antigo e bastante usado até hoje na formatação de pen-drives e flash drives. Por ser usado há tanto tempo, ele tem a vantagem de ser compatível com praticamente todos os tipos de sistemas operacionais e aparelhos eletrônicos. É compatível com partições de até 8 TB (mais do que suficiente para pen- drives), mas não consegue suportar arquivos individuais maiores do que 4 GB, o que é uma grande desvantagem hoje em dia. Uma diferença visível entre as duas versões é que o FAT32 suporta nomes de arquivos longos (até 256 caracteres), enquanto o FAT16 suporta apenas nomes de arquivos curtos (até 8 caracteres + extensão). Um dos maiores problemas do FAT diz respeito à segurança, pois nesse sistema os arquivos podem ser lidos ou escritos por qualquer usuário do sistema. Sistemas Operacionais64 O sistema de arquivos FAT não trabalha diretamente com cada setor, mas sim com um grupo de setores. Esse grupo é chamado de cluster (ou unidade de alocação). Se, por exemplo, um disco com setor de 512 bytes, tiver 5 KB de tamanho, ele terá 10 setores e 5 clusters, se cada cluster ocupar dois setores. Sendo assim, quando o FAT precisar aces- sar um determinado setor, primeiro ele descobre em qual cluster se encontra. É importante ressaltar que tanto o FAT quanto o FAT32 trabalham de acordo com esse princípio. Sistema de arquivos NTFS O sistema de arquivos NTFS é o sistema pelo qual os arquivos são armazenados e re- cuperados a partir de um sistema operacional baseado em Windows NT. Ele fornece aces- so a arquivos e controle, define permissões de usuário, mantém logs de transação em caso de falha no disco e suporta volumes que abrangem para aplicações maiores. O NTFS subs- titui o sistema de arquivos FAT no Windows 2000, Windows Server 2003, Windows XP e Windows Vista e seus sucessores. Algumas características de armazenamento do padrão NTFS são: • Tamanho da Unidade Básica de Informação: 4 KB. • Tamanho máximo do nome do arquivo: 255 letras (Unicode). • Maior data dos arquivos: 28/05/60056 (60 mil anos). No NTFS todo o conteúdo do arquivo, incluindo nome, data de criação e permissões de acesso, é armazenado como sendo um metadado. Os arquivos são armazenados em uma estrutura denominada tabela mestre de arquivos, e a estrutura de dados que o NTFS utiliza para organizar os arquivos é a árvore B+, que mesmo sendo muito complexa para ser desenvolvida, fornece um ótimo desempenho nas operações de busca dos arquivos. Sistema de arquivos HPFS O sistema de arquivos HPFS mantém a organização de diretório do FAT, mas adiciona classificação automática do diretório baseado em nomes de arquivo. Os nomes de arquivo são estendidos para até 254 caracteres de byte duplo. O HPFS também permite que um ar- quivo seja composto de "dados" e atributos especiais para permitir uma maior flexibilidade em termos de suporte a outras convenções de nomeação e segurança. Além disso, a unida- de de alocação é alterada de clusters para setores físicos (512 bytes), o que reduz o espaço em disco perdido. 65Sistemas Operacionais No HPFS, as entradas de diretório mantêm mais informações do que o FAT. Assim como o arquivo de atributo, isso inclui informações sobre as datas e horas de modificação, criação e acesso. Em vez de apontarem para o primeiro cluster de arquivos, as entradas de diretório no HPFS apontam para o FNODE. O FNODE pode conter os dados do arquivo ou ponteiros que podem apontar para os dados de arquivo ou outras estruturas que apontarão eventualmente para os dados de arquivos. O HPFS organiza uma unidade em uma série de bandas de 8 MB e, sempre que possí- vel, um arquivo é contido dentro de uma dessas bandas. Entre cada uma dessas bandas, es- tão 2K bitmaps de alocação, que mantêm um registro de quais setores dentro de uma banda foram ou não alocados. A banda aumenta o desempenho, pois o cabeçalho da unidade não precisa retornar para o topo lógico (geralmente o cilindro 0) do disco, mas sim para o bitmap de alocação de banda mais próximo para determinar onde um arquivo será armazenado. 3.2.3. Sistemas de arquivos para Linux O Linux é um sistema operacional que dá suporte a diversos sistemas de arquivos. A família de sistemas de arquivos ext tem sido nativa para o Linux desde os seus primeiros dias e tem sido a mais utilizada. Atualmente o sistema de arquivos mais utilizado é o ext4, mas existem suas versões antecessoras. Sistema de arquivos EXT Os arquivos EXT foram criados para o UNIX e acabaram por ser a base de criação dos sistemas operacionais do Linux. O Sistema de arquivos EXT2 foi projetado e implementa- do para corrigir as falhas do Ext e prover um sistema que respeitasse a semântica UNIX. A influência do UNIX pode ser vista, por exemplo, na utilização de grupos de blocos, que são análogos aos grupos de cilindros utilizados pelo FFS. O bloco, que consiste em um conjunto de setores (cada setor tem 512 bytes), é a menor unidade de alocação para o Ext2. O tama- nho pode ser de 1024, 2048 ou 4096 bytes e é definido na formatação. O ext2, assim como todos os sistemas de arquivos derivados do UNIX, utiliza o conceito básico de que os arqui- vos são mapeados por inodes e os diretórios são simplesmente arquivos que contém uma lista de entradas e de dispositivos que poderão ser acessados. O Ext3 (third extended filesystem) é um sistema de arquivos desenvolvido para o UNIX, que tira alguns recursos do Ext2, dos quais o mais visível é o journaling. O sistema de arquivos Ext3 é um sistema de arquivos que é comumente usada pelo kernel Linux. Sua principal vantagem sobre ext2 é a melhora na confiabilidade e o fato de eliminar a necessi- dade de verificar o sistema de arquivos após um desligamento abrupto. Sistemas Operacionais66 Embora o seu desempenho (velocidade) seja menos atrativo do que o de outros sis- temas de arquivos (como ReiserFS e XFS), ele tem a importante vantagem de permitir que seja feita a atualização direta a partir de um sistema com ext2, sem a necessidade de realizar um backup e restaurar posteriormente os dados, bem como o menor consumo de processa mento. Já o sistema de arquivos Ext4 é considerado a evolução do sistema de arquivos mais usados no Linux, o Ext3. De muitas maneiras, Ext4 apresenta melhoria em relação ao Ext13, sendo o Ext3, muitas melhorias em relação aoExt2. No Ext3 foi principalmente a adição de journaling sobre o Ext2, mas Ext4 teve mudanças importantes na estrutura do sistema de arquivos destinado ao armazenamento de dados. O resultado é um sistema de arquivos com um design aperfeiçoado, melhor performance, confiável e com muitos recur- sos. É atualmente o sistema de arquivos mais utilizado em sistemas operacionais Linux. 3.2.4. Instalação de máquinas virtuais Linux Para realizar a instalação de uma máquina virtual Linux, é necessário utilizar um software hospedeiro de máquina virtual. Existem dois softwares hospedeiros bastante co- muns e gratuitos que são o VirtualBox e o VMware. Para exemplificar a instalação será uti- lizado o software hospedeiro VirtualBox e com o entendimento do processo no VirtualBox é possível realizar a instalação também do VMware. Para realizar a instalação do VirtualBox, inicialmente é necessário a realização do download do arquivo de instalação no site oficial do VirtualBox. Uma vez que foi efetua- do o download do instalador do VirtualBox, basta executá-lo no computador. Assim que o software hospedeiro está instalado, é possível realizar a instalação dos sistemas operacio- nais convidados. Para a instalação da máquina virtual Linux, é importante também ter o ar- quivo de instalação do sistema operacional (.lSO) salvo no computador. Dica Você pode fazer download do arquivo de instalação diretamente no site do VirtualBox: acesse o link ou o código a seguir: goo.gl/B7uV 67Sistemas Operacionais Na interface do VirtualBox, clique no botão Novo para abrir o assistente de criação de máquinas virtuais. Digite um nome para a máquina virtual no campo Nome, selecione o sis- tema operacional a ser instalado (Linux) em Tipo, escolha Linux no campo versão e clique em Avançar. Deixe o tamanho da memória reservado recomendado pelo VirtualBox para a máquina virtual e clique em Avançar. Clique em Criar para criar um disco rígido virtual, mantenha a opção padrão marcada e clique em Avançar. Escolha se o novo arquivo da uni- dade do disco rígido virtual crescerá de acordo com o uso (reserva dinâmica) ou se deve- rá ser criado com um tamanho máximo (tamanho fixo) e clique em Avançar. Deixe o nome que o VirtualBox sugere para o disco rígido virtual, bem como o seu tamanho e clique em Criar. Sua máquina virtual aparecerá na interface do VirtualBox. O próximo passo é definir a sequência de inicialização da máquina virtual, com o ob- jetivo de executar o instalador do Linux. Para isso é necessário selecionar a máquina virtual e ir em Configurações > Armazenamento. Deve ser configurada a sequência de inicialização indicando a leiltura do arquivo de instalação do sistema operacional Linux. Após essa eta- pa, é necessário iniciar a máquina virtual e deverá ser carregado o software de instalação do sistema operacional Linux. O assistente de instalação é bem simples, mas merece aten- ção especial na etapa de configuração do disco para instalação do sistema. Nesta etapa, é necessário realizar o particionamento do disco, que pode ser realizado automaticamente pelo sistema operacional. Feito isso, basta ir avançando até a conclusão da instalação do sistema operacional. 3.2.5. Comandos do sistema operacional Linux O sistema operacional Linux possui uma vasta lista de comandos. Porém, existem al- guns que são essenciais para um usuário do sistema operacional Linux. Esses comandos são indicados para aqueles que não conseguem suprir suas necessidades por meio da inter- face gráfica ou que estejam usando o sistema em modo texto. Os Quadros 1 a 9 apresen- tam as listas resumidas de comandos Linux, separadas por categorias. Quadro 1. Comandos dos sistema de arquivos. Sistemas Operacionais68 Quadro 2. Comandos de manipulação de arquivos e diretórios Quadro 3. Comandos de edição e visualização de arquivos Quadro 4. Comandos para compressão de arquivos, backup e restauração Quadro 5. Comandos para gerenciamento de processos e aplicativos 69Sistemas Operacionais Quadro 6. Comandos de rede Quadro 7. Comandos que alteram o modo de execução do sistema Quadro 8. Comandos que apresentam informações sobre o sistema Sistemas Operacionais70 Quadro 9. Comandos para o gerenciamento dos usuários 73Sistemas Operacionais OBJETIVOS DO CAPÍTULO • Compreender a função de um processo na dinâmica de funcionamento do sistema operacional; • Entender os tipos de algoritmos utilizados para escalonamento de processos; • Compreender a função das threads; • Definir a Hierarquia de armazenamento de um computador; • Identificar os modos de gerenciamento de memória e suas características; • Identificar as atividades e responsabilidades da administração da produção. 1 TÓPICOS DE ESTUDO Gerência de processos, identificando seus aspectos em sistemas operacionais • Processo. • Gerência de Processos. CAPÍTULO 4 Gerência Ramiro Córdova Júnior 2 Gerência de Memória • Hierarquia de armazenamento. • Gerenciamento de memória. 75Sistemas Operacionais 4.1. Introdução Os computadores modernos têm como característica a capacidade de realizar várias tarefas ao mesmo tempo, ou seja, é capaz de executar um programa utilitário e realizar uma leitura no disco e apresentar um texto na tela ao mesmo tempo. Estes tipos de siste- mas são chamados de sistema multiprogramados. A multiprogramação nos sistemas é capaz de permitir que o processador execute mais de um programa ao mesmo tempo, pois realiza saltos dezenas ou centenas de vezes em milissegundos. Para o usuário final esse tempo deixa a sensação que a execução é no mesmo instante de tempo. Porém, em cada um desses pequenos intervalos de tempo são executados processos, que são os responsáveis por essa sensação de paralelismo por parte do usuário. A gerência dos vários processos a serem executados é uma tarefa um tanto quanto complexa para o sistema operacional. Além da gerência dos processos que estão em execu- ção o sistema operacional gerencia o acesso aos recursos necessários para execução ade- quada de cada processo. Este controle é realizado por um módulo do sistema operacional que supervisio- na a execução dos programas e a alocação dos recursos necessários, além de controlar a interação da CPU com os diversos processos. Este capítulo apresentará uma visão ge- ral sobre o gerenciamento de processos e sua relação com o funcionamento dos sistemas operacionais. 4.1.1. Processo Um processo pode ser definido como a abstração de um programa que está sendo executado. Os programas executados por um usuário reúnem diversas instruções e coman- dos, porém, são os processos que efetivamente executam esses comandos. Por exemplo, o editor o navegador WEB Mozila Firefox, que executa uma nova tarefa a cada aba aberta no navegador. Essa medida permite que cada aba seja gerenciada individualmente e, mesmo que uma trave, as outras continuam trabalhando normalmente. Os processos representam tarefas em execução, mas nem todas têm relação direta com algum programa utilizado pelo usuário. Muitas delas são executadas em pano de fun- do, também chamada de execução em background, e mantêm o os serviços de gerencia- mento de redes, memória, disco, checagem antivírus, etc. Analisando assim, pode-se dizer que processos são programas que executam alguma ação e que possuem um controle que pode ser do usuário, do programa em execução ou do sistema operacional. Sistemas Operacionais76 Um processo é composto por três partes chamadas de contexto de hardware, con- texto de software e espaço de endereçamento. Juntas, essas três partes contém as infor- mações necessárias para que um programa possa ser rodado pelo sistema operacional. A figura 1 ilustra essa divisão interna de um processo. Figura 1. Três componentes de um processo Programa Espaço de endereçamento Contexto de So�ware Contexto de Hardware Em sistemas operacionais, uma troca de contexto é o processo computacional de ar- mazenar e restauraro estado (contexto) de uma CPU de forma que múltiplos processos possam compartilhar uma única instância de CPU. É garantido que quando o contexto an- terior armazenado seja restaurado, o ponto de execução volte ao mesmo estado que foi deixado durante o armazenamento. O contexto de hardware é composto por registradores que carregam as informações necessárias com relação ao hardware utilizado pelo processo. No momento em que ocorre a troca de processo, o sistema operacional salva as informações do contexto de hardware do processo. No contexto de software são definidas as características e limites dos recursos que podem ser alocados pelo processo. Essas informações são número máximo de arquivos abertos simultaneamente, prioridade de execução e o tamanho do buffer. 77Sistemas Operacionais 4.1.2. Gerência de Processos Para que o sistema operacional consiga gerenciar os processo a serem executados é utilizado pelo sistema um descritor de processo, também conhecido como bloco de contro- le de processo (PCB). O descritor permite o monitoramento e controle da execução de um processo. Os sistemas operacionais criam identificadores de processos que fazem referên- cia a um descritor de processo. Uma estrutura PCB contém as seguintes informações: • Estado do processo; • Valor do apontador de instruções; • Espaço de armazenamento dos valores de registradores; • Informações para escalonamento do processo; • Informações para o gerenciamento de memória; • Informações para contabilidade do processo; • Status das operações de Entrada e Saída. Endereçamento de processos Na gerência de processos existe uma área chamada de espaço de endereçamento, que é um conjunto de posições de memória que um processo pode endereçar. Ou seja, o espaço de endereçamento é a área de memória do processo onde o programa será execu- tado, além do espaço para os dados que são utilizados pelo programa. Estados dos processos Os processos podem assumir basicamente três estados: • Execução: este estado ocorre quando o processo está sendo executado. • Pronto: este estado ocorre quanto o processo aguarda uma oportunidade para en- trar em execução. • Espera ou bloqueado: este estado ocorre quando o processo aguarda algum evento externo ou por algum recurso para prosseguir com o processamento. Para que um processo possa ser escalado para execução é necessário que ele esteja no estado de pronto. Um processo que está em execução pode perder o controle da CPU de forma voluntária quando ele realiza uma operação de entrada/saída. Também pode perder o controle de forma involuntária quando por algum critério de gerência o sistema Sistemas Operacionais78 operacional retoma o controle da CPU. Os processos em estado de espera permanecem nessa situação até que retornem ao estado de pronto. A figura 2 apresenta um diagrama de estados de um processo. Figura 2. Diagrama de estados de um processo interrompido admito escalado concluido suspenso atendido terminado execução pronto espera novo Threads Um thread é um pequeno programa que trabalha como um “subprograma” indepen- dente de um programa maior, executando alguma tarefa específica. Um programa dividido em vários threads pode rodar mais rápido pois várias tarefas podem ser executadas simul- taneamente. Os vários threads de um programa podem trocar dados entre si e comparti- lhar o mesmo espaço de memória e os mesmos recursos do sistema. Existem diferenças na arquitetura dos sistemas operacionais que refletem na execu- ção de processos e threads. Por exemplo, o Windows têm mais facilidade para gerenciar programas com apenas um processo e vários threads, do que com vários processos e pou- cos threads, pois no Windows o tempo para criar um processo e alternar entre eles é mui- to grande. O Linux e outros sistemas baseados no Unix por sua vez é capaz de criar novos processos rapidamente, o que explica o fato de alguns aplicativos, como por exemplo o Apache, rodarem muito mais rápido no Linux do que no Windows, ao serem portados para ele. Porém, ao serem alterados, os mesmos programas podem apresentar um desempenho semelhante nos dois sistemas. Escalonamento de Processos O escalonamento de processos tem como objetivo manter a CPU ocupada a maior parte do tempo, aumentando assim a capacidade de atendimento a processos por parte do sistema. Além disso, o escalonamento de processos se reflete diretamente nos tempos de resposta dos programas para os usuários. 79Sistemas Operacionais Estes objetivos acabam por vezes sendo conflitantes e os sistemas operacionais pre- cisam levar em consideração as características dos processos em execução, a disponibi- lidade de recursos e as características da instalação, para tentar atender os objetivos do escalonamento. Existe um módulo dos sistemas operacionais chamado de scheduler, que é responsá- vel pelo escalonamento dos processos. Existem diferentes tipos de algoritmos utilizados para o escalonamento. Estes algoritmos apresentam características próprias variando o critério de escolha do próximo processo a receber o controle da CPU. Existem basicamente dois tipos de algoritmos para escalonamento de processos, os do tipo preemptivo e os não preemptivo. Algoritmos não preemptivos A característica deste tipo de escalonamento é que quando um processo ganha o acesso a CPU nenhum outro processo (nem o sistema operacional) pode lhe tirar esse acesso. O processo acessa a CPU até que voluntariamente deixe de acessar. • Escalonamento FIFO: É fácil de implementar e operar, necessita apenas de uma manutenção de fila fazen- do com que os processos que passam para o estado de pronto entrar no final da fila e são escalados quando atingem o topo. As restrições em relação a essa técnica são a incapaci- dade de previsão do instante inicial de execução de um processo e a possibilidade de ocor- rência de processos de menor importância prejudicar o processamento de processos mais prioritários. Esta técnica de escalonamento não é eficaz para os sistemas de tempo compartilha- do e sistemas em tempo real. • Escalonamento Shortest_Job_First Esta técnica de escalonamento associa a cada processo uma estimativa do tempo de execução e favorece os processo com tempos menores. O grande desafio desse algoritmo é a estimativa do tempo adequado para execução de um determinado processo. Algoritmos Preemptivos Os algoritmos de escalonamento que são considerados preemptivos podem inter- romper um processo em execução e tirar do processo o acesso a CPU, repassando a outro processo que esteja na fila. Esta técnica permite que o processo dê atenção imediata aos processos mais prioritários. Sistemas Operacionais80 • Escalonamento Round Robin ou Circular Nesta técnica de escalonamento cada processo ganha um tempo limite para sua exe- cução e após esse tempo o processo é interrompido e colocado numa fila de prontos. A esse tempo é atribuído o nome de time-slice ou quantum. O desempenho do algoritmo é diretamente relacionado ao quantum. • Escalonamento por prazos O escalonamento define que os processos serão completados até certa data, hora ou prazo definido. É uma técnica utilizada para processos onde é alta a importância da execu- ção ser realizada dentro do prazo previsto. Devido a essa característica essa técnica é con- siderada muito complexa. Deadlock O deadlock de processos ocorre um processo pertencente ao conjunto estiver espe- rando por um recurso que somente um outro processo possui, e esse outro processo esti- ver esperando por um recurso do processo anterior. A figura 3 exemplifica essa situação. Figura 3. Exemplo de deadlock Detém recurso Y e espera pelo recurso X Detém recurso X e espera pelo recurso Y Processo BProcesso A Simplificando, pode-se dizer que deadlock é um termo empregado para traduzir um problema ocorrido quando um grupo de processos competem entre si. A ocorrência do deadlock depende das características de doisou mais programas diferentes e dos respecti- vos processos a serem executados pelos diferentes programas ao mesmo tempo. Pode ser, que esses processos possam ser executados de forma repetitiva usando diferentes proces- sos sem que ocorra deadlock, todavia, basta um único processo padrão complicado para entrar em situação de deadlock. Existem quatro condições para a ocorrência de deadlock: • Condição de exclusão mútua: um processo só pode estar alocado para um processo em um determinado momento. 81Sistemas Operacionais • Condição de posse e espera: processos que, em um determinado instante, retêm recursos concedidos anteriormente podem requisitar novos recursos. • Condição de não preempção: recursos concedidos previamente a um processo não podem ser tomados a força desse processo, eles devem ser explicitamente libera- dos pelo processo que os retém. • Condição de espera circular: deve existir um encadeamento circular de dois ou mais processos, onde cada um deles encontra-se à espera de um recurso que está sendo usado pelo membro seguinte dessa cadeia. Neste exemplo, a lista de segmentos é mantida ordenada por endereços. A vantagem desse método é que quando o processo termina ou é movido para o disco, a atualização da lista é direta. Na finalização de um processo, ao seu lado teremos processos ou espaços li- vres. Quatro situações podem ocorrer como mostradas na figura X. Sistemas Operacionais82 4.2. Gerência de Memória A memória de um computador é um recurso que deve ser gerenciado pelo sistema ope- racional com eficácia, pois os problemas relacionados a memória impactam diretamente na performance das aplicações utilizadas pelos usuários. Diante deste contexto, caracterís- ticas como quantidade de memória disponível, tempo de acesso e custo, são fundamentais para o funcionamento adequado do sistema operacional. O desejo é que se tenha sempre uma grande quantidade de memória para evitar problemas na performance, porém o custo da memória é elevado. Um grande desafio na relação custo benefício para compra de memória é tentar equilibrar o custo por bit armaze- nado, a velocidade de acesso da memória, e a capacidade. Deve ser levado em considera- ção que quanto maior a capacidade da memória mais lenta ela será. Em função do custo das memórias, existe o que é chamado de hierarquia de memó- rias em um computador, que é composto por: • Uma pequena quantidade de memória cache, que é volátil, muito rápida e de custo elevado; • Grande quantidade de memória principal (RAM), que é volátil e com velocidade e custo médio; • Uma memória não volátil em disco, com alta capacidade de armazenamento, velo- cidade e custo baixo. É uma atribuição do sistema operacional gerenciar a utilização dessas memórias. O gerenciador de memória do sistema operacional tem como função manter o controle de quais partes da memória estão em uso e quais não estão, alocando memória aos processos quando necessário e liberando a memória quando os processos forem encerrados. Além disso, o gerenciador de memória coordena a troca de processos entre a memória e o disco (quando a memória principal não é suficiente). Neste capítulo serão apresentados diferen- tes modos de gerenciar as atividades da memória 4.2.1. Hierarquia de Armazenamento A estrutura de memória de um computador pode ser subdividida em seis níveis que operam de forma integrada e ordenada conforme a capacidade de armazenamento e a ve- locidade de acesso. A figura 1 apresenta os níveis hierárquicos de armazenamento. Quanto mais elevado o nível na pirâmide, mais rápida, de menor capacidade e de maior custo por bit é o tipo de memória. A troca de dados entre os tipos de memória deve ser gerenciada pelo sistema operacional de maneira transparente e segura. 83Sistemas Operacionais Figura 1. Hierarquia de armazenamento Registradores Os registradores ficam fisicamente localizados dentro da CPU. Essas estruturas servem para armazenar informações do processo que está sendo executado. As atividades do pro- cessador são realizadas nas suas unidades funcionais: na unidade aritmética e lógica – ULA (Aritmetic and Logic Unit), na unidade de ponto flutuante – UFP (Float Point Unit – FPU) ou talvez em uma unidade de processamento vetorial. No entanto, antes que a instrução seja in- terpretada e as unidades da CPU sejam acionadas, o processador necessita buscar a instrução de onde ela estiver armazenada (memória cache ou principal) e armazená-la em seu próprio interior, em um dispositivo de memória denominado registrador de instrução. Por serem construídos com a mesma tecnologia da CPU, estes dispositivos possuem o menor tempo de acesso/ciclo de memória do sistema (poucos nanossegundos). Os regis- tradores são fabricados com capacidade de armazenar um único dado, uma única instrução ou até mesmo um único endereço. Desta forma, a quantidade de bits de cada um é de uns poucos bits (de 8 a 64). Memória Cache A memória cache é uma memória RAM com velocidade de acesso elevada, mas com ta- manho bem reduzido. Esta memória tem como objetivo acelerar a execução dos programas e processos trabalhando em conjunto com o processador. A memória cache possibilita que o processador trabalhe com toda capacidade e tenha o mínimo de tempo ocioso possível. A memória cache é dividida em alguns níveis, conhecidos como L1, L2 e L3 (L signifi- ca Level, em inglês). Eles dizem respeito à proximidade da memória cache das unidades de execução do processador. Quanto mais próxima ela estiver da unidade de execução do pro- cessador, menor será o seu número. Sistemas Operacionais84 A localização da memória cache é dentro da CPU entre os registradores e a memó- ria principal. Todas operações de leitura e escrita na memória, primeiramente passam pela memória cache. A figura 2 exemplifica essa situação. Figura 2. Esquema de acesso a memória cache Memória Principal A memória principal é constituída por um determinado número de células, cada uma podendo armazenar uma quantidade fixa de informação e sendo individualizada por um endereço único. A célula representa a unidade de acesso à memória, isto é, a menor quanti- dade de bits que pode ser acessada. O tamanho (quantidade de bits) de cada célula depen- de da arquitetura física do computador. A célula de memória muitas vezes é referenciada como byte por geralmente coincidir com o tamanho deste. Memória Virtual A Memória Virtual é um espaço variável e reservado no disco rígido. Este espaço é reservado no momento em que é feito a instalação do Sistema Operacional. Quando o Sistema Operacional notar que a Memória RAM não tem mais espaço de execução, o siste- ma vai passar a executar os seus programas na Memória Virtual. Pode-se dizer que, a me- mória virtual é como se fosse uma reserva da Memória RAM, ou seja, se a Memória RAM estiver cheia, é utilizado a memória Virtual. Quando a Memória Virtual é utilizada, o sistema fica extremamente lento (isto por- que o HD é considerado um tipo de memória lenta – utiliza componentes mecânicos). A memória virtual também é conhecida como memória de paginação ou de swap. Memória Secundária A memória secundária é a memória de armazenamento permanente, que armazena os dados permanentemente no sistema, sem a necessidade de energia elétrica e, por esse motivo, conhecida como memória não volátil. Ela funciona como complemento da memó- ria principal para guardar dados. Como exemplo pode-se citar o disco rígido ou HD. 85Sistemas Operacionais 4.2.2. Gerenciamento de memória Os sistemas de gerenciamento de memória podem ser divididos em duas categorias: sistemas que, durante a execução levam e trazem processos entre a memória principal e o disco (troca de processos e paginação), e sistemas mais simples, que não o fazem. Monoprogramação É o esquema de gerenciamento de memória mais simples de todos. Consiste em ter somente um processo na memória durante toda sua execução. O usuário carregaum pro- grama do disco para a memória e este programa fará uso de toda a memória disponível. Caso a memória seja insuficiente o programa não irá ser executado. Quando o sistema utiliza monoprogramação, apenas um processo pode estar em exe- cução por vez. Quando o processo termina, o sistema operacional reassume a CPU e fica aguardando por um novo comando para carregar um outro programa na memória. Multiprogramação Devido a necessidade de execução de múltiplos processos, hoje em dia, a monopro- gramação é pouco utilizada. A multiprogramação tem essa característica de execução de múltiplos processos aumentando a utilização da CPU. Um bom exemplo são os servidores de rede, que necessitam executar processos para diferentes clientes. Uma razão para ter-se a multiprogramação, é que muitos processos gastam uma pe- quena fração do seu tempo para realizar operação de leitura e escrita em disco. Se for ne- cessário gastar 40 milissegundos para ler um bloco e a computação demanda apenas 10 milissegundos, sem a multiprogramação a CPU estará desocupada esperando pelo acesso ao disco durante 80% do tempo. Multiprogramação com partições fixas Esta técnica consiste em dividir a memória em n partições. A definição destas par- tições cabe ao sistema operacional, através das suas configurações. Quando um processo inicia, este pode ser colocado em uma fila de entrada para ocupar a menor partição de ta- manho suficiente para acomodá-lo. A figura 3 apresenta o gerenciamento com partições fixas, tanto com filas de entradas separadas para cada processo (a), quanto com uma fila simples de entrada (b). Sistemas Operacionais86 Figura 3. Gerenciamento de memória com partições fixas Multiprogramação com partições variáveis Na prática, partições fixas são pouco atrativas quando a área de memória é escassa, pois muita memória é perdida por programas muito menores que o tamanho da partição. Assim sendo, um novo sistema de gerenciamento de memória foi desenvolvido, chamado gerenciamento com partições variáveis. Com a utilização desta técnica de gerenciamento de memória o número e o tama- nho de processos na memória varia de forma dinâmica. A principal diferença entre o geren- ciamento com partições fixas e o gerenciamento de memória com partições variáveis é a quantidade, a localização e o tamanho das partições que variam de forma dinâmica em re- lação ao tempo. As partições variáveis permitem um aumento da utilização da memória, mas cria o desafios em relação a alocação e liberação de memória. Gerenciamento de memória com mapa de bits Esta técnica de gerenciamento de memória consiste na divisão da memória em uni- dades de alocação. Cada unidade de alocação possui um bit que indica se a unidade está livre ou alocada. Quando o bit é 0 (zero) a unidade de alocação está livre, e quando a unida- de de alocação está ocupada o bit é 1 (um). A figura x apresenta como funciona o esquema de gerenciamento de memória baseado no mapa de bits. 87Sistemas Operacionais Figura 4. Esquema de alocação baseado no mapa de bits Notem na figura X que a parte “a” da imagem apresenta parte da memória com 5 processos e 3 espaços livres. A região sombreada representa os processos livres e as mar- cas representam as unidades de alocação. A parte “b” da figura X mostra o mapa de bits. A parte “c” da figura apresenta as mesmas informações em uma lista encadeada. O projeto do sistema operacional é que vai definir o tamanho de cada unidade de alocação. Quando o tamanho das unidades de alocação é pequeno, o mapa de bits é maior. Se a unidade de alo- cação for grande, o mapa de bits será pequeno, porém uma quantidade de memória con- siderável pode ser desperdiçada se o tamanho do processo não for um múltiplo exato da unidade de alocação. Gerenciamento de memória com lista encadeada Outra maneira de gerenciar o uso de memória é manter uma lista encadeada de seg- mentos de memória alocados e de segmentos de memória disponíveis. Um segmento é uma área de memória alocada a um processo ou uma área de memória livre situada entre as áreas de memória de dois processos. A memória da Figura X(a) é representada na Figura X(c) como uma lista encadeada de segmentos. Cada elemento dessa lista encadeada especifica um seg- mento de memória disponível (H) ou um segmento de memória alocado a um processo (P), o endereço onde se inicia esse segmento e um ponteiro para o próximo elemento da lista. Neste exemplo, a lista de segmentos é mantida ordenada por endereços. A vantagem desse método é que quando o processo termina ou é movido para o disco, a atualização da lista é direta. Na finalização de um processo, ao seu lado teremos processos ou espaços li- vres. Quatro situações podem ocorrer como mostradas na figura X. Sistemas Operacionais88 Figura 5. Quatro combinações de memória quando um processo termina
Compartilhar