CSI 3301 - Introdução Aos Sistemas Operativos
CSI 3301 - Introdução Aos Sistemas Operativos
CSI 3301 - Introdução Aos Sistemas Operativos
INTRODUÇÃO AOS
SISTEMAS OPERATIVOS
Flavio Semedo
Introdução aos Sistemas Operativos
Prefácio
A Universidade Virtual Africana (AVU) orgulha-se de participar do aumento do acesso à
educação nos países africanos através da produção de materiais de aprendizagem de
qualidade. Também estamos orgulhosos de contribuir com o conhecimento global, pois
nossos Recursos Educacionais Abertos são acessados principalmente de fora do continente
africano.
Bakary Diallo
O Reitor
2
Créditos de Produção
Autor
Flavio Semedo
Par revisor(a)
Elisabeth Andrade
Coordenador do módulo
Victor Odumuyiwa
Designers Instrucionais
Elizabeth Mbasu
Benta Ochola
Diana Tuel
Equipa Multimédia
Sidney McGregor Michal Abigael Koyier
3
Introdução aos Sistemas Operativos
Direitos de Autor
Este documento é publicado sob as condições do Creative Commons
Http://en.wikipedia.org/wiki/Creative_Commons
Atribuição http://creativecommons.org/licenses/by/2.5/
O Modelo do Módulo é copyright da Universidade Virtual Africana, licenciado sob uma licença
Creative Commons Attribution-ShareAlike 4.0 International. CC-BY, SA
Apoiado por
4
Índice
Prefácio 2
Créditos de Produção 3
Direitos de Autor 4
Agradecimentos 5
Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Materiais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Objetivos do Curso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Unidades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
Avaliação. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Grelha de avaliação. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Calendarização. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Unidade 0. Diagnóstico 18
Introdução à Unidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Avaliação da Unidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Perguntas de autoavaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Termos-chave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Atividades de Aprendizagem. . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Introdução 22
Perspetiva Histórica 22
5
Introdução aos Sistemas Operativos
Avaliação 28
Conclusão 28
Introdução 28
Conclusão 35
Avaliação 35
Conclusão 39
Resumo da Unidade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Avaliação da Unidade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Exercício prático 40
Avaliação 40
Introdução à Unidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Objetivos da Unidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Termos-chave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Atividades de Aprendizagem. . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Introdução 43
Estado de um Processo 44
6
Implementação de um Processo 45
Agendamento do Processo 45
Filas de Escalonamento 45
Agendamento 45
Utilizando o comando ps 46
Conclusão 48
Introdução 49
Criar um processo 49
Perguntas de autoavaliação 49
Terminar um Processo 53
Processos automáticos 56
Conclusão 57
Perguntas de autoavaliação 57
Introdução 59
Benefícios 60
Modelo muitos-para-um 62
Modelo um-para-um 62
Modelo muitos-para-muitos 63
Conclusão 70
Avaliação 71
Avaliação da Unidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Sistema de avaliação 72
5
Introdução aos Sistemas Operativos
Introdução à Unidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Objetivos da Unidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Termos-chave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Atividades de Aprendizagem. . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Espaço de endereçamento 74
Conclusão 77
Perguntas de autoavaliação 77
Introdução 78
Paginação Hierárquica 78
Conclusão 80
Perguntas de autoavaliação 80
Conclusão 81
Alocação da Memória 82
Alocação de segmentos 82
Substituição de páginas 83
Resumo da Unidade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Sistema de avaliação 85
Avaliação da Unidade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6
Termos-chave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Actividades de Aprendizagem. . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Introdução 88
Atributos de um Ficheiro 88
Tipos de Ficheiros 89
Pergunta de autoavaliação 90
Conclusão 90
Introdução 91
Acesso sequencial 91
Acesso Direto 91
Estrutura do Diretório 91
Conclusão 93
Pergunta de autoavaliação 93
Resumo da Unidade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Introdução 94
Conclusão 94
Sistema de avaliação 95
Avaliação da Unidade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
7
Introdução aos Sistemas Operativos
Este curso apresentará aos alunos os Sistemas Operativos mais populares e modernos. O foco
do curso será em Sistemas Operativos baseados em LINUX/UNIX, embora também vai-se
aprender sobre Sistemas Operativos alternativos, incluindo o Windows. O curso terá início
com uma visão geral da estrutura de Sistemas Operativos. Ao longo das apresentações das
unidades, será discutido a história dos computadores modernos, analisando em detalhes
cada um dos principais componentes de um Sistema Operativo, tais como, processos, gestão
de memórias, threads, ficheiro de sistemas, etc. Um Sistema Operativo é funciona como um
sistema intermediário entre o hardware e o software. Estes, tem como propósito fornecer um
ambiente em que os utilizadores do sistema possa executar as suas atividade de forma eficaz e
eficiente.lors de la conception.
Pré-requisitos
O curso tem como objeto de estudo, familiarizar os alunos com Sistemas Operativos como um
gestor de recursos e relacionar o Sistema Operativo com os utilizadores, aplicações e hardware.
Para este curso, acredita-se que os alunos já possuem uma boa compreensão de arquitetura
e organização de computadores, bem como, conhecimento e habilidades de programação e
estruturas de dados (C, C++, Java).
Materiais
Os materiais necessários para completar este curso incluem:
Objetivos do Curso
Após concluir este curso, o(a) aluno(a) deve ser capaz de:
8
Descrição Geral Do Curso
Unidades
Unidade 0: Diagnóstico
Nesta unidade, será discutida dois importantes blocos de construção central de um sistema
operativo. Processos que são instâncias de um programa de computador em execução e a
thread como uma tarefa específica dentro de um processo? programa.
Nesta unidade, será apresentada uma visão geral dos sistemas de ficheiros, métodos de
alocação de ficheiros, bem como os seus algoritmos de alocação no disco.
9
Introdução aos Sistemas Operativos
Avaliação
Em cada unidade encontram-se incluídos instrumentos de avaliação formativa a fim de verificar
o progresso do(a)s aluno(a)s.
No final de cada módulo são apresentados instrumentos de avaliação sumativa, tais como
testes e trabalhos finais, que compreendem os conhecimentos e as competências estudadas
no módulo.
10
Descrição Geral Do Curso
Grelha de avaliação
Calendarização
• Os pré-requisitos
• O desenvolvimento do curso
• Conteúdo
11
Introdução aos Sistemas Operativos
Operativos
12
Descrição Geral Do Curso
Unidade 0
Unidade 1
13
Introdução aos Sistemas Operativos
Unidade 2
Unidade 3
• Arquiteturas de Computadores, (3 ed.), Delgado, J., Ribeiro, C., (2008), (FCA Ed.),
Portugal.
• Computer Organization and Design (3 ed.), Patterson, D., Hennessy, J., (2005),
(Elsevier Inc), USA.
• Sistemas Operativos, Marques, J., Ferreira, P., Ribeiro, C., Veiga, L., Rodrigues, R.,
(2009), (FCA Ed.), Portugal. Capitulo 7 e 8.
• Sistema Operacionais (2 ed.). Tanembaum, A., & Woodhull, A. (Artmed, Ed.)
Brasil. Capitulo 4.
• Operating System Concepts (9th ed.), Silberschatz, A., Galvin, P., & Gane, G.
(2013), (Willey, Sons, & Inc, Eds.) USA. Capitulo 8 e 9.
Unidade 4
14
Descrição Geral Do Curso
• Computer Organization and Design (3 ed.), Patterson, D., Hennessy, J., (2005),
(Elsevier Inc), USA.
• Sistemas Operativos, Marques, J., Ferreira, P., Ribeiro, C., Veiga, L., Rodrigues, R.,
(2009), (FCA Ed.), Portugal. Capitulo 9 e 10.
• Sistema Operacionais (2 ed.). Tanembaum, A., & Woodhull, A. (Artmed, Ed.)
Brasil. Capitulo 5.
• Operating System Concepts (9th ed.), Silberschatz, A., Galvin, P., & Gane, G.
(2013), (Willey, Sons, & Inc, Eds.) USA. Capitulo 11 e 12.
15
Introdução aos Sistemas Operativos
Unidade 0: Diagnóstico
Introdução à Unidade
A multiplicação da força intelectual da humanidade nesta geração, foi conduzido pela
origem e penetração dos computadores no quotidiano, com informações tendo seu lugar
em diferentes atividades do dia-a-dia. O propósito desta unidade é verificar a compreensão
dos conhecimentos que o aluno possui, como pré-requisito deste curso. Antes de explorar
os detalhes de como funciona um computador é necessário saber, em geral, a sua estrutura
organizacional. Durantes as apresentações das unidades subsequentes, serão apresentadas
os algoritmos para a criação de processos e programação de threads, gestão de memória e
ficheiros. No entanto, é necessário que os alunos possuem conhecimentos das linguagens de
programação.
Avaliação da Unidade
Verifique a sua compreensão!
Perguntas de autoavaliação
Parte 1: Arquitetura de Computadores
a) Aplicações
b) Dispositivo de entrada
c) Circuitos integrados
d) Dispositivo de saída
f) Computadores pessoais
g) Semicondutores
h) Supercomputadores
i) Softwares do sistema
16
Unidade 0: Diagnóstico
1. LCD __________
2. Assembler __________
3. Compilador __________
4. DRAM __________
5. Java __________
6. Microprocessador __________
11. HP PC __________
8. Qual é o programa que traduz uma notação de alto nível para a linguagem
assembler?
17
Introdução aos Sistemas Operativos
10. Escreva um programa que abra um ficheiro e indique quantos bytes este contém,
obtendo este valor através do acesso sequêncial.
11. Implemente uma função char * segundo(char *s) unicamente através do uso de
apontadores.
18
Unidade 1: Introdução Aos Sistemas Operativos
Objetivos da Unidade
Após a conclusão desta unidade, deverá ser capaz de:
Termos-chave
Sistema Operativo: Controla todos os recursos de um
computador e fornece a base como uma aplicação pode
ser executada.
19
Introdução aos Sistemas Operativos
Atividades de Aprendizagem
Introdução
Em geral, todos os utilizadores que utilizam computadores, já tem experiência com um sistema
operativo. Sempre que um computador é iniciado, neste processo de inicialização em um
determinado período o Sistema Operativo estará a comando. Depois do computador iniciar
e estiver disponível para o uso pessoal, os utilizadores podem interagir com o computador
através de uma interface gráfica ou de linha de comando. Há diversas tarefas que podem ser
efetuadas por parte dos utilizadores, tais como, instalar/desinstalar um programa, executar
um programa, entre outras tarefas. Um Sistema Operativo, pode ser considerado, também
um gestor de recursos. Desta forma, determina que recursos do computador serão utilizados
para resolver um problema e a ordem em que estes serão utilizados. De uma forma geral, um
sistema operativo desempenha três principais tipos de funções.
Perspetiva Histórica
Na década de 1940, os primeiros sistemas eletrónicos digitais não tinham um sistemas
operativo. Nesta época, os computadores eram tão primitivas comparados com os de hoje.
Eram programas que funcionavam a nível de hardware baseadas em uma linguagem máquina.
Eventualmente, as linguagens de máquina (que consiste em uma String formado por dígitos
binários de 0s e 1s), foram introduzidas para acelerarem o processo de programação. Os
sistemas na década de 1950 apenas executavam uma tarefa de cada vez. É permitida
apenas uma única pessoa de cada vez para utilizar a máquina. Todos os recursos da máquina,
encontravam à disposição de um utilizador.
Originalmente, cada utilizador escreve o código necessário para implementar uma aplicação
específica, incluindo as instruções de entrada/saída a nível da máquina altamente detalhadas.
A codificação de entrada/saídas necessárias para implementar de funções básicas foi
consolidada em um sistema de controlo de entrada/saída (IOCS). A implementação do sistema
de controle de entrada / saída pode ter sido o início do conceito de um Sistema Operativo.
O utilizador tem o controle total sobre o armazenamento da memória principal e, como
resultado, este sistema é conhecido como sistema de alocação contíguo (é o esquema mais
simples de alocar e armazenar os ficheiros no disco).
20
Unidade 1: Introdução Aos Sistemas Operativos
Para cada utilizador do sistema era atribuído a um job. Jobs requer geralmente um tempo de
execução considerável toda a vez que o sistema operativo era executado.
No inicio da década de 50, mudou-se a rotina devido a introdução de cartões perfurados. Isto,
permitiu a gravação de programas em cartões e lê-los em vez de utilizar cabos e conectores.
Em geral, todo este processo requeria um gasto enorme de tempos, porque levava muito
tempo para um utilizar processar vários jobs no sistema.
Atualmente, os Sistemas Operativos não só tem que lidar com a interconexão entre as redes
mas, também, tem que lidar com a segurança. Neste sentido, foi necessário codificar os dados
proprietários ou privadas que assim mesmo que os dados forem comprometidos, não era para
uma pessoa comum com conhecimentos básicos sobre computadores as acederem.
Alguns dos Sistemas Operativos mais utilizados foram desenvolvidos neste período, como o
sistema IBM, VM e sistemas UNIX. Sistema Operativos UNIX é particularmente notável porque
este é o único sistema que têm-se implementado com sucesso em todo o tipo de computador,
desde de microcomputadores a supercomputadores. A figura 1, em uma cenário simples
descreve o que é um sistema de computador.
21
Introdução aos Sistemas Operativos
GUI - Graphical User Interface, um Sistema Operativos GUI contém gráficos e ícones e é
comummente navegado utilizando um Mouse (Rato) de computador. Exemplos de Sistemas
Operativos GUI são:
• System 7.x
• Windows 98
• Windows CE
• Linux
• Unix
• Windows 8
• Linux
• Unix
• Windows XP
Sistemas
Operativos Data de Lançamento Plataforma Desenvolvedores
22
Unidade 1: Introdução Aos Sistemas Operativos
23
Introdução aos Sistemas Operativos
Para descrever esses componentes e suas conexões, apresenta-se a seguinte exibição de nível
superior:
24
Unidade 1: Introdução Aos Sistemas Operativos
A figura 2, mostra a conexão entre a memória e o CPU com base em um conjunto de dados
transferidos entre os dois componentes. A memória consiste em um conjunto de endereços
definidos sequêncialmente. Cada endereço pode ser um byte constituído por 8 bits, ou
uma palavra de 16 bits. Para aceder os dados na memória o CPU faz o uso de dois registos
internos:
Memory address register - MAR que especifica o endereço na memória para o próximo ler/
escrever.
Memory buffer register - MBR contém dados para ser escritos na memória ou dados para ser
lidos a partir da memória.
–– Quanto maior for o número de bits significa que os dados podem ser
processados em uma grande quantidade e com mais precisão.
–– Quanto maior for o número de bits significa que o sistema pode apontar para o
endereço uma grande quantidade de números de localizações na memória física.
Desde 1995, quando o Windows 95 foi lançado com suporte para aplicações de 32 bits, a
maioria dos softwares e Sistema Operativo tem sido de 32 bits compatíveis.
Por quanto tempo será está transição de Sistemas Operativos de 32 bits para 64 bits?
25
Introdução aos Sistemas Operativos
Pode-se ver que, algumas décadas atrás, houve a transição de 16 bits para 32 bits do Windows
para processadores de 32 bits. Este demorou aproximadamente 10 anos (1985 a 1995) para
obter um Sistema Operativo de 32 bits. O mesmo cenário acontece atualmente, que é a
transição de 32 bits para 64 bits.
Conclusão
Nesta atividade, introduziu-se os conceitos fundamentais de um Sistema Operativo e a visão
geral dos marcos históricos para a progressão e desenvolvimento de um Sistema Operativo.
Em seguida, foi descrita os tipos de sistemas e a principal diferença entre um sistema de 32
bits vs 64 bits. Tipos de so, visao geral do hardware
Avaliação
1. Define um Sistema Operativo.
Introdução
Pode-se ver a vantagem de um Sistema Operativo em diferentes pontos de vista. Por um lado,
os serviços que o sistema fornece e por outro lado, a interface disponível para os utilizadores e
programadores. E, o terceiro ponto, são os seus componentes e as interconexões.
26
Unidade 1: Introdução Aos Sistemas Operativos
Linha de Comando
Alguns Sistemas Operativos incluem o interpretador de comando no kernel. Outros, tal com
o Windows e UNIX, trata estes interpretadores de comandos como um programa especial
que é executado quando uma job é iniciada. Nos sistemas com múltiplos interpretadores de
comandos para escolha, são conhecidos por Shell.
A segunda forma de interagir com o Sistema Operativo é através do GUI, interface amigável.
Como introduzido nos parágrafos anteriores, um Sistema Operativos GUI contém gráficos e
ícones e é comummente navegado utilizando um Mouse de computador.
27
Introdução aos Sistemas Operativos
3. Uma vez que os nome dos ficheiros são obtidos, o programa deve abrir o ficheiro
de entrada e criar o ficheiro de saída.
Cada operação requer um tipo de chamada de sistema e, há também possíveis erros durante a
sua execução. Em seguida é apresentado como a chamada de sistema é utilizada:
Aceitar a entrada
Aceitar a entrada
Repetir
Escrever a mensagem do t ér m i n o na t el a
Terminar
28
Unidade 1: Introdução Aos Sistemas Operativos
29
Introdução aos Sistemas Operativos
Há, em suma, não há uma solução única para o problema definir os requisitos para um Sistema
Operativo. A ampla gama de sistemas mostra que diferentes requisitos podem resultar em
uma ampla variedade de soluções para diferentes ambientes.
30
Unidade 1: Introdução Aos Sistemas Operativos
Um outro exemplo de uma estrutura limitada é o Sistema Operativo original UNIX. UNIX é um
SO que inicialmente era limitado pela funcionalidades do hardware. Consistia em duas partes
separadas: O kernel e os programas. O kernel que é dividida em uma série de interfaces e
drivers de dispositivos, que tem sido adicionado e expandida no últimos anos como a UNIX
tem evoluído. Pode-se ver que, o Sistema Operativo UNIX tem sido dividido em camadas. O
kernel fornece o ficheiro de sistema, CPU scheduling (agendamento), gestão de memórias, e
outras funções do Sistema Operativo através da chamadas de sistema (system calls).
31
Introdução aos Sistemas Operativos
Para executar um Sistema Operativo de 64 bits é necessário o suporte da camada mais baixa,
CPU de 64 bits.
Para executar uma aplicação de 64 bits é preciso o suporte das camadas mais baixa, SO de 64
bits, e o CPU de 64 bits.
Microkernel
Módulos
Máquinas Virtuais
As razões para a criação de máquinas virtuais estão relacionadas com a capacidade de partilhar
o mesmo hardware executado em ambientes diferentes.
Implementação
Embora o conceito de máquinas virtuais é útil, é complicado para implementar. Muito trabalho
é requerido para fornecer uma máquina duplicada. A máquina virtual tem dois modos: modo
utilizador e kernel como foi introduzido anteriormente. O software máquina virtual pode ser
executado no modo kernel, desde de que é um Sistema Operativo. A máquina virtual por si só
executa somente o modo utilizador.
32
Unidade 1: Introdução Aos Sistemas Operativos
Conclusão
Nesta atividade, foram introduzidos a estrutura de um SO e como são criadas e
implementadas e os problemas encontrados durante esta processo.
Avaliação
Use qualquer um dos Sistemas Operativo Linux, como o Ubuntu, Red Hat, Fedora, CentOS,
Kali, ou qualquer outro para executar as atividades de laboratório neste módulo. O código-
fonte são testados no Ubuntu 14.04 neste módulo. Executar sua máquina e faça o login.
Utilizar o terminal para ter acesso ao Shell.
O Shell é um interpretador de linha de comando que funciona como uma interface primária
entre um utilizador e o Sistema Operativo. É um processo (programa em execução) que lê
comandos. Não faz parte do Sistema Operativo, mas faz o uso intensivo de muitos recursos do
Sistema Operativo.
2. O Shell exibe um aviso que informa ao utilizador que ele está pronto para aceitar
um comando.
3. Quando o utilizador insere um comando, o Shell cria um processo filho que executa
o programa para o comando correspondente
4. Quando o processo filho estiver em execução, o Shell espera que o processo filho
termine.
5. Quando o processo filho terminar, o Shell exibe o prompt e tenta ler o próximo
comando.
33
Introdução aos Sistemas Operativos
Veja alguns exemplos das chamadas de sistema. O Linux tem vários editores de texto, tais
como, vim, emacs, ou gedit para escrever programas em C.
34
Unidade 1: Introdução Aos Sistemas Operativos
Salve o ficheiro e feche o editor. Na linha de comando escreve o seguinte comando para
executar o programa no prompt Shell:
$ ./fork
35
Introdução aos Sistemas Operativos
O código a seguir, abre um ficheiro existente chamado meuficheiro duas vezes, escreve uma
vez e lê uma vez através de dois descritores de ficheiros diferentes.
int fd[2];
char buf2[12];
fd[0] = open(“meuficheiro”,O_RDWR);
fd[1] = open(“meuficheiro”,O_RDWR);
write(fd[0],buf1,strlen(buf1));
close(fd[0]);
close(fd[1]);
return 0;
36
Unidade 1: Introdução Aos Sistemas Operativos
/* criar.c */
#include <stdio.h>
int main(){
int fd;
if (fd == -1)
else{
close(fd);
exit (0);
Conclusão
A Shell é uma interface que não é parte do kernel. É utilizado para executar chamadas de
sistema do Sistema Operativo Linux. Nesta atividade, foi apresentada os passos necessários
para escrever programas em C e aceder ás chamadas de sistema do Sistema Operativo Unix.
37
Introdução aos Sistemas Operativos
Exercício prático
Resumo da Unidade
Avaliação da Unidade
Verifique a sua compreensão!
Perguntas de Autoavaliação
Avaliação
Rúbrica Pontuação
38
Unidade 1: Introdução Aos Sistemas Operativos
Nota Comentário
]14,20] Sucesso
<10 Insuficiente
As leituras e outros recursos desta unidade encontram-se na lista de Leituras e Outros Recursos
do curso.
1. Marques, J., Ferreira, P., Ribeiro, C., Veiga, L., Rodrigues, R., Sistemas
Operativos, (2009), (FCA Ed.), Portugal. Capitulo 1 e 2.
39
Introdução aos Sistemas Operativos
Objetivos da Unidade
Após a conclusão desta unidade, deverá ser capaz de:
Termos-chave
Processo: Um programa em execução
40
Unidade 2: Processos E Threads
Atividades de Aprendizagem
Introdução
Todos os computadores modernos podem executar um conjunto de tarefas ao mesmo tempo.
Enquanto executam um programa do utilizador, um computador também pode estar lendo a
partir de um disco e dando saída a texto para uma tela ou impressora. Em um sistema multi
programação, a CPU também alterna de um programa para o outro, executando cada por
dezenas ou centenas de milissegundos. Acredita-se que estritamente falando, a CPU em
qualquer instante do tempo executa só um programa de cada vez, funcionando para vários
programas, dando aos utilizadores a ilusão de paralelismo. Monitorar múltiplas atividades
paralelas é um problema difícil. Com as evoluções constantes nessa área desenvolveram um
modelo que torna o paralelismo mais fácil de tratar (Tanenbaum & Woodhull, 2000).
41
Introdução aos Sistemas Operativos
Para enfatizar que um programa por si só não é um processo. Um programa é uma entidade
passivo, tal como um ficheiro que contendo uma lista de instrução armazenado no disco
(geralmente chamados de ficheiros executáveis) , contudo, um processo é uma entidade
ativa, com um contador de programa especificando a próxima instrução para executar e
um conjunto de recursos associados. Um programa torna um processo quando um ficheiro
executria na mema um processo quando um ficheiro execut fuer instante do tempo executa
sb.m ambientes de exeuçável é carregado na memória, (Silberschartz, 2005).
Processo é uma instância de um programa que está sendo executado. É um programa que
foi carregado a partir do disco para a memória e está em execução. Enquanto um programa
é apenas uma coleção de instruções passiva, o processo é a real execução dessas instruções
e um programa pode ser de vários processos. Este é a unidade básica de execução num
Sistema Operativo. Um processo consome certos recursos como, memória, dispositivos de I/O
tempo de CPU para realizar suas operações. É o dever do Sistema Operativo gerir todos esses
requisitos de processos e levá-los à extinção. Um processo é a unidade básica de execução em
um Sistema Operativo com o número único atribuído como um identificador (PID). Embora a
CPU está executa apenas um programa ao mesmo tempo, também pode trabalhar em vários
programas, trocando e executando por dezenas ou centenas de milissegundos. Este, por sua
vez, exige mais controle e particionamento de programas que resultaram em um processo.
Assim, o Sistema Operativo terá muitos processos em execução ao mesmo tempo e com os
recursos necessários.
Colocar um exemplo claro (ver analogia entre programa e processo, página 62, Tanenbaum).
Estado de um Processo
Enquanto o processo é executado, muda de estado. O estado de um processo é definido em
parte por sua atividade. Cada processo pode estar em um dos seguintes estados. Veja a figura
seguinte:
42
Unidade 2: Processos E Threads
Implementação de um Processo
Para implementar o modelo de processo, o Sistema Operativo mantém uma tabela chamada
tabela de processos, com uma entrada por processo. Esta entrada contém informações sobre
o estado do processo, sobre seu contador de programa, sobre o ponteiro da pilha, alocação
de memória, etc... e tudo mais sobre o processo que deve ser salvo quando o processo alterna
de um estado em execução para o estado pronto a fim de que possa ser reiniciado mais tarde
como se nunca tivesse sido interrompido.
Agendamento do Processo
O objetivo da multiprogramação é o de ter processos em execução constantemente., para
maximizar a utilização do CPU. O objetivo da partilha de tempo (time sharing) é mudar a
CPU entre os processos com tanta frequência que os utilizadores podem interagir com cada
programa enquanto estiver em execução. Para alcançar este objetivo, o agendador de
processos seleciona o processo disponível para a execução do programa no CPU. Para um
simples processador, nunca terá mais do que 1 (um) processo em execução. Neste caso, se
houver mais processos, terão que esperar até que o CPU liberte e pode ser reagendado.
Filas de Escalonamento
Enquanto os processos entram no sistema, são colocados na filas de trabalho (job queue), que
consiste em todos os processos no sistema. Os processos que se encontram na memória e
prontos a espera para serem executados são guardados em uma lista chamada de filas prontas
(ready queue). Este é geralmente armazenada como um lista ligada (linked list). Um cabeçalho
da fila pronta, contém ponteiros para as primeiras e as finais PCB (Bloco de Controle de
Processos) na lista.
Agendamento
Os processos migram-se entre as várias filas de escalonamento durante o seu tempo de vida.
O Sistema Operativo deve selecionar para o agendamento, processos a partir dessas filas de
alguma forma. O processo de seleção é realizada pelo um agendador apropriado.
43
Introdução aos Sistemas Operativos
Utilizando o comando ps
Abre a linha de comando no terminal Ubuntu e digite o comando ps.
44
Unidade 2: Processos E Threads
# ps –e
45
Introdução aos Sistemas Operativos
Sempre que uma interrupção acontece, a CPU deve entrar em um estado salvar (save) do
processo atualmente em execução, em seguida, muda para o modo kernel para lidar com a
interrupção, e depois fazer uma restauração do estado do processo interrompido. Do mesmo
modo, uma mudança de contexto ocorre quando o intervalo de tempo para um processo
expira e um novo processo é carregada a partir da fila pronta. Este será instigado por uma
interrupção do timer, o que irá fazer com que o estado do processo atual ser salvo e o novo
estado do processo ser restaurado.
Salvar e restaurar estados envolve salvar e restaurar todos os registos e contador de programa
(s), bem como os blocos de controle de processos descritos acima. Mudança de contexto
acontece muito frequentemente, e a sobrecarga de fazer a comutação apenas faz com que
CPU perde tempo, então mudanças de contexto precisa ser tão rápido quanto possível.
Alguns hardware dispõe de características especiais para acelerar isso, assim como, uma única
máquina de instrução para salvar ou restaurar todos os registos de uma só vez.
Conclusão
Nesta atividade, foram ilustrada os conceitos importantes sobre os estados e como operam
estes processos.
46
Unidade 2: Processos E Threads
Perguntas de autoavaliação
1. O que é um processo no âmbito de Sistemas Operativos?
Introdução
Nesta atividade serão apresentadas o ciclo para a criação de um processo.
Criar um processo
Processos podem criar outros processos através de chamadas de sistemas (system calls)
adequados, tais como fork ou Spawn. O processo que faz a criação é denominado o pai
(parent) do outro processo, o que é denominado o seu filho (child).
47
Introdução aos Sistemas Operativos
• Aguardar o processo filho terminar antes de prosseguir. O processo pai faz uma
chamada do sistema wait(), tanto para um processo filho específico ou para
qualquer processo filho, o que faz com que o processo pai bloquear até que a
wait() retorna. Shells UNIX normalmente espera para os seus processos filhos
completar antes de emitir uma nova alerta.
• Executados simultaneamente com o processo filho, continuaram a processar
sem esperar. Esta é a operação visto quando um Shell UNIX executa um
processo como uma tarefa de fundo. Também é possível para o processo pai
ser executado por um tempo, e depois esperar para o processo filho, que pode
ocorrer em uma espécie de uma operação de processamento paralelo.
1. Utilize os comando pstree para ver todos os processos organizados como uma
árvore.
3. Exibe um processo que tem como avô (grandparent), juntamente com ID de seu
pai e avô.
No entanto, o Sistema Operativo Windows não tem essa disposição hierárquica de processos
e todos os processo são iguais. Quando um processo, o pai, cria outro processo, o filho, o pai
será dado um sinal especial conhecido como manipulador (handler) para controlar o processo
filho. Mas esse manipulador pode ser passado para outro processo livremente o que invalida a
hierarquia.
48
Unidade 2: Processos E Threads
O trecho de código seguinte mostra um processo fork e exec para criar um processo no
sistema UNIX:
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
int main()
pid_t pid;
pid = fork();
exit(-1);
} else{
wait(NULL);
exit(0);
Compile e execute o programa acima apresentado. Quantas linhas são impressas pelo programa?
O trecho do código seguinte, ilustra o processo mais complicado para Windows, que deve
fornecer todas as informações de parâmetro para o novo processo. O createProcess () faz a
tarefa semelhante do fork() em um Sistema Operativo Windows. A diferença é que o fork() tem
o processo filho que herda o espaço de endereço (address space) do processo pai, enquanto
createProcess() requer o carregamento de um programa especificado no espaço de endereço
do processo filho na criação do processo. Além disso, o fork() nenhum parâmetro é requerido,
enquanto que createProcess() aguarda nada menos do que dez parâmetros, incluindo o
49
Introdução aos Sistemas Operativos
#include <stdio.h>
#include <windows.h>
int main(VOID){
STARTUPINFO si;
PROCESS_INFORMATION pi;
// Alocar memorias;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
zeroMemory(&pi, sizeof(pi));
if(!CreateProcess(NULL, “C:\\WINDOWS\\system32\\mspainy.exe“,
NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)){
return -1;
waitForSingleObject(pi.hProcess, INFINITE);
printf(“Filho completo“);
Closehandle(pi.hProcess);
CLoseHandle(pi.hThread);
Depois de um processo ser criado e executar as suas funções, será levado a terminar. Este
pode surgir a partir da saída normal, onde um processo termina a execução da sua declaração
final e pede ao Sistema Operativo para excluí-lo utilizando o exit() e chamadas de sistema
exit do processo em UNIX e Sistema Operativo Windows, respetivamente. Nesse ponto, o
processo pode retornar um valor de status (geralmente um número inteiro) ao seu processo
pai (através da chamada de sistema wait()). Todos os recursos do processo, incluindo memória
física e virtual, ficheiros abertos e I/0 são alocados pelo Sistema Operativo. Em alguns casos,
um processo pode encerrar devido a erros de saída, erros de saída fatal ou ser morto (killed)
por outro processo. Se o término for solicitada de outro processo, kill() para UNIX e terminar
processo() no Windows será utilizado.
50
Unidade 2: Processos E Threads
Terminar um Processo
Processos podem solicitar o seu próprio término, fazendo a chamada de sistema exit(),
geralmente retornando um int. Este int é repassada para o processo pai se está em espera,
wait(), e é tipicamente zero (0) na conclusão bem sucedida, e alguns não 0s códigos em caso
de problemas.
exit( exitCodigo );
int estado;
Para saber mais sobre o estado de saída (exit status) de um programa, pode-se utilizar macros
da biblioteca sys/wait.h que verifica o status de terminação e retorna o status de saída.
WIFEXITED (status) retorna verdadeiro (true) se o processo filho terminar normalmente, isto é,
chamando o exit(3) ou _exit (2), ou por retornar a partir da função main().
WEXITSTATUS (status) retorna o status de saída do processo filho. Este é composto por menos
de 8 bits do argumento que o processo filho especificado em uma chamada para exit(3) ou
_exit(2) ou como o argumento para uma instrução de retorno na função main(). Este só deve ser
utilizado se WIFEXITED retornar verdadeiro.
51
Introdução aos Sistemas Operativos
#include<unistd.h>
#include<stdio.h>
void main()
pid=fork();
else {
Qual o processo, filho ou o pai, imprime a declaração “Eu sou ...” na primeira linha? Porquê?
Processos dependentes são aqueles que podem afetar ou ser afetado por outros processos.
Há várias razões por que são permitidos processos dependentes:
52
Unidade 2: Processos E Threads
Conveniência - Mesmo um único utilizador pode ser multitarefas, como edição, compilação,
impressão e executar o mesmo código em janelas diferentes.
53
Introdução aos Sistemas Operativos
Processos automáticos
Processos automáticos ou em lotes (batch) são processos que não são conectados a um
terminal. Em vez disso, estas são tarefas que podem ser enfileirados em uma área de spooler,
onde esperam para ser executado com base no algoritmo FIFO (first-in, first-out). Tais tarefas
podem ser executados utilizando um dos dois critérios:
Daemons
Daemons são processos de servidor que são executados de forma contínua. Na maioria
das vezes, eles são inicializados na inicialização do sistema e aguarda em segundo plano
(background) até que seja necessário o seu serviço. Um exemplo típico é o daemon da rede,
xinetd, que é iniciado em quase todos os procedimento de inicialização. Depois que o sistema
é inicializado, o daemon da rede apenas aguarda até que um programa cliente, como um
cliente de FTP, precisa conectar-se.
54
Unidade 2: Processos E Threads
Conclusão
Nesta atividade, foram introduzidos os conceitos importantes sobre as operações com
processos. Um processo é um programa em execução que requer alguns recursos concedidos
pelo Sistema Operativo para a sua execução. Cada processo pode ser descrito pelo seus
recursos de espaço de endereço, estado de processador e Sistema Operativo. Um processo
é criado em diferentes eventos, incluindo solicitação do utilizador e inicialização do sistema.
Um processo também pode criar outro processo quando ele é simples para passar alguns
jobs para novos processos. Há diferentes tipos de processos baseados nos requisitos de cada
aplicação. Pode ser interativo, automático ou daemon.
Perguntas de autoavaliação
55
Introdução aos Sistemas Operativos
#include <stdio.h>
#include <unistd.h>
int main()
fork();
fork();
/* e outro fork */
fork() ;
return ;
Exercício 1:
56
Unidade 2: Processos E Threads
Introdução
Uma Thread é uma unidade básica de utilização da CPU, que consiste de um contador de
programa, uma pilha, e um conjunto de registos, processos tradicionais têm uma única Thread
de controle (e um ID de discussão.) - Há um contador de programa, e uma sequência de
instruções que podem ser realizadas a qualquer momento. Nesta atividade, será introduzido a
noção do Thread e descrever os APIs para Phtreads, Win32.
Em certas situações, uma única aplicação pode ser necessário para executar algumas tarefas
similares. Por exemplo um servidor aceita solicitações de uma página Web, imagens, música,
vídeo e mais pelo cliente. Um servidor Web com muitas transações ou solicitações pode ter
talvez milhares de cliente em paralelo conectados. Se o servidor Web executar um simples
processo thread, poderia ser capaz de servir somente um cliente de cada vez. O tempo que o
cliente pode ter a espera para uma resposta do pedido pode ser elevado.
Uma solução é ter o servidor em execução como uma simples processo que aceita o pedido.
Quando o servidor receber o pedido, cria-se um processo separado para servir o pedido. De
facto o método de criação de um processo foi utilizado antes do thread tornar-se popular. A
criação do processo era moroso e utilização intensivo de recursos.
Finalmente, muitos Sistemas Operativos Kernel são agora multithread. Vários Threads
operaram no kernel, e cada Thread executa uma tarefa específica, tais como a gestão de
dispositivos ou manipulação da interrupção.
Threads são muito úteis para a programação moderna sempre que um processo tem várias
tarefas a serem executadas de forma independente dos outros. Isto é particularmente
verdadeiro quando uma das tarefas podem bloquear, e é desejável para permitir que as outras
tarefas prosseguirem sem bloqueio.
57
Introdução aos Sistemas Operativos
Por exemplo, em um processador de texto, uma discussão de fundo pode verificar a ortografia
e gramática enquanto um segmento de primeiro plano processa a entrada do utilizador
(combinações de teclas), enquanto ainda um terceiro carrega imagens do disco rígido, e uma
quarta faz backups automáticos periódicos do ficheiro que está sendo editado .
Outro exemplo é um servidor Web - Múltiplos Threads permite múltiplos pedidos para serem
respondidas em simultâneo, sem ter as solicitações de serviço sequencialmente ou separar
processos para cada solicitação. O último é a forma como este tipo de coisa foi feita antes do
conceito de Threads foi desenvolvido.
Benefícios
• Receptividade – Uma Thread pode dar uma resposta rápida, enquanto outros
são bloqueados ou demorados fazendo cálculos intensivos.
• Partilha de recursos - Por padrão, Thread partilha códigos comuns,
dados e outros recursos, que permite que várias tarefas serem executadas
simultaneamente em um único espaço.
• Económico – A criação e gestão de Threads (e da mudança de contexto entre
eles) é muito mais rápido do que realizar as mesmas tarefas para processos.
• Escalabilidade, ou seja, utilização de arquiteturas de multiprocessadores - Um
único Thread só pode ser executado em uma CPU, não importa quantas podem
estar disponíveis, ao passo que a execução de uma aplicação multithread pode
ser dividida entre os processadores disponíveis.
1. Programação Multicore
Uma aplicação multithread em execução no chip de um único core teria que intercalam as
Threads, conforme mostrado na figura seguinte.
Em um chip de multicore, contudo, os Threads podem ser distribuídos entre os core (núcleo)
disponíveis, permitindo o processamento paralelo, como mostrado na figura.
58
Unidade 2: Processos E Threads
Core 1 T1 T3 T1 T3 T1 T1 T3 T1 T3 ...
Core 2 T1 T2 T4 T2 T4 T2 T2 T4 T2 ...
Tempo
Execução em paralelo
Para os Sistemas Operativos, multicore chips exigem novos algoritmos de escalonamento para
fazer melhor utilização dos vários cores disponíveis.
Como multithread se torna mais penetrante e mais importante (milhares em vez de dezenas de
Threads), CPUs foram desenvolvidos para suportar Threads simultâneas por core no hardware.
Para programadores de aplicações, existem cinco áreas onde chips multi-core apresentam
novos desafios:
Identificação de tarefas – Analisar aplicações para encontrar atividades que podem ser
realizadas simultaneamente.
Balance - Encontrar tarefas para executar simultaneamente que fornecem valor igual. Isto é,
não desperdiçar Threads em tarefas triviais.
Data splitting - Para evitar que os Threads interferem uma com a outra.
O paralelismo de dados (data parallelism) divide os dados em cima entre multicores (Threads)
e executa a mesma tarefa em cada subconjunto de dados. Por exemplo dividindo uma
imagem em partes e realizando o mesmo processamento de imagem digital em cada partes
em diferentes do core.
Tarefa em paralelo (task parallelism) divide as diferentes tarefas a serem realizadas entre os
diferentes núcleos e executa-os simultaneamente.
59
Introdução aos Sistemas Operativos
Threads do utilizador são suportados acima do kernel, sem o apoio do kernel. Estes são os
Threads que os programadores de aplicações i colocariam em seus programas.
Threads do kernel são suportados dentro do kernel do Sistema Operativo em si. Todos os
Sistema Operativo modernos suportado nível do Thread do kernel, permitindo que o kernel
execute várias tarefas simultâneas e/ou a servir várias chamadas do kernel simultaneamente.
Em uma implementação específica, os Threads do utilizador devem ser mapeados para kernel
Threads, utilizando uma das seguintes estratégias.
Modelo muitos-para-um
No modelo de muitos-para-um, muitos Threads de utilizadores são mapeados em um único
segmento do kernel. A gestão dos Threads é feita pela biblioteca de Threads no espaço do
utilizador, que é muito eficiente.
Porque um único Thread no kernel pode operar apenas em um único CPU, o modelo de
muitos-para-um não permite que processos individuais serem dividido entre várias CPUs.
Modelo um-para-um
O modelo um-para-um cria uma Thread do kernel separado para lidar com cada Thread do
utilizador.
60
Unidade 2: Processos E Threads
Modelo muitos-para-muitos
Os modelo multiplexes muitos-para-muitos, qualquer número de Threads do utilizador para
um número igual ou menor de Threads do kernel, combinam as melhores características dos
modelos de um-para-um e muitos-para-um.
Os utilizadores não têm restrições sobre o número de Threads criados. Bloqueio nas chamadas
de sistema do kernel não bloqueiam todo o processo. Os processos podem ser divididos em
vários processadores.
61
Introdução aos Sistemas Operativos
• Ocorre quando vários processos se comunicam uns com os outros, por exemplo,
com a passagem de mensagens, a fim de fornecer uma maneira de sincronizar ou
coordenar as suas diversas atividades.
• Não há nada partilhada entre processos.
• Processos estão conscientes da existência de um ao outro diretamente.
62
Unidade 2: Processos E Threads
Gestão de Thread
A função pthread_create é utilizado para criar um nova Thread, e a função pthread_exit para
terminar uma Thread.
Normalmente, quando um programa inicia-se e torna-se um processo, que inicia com uma
Thread padrão que leva à conclusão de que cada processo tem, pelo menos, uma Thread de
controlo. Um processo pode criar Threads adicionais utilizando a seguinte função:
#include <pthread.h>
63
Introdução aos Sistemas Operativos
/* Criar Thread */
#include <stdio.h>
#include <pthread.h>
void main(){
pthread_t filho;
O compilador precisa conectar este programa com ficheiro da biblioteca Pthreads. Isto pode
ser feito através da adição de -lpthread:
$ ./threads
Resultado da execução:
64
Unidade 2: Processos E Threads
65
Introdução aos Sistemas Operativos
#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
pthread_t tid[2];
int ret1,ret2;
unsigned long i = 0;
pthread_t id = pthread_self();
for(i=0; i<(0xFFFFFFFF);i++);
if(pthread_equal(id,tid[0]))
ret1 = 100;
pthread_exit(&ret1);
else
ret2 = 200;
pthread_exit(&ret2);
return NULL;
66
Unidade 2: Processos E Threads
int main(void)
int i = 0;
int err;
int *ptr[2];
while(i < 2)
if (err != 0)
else
i++;
pthread_join(tid[0], (void**)&(ptr[0]));
pthread_join(tid[1], (void**)&(ptr[1]));
return 0;
67
Introdução aos Sistemas Operativos
Para consolidar o seu conhecimento leia o capítulos apresentadas para esta unidade.
Recomenda-se a leitura dos seguintes tópicos: Biblioteca das Threads e problemas com as
Threads, em que será discutido os problemas considerados com os programas multithread.
Também, nesta atividade, serão discutidos alguns pontos importantes, como, fork(), exe() e
chamada de sistema, sinais, cancelação de Thread, entre outras, de modo que, o aluno possa
entender e aplicar as operações com Threads.
https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/3_Processes.html.
Conclusão
Nesta atividade, foi discutida os conceitos relacionados com as Threads, programação
multicore, os modelos multithread e as suas características.
Uma Thread é uma unidade básica da utilização da CPU, que consiste em um contador de
programa, uma pilha, um conjunto de registos, e um Thread ID. Um processo pode ter um
ou mais Threads que partilham os mesmos recursos como o espaço de endereços e ficheiros
abertos de um processo. Os Threads diferem dos processos porque existe uma dependência
entre Threads e também trabalham em colaboração para realizar uma tarefa, como também,
partilham os mesmos recursos. Os Threads tem também, uma similaridade com processos
como caso de possuir um ID único da Thread semelhante com PID dos processos.
68
Unidade 2: Processos E Threads
Avaliação
1. Qual é a importância da utilização de Threads?
Resumo da Unidade
Avaliação da Unidade
Verifique a sua compreensão!
Sequência de Fibonacci
69
Introdução aos Sistemas Operativos
Sistema de avaliação
Cada resposta ou ação executada com sucesso relataram 5%. O sistema de pontuação é
descrito pelo seguinte quadro:
Leituras primários
Tanenbaum, A., & Woodhull, A. (2000). Sistemas Operacionais (Vol. 2). (P. Alegre, Ed.)
Silberschartz, A. (2005). Operating System Concepts (Vol. 7). (i. Editora John Wiley / Sons, Ed.)
Leituras secundários
https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/3_Processes.html
https://sites.google.com/site/uopops/pm
https://ruby-hacking-guide.github.io/thread.html
70
Unidade 3: Gestão De Memória
Objetivos da Unidade
Após a conclusão desta unidade, deverá ser capaz de:
Termos-chave
Memória: Ponto central para as operações de um
computador moderno
71
Introdução aos Sistemas Operativos
Atividades de Aprendizagem
Esta atividade destina-se a apresentá-lo algumas das questões básicas da gestão de memória
que os programadores enfrentam no dia-a-dia.
Espaço de endereçamento
A memória é dividida em blocos com o mesmo tamanho, denominados de páginas. As
páginas têm uma dimensão que é obviamente uma potência de 2 para que toda a aritmética
que se relaciona com o seu tamanho seja simples (Marques, Ferreira, Ribeiro, Veiga, &
Rodrigues, 2009). Exemplo do endereço:
(página, deslocamento)
72
Unidade 3: Gestão De Memória
A memória é usualmente dividido em duas partes: uma parte para o Sistema Operativo e a
outra para os processos de utilizadores. O Sistema Operativo pode ser alocado tanto a nível
mais baixo como, a nível mais alto da memória.
Paginação
Isto significa que o conteúdo é copiado para o endereço da memória 1000 ou vice versa
dependo do computador. A ideia é fazer com que o programador não precise se preocupar
com a gestão de memória quando escreve um programa.
Troca (Swapping)
Com um sistema de lotes, organizar a memória em partições fixas é simples e efetivo. Cada
job é carregado em uma partição quando aproxima do inicia da fila e permanece na memória
até que termine. Um processo deve estar na memória para ser executado. No entanto um
processo pode ser colocado temporariamente fora da memória e depois trazido de volta para
a memória para execução continuada. Uma troca consiste em encaminhar cada processo no
seu todo, executá-lo temporariamente e, então, devolvê-lo novamente ao disco. A operação
de sistema de troca é ilustrada na figura 1:
73
Introdução aos Sistemas Operativos
Segmentação
Leitura: Tanenbaum, A., & Woodhull, A. (2000). Sistemas Operacionais (Vol. 2). (P. Alegre, Ed.)
Capitulo 4 (Gestão de Memória).
Silberschatz, A. (2005). Operating System Concepts (7ª ed.). (B. Zobrist, Ed.) John Wiley & Sons,
inc. Capitulo 9 (Gestão de Memória).
Outras Leituras:
74
Unidade 3: Gestão De Memória
Conclusão
É imprescindível que os alunos consciencializam sobre a importância da gerência da memória
para um bom desempenho de um computador. Nesta atividade, foi introduzida os aspetos
relevantes para entender o funcionamento da memória como parte integrante de um
computador, nomeadamente…..
Perguntas de autoavaliação
Responda as seguintes questões com base nas referências acima apresentadas.
3. Quando um processo é colocado para fora da memória, este perde sua capacidade
de utilizar o CPU (pelo menos por um tempo). Descreva outra situação em que um
processo perde a sua capacidade de utilizar o CPU.
6. Considere uma troca em disco no qual a memória consiste nos seguintes tamanhos
de lacuna pela ordem de memória: 10k, 4k, 20, 18k, 7k, 12k e 15k. Que lacuna é
tomada para sucessivas solicitações de segmento de
(a) 12k
(b) 10k
(c) 9k
no caso do algoritmo de primeiro ajuste? Agora repita a pergunta para melhor ajuste, pior
ajuste e próximo ajuste.
75
Introdução aos Sistemas Operativos
Introdução
Nesta atividade, será explorada as técnicas mais comuns para a estrutura de tabelas. Em
seguida, será apresentado um laboratório para a sincronização dos processos.
Paginação Hierárquica
Os computadores modernos suportam um grande espaço de endereço lógico. Em tal
ambiente, a própria tabela de página torna-se excessivamente grande. Por Exemplo, considere
um sistema com um espaço de endereçamento lógico de 32 bits. Se o tamanho da página de
tal sistema com 4 KB (), em seguida, uma tabela de página pode consistir em até 1 milhão de
entradas (). Assumindo que cada entrada consistem em 4 bytes, cada processo pode precisar
de até 4 MB de espaço de endereço físico para a tabela de página sozinho.
Assumindo que cada entrada consiste em 4 bytes, cada processo pode precisar mais do que
4 MB de espaço da memória física para a tabela sozinha. Claramente, pode-se não querer de
atribuir a tabela de página de forma contígua na memória principal. Uma solução é dividir a
tabela em pequenas partes.
76
Unidade 3: Gestão De Memória
Para os sistemas de 64 bits do espaço do endereço físico, esquema da paginação nível dois
não é apropriado. Para ilustrar este ponto, suponha que o tamanho da página em um sistema
é 4 KB (). Neste caso, a tabela de página consistem mais de () entradas. Se utilizar o esquema
de nível dois então a junção de tabelas pode convenientemente ser uma página longa, ou
conter 4 byte () de entrada. Veja o exemplo do endereço:
O próximo passo seria o esquema de paginação nível quatro, onde o nível dois a própria
tabela de página externa também é paginada. Para arquiteturas de 64 bit, tabelas de páginas
hierárquicos são geralmente considerados inadequados. Por exemplo, o 64 bit UltraSPARC
pode requerer sete níveis de paginação.
77
Introdução aos Sistemas Operativos
Silberschatz, A. (2005). Operating System Concepts (7ª ed.). (B. Zobrist, Ed.) John Wiley & Sons,
inc. Capitulo 9 (Gestão de Memória).
Outras leituras:
Conclusão
Tendo em vista os aspetos observados, nota-se que o fator determinante do método utilizado
em um sistema particular é um hardware. Para a melhor compreensão das atividades proposta
para esta unidade, recomenda-se a leitura de cada referências antes citadas, com vista a
responder as perguntas de auto avaliação.
Perguntas de autoavaliação
Responda as seguintes questões com base nas referências acima apresentadas.
1. A maioria dos sistemas permitem os programas atribuem mais memórias para seu
espaço de endereço durante a sua execução. Dados alocados nos segmentos heap
do programa é um exemplo de uma memória atribuída. O que é necessário para
suportar alocação dinâmica de memória nos seguintes esquemas?
b. Segmento pura
c. Paginação pura
78
Unidade 3: Gestão De Memória
Conclusão
Conclui-se que, até o final desta atividade de laboratório o aluno estará familiarizado com
a função fork e também terá uma compreensão clara da função wait como um meio para
sincronizar o execução de um processo pai e filho.,
79
Introdução aos Sistemas Operativos
Alocação da Memória
Os algoritmos de alocação de memória decidem, dada a memória livre, onde colocar um
bloco de memória de uma determinada dimensão. Os Sistemas Operativos tem a necessidade
de utilizar estes algoritmos em diversas situações:
Alocação de segmentos
A alocação de segmentos é mais complicada do que a alocação de páginas, porque introduz
o problema da dimensão variável do segmento e da necessidade de encontrar um bloco com
a dimensão suficiente para satisfazer o pedido. Este aspeto é idêntico ao que se passa nos
sistemas com partições variáveis.
80
Unidade 3: Gestão De Memória
1) Best Fit
Este algoritmo pesquisa a lista à procura do bloco cuja dimensão seja a mais próxima da
dimensão pedida. Este método segue o raciocínio intuitivo de atribuir ao pedido o bloco que
mais se lhe aproxima.
2) Worst Fit
Este algoritmo pesquisa a lista à procura do maior bloco livre. A ideia pode parecer paradoxal,
mas tem por objetivo permitir que o fragmento resultante seja ainda suficientemente grande
para poder satisfazer outros pedidos.
3) First Fit
O algoritmo First Fit pesquisa a lista por ordem crescente ou decrescente de endereços e
escolhe o primeiro bloco livre com dimensão suficiente para satisfazer o pedido.
4) Next Fit
O Next Fit é um First Fit modificado, em que a pesquisa do bloco livre começa no ponto onde
terminou a pesquisa anterior, em vez de ser sempre no início da lista.
5) Buddy
Substituição de páginas
Os algoritmos de substituição de páginas são importantes no caso da memória paginada. Os
programas executados em um determinado momento geralmente tem a dimensão superior à
memória física do computador.
Uma boa aproximação do algoritmo óptimo é escolher a página que não seja acedida há
mais tempo, pois, pela localidade de referência, é aceitável pensar que há uma reduzida
probabilidade de ser acedida nos instantes seguintes.
Um outro método bastante utilizado e que resulta de uma simplificação do LRU é escolher
uma página que não tenha sido acedida recentemente.
2) FIFO
O algoritmo FIFO escolhe a página que esteja carregada há mais tempo em memória primária.
Para o realizar mantem-se uma fila com as várias páginas em memória. Quando uma página é
colocada na memória primária é inserida no fim da lista, quando se necessita de uma página
retira-se a primeira lista.
81
Introdução aos Sistemas Operativos
3) Clock
4) Espaço de trabalho
Em relação a todos os métodos anteriores pode –se colocar uma questão: o conjunto de
páginas a analisar deve ser o conjunto global das páginas físicas ou só páginas do processo
onde ocorreu a falta de página? Define-se o espaço do trabalho de um processo num
determinado intervalo de tempo como sendo o conjunto de páginas acedidas pelo processo
nesse intervalo de tempo.
Conclusão
Os algoritmos de gestão de memória determinam as decisões tomadas pelo Sistema
Operativo no que toca a alocação, transferência e substituição de blocos na memória. Nesta
atividade, introduziu-se os conceitos relacionados com a arquitetura da memória e com este
influencia no desempenho de cada algoritmo supra apresentados.
Resumo da Unidade
Em virtude do que foi apresentado nesta unidade, é desejável que sejas capaz de executar
um processo cujo espaço de endereço lógico é maior do que o espaço de endereço físico
disponível. A memória virt l permite-nos executar grandes processos e aumentar a memória
física que realmente dispomos. A maioria de Sistemas Operativos oferecem caraterística
mapear ficheiros na memória. O processo Kernel tipicamente requere que a memória seja
atribuído utilizando paginas que são fisicamente contíguos.
Esta unidade, permitirá aos alunos consolidarem o seu entendimento no que concerne a
gestão memória e como os processos operam na gestão de memória.
82
Unidade 3: Gestão De Memória
Avaliação da Unidade
Verifique a sua compreensão!
Laboratório Linux/Unix
Ls –laR
touch main.c
mkdir src
cp main.c src/
Escreva um programa em C que recebe o nome de ficheiro como parâmetro duma linha
de comandos e executa os comandos um depois do outro.
Sistema de avaliação
Cada resposta ou ação executada com sucesso correto relataram 5%. O sistema de pontuação
é descrito pelo seguinte quadro:
83
Introdução aos Sistemas Operativos
Leituras primárias
Andrew S., T., & Albert S., W. (2000). Sistemas Operacionais (2nd Edition ed.). Porto Alegre.
Marques, J. A., Ferreira, P., Ribeiro, C., Veiga, L., & Rodrigues, R. (2009). Sistemas Operativos.
FCA.
Silberschatz, A. (2005). Operating System Concepts (7ª ed.). (B. Zobrist, Ed.) John Wiley & Sons,
inc.
Leituras secundárias:
4. WayBackMachine, https://web.archive.org/web/20151117104721/http://www.
techsupportalert.com/content/32-bit-and-64-bit-explained.htm, acedido em 23
de Fevereiro de 2016
84
Unidade 4: Sistemas De Ficheiros
Objetivos da Unidade
Após a conclusão desta unidade, deverá ser capaz de:
Termos-chave
Ficheiro: O ficheiro é nomeado como uma coleção de
informações relacionadas que é gravado num dispositivo
armazenamento secundário.
85
Introdução aos Sistemas Operativos
Actividades de Aprendizagem
Introdução
Os computadores podem armazenar informações sobre diferente tipos de mídia para
armazenamento, como discos magnéticos, fitas magnéticas e discos ópticos. De modo que
o sistema de computador será conveniente de utilizar, o sistema operativo fornece uma visão
lógica uniforme de armazenamento de informações. O sistema operativo resume-se a partir
das propriedades físicas dos seus dispositivos de armazenamentos para definir uma unidade
lógica, o ficheiro. Os ficheiros são mapeados pelo sistema operativo para dispositivos físicos.
Estes dispositivos de armazenamento são geralmente não volátil, para que o conteúdo sejam
persistentes através de falhas de energia e reinicialização do sistema.
O ficheiro é nomeado como uma coleção de informações relacionadas que é gravado num
dispositivo armazenamento secundário. Do ponto de vista de um utilizador, um ficheiro é uma
cota menor de armazenamento lógica secundário, ou seja, os dados não podem ser gravados
para o armazenamento secundário a menos que eles estão dentro de um ficheiro.
Atributos de um Ficheiro
Um ficheiro é chamado, para a conveniência dos seus utilizadores e é referido pelo seu nome.
Um nome é normalmente uma sequência de caracteres, como main.c. Quando um ficheiro é
nomeado, torna-se independente do processo, do utilizador, e mesmo do sistema que a criou.
Em geral, os atributos de um ficheiro variam de um Sistema Operativo para outro.
86
Unidade 4: Sistemas De Ficheiros
• Criar um ficheiro – dois passos são necessários para criar um ficheiro. Primeiro,
espaço no sistema de ficheiro tem que ser encontrado para o ficheiro e, segundo,
uma entrada para o novo ficheiro deve ser feito no diretório.
• Escrever um ficheiro – Para escrever um ficheiro, deve fazer uma chamado de
sistema especificando o nome do ficheiro e a informação que deve ser escrita.
• Ler um ficheiro – para ler a partir de um ficheiro, utiliza-se uma chamada de
sistema que especifica o nome do ficheiro e onde o próximo bloco do ficheiro
deve ser colocado.
• Reposição de um ficheiro – o diretório é procurado para a entrada apropriada, e
a posição atual do ficheiro apontador é reposicionado para um dado valor.
• Eliminar um ficheiro - para eliminar um ficheiro, procura-se o diretório para o
ficheiro nomeado.
• Truncating um ficheiro – talvez o utilizar queira eliminar um conteúdo do ficheiro
mas guardar os seus atributos.
Tipos de Ficheiros
Quando implementamos um ficheiro de sistema, certamente todo o Sistema Operativo,
considera-se que, ou o SO pode reconhecer e suportar o tipo de ficheiro. Veja alguns
exemplos de tipos de ficheiros na tabela seguinte:
87
Introdução aos Sistemas Operativos
Silberschatz, A. (2005). Operating System Concepts (7ª ed.). (B. Zobrist, Ed.) John Wiley & Sons,
inc. Capitulo 10 (Gestão de Memória).
Outras leituras:
<http://www.cs.ucsb.edu/~rich/class/cs170/notes/FileSystem/index.html>, acedido em 26 de
Dezembro de 2016
Conclusão
Todas as aplicações de um computador armazenam informações, isto é, enquanto o processo
é executado, este poderá armazenador grandes quantidades de informação dentro do seu
espaço e endereço, o que as vezes nem sempre é possível. Nesta atividade, foi abordado
os conceitos sobre os ficheiros, tipos e a operações efetuadas. Recomenda-se, para esta
atividade as leituras dos seguintes capítulos apresentado na lista de leitura recomendado.
Pergunta de autoavaliação
88
Unidade 4: Sistemas De Ficheiros
Introdução
Os ficheiros guardam informações. Quando é utilizado, esta informação deve ser acedida e
lida em uma memória de computador. A informação no ficheiro pode ser acedida em várias
formas. Alguns sistemas oferece um único método de acesso para ficheiros. Outros, tal com
a IBM, suporta muitos métodos de acesso, e escolhe o mais correto para uma aplicação em
particular.
Acesso sequencial
O método de acesso mais simples é acesso sequencial. A informação no ficheiro é processado
em ordem, um de cada vez. Este modo de acesso é a mais comum, como o exemplo de
editores e compiladores.
Acesso Direto
Um outro método é o acesso direto. Um ficheiro é criado com um tamanho fixo, com relatórios
lógicos que permite os programa ler e escrever rapidamente em uma ordem particular. O
método de acesso direto é baseado em um modelo de disco de ficheiro, desde de que os
discos permitem o acesso randomizado a qualquer bloco de ficheiro.
Estrutura do Diretório
Até este ponto foram discutido um ficheiro de sistema, Na realidade um sistema pode ter 0
ou mais ficheiros de sistema, e o ficheiro de sistema pode variar para tipos diferentes. Por
exemplo, o sistema típico Solaris talvez tenha um pouco UFS ficheiro de sistema, um VFS, e
alguns NFS.
89
Introdução aos Sistemas Operativos
Silberschatz, A. (2005). Operating System Concepts (7ª ed.). (B. Zobrist, Ed.) John Wiley & Sons,
inc. Capitulo 10 (Gestão de Memória).
Outras leituras:
<http://www.cs.ucsb.edu/~rich/class/cs170/notes/FileSystem/index.html>, acedido em 26 de
Dezembro de 2016
90
Unidade 4: Sistemas De Ficheiros
Conclusão
Quando visto de fora, um sistema de ficheiro é uma coleção de ficheiros e de diretórios, mais
as operações sobre os mesmo. Por isso é crucial entender os métodos de acesso aos sistemas
de ficheiros e a sua estrutura para assim poder operar sobre o mesmo.
Pergunta de autoavaliação
a) Sequêncial
b) Randomizado
5. O espaço livre em disco pode ser monitorizado utilizando uma lista de blocos
livres ou um mapa de bits. Os endereços de disco requerem D bits. Para um
disco com B blocos, F dos quais estão livres, declare a condição sob qual a lista
de livres utiliza menos espaço que o mapa de bits. Para D tendo o valor de 16
bits, expresse a sua resposta como percentagem do espaço em disco.
91
Introdução aos Sistemas Operativos
Introdução
Objetivos de aprendizagem: nesta atividade de laboratório, o aluno aprenderá a diferença
entre ficheiros texto e ficheiros binários.
Conclusão
Nesta atividade, o aluno aplicou os conhecimento aprendidos para operar com o texto e
ficheiros binários.
Resumo da Unidade
Os ficheiros são um dos objetos mais valiosos manipulados pelo Sistema Operativo. Esta
unidade, permitirá os alunos a desenvolverem as suas habilidades de manipular de ficheiros
que é o core de um Sistema Operativo. Nesta unidade com base nos capítulos dos livros
recomendados para a leitura, foi discutido vários métodos para armazenar informações no
armazenamento secundário.
92
Unidade 4: Sistemas De Ficheiros
Avaliação da Unidade
Verifique a sua compreensão!
Considere um ficheiro que consiste em 100 blocos. Suponha que o bloco de controle do
ficheiro já está na memória. Calcule quantas operações de disco I/O são necessárias para
estratégias de alocação contíguos, ligados, e indexado (nível individual), se, por um bloco,
as seguintes condições é estabelecida. No caso alocação contígua, suponha que não há
espaço para aumentar no início, mas há espaço para aumentar no final. Assume que o
bloco de informação a ser adicionada é armazenado na memória.
Sistema de avaliação
Cada resposta ou ação executada com sucesso correto relataram 5%. O sistema de pontuação
é descrito pelo seguinte quadro:
93
Introdução aos Sistemas Operativos
2. Tanenbaum, A., & Woodhull, A. (2000). Sistemas Operacionais (Vol. 2). (P. Alegre,
Ed.) Capitulo 5 (Gestão de Memória).
3. Silberschatz, A. (2005). Operating System Concepts (7ª ed.). (B. Zobrist, Ed.) John
Wiley & Sons, inc. Capitulo 10 (Gestão de Memória).
6. Outras leituras:
7. <http://www.cs.ucsb.edu/~rich/class/cs170/notes/FileSystem/index.html>, acedido
em 26 de Dezembro de 2016
94
Unidade 4: Sistemas De Ficheiros
95
Sede da Universidade Virtual africana
PO Box 25405-00603
Nairobi, Kenya
contact@avu.org
oer@avu.org
bureauregional@avu.org
2017 UVA