Escolar Documentos
Profissional Documentos
Cultura Documentos
SISTEMA OPERACIONAL
“
A Faculdade Católica Paulista tem por missão exercer uma
ação integrada de suas atividades educacionais, visando à
geração, sistematização e disseminação do conhecimento,
para formar profissionais empreendedores que promovam
a transformação e o desenvolvimento social, econômico e
cultural da comunidade em que está inserida.
Av. Cristo Rei, 305 - Banzato, CEP 17515-200 Marília - São Paulo.
www.uca.edu.br
Nenhuma parte desta publicação poderá ser reproduzida por qualquer meio ou forma
sem autorização. Todos os gráficos, tabelas e elementos são creditados à autoria,
salvo quando indicada a referência, sendo de inteira responsabilidade da autoria a
emissão de conceitos.
SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO
SUMÁRIO
AULA 01 CONCEITOS, FUNÇÕES E HISTÓRICO DOS 05
SISTEMAS OPERACIONAIS
AULA 08 THREADS 49
INTRODUÇÃO
AULA 1
CONCEITOS, FUNÇÕES E
HISTÓRICO DOS SISTEMAS
OPERACIONAIS
De todos os recursos que um sistema de computação possui, o Sistema Operacional
talvez seja aquele que ofereça as funções mais desconhecidas para o usuário comum.
Ainda que sua interface gráfica seja a porta de entrada para o uso de qualquer aplicação,
a utilidade de um Sistema Operacional vai muito além da conveniência dos ícones, das
teclas de atalho e uso do mouse. Embora silenciosas e independentes de alguma
ação do usuário, são essas “funções desconhecidas” que viabilizam interações que,
de outra forma, seriam extremamente trabalhosas e comprometeriam seriamente a
experiência de uso de um computador.
Para que nosso conhecimento sobre Sistemas Operacionais comece a ser
construído pela base e de forma bem gradativa, trataremos neste nosso encontro
dos conceitos introdutórios e das suas principais funções, sem nos esquecermos do
necessário resgate histórico dos fatos e das circunstâncias que contribuíram para
que nosso objeto de estudo alcançasse o atual estado da arte em que se encontra, e
o habilitaram à franca evolução nos anos que se seguirão. Sigamos em frente e bom
estudo!
computador. Ele também fornece uma base para os programas aplicativos e atua
como intermediário entre o usuário e o hardware do computador. Considerando que
um sistema computacional pode ser mais facilmente entendido através da separação
entre componentes, o Sistema Operacional exerce o papel de intermediário entre
aplicativos de usuário e o hardware da máquina, possibilitando a comunicação entre
estas partes e viabilizado o trabalho do desenvolvedor, conforme já mencionado
(SILBERSCHATZ, GALVIN, GAGNE, 2015). A figura 1 nos oferece visão de um sistema
computacional típico que inclui usuários fazendo uso de aplicativos, que se conectam
ao hardware por meio do Sistema Operacional.
O filme chamado O Jogo da Imitação (2015) retrata parte da história de Alan Turing
e sua busca por construir uma máquina que pudesse decifrar o código nazista
usado para comunicação durante a Segunda Guerra Mundial. Esta máquina foi a
base para o que hoje conhecemos como computador. O trailer oficial do filme está
disponível em: https://www.youtube.com/watch?v=YIkKbMcJL_4. Acesso em: 1 de
jun. de 2021.
dessas técnicas tenha sido a multiprogramação (TANENBAUM, BOS, 2016). Foi pela
multiprogramação que os projetistas da época conseguiram minimizar o tempo de
espera ociosa entre os procedimentos de entrada e de processamento próprios de um
programa. A implementação desta solução veio com a divisão da memória em várias
partes, cada uma responsável por armazenar uma tarefa distinta, conforme exibido
na figura 2.
ANOTE ISSO
Quarta Geração (1980 a 1990): esta geração é marcada pelo surgimento dos
computadores pessoais, em grande parte impulsionado pelo extraordinário progresso
obtido nos processos de miniaturização dos circuitos integrados. A possibilidade de
que um usuário comum pudesse ter um computador em casa era algo impensável em
gerações anteriores. Antes, porém, que os computadores pessoais invadissem a casa
das pessoas, muita criação e evolução foram aplicadas nos Sistemas Operacionais.
O lançamento do processador 8080, da Intel, deu oportunidade para que o primeiro
microcomputador com um disco fosse produzido. Neste cenário, era natural que
um novo Sistema Operacional tivesse que ser criado e assim surgiu o CP/M (Control
Program for Microcomputers ou programa de controle para microcomputadores). O
contexto de negócios que se originou da criação do CP/M foi bastante curioso, para
dizer o mínimo, e é assim contada por Tanenbaum e Bos (2016): no início da década de
1980, a IBM projetou o IBM PC e, por causa da necessidade de encontrar um software
para ser executado nele, seu pessoal contatou Bill Gates, na esperança de que ele
pudesse indicar um sistema operacional para ser executado no PC.
Gates, então, sugeriu que a IBM contatasse a Digital Research, então a empresa de
Sistemas Operacionais dominante e proprietária do CP/M. Ocorre que os dirigentes da
Digital Research se recusaram a receber a IBM, e novamente Bill Gates foi acionado.
Quando a IBM voltou Gates lembrou-se que um fabricante de computadores local,
a Seattle Computer Products tinha um Sistema Operacional adequado, o DOS (Disk
Operating System ou Sistema Operacional de Disco). Ele os procurou e pediu para
comprar o DOS e, por US$ 75.000, iniciou a história de maior sucesso da Computação.
Quinta Geração (1990 até o presente): esta geração incorpora toda a evolução das
anteriores e é fortemente caracterizada pelos dispositivos móveis. A incorporação de
um Sistema Operacional nestes dispositivos (junto com os aplicativos adequados)
foi o que possibilitou que usássemos nosso telefone para enviar e receber e-mails e
mensagens instantâneas, além de encontrarmos o melhor caminho entre dois pontos
Bem, este foi o conteúdo que queríamos compartilhar com você neste nosso
primeiro encontro. Desejamos que este tenha sido um bom início em sua caminhada
para se tornar uma verdadeira referência em Sistemas Operacionais. Não se esqueça
de aprimorar seus conhecimentos com leituras de fontes diversas em com o zelo nas
atividades que se seguirão. Obrigado e até a próxima!
AULA 2
TIPOS DE SISTEMAS
OPERACIONAIS
Olá! Seja bem-vinda e seja bem-vindo ao nosso segundo encontro!
Conforme abordamos na primeira aula, Sistemas Operacionais são artefatos
sofisticados de software construídos para exercer gerenciamento do hardware e
estabelecer uma conexão amigável entre ele e os programas criados para os usuários
finais. Dada a variedade de tipos e perfis de aplicações com as quais um Sistema
Operacional lida é natural imaginarmos que existam também tipos distintos destes
sistemas, a fim de que sejam contempladas as mais diversas finalidades de uso.
Por isso, nesta segunda aula trataremos dos tipos de Sistemas Operacionais,
considerando as mais diversas plataformas de hardware e a variedade de aplicações
que deles se utilizarão. O Sistema Operacional que gerencia um servidor, por exemplo,
deve oferecer ao administrador recursos diferentes daqueles disponíveis em um
sistema de computador pessoal. Da mesma forma, um Sistema Operacional sendo
executado em um televisor moderno será diferente daquele que se presta a gerenciar
um sistema de tempo real.
Sigamos adiante e bons estudos!
Imagine uma instituição bancária com 100 milhões de clientes. Agora imagine o
aparato computacional que este banco deve possuir para fornecer serviços de qualidade
a todos eles! Tanto no caso dos bancos, como no caso de uma operadora de telefonia
celular ou de um órgão federal, os computadores que dão suporte às operações destas
instituições devem ser de grande porte e com recursos extraordinários de entrada e
saída. Certamente o Sistema Operacional que suporta tais máquinas deve ser capaz
de controlar o processamento simultâneo de muitas tarefas e de dar conta da alta
carga de transações de entrada e de saída de dados.
Segundo Tanenbaum e Bos (2016), estes sistemas oferecem geralmente três tipos
de serviços: em lote (batch), processamento de transações e tempo compartilhado
(timesharing). Embora o detalhamento destes serviços não seja parte do nosso
objetivo aqui, vale uma rápida apresentação de cada um. O suporte ao processamento
em lote ocupa-se das tarefas rotineiras sem qualquer interação de usuário e seu
funcionamento se baseia no enfileiramento de tarefas dispostas em lotes (daí o termo
batch), que serão executadas uma após outra. Um exemplo típico de uso do batch
está relacionado ao processamento das transações bancárias.
Ainda conforme a lição de Tanenbaum e Bos (2016), os sistemas de processamento
de transações lidam com grandes números operações comerciais ou que envolvem
baixa complexidade computacional, por exemplo, de forma muito rápida e eficiente. Já
o sistema de tempo compartilhado permite que múltiplos usuários remotos executem
tarefas no computador ao mesmo tempo, como na realização de consultas a um
grande banco de dados. Os Sistemas Operacionais que atendem a computadores de
grande porte atuais são capazes de executar todos estes tipos de processamentos
de forma eficiente. Um exemplo de sistema operacional de computadores de grande
porte é o OS/390, uma derivação do OS/360.
em Batch apareçam como o primeiro tipo, seguido pelos Sistemas que suportam
multiprogramação. Depois, a classificação apresenta os sistemas multitarefa, os
sistemas multiprocessados e, por fim, os Sistemas Operacionais de tempo real.
Como observação final vale pontuar que, ao procurar por tipos de sistemas na web,
você poderá encontrar uma terceira classificação, com menção aos seus respectivos
desenvolvedores, como Windows, Linux, Unix, Android e Apple, entre outros. De
qualquer maneira, o conhecimento de todas essas classificações ajudará você tomar a
decisão correta quando for chamado a escolher por um tipo ou por um desenvolvedor,
com base nas características e funcionalidade de cada um.
Este, portanto, era o conteúdo que queríamos compartilhar com você. Bom estudo
e até a próxima.
AULA 3
GERENCIAMENTO
DE PROCESSOS
Uma abordagem adequada de Sistemas Operacionais deve resgatar conceitos
elementares sempre que precisar introduzir um novo tema que a eles esteja relacionado.
Neste nosso encontro trataremos do gerenciamento de processos e, antes de nos
aprofundarmos neste assunto, vale a pena voltarmos nosso foco novamente para
o que estudamos em nossa primeira aula. Com isso, estaremos preparados para
trilharmos novos caminhos rumo à excelência em Sistemas Operacionais. Sigamos
adiante, pois!
3.1 Processos
De maneira didática e objetiva, Flynn e Mchoes (2002) nos ensinam que o
sistema operacional é uma espécie de gerente executivo que administra todos os
componentes de hardware e software de um sistema de computador. Usando termos
mais específicos, ele controla cada arquivo, dispositivo, seção de memória principal
e tempo de processamento. O sistema operacional controla quem pode utilizar o
sistema e de que maneira. Resumindo, ele é o chefe!
Já Deitel et al. (2005), usando abordagem mais técnica, conceituam Sistema
Operacional como um software que habilita as aplicações a interagir com o hardware
de um computador. Em alto nível de abstração, os autores descrevem assim seu
funcionamento: um usuário requisita ao computador que realize uma ação (imprimir
um documento ou tocar uma música, por exemplo), e o sistema operacional gerencia
o software e o hardware necessários para que o resultado desejado seja produzido.
Os sistemas operacionais são compostos por partes distintas e, por ora, seus
componentes centrais são objetos de nosso interesse. De acordo com Deitel (2005),
alguns dos componentes centrais de um sistema operacional incluem:
• Gerenciador de entrada e saída: componente que atende às solicitações de
E/S de e para os dispositivos de hardware.
• Gerenciador de memória: ele determina quando e como a memória será
alocada aos processos.
Este foi o conteúdo que queríamos compartilhar com você. Para que a abordagem
deste tema não pare por aqui, não deixe de ler nas referências bibliográficas indicadas
o conteúdo que abordamos no texto. Bom estudo!
AULA 4
GERENCIAMENTO DE MEMÓRIA
Olá! Aqui estamos para mais uma aula de Sistemas Operacionais. Em nosso último
encontro tratamos dos processos e os posicionamos como uma parte elementar
de um programa em execução. Descobrimos também que o Sistema Operacional
mantém informações de espaço de endereço, dados do programa e o estado em que
se encontra o processo guardadas em uma tabela de processo. Como cada processo
concorre com outro processo para execução, é necessário que seja implementado
um eficiente gerenciamento da memória ocupada pelos processos, a fim de que
o máximo desempenho seja alcançado com a máxima segurança. É por isso que
neste encontro estudaremos juntos os meios usados pelo Sistema Operacional para
gerenciar a memória principal da máquina. Vamos nessa?
4.1 Introdução
O gerenciamento de memória é a funcionalidade de um sistema operacional que
manipula ou gerencia a memória primária e move os processos entre a memória
principal e o disco durante a execução de um programa. O gerenciamento de memória
mantém o controle de cada local de memória, independentemente de estar alocado
para algum processo ou de estar livre. Ele verifica quanta memória deve ser alocada
aos processos e decide qual processo obterá memória em que momento. Além disso,
o gerenciamento de memória é capaz de identificar quando uma parte da memória é
liberada ou não está alocada e, instantaneamente, atualiza o status daquela porção de
memória. Na sequência, trataremos de elementos que compõem esse gerenciamento.
Nome Descrição
Endereços simbólicos Trata-se dos endereços usados em um código-fonte. Os nomes
de variáveis, constantes e rótulos de instrução são os elemen-
tos básicos do espaço de endereço simbólico.
Endereços relativos Em tempo de compilação, o compilador converte endereços
simbólicos em endereços relativos.
Endereços físicos O processo de carregamento gera estes endereços quando um
programa é carregado na memória principal da máquina.
Tabela 1 – Tipos de endereços de memória e suas descrições
Fonte: Tutorials Point (s.a.)
4.4 Swapping
O swapping – cuja tradução deve ser entendida como troca - é um mecanismo
O tempo total gasto pelo processo de swapping inclui o tempo que leva para mover
todo o processo para a memória secundária e, em seguida, para copiar o processo de
volta para a memória principal. Vamos supor que o processo do usuário tenha 2048
KB e um disco rígido padrão onde a troca ocorrerá tenha uma taxa de transferência
de dados em torno de 1 MB por segundo. A transferência real do processo de 1000K
para ou da memória levará:
4.6 Fragmentação
Conforme os processos são carregados e removidos da memória, o espaço livre da
memória é dividido em pequenos pedaços. Às vezes acontece que os processos não
podem ser alocados aos blocos de memória, considerando seu pequeno tamanho,
e os blocos de memória permanecem sem uso. Esse problema é conhecido como
fragmentação. A fragmentação ocorre de duas maneiras:
Este foi o conteúdo que queríamos compartilhar com você. Bons estudos e até a
próxima!
AULA 5
GERENCIAMENTO DE ARQUIVOS
Seja-bem-vinda e seja bem-vindo a mais um encontro de Sistemas Operacionais!
Iniciamos aqui nossa quinta aula e, neste ponto, vale pena voltarmos brevemente nossa
atenção para o que já foi abordado em nossos encontros anteriores. A aula 1 abordou
conceitos fundamentais do tema e posicionou os Sistemas Operacionais como uma
espécie de “gerente” de um sistema computacional. Na segunda aula foram colocados
os tipos mais comuns de Sistemas Operacionais, utilizando o critério de classificação
de hardware em que eles atuavam. Na sequência, os processos foram conceituados
e seus estados foram apresentados. Por fim, tratamos de gerenciamento de memória
e seus mecanismos em nosso último encontro.
5.1 Arquivos
O tema que agora se apresenta está relacionado aos meios pelos quais um Sistema
Operacional gerencia os arquivos e torna transparentes aos usuários as complexas
operações que a eles se aplicam. Conforme pontuam Tanenbaum e Bos (2016), uma
função importante do sistema operacional é esconder as peculiaridades dos discos e
outros dispositivos de E/S e apresentar ao programador um modelo agradável e claro
de arquivos que sejam independentes dos dispositivos.
Um arquivo é uma coleção nomeada de informações relacionadas que são
gravadas no armazenamento secundário, como os discos rígidos ou os SSD (Solid-
State Drive ou Unidade de Estado Sólido). Em geral, um arquivo é uma sequência de
bits, bytes, linhas ou registros cujo significado é definido pelo criador e usuário do
arquivo (TUTORIALSPOINT, S. A.).
A estrutura de arquivo deve estar de acordo com um formato necessário que o
sistema operacional possa entender. Neste sentido, alguns pontos merecem destaque:
um arquivo possui uma determinada estrutura definida de acordo com seu tipo.
5.4 Diretório
O principal elemento – e possivelmente o mais conhecido entre os usuários – do
gerenciamento de arquivos executado pelo Sistema Operacional é a organização de
arquivos em diretórios. Para organizar e localizar arquivos de forma rápida e eficiente,
sistemas de arquivos usam diretórios, que são arquivos que contém os nomes e as
localizações de outros arquivos do sistema de arquivos. Diferentemente de outros
arquivos, um diretório não armazena dados de usuários.
Neste vídeo de pouco mais de 23 minutos é possível ter contato com uma
abordagem interessante de sistemas de arquivos mantidos pelos Sistemas
Operacionais. Assista ao vídeo disponível em: https://www.youtube.com/
watch?v=PKox6AlVTT8. Acesso em: 23 jun. 2021.
AULA 6
GERENCIAMENTO
DE ENTRADA E SAÍDA
Ao mencionarmos entrada e saída no contexto dos Sistemas Operacionais, a
expressão poderia se tornar vaga se não houvesse a devida especificação dos
seus tipos. A fim de permitir que os usuários possam interagir com o sistema, os
computadores implementam meios para que sejam informadas entradas e obtidas
saídas através de dispositivos apropriados, incluindo teclados, monitores, impressoras
e alguns outros. Como o gerenciamento destes dispositivos é de responsabilidade
do Sistema Operacional, tornou-se necessária a implementação de um subsistema
de E/S, que contêm softwares de uso geral entre vários dispositivos e outros que
gerenciam dispositivos específicos. Sigamos adiante!
acessar qualquer dispositivo de entrada e saída sem ter que especificar o dispositivo
com antecedência. Por exemplo, um programa que lê um arquivo como entrada deve
ser capaz de ler um arquivo em um disco rígido convencional ou em um SSD (Solid-
State Drive ou Drive de Estado Sólido), sem que seja necessário modificar o programa
para cada dispositivo diferente. A representação da organização do software de
Entrada e Saída é ilustrada na figura 9.
Ainda no contexto dos elementos da figura 9, três deles devem ser detalhados,
como segue:
com algumas exceções, como sistema de spool, que é uma maneira de lidar com
dispositivos de E / S dedicados em um sistema de multiprogramação.
Bibliotecas de entrada e saída (por exemplo, stdio) estão no espaço do usuário
para fornecer uma interface para o software de E/S, independentemente de dispositivo.
Por exemplo, putchar(), getchar(), printf() e scanf() são exemplos de biblioteca de E/S
de nível de usuário stdio disponível em programação C e que não estão vinculadas a
nenhuma marca ou configuração de periférico.
principal tarefa é converter o fluxo de bits serial em bloco de bytes, realizar a correção
de erros conforme necessário. Qualquer dispositivo conectado ao computador é
conectado por um plugue e soquete, e o soquete é conectado a um controlador de
dispositivo. A figura 10 ilustra um modelo para conectar a CPU, memória, controladores
e dispositivos de entrada e saída.
opera de forma assíncrona com a CPU, ocorrerá uma interrupção na CPU quando o
processo estiver concluído. A vantagem desse método é que cada instrução que pode
acessar a memória pode ser usada para manipular um dispositivo de entrada e saída,
o que viabiliza seu uso na maioria dos dispositivos de alta velocidade, como discos e
interfaces de comunicação.
Direct Access Memory (DMA ou Acesso Direto à Memória): dispositivos lentos
(como teclados, por exemplo) irão gerar uma interrupção na CPU após cada byte
ser transferido. Se um dispositivo rápido, como um disco, gerasse uma interrupção
para cada byte, o Sistema Operacional gastaria a maior parte do tempo tratando
dessas interrupções. Portanto, um computador típico usa hardware de acesso direto à
memória (DMA) para reduzir essa sobrecarga.
O mecanismo de acesso direto à memória (DMA) implica que a CPU concede
autoridade ao módulo de E/S para ler ou gravar na memória sem que ela (a CPU)
participe do processo. O próprio módulo DMA controla a troca de dados entre a
memória principal e o dispositivo. A CPU está envolvida apenas no início e no final da
transferência e é interrompida apenas após a transferência do bloco inteiro.
O acesso direto à memória precisa de um hardware especial denominado
controlador DMA (DMAC) que gerencia as transferências de dados e controla o
acesso ao barramento do sistema. Os controladores são programados com ponteiros
de origem e de destino, ou seja, que apontam onde ler e onde gravar os dados, mais
os contadores para rastrear o número de bytes transferidos.
Este foi, portanto, o conteúdo a ser compartilhado. Mantenha-se firme nos estudos
e até a próxima!
AULA 7
GERENCIAMENTO DE
PROTEÇÃO E SEGURANÇA
Vai longe o tempo em que desenvolver e implantar medidas de segurança aos
computadores e seus dispositivos periféricos eram providências secundárias e restritas
a atuação de alguns poucos profissionais. Com a crescente valorização de um ativo
chamado informação, intensificaram-se os esforços para o aumento da segurança da
CPU, memória principal, disco e programas. Como não poderia deixar de ser, o Sistema
Operacional exerce importante função neste contexto. Seja bem-vinda e seja bem-vindo
a este encontro em que trataremos dos meios e dos objetivos de segurança e proteção
aplicados aos Sistemas Operacionais e das principais ameaças que podem comprometer
a segurança de todo um sistema computacional.
7.1 Proteção
Embora a necessidade de proteção direcionada a um sistema de computação possa
parecer óbvia é conveniente investirmos tempo para investigarmos com mais detalhes
algumas razões. A primeira – e mais imediata – é que preciso impedir a violação maldosa
e intencional de uma restrição de acesso por um usuário. Como sabemos, nem todos os
usuários atendidos por um Sistema Operacional podem ter acesso irrestrito aos recursos
por ele oferecidos e uma violação dos limites impostos pode comprometer seriamente o
sistema.
Ocorre que a questão da proteção envolve um objetivo mais genérico, de elevada
importância e que deve ser perseguido pelos projetistas: a garantia de que os programas
executados no computador usem os recursos do sistema em estrito acordo com as
políticas estabelecidas e este requisito é fundamental para um sistema confiável e, ainda
neste sentido, medidas adequadas de proteção irão aumentar a confiabilidade geral do
sistema ao detectarem eventuais erros nas interfaces dos subsistemas que também
interagem neste contexto.
Conforme nos ensinam Silberschatz, Baer e Gagne (2015), um recurso desprotegido
não pode se defender contra a sua incorreta utilização por um usuário não autorizado.
De forma oposta, um sistema orientado à proteção está preparado para diferenciar o
uso autorizado do não autorizado e, neste contexto, vale diferenciarmos mecanismos de
proteção de políticas de proteção: o papel da proteção em um sistema de computação é
fornecer um mecanismo para a imposição das políticas que governam o uso de recurso
e que podem ser estabelecidas durante o projeto do sistema, ou pelos próprios usuários
individuais, a fim de protegerem seus arquivos e programas.
Completam os autores que a proteção não é uma preocupação apenas do projetista de
um sistema operacional. O programador de aplicações também precisa usar mecanismos
de proteção para proteger os recursos criados e suportados por um subsistema de
aplicação contra a má utilização. As políticas podem (e devem) ser alteradas com o
tempo e em função de determinadas situações e elas se diferem dos mecanismos de
segurança nos seguintes termos: os mecanismos determinam como algo será feito; as
políticas decidem o que será feito.
Para que o entendimento do conceito de proteção e do seu alcance seja mais
abrangente, podemos posicionar os elementos de um sistema de computação como uma
coleção de processos e de objetos. Blocos de memória, periféricos, discos, programas,
drivers de dispositivo e tudo mais que se puder identificar no contexto podem fazer parte
desta coleção e cada um deles possui um nome que o diferencia dos demais. Feita essa
separação é possível então estabelecer de forma rigorosa as operações que se aplicam
a cada objeto. Alguns exemplos nos ajudam a esclarecer a prática: em uma CPU pode-
se apenas executar programas; em trechos da memória principal pode-se ler dou gravar
dados e arquivos podem ser criados, abertos, lidos, gravados, fechados e excluídos.
Ainda no contexto do domínio de uma política de proteção, um processo deve ter
permissão para acessar os recursos computacionais para os quais lhe foi dada a
permissão de acesso. No mesmo sentido, um processo deve ter acesso aos recursos de
que necessita para executar sua tarefa e a nenhum mais. A este princípio dá-se o nome
de “conhecer-o-necessário” e seu objetivo é o de limitar eventuais danos que um processo
incorreto pode ocasionar.
Como o próprio título desta nossa aula sugere, o conceito e as práticas de proteção
estão profundamente associados às questões de segurança do sistema e este será o
próximo tema que abordaremos. Sigamos adiante!
7.2 Segurança
A segurança de um Sistema Operacional está relacionada ao fornecimento de um
sistema de proteção aos recursos do sistema do computador, como CPU, memória,
disco, programas e, mais importante, os dados armazenados. Se um programa de
computador for executado por um usuário não autorizado, ele poderá causar danos
graves ao computador ou aos dados nele armazenados. Portanto, um sistema de
computador deve ser protegido contra acesso não autorizado, acesso malicioso à
memória do sistema e vírus, entre outras ameaças. Na sequência serão investigados
alguns elementos relacionados à segurança do sistema e ameaças que podem colocar
em risco esta segurança.
Um grande problema a ser resolvido pelo Sistema Operacional é a autenticação de
usuários e todo o sistema de proteção irá depender do sucesso deste procedimento. A
autenticação se refere à identificação de cada usuário do sistema e à associação dos
programas em execução a esses usuários. É responsabilidade do Sistema Operacional
criar um sistema de proteção que garanta que um usuário que está executando um
determinado programa seja autêntico. Mas como determinar se uma identidade de
usuário é autêntica? Sistemas operacionais geralmente identificam / autenticam
usuários usando três maneiras, conforme segue:
• Nome de usuário / senha: o usuário precisa inserir um nome de usuário e
uma senha registrados no sistema operacional para fazer o login no sistema. Esta
modalidade requer, portanto, que o usuário conheça algo.
• Cartão / chave do usuário – aqui o usuário precisa perfurar o cartão no slot
de cartão ou inserir a chave gerada pelo gerador de chave na opção fornecida pelo
sistema operacional para fazer login no sistema. Essa modalidade requer, portanto,
que o usuário tenha posse de algo.
• Atributo do usuário: o usuário precisa se identificar com sua impressão digital
ou imagem da retina por meio do dispositivo de entrada designado pelo sistema
operacional para fazer acesso ao sistema.
Existem dicas para criação de senhas e ferramentas para seu armazenamento que
nos ajudam a gerenciar a infinidade de códigos que acumulamos no decorrer da
vida. Em pouco mais de 10 minutos, o vídeo aqui sugerido aponta caminhos para
guardar senhas de forma segura e eficiente. Disponível em: https://www.youtube.
com/watch?v=JzXCNSFVtXw. Acesso em: 28 jun. 2021.
Um incremento de segurança pode ser obtido pelas senhas de uso único (one time
password), que fornecem segurança adicional junto com a autenticação normal. Em
um procedimento de senha descartável, uma senha exclusiva é exigida toda vez que
o usuário tenta fazer o login no sistema. Depois que uma senha descartável é usada,
ela não pode ser usada novamente. As senhas de uso único são implementadas
basicamente de três maneiras:
Números aleatórios: neste caso, os usuários recebem cartões com números
impressos junto com os alfabetos correspondentes. O sistema solicita números
correspondentes a alguns alfabetos escolhidos aleatoriamente.
Chave secreta: aqui o usuário recebe um dispositivo de hardware que pode
criar uma identidade secreta mapeada com a identidade do usuário. O sistema pede
essa ID secreta que deve ser gerada todas as vezes antes do login.
Senha de rede: alguns aplicativos comerciais enviam senhas de uso único para
o usuário no celular ou e-mail registrado, que devem ser inseridas antes do login.
ANOTE ISSO
Dada a relevância do tema e o elevado nível de atenção dirigida a ele, foram criadas
classificações de segurança em sistemas de computador. Essas classificações
foram desenvolvidas de acordo com os Critérios de Avaliação do Departamento de
Defesa dos EUA e dividem-se em A, B, C e D. Tais especificações são amplamente
utilizadas para determinar e modelar a segurança de sistemas e de soluções de
segurança. A seguir está uma breve descrição da maior e da menor classificação,
segundo a TutorialsPoint (s.a.):
- Tipo A: nível mais alto. Usa especificações de projeto formais e técnicas de
verificação. Concede alto grau de garantia de segurança do processo.
- Tipo D: nível mais baixo. Oferece proteção mínima. O MS-DOS e o Windows 3.1
encontram-se nesta categoria.
7.2.1 Ameaças
Os processos e o kernel do sistema operacional realizam a tarefa designada conforme
as instruções. Se um programa de usuário fizer com que esses processos executem
tarefas maliciosas, isso será conhecido como ameaças de programa. Um exemplo
comum de ameaça de programa é um programa instalado em um computador que
pode armazenar e enviar credenciais de usuário através da rede para algum hacker. A
seguir está a lista de algumas ameaças de programas bem conhecidas.
Cavalo de Tróia: esse programa captura as credenciais de login do usuário e
as armazena para enviá-las a usuários mal-intencionados, que podem fazer login no
computador posteriormente e acessar recursos do sistema.
Alçapão (Trap Door): se um programa projetado para funcionar corretamente
possui uma falha de segurança em seu código e executa ações ilegais sem o
conhecimento do usuário, então este programa é chamado para ser um alçapão. Na
lição de Silberschatz, Baer e Gagne (2015), um alçapão inteligente poderia ser incluído
em um compilador. O compilador poderia gerar um código-objeto padrão assim como
um alçapão, independentemente do código-fonte que estivesse sendo compilado. Essa
atividade é particularmente ardilosa, já que uma busca no código-fonte do programa
não revelará nenhum problema. Apenas o código-fonte do compilador conteria as
informações.
Bomba lógica: a bomba lógica remete a uma situação em que um programa se
comporta mal apenas quando certas condições são encontradas, caso contrário, ele
funciona como um programa genuíno. Segundo Silberschatz, Baer e Gagne (2015),
O conteúdo teórico deste encontro fica por aqui, mas há muito mais a ser descoberto
na literatura indicada. Até a próxima!
AULA 8
THREADS
Olá! Aqui estamos para mais um encontro da disciplina de Sistemas Operacionais.
Conforme já tivemos oportunidade de abordar em aulas anteriores, o processo
é o elemento mais significativo em qualquer Sistema Operacional. Embora seu
conceito tenha sido apresentado de forma mais abrangente, podemos entendê-lo
como um programa em execução e sua existência fornece suporte para operações
aparentemente concorrentes quando uma CPU apenas está disponível. Nosso estudo
agora se volta para os threads, um elemento intimamente relacionado aos processos
e que são tratados como processo dentro de um processo. Instigante, não acha?
8.1 Conceituação
É sempre bom lembrarmos que os processos são fundamentais para que a
concorrência seja possível nas aplicações. De acordo com Machado e Maia (2013),
os sistemas operacionais utilizam três maneiras diferentes para implementá-la:
processos independentes, subprocessos e threads. Embora importantes, as duas
primeiras maneiras não serão tratadas aqui.
Construiremos o conceito de thread em partes. Deitel et al (2005) distinguem os
processos tradicionais dos threads pelo modo como os espaços de endereçamento
são alocados. Segundo os autores, quando um processo é criado, recebe um espaço
de endereçamento alocado exclusivamente a ele. Quando um thread é criado ele
compartilha o espaço do endereçamento do processo (DEITEL et. al., 2005).
O fato de um thread compartilhar o espaço de memória (entre outros atributos) de
um processo o torna mais “leve” e mais eficiente na realização das suas tarefas, daí
serem chamados de processo leve (Lightweight Process ou LWP). Por depender do
compartilhamento dos atributos de um processo, a existência de um thread não faz
sentido de maneira isolada; eles normalmente pertencem a processos tradicionais,
também chamados processos pesados (Heavyweight Process ou HWP).
A construção do conceito de threads passa agora pela abordagem do estreito
relacionamento deles com a concorrência e paralelismo. Linguagens de programação
atuais – incluindo Java e produtos .NET - disponibilizam primitivas de concorrência
Este foi o conteúdo que planejamos compartilhar com você neste encontro.
Esperamos que o aproveitamento seja ótimo e que você persevere nas demais
atividades propostas. Até breve!
AULA 9
UTILIZANDO THREADS
Em nosso último encontro tivemos a oportunidade de conhecer itens fundamentais
dos threads, incluindo seu ciclo de vida e seus modelos. Agora, nossa missão é a
de explorarmos as diversas possibilidades de utilização deste recurso, incluindo as
razões para sua utilização. Antes, porém, vale resgatarmos rapidamente alguns
elementos estudados na aula passada. Os sistemas operacionais utilizam três
maneiras diferentes para implementar concorrência entre aplicações: processos
independentes, subprocessos e threads. Os processos tradicionais distinguem-se dos
threads pelo modo como os espaços de endereçamento são alocados: quando um
processo é criado, recebe um espaço de endereçamento alocado exclusivamente a
ele.
Em oposição, quando um thread é criado ele compartilha o espaço do
endereçamento do processo. Linguagens de programação atuais disponibilizam meios
de implementação de concorrência para o programador. Esta tecnologia dá a ele
(programador) capacidade para criar segmentos de código que podem ser executados
de forma independente do restante da aplicação. De forma simplificada, um thread
pode ser definido como uma sub-rotina de um programa que pode ser executada de
forma assíncrona, ou seja, executada concorrentemente ao programa chamador. A
utilização de threads nas aplicações normalmente aumenta seu desempenho. Um
exemplo disso pode ser observado no funcionamento de servidores web. O ciclo de
vida de um thread inclui os estados nascido, pronto para execução, morto, bloqueado,
em espera e adormecido.
Em relação à implementação, vale recordar que, em modo usuário, os threads
são implementados pela aplicação e não pelo sistema operacional. Eles executam
operações no espaço do usuário e são transparentes para o sistema operacional.
As vantagens dessa implementação incluem a desnecessidade de o sistema
operacional suportar threads, o escalonamento conforme necessidades específicas
de desempenho das aplicações e bom desempenho.
Os threads em modo Kernel são implementados diretamente pelo núcleo do
sistema operacional, por meio de chamadas a rotinas do sistema que oferecem
Não é difícil percebermos, portanto, que a utilização dos threads provoca benefícios
na execução dos programas de usuários, normalmente relacionados ao aumento
da velocidade de execução. Mas será que apenas um perfil de aplicação pode se
beneficiar das caraterísticas dos threads? A resposta está nas próximas linhas.
Assim que desperta, o thread operário certifica-se de que a solicitação pode ser
atendida a partir do cache de páginas da web, local acessível a todos os threads. Caso
a solicitação inclua uma página fora do cache, uma operação de leitura no disco é
iniciada, a fim de que o sistema possa à página solicitada. Durante essa operação,
o thread envolvido permanece bloqueado até que a leitura seja concluída. Quando o
thread é bloqueado na operação de disco, outro thread é escolhido para ser executado,
a fim de cumprir outras etapas do processo. Com esse modelo é possível que o
servidor seja escrito como uma coleção de threads sequenciais.
Esperamos que estes dois exemplos tenham tornado mais clara a real função
de um thread e dado a você a dimensão da sua importância para a viabilização da
computação moderna. Boa sorte, bons estudos e até a próxima.
AULA 10
SISTEMAS OPERACIONAL
COM VÁRIOS PROCESSADORES
Desde que o primeiro artefato computacional foi concebido, a busca pela superação
dos limites de desempenho e eficiência nessas máquinas nunca mais parou. A
miniaturização proporcionada pela microeletrônica e o aprimoramento global dos
meios de fabricação dos componentes do computador foram movimentos decisivos
na elevação do nível de desempenho dos nossos sistemas computacionais. A despeito
da importância destes avanços, uma providência em especial tem ajudado a viabilizar
a computação moderna, justamente por ter proporcionado um salto extraordinário
no processamento de dados: o advento dos sistemas com múltiplos processadores.
Seja bem-vinda e seja bem-vindo a este encontro de Sistemas Operacionais e prepare-
se para subir mais um nível em seu conhecimento. Boa leitura!
10.1 Fundamentos
O termo Sistema operacional com vários processadores nos remete ao uso de duas
ou mais CPUs em um único sistema de computador. Essas CPUs múltiplas mantêm
uma comunicação próxima, compartilhando o barramento do computador, memória
e outros dispositivos periféricos. Por causa desta característica, esses sistemas
são chamados de sistemas fortemente acoplados e são usados em aplicações que
demandam velocidade muito alta para processar um grande volume de dados. Uma
possível organização de um sistema multiprocessado é ilustrada na figura 15:
o que significa que é dividido em rotinas menores que podem ser executadas de forma
independente. Isso permite que o Sistema Operacional para permitir que esses threads
sejam executados em mais de um processador simultaneamente, o que resulta em
um desempenho bastante superior.
uns com os outros à medida que agendam tarefas e coordenam a execução de todas
elas.
Como os Sistemas Operacionais de multiprocessamento dependem do
processamento paralelo, cada CPU envolvida em uma tarefa deve ser capaz de
informar os outros sobre o andamento daquilo que está cumprindo. Isso permite que
o trabalho dos processadores seja integrado quando os cálculos são feitos de forma
que atrasos e outras ineficiências sejam minimizados. Por causa das especificidades
deste tipo de operação foram desenvolvidos alguns tipos de implementações para
que o trabalho de vários processadores em paralelo fosse viabilizado. Nesta seção
trataremos, portanto, de dois tipos de Sistemas Operacionais para multiprocessadores.
Este modelo reduz ocorrências de sobrecarga em uma CPU enquanto a outra (ou
as outras) fica ociosa. Aqui, quando uma CPU fica ociosa, ela solicita processos ao
Sistema Operacional da CPU mestre para que possa executá-los. Como há apenas um
cache de buffer, então eventuais inconsistências no acesso aos dados não ocorrerão.
No entanto, ainda há algo a ser considerado: quando o mestre precisar coordenar
muitas CPUs, ele próprio (o mestre) será o gargalo do sistema, pois terá de lidar com
todas as chamadas de sistema de todas as CPUs.
Se, digamos, 10% de todo o tempo for gasto lidando com chamadas do sistema, então
10 CPUs praticamente saturarão o mestre, e com 20 CPUs ele estará completamente
sobrecarregado. Assim, esse modelo é simples e executável para um ambiente com
poucos processadores apenas.
Este foi o conteúdo que queríamos compartilhar com você. Esmere-se na execução
das demais atividades e aumente cada vez mais seu conhecimento em Sistemas
Operacionais. Até a próxima!
AULA 11
ESCALONADOR DA CPU
Olá! Seja bem-vinda e seja bem-vindo a mais uma aula de Sistemas Operacionais!
Você bem se lembra que em nosso último encontro fizemos a conceituação e a
caracterização do perfil de um Sistema Operacional para ambientes de múltiplos
processadores. Na ocasião, inclusive, abordamos dois tipos de arranjo: o de um
Sistema Operacional para cada CPU e o mestre-escravo. Embora tudo aquilo tenho
nos parecido muito lógico e factível, faltou tratarmos de um elemento crítico em todo
esse contexto: o escalonador, ou scheduler, na língua Inglesa. Em poucas palavras,
trata-se de uma função do Sistema Operacional que decidirá o momento em que cada
processo poderá ocupar a CPU, o que o torna uma espécie de “organizador da fila” dos
processos prontos para serem executados. Instigante, não é mesmo? Fique conosco
para avançarmos juntos mais uma etapa em nosso estudo.
Nas circunstâncias 1 e 4 o escalonador não pode tomar outra ação que não a de
selecionar um novo processo para execução a partir da fila de processos prontos.
Há uma alternativa, no entanto, nas circunstâncias 2 e 3: quando o escalonamento
acontece apenas sob as circunstâncias 1 e 4, dizemos que o esquema de scheduling é
sem preempção ou cooperativo. Em qualquer outro caso, ele tem preempção.
Uma explicação mais detalhada cabe aqui: o escalonamento com preempção
é uma técnica que se baseia na divisão de tempo de CPU para um determinado
processo. O intervalo estabelecido pode ser capaz de concluir todo o processo ou
não. Quando o tempo de execução do processo é maior do que o ciclo da CPU, ele é
colocado de volta na fila de pronto e será executado na próxima oportunidade. Este
escalonamento é usado, portanto, quando o processo muda para o estado pronto,
conforme a circunstância 2. Já o escalonamento sem preempção é uma técnica de
escalonamento da CPU em que o processo assume a CPU e a retém até que seu
encerramento ou até que seja colocado em estado de espera. Nenhum processo é
interrompido até que seja concluído e, depois disso, o processador muda para outro
processo.
Considerando a chegada dos processos à CPU na ordem P1, P2 e P3, eles também
serão atendidos nesta ordem, conforme ilustrado na figura 18.
Que tal assistir a um vídeo que trate de escalonamento de processos de uma forma
bem didática e objetiva? Acesse a URL indicada logo abaixo.
Sistemas operacionais: Parte 2 - Escalonamento de processos. Disponível em:
https://www.youtube.com/watch?v=fUNf-pZLUMQ. Acesso em: 9 jul. 2021.
Isto é o que temos para este encontro. Uma boa leitura do material indicado nas
referências ajudará a complementar seu conhecimento teórico sobre o assunto. Fique
conosco e até a próxima!
AULA 12
ALGORITMOS AVANÇADOS
DE ESCALONAMENTO
O caminho pelo conhecimento das características e funcionalidades dos Sistemas
Operacionais já nos levou a muitos lugares: começamos pelos seus fundamentos,
visitamos momentos históricos que marcaram seu desenvolvimento, passamos
pelas formas com que eles gerenciam recursos do sistema computacional, tivemos
contato com processos, threads, ambientes de múltiplo processamento e, em nosso
encontro anterior, desfrutamos da companhia do organizador de fila de processos,
que nos foi apresentado como escalonador. Nada mal, mas ainda temos um bom
trecho a percorrer.
Por causa da grande variedade de algoritmos capazes de selecionar o processo mais
apto a ocupar a CPU em dado momento, abordaremos nesta aula mais alguns destes
algoritmos, os quais classificaremos como algoritmos avançados. Nesta categoria,
serão incluídos o escalonamento por prioridades, Round-Robin, Filas Multiníveis e Filas
Multiníveis com Retroalimentação. Vamos nessa? Fique conosco e boa leitura!
situação, outro servidor que adote esse tipo de escalonamento pode dar prioridade
maior a processos de um setor da empresa e baixa prioridade para processos de
outro setor.
Com todos esses recursos para definição de prioridades, este tipo de algoritmo
parece perfeito, não é mesmo? Infelizmente não é bem assim. Um problema
relacionado a ele é conhecido por bloqueio indefinido ou inanição, especialmente em
sistemas com alta carga de processamento. Nesta situação, alguns processos de mais
baixa prioridade podem ficar aguardando indefinidamente para serem processados,
enquanto processo de alta prioridade tomam seus lugares na CPU. É comum, então,
que esses processos bloqueados indefinidamente tenham vez em algum momento de
baixa carga de processamento (na madrugada de sábado, por exemplo) ou que esses
processos se percam quando a máquina é desligada. Para evitar que um processo
simplesmente se perca em situação como essa, projetistas criaram um mecanismo
conhecido como envelhecimento, que consiste no aumento gradual da prioridade dos
processos que aguardam a CPU por muito tempo.
ANOTE ISSO
Além disso, a fila de processos prontos é tratada como uma fila circular, daí o nome
do algoritmo conter a expressão “round”. O escalonador verifica a fila de prontos,
alocando a CPU para cada processo por um intervalo de até uma fração (ou quantum)
de tempo e novos processos são adicionados à cauda da fila de prontos, assim que
nela chegam. O processo que não puder ser executado antes que seu quantum
termine será alocado também na cauda da fila e, na sequência, o escalonador da CPU
selecionará o próximo processo na fila de prontos.
Antes de terminarmos a abordagem deste algoritmo, vale a menção de que o
desempenho dele está fortemente relacionado à quantidade de tempo (ou quantum)
designada para a resolução do processo na CPU. Por causa disto, uma necessária
ponderação deve ser feita: se o quantum for demasiadamente longo, o critério de
processamento relacionado ao Round-Robin torna-se muito semelhante (ou até
mesmo igual) à política do “Primeiro-a-Chegar, Primeiro-a-Ser-Atendido”. Mas se,
por acaso, o quantum de tempo for demasiadamente curto, o funcionamento do
RR pode resultar em muitas mudanças de contexto, necessárias para interromper o
processamento e colocar o processo na cauda da lista circular.
para uso comum. Por critérios próprios, as prioridades de processos foram assim
definidas:
1. Processos de Sistema
2. Processos interativos da Secretaria
3. Processos interativos dos Professores
4. Processos em lotes (batch)
5. Processos dos alunos
Há, no entanto, mais uma forma de priorizar processos: pela distribuição explícita
do tempo de CPU entre as filas. Neste caso, cada fila recebe certa fatia de tempo
FACULDADE CATÓLICA PAULISTA | 77
SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO
de CPU, que será distribuída entre os seus processos em estado de pronto. Uma
situação possível seria a distribuição de 70% de tempo da CPU entre as filas de
processos foreground e 30% para os processos de background. Embora essa seja
uma boa solução, há ainda uma questão a ser superada: a atribuição permanente
dos processos a uma determinada fila, o que confere um viés de inflexibilidade ao
algoritmo. Nosso próximo meio de escalonamento aborda este problema.
Este foi o conteúdo que queríamos compartilhar com você neste encontro. Bom
estudo e até a próxima!
AULA 13
INTRODUÇÃO A DEADLOCKS
É inegável que o desenvolvimento de ambientes computacionais de
multiprocessamento trouxe ótimos resultados relacionados ao desempenho das
nossas aplicações e viabilizou a computação como hoje a conhecemos. Como
sabemos, os Sistemas Operacionais para vários processadores executam as mesmas
funções que os Sistemas Operacionais para processador único, mas são capazes de
dividir o trabalho global em várias subtarefas e, em seguida, conseguem atribuir essas
subtarefas a diferentes CPUs.
O multiprocessamento usa uma arquitetura de comunicação específica para
obter esse resultado. Um Sistema Operacional de vários processadores carece de
um mecanismo para que estes recursos interajam uns com os outros à medida que
agendam tarefas e coordenam sua conclusão. Muito conveniente, não é mesmo?
Ocorre que algumas situações próprias do ambiente de multiprogramação podem
fazer com que processos disputem um número limitado de recursos e que, em
consequência, um impasse aconteça. Neste encontro trataremos dos deadlocks,
situação típica que ocorre na quando dois ou mais processos precisam de algum
recurso para concluir sua execução, mas que é mantido por outro processo.
13.1 Conceituação
Já que – como dizem - uma imagem vale mais do que mil palavras, iniciamos
nossa seção de conceitos com a ilustração do que é um deadlock em um Sistema
Operacional. Na figura 21, o processo 1 possui o recurso 1 e precisa adquirir o recurso
2. Da mesma forma, o processo 2 tem o recurso 2 e precisa adquirir o recurso 1. O
processo 1 e o processo 2 estão em impasse, pois cada um deles precisa do recurso
do outro para completar seus execução, mas nenhum deles está disposto a renunciar
a seus recursos.
deverá aguardar sua vez em uma fila. Um conjunto de processos está em estado de
deadlock quando cada processo do conjunto está esperando por um evento que pode
ser causado apenas por outro processo no conjunto.
É essencial, portanto, evitar um deadlock antes que ele ocorra. Para isso, o sistema
deve verificar cada transação antes de ser executada para certificar-se de que ela não
leva a um deadlock. Se houver uma pequena chance de que uma transação possa levar
a um impasse no futuro, ela nunca deverá ter permissão para ser executada. Para
que a prevenção seja feita de forma eficiente, é necessário conhecer as condições
necessárias para que um deadlock ocorra.
pode haver mais de um processo que está mantendo um recurso e aguardando por
outro. É necessária, portanto, a implementação de algum mecanismo pelo qual
um processo não detenha nenhum recurso ou não espere. Isso significa que um
processo deve receber todos os recursos necessários antes do início da execução.
Em outras palavras, um processo não deve esperar por nenhum recurso depois de
iniciada a execução. Isso poderia ser implementado de forma prática se um processo
declarasse todos os recursos inicialmente. No entanto, essa “reserva” não pode ser
feita no sistema de computacional, já que um processo não pode determinar os
recursos necessários previamente.
Antes de terminarmos este encontro, uma questão deve ser abordada: de que forma
os Sistemas Operacionais lidam com o problema do deadlock? Existem basicamente
três abordagens, mas a resposta pode ser surpreendente. O Sistema Operacional pode
utilizar um protocolo de ações que impedem os deadlocks. A segunda abordagem
consiste em permitir que o sistema entre em deadlock, mas que um mecanismo de
recuperação entre em ação sempre que isso aconteça. Por fim, a terceira maneira é
aquela adotada pela maioria dos Sistemas Operacionais, incluindo provavelmente o
que você está usando neste momento: ignorar que deadlocks podem ocorrer e deixar
que o desenvolvedor do aplicativo assuma a responsabilidade por evitá-los.
Não deixe de fazer leituras adicionais e de cumprir com as atividades recomendadas.
Bom estudo e até a próxima!
AULA 14
VIRTUALIZAÇÃO E
MÁQUINAS VIRTUAIS
Caso você tenha sido tomada ou tomado por uma súbita curiosidade para
conhecer os vários significados que podem ser relacionados ao termo “virtual” deve
ter encontrado no dicionário coisas como “elemento existente apenas potencialmente,
mas sem efeito real” ou “que poderá vir a ser, existir, acontecer ou praticar-se; possível,
factível”. Ainda sem conseguir relacionar com perfeição o termo ao que encontrou
como significado pode ter encontrado a expressão “aquilo que constitui uma
simulação criada por meios eletrônicos como, por exemplo, uma imagem do cosmos”.
Embora estas definições sejam absolutamente úteis para o entendimento do termo,
algumas adaptações e especificações precisam ser feitas em nosso contexto. De
qualquer forma, o resultado que obtemos das máquinas virtuais e do processo de
virtualização é absolutamente indispensável para a ótima utilização dos nossos
recursos computacionais. Permaneça conosco e boa leitura!
14.1 Conceito
Em termos mais formais, a virtualização é o processo de execução de uma instância
virtual de um sistema de computador em uma camada abstraída do hardware
real. Por enquanto, esta definição pode soar nada esclarecedora, mas aos poucos
abordaremos elementos que tornarão seu entendimento mais claro. Podemos
afirmar, por exemplo, que a virtualização se refere à execução de vários Sistemas
Operacionais simultaneamente em um único computador e, para os aplicativos em
execução na máquina virtualizada, pode parecer como se estivessem em sua própria
máquina dedicada, o que torna toda a estrutura transparente para o usuário.
Existem muitos motivos pelos quais as pessoas utilizam a virtualização na
computação. Para usuários de desktop, a utilidade deste recurso nasce do fato de
que será possível executar aplicativos destinados a um sistema operacional diferente,
sem ter que trocar de computador. Para administradores de servidores, a virtualização
também oferece a capacidade de executar diferentes sistemas operacionais, além de
oferecer uma maneira de segmentar um grande sistema em muitas partes menores,
permitindo que o servidor seja usado de forma mais eficiente por vários usuários
diferentes ou aplicativos com necessidades diferentes. Outro motivo está relacionado
ao isolamento de dados e de programas, pois os mantêm dentro de uma máquina
virtual protegidos dos processos que ocorrem em outra máquina virtual no mesmo
servidor.
14.2 Hypervisor
Um conceito bastante importante no escopo do nosso estudo é o hypervisor. Trata-
se de um programa capaz de criar, executar e manter máquinas virtuais. De acordo
com VMware (2021), existem dois tipos principais de hypervisors, chamados de
“Tipo 1” (ou “bare metal”) e “Tipo 2” (ou “hosted”). Um hypervisor tipo 1 atua como um
Sistema Operacional, que é executado diretamente no hardware do host, enquanto
um hypervisor tipo 2 é executado como uma camada de software em um sistema
operacional, como outros programas de computador.
ANOTE ISSO
de TI) que podem ser virtualizados, com vários tipos específicos de virtualização
(VMWARE, 2021):
Neste vídeo de pouco mais de 11 minutos você terá contato com itens introdutórios
relacionados à virtualização, com abordagem especial para Hypervisor.
Disponível em: https://www.youtube.com/watch?v=QUDS8a1KaA4. Acesso em: 13 jul. 2021.
AULA 15
SISTEMAS OPERACIONAIS
MULTIMÍDIA
Em um passado não tão distante, a utilização dos computadores estava restrita à
grandes corporações, órgãos governamentais e instituições de ensino. No entanto,
algo aconteceu que mudou este cenário e uma das razões que mais contribuiu para
que os computadores deixassem de ser recurso exclusivo destes ambientes para
se tornar presença frequente na casa das pessoas foi o aspecto amigável que as
interfaces de usuário assumiram, ao mesmo tempo que os Sistemas Operacionais
viabilizavam a interação com som, imagens em movimento e toda a espécie de
entretenimento capaz de cativar os usuários comuns. Nesta aula trataremos das
definições relacionadas à multimídia e das características necessárias para que um
Sistema Operacional possa lidar com conteúdo composto por animações, sons e
imagens. Boa leitura!
15.1 Introdução
A importância dos Sistemas Operacionais Multimídia nasce da criticidade dos
seus dois componentes. Em relação aos Sistemas Operacionais, esmiuçamos suas
características e aplicações ao longo dos nossos encontros anteriores e, portanto, já
conhecemos seu papel no contexto de um sistema computacional. A multimídia, por
sua vez, é um dos aspectos mais importantes da área da Tecnologia da Informação.
Atualmente, a multimídia geralmente indica uma rica interação sensorial entre
humanos e computadores (ou dispositivos semelhantes a computadores), por meio
de interfaces que na maioria dos casos dá ao usuário controle sobre o ritmo e a
sequência das informações.
Embora todos nós sejamos capazes de reconhecer um elemento multimídia
quando o vemos ou ouvimos, ainda assim se faz necessária uma conceituação mais
formal do tópico. O termo multimídia descreve uma grande variedade de aplicações
que são de uso popular em nossos dias. Este termo cobre uma grande categoria de
mídias, que inclui arquivos de áudio e vídeo, incluindo arquivos de áudio MP3, filmes,
videoclipes curtos e arquivos de animação e até mesmo notícias que podem ser lidas
ANOTE ISSO
A multimídia tem duas características principais que devem ser bem compreendidas
para que sua abordagem seja feita com sucesso:
A multimídia tem duas características principais que devem ser bem compreendidas
para lidar com ela com sucesso:
prioridade (também entre processos de tempo crítico com prioridades diferentes) seja
evitada ou reduzida tanto quanto possível.
O perfil dos processos que compõem uma aplicação multimídia também são
determinantes para a escolha do algoritmo adequado de escalonamento. Imaginemos
que os processos sejam todos homogêneos. O tipo mais simples de configuração
de servidor é a que pode suportar a exibição de um número fixo de filmes, todos
usando a mesma taxa de quadros, resolução de vídeo, taxa de dados e outros
parâmetros. Nestas circunstâncias, uma estratégia de escalonamento simples, mas
eficaz, seria a seguinte: para cada filme, há um único processo cujo trabalho é ler
o filme do disco um quadro por vez e transmitir o quadro ao usuário. Como todos
os processos são igualmente importantes (ou homogêneos, como os chamamos
antes), têm a mesma quantidade de trabalho a fazer por quadro e bloqueiam quando
concluem o processamento do quadro atual, o escalonamento Round-Robin (RR)
cumpriria o trabalho perfeitamente bem. A única adição necessária aos algoritmos
de escalonamento padrão é o mecanismo de temporização para garantir que cada
processo seja executado na frequência correta.
Infelizmente, o modelo que descrevemos raramente é aplicável na realidade. Os
tamanhos dos quadros variam amplamente devido à natureza da compressão do
vídeo e filmes diferentes podem ter resoluções diferentes. Como uma sequência,
diferentes processos podem ter que ser executados em diferentes frequências, com
diferentes quantidades de trabalho e com diferentes prazos nos quais o trabalho deve
ser concluído. Isso leva a vários processos competindo pela CPU, cada um com seu
próprio perfil e tempo para execução.
AULA 16
SISTEMAS OPERACIONAIS
PARA DISPOSITIVOS MÓVEIS
Não há como negar: os dispositivos móveis – principalmente os smartphones –
são artefatos que fazem parte das nossas vidas e, sem eles, perderíamos bastante do
nosso contato com o mundo. Foi-se o tempo em que o telefone que carregávamos no
bolso servia apenas para recebermos (raras) ligações ou para enviarmos mensagens de
texto curtas. Em nossos dias, aparelhos celulares possuem poder de processamento
muitas vezes maior do que grandes computadores em um passado não tão remoto
e tanto avanço pode ser atribuído às melhorias aplicadas em seu hardware, mas
também (e sobretudo) aos Sistemas Operacionais que os equipam.
Cada dispositivo móvel de comunicação precisa de um Sistema Operacional
para executar seus serviços, seja a conexão com a internet, o uso da câmera ou a
execução da aplicação de rede social que nos entretém. Chegamos assim ao nosso
último encontro e usaremos o tempo que nos resta para tratarmos de Sistemas
Operacionais para dispositivos móveis, seja das suas características comuns, seja
das especificidades de cada principal fabricante que conhecemos. Fique conosco e
boa leitura!
16.1 Introdução
Um Sistema Operacional para dispositivos móveis (ou simplesmente Sistema
Operacional móvel) é uma plataforma de software sobre a qual outros programas,
chamados de programas de aplicativos, podem ser executados em dispositivos
móveis, como tablets e smartphones. Ao longo dos anos, o projeto do Sistema
Operacional móvel passou por uma evolução de três fases: do Sistema Operacional
baseado em nossos computadores pessoais para um sistema operacional integrado,
e dele para Sistemas Operacionais orientados ao modelo móvel de operação.
Ao longo do processo, a arquitetura do Sistema Operacional móvel passou de
complexa a simples. O processo de evolução é naturalmente impulsionado pelos
avanços da tecnologia em hardware, software e na Internet, conforme detalharemos
na sequência:
• Hardware: a indústria ocupou-se em reduzir o tamanho dos microprocessadores
16.3.1 Android
O sistema operacional Android para dispositivos móveis é desenvolvido pela Open
Handset Alliance, liderada pelo Google, que revelou a distribuição do Android em
novembro de 2007. A maior parte do núcleo do Android é lançada sob a licença Apache
de código aberto, mas uma grande quantidade de software em dispositivos Android
(como Play Store, Google Search, Google Play Services e Google Music, entre outros)
são proprietários e licenciados. Em 2011, o Android tinha a maior base instalada de
qualquer sistema operacional móvel e, a partir de 2013, seus dispositivos também
vendiam mais do que dispositivos Windows, iOS e Mac OS juntos. Em julho de 2013, a
Google Play Store teve mais de 1 milhão de aplicativos Android publicados e mais de
50 bilhões de aplicativos baixados.
Uma pesquisa com desenvolvedores realizada entre abril e maio de 2013 descobriu
que 71% dos desenvolvedores de aplicativos móveis desenvolvem para Android. Este
Sistema Operacional usa um kernel Linux com APIs escritas em C e os aplicativos
são normalmente programados em Java e executados com a máquina virtual
Dalvik (DVM). Essa combinação traz alguns recursos seguros, como gerenciamento
eficiente de memória compartilhada, multitarefa preemptiva, identificadores de
usuário Unix (UIDs) e permissões de arquivo com o conceito de tipo seguro de Java.
Cada aplicativo Android é executado em um processo separado sob um UID exclusivo
com permissões distintas, o que significa que os aplicativos normalmente não podem
ler ou gravar os dados ou códigos uns dos outros. O kernel protege os aplicativos
uns dos outros, de modo que os recursos e os dados devem ser compartilhados
explicitamente. Para possibilitar o compartilhamento de recursos entre os aplicativos,
as permissões necessárias devem ser declaradas estaticamente no momento da
instalação do aplicativo.
A plataforma Android contém as seguintes camadas:
16.3.2 iOS
O iOS - anteriormente chamado iPhone OS - é um sistema operacional móvel
desenvolvido pela Apple e distribuído exclusivamente para o hardware Apple. É o
sistema operacional que alimenta o iPhone, iPad, iPod Touch e Apple TV. Trata-se
O iOS também usa um modelo que obriga que as aplicações sejam assinadas com
um certificado. Isso garante que o aplicativo não foi manipulado antes ou depois de
sua execução.
Chegamos ao fim das nossas aulas. Esperamos que todo o conteúdo que
discutimos tenha sido útil em seu crescimento nos assuntos relacionados aos
Sistemas Operacionais. Não deixe de cumprir as atividades propostas e de sempre
procurar leituras adicionais. Boa sorte!
CONCLUSÃO
Os Sistemas Operacionais fazem parte da lista daqueles assuntos que se tornam
mais interessantes na medida que avançamos em conhecimento. Com a devida
licença literária para atribuir características humanas aos elementos destes sistemas
é muito difícil não se interessar pela sua evolução histórica, pela engenhosidade
dos processos e dos threads, pela esperteza dos algoritmos de escalonamento de
processos e pelas soluções criativas aplicadas no gerenciamento dos recursos de um
arranjo computacional, tais como memória, sistemas de arquivos e dispositivos de
entrada e saída.
Durante nossos encontros, a abordagem dos temas caracterizou-se por um viés
mais teórico, com textos objetivos e de fácil compreensão, e esta forma de tratar
Sistemas Operacionais não foi adotada por acaso: o objetivo sempre foi o de encorajar
você a procurar por novas fontes, diferentes pontos e vista e – por que não – dar a
você bons motivos para se interessar cada vez mais pelo tema. Ficaremos muito
satisfeitos se alcançarmos esta meta.
Por fim, desejamos que você tenha pleno sucesso na conclusão do seu curso e
que, no final, você se torne um profissional que honre a Ciência da Computação e que
ajude a tornar melhor e mais divertida a vida das pessoas por meio dos seus projetos
profissionais.
Até a próxima!
ELEMENTOS COMPLEMENTARES
LIVRO
FILME
WEB
REFERÊNCIAS
DEITEL, H. M., DEITEL, P. J., CHOFFNES, D. R.; Sistemas Operacionais. 3.ed. São
Paulo: Pearson Prentice Hall, 2005.
FLYNN, I. M.; McHOES, A. C., Introdução aos Sistemas Operacionais. São Paulo:
Pioneira Thomson Learning, 2002.
HAN, C. C, KUMAR, R., SHEA, R., Eddie KOHLER, E., SRIVASTAVA, M.; A
dynamic operating system for sensor nodes. MobiSys ‘05: Proceedings of the 3rd
international conference on Mobile systems, applications, and services. June 2005, pp
163–176https://doi.org/10.1145/1067170.1067188.
2021.
TANENBAUM, A. S., BOS, H.; Sistemas Operacionais Modernos. 4. ed. São Paulo:
Pearson Education do Brasil, 2016.