SlideShare uma empresa Scribd logo
1 de 14
Baixar para ler offline
Studocu is not sponsored or endorsed by any college or university
Resumo - Conceitos de sistemas operacionais
Conceitos de Sistemas Operacionais (Universidade do Vale do Rio dos Sinos)
Studocu is not sponsored or endorsed by any college or university
Resumo - Conceitos de sistemas operacionais
Conceitos de Sistemas Operacionais (Universidade do Vale do Rio dos Sinos)
Downloaded by Rafael Pilan (rafaelpilan@gmail.com)
lOMoARcPSD|20433478
Sistemas operacionais
Um sistema operacional é um software que é executado entre o hardware e as aplicações efetuadas pelo usuário. É
considerado um software de baixo nível por ter acesso direto e completo a todos os recursos disponíveis pelo
equipamento, enquanto que as aplicações são consideradas de alto nível pois não podem acessar o hardware
diretamente.
Resumidamente, o sistema operacional atua como um intermediário entre a camada física do computador
(hardware) e os aplicativos instalados pelos usuários.
Funcionalidades básicas de um sistema operacional
 Gerência do processador: distribuir o tempo do processador entre os diversos processos em execução. Esta
distribuição não é igualitária, pois alguns processos possuem prioridades de execução diferentes, fazendo com que um
processo receba uma fatia maior de tempo da CPU. A gerência do processador também cuida da sincronização dos
processos, evitando situações de disputas por recursos e a comunicação entre os processos para troca de dados.
 Gerência da memória: para cada processo deve ser provida uma região de memória própria, autônoma e
independente, gerando uma estabilidade no sistema como um todo, porque processos não possam interferir em
outros. Atua na alocação de memória aos processos, à medida que um processo executa sua demanda por memória
pode ser alterada, fazendo com que novas porções de memória estejam livres. Caso a memória RAM não seja
suficiente, o sistema operacional poderá utilizar da memória virtual.
 Gerência de E/S: Cada dispositivo de E/S (periférico) possui características bem particulares no que diz respeito a
forma como deve ser acessado. Mesmo assim, podem haver várias questões em comum, como suporte a operações
de leitura e escrita, conforme o driver do dispositivo. Em geral, o papel do gerente de E/S é implementar a
comunicação com cada dispositivo através destes drivers de dispositivo.
 Sistema de arquivos: trabalha em conjunto com o gerente de E/S e tem como meta possibilitar a criação e o
manuseio de arquivos e diretórios, definindo uma interface única de acesso, além de definir a forma como os arquivos
e diretórios são organizados no dispositivo de memória de massa.
 Gerência de segurança: protege os recursos do sistema contra acessos maliciosos e indevidos, através de
mecanismos do SO que permitem saber quais usuários estão conectados, o que cada um pode acessar e de que modo
isto pode ocorrer, além do histórico de ações efetuadas.
Estrutura do sistema operacional
 Núcleo (kernel): principal módulo do sistema operacional, pois é responsável pela
gerência dos recursos do hardware utilizados pelos programas. Normalmente estão
implementadas as rotinas responsáveis pela gerência do processador, pela gerência de
memória, controle de acessos, etc.
 Drivers de dispositivos: controlam e viabilizam o acesso aos dispositivos físicos, onde
tipicamente há um driver para cada tipo de dispositivo, desenvolvido pelo fabricante do
hardware.
 Bibliotecas do sistema: compostas por conjuntos de rotinas pré-compiladas e que
podem ser usadas por programas desenvolvidos pelos usuários.
 Shell (interpretador de comandos): através deste software o usuário pode enviar comandos para o sistema
operacional. Ele analisa aquilo que foi digitado e em função disso executa alguma ação específica. Em SOs modernos,
tais ações são efetuadas pelo mouse.
 Programas utilitários: facilitam a execução de atividades rotineiras, além de implementarem diversas
funcionalidades de administração do sistema.
Downloaded by Rafael Pilan (rafaelpilan@gmail.com)
lOMoARcPSD|20433478
Principais arquiteturas de sistemas operacionais
 Arquitetura monolítica: nesta arquitetura, os componentes do núcleo podem se intercomunicar sem nenhum tipo
de barreira, todos os elementos do kernel tem acesso irrestrito a todos os recursos oferecidos pelo hardware. A
principal vantagem é o baixo custo de execução, proporcionando um bom desempenho. No entanto, estes sistemas
apresentam falta de estabilidade devido a intercomunicação livre (se um componente falhar, todos os outros falham) e
complexidade em seu desenvolvimento.
 Arquitetura em camadas: um sistema operacional pode fazer uso de uma estrutura em camadas para resolver
questões do sistema anterior. O nível mais baixo lida com a interface com o hardware, as intermediarias fornecem
serviço de gerência e a camada superior possui as definições das interfaces para as aplicações. Neste sistema há a
desvantagem de requisições de processos demorarem mais tempo para chegar até dispositivos periféricos ou outros
recursos.
 Arquitetura de micronúcleo: mantem no núcleo somente o código de baixo nível necessário para a interação com
os dispositivos e mantem o código de alto nível, onde estão implementados os gerentes de recurso, fora do kernel,
como se fossem processos que se comunicam utilizando as primitivas fornecidas pelo kernel.
História
Na década de 40, um programa rodava sozinha e possuía acesso completo a todas as funções do computador. O
acesso a periféricos também era programado e executado, mas mais tarde todos estes códigos foram compilados e
criadas bibliotecas, para uso comum.
Com o advento da computação pessoal no fim da década de 70, os sistemas operacionais foram adaptados para
serem executados em arquiteturas com hardware bastante simples, como computadores pessoais.
Sistemas operativos
 Primeira geração: surgimento das válvulas e painéis. Na época, existiam apenas um grupo de pessoas que eram
responsáveis pelo projeto, construção e programação de cada máquina. A programação era realizada em código
absoluto, normalmente através da fiação para controlar as funções básicas. A utilização do computador era realizada
através de reserva antecipada. Assim, o usuário realizava a sua própria programação nos painéis e controlando para
que nenhuma válvula queimasse. Os programas de computador eram baseados em cálculos matemáticos.
Posteriormente, foram criados os cartões perfurados que substituíram a programação através dos painéis.
 Segunda geração: surgimento dos transistores. Nesta época, os computadores se tornaram seguros para
comercialização. Foi encontrada uma solução para o baixo tempo de vida do computador, chamado batch, que
coletava na recepção de um conjunto de Jobs e fazia a sua leitura para uma fita magnética. Foram usados
principalmente para realização de cálculos científicos e de engenharia. A linguagem utilizada era a FORTRAN.
 Terceira geração: foram lançadas a técnicas de multiprogramação, spool e time-sharing. A multiprogramação
dividia a memória em diversas partes, para que cada atividade ficasse alocada em uma dessas partes, diminuindo o
tempo de espera entre uma execução e outra. Já o Spool lia Jobs de cartão perfurado direto para o disco. Quando um
job terminasse, um novo job era carregado na partição livre de memória. Por fim, o time-sharing permitia uma
variação dos sistemas operacionais, onde cada usuário tinha um terminal individual.
 Quarta geração: surgimento de chips com milhares de transistores encapsulados. A ideia de computador pessoal
estava mais robusta, usualmente conectadas a uma rede publica ou privada, permitindo a troca de informação entre
máquinas conectadas entre si. Aumentou o número de softwares desenvolvidos, voltados para usuários leigos.
Surgiram também os sistemas operacionais para redes e sistemas operacionais distribuídos.
Memória
Em sistemas operacionais antigos, somente um processo por vez poderia residir na memória. Agora, vários
programas podem residir na memória principal simultaneamente, cujo acesso deve ser monitorado por mecanismos
Downloaded by Rafael Pilan (rafaelpilan@gmail.com)
lOMoARcPSD|20433478
implementados no SO, impedindo que um processo possa modificar conteúdo de posições de memória de outro
processo, por exemplo.
A alocação de memória é de responsabilidade do SO, tais como quanto de memória cada processo ganhará e onde
estes processos serão alocados.
Um mecanismo implementado por quase todos os SOs modernos é o de memória virtual, que permite que parte
da memória secundária possa ser usada como extensão da memória principal.
Arquivos
A persistência dos dados é obtida através do armazenamento dos dados (e programas) em dispositivos de
armazenamento secundário. O SO oferece uma interface amigável para a organização dos dados, nomeados e
acessados nos dispositivos de memória.
O conceito de arquivo é resultado do mapeamento de um conjunto de dados (que pode ser um programa) para
esta unidade de armazenamento secundário. O conjunto de rotinas que oferece estas funcionalidades chama-se
sistema de arquivos (ex.: NTFS).
A organização dos arquivos é alcançada através da implementação no dispositivo de massa, por parte do sistema
de arquivos, de uma árvore de diretórios permitindo uma hierarquia destes dados. A rotina de um sistema de arquivos
permite: criar/apagar arquivos; criar/apagar diretórios; permitir a manipulação de arquivos e diretórios; permitir
mapear arquivos em armazenamento secundário e oferecer rotinas para backup e manutenção do volume.
Máquina virtual
É utilizada uma cópia fiel do hardware de tal modo que se possa ter um ambiente completo para execução do
programa, podendo ser executado mais de uma máquina virtual em um mesmo hardware.
Processos
Um processo é um programa em execução, constituído por diversos elementos (código, dados utilizados, pilha de
execução, valor dos registradores, manipuladores de arquivos abertos, etc.).
O SO mantém internamente uma tabela dos processos em execução, o que permite que o núcleo do SO possa
empregar políticas de escalonamento de processos para que possam compartilhar da mesma CPU, dando a ilusão de
que estão sendo executados simultaneamente.
Um processo pode criar mais processos, chamados de processos filhos, que também podem criar processos filhos e
assim sucessivamente. Outro aspecto importante é a capacidade de os processos trocarem informações entre si.
Quando estão sendo executados, dois ou mais processos podem tentar disputar o acesso a um mesmo recurso, o
que pode levar a impasses que comprometem a estabilidade do sistema como um todo. O SO deve implementar
mecanismos de controle de acesso e recursos que impeçam e resolvam este tipo de situação.
Gerência de processos
É responsabilidade do SO executar da melhor forma possível todos os processos iniciados pelo usuário, objetivando
melhor uso do processador e da memória.
Os primeiros SOs executavam apenas um processo por vez (sistema mono-tarefa). Um exemplo deste é o MS-DOS.
Sistemas que suportam a execução de mais de um processo concorrentemente são denominados multitarefa. Esta
característica implica na implementação de diversos mecanismos como um escalonador de processos e gerência de
memória. Num sistema multitarefa deve ser possível permitir o processador suspender a execução de um processo
para passar a executar um outro processo. Além disso deve ser possível para o kernel reativar um processo suspenso, a
partir do ponto onde foi interrompido.
Downloaded by Rafael Pilan (rafaelpilan@gmail.com)
lOMoARcPSD|20433478
Os sistemas operacionais modernos associam uma tarefa a cada processo, o que corresponde à execução de um
programa sequencial, ou seja, um fluxo único de instruções dentro do processo. Desta forma o processo deve ser
encarado como um repositório de recursos empregados por uma ou mais tarefas para sua execução.
Cada fluxo de execução do sistema, no interior do kernel ou associado a um processo é denominado thread.
Threads executando dentro de um processo são chamados de threads de usuário (user-level threads) enquanto que
threads gerenciados pelo kernel são denominadas de threads de núcleo (kernel-level threads).
Preempção é a capacidade do SO interromper um processo em execução e substituí-lo por um outro.
Estados de um processo
 Novo: o processo está sendo criado; a sua estrutura na memória está sendo montada.
 Pronto: o processo está na memória pronto para ser executado, esperando a disponibilidade do processo. Estes são
gerenciados em forma de fila por um algoritmo de escalonamento.
 Executando: a CPU está executando o processo.
 Bloqueado ou suspenso: o processo não pode ser executado porque depende de dados ainda indisponíveis.
 Terminado: a execução do processo foi encerrada e será removido da memória.
Escalonamento de processos
Este componente decide a ordem de execução dos processos prontos. Os principais fatores que são levados em
consideração são: percentual de utilização do processador, throughput (quantidades de processos completados por
unidade de tempo), turnaround (tempo total de execução de um processo), tempo de espera de um processo na fila
de execução e tempo de resposta.
Os processos são escalonados quando um novo processo é criado; no término de um processo; quando um
processo é bloqueado e quando um processo executa o evento E/S.
O escalonador de um sistema operacional pode ser preemptivo ou não-preemptivo.
Num escalonador preemptivo um processo pode perder o processador caso termine seu quantum (sua fatia) de
tempo.
Num escalonador não-preemptivo, o processo executado permanece com a CPU enquanto precisar, sem ser
interrompido.
Os principais algoritmos de escalonamento de processo são:
 FCFS: atende os processos em sequência, à medida em que são finalizados.
 SJF: gera os menores tempos médios de execução e de espera; atribui à CPU a menor tarefa da fila de processos
prontos. Como o calculo de tempo médio de um processo é complexo, este método é pouco usado.
 Escalonamento com prioridade: cada processo é associado a uma prioridade. Os valores gerados são utilizados
para indicar a sequencia dos processos a receber a CPU.
Mecanismos de comunicação inter-processos
 Compartilhamento de memória: dois ou mais processos podem compartilhar da mesma variável.
 Mail boxes: processos depositam e retiram mensagens de um determinado tipo de dados.
 Passagem de mensagens.
 Chamada remota de procedures.
Downloaded by Rafael Pilan (rafaelpilan@gmail.com)
lOMoARcPSD|20433478
Condições de disputa
É o momento em que dois ou mais processos tentam acessar simultaneamente um recurso comum. Quando
processos interagem entre si, é necessária a existência de mecanismos de sincronização para garantir a coerência do
sistema.
Tipos de condições de sincronização:
 Exclusão mútua: dois processos que tem acesso a um mesmo recurso não devem acessá-lo simultaneamente.
 Ocorrência de um evento: processo só continua sua execução após um determinado evento ocorrer.
Principais mecanismos de sincronização
Semáforo: Para controlar exclusão mútua e fazer o aviso de ocorrência de eventos. É um tipo de dado com duas
operações associadas (wait e signal). Variáveis do tipo semáforo só podem assumir valores inteiros não negativos.
Se um processo, por erro de programação, deixar de enviar um signal em um local apropriado, pode acarretar em um
deadlock nos processos (um processo esperando indefinidamente um recurso que outro processo nunca vai liberar).
Monitores: Um monitor engloba em uma única unidade de programação todos os subprogramas que manipulam um
recurso compartilhado. Os subprogramas de um monitor podem ser acessados por qualquer processo. Entretanto, se
um processo estiver usando algum subprograma do monitor, nenhum outro processo terá acesso ao monitor, ficando
suspenso até que o subprograma que estiver sendo usado termine.
Rendezvous: Mecanismo implementado em ADA onde dois processos (usuário e o servidor) se encontram num
determinado instante. Se o processo usuário solicitar um serviço antes do servidor aceitá-lo, o processo usuário fica
suspenso até que ocorra o Rendezvous. Se o servidor executar um accept antes do serviço ser solicitado, este é que
fica aguardando o Rendezvous.
Os processos usuários devem conhecer os nomes dos serviços (entries) dos servidores. Os servidores aceitam
chamadas de qualquer processo usuário. Rendezvous garante exclusão mútua: só um processo usuário executa um
Rendezvous com o processo servidor.
Deadlocks
Termo empregado para traduzir um problema que ocorre quando um grupo ou conjunto de processos compete
entre si. Um programa fica aguardando o outro e gera em uma parada no sistema.
Normalmente esta situação ocorre para recursos como dispositivos, arquivos, memória, etc. Esta situação ocorre
também em banco de dados.
Condições para ocorrência do deadlock
Não-preempção: recursos já alocados a outros processos não podem ser tomados à força. Eles precisam ser
liberados exclusivamente pelo processo em utilização.
Exclusão mútua: cada recurso ou está alocado a exatamente um processo ou está disponível.
Posse-e-espera: cada processo pode solicitar um recurso, ter o mesmo alocado para si e ficar bloqueado esperando
por um outro recurso.
Espera circular: deve existir uma cadeia circular de dois ou mais processos, cada um dos quais esperando por um
recurso que está com o próximo membro da cadeia.
Gerência de entrada e saída
Os dispositivos de entrada permitem ao computador acessar informações externas que são codificadas para
poderem ser processadas pela CPU. Uma das responsabilidades do sistema operacional é de gerenciar o acesso aos
Downloaded by Rafael Pilan (rafaelpilan@gmail.com)
lOMoARcPSD|20433478
periféricos por parte de processos que estão sendo executados no computador. Isto é obtido através de um conjunto
de rotinas e métodos de acesso implementados e oferecidos pelo SO.
Um periférico é um elemento de hardware conectado através de um barramento de E/S ao computador. O
barramento permite que dados possam trafegar entre o computador e o periférico.
Foram desenvolvidas diversas formas para que periféricos se comuniquem com o computador, portanto diferentes
métodos de comunicação são empregados. Os elementos mais importantes entre essa comunicação são a interface de
comunicação e o controlador do dispositivo:
 Interface de comunicação: é a parte do periférico que se conecta diretamente ao barramento de E/S. A
comunicação com o controlador se dá através de um conjunto de registradores (espaços de memória) que armazenam
informações enviadas de/para a CPU. Existem dois tipos de interface:
 Serial: trabalha somente com uma linha de transmissão da informação, sendo que o dado é transmitido
sempre um bit por vez.
 o Paralela: possui várias linhas de transmissão, possibilitando que vários bits sejam transmitidos
simultaneamente.
 Controlador: processador especializado no controle do dispositivo específico. O acesso aos registros do controlador
pode-se dar por meio de duas formas:
 Mapeada em espaços de E/S: a CPU emprega instruções especiais para manipular os registradores dos
periféricos. Existem dois espações de endereçamento: o espaço que corresponde à memória principal e o
espaço de E/S que corresponde aos registradores dos dispositivos.
 Mapeada em memória: só há um espaço de endereçamento, sendo que alguns endereços específicos irão
corresponder a registradores dos periféricos.
Existem três maneiras de a comunicação ser implementada entre a CPU e os dispositivos, sem importar o tipo de
mapeamento empregado:
 E/S programada: toda troca de dados é de responsabilidade do processo, devendo, portanto, ser implementada
pelo programador, de modo que o programa em execução transmita comandos para o dispositivo e em seguida
aguarde o termino da operação. Há a desvantagem de o processo ficar esperando muito tempo pelo dispositivo.
 Comunicação através de interrupções: interrupções são geradas pelo dispositivo para avisar a CPU que as
operações requisitadas foram concluídas. Neste modo, a CPU não necessita monitorar o processo, ficando livre para
outras tarefas. Uma interrupção é denominada mascarável quando se trata de uma interrupção de hardware que pode
ser ignorada pelo processador; interrupções não-mascaráveis nunca podem ser ignoradas pelo processador e uma
interrupção de software é gerada a partir de uma instrução pertencente a um processo.
 Acesso direto à memória: a interface do dispositivo consegue transferir os dados diretamente para a memória, não
havendo envolvimento direto da CPU.
Um dos principais módulos do sistema operacional é o subsistema de E/S, responsável pelo gerenciamento da
comunicação com os diversos periféricos conectados ao computador. Este módulo é estruturado em diversas camadas.
A camada inferior realiza a interação com o hardware dos dispositivos através dos drivers de dispositivo, empregando
mecanismos como interrupções e DMA.
Esta organização em camadas permite que o restante do sistema operacional não se preocupe com os detalhes da
interação com os diferentes tipos de dispositivos existentes. Esta camada inferior fornece às camadas superiores uma
série de serviços que padronizam o acesso aos periféricos. Esta padronização levou a classificação dos dispositivos em
função da forma como os dados são transmitidos:
 Dispositivos orientados a caracteres: realizam a transmissão caractere a caractere, um byte por vez.
 Dispositivos orientados a blocos: transmitem um conjunto de bytes de tamanho fixo.
A camada imediatamente acima usa os serviços disponibilizados pelos drivers e pode ser considerada
“independente de dispositivo”. Esta camada implementa funções genéricas (pois servem para qualquer periférico) e
serviços gerais de E/S:
Downloaded by Rafael Pilan (rafaelpilan@gmail.com)
lOMoARcPSD|20433478
 Gerência de buffer: quando é necessário controlar um buffer onde dados serão armazenados temporariamente
pois o dispositivo não consegue lidar toda a informação se esta for enviada de uma só vez.
 Cache de dados: gerência do armazenamento na memória daqueles dados mais frequentemente acessados.
 Alocação de dispositivo: alguns periféricos admitem somente um usuário por vez. Esse controle é feito através de
spooling (sequencializar os pedidos de acesso e atendê-los um por um.
 Controle de acesso: Nem todos os usuários podem acessar os dispositivos da mesma forma e é responsabilidade
do SO garantir essa proteção.
 Escalonamento de E/S: para dispositivos compartilhados por vários processos visando melhorar seu desempenho.
 Tratamento de erros: O software de E/S deve ser capaz de tratar erros, informando à camada superior o sucesso ou
o fracasso das operações de E/S.
Periférico disco rígido (HD)
Os discos rígidos são meio de armazenamento de memória em massa, sendo constituídos por uma parte mecânica
e uma parte eletrônica. Os dados são armazenados em um ou mais discos magnéticos rígidos. Seus principais
componentes são o disco mecânico, a cache e a interface de comunicação.
Um HD pode ser composto por uma série de pratos sobrepostos, cada prato possui duas faces graváveis. Em cada
face os dados são gravados numa série de trilhas concêntricas. Cada trilha é dividida em blocos denominados setores,
capazes de armazenar 512 bytes.
A chave é um buffer de memória que existe dentro do HD e sua função é armazenar temporariamente os dados
provenientes do computador.
A interface é a parte do HD responsável pela conexão com o barramento do sistema e associada ao controlador.
Ao sistema operacional, um aspecto relevante é o escalonamento do disco, que é a rotina do núcleo do sistema
operacional que busca determinar quais pedidos de leitura e escrita serão atendidos e em que ordem. Vários
processos podem requisitar simultaneamente pedidos de operações de E/S, e será função do escalonador de disco
ordenar e atender a estes pedidos, buscando minimizar tempo de processos bloqueados.
Numa operação de E/S em disco, um fator importante a ser levado em consideração é o tempo de seek, que é o
tempo despendido pelo dispositivo para posicionar o cabeçote de leitura e gravação no ponto inicial no prato onde
deverá ocorrer a operação de gravação ou leitura.
Existem alguns algoritmos de escalonamento que visam minimizar o tempo de seek:
 FCFS: as solicitações de acesso são atendidas na ordem em que os pedidos são realizados.
 SSTF: o próximo pedido de E/S a ser atendido é aquele que se refere à trilha mais próxima da trilha atual, ou seja,
que necessite menor movimentação do cabeçote de leitura/escrita.
 SCAN: parecido com o escalonamento SSTF, porém mantém um sentido preferencial para o movimento do
cabeçote (da trilha mais externa para a interna, por exemplo).
Em relação a discos rígidos, há diversas novas padronizações:
 MFM, RLL: Padrões antigos, não mais em uso.
 IDE: Interface simples, faz uso do barramento ISA, possuía baixa taxa de transferência, tipicamente voltada para
discos menores que 528MB.
 EIDE: Melhorias do IDE, faz uso do barramento PCI, suportando discos de até 8.5 GB, com controlador na placa
mãe; gerenciava até quatro discos.
 SCSI: Controlador para sistemas com altas velocidades e grande capacidade. Suporta grande quantidade de discos
de grande capacidade.
Downloaded by Rafael Pilan (rafaelpilan@gmail.com)
lOMoARcPSD|20433478
Gerência de memória
A memória RAM é um dos elementos mais importantes em um ambiente computacional, já que nesta terão os
processos, rotinas do kernel e do SO. Se o espaço em memória não for suficiente para abarcar todos os processos que
necessitam ser executados, então será utilizado o recurso de memória virtual, que permite que a memória RAM seja
expandida de forma transparente para os processos, empregando espaço livre no disco rígido.
Um processo é gerenciado pelo kernel como um elemento independente, residindo em uma área de memória
própria na memória RAM. Essa área de memória contém as informações necessárias para a execução deste processo,
tais como:
 Área HEAP: armazena dados através de alocação dinâmica. Possui tamanho variável, aumentando ou diminuindo
conforme forem ocorrendo as alocações e liberações de memória realizadas pelo processo.
 Área DATA: contém os dados estatísticos empregados pelo processo. Possui tamanho fixo.
 Área TEXT: local onde o código (conjunto de instruções) está armazenado. Possui tamanho fixo, calculado durante a
compilação.
 Área STACK: gerencia a pilha de execução do processo, que é a estrutura através da qual é feito o gerenciamento do
fluxo de execução nas chamadas de rotinas e de seus parâmetros. Normalmente esta área começa em endereços altos
de memória e cresce em direção aos endereços menores.
Mecanismos de alocação de memória
O tipo mais simples de alocação de memória consiste em dividir a memória em partições fixas, de tamanhos iguais.
Em cada partição pode ser carregado um processo. Como desvantagem, os processos podem ter tamanhos diferentes
dos tamanhos das partições, gerando locais inutilizados; o número máximo de processos na memória é limitado pelo
número de partições e processos maiores que o tamanho da maior partição não vão poder ser carregados na
memória, mesmo se todas as partições estiverem livres.
A melhor opção é se cada partição puder ter seu tamanho ajustado para cada processo, ou seja, ter partições em
tamanho variável.
Na alocação contígua, os espaços de memória alocados devem formar áreas contíguas, isto é, sem
descontinuidade. Apesar de simples, é uma estratégia pouco flexível e sujeita à fragmentação. Já na alocação
segmentada, o espaço de memória de um processo é dividido em regiões, ou segmentos, que são alocados
separadamente na memória. Além das quatro áreas básicas do processo (text, data, stack e heap), também podem
haver segmentos para elementos como bibliotecas, pilhas de threads, buffers, etc. Ao estruturar a memória em
segmentos, o espaço de memória de cada processo não é mais encarado como uma sequência linear de endereços
lógicos, mas sim como uma coleção de segmentos de tamanhos diferentes.
Durante a execução dos processos, áreas de memória inutilizadas por processos podem gerar áreas livres de
memória entre os processos, o que é chamado de fragmentação externa. Esse problema afeta somente os
mecanismos de alocação que trabalham com blocos de tamanho variável, como a alocação contígua e a alocação
segmentada. A alocação paginada manipula blocos de mesmo tamanho, sendo por isso imune a este problema. A
fragmentação é danosa porque limita a capacidade de alocação de memória no sistema.
Para minimizar a fragmentação, cada requisição de alocação deve ser primeiramente analisada pelo gerente de
memória para que encontre a melhor área de memória livre para cada caso. Os principais critérios a serem levados em
consideração para esta escolha são:
 Best-fit: escolha da menor área possível que atenda a requisição de alocação.
 Worst-fit: escolher a maior área livre, de forma que as áreas restantes sejam grandes e possam ser usadas em
outras alocações.
 First-fit: escolha da primeira área livre que satisfaça o pedido de alocação.
 Next-fit: percorre a lista das áreas livres a partir da última área locada ou liberada, para que o uso das áreas livres
seja distribuído de maneira homogênea.
Downloaded by Rafael Pilan (rafaelpilan@gmail.com)
lOMoARcPSD|20433478
Memória virtual
O uso de um armazenamento externo como extensão da memória RAM é chamado de memória virtual.
Quando processos inteiros são transferidos da memória para o disco rígido este procedimento é chamado de troca
ou swapping. Entretanto, geralmente as transferências são feitas por páginas ou grupo de páginas, através de um
mecanismo chamado de paginação. As páginas possuem um tamanho fixo, o que simplifica os algoritmos de escolha
de páginas a serem removidas, bem como os mecanismos de transferência para o dispositivo. A ideia é transferir para
o disco as páginas de memória pouco usadas.
Os principais algoritmos para troca de páginas são:
 FIFO: utiliza como critério o tempo em que os dados estão na memória, páginas antigas podem ser removidas para
dar alugar a novas. As páginas são dispostas em uma fila de número de páginas com política First In, First Out. O
número das páginas recém carregadas na memória é registrado no final da lista.
 Ótimo: remove da memória páginas que irão ficar mais tempo sem ser usadas pelos processos. Como não é
possível prever o comportamento dos processos, esse algoritmo não é válido.
 LRU: são escolhidas as páginas que estão na memória há mais tempo sem serem acessadas. As páginas antigas e
menos usadas são as escolhas preferenciais.
 NRU: leva em consideração o momento da ultima modificação da página; opta por aquelas que não foram
recentemente modificadas.
Na maioria dos casos, pode-se levar como critério para escolha das páginas: idade da página (quanto tempo está
na memória), frequência de acesso, data/hora do último acesso e prioridade do processo ao qual a página pertence.
Sistemas de arquivos
Um arquivo é basicamente um conjunto de dados armazenados em um dispositivo de armazenamento secundário
e que é identificado com um nome único. Estes arquivos ficam alocados em um diretório, que permite o arranjo de
modo hierárquico de todos os arquivos armazenados.
O sistema de arquivos determina como as informações podem ser guardadas, acessadas, etc., toda e qualquer
manipulação de dados é efetuada pelo sistema de arquivos.
Cada sistema operacional possui seu próprio sistema de arquivos, conforme a seguir:
 FAT: sistemas MS-DOS e Windows 3.1 até Windows 98 SE e Millenium; empregada também em pen drives, por
exemplo.
 NTFS: sistemas Windows 2000 até Windows 7.
 Ext2 e Ext3: Linux.
Cada arquivo é caracterizado por um conjunto de atributos que podem variar de acordo com o sistema de arquivos
utilizado. Os atributos mais comuns são o nome do arquivo, seu tipo, data e hora de criação e ultima modificação de
acesso, tamanho, etc.
O uso dos arquivos é realizado por meio de um conjunto de operações implementadas através do system calls. As
principais funções são: criação, leitura e gravação dos dados, alteração dos valores de atributos e deleção do arquivo.
Para poder ler ou escrever dados em um arquivo, um processo precisa primeiro abrir o arquivo. A abertura de um
arquivo consiste em preparar as estruturas de memória necessárias para acessar os dados do arquivo. Assim, o kernel
deve localizar o arquivo no dispositivo de memória de massa (através do seu nome), checar se o processo pode (tem
permissão para) acessar aquele arquivo, criar as estruturas de dados para representar o arquivo aberto, colocar uma
referência (handler) para esta estrutura na lista de arquivos abertos mantida pelo sistema e finalmente retornar para o
processo a referência a esta estrutura.
As duas formas mais comuns de se acessar os dados que estão armazenados em um arquivo são o acesso
sequencial dos dados e o acesso direto. No acesso sequencial, os dados são sempre lidos ou gravados
Downloaded by Rafael Pilan (rafaelpilan@gmail.com)
lOMoARcPSD|20433478
sequencialmente, do início para o fim do arquivo. No modo de acesso direto, pode-se indicar a posição no arquivo
onde a leitura ou gravação deve acontecer.
Usualmente o sistema de arquivos acessa as informações no HD lendo ou escrevendo conjuntos de setores (blocos
de bytes) a cada vez. Estes grupos de setores são denominados de blocos de alocação (ou clusters). O tamanho do
bloco de alocação é determinado via de regra pelo próprio sistema de arquivos, e usualmente fica entre um a oito
setores (isto é, um cluster possui entre 512 a 4 KB de tamanho físico).
Exemplo de organização de um sistema de arquivos: FAT12
A estrutura geral de u volume formatado como FAT 12 é o que aparece na figura abaixo:
Estrutura de um arquivo de diretório FAT12
Um diretório no sistema de arquivos FAT é uma sequência de entradas de 32 bytes cada, onde cada entrada
corresponde a um arquivo (FAT12 e FAT16 convencionais). Na FAT empregada pelo Windows 95 (que é chamada de
VFAT), para cada arquivo podem ser usadas mais de uma entrada de diretório, onde uma entrada segue o formato
tradicional e as demais armazenam o nome do arquivo usando codificação UNICODE (2 bytes por caractere).
Então, o formato de uma entrada de diretório FAT 12 fica (tamanho em bytes indicado abaixo de cada campo):
Sistema de arquivos NTFS
Surgiu com o lançamento do Windows NT.
Uma das características do NTFS diz respeito à recuperação: em caso de falhas, o NTFS é capaz de reverter os dados
à condição anterior ao incidente. O NTFS também é capaz de permitir que o usuário defina quem pode e como acessar
pastas e arquivos.
Para manter a integridade do sistema, basicamente, três passos são executados: verificação do log para checar
quais clusters devem ser corrigidos; nova execução das transações marcadas como completas no final do log; reversão
de procedimentos que não puderam ser concluídos. Perceba que, com isso, o NTFS pode não conseguir recuperar os
últimos dados gravados antes da interrupção, mas garante o pleno funcionamento do sistema operacional eliminando
erros que podem comprometer o desempenho ou causar problemas ainda maiores.
Árvore de diretórios no SO Linux
A estrutura do sistema de arquivos aqui definida é a FSSTND.
O diretório raiz (/) é normalmente subdividido em uma coleção de subdiretórios. Cada um destes subdiretórios
armazena uma classe específica de arquivos, como pode ser visto na tabela a seguir:
subdiretório Função (classe de arquivos armazenados)
bin Executáveis essenciais (comandos); ex: cat, chmod, cp, date, dd, df, ed, kill, login, ls, mkdir, more,
mount, mv, ps, pwd, rm, rmdir, umount, ...
boot Arquivos estáticos do carregador de boot (boot loader)
dev Arquivos de dispositivos
etc Arquivos e scripts para configuração do sistema; ex: csh.login, fstab, group, inittab, lilo.conf,
passwd, profile, exports, hosts, networks, protocols, ...
Downloaded by Rafael Pilan (rafaelpilan@gmail.com)
lOMoARcPSD|20433478
home Diretórios para usuários
lib Bibliotecas compartilhadas (shared libraries)
mnt Diretório para montagem de sistemas de arquivos temporários
proc Pseudo sistema de arquivos (armazena informações de processos)
root Diretório do administrador do sistema (root user)
sbin Executáveis essenciais (para administração do sistema); ex: clock, getty, init, mkswap, swapon,
swapoff, shutdown, fdisk, fsck, mkfs, badblocks, dumpe2fs, e2fsck, lilo, ifconfig, route, ...
tmp Arquivos temporários
usr É a 2º maior porção do sistema de arquivos; armazena arquivos compartilháveis, geralmente
read-only (tabela a seguir)
var Dados variáveis; incluem arquivos de spool, arquivos de log e arquivos temporários; não pode
ser uma partição separada
Observações sobre o shell no Linux
O shell é a camada do sistema operacional que interpreta os comandos dos usuários e dispara os processos
adequados. Do ponto de vista do usuário, o shell é representado por uma janela de terminal onde são inseridos
comandos. No Linux, a versão mais utilizada atualmente é a bash.
Comandos úteis para manipulação de arquivos e diretórios
 pwd: mostra caminho do diretório corrente (path
do diretório onde se está)
 ls: lista conteúdo do diretório (mostra arquivos e
subdiretórios que estão no diretório
 mkdir: cria um diretório
 cd: muda (alterna) para este diretório
 cat: cria um arquivo, mostra um arquivo ou
concatena arquivos
 more: mostra o conteúdo de um arquivo
 cp: copia arquivo
 rm: deleta (remove) arquivo
 mv: move um arquivo (usado também para
renomear arquivos)
 chmod: altera as permissões de acesso de um
arquivo
 ps: lista processos da máquina
 man: utilitário de ajuda
Linux Filesystems
O EXT era um sistema de arquivos para Linux. Com seu lançamento, foi aumentado o tamanho máximo do sistema
de arquivo de 64MB para 2GB e aumentado também o tamanho do nome do arquivo (de 30 para 255 caracteres).
Logo, foi lançado o EXT2 que resolvia problemas de fragmentação e desempenho do antecessor. Houve melhoria
no aumento para 4 TB o tamanho da partição e o uso de 3 timestamps nos arquivos (criação, modificação e acesso); o
nome do arquivo também foi incrementado para 1012 caracteres.
O EXT3 foi baseado em seu antecessor, o que significa que um sistema EXT2 pode ser convertido em EXT3 e vice-
versa. Como ganho, o EXT3 possui uma poderosa ferramenta de FSCK e é um journaling system (determinados eventos
são noticiados ao sistema).
A integridade dos dados pode ser feita de três modos (em ordem de velocidade):
“data=writeback” : Rápido, evita fsck, mas recupera dados antigos após um crash.
●
“data=ordered”: (default mode) Grava as modificações dos metadados e grava os blocos modificados.
●
“data=journal” : Todas as modificações no sistema de arquivos são gravadas possibilitando uma recuperação total,
●
mas tornando o sistema muito lento.
Downloaded by Rafael Pilan (rafaelpilan@gmail.com)
lOMoARcPSD|20433478
O EXT4 é um refinamento do EXT2 usando duas partições simultaneamente. Uma partição armazena os diretórios e
Inodes (estrutura de representação de um arquivo contendo sua descrição e o apontador para o bloco no disco) e a
outra os arquivos.
A ideia do sistema é realizar leitura/gravação simultaneamente de diretórios e arquivos.
Sistemas operacionais de tempo real
As aplicações devem ter a certeza que o núcleo não irá demorar demais para fornecer um serviço de tal modo que
o processo possa responder em tempo hábil à requisição feita pelo ambiente externo. Dentro deste contexto, um
aspecto importante é que os tempos de execução das diversas rotinas que compõe o núcleo do SO devem ser
conhecidos. Estas rotinas devem possuir tempos de execução constantes e previsíveis tanto quanto for possível.
Os sistemas operacionais real-time podem ser classificados em:
 Hard real time: tarefas críticas devem ter a garantia de que serão completadas dentro do prazo; não há suporte à
armazenamento secundário, portanto, não há suporte à memória virtual; características avançadas de um sistema
operacional podem comprometer o seu tempo de execução e, portanto, não são implementados em um SO real
time. Os sistemas Hard RT são utilizados em sistemas de missão crítica onde falhas não são admissíveis.
 Soft real time: possui basicamente as mesmas características do hard real time, porém possui relaxamento nas
garantias temporais de execução oferecidas pelo sistema operacional.
A principal diferença entre ambos está no quão critica será a eventual ocorrência de uma falha (uma falha em um
sistema Hard RT é encarada como uma falha fatal ou desastrosa enquanto que uma falha em um sistema Soft RT é
considerada apenas uma falha indesejável).
Um aspecto central na implementação de sistemas de tempo real são as técnicas de escalonamento de processos,
pois é muito importante garantir que as tarefas sejam executadas dentro de seus prazos, sem atrasos e dentro do
tempo máximo desejado para sua conclusão.
Como já foi visto, o termo escalonamento define o procedimento de ordenar os processos numa fila de execução.
Os algoritmos de escalonamento podem ser definidos como preemptivos ou não preemptivos. Quando os processos
que estão executando podem ser interrompidos por outros com maior prioridade, temos então um algoritmo de
escalonamento preemptivo. Se isto não for permitido, então o algoritmo não é preemptivo.
Sistemas operacionais com suporte para sistemas distribuídos
São máquinas independentes conectadas por redes. Sistemas deste tipo normalmente são compostos por
uma quantidade muito grande de processos interagindo entre si, sendo executados sobre uma infraestrutura também
complexa, usualmente composta por servidores remotos rodando em plataformas diferentes. Num ambiente deste
tipo, alguns fatores impactam diretamente no desempenho do sistema, como a largura de banda disponível para o
tráfego de dados e o poder computacional particular de cada um dos servidores.
Um sistema operacional com suporte a sistemas distribuídos deve oferecer uma série de funcionalidades que
viabilizem a execução distribuída de processos, destacando:
 Suporte ao tratamento de erros e recuperação de falhas: quando por exemplo um servidor fica temporariamente
indisponível e não conseguir responder às requisições geradas a partir de outros servidores.
 Possibilidade de balanceamento de carga: para não comprometer a estabilidade e o desempenho dos servidores.
 Controles de acesso: para garantir que processos não prejudiquem a execução de outras tarefas dentro do
ambiente distribuído.
Outro aspecto relevante diz respeito a forma como será implementado o sincronismo entre os diversos agentes
que compõe o sistema distribuído. Neste caso, temos:
 Sistemas Distribuídos Síncronos: o processamento e a transmissão de mensagens tem limites de tempos bem
determinados.
Downloaded by Rafael Pilan (rafaelpilan@gmail.com)
lOMoARcPSD|20433478
 Sistemas Distribuídos Assíncronos: não há limites bem definidos de tempo para execução e transmissão das
mensagens
Vantagens e desvantagens do sistema operacional distribuído em relação a sistemas centralizados
Vantagens: preço, velocidade, distribuição física, confiabilidade, disponibilidade e crescimento incremental.
Desvantagens: ainda não está tão maduro quanto o software para sistemas centralizados, dependência da rede,
segurança (roubo de dados).
Downloaded by Rafael Pilan (rafaelpilan@gmail.com)
lOMoARcPSD|20433478

Mais conteúdo relacionado

Semelhante a resumo-conceitos-de-sistemas-operacionais.pdf

Introdução a Sistemas Operacionais
Introdução a Sistemas OperacionaisIntrodução a Sistemas Operacionais
Introdução a Sistemas OperacionaisLabin2bpm
 
[Cliqueapostilas.com.br] arquitetura-de-sistemas-operacionais
[Cliqueapostilas.com.br] arquitetura-de-sistemas-operacionais[Cliqueapostilas.com.br] arquitetura-de-sistemas-operacionais
[Cliqueapostilas.com.br] arquitetura-de-sistemas-operacionaisSuperTec1
 
SO-01 Introdução aos Sistemas Operacionais
SO-01 Introdução aos Sistemas OperacionaisSO-01 Introdução aos Sistemas Operacionais
SO-01 Introdução aos Sistemas OperacionaisEduardo Nicola F. Zagari
 
Sistemas operacionais introdução
Sistemas operacionais introduçãoSistemas operacionais introdução
Sistemas operacionais introduçãoCarlos Melo
 
Noções básicas de Sistemas Operacionais
Noções básicas de Sistemas OperacionaisNoções básicas de Sistemas Operacionais
Noções básicas de Sistemas OperacionaisLuciano Crecente
 
Introducao a Sistemas Operacionais
Introducao a Sistemas OperacionaisIntroducao a Sistemas Operacionais
Introducao a Sistemas OperacionaisIsaac Vieira
 
Sistemas Operacionais aula 02
Sistemas Operacionais  aula 02 Sistemas Operacionais  aula 02
Sistemas Operacionais aula 02 Diego Rodrigues
 
ApresentaçãO2 Sistema Operacional
ApresentaçãO2  Sistema OperacionalApresentaçãO2  Sistema Operacional
ApresentaçãO2 Sistema OperacionalCláudia Costa
 
Apostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelApostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelPablo Mariano
 
Apostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelApostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelPablo Mariano
 
Apostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelApostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelPablo Mariano
 
Sistemas Operacionais - Aula 4 - Revisão e Exercícios
Sistemas Operacionais - Aula 4 - Revisão e ExercíciosSistemas Operacionais - Aula 4 - Revisão e Exercícios
Sistemas Operacionais - Aula 4 - Revisão e ExercíciosCharles Fortes
 
Sistemas Operacionais - Introducao
Sistemas Operacionais - IntroducaoSistemas Operacionais - Introducao
Sistemas Operacionais - IntroducaoLuiz Arthur
 

Semelhante a resumo-conceitos-de-sistemas-operacionais.pdf (20)

Sistemas Operacionais
Sistemas OperacionaisSistemas Operacionais
Sistemas Operacionais
 
Sistema
SistemaSistema
Sistema
 
Hardware e sistemas operacionais
Hardware e sistemas operacionaisHardware e sistemas operacionais
Hardware e sistemas operacionais
 
Introdução a Sistemas Operacionais
Introdução a Sistemas OperacionaisIntrodução a Sistemas Operacionais
Introdução a Sistemas Operacionais
 
[Cliqueapostilas.com.br] arquitetura-de-sistemas-operacionais
[Cliqueapostilas.com.br] arquitetura-de-sistemas-operacionais[Cliqueapostilas.com.br] arquitetura-de-sistemas-operacionais
[Cliqueapostilas.com.br] arquitetura-de-sistemas-operacionais
 
SO-01 Introdução aos Sistemas Operacionais
SO-01 Introdução aos Sistemas OperacionaisSO-01 Introdução aos Sistemas Operacionais
SO-01 Introdução aos Sistemas Operacionais
 
SlackWare - Leonel
SlackWare - LeonelSlackWare - Leonel
SlackWare - Leonel
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
 
Sistemas operacionais introdução
Sistemas operacionais introduçãoSistemas operacionais introdução
Sistemas operacionais introdução
 
Noções básicas de Sistemas Operacionais
Noções básicas de Sistemas OperacionaisNoções básicas de Sistemas Operacionais
Noções básicas de Sistemas Operacionais
 
Introducao a Sistemas Operacionais
Introducao a Sistemas OperacionaisIntroducao a Sistemas Operacionais
Introducao a Sistemas Operacionais
 
Sistemas Operacionais aula 02
Sistemas Operacionais  aula 02 Sistemas Operacionais  aula 02
Sistemas Operacionais aula 02
 
So cap01
So cap01So cap01
So cap01
 
So cap01
So cap01So cap01
So cap01
 
ApresentaçãO2 Sistema Operacional
ApresentaçãO2  Sistema OperacionalApresentaçãO2  Sistema Operacional
ApresentaçãO2 Sistema Operacional
 
Apostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelApostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgel
 
Apostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelApostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgel
 
Apostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelApostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgel
 
Sistemas Operacionais - Aula 4 - Revisão e Exercícios
Sistemas Operacionais - Aula 4 - Revisão e ExercíciosSistemas Operacionais - Aula 4 - Revisão e Exercícios
Sistemas Operacionais - Aula 4 - Revisão e Exercícios
 
Sistemas Operacionais - Introducao
Sistemas Operacionais - IntroducaoSistemas Operacionais - Introducao
Sistemas Operacionais - Introducao
 

resumo-conceitos-de-sistemas-operacionais.pdf

  • 1. Studocu is not sponsored or endorsed by any college or university Resumo - Conceitos de sistemas operacionais Conceitos de Sistemas Operacionais (Universidade do Vale do Rio dos Sinos) Studocu is not sponsored or endorsed by any college or university Resumo - Conceitos de sistemas operacionais Conceitos de Sistemas Operacionais (Universidade do Vale do Rio dos Sinos) Downloaded by Rafael Pilan (rafaelpilan@gmail.com) lOMoARcPSD|20433478
  • 2. Sistemas operacionais Um sistema operacional é um software que é executado entre o hardware e as aplicações efetuadas pelo usuário. É considerado um software de baixo nível por ter acesso direto e completo a todos os recursos disponíveis pelo equipamento, enquanto que as aplicações são consideradas de alto nível pois não podem acessar o hardware diretamente. Resumidamente, o sistema operacional atua como um intermediário entre a camada física do computador (hardware) e os aplicativos instalados pelos usuários. Funcionalidades básicas de um sistema operacional  Gerência do processador: distribuir o tempo do processador entre os diversos processos em execução. Esta distribuição não é igualitária, pois alguns processos possuem prioridades de execução diferentes, fazendo com que um processo receba uma fatia maior de tempo da CPU. A gerência do processador também cuida da sincronização dos processos, evitando situações de disputas por recursos e a comunicação entre os processos para troca de dados.  Gerência da memória: para cada processo deve ser provida uma região de memória própria, autônoma e independente, gerando uma estabilidade no sistema como um todo, porque processos não possam interferir em outros. Atua na alocação de memória aos processos, à medida que um processo executa sua demanda por memória pode ser alterada, fazendo com que novas porções de memória estejam livres. Caso a memória RAM não seja suficiente, o sistema operacional poderá utilizar da memória virtual.  Gerência de E/S: Cada dispositivo de E/S (periférico) possui características bem particulares no que diz respeito a forma como deve ser acessado. Mesmo assim, podem haver várias questões em comum, como suporte a operações de leitura e escrita, conforme o driver do dispositivo. Em geral, o papel do gerente de E/S é implementar a comunicação com cada dispositivo através destes drivers de dispositivo.  Sistema de arquivos: trabalha em conjunto com o gerente de E/S e tem como meta possibilitar a criação e o manuseio de arquivos e diretórios, definindo uma interface única de acesso, além de definir a forma como os arquivos e diretórios são organizados no dispositivo de memória de massa.  Gerência de segurança: protege os recursos do sistema contra acessos maliciosos e indevidos, através de mecanismos do SO que permitem saber quais usuários estão conectados, o que cada um pode acessar e de que modo isto pode ocorrer, além do histórico de ações efetuadas. Estrutura do sistema operacional  Núcleo (kernel): principal módulo do sistema operacional, pois é responsável pela gerência dos recursos do hardware utilizados pelos programas. Normalmente estão implementadas as rotinas responsáveis pela gerência do processador, pela gerência de memória, controle de acessos, etc.  Drivers de dispositivos: controlam e viabilizam o acesso aos dispositivos físicos, onde tipicamente há um driver para cada tipo de dispositivo, desenvolvido pelo fabricante do hardware.  Bibliotecas do sistema: compostas por conjuntos de rotinas pré-compiladas e que podem ser usadas por programas desenvolvidos pelos usuários.  Shell (interpretador de comandos): através deste software o usuário pode enviar comandos para o sistema operacional. Ele analisa aquilo que foi digitado e em função disso executa alguma ação específica. Em SOs modernos, tais ações são efetuadas pelo mouse.  Programas utilitários: facilitam a execução de atividades rotineiras, além de implementarem diversas funcionalidades de administração do sistema. Downloaded by Rafael Pilan (rafaelpilan@gmail.com) lOMoARcPSD|20433478
  • 3. Principais arquiteturas de sistemas operacionais  Arquitetura monolítica: nesta arquitetura, os componentes do núcleo podem se intercomunicar sem nenhum tipo de barreira, todos os elementos do kernel tem acesso irrestrito a todos os recursos oferecidos pelo hardware. A principal vantagem é o baixo custo de execução, proporcionando um bom desempenho. No entanto, estes sistemas apresentam falta de estabilidade devido a intercomunicação livre (se um componente falhar, todos os outros falham) e complexidade em seu desenvolvimento.  Arquitetura em camadas: um sistema operacional pode fazer uso de uma estrutura em camadas para resolver questões do sistema anterior. O nível mais baixo lida com a interface com o hardware, as intermediarias fornecem serviço de gerência e a camada superior possui as definições das interfaces para as aplicações. Neste sistema há a desvantagem de requisições de processos demorarem mais tempo para chegar até dispositivos periféricos ou outros recursos.  Arquitetura de micronúcleo: mantem no núcleo somente o código de baixo nível necessário para a interação com os dispositivos e mantem o código de alto nível, onde estão implementados os gerentes de recurso, fora do kernel, como se fossem processos que se comunicam utilizando as primitivas fornecidas pelo kernel. História Na década de 40, um programa rodava sozinha e possuía acesso completo a todas as funções do computador. O acesso a periféricos também era programado e executado, mas mais tarde todos estes códigos foram compilados e criadas bibliotecas, para uso comum. Com o advento da computação pessoal no fim da década de 70, os sistemas operacionais foram adaptados para serem executados em arquiteturas com hardware bastante simples, como computadores pessoais. Sistemas operativos  Primeira geração: surgimento das válvulas e painéis. Na época, existiam apenas um grupo de pessoas que eram responsáveis pelo projeto, construção e programação de cada máquina. A programação era realizada em código absoluto, normalmente através da fiação para controlar as funções básicas. A utilização do computador era realizada através de reserva antecipada. Assim, o usuário realizava a sua própria programação nos painéis e controlando para que nenhuma válvula queimasse. Os programas de computador eram baseados em cálculos matemáticos. Posteriormente, foram criados os cartões perfurados que substituíram a programação através dos painéis.  Segunda geração: surgimento dos transistores. Nesta época, os computadores se tornaram seguros para comercialização. Foi encontrada uma solução para o baixo tempo de vida do computador, chamado batch, que coletava na recepção de um conjunto de Jobs e fazia a sua leitura para uma fita magnética. Foram usados principalmente para realização de cálculos científicos e de engenharia. A linguagem utilizada era a FORTRAN.  Terceira geração: foram lançadas a técnicas de multiprogramação, spool e time-sharing. A multiprogramação dividia a memória em diversas partes, para que cada atividade ficasse alocada em uma dessas partes, diminuindo o tempo de espera entre uma execução e outra. Já o Spool lia Jobs de cartão perfurado direto para o disco. Quando um job terminasse, um novo job era carregado na partição livre de memória. Por fim, o time-sharing permitia uma variação dos sistemas operacionais, onde cada usuário tinha um terminal individual.  Quarta geração: surgimento de chips com milhares de transistores encapsulados. A ideia de computador pessoal estava mais robusta, usualmente conectadas a uma rede publica ou privada, permitindo a troca de informação entre máquinas conectadas entre si. Aumentou o número de softwares desenvolvidos, voltados para usuários leigos. Surgiram também os sistemas operacionais para redes e sistemas operacionais distribuídos. Memória Em sistemas operacionais antigos, somente um processo por vez poderia residir na memória. Agora, vários programas podem residir na memória principal simultaneamente, cujo acesso deve ser monitorado por mecanismos Downloaded by Rafael Pilan (rafaelpilan@gmail.com) lOMoARcPSD|20433478
  • 4. implementados no SO, impedindo que um processo possa modificar conteúdo de posições de memória de outro processo, por exemplo. A alocação de memória é de responsabilidade do SO, tais como quanto de memória cada processo ganhará e onde estes processos serão alocados. Um mecanismo implementado por quase todos os SOs modernos é o de memória virtual, que permite que parte da memória secundária possa ser usada como extensão da memória principal. Arquivos A persistência dos dados é obtida através do armazenamento dos dados (e programas) em dispositivos de armazenamento secundário. O SO oferece uma interface amigável para a organização dos dados, nomeados e acessados nos dispositivos de memória. O conceito de arquivo é resultado do mapeamento de um conjunto de dados (que pode ser um programa) para esta unidade de armazenamento secundário. O conjunto de rotinas que oferece estas funcionalidades chama-se sistema de arquivos (ex.: NTFS). A organização dos arquivos é alcançada através da implementação no dispositivo de massa, por parte do sistema de arquivos, de uma árvore de diretórios permitindo uma hierarquia destes dados. A rotina de um sistema de arquivos permite: criar/apagar arquivos; criar/apagar diretórios; permitir a manipulação de arquivos e diretórios; permitir mapear arquivos em armazenamento secundário e oferecer rotinas para backup e manutenção do volume. Máquina virtual É utilizada uma cópia fiel do hardware de tal modo que se possa ter um ambiente completo para execução do programa, podendo ser executado mais de uma máquina virtual em um mesmo hardware. Processos Um processo é um programa em execução, constituído por diversos elementos (código, dados utilizados, pilha de execução, valor dos registradores, manipuladores de arquivos abertos, etc.). O SO mantém internamente uma tabela dos processos em execução, o que permite que o núcleo do SO possa empregar políticas de escalonamento de processos para que possam compartilhar da mesma CPU, dando a ilusão de que estão sendo executados simultaneamente. Um processo pode criar mais processos, chamados de processos filhos, que também podem criar processos filhos e assim sucessivamente. Outro aspecto importante é a capacidade de os processos trocarem informações entre si. Quando estão sendo executados, dois ou mais processos podem tentar disputar o acesso a um mesmo recurso, o que pode levar a impasses que comprometem a estabilidade do sistema como um todo. O SO deve implementar mecanismos de controle de acesso e recursos que impeçam e resolvam este tipo de situação. Gerência de processos É responsabilidade do SO executar da melhor forma possível todos os processos iniciados pelo usuário, objetivando melhor uso do processador e da memória. Os primeiros SOs executavam apenas um processo por vez (sistema mono-tarefa). Um exemplo deste é o MS-DOS. Sistemas que suportam a execução de mais de um processo concorrentemente são denominados multitarefa. Esta característica implica na implementação de diversos mecanismos como um escalonador de processos e gerência de memória. Num sistema multitarefa deve ser possível permitir o processador suspender a execução de um processo para passar a executar um outro processo. Além disso deve ser possível para o kernel reativar um processo suspenso, a partir do ponto onde foi interrompido. Downloaded by Rafael Pilan (rafaelpilan@gmail.com) lOMoARcPSD|20433478
  • 5. Os sistemas operacionais modernos associam uma tarefa a cada processo, o que corresponde à execução de um programa sequencial, ou seja, um fluxo único de instruções dentro do processo. Desta forma o processo deve ser encarado como um repositório de recursos empregados por uma ou mais tarefas para sua execução. Cada fluxo de execução do sistema, no interior do kernel ou associado a um processo é denominado thread. Threads executando dentro de um processo são chamados de threads de usuário (user-level threads) enquanto que threads gerenciados pelo kernel são denominadas de threads de núcleo (kernel-level threads). Preempção é a capacidade do SO interromper um processo em execução e substituí-lo por um outro. Estados de um processo  Novo: o processo está sendo criado; a sua estrutura na memória está sendo montada.  Pronto: o processo está na memória pronto para ser executado, esperando a disponibilidade do processo. Estes são gerenciados em forma de fila por um algoritmo de escalonamento.  Executando: a CPU está executando o processo.  Bloqueado ou suspenso: o processo não pode ser executado porque depende de dados ainda indisponíveis.  Terminado: a execução do processo foi encerrada e será removido da memória. Escalonamento de processos Este componente decide a ordem de execução dos processos prontos. Os principais fatores que são levados em consideração são: percentual de utilização do processador, throughput (quantidades de processos completados por unidade de tempo), turnaround (tempo total de execução de um processo), tempo de espera de um processo na fila de execução e tempo de resposta. Os processos são escalonados quando um novo processo é criado; no término de um processo; quando um processo é bloqueado e quando um processo executa o evento E/S. O escalonador de um sistema operacional pode ser preemptivo ou não-preemptivo. Num escalonador preemptivo um processo pode perder o processador caso termine seu quantum (sua fatia) de tempo. Num escalonador não-preemptivo, o processo executado permanece com a CPU enquanto precisar, sem ser interrompido. Os principais algoritmos de escalonamento de processo são:  FCFS: atende os processos em sequência, à medida em que são finalizados.  SJF: gera os menores tempos médios de execução e de espera; atribui à CPU a menor tarefa da fila de processos prontos. Como o calculo de tempo médio de um processo é complexo, este método é pouco usado.  Escalonamento com prioridade: cada processo é associado a uma prioridade. Os valores gerados são utilizados para indicar a sequencia dos processos a receber a CPU. Mecanismos de comunicação inter-processos  Compartilhamento de memória: dois ou mais processos podem compartilhar da mesma variável.  Mail boxes: processos depositam e retiram mensagens de um determinado tipo de dados.  Passagem de mensagens.  Chamada remota de procedures. Downloaded by Rafael Pilan (rafaelpilan@gmail.com) lOMoARcPSD|20433478
  • 6. Condições de disputa É o momento em que dois ou mais processos tentam acessar simultaneamente um recurso comum. Quando processos interagem entre si, é necessária a existência de mecanismos de sincronização para garantir a coerência do sistema. Tipos de condições de sincronização:  Exclusão mútua: dois processos que tem acesso a um mesmo recurso não devem acessá-lo simultaneamente.  Ocorrência de um evento: processo só continua sua execução após um determinado evento ocorrer. Principais mecanismos de sincronização Semáforo: Para controlar exclusão mútua e fazer o aviso de ocorrência de eventos. É um tipo de dado com duas operações associadas (wait e signal). Variáveis do tipo semáforo só podem assumir valores inteiros não negativos. Se um processo, por erro de programação, deixar de enviar um signal em um local apropriado, pode acarretar em um deadlock nos processos (um processo esperando indefinidamente um recurso que outro processo nunca vai liberar). Monitores: Um monitor engloba em uma única unidade de programação todos os subprogramas que manipulam um recurso compartilhado. Os subprogramas de um monitor podem ser acessados por qualquer processo. Entretanto, se um processo estiver usando algum subprograma do monitor, nenhum outro processo terá acesso ao monitor, ficando suspenso até que o subprograma que estiver sendo usado termine. Rendezvous: Mecanismo implementado em ADA onde dois processos (usuário e o servidor) se encontram num determinado instante. Se o processo usuário solicitar um serviço antes do servidor aceitá-lo, o processo usuário fica suspenso até que ocorra o Rendezvous. Se o servidor executar um accept antes do serviço ser solicitado, este é que fica aguardando o Rendezvous. Os processos usuários devem conhecer os nomes dos serviços (entries) dos servidores. Os servidores aceitam chamadas de qualquer processo usuário. Rendezvous garante exclusão mútua: só um processo usuário executa um Rendezvous com o processo servidor. Deadlocks Termo empregado para traduzir um problema que ocorre quando um grupo ou conjunto de processos compete entre si. Um programa fica aguardando o outro e gera em uma parada no sistema. Normalmente esta situação ocorre para recursos como dispositivos, arquivos, memória, etc. Esta situação ocorre também em banco de dados. Condições para ocorrência do deadlock Não-preempção: recursos já alocados a outros processos não podem ser tomados à força. Eles precisam ser liberados exclusivamente pelo processo em utilização. Exclusão mútua: cada recurso ou está alocado a exatamente um processo ou está disponível. Posse-e-espera: cada processo pode solicitar um recurso, ter o mesmo alocado para si e ficar bloqueado esperando por um outro recurso. Espera circular: deve existir uma cadeia circular de dois ou mais processos, cada um dos quais esperando por um recurso que está com o próximo membro da cadeia. Gerência de entrada e saída Os dispositivos de entrada permitem ao computador acessar informações externas que são codificadas para poderem ser processadas pela CPU. Uma das responsabilidades do sistema operacional é de gerenciar o acesso aos Downloaded by Rafael Pilan (rafaelpilan@gmail.com) lOMoARcPSD|20433478
  • 7. periféricos por parte de processos que estão sendo executados no computador. Isto é obtido através de um conjunto de rotinas e métodos de acesso implementados e oferecidos pelo SO. Um periférico é um elemento de hardware conectado através de um barramento de E/S ao computador. O barramento permite que dados possam trafegar entre o computador e o periférico. Foram desenvolvidas diversas formas para que periféricos se comuniquem com o computador, portanto diferentes métodos de comunicação são empregados. Os elementos mais importantes entre essa comunicação são a interface de comunicação e o controlador do dispositivo:  Interface de comunicação: é a parte do periférico que se conecta diretamente ao barramento de E/S. A comunicação com o controlador se dá através de um conjunto de registradores (espaços de memória) que armazenam informações enviadas de/para a CPU. Existem dois tipos de interface:  Serial: trabalha somente com uma linha de transmissão da informação, sendo que o dado é transmitido sempre um bit por vez.  o Paralela: possui várias linhas de transmissão, possibilitando que vários bits sejam transmitidos simultaneamente.  Controlador: processador especializado no controle do dispositivo específico. O acesso aos registros do controlador pode-se dar por meio de duas formas:  Mapeada em espaços de E/S: a CPU emprega instruções especiais para manipular os registradores dos periféricos. Existem dois espações de endereçamento: o espaço que corresponde à memória principal e o espaço de E/S que corresponde aos registradores dos dispositivos.  Mapeada em memória: só há um espaço de endereçamento, sendo que alguns endereços específicos irão corresponder a registradores dos periféricos. Existem três maneiras de a comunicação ser implementada entre a CPU e os dispositivos, sem importar o tipo de mapeamento empregado:  E/S programada: toda troca de dados é de responsabilidade do processo, devendo, portanto, ser implementada pelo programador, de modo que o programa em execução transmita comandos para o dispositivo e em seguida aguarde o termino da operação. Há a desvantagem de o processo ficar esperando muito tempo pelo dispositivo.  Comunicação através de interrupções: interrupções são geradas pelo dispositivo para avisar a CPU que as operações requisitadas foram concluídas. Neste modo, a CPU não necessita monitorar o processo, ficando livre para outras tarefas. Uma interrupção é denominada mascarável quando se trata de uma interrupção de hardware que pode ser ignorada pelo processador; interrupções não-mascaráveis nunca podem ser ignoradas pelo processador e uma interrupção de software é gerada a partir de uma instrução pertencente a um processo.  Acesso direto à memória: a interface do dispositivo consegue transferir os dados diretamente para a memória, não havendo envolvimento direto da CPU. Um dos principais módulos do sistema operacional é o subsistema de E/S, responsável pelo gerenciamento da comunicação com os diversos periféricos conectados ao computador. Este módulo é estruturado em diversas camadas. A camada inferior realiza a interação com o hardware dos dispositivos através dos drivers de dispositivo, empregando mecanismos como interrupções e DMA. Esta organização em camadas permite que o restante do sistema operacional não se preocupe com os detalhes da interação com os diferentes tipos de dispositivos existentes. Esta camada inferior fornece às camadas superiores uma série de serviços que padronizam o acesso aos periféricos. Esta padronização levou a classificação dos dispositivos em função da forma como os dados são transmitidos:  Dispositivos orientados a caracteres: realizam a transmissão caractere a caractere, um byte por vez.  Dispositivos orientados a blocos: transmitem um conjunto de bytes de tamanho fixo. A camada imediatamente acima usa os serviços disponibilizados pelos drivers e pode ser considerada “independente de dispositivo”. Esta camada implementa funções genéricas (pois servem para qualquer periférico) e serviços gerais de E/S: Downloaded by Rafael Pilan (rafaelpilan@gmail.com) lOMoARcPSD|20433478
  • 8.  Gerência de buffer: quando é necessário controlar um buffer onde dados serão armazenados temporariamente pois o dispositivo não consegue lidar toda a informação se esta for enviada de uma só vez.  Cache de dados: gerência do armazenamento na memória daqueles dados mais frequentemente acessados.  Alocação de dispositivo: alguns periféricos admitem somente um usuário por vez. Esse controle é feito através de spooling (sequencializar os pedidos de acesso e atendê-los um por um.  Controle de acesso: Nem todos os usuários podem acessar os dispositivos da mesma forma e é responsabilidade do SO garantir essa proteção.  Escalonamento de E/S: para dispositivos compartilhados por vários processos visando melhorar seu desempenho.  Tratamento de erros: O software de E/S deve ser capaz de tratar erros, informando à camada superior o sucesso ou o fracasso das operações de E/S. Periférico disco rígido (HD) Os discos rígidos são meio de armazenamento de memória em massa, sendo constituídos por uma parte mecânica e uma parte eletrônica. Os dados são armazenados em um ou mais discos magnéticos rígidos. Seus principais componentes são o disco mecânico, a cache e a interface de comunicação. Um HD pode ser composto por uma série de pratos sobrepostos, cada prato possui duas faces graváveis. Em cada face os dados são gravados numa série de trilhas concêntricas. Cada trilha é dividida em blocos denominados setores, capazes de armazenar 512 bytes. A chave é um buffer de memória que existe dentro do HD e sua função é armazenar temporariamente os dados provenientes do computador. A interface é a parte do HD responsável pela conexão com o barramento do sistema e associada ao controlador. Ao sistema operacional, um aspecto relevante é o escalonamento do disco, que é a rotina do núcleo do sistema operacional que busca determinar quais pedidos de leitura e escrita serão atendidos e em que ordem. Vários processos podem requisitar simultaneamente pedidos de operações de E/S, e será função do escalonador de disco ordenar e atender a estes pedidos, buscando minimizar tempo de processos bloqueados. Numa operação de E/S em disco, um fator importante a ser levado em consideração é o tempo de seek, que é o tempo despendido pelo dispositivo para posicionar o cabeçote de leitura e gravação no ponto inicial no prato onde deverá ocorrer a operação de gravação ou leitura. Existem alguns algoritmos de escalonamento que visam minimizar o tempo de seek:  FCFS: as solicitações de acesso são atendidas na ordem em que os pedidos são realizados.  SSTF: o próximo pedido de E/S a ser atendido é aquele que se refere à trilha mais próxima da trilha atual, ou seja, que necessite menor movimentação do cabeçote de leitura/escrita.  SCAN: parecido com o escalonamento SSTF, porém mantém um sentido preferencial para o movimento do cabeçote (da trilha mais externa para a interna, por exemplo). Em relação a discos rígidos, há diversas novas padronizações:  MFM, RLL: Padrões antigos, não mais em uso.  IDE: Interface simples, faz uso do barramento ISA, possuía baixa taxa de transferência, tipicamente voltada para discos menores que 528MB.  EIDE: Melhorias do IDE, faz uso do barramento PCI, suportando discos de até 8.5 GB, com controlador na placa mãe; gerenciava até quatro discos.  SCSI: Controlador para sistemas com altas velocidades e grande capacidade. Suporta grande quantidade de discos de grande capacidade. Downloaded by Rafael Pilan (rafaelpilan@gmail.com) lOMoARcPSD|20433478
  • 9. Gerência de memória A memória RAM é um dos elementos mais importantes em um ambiente computacional, já que nesta terão os processos, rotinas do kernel e do SO. Se o espaço em memória não for suficiente para abarcar todos os processos que necessitam ser executados, então será utilizado o recurso de memória virtual, que permite que a memória RAM seja expandida de forma transparente para os processos, empregando espaço livre no disco rígido. Um processo é gerenciado pelo kernel como um elemento independente, residindo em uma área de memória própria na memória RAM. Essa área de memória contém as informações necessárias para a execução deste processo, tais como:  Área HEAP: armazena dados através de alocação dinâmica. Possui tamanho variável, aumentando ou diminuindo conforme forem ocorrendo as alocações e liberações de memória realizadas pelo processo.  Área DATA: contém os dados estatísticos empregados pelo processo. Possui tamanho fixo.  Área TEXT: local onde o código (conjunto de instruções) está armazenado. Possui tamanho fixo, calculado durante a compilação.  Área STACK: gerencia a pilha de execução do processo, que é a estrutura através da qual é feito o gerenciamento do fluxo de execução nas chamadas de rotinas e de seus parâmetros. Normalmente esta área começa em endereços altos de memória e cresce em direção aos endereços menores. Mecanismos de alocação de memória O tipo mais simples de alocação de memória consiste em dividir a memória em partições fixas, de tamanhos iguais. Em cada partição pode ser carregado um processo. Como desvantagem, os processos podem ter tamanhos diferentes dos tamanhos das partições, gerando locais inutilizados; o número máximo de processos na memória é limitado pelo número de partições e processos maiores que o tamanho da maior partição não vão poder ser carregados na memória, mesmo se todas as partições estiverem livres. A melhor opção é se cada partição puder ter seu tamanho ajustado para cada processo, ou seja, ter partições em tamanho variável. Na alocação contígua, os espaços de memória alocados devem formar áreas contíguas, isto é, sem descontinuidade. Apesar de simples, é uma estratégia pouco flexível e sujeita à fragmentação. Já na alocação segmentada, o espaço de memória de um processo é dividido em regiões, ou segmentos, que são alocados separadamente na memória. Além das quatro áreas básicas do processo (text, data, stack e heap), também podem haver segmentos para elementos como bibliotecas, pilhas de threads, buffers, etc. Ao estruturar a memória em segmentos, o espaço de memória de cada processo não é mais encarado como uma sequência linear de endereços lógicos, mas sim como uma coleção de segmentos de tamanhos diferentes. Durante a execução dos processos, áreas de memória inutilizadas por processos podem gerar áreas livres de memória entre os processos, o que é chamado de fragmentação externa. Esse problema afeta somente os mecanismos de alocação que trabalham com blocos de tamanho variável, como a alocação contígua e a alocação segmentada. A alocação paginada manipula blocos de mesmo tamanho, sendo por isso imune a este problema. A fragmentação é danosa porque limita a capacidade de alocação de memória no sistema. Para minimizar a fragmentação, cada requisição de alocação deve ser primeiramente analisada pelo gerente de memória para que encontre a melhor área de memória livre para cada caso. Os principais critérios a serem levados em consideração para esta escolha são:  Best-fit: escolha da menor área possível que atenda a requisição de alocação.  Worst-fit: escolher a maior área livre, de forma que as áreas restantes sejam grandes e possam ser usadas em outras alocações.  First-fit: escolha da primeira área livre que satisfaça o pedido de alocação.  Next-fit: percorre a lista das áreas livres a partir da última área locada ou liberada, para que o uso das áreas livres seja distribuído de maneira homogênea. Downloaded by Rafael Pilan (rafaelpilan@gmail.com) lOMoARcPSD|20433478
  • 10. Memória virtual O uso de um armazenamento externo como extensão da memória RAM é chamado de memória virtual. Quando processos inteiros são transferidos da memória para o disco rígido este procedimento é chamado de troca ou swapping. Entretanto, geralmente as transferências são feitas por páginas ou grupo de páginas, através de um mecanismo chamado de paginação. As páginas possuem um tamanho fixo, o que simplifica os algoritmos de escolha de páginas a serem removidas, bem como os mecanismos de transferência para o dispositivo. A ideia é transferir para o disco as páginas de memória pouco usadas. Os principais algoritmos para troca de páginas são:  FIFO: utiliza como critério o tempo em que os dados estão na memória, páginas antigas podem ser removidas para dar alugar a novas. As páginas são dispostas em uma fila de número de páginas com política First In, First Out. O número das páginas recém carregadas na memória é registrado no final da lista.  Ótimo: remove da memória páginas que irão ficar mais tempo sem ser usadas pelos processos. Como não é possível prever o comportamento dos processos, esse algoritmo não é válido.  LRU: são escolhidas as páginas que estão na memória há mais tempo sem serem acessadas. As páginas antigas e menos usadas são as escolhas preferenciais.  NRU: leva em consideração o momento da ultima modificação da página; opta por aquelas que não foram recentemente modificadas. Na maioria dos casos, pode-se levar como critério para escolha das páginas: idade da página (quanto tempo está na memória), frequência de acesso, data/hora do último acesso e prioridade do processo ao qual a página pertence. Sistemas de arquivos Um arquivo é basicamente um conjunto de dados armazenados em um dispositivo de armazenamento secundário e que é identificado com um nome único. Estes arquivos ficam alocados em um diretório, que permite o arranjo de modo hierárquico de todos os arquivos armazenados. O sistema de arquivos determina como as informações podem ser guardadas, acessadas, etc., toda e qualquer manipulação de dados é efetuada pelo sistema de arquivos. Cada sistema operacional possui seu próprio sistema de arquivos, conforme a seguir:  FAT: sistemas MS-DOS e Windows 3.1 até Windows 98 SE e Millenium; empregada também em pen drives, por exemplo.  NTFS: sistemas Windows 2000 até Windows 7.  Ext2 e Ext3: Linux. Cada arquivo é caracterizado por um conjunto de atributos que podem variar de acordo com o sistema de arquivos utilizado. Os atributos mais comuns são o nome do arquivo, seu tipo, data e hora de criação e ultima modificação de acesso, tamanho, etc. O uso dos arquivos é realizado por meio de um conjunto de operações implementadas através do system calls. As principais funções são: criação, leitura e gravação dos dados, alteração dos valores de atributos e deleção do arquivo. Para poder ler ou escrever dados em um arquivo, um processo precisa primeiro abrir o arquivo. A abertura de um arquivo consiste em preparar as estruturas de memória necessárias para acessar os dados do arquivo. Assim, o kernel deve localizar o arquivo no dispositivo de memória de massa (através do seu nome), checar se o processo pode (tem permissão para) acessar aquele arquivo, criar as estruturas de dados para representar o arquivo aberto, colocar uma referência (handler) para esta estrutura na lista de arquivos abertos mantida pelo sistema e finalmente retornar para o processo a referência a esta estrutura. As duas formas mais comuns de se acessar os dados que estão armazenados em um arquivo são o acesso sequencial dos dados e o acesso direto. No acesso sequencial, os dados são sempre lidos ou gravados Downloaded by Rafael Pilan (rafaelpilan@gmail.com) lOMoARcPSD|20433478
  • 11. sequencialmente, do início para o fim do arquivo. No modo de acesso direto, pode-se indicar a posição no arquivo onde a leitura ou gravação deve acontecer. Usualmente o sistema de arquivos acessa as informações no HD lendo ou escrevendo conjuntos de setores (blocos de bytes) a cada vez. Estes grupos de setores são denominados de blocos de alocação (ou clusters). O tamanho do bloco de alocação é determinado via de regra pelo próprio sistema de arquivos, e usualmente fica entre um a oito setores (isto é, um cluster possui entre 512 a 4 KB de tamanho físico). Exemplo de organização de um sistema de arquivos: FAT12 A estrutura geral de u volume formatado como FAT 12 é o que aparece na figura abaixo: Estrutura de um arquivo de diretório FAT12 Um diretório no sistema de arquivos FAT é uma sequência de entradas de 32 bytes cada, onde cada entrada corresponde a um arquivo (FAT12 e FAT16 convencionais). Na FAT empregada pelo Windows 95 (que é chamada de VFAT), para cada arquivo podem ser usadas mais de uma entrada de diretório, onde uma entrada segue o formato tradicional e as demais armazenam o nome do arquivo usando codificação UNICODE (2 bytes por caractere). Então, o formato de uma entrada de diretório FAT 12 fica (tamanho em bytes indicado abaixo de cada campo): Sistema de arquivos NTFS Surgiu com o lançamento do Windows NT. Uma das características do NTFS diz respeito à recuperação: em caso de falhas, o NTFS é capaz de reverter os dados à condição anterior ao incidente. O NTFS também é capaz de permitir que o usuário defina quem pode e como acessar pastas e arquivos. Para manter a integridade do sistema, basicamente, três passos são executados: verificação do log para checar quais clusters devem ser corrigidos; nova execução das transações marcadas como completas no final do log; reversão de procedimentos que não puderam ser concluídos. Perceba que, com isso, o NTFS pode não conseguir recuperar os últimos dados gravados antes da interrupção, mas garante o pleno funcionamento do sistema operacional eliminando erros que podem comprometer o desempenho ou causar problemas ainda maiores. Árvore de diretórios no SO Linux A estrutura do sistema de arquivos aqui definida é a FSSTND. O diretório raiz (/) é normalmente subdividido em uma coleção de subdiretórios. Cada um destes subdiretórios armazena uma classe específica de arquivos, como pode ser visto na tabela a seguir: subdiretório Função (classe de arquivos armazenados) bin Executáveis essenciais (comandos); ex: cat, chmod, cp, date, dd, df, ed, kill, login, ls, mkdir, more, mount, mv, ps, pwd, rm, rmdir, umount, ... boot Arquivos estáticos do carregador de boot (boot loader) dev Arquivos de dispositivos etc Arquivos e scripts para configuração do sistema; ex: csh.login, fstab, group, inittab, lilo.conf, passwd, profile, exports, hosts, networks, protocols, ... Downloaded by Rafael Pilan (rafaelpilan@gmail.com) lOMoARcPSD|20433478
  • 12. home Diretórios para usuários lib Bibliotecas compartilhadas (shared libraries) mnt Diretório para montagem de sistemas de arquivos temporários proc Pseudo sistema de arquivos (armazena informações de processos) root Diretório do administrador do sistema (root user) sbin Executáveis essenciais (para administração do sistema); ex: clock, getty, init, mkswap, swapon, swapoff, shutdown, fdisk, fsck, mkfs, badblocks, dumpe2fs, e2fsck, lilo, ifconfig, route, ... tmp Arquivos temporários usr É a 2º maior porção do sistema de arquivos; armazena arquivos compartilháveis, geralmente read-only (tabela a seguir) var Dados variáveis; incluem arquivos de spool, arquivos de log e arquivos temporários; não pode ser uma partição separada Observações sobre o shell no Linux O shell é a camada do sistema operacional que interpreta os comandos dos usuários e dispara os processos adequados. Do ponto de vista do usuário, o shell é representado por uma janela de terminal onde são inseridos comandos. No Linux, a versão mais utilizada atualmente é a bash. Comandos úteis para manipulação de arquivos e diretórios  pwd: mostra caminho do diretório corrente (path do diretório onde se está)  ls: lista conteúdo do diretório (mostra arquivos e subdiretórios que estão no diretório  mkdir: cria um diretório  cd: muda (alterna) para este diretório  cat: cria um arquivo, mostra um arquivo ou concatena arquivos  more: mostra o conteúdo de um arquivo  cp: copia arquivo  rm: deleta (remove) arquivo  mv: move um arquivo (usado também para renomear arquivos)  chmod: altera as permissões de acesso de um arquivo  ps: lista processos da máquina  man: utilitário de ajuda Linux Filesystems O EXT era um sistema de arquivos para Linux. Com seu lançamento, foi aumentado o tamanho máximo do sistema de arquivo de 64MB para 2GB e aumentado também o tamanho do nome do arquivo (de 30 para 255 caracteres). Logo, foi lançado o EXT2 que resolvia problemas de fragmentação e desempenho do antecessor. Houve melhoria no aumento para 4 TB o tamanho da partição e o uso de 3 timestamps nos arquivos (criação, modificação e acesso); o nome do arquivo também foi incrementado para 1012 caracteres. O EXT3 foi baseado em seu antecessor, o que significa que um sistema EXT2 pode ser convertido em EXT3 e vice- versa. Como ganho, o EXT3 possui uma poderosa ferramenta de FSCK e é um journaling system (determinados eventos são noticiados ao sistema). A integridade dos dados pode ser feita de três modos (em ordem de velocidade): “data=writeback” : Rápido, evita fsck, mas recupera dados antigos após um crash. ● “data=ordered”: (default mode) Grava as modificações dos metadados e grava os blocos modificados. ● “data=journal” : Todas as modificações no sistema de arquivos são gravadas possibilitando uma recuperação total, ● mas tornando o sistema muito lento. Downloaded by Rafael Pilan (rafaelpilan@gmail.com) lOMoARcPSD|20433478
  • 13. O EXT4 é um refinamento do EXT2 usando duas partições simultaneamente. Uma partição armazena os diretórios e Inodes (estrutura de representação de um arquivo contendo sua descrição e o apontador para o bloco no disco) e a outra os arquivos. A ideia do sistema é realizar leitura/gravação simultaneamente de diretórios e arquivos. Sistemas operacionais de tempo real As aplicações devem ter a certeza que o núcleo não irá demorar demais para fornecer um serviço de tal modo que o processo possa responder em tempo hábil à requisição feita pelo ambiente externo. Dentro deste contexto, um aspecto importante é que os tempos de execução das diversas rotinas que compõe o núcleo do SO devem ser conhecidos. Estas rotinas devem possuir tempos de execução constantes e previsíveis tanto quanto for possível. Os sistemas operacionais real-time podem ser classificados em:  Hard real time: tarefas críticas devem ter a garantia de que serão completadas dentro do prazo; não há suporte à armazenamento secundário, portanto, não há suporte à memória virtual; características avançadas de um sistema operacional podem comprometer o seu tempo de execução e, portanto, não são implementados em um SO real time. Os sistemas Hard RT são utilizados em sistemas de missão crítica onde falhas não são admissíveis.  Soft real time: possui basicamente as mesmas características do hard real time, porém possui relaxamento nas garantias temporais de execução oferecidas pelo sistema operacional. A principal diferença entre ambos está no quão critica será a eventual ocorrência de uma falha (uma falha em um sistema Hard RT é encarada como uma falha fatal ou desastrosa enquanto que uma falha em um sistema Soft RT é considerada apenas uma falha indesejável). Um aspecto central na implementação de sistemas de tempo real são as técnicas de escalonamento de processos, pois é muito importante garantir que as tarefas sejam executadas dentro de seus prazos, sem atrasos e dentro do tempo máximo desejado para sua conclusão. Como já foi visto, o termo escalonamento define o procedimento de ordenar os processos numa fila de execução. Os algoritmos de escalonamento podem ser definidos como preemptivos ou não preemptivos. Quando os processos que estão executando podem ser interrompidos por outros com maior prioridade, temos então um algoritmo de escalonamento preemptivo. Se isto não for permitido, então o algoritmo não é preemptivo. Sistemas operacionais com suporte para sistemas distribuídos São máquinas independentes conectadas por redes. Sistemas deste tipo normalmente são compostos por uma quantidade muito grande de processos interagindo entre si, sendo executados sobre uma infraestrutura também complexa, usualmente composta por servidores remotos rodando em plataformas diferentes. Num ambiente deste tipo, alguns fatores impactam diretamente no desempenho do sistema, como a largura de banda disponível para o tráfego de dados e o poder computacional particular de cada um dos servidores. Um sistema operacional com suporte a sistemas distribuídos deve oferecer uma série de funcionalidades que viabilizem a execução distribuída de processos, destacando:  Suporte ao tratamento de erros e recuperação de falhas: quando por exemplo um servidor fica temporariamente indisponível e não conseguir responder às requisições geradas a partir de outros servidores.  Possibilidade de balanceamento de carga: para não comprometer a estabilidade e o desempenho dos servidores.  Controles de acesso: para garantir que processos não prejudiquem a execução de outras tarefas dentro do ambiente distribuído. Outro aspecto relevante diz respeito a forma como será implementado o sincronismo entre os diversos agentes que compõe o sistema distribuído. Neste caso, temos:  Sistemas Distribuídos Síncronos: o processamento e a transmissão de mensagens tem limites de tempos bem determinados. Downloaded by Rafael Pilan (rafaelpilan@gmail.com) lOMoARcPSD|20433478
  • 14.  Sistemas Distribuídos Assíncronos: não há limites bem definidos de tempo para execução e transmissão das mensagens Vantagens e desvantagens do sistema operacional distribuído em relação a sistemas centralizados Vantagens: preço, velocidade, distribuição física, confiabilidade, disponibilidade e crescimento incremental. Desvantagens: ainda não está tão maduro quanto o software para sistemas centralizados, dependência da rede, segurança (roubo de dados). Downloaded by Rafael Pilan (rafaelpilan@gmail.com) lOMoARcPSD|20433478