1. Introdução 1.1. Conceituação dos Sistemas Operacionais A maior

Propaganda
1. Introdução
1.1. Conceituação dos Sistemas Operacionais
A maior parte dos equipamentos que possuem sistemas operacionais, tais como
estações de trabalho, computadores pessoais ou simplesmente PCs (Personal
Computers) que são utilizados nas empresas e residências, além dos notebooks,
celulares, automóveis, eletrodomésticos, televisores, entre outros, interage com os
usuários de forma praticamente imperceptível. Contudo, as ações finais que esses
dispositivos executam através de seus softwares são realizadas pelos sistemas
operacionais (operating systems).
Como o sistema operacional evoluiu ao longo do tempo, suas características serão
abordadas neste livro-texto.
Quando se pensa em sistema operacional, logo vêm à mente alguns dos mais
famosos softwares do mercado, tais como Windows e Linux. Mas os sistemas
operacionais surgiram muito antes do desenvolvimento do Windows e do Linux.
Sistemas como MVS, OS/390 e o próprio UNIX são muito mais antigos.
O sistema operacional, segundo Deitel, H. M.; Deitel, P. J.; Choffnes, D. R.
(2005), é um software que habilita as aplicações a interagir com o hardware de
um computador. Seu componente central é o núcleo, também conhecido como
kernel. Os sistemas operacionais estão presentes em telefones celulares,
automóveis, eletrodomésticos, computadores pessoais, além dos computadores
de grande porte, ou mainframes (consultar glossário).
Na figura 1 é possível perceber a posição do sistema operacional no contexto do
computador. Assim, o sistema operacional relaciona-se com os softwares instalados
para que estes tenham condição de interagir com os dispositivos do hardware. Dessa
forma, o sistema operacional atua como um intermediário entre o usuário do
computador e o hardware (Silberschatz, A.; Peterson, J. L.; Gavin, P., 1992).
O sistema operacional faz a conexão entre os softwares aplicativos e as
necessidades que estes possuem em interagir com o hardware. Dessa forma, os
programadores de aplicações não necessitam ter sólidos conhecimentos de
gerenciamento de memória ou de disco porque, hoje em dia, quem realiza essa
atividade é o sistema operacional, de forma automática. O propósito de um sistema
operacional é o de prover um ambiente no qual o usuário pode executar programas de
uma forma conveniente e eficiente.
A partir da segunda metade do século XX, a computação evoluiu de uma forma
surpreendente. Os recursos de um computador evoluem a taxas incríveis ao mesmo
tempo em que o custo decresce. Os usuários de hoje, dos escritórios e das empresas,
têm à sua disposição computadores pessoais que executam bilhões de instruções por
segundo, e equipamentos que executam trilhões de instruções por minuto já são
realidade — cifras consideradas impossíveis de serem alcançadas há poucos anos.
Ao mesmo tempo em que o preço dos microprocessadores reduziu, ampliou-se
o seu poder, a tal ponto que esses dispositivos podem ser empregados em
praticamente todas as situações da vida moderna.
Nos computadores pessoais desenvolvemos a maior parte das atividades
relacionadas à vida moderna. Neles, é possível desenvolver documentos
eletrônicos, tais como textos, planilhas e apresentações. Também é possível
ouvir música, assistir a vídeos, participar de comunidades virtuais e utilizar uma
infinidade de aplicações voltadas a proporcionar mais comodidade aos usuários.
Outros dispositivos, além dos computadores pessoais, também possuem seus
recursos de microprocessamento embarcados, por exemplo, os telefones
celulares, os aparelhos MP3 e os aparelhos GPS.
O aumento do número de dispositivos que possuem acesso a rede e a
ampliação das redes com e sem fio aumentam a interatividade e propiciam
comunicações entre pessoas localizadas a longas distâncias umas das outras. Esse
fenômeno convergiu para um crescimento, como nunca foi visto, da Internet e da
World Wide Web. Esse crescimento promoveu a criação e o desenvolvimento de uma
infinidade de novos serviços, que revolucionam os negócios das empresas hoje em dia
e demandam o processamento de enormes quantidades de transações por segundo.
Isso quer dizer que os sistemas operacionais, que apóiam essa estrutura altamente
crítica de processamento, passam por uma intensa transformação de papéis e
responsabilidades.
O sistema operacional como um software que controla um hardware é uma
definição da década de 1960. Há algum tempo os sistemas operacionais evoluíram e
passaram a exercer mais papéis.
2 . C o m p o n e nt e s d o S i s t e m a O p e r a c io n a l
Nos sistemas operacionais, os usuários requisitam ao computador que realize
uma determinada tarefa e o sistema operacional gerencia o software e o hardware
para chegar à execução do resultado desejado. Dessa forma, por exemplo, quando
um usuário solicita a impressão de um documento, o sistema operacional age no
encaminhamento do documento até a porta de impressão virtual onde está instalada
uma impressora, converte o arquivo para um formato que a impressora possa entender
e o envia para impressão, monitorando o feedback do dispositivo, para saber se o
documento foi impresso ou se algum problema ocorreu, como falta de papel, falta de
tinta ou toner, papel encravado, etc.
Uma outra forma de interação com o sistema operacional é através de uma aplicação
chamada shel, que é um interpretador e, na maioria dos casos, é implementado como
interface de texto.
Como ao sistema operacional estão reservadas as tarefas mais intrínsecas do
ambiente computacional, é comum que a maioria dos usuários ache-o uma “caixa
preta” (Deitel, H. M.; Deitel, P. J.; Choffnes, D. R., 2005). Pois não entendem
como a relação entre software e hardwares, como processador, memória, disco
rígido, modem, assegura a realização do trabalho correto.
O software que contém os componentes centrais do sistema operacional chama-se
núcleo ou kernel, em inglês. Dentre os componentes centrais do sistema operacional
destacam-se:
3
escalonador de processos — Determina o momento e o período de
tempo em que um processo é executado pelo processador;
3
gerenciador de memória — Determina o momento e a forma como a
memória será cedida aos processos e o que fazer quando a memória
principal estiver cheia;
3
gerenciador de E/S — Atende às solicitações de entrada e saída
destinadas e provenientes dos dispositivos de hardware;
3
gerenciador de comunicação interprocessos (IPC) — Permite que os
processos se comuniquem entre si;
3
gerenciador de sistema de arquivos — Organiza as coleções de dados
gravados nos dispositivos de armazenamento e fornece uma referência
para acessar os dados neste dispositivo.
3 . Evo luç ã o dos Sist em a s O p e r a c io na is
3.1. Década de 40
3
Surgem os primeiros computadores digitais eletrônicos. Porém, esses
equipamentos não possuíam um sistema operacional.
3
Programas eram submetidos em linguagem de máquina.
3
É quando ocorre a introdução da perfuração de cartão para armazenagem
dos programas (ver figura 4).
3
O Assembly (consultar glossário) foi desenvolvido para agilizar o processo
de programação.
3.2. Década de 50
3
Surge o primeiro sistema operacional, no início da década, desenvolvido
pelos laboratórios de pesquisa da General Motors, para ser executado em
seu computado IBM 701.
3
O IBM 701 foi o primeiro equipamento da IBM para uso geral.
3
O IBM 701 executava apenas um “job” (consultar glossário) de cada vez.
3.3. Década de 60
3
Deu-se início à multiprogramação (ver figura 5), quando projetistas
desenvolveram sistemas operacionais que gerenciavam diversos jobs ao
mesmo tempo.
3
Em 1964 a IBM lançou a família System/360, que utilizava o sistema
operacional OS/360 e tinha a versatilidade de possuir escalabilidade, ou
seja, podia oferecer maior capacidade à medida que o usuário necessitava
fazer crescer a série. Com isso, a IBM permitiu que a arquitetura 360
pudesse evoluir para séries superiores e posteriores, como a série 370,
série 390 e, mais recentemente, para a zSeries, à medida que eram
lançadas, possibilitando o reaproveitamento, de uma maneira facilitada,
dos códigos escritos nas séries anteriores.
3
Os usuários interagiam com o computador por meio de “terminais burros”,
ligados on-line diretamente ao computador.
3
Passou-se a focar a melhoria de produtividade e redução de recursos
humanos.
3
Foram desenvolvidos sistemas de tempo compartilhado (Time Sharing
Systems) (consultar glossário) e sistemas de tempo real (Real Time
Systems) (consultar glossário).
3
Vários sistemas operacionais de tempo compartilhado foram desenvolvidos
nessa época, tais como o CTSS (Compatible Time Sharing System),
desenvolvido pelo MIT, o TSS (Time Sharing System), desenvolvido pela
IBM, o Multics, desenvolvido pelo MIT, GE e BELL para ser o sucessor do
CTSS, e o CP/CMS (Control Program / Conversation Monitor System), que
evoluiu para o VM (Virtual Machine) da IBM, desenvolvido pelo Cambridge
Scientific Center da IBM.
3
Os sistemas operacionais passaram a ser escritos em linguagem de alto
nível. O primeiro caso foi o Multics, que foi escrito em PL1 da IBM.
3
Na sequência, os projetistas da UNIX desenvolveram o C especificamente
para desenvolver o UNIX. Famílias de sistemas operacionais tiveram início
a partir do UNIX, como o Xenix e o Linux, que atualmente possui diversas
distribuições.
3
Em 1965, programadores com certa experiência recebiam US$ 4 por hora,
enquanto o custo do aluguel da hora de um computador de grande porte,
que possuía uma capacidade muito menor que a dos computadores
pessoais de hoje, era normalmente de US$ 500 (Deitel, H. M.; Deitel, P.
J.; Choffnes, D. R., 2005) (ver figura 6).
3.4. Década de 70
3
Criação da interface gráfica com o usuário (GUI — Graphical User
Interface), desenvolvida pelo Palo Alto Research Center (PARC) da Xerox.
O primeiro sistema operacional dotado de interface gráfica com o usuário
se chamou Alto (ver figuras 7a e 7b). O Alto foi projetado e construído pela
Xerox e, embora a Xerox tenha doado certa quantidade para várias
organizações, a empresa nunca vendeu nenhuma licença do Alto.
3
Nessa década os sistemas foram favorecidos pelos desenvolvimentos
anteriores. Tornaram-se multimodais de multiprogramação, que suportava
processamento em lote, tempo compartilhado e aplicações de tempo real.
3
Ocorre o amplo uso do protocolo TCP/IP e as redes LANs (Local Area
Network) tornam-se práticas e baratas, a partir da aplicação do padrão
Ethernet desenvolvido no Palo Alto Research Center (PARC) da Xerox. Com
esses avanços, as comunicações entre computadores tornaram-se fáceis e a
conectividade ficou mais frequente.
3
Nesse momento, os sistemas operacionais passaram a oferecer serviços
de configuração da rede e administração da segurança, e seu desempenho
cresce continuamente.
3
Os sistemas GUI foram amplamente explorados na década de 1980 pela
Apple e pela Microsoft.
3.5. Década de 80
3
O sistema Apple II teve uma aceitação extraordinária.
3
A IBM lança o Personal Computer (PC) em 1982 e a Apple lança a sua
versão de computador pessoal (ver glossário), batizado de Macintosh, em
1984.
3
O poder de processamento dos microprocessadores cresceu de tal forma
que os computadores pessoais dessa década possuem um poder de
processamento equivalente aos computadores de grande porte de uma
década atrás.
3
Em 1981 a Microsoft lança a primeira versão do MS-DOS para
computadores pessoais IBM. A versão da IBM chamava-se DOS.
3
O MS-DOS representou um marco na indústria de software, porque
permitiu que os fabricantes de software para rodar no MS-DOS o fizessem
com muito mais facilidade do que era nos demais sistemas operacionais
até então. A grande redução de trabalho que o MS-DOS proporcionou aos
fabricantes de software foi principalmente o uso das Interfaces de
Programação de Aplicativos (API), que os programadores utilizavam para
realizar manipulações detalhadas de hardware e outras operações. Dessa
forma, os programadores de aplicações não necessitariam mais mexer
com questões complexas de software, como o gerenciamento da memória
do computador pessoal e acessos a seus dispositivos de entrada/ saída (ver
figura 8).
3
Nesse momento ocorre uma enorme revolução na utilização dos recursos
digitais, pois indivíduos sem formação tecnológica e as pequenas e médias
empresas passam a ter os seus próprios computadores exclusivos, que
também podiam transmitir dados entre sistemas de forma rápida e
econômica.
3
Softwares aplicativos, tais como planilhas eletrônicas e editores de texto,
ganham espaço e auxiliam as empresas a ganhar produtividade.
3
Boa parte dos usuários dos computadores pessoais passa a utilizar correio
eletrônico, transferência de arquivos e acesso a bancos de dados remotos.
3
Surge a computação distribuída, que dá origem à arquitetura
Cliente/Servidor (ver figura 9).
3
Em meados dessa década a Microsoft desenvolveu sua plataforma GUI, o
Windows, que ainda não atuava como sistema operacional porque era
executado de forma “sobreposta” ao DOS.
3.6. Década de 90
3
No final da década de 1990 um computador pessoal podia executar várias
centenas de milhões de instruções por segundo (MIPS), enquanto
armazena mais de 1Gb em disco rígido.
3
A Internet levou a uma enorme ampliação na popularidade da
computação distribuída.
3
Em 1990 a Microsoft lançou o Windows 3.0, que apresentava grande
funcionalidade.
3
O Windows tornou-se popular a partir de 1993, com o lançamento do
Windows 3.1. Os sucessores, o Windows 95 e o Windows 98,
praticamente dominaram o mercado, ainda nessa mesma década.
3
Usuários domésticos e empresas aumentavam a sua produtividade, agora
com os computadores pessoais ligados em rede.
3
A Microsoft tornou-se dominante nessa época.
3
O Windows “tomou em prestados” muitos dos conceitos do Macintosh, tais
como ícones, menus e janelas, e habilitava os usuários a utilizar múltiplas
aplicações concorrentes de forma muito fácil.
3
Em 1993 a Microsoft decidiu também entrar no mercado de sistemas
operacionais corporativos e lançou o Windows NT.
3.7. Década de 2000
3
Ocorre a disponibilidade da Internet de alta velocidade a preço acessível,
através de diversas mídias, como par metálico telefônico, redes de cabo
coaxial das companhias de TV a cabo, satélite e celular.
3
Surgem os microprocessadores com mais de núcleo, o que agrega uma
forte ampliação da capacidade de processamento dos computadores
pessoais e notebooks.
3
Linguagens de programação, como o Java, habilitam o surgimento da
computação paralela.
3
Diferentemente dos sistemas e computadores da década de 60, que
processavam as suas instruções de forma sequencial, ou seja, uma após a
outra, na computação paralela, o processamento de uma determinada
tarefa se dá enquanto o processador processa outras informações e
gerencia diversos dispositivos.
3
Surgem sistemas operacionais de código aberto, como o FreeBSD,
OpenBSD e Linux, baseado no GNU (General Public Licence), criado pela
Free Software Foundation, que é um conceito da década de 1980,
desenvolvido por seu fundador, Richard Stallman. Ele especifica que
qualquer pessoa pode modificar e redistribuir software livremente sob sua
licença, desde que as modificações sejam claramente especificadas e que
qualquer outro derivado do software também seja livre.
3
Tornou-se possível configurar e registrar as preferências do perfil dos
usuários, o que faz com que o sistema operacional se ajuste a essas
preferências cada vez que o usuário realizar a sua autenticação no
sistema operacional.
3
Características do tipo “plug-and-play” foram adicionadas aos sistemas
operacionais, que habilitam os usuários a adicionar e remover
dispositivos do sistema operacional sem a necessidade de reconfigurálos manualmente a cada nova ação.
3
Os projetistas preparam sistemas operacionais padronizando as
interfaces com os usuários, como, por exemplo, no caso da adoção do
sistema de janelas e ícones também por outros sistemas operacionais,
como o Linux e suas distribuições, e pelo próprio UNIX.
3
Surge a computação móvel, proporcionada pelos dispositivos móveis,
como telefones celulares, smartphones e PDAs, que passam a ser
dotados de processadores cada vez mais poderosos, dando a
oportunidade para a criação de novos sistemas operacionais, que
poderão estar associados a questões muito específicas.
3
A proliferação dos dispositivos móveis deve-se em parte à evolução da
amplitude e velocidade e à redução de custo dos serviços de comunicação
de dados para esses dispositivos.
4. Conceitos Básicos Sobre Processador, Memória e Armazenamento
Secundário
4.1. Processador
Boa parte dos sistemas operacionais depende do processador para gerenciar o
seu mecanismo de proteção de forma a impedir alguns processos de acessar
informações privilegiadas, ou memória que não lhe foi alocada. É um componente
do hardware que executa um conjunto de instruções em linguagem de máquina,
objetivando a execução eficiente de uma atividade específica. Os processadores
podem atuar também como CPU (Unidade Central de Processamento), como um
coprocessador gráfico, etc.
4.2. Memória Principal
É a RAM (Random Access Memory), e consiste em uma memória volátil e de
acesso aleatório. Sendo volátil, significa que perde seus dados quando o computador
é desligado. Quanto ao acesso aleatório, permite que os processos possam realizar
pesquisas em qualquer ordem para a localização de dados. O sistema pode impedir
esses processos de acessar endereços de memória que não lhe foram atribuídos,
fornecendo registradores de limite que especificam o endereço de início e de fim da
memória atribuída a um processo.
As memórias DRAM (RAM Dinâmica) são os tipos mais comuns de memória RAM, e
obrigatoriamente precisam ser acessadas de tempos em tempos para que o conteúdo
não seja perdido. As memórias SRAM (RAM Estática), normalmente utilizadas como
caches de processador, não precisam ser acessadas periodicamente e são mais
rápidas e também mais caras que as memórias DRAM.
4.2.1. Hierarquia das Memórias
3
Registradores – Estas memórias muito rápidas operam na velocidade do
processador, estão incorporadas no próprio processador e guardam dados
para uso imediato pelo processador;
3
Cache – As memórias cache são divididas em L1 e L2, às vezes L3, e são
integradas aos processadores mais novos para poder explorar as
interconexões de alta velocidade. Muitos megabytes são transferidos entre
a cache e o processador antes de estarem disponíveis para a memória
principal. Possuem uma latência (tempo de resposta) superior à dos
registradores;
3
Memória Principal ou Memória Primária – São memórias voláteis com
maior capacidade de armazenamento e acesso mais lento que os
registradores e cache;
3
Armazenamento Secundário – É a forma de armazenamento mais
lenta, porém com maior capacidade de armazenamento. São os discos
rígidos, CD, DVD, etc.
Novos desenvolvimentos dos fabricantes tendem a possibilitar o
desenvolvimento de memórias mais velozes e de maior capacidade, com
custo menor, respeitando a Lei de Moore.
A chamada “Lei de Moore”, que é a “profecia” feita na década de 70 por
Gordon Moore, um dos fundadores da Intel, de que a potência dos
processadores dobraria a cada 18 meses, sobreviveu mais de duas
décadas e ainda não parece estar totalmente desgastada, apesar do ciclo
evolutivo dos transistores estar chegando ao fi m e novas tecnologias
estarem sendo estudadas.
3
Armazenamento Secundário — Devido à sua capacidade limitada e
volatilidade, a memória principal não é adequada para armazenar grandes
quantidades de dados ou por muito tempo, ou ambos. Para realizar o
armazenamento de grandes quantidades de dados de forma permanente,
como arquivos e softwares, o computador usa o armazenamento
secundário. Normalmente o armazenamento secundário se dá no disco
rígido ou no pen drive. Apesar de custar menos e armazenar mais do que as
memórias RAM, não possui a mesma velocidade de acesso.
5. Sistemas
5.1. Sistema Monousuário e Monotarefa
É quando o sistema operacional permite que apenas um usuário execute uma tarefa
de cada vez. Um bom exemplo está nos sistemas operacionais de boa parte de telefones
celulares, ou também o sistema operacional PALM OS.
5.2. Sistema Monousuário e Multitarefa
É o caso do usuário que utiliza um computador pessoal em casa ou no escritório. Essa
situação configura um ambiente monousuário, porque apenas um usuário acessa o
computador pessoal em cada momento. Contudo, sistemas operacionais como Windows
XP, Windows Vista e Linux permitem que esse usuário utilize muitas tarefas
simultaneamente, como, por exemplo, acessando e-mails enquanto visita alguns sites e
verifica os dados de uma planilha, ouvindo uma rádio na Internet, com todos esses
serviços sendo executados de forma simultânea.
5.3. Sistema Multiusuário
É o sistema operacional comumente encontrado nos servidores (ver figura 11), em
que uma série de usuários pode estar realizando tarefas concorrentes e acessos a
informações de banco de dados sem que um interfira no trabalho do outro. Um
exemplo é o Windows XP Server 2003 ou o UNIX.
6. Chamadas ao Sistema
Desde a década de 1980, os sistemas operacionais incorporaram as Interfaces de
Programação de Aplicativo ou API (Application Programming Interfaces). As APIs (ver
figura 12) fornecem rotinas que os programadores podem utilizar no desenvolvimento
de softwares para requisitar serviços ao sistema operacional, por exemplo, para
realizar uma impressão ou gravar um determinado conteúdo em disco. Essas
chamadas das APIs que executam rotinas numa camada mais baixa do sistema são
conhecidas como “chamadas ao sistema”.
6.1. Sistemas com Compartilhamento de Tempo (Time Sharing)
Um sistema com compartilhamento de tempo (Time Sharing), também conhecido
como “multitarefa” (Silberschatz, A.; Peterson, J. L.; Gavin, P., 1992), é uma extensão
lógica da mutiprogramação (ver figura 5). Vários jobs sãos executados pela CPU, que
comuta o processamento de cada job. O sistema Time-Sharing foi desenvolvido para
prover interatividade no uso dos computadores pessoais a um custo acessível.
Um sistema Time-Sharing utiliza o gerenciamento e a multiprogramação da CPU
para prover a cada usuário uma pequena porção de tempo compartilhado de
processamento.
6 . 2 . Sis temas Di s tr ibu ídos
O processamento distribuído de dados (ver figura 13) compreende a ação de um
conjunto de processadores interconectados de tal forma a permitir a descentralização
dos recursos e prover um ambiente para execução de programas de aplicação.
A maior vantagem desse sistema é que, em caso de falha de hardware de qualquer
dos processadores, o outro pode assumir as funções e continuar os seus trabalhos.
Essa característica aumenta a confiabilidade no sistema.
6.3. Sistemas de tempo Real
São sistemas utilizados normalmente como um dispositivo de controle rodando em
uma aplicação dedicada.
6.4. Bootstrap
Para que um sistema operacional possa começar a gerenciar os recursos de um
computador, é necessário que ele seja carregado na memória no momento da
inicialização do computador.
7. Gerenciamento de Processos
7.1 Conceituação de Processos
O gerenciamento de processos ocorre porque o sistema, quando intercala a
execução de um determinado processo, deve conseguir administrá-lo cuidadosamente
para que possa reiniciá-lo quando ele for retomado. Os processos devem possuir a
capacidade de poder comunicar-se com o sistema operacional, de forma que possam
informar, por exemplo, o fim da execução do processo.
7.2. Condições de Corrida e Regiões Críticas
Alguns sistemas operacionais permitem que processos que trabalham de forma
simultânea frequentemente compartilhem o mesmo armazenamento. Esse
armazenamento pode ocorrer na memória principal ou pode ser um arquivo
compartilhado.
A natureza do armazenamento não elimina a região crítica quando ocorre o risco de
problema (ver figura 14). Segundo Tanenbaum (1987), onde dois ou mais processos
estão lendo ou gravando um dado compartilhado localizado no mesmo endereço de
memória principal ou secundária, pode ocorrer uma “condição da corrida” (race
condition) ou “condição de disputa” (DEITEL, H. M.; DEITEL, P. J.; CHOFFNES, D. R.,
2005). Essa situação deve ser evitada porque pode causar erros em aplicações que
serão difíceis de identificar.
Para prever o aparecimento das regiões críticas, deve-se encontrar um meio de
proibir que mais de um processo leia ou grave os dados compartilhados no mesmo
momento e no mesmo endereço. Assim, é necessário garantir que, se um processo
estiver utilizando uma variável ou arquivo compartilhado, o outro processo será
impedido de realizar a mesma tarefa.
7 . 3 . C on cor r ên cia e Sin cr on izaçã o
7.3.1. Processos Concorrentes
Os processos no sistema podem ser executados de maneira concorrente. Isso quer
dizer que muitos processos podem ser multitarefa em uma CPU. Existem várias
razões que justificam permitir as execuções concorrentes:
3
Compartilhamento de Recurso Físico — Os recursos de hardware do
computador são finitos e podem ser compartilhados, tornando o ambiente
multiusuário;
3
Compartilhamento de Recursos Lógicos — Muitos usuários podem
estar interessados no mesmo fragmento de informação, que pode ser
provida em um ambiente que permita o acesso concorrente a esses
recursos;
3
Aumento de Velocidade da Computação — Quando se deseja que uma
tarefa específica seja executada rapidamente, quebra-se essa tarefa em
subtarefas e uma a uma elas são executadas paralelamente com outras;
3
Modularidade — Quando ocorre a construção de sistemas em padrão
modular, dividindo-se as funções em processos distintos;
3
Conveniência — O usuário pode querer ter muitas tarefas para trabalhar
ao mesmo tempo. Um exemplo está no fato de que usuários podem estar
editando, imprimindo e compilando de forma concorrente.
7.3.2. Sincronização
Serão apresentadas algumas instruções simples de hardware que podem ser
executadas em muitos sistemas. Essas instruções especiais podem ser usadas para
resolver os problemas de regiões críticas com relativa simplicidade. Uma instrução
pode ser definida na forma que segue:
7 . 4 . Monitores e Semáforos
7.4.1. Monitores
Para facilitar o processo de escrever programas de forma correta, foi proposta
uma sincronização de alto nível chamada “monitor”. Um monitor é uma coleção de
procedures, variáveis e estruturas de dados que são agrupados em um tipo especial de
pacote. Processos podem chamar as procedures em um monitor se necessitarem, mas
não terão acesso às estruturas de dados internos de uma procedure declarada fora do
monitor.
7.4.2. Semáforos
Como resultado para a dificuldade com as regiões críticas, existe uma ferramenta
de sincronização chamada semáforo. O semáforo é um contador e é usado quando o
recurso a ser utilizado pertence a um conjunto de recursos idênticos. É uma variável
inteira, maior que zero, que é acessada apenas por duas operações: P (wait) e V
(signal). O P decrementa 1, quando um recurso é removido do conjunto e está em
uso pela thread. O V acrescenta 1, o que indica que a thread devolveu um recurso.
7.5. Comunicação Interprocessos
Ocorre quando há a necessidade de que os processos se comuniquem uns com os
outros.
7.6. Escalonamento de Processador
O escalonamento de processador ocorre quando existe uma política do sistema
para escolher quais processos executar. A política de escalonamento deve atender
algumas premissas ligadas a desempenho e maximização do número de processos
executados, reduzir o tempo de latência (tempo de espera antes da execução), evitar
antecipação indefinida de processos e aperfeiçoar o uso do(s) processador(es).
8. Gerenciamento de Memória
8.1. Conceituação
O gerenciamento de memória estabelece a estratégia de otimização da memória
diante da carga que esta sofrerá, e é normalmente realizado via software ou
hardware. Dessa forma, o gerenciamento de memória é um recurso importante do
sistema operacional, pois estabelece como os espaços de memória disponíveis serão
alocados para os processos e como atender as requisições de memória de um
processador.
8.2. Swapping
Compreende um esquema de troca no qual os processos não permanecem na
memória principal até o final de sua execução. Sendo assim, enquanto o processo
aguarda uma E/S, é substituído por outro processo na memória, para retornar assim
que a ação de E/S estiver concluída. Quando ocorre a retirada do processo da
memória, o sistema armazena o processo num armazenamento temporário (swap
out). Assim que o sistema recuperar o processo (swap in) do armazenamento
secundário, ocorre a continuação do processamento. O sistema operacional
normalmente realiza o swap out e o swap in muitas vezes antes de terminar a
execução do processo.
8.3. Memória Virtual
Os sistemas de memória virtual dão aos processos a impressão de que há mais
memória disponível do que de fato existe instalada. Para o propósito deste tópico, o
aluno deve saber que há dois tipos de endereços nos sistemas de memória virtual: os
propostos pelos próprios processos (endereço virtual) e os disponíveis na memória
principal (endereço real).
Toda vez que um processo acessar um endereço virtual, o sistema operacional o
converterá para um endereço real.
O propósito desse recurso é aperfeiçoar o uso da memória, porque memórias
principais são rápidas, mas muito caras. Por isso, construir um sistema totalmente
pensado para se alojar na memória principal é inviável, dada a limitação de tamanho
que esse sistema necessariamente teria. Portanto, uma opção interessante é criar a
ilusão de que há mais memória utilizando-se o espaço do armazenamento
secundário.
8.4. Segmentação
Na segmentação de memória física, os dados e instruções de um programa são
divididos em blocos, denominados segmentos. Cada segmento pode conter um
fragmento do conteúdo que deve ser armazenado, sem a obrigação de que os blocos
tenham o mesmo tamanho, conforme figura 16.
9. Sistema de Arquivo
9.1. Conceituação
Um arquivo consiste em um ou mais registros físicos, que são a unidade de
informação lida ou escrita de fato, ou seja, uma coleção nomeada de dados, para um
dispositivo de armazenamento. Muitos sistemas utilizam arquivos para guardar
informações de uma forma que possa ser recuperada. Essa guarda acontece,
normalmente, em dispositivos de armazenamento secundário, como disco rígido ou
um pen drive.
9.2. Diretórios
Os diretórios são recursos utilizados para organizar e localizar arquivos rapidamente,
conforme figuras 17 e 18. Na verdade, os diretórios também são arquivos, que contêm
as informações e as localizações de outros arquivos.
9. 3. Métodos de Acesso
Estão divididos em dois métodos:
3
Acesso Sequencial — Muito utilizado no início do desenvolvimento da
computação, quando o processo de leitura necessariamente lia o arquivo
a partir do primeiro bit, nunca lendo fora de ordem;
3
Acesso Aleatório — A partir do momento em que os discos passaram a
ser utilizados como forma de armazenamento, foi possível ler os registros
fora de ordem, ou então ter acesso ao registro, por exemplo, por uma
palavra-chave. Esse tipo de acesso possibilitou o desenvolvimento dos
modelos de bancos de dados que existem atualmente. Este é o sistema
atualmente utilizado por boa parte dos sistemas operacionais para
localização e leitura dos arquivos.
9.4. Compartilhamento
O compartilhamento de arquivos é bastante conveniente quando se está atuando
em um projeto com outras pessoas e estas necessitam realizar acréscimos (append)
num mesmo documento.
O problema pode ser resolvido de duas maneiras:
Na primeira, cria-se uma estrutura para que, além do proprietário do arquivo,
outros também possam vê-lo. Essa estrutura de dados é o i-node. Observe a figura
19.
Na segunda, cria-se apenas uma ligação simbólica
link com o arquivo em questão. Dessa forma, não será
pois o usuário terá em seu poder apenas um arquivo
ligação fica muito versátil e somente o verdadeiro
privilégio de remover o arquivo.
(symbolic link) ou apenas um
necessário montar estruturas,
contendo uma rota. Assim, a
proprietário é quem tem o
9.5. Implementação
Existem quatro métodos de implementação de arquivos que discutem a questão
do controle de blocos de disco e seu relacionamento com quais arquivos. Eles serão
abordados no próximo item.
9.6. Métodos de Alocação e Gerenciamento de Espaço
A seguir, abordaremos os conceitos de cada um dos métodos de alocação:
3
Alocação Contígua — É o esquema mais simples de alocação. Dessa forma,
em um disco com blocos de 10 KB, um arquivo com 100 KB seria alocado
em 10 blocos consecutivos (ver figura 20).
3
A Locação por Lista Encadeada — Este método aproveita melhor os
espaços do que a alocação contígua e todo o bloco pode ser usado. Dessa
forma, nenhum espaço é perdido. Porém, continua-se com uma leitura
sequencial e, consequentemente, um acesso bastante lento. A diferença
principal está na indexação, pois a primeira palavra de cada bloco é usada
como ponteiro para um próximo. O restante do bloco é usado para dados.
Com alguns dos primeiros bytes ocupados por um ponteiro para o próximo
bloco, a leitura de todo o bloco requer obter e concatenar a informação de
dois blocos de disco. Essa cópia gera uma sobrecarga extra, conforme
figura 21;
3
Alocação por Lista Encadeada Usando uma Tabela — Para
Tanenbaum (2003), as desvantagens da alocação por lista podem ser
eliminadas colocando-se cada palavra de ponteiro de cada bloco de disco
em uma tabela da memória.
O arquivo A usa os blocos 4, 7, 2, 10 e 12 e o arquivo B usa os blocos 6, 3, 11 e 14,
conforme figura 22. O aluno pode perceber que, se partir do bloco 4, seguirá o
encadeamento até o final. O mesmo acontece com o bloco 6. Ambos os arquivos
usam a marca de término “-1”. Esse modelo de tabela de memória é chamado de FAT
(file allocation table) e permite que todo bloco fique disponível para dados e o acesso
aleatório se torne mais fácil, apesar de ser necessário seguir o encadeamento para
encontrar o dado.
A grande desvantagem está na necessidade de que, para funcionar, toda a tabela
deve estar na memória o tempo todo;
• i-nodes — Neste modelo, associa-se uma estrutura de dados chamada i-node
(índex-node) para identificar quais blocos pertencem a quais arquivos.
Acompanhe o exemplo da figura 23. Com o uso do i-node é possível encontrar
todos os blocos do arquivo.
A vantagem de utilizar o i-node é que o recurso precisa apenas estar na memória
quando o arquivo estiver aberto. Este esquema gera arquivos muito menores que as
listas encadeadas.
9 . 7 . Segurança
Em muitos casos, os arquivos desenvolvidos pelos usuários possuem informações
com mais valor do que o próprio equipamento onde estão sendo gerados. Assim, questões
de segurança devem ser pensadas antes de partir para a produção de documentação
que tenha uma significativa importância para o usuário.
Os problemas normalmente são originados de duas vertentes:
3
Desastres — São eventos que fogem do controle, como um incêndio,
uma enchente, ou até mesmo uma pane no sistema operacional que
ocorreu com o arquivo aberto que não estava salvo. Os problemas
gerados podem ser minimizados, muitas vezes, através de soluções
simples, como estabelecer um procedimento de backup diário, mesmo
nos casos dos usuários domésticos.
Outro caso comum de acontecer atualmente é o usuário de um notebook
ter o seu equipamento roubado ou furtado. Por ser um equipamento
muito pessoal, o notebook contém inúmeras informações altamente
importantes para seus usuários, seja de caráter pessoal ou profissional.
Os discos rígidos externos, que se ligam aos computadores através da
porta USB e não necessitam de instalação física, chegaram a se tornar
tão baratos que unidades de armazenamento de 1 Tb (terabyte), que até
pouco tempo atrás eram utópicas até mesmo nas empresas, já se
tornaram totalmente acessíveis aos usuários domésticos;
3
Bobagens — São os problemas gerados por erros de operação de
usuários que, por exemplo, acabam removendo diretórios importantes e
até o acesso ao sistema operacional.
Tanto uma situação quanto a outra podem ter seus prejuízos minimizados
utilizando-se o exemplo do backup em unidade externa.
10. Gerenciamento de Entrada e Saída
10.1. Visão Geral
O gerenciamento das funções de E/S (Entrada/Saída) do sistema operacional é,
certamente, um dos serviços mais importantes. Basicamente todas as ações do
sistema operacional estão envolvidas com dispositivos de entrada e saída. Um
acesso à memória, ao disco rígido, ou mesmo à impressora, utiliza recursos de E/S.
1 0 . 2 . Dis pos itiv os
Os dispositivos de E/S utilizam controladores que trabalham no “interfaceamento”
do computador com o dispositivo. Um aspecto importante a destacar é o intenso
acesso à memória que esses dispositivos realizam.
Deve-se ressaltar que não apenas o hardware é responsável pelo apoio a E/S.
Existe uma infinidade de softwares que são utilizados para gerenciar o
relacionamento com o dispositivo. Um exemplo desses softwares são os drivers que
normalmente acompanham algum dispositivo, quando é adquirido.
A seguir, veja uma relação de alguns dos dispositivos normalmente utilizados para
E/S com os computadores:
11. Glossário
3
Assembly — É uma linguagem de montagem, que utiliza instruções que
se assemelham a abreviaturas de palavras em inglês para representar as
operações básicas do computador. A partir do uso dessas instruções, foi
possível agilizar o processo de construção de programas.
3
Cliente/Servidor — É um ambiente onde os clientes, que são
computadores pessoais com um software específico instalado, acessam
remotamente um banco de dados corporativo instalado no servidor.
3
Computação distribuída — Vários
desempenham uma tarefa comum.
3
Computador pessoal — É a evolução dos computadores das décadas
passadas e tornou-se acessível em termos de custo. Também é chamado
de PC, microcomputador, estação de trabalho ou apenas estação.
computadores
independentes
3
Job — É um serviço composto por um conjunto de programas que
possuem uma tarefa específica. Como na década de 50 os primeiros
sistemas operacionais exigiam que o programa inteiro fosse carregado na
memória, para somente depois poder ser executado, os programadores
eram limitados a criar programas pequenos e com capacidades
reduzidas. Apesar de aparentemente o job ter incrementado a
performance do processamento das transações, seu desenvolvimento era
penoso e lento, se comparado aos processos de desenvolvimento de
software atuais, pois tinha-se que submeter o programa para compilação
ao menor erro. E, na década de 1950, o processo de “recompilação” de
um programa levava horas ou até dias.
3
Mainframes — São computadores que tiveram sua origem na década de
40. São equipamentos que possuem um altíssimo poder de
processamento e estão muito presentes na era da Internet, hospedando
aplicações que exigem alto desempenho.
3
Multiprogramação — É a capacidade de armazenar vários programas na
memória para que possam ser executados concorrentemente.
3
Sistemas de tempo compartilhado (Time Sharing Systems) —
Vários processos cooperam na execução de uma tarefa. Seu valor está no
compartilhamento de programas e dados. Hardware, sistemas
operacionais e programas são todos projetados para ampliar o tempo das
pessoas e para melhorar a eficiência e a produtividade. A execução do
sistema de tempo compartilhado pode acontecer de duas formas:
1. execução assíncrona: Os processos concorrem pela utilização do
tempo de processamento. Dessa forma, cada processador terá uma
carga de processamento que poderá ser diferente de outro
processador. Observe a figura 24:
2. execução síncrona: Os processos utilizam o tempo de processamento
de maneira homogênea, comportando-se como se fossem apenas um
processo. Observe a figura 25:
3
Sistemas de tempo real (Real Time Systems) — Utilizados em aplicações
específicas, nas quais o tratamento da resposta do dispositivo deve ser
instantâneo.
3
Thread — Praticamente todos os sistemas operacionais fornecem algum
suporte a esse serviço. Threads são recursos escalonáveis em um
processador, e cada thread pode executar um conjunto de instruções,
independentemente de outros processos e threads. Threads em um
processo podem executar concorrentemente e cooperar para atingir uma
meta comum.
12. Referências Bibliográficas
DAHMKE, M. Sistemas operacionais para microcomputadores. Rio de Janeiro:
Campus, 1983.
DEITEL, H. M.; DEITEL, P. J.; CHOFFNES, D. R. Sistemas operacionais. 3. ed. São
Paulo: Pearson, 2005.
DIGIBARN Computer Museum. Xerox Alto Operating System and Alto Applications.
Disponível
em
http://www.digibarn.com/collections/software/alto/index.html.
Acessado em: 06 jan. 2009.
IBM. IBM archives : Mainframes photo album. Disponível em <http ://www-03.i bm
.com/i bm/h istory/exhi bits/mainframe/ mainframe_album.html>. Acessado em:
05 jan. 2009.
JONES, D. W. Punched Cards: A brief illustrated technical history. THE UNIVERSITY
OF IOWA. Department of Computer Science. Disponível em
http://www.cs.uiowa.edu/~jones/cards/history.html. Acessado em: 05 jan. 2009.
SILBERSCHATZ, A.; PETERSON, J. L.; GAVIN, P. Operating system concepts. 3. ed. [S.l]:
Addison-Wesley, 1992.
SIQUEIRA, E. 2015: Como viveremos. São Paulo: Saraiva, 2004.
TANENBAUM, A. S. Operating Systems: Design and Implementation. Amsterdã:
Prentice-Hall International, 1987.
____________. Sistemas operacionais modernos. 2. ed. São Paulo: Pearson, 2003.
Download