Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Sistemas Operacionais: Algoritmos de Escalonamento de Processos e Gerenciamento de Memória, Resumos de Sistemas Operacionais

Este documento aborda diversos algoritmos de escalonamento de processos e gerenciamento de memória em sistemas operacionais. O texto discute sobre o processo filho e sua hierarquia, grupos de processos, interrupções e seus efeitos nas comutações de processos, algoritmos de escalonamento como shortest remaining time next, three-level scheduling, fair-share scheduling, e multiple queues. Além disso, o texto trata de tarefas, semáforos, memória virtual, páginas e suas substituições, e espaços de instruções e dados separados.

Tipologia: Resumos

2022

Compartilhado em 15/06/2022

tiago-pedro
tiago-pedro 🇵🇹

2 documentos

1 / 38

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Resumo – Sistemas Operativos 1/38 João Marques
Resumo – Sistemas Operativos
Tema 1 – INTRODUÇÃO
função SO: gerir componentes e usá-los de forma correcta; providenciar interface simples para HW
SO conjunto de programas que permitem uma interacção simplificada entre o utilizador e a
máquina
SO porção do SW k funciona em modo núcleo (MN); ex. liberdade para modificar compilador,
mas não para modificar Clock Interrupt Handler; ex. gerir passwords (MU) → ajudam SO
1.1. O que é um Sistema Operativo?
Máquina virtual: Dar ao utilizador a ilusão de dispor de uma máquina muito mais fácil de utilizar e
programar do que o hardware.
Gestor de recursos: Efectuar a gestão dos diversos componentes da arquitectura de um
computador, impondo ordem na atribuição de recursos aos programas. Tirar máximo partido dos
recursos disponíveis (Tempo de CPU, memória, etc) ; time multiplexing turnos ; space
multiplexing cada um fica com parte dos recursos
1.2. História dos Sistemas Operativos
1º computador Charles Babbage (1792-1871) realizou k precisaria de SW Ada Lovelace
1ª programadora linguagem Ada
1) Primeira geração (1945-1955): Válvulas e relés mecânicos
computadores k enchiam salas inteiras
+ de 20000 válvulas
ligar plugboard ao computador
cálculos numéricos, tabelas, etc
2) Segunda geração (1955-1965): transistores, sistemas por batchs
programador traz card para IBM 1401 1401 grava card em tape operador leva tape para
IBM 7094 7094 faz computação operador leva tape para 1401 1401 imprime output
3) Terçeira geração (1965-1980): ICs e multiprogramação
System/360 computador k daria para fazer as 2 coisas 1º a usar ICs + potente
SO do 360 demasiado complexo
Multiprogramação: dividir memória em várias partições enquanto um trabalho espera por
I/O, outro pode ser processado CPU ocupado quase 100% do tempo
Spooling: ler trabalhos das cards para o disco assim k eles chegam (1401 desnecessário)
tempo de resposta enorme pequenos bugs dificéis de corrigir timesharing variante da
multiprogramação computador fornece serviço interactivo rápido para quem precisa com
mais urgência
MULTICS poder computacional através de tomadas (tipo energia eléctrica)
Minicomputadores série PDP
UNIX desenvolvido a partir de um minicomputador por um trabalhador da MULTICS
4) Quarta geração (1980-presente): Computadores pessoais
LSI circuits chips com milhares de transistores num cm
2
era dos PCs (microcomputadores)
muito barato abre a possibilidade de toda a gente comprar um PC
1974 Intel 8080 precisava SO Garz Kildall CP/M K. pediu direitos e formou
Digital Research
1980s IBM IBM PC precisava SO Bill Gates DOS MS-DOS
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26

Pré-visualização parcial do texto

Baixe Sistemas Operacionais: Algoritmos de Escalonamento de Processos e Gerenciamento de Memória e outras Resumos em PDF para Sistemas Operacionais, somente na Docsity!

Resumo – Sistemas Operativos

Tema 1 – INTRODUÇÃO

  • função SO: gerir componentes e usá-los de forma correcta; providenciar interface simples para HW
  • SO  conjunto de programas que permitem uma interacção simplificada entre o utilizador e a máquina
  • SO  porção do SW k funciona em modo núcleo (MN); ex. liberdade para modificar compilador, mas não para modificar Clock Interrupt Handler; ex. gerir passwords (MU) → ajudam SO

1.1. O que é um Sistema Operativo?

  • Máquina virtual : Dar ao utilizador a ilusão de dispor de uma máquina muito mais fácil de utilizar e programar do que o hardware.
  • Gestor de recursos : Efectuar a gestão dos diversos componentes da arquitectura de um computador, impondo ordem na atribuição de recursos aos programas. Tirar máximo partido dos recursos disponíveis (Tempo de CPU, memória, etc) ; time multiplexing  turnos ; space multiplexing  cada um fica com parte dos recursos

1.2. História dos Sistemas Operativos  1º computador  Charles Babbage (1792-1871)  realizou k precisaria de SW  Ada Lovelace  1ª programadora  linguagem Ada 1) Primeira geração (1945-1955): Válvulas e relés mecânicos

  • computadores k enchiam salas inteiras
    • de 20000 válvulas
  • ligar plugboard ao computador
  • cálculos numéricos, tabelas, etc 2) Segunda geração (1955-1965): transistores, sistemas por batchs
  • programador traz card para IBM 1401  1401 grava card em tape  operador leva tape para IBM 7094  7094 faz computação  operador leva tape para 1401  1401 imprime output 3) Terçeira geração (1965-1980): ICs e multiprogramação
  • System/360  computador k daria para fazer as 2 coisas  1º a usar ICs  + potente
  • SO do 360 demasiado complexo
  • Multiprogramação : dividir memória em várias partições  enquanto um trabalho espera por I/O, outro pode ser processado  CPU ocupado quase 100% do tempo
  • Spooling : ler trabalhos das cards para o disco assim k eles chegam (1401 desnecessário)
  • tempo de resposta enorme  pequenos bugs dificéis de corrigir  timesharing  variante da multiprogramação  computador fornece serviço interactivo rápido para quem precisa com mais urgência
  • MULTICS  poder computacional através de tomadas (tipo energia eléctrica)
  • Minicomputadores  série PDP
  • UNIX desenvolvido a partir de um minicomputador por um trabalhador da MULTICS 4) Quarta geração (1980-presente): Computadores pessoais
  • LSI circuits  chips com milhares de transistores num cm^2  era dos PCs (microcomputadores)  muito barato  abre a possibilidade de toda a gente comprar um PC
  • 1974  Intel  8080  precisava SO  Garz Kildall  CP/M  K. pediu direitos e formou Digital Research
  • 1980s  IBM  IBM PC  precisava SO  Bill Gates  DOS  MS-DOS
  • Gates vende SO a fabricantes MAS Kildall vende SO a utilizadores finais
  • invenção do GUI
  • Steve Jobs  computador Apple  Apple com GUI  Lisa (fracasso)  Macintosh (sucesso)  Mac + user friendly e + barato k Lisa
  • Microsoft  SO com GUI  Windows  funcionava sobre o MS-DOS  Win95 freestanding (SO)  Win98 (16 bits)  Win NT  32 bits  WinNT5 = Win2000  WinMe
  • UNIX  Linux  GUI = X Windows
  • Network OS  existência de múltiplos computadores k se podem ligar uns aos outros e partilhar ficheiros
  • Distributed OS  OS k gere vários processadores  Ontogeny recapitulates Phytogeny  cada nova espécie passa pelo desenvolvimento de todos os antecessores

**1.3. A Diversidade de Sistemas Operativos (OS Zoo)

  1. SO de Mainframes** : processar vários trabalhos simultâneamente; número considerável de I/O 2) SO de Servidores : funcionam em servidores; servem muitos utilizadores ao mesmo tempo; permitem partilha de recursos de HW e SW 3) SO de Sistemas Multiprocessador : gerem vários processadores em termos de escalonamento, etc 4) SO de Computadores Pessoais: providenciar interface amigável ao utilizador; Windows, MacOS, Linux, etc 5) SO de Tempo-Real : cumprir metas de tempo; gerir evente k TÊM de ocorrer em determinado momento → hard real-time system; falhar meta pode ser aceitável  soft real-time system (áudio digital, sistemas multimédia) 6) SO Embebidos : PDAs, SO de aparelhos k não são computadores (TV, micro-ondas, télémoveis, etc); PalmOS, Windows CE (Consumer Electronics) 7) SO de Smart Card : cartões de crédito; uma única função: pagamentos; orientados a Java

**1.4. Revisão do Hardware dos Computadores

  1. Processadores**
  • Processador (CPU) : Elemento activo do sistema que executa processos. Obtém instruções da memória, descodifica-as e executa-as.
  • multiprogramação  gurdar registos para posterior reutilização
  • pipeline : fetch, decode, execute separados
  • superscalar CPU : fetch, decode → holding buffer → execute
  • Modo núcleo (Kernel Mode) : Modo privilegiado do processador, para o qual todas as instruções estão disponíveis. Só o Sistema Operativo é que tem acesso a este modo.
  • Modo utilizador (User Mode) : Disponível um subconjunto das instruções do CPU. É neste modo que correm as aplicações.
  • chamada ao sistema (system call) : mecanismo usado para requisitar um serviço do modo núcleo do SO 2) Memória
  • Hierarquia da memória ― Registos: tão rápidos qto a CPU ― Cache ― Memória Principal: RAM ― Discos Magnéticos: + barato; lento; aparelho mecânico ― Tapes Magnéticas: baratíssimo, pode-se remover; usado para backups
  • Comunicação entre processos (ver Tema 2) 2) Impasses (Impasses)
  • Impasse : situação em k 2 processos estão bloqueados pk cada um espera por algo k o outro já tem 3) Gestão de Memória
  • memória pode conter vários programas ao mesmo tempo  gestão e protecção
  • memória virtual (ver Tema 3) 4) Input/Output
  • I/O gerido pelo SO (ver Tema 5) 5) Ficheiros (Sistemas de Ficheiros)
  • Ficheiros  modelo abstracto do disco
  • Directoria  forma de agrupar ficheiros
  • Sistema de Ficheiros  hierarquia
  • Outros conceitos: path name, root directory, working directory, mounted file system, block special files, character special files, pipe (ver Tema 4) 6) Segurança
  • Exemplo: rwxr-x--x  Owner / Other Group Members / Everyone else (directory x search) 7) Shell  esta parte tem k ser treinada no Ubuntu
  • SO pode ser visto como um código que executa as chamadas ao sistema;
  • Interpretador de comandos, apesar de não ser parte do sistema operacional, faz uso das chamadas
  • ao sistema para interfacear o usuário e o SO
  • Exemplo: dir, ls, clear, cls. 8) Reciclagem de Conceitos
  • Exemplo: “contiguously allocated files” em CD-ROMs

1.6. Chamadas ao Sistema (System Calls)

  • Uma chamada ao sistema (system call) é o mecanismo usado pelo programa para requisitar um serviço do SO, ou mais especificamente, do modo núcleo do SO.
  • Fazer uma chamada ao SO é como realizar uma chamada a um procedimento, contudo chamadas ao sistema são executadas em MN e chamadas a procedimentos em MU
  • Chamadas ao Sistema para Gestão de Processos : fork, waitpid, execve, exit
  • Chamadas ao Sistema para Gestão de Ficheiros : open, close, read, write, lseek, stat
  • Chamadas ao Sistema para Gestão de Directorias : mkdir, rmdir, link, unlink, mount, unmount
  • Chamadas ao Sistema Diversas : chdir, chmod, kill, time

**1.7. Estrutura de um Sistema Operativo

  1. Sistemas Monolíticos**
  • exemplo mais comum de SO, no qual aparentemente não existe estrutura
  • qualquer função do SO pode comunicar com qualquer uma das outras 2) Sistemas em Camadas (Layered Systems)
  • SO estruturado segundo um conjunto de camadas funcionais
  • cada camada utiliza serviços de camadas que lhe são interiores
  • cada camada é uma máquina virtual com uma interface bem definida
  • camada mais baixa (gestão de processos) corresponde ao núcleo do sistema operativo
  • Camadas ― Camada 0: Gestão de Processos

― Camada 1: Gestão de Memória ― Camada 2: Comunicação Operador-Processo ― Camada 3: Gestão de Input/Output ― Camada 4: Programas do Utilizador ― Camada 5: Operador 3) Máquinas Virtuais

  • máquina implementada através de SW que executa programas como um computador real
  • cópia isolada, e totalmente protegida, de um sistema físico
  • computador fictício criado por um programa de simulação
  • cada processo recebe uma cópia exacta do computador actual 4) Exokernel
  • cada utilizador recebe um clone exacto do computador actual
  • VM1: blocos 0-1023; VM2: blocos 1024-2047; etc
  • exokernel  organiza recursos das várias VM e impede-as de interferir umas com as outras
  • cada VM acha k tem o seu próprio disco 5) Modelo Cliente-Servidor
  • mover código para camadas superiores
  • retirar o máximo de código do núcleo (kernel) deixando um microkernel
  • implementar maioria do SO em processos
  • processo cliente comunica com processo servidor através de mensagens k passam pelo núcleo
  • SO encontra-se organizado segundo módulos à volta de um núcleo (kernel)
  • núcleo geralmente pequeno (Micro-kernel), comunicando com o hardware e estabelecendo a comunicação entre os diversos módulos
  • processo cliente e de processo servidor correm em modo utilizador
  • facilmente adaptável a sistemas distribuídos ; estrutura mais estável (teoricamente...)

Tema 2 – PROCESSOS, TAREFAS E IMPASSES

2.1. Processos

2.1.1. O Modelo de Processo

  • Processo : Entidade activa, que corresponde a um programa em execução. Cada processo tem um espaço de endereçamento próprio. A gestão de processos é da responsabilidade do sistema operativo, que utiliza estruturas de dados (process tables) que descrevem o contexto de execução de cada processo. O próprio sistema operativo é também um conjunto de vários processos.
  • Programa : Sequência de instruções sem actividade própria (não confundir com processo)
  • Multi-programação: Num sistema multi-programado, mesmo que só exista um processador é possível vários processos estarem activos simultaneamente. Contudo, em cada instante temporal, apenas um deles pode utilizar o processador. A esta ilusão de vários processos correrem aparentemente em paralelo, dá-se o nome de pseudo-paralelismo. Não devem ser feitas assunções em relação à ordem de comutação do processador, devido a: Existência de interrupções, Falta de recursos, Entrada de processos prioritários. Depois de uma comutação do processador, o próximo processo a utilizá-lo é escolhido pelo sequenciador de processos do SO. Os vários processos “competem” entre si pela atenção do processador. Mas também podem trabalhar em conjunto para a realização de tarefas mais complexas. Esta cooperação exige ao SO a existência de mecanismos de sincronização e comunicação entre processos.
  1. controlo devolvido ao procedimento em assembly
  2. procedimento em assembly inicia novo processo

2.1.7. Escalonamento

2.1.7.1. Introdução ao Escalonamento  Quando ocorre uma comutação de processos, o escalonador (scheduler) escolhe um processo para o qual se atribui a CPU  A escolha é feita de acordo com um dado algoritmo de escalonamento  Após a escolha do sequenciador, o despachante (dispatcher) encarrega-se de colocar o processo em execução.  timesharing trouxe complexidade aos algoritmos de escalonamento  Comportamento dos Processos → impulso de computação (CPU burst)  CPU é utilizado → impulso de I/O (I/O burst)  espera-se por resposta de dispositivo externo → processos de computação (compute-bound)  impulsos de computação longos → processos de I/O (I/O-bound)  impulsos de computação curtos  prioritários  Quando escalonar? → quando um processo é criado  lançar pai ou filho → quando um processo termina  escolher outro → quando um processo bloqueia  devia considerar-se razão do bloqueio, mas escolanador burro → quando ocorre uma interrupção I/O  considerar processo k esperava pelo I/O → algoritmos de escalonamento não-preemptivos  deixam funcionar processo até k bloqueie → algoritmos de escalonamento preemptivos  deixam funcionar durante um tempo máximo  interrupção do relógio (clock interrupt)  Categorias de Algoritmos de Escalonamento (dependem do tipo de sistema)

  1. Sistema batch  utilizador à espera → alg. não-preemptivos → aumento do desempenho
  2. Sistema interactivo  preempção é essencial
  3. Sistema em tempo real  preempção nem sempre é necessária → processos rápidos  Objectivos dos Algoritmos de Escalonamento
  • Todos os Sistemas → Justiça  garantir que todos os processos terão direito a tempo de CPU → Prioridades  dar maior tempo de CPU aos processos com maior importância → Equilíbrio  manter os recursos do sistema com uma taxa de ocupação equilibrada
  • Sistemas Batch → Throughput  maximizar o número de trabalhos por hora → Turnaround time  minimizar tempo entre submissão e terminação → Utilização da CPU  manter CPU sempre ocupada
  • Sistemas Interactivos → Tempo de Resposta  deve ser curto (interacção) → Proporcionalidade  responder às expectativas dos utilizadores (ex. ligar/desligar Internet)
  • Sistemas em Tempo-Real → Cumprir metas (deadlines)  evitar perda de dados → Previsibilidade  um mesmo programa deve ser correctamente executado, independentemente da carga do sistema (Sistemas Multimédia)

2.1.7.2. Escalonamento em Sistemas Batch  First-Come First-Served

  • alg. não preemptivo; tem uma fila de espera
  • em caso de bloqueio, processo colocado no fim da fila
  • Vantagem: simples, justo
  • Desvantagem: processos de computação demoram muito tempo a concluir  Shortest Job First
  • Vantagem: diminui turnaround time  Shortest Remaining Time Next
  • Vantagem: trabalhos novos e curtos são tratados rapidamente  Three-Level Scheduling
  • admission scheduler  selecção de uma mistura de processos de computação e de I/O; admitir trabalhos curtos primeiro
  • memory scheduler  espaço insuficiente → trabalho enviado para disco
  • grau de multiprogramação: quantidade de processos em memória
  • CPU scheduler  escolhe um processo para usar a CPU

2.1.7.3. Escalonamento em Sistemas Interactivos  Round-Robin Scheduling

  • a cada processo é atribuído o seu quantum → alg. preemptivo
  • quantum : intervalo de tempo em k um processo é autorizado a funcionar
  • quantum usado ou processo bloqueado  processo colocando no fim da fila
  • ideia implícita → todos os processos têm a mesma importância
  • Desvantagens: ― quantums curtos → muitas comutações → desperdÍçio da CPU ― quantums longos → poucas comutações → tempo de resposta longo
  • Solução: quantum > impulso de CPU → preempção raramente acontece  eliminação da preempção → comutações acontecem “apenas” quando são necessárias  Priority Scheduling
  • existe prioridade
  • evitar monopolização por parte dos processos de alta prioridade  diminui-se as suas prioridades a cada interrupção do relógio OU atribui-se um quantum máximo
  • alg. k beneficia processos de I/O  prioridade = (^) 〳⡩, onde f é a fracção do último quantum k um processo usou
  • agrupar em classes de prioridade e usar Round-Robin dentro de cada classe → prioridades baixas são tratadas quando prioridades altas estão vazias  Multiple Queues
  • divisão em classes
  • classe N → N quantums
  • processo gasta quantum todos → movido para classe seguinte  Shortest Process Next
  • não se conhece o tempo de cada processo  estimativas  comportamentos anteriores  Guaranteed Scheduling
  • N processos → cada um recebe 1/N dos ciclos da CPU  funciona com rácios  Lottery Scheduling
  • distruição de bilhetes de lotaria

2.2.2. Utilização de Tarefas

  • Razões principais da existência de tarefas ― Decomposição de uma aplicação em várias tarefas que se executam quase simultâneamente ― Facilidade de criação e destruição das tarefas ― Divisão em tarefas de computação (CPU-bound) e tarefas de I/O (I/O-bound)
  • Exemplos de utilização de tarefas:  Processador de texto  podem existir tarefas para: ― Ler input do teclado ― Reformatar o documento ― Salvar o documento automaticamente, etc.  Web Server  dois tipos de tarefas ― “dispatcher”  sempre que chega um pedido de página, a tarefa “dispatcher” lança uma tarefa “worker” ― “worker”  procura a página pedida na cache de páginas, caso não a encontre, terá que ir buscá-la ao disco
  • Formas de construir um servidor: ― Threads  Parallelism, blocking system calls ― Single-threaded process  No parallelism, blocking system calls ― Finite-state machine  Parallelism, nonblocking system calls, interrupts

2.2.3. Implementar Tarefas no Espaço do Utilizador

  • gerir as tarefas em MU
  • núcleo não sabe da existência das tarefas
  • geridas pelos procedimentos thread_create,exit,wait,yield,etc.
  • cada processo tem a sua própria tabela de tarefas (thread table)
  • Vantagens: ― podem-se usar tarefas num SO k não suporta tarefas ― comutação de tarefas muito rápida ― cada processo tem o seu próprio algoritmo de escalonamento
  • Desvantagens: ― chamadas de bloqueio podem interferir e bloquear outras tarefas ― quando ocorre uma falta de página (page fault), o processo é bloqueado apesar de outras tarefas ainda poderem funcionar ― como as interrupções não têm influência no escalonamento de tarefas, uma tarefa pode trabalhar indefinidamente se não usar thread_yield ― programadores querem tarefas que fiquem bloqueadas com frequência

2.2.4. Implementar Tarefas no Núcleo

  • núcleo gere tarefas
  • tabela de tarefas única situada no núcleo
  • criação/destruição de tarefas  chamada ao núcleo  núcleo actualiza tabela de tarefas
  • chamadas de bloqueio de tarefas  chamadas ao sistema
  • qdo 1 tarefa bloqueia, núcleo escolhe outra (do mesmo ou de outro processo)
  • alto custo de criação/destruição de tarefas  reciclagem de tarefas  desactivada → reactivada

2.2.5. Implementações Híbridas

  • objectivo  reunir vantagens das tarefas em espaço do utilizador e das tarefas de núcleo
  • mistura desses dois métodos

2.2.6. Activações do Escalonador

  • implementação híbrida
  • imitar funcionalidades das tarefas de núcleo
  • qdo 1 tarefa bloqueia  deixar funcionar 1 tarefa do mesmo processo
  • eficiência  evitar transições desnecessárias entre MU e MN
  • uso de processadores virtuais
  • bloqueio  núcleo notifica processo  upcall  escalonamento de tarefas (dentro do processo)

2.2.7. Tarefas Pop-Up

  • tarefa pop-up  tarefa cuja criação é causada pela chegada de uma mensagem
  • criação instantânea, devido à tarefa ser nova e não ter histórico → nenhuma informação precisa de ser carregada

2.2.8. Tornar Código de Tarefas-Únicas em Multitarefas

  • maioria dos programas escritos para tarefas-únicas  torná-los utilizáveis para multitarefas
  • 1º problema  Variáveis Globais: ― possível solução  proibir variáveis globais  quase impossível ― outra solução  atribuir a cada tarefa a sua própria variável global  acesso complicado ― introduzir novos procedimentos de biblioteca (library procedures) para gerir essas variáveis globais privadas ― tarefa usa procedimento  acessa apenas os seus próprios dados
  • 2º problema  Procedimentos de Biblioteca podem ser usados só por uma tarefa de cada vez: ― solução 1  procedimento em uso deixa procedimento inválido k leva a crash ― solução 2  atribuir a cada procedimento um bit adicional k indica se o procedimento está a ser usado ou não  elimina grande parte do paralelismo
  • 3º problema  Sinais (núcleo não sabe para k tarefa os deve enviar)
  • 4º problema  Pilhas (Stacks) → núcleo não sabe quando é k as tarefas precisam de mais espaço
  • problemas corrigíveis, mas soluções difíceis e soluções têm k suportam tarefas-únicas também

2.2.9. Escalonamento de Tarefas

  • 2 níveis de paralelismo  processos e tarefas
  • Tarefas no Espaço do Utilizador ― escalonamento de processos e de tarefas separados ― alg. de escalonamento de tarefas comuns  round-robin, priority ― ex: A1,A2,A3,B1,B2,B3,A1,A2,A3,…
  • Tarefas no Núcleo ― núcleo escolhe tarefa (não tem k considerar o processo ao qual pertence) ― ex: A1,B1,A2,B2,A3,B3,A1,B1,…
  • é preferível deixar trabalhar tarefas do mesmo processo para evitar comutações entre processos
  • enter_region[0] → turn=0 → interested[0]=TRUE → leave_region[0] → interested[0]=FALSE
  • processo 1 em espera activa até processo 0 sair da região crítica 5) The TSL Instruction (Test and Set Lock)
  • uma instrução do processador carrega num registo o valor lido de uma posição e de seguida escreve nessa posição um valor diferente de zero (e.g. 1)  compara valor lido com 0  se for 0, entra; se não for 0, espera activa
  • enter_region → TSL → busy waiting ; leave_region → lock=

2.3.4. Sleep and Wakeup (Adormecer e Acordar)

  • Duas chamadas ao sistema que funcionam do seguinte modo:
  • Sleep() → causa bloqueio ao processo que a invoca
  • Wakeup(PID) → desbloqueia o processo identificado por PID
  • A utilização destas duas chamadas evita esperas activas, e em conjunto com outros mecanismos (e.g. TSL) consegue-se garantir a exclusão mútua
  • Problema  lost Wakeup signal → processo manda “acordar” o outro sem este ter “adormecido” ainda → possível solução → wakeup bit → esta solução não funciona sempre  inválida

2.3.5. Semáforos (Semaphores)

  • Um semáforo consiste basicamente num número inteiro não negativo
  • Foram originalmente sugeridas duas operações atómicas (indivisíveis) sob o ponto de vista do SO:
  • UP(Sem) – Incrementa em uma unidade o valor do semáforo Sem
  • DOWN(Sem) – Tenta decrementar em uma unidade o semáforo Sem. Caso o semáforo esteja a “0”, o processo que invoca DOWN bloqueia até que o valor do semáforo permita o decremento e a operação seja finalizada
  • acções atómicas (atomic actions)
  • implementação de forma indivisível  considerar UP & DOWN como chamadas ao sistema → desligar interrupções durante as suas execuções
  • no caso de múltiplas CPUs  proteger semáforo com Instrução TSL → permite apenas 1 CPU
  • semáforos resolvem problemas de exclusão mútua e problemas de sincronização

2.3.6. Mutexes

  • qdo a funcionalidade de contagem dos semáforos não é necessária, usa-se uma versão simplificada de semáforo  mutex
  • mutexes apenas servem para exclusão mútua
  • mutex  variável k pode ter 2 estados: destrancado, trancado (unlocked, locked)
  • representação em integer
  • 2 procedimentos: mutex_lock, mutex_unlock
  • mutex_lock → LOCKED → thread_yield → sem espera activa (no busy waiting)
  • Como é que processos, que têm obviamente espaços de endereçamento diferentes, podem partilhar um semáforo? ― semáforos guardados no núcleo → acesso através de chamadas ao sistema ― a maioria dos SOs oferece maneira de os processos partilharem uma parte do seu espaço de endereçamento com outros processos ― usar um ficheiro partilhado

2.3.7. Monitores

  • monitor  primitiva de sincronização de alto nível; colecção de procedimentos, variáveis e estruturas de dados k são agrupadas num tipo especial de módulo ou pacote
  • propriedade importante  dentro de um monitor, apenas um processo pode estar activo em cada instante
  • tornar regiões críticas em procedimentos de monitor
  • condition variables  wait ou signal (parecido com sleep, wakeup)
  • diferença entre wait/signal e sleep/wakeup  w/s não são interrompidos por escalonamento
  • nem semáforos nem monitores funcionam em troca de informação entre máquinas pk estas não partilham memória umas com as outras

2.3.8. Troca de Mensagens (Message Passing)

  • procedimentos de biblioteca: send, receive
  • Design de Mensagens ― rede → mensagens perdidas → solução: receptor envia mensagem de confirmação ― mensagem recebida, mas confirmação perdida  evitar reenvio → atribuir número (código) a cada mensagem → de modo a poder reconhecer e ignorar uma transmissão jà recebida ― autenticação tb é um assunto muito importante

2.3.9. Barreiras

  • mecanismo de sincronização para grupos de processos
  • algumas aplicações são divididas em fases
  • regra → só se segue para a fase seguinte quando todos os processos terminaram a fase actual
  • barreira  limite entre fases (fronteira)
  • ex: cálculo de matrizes de grande ordem

2.4. Problemas Clássicos de Comunicação entre Processos (Classical IPC Problems)

  1. Problema do Jantar dos Filósofos (The Dining Philosophers Problem)
  2. Problema do Leitor e Escritor (The Readers and Writers Problem)
  3. Problema do Barbeiro Adormecido (The Sleeping Barber Problem)

2.5. Impasses (Deadlocks)  Um conjunto de processos está num impasse se cada um dos processos está bloqueado à espera de um sinal dependente de outro processo nesse conjunto.

2.5.1. Recursos  recurso  dispositivo de HW, pedaço de informação, etc  cada recurso só pode ser usado por um processo num determinado instante 1) Recursos Preemptíveis e Não-preemptíveis (Preemptable and Nonpreemptable Resources)

  • recurso preemptível: pode ser tirado do processo que o possui sem prejudicar o resultado da computação (memória)
  • recurso não-preemptível: se o recurso for tirado do processo antes de este o libertar, o resultado da computação será incorreto (impressora, gravador de CD, etc)
  • Sequência de eventos necessários para usar um recurso:
    1. Requisitar o recurso  disponível → continuar em 2. ; indisponível → sleep
    2. Usar o recurso
    3. Libertar o recurso
  • a contenção no acesso a outros recursos (ex. disco, no caso do printer spooler) pode também dar origem a impasses
  • ideias importantes  atribuição um recurso apenas quando necessário ; minimizar o número de processos que partilham um recurso 2) Atacar a Espera com Retenção
  • pedir todos os recursos necessários antes de iniciar tarefa → problemas: (1) processo não sabe, previamente, quais os recursos k vai precisar; (2) processo pode bloquear recursos desnecessáriamente durante muito tempo
  • processo deverá libertar todos os recursos que possui, quando o pedido de um recurso conduziria a um
  • bloqueio; quando desbloqueado, o processo terá que readquirir todos os recursos de novo 3) Atacar a Não-preempção
  • retirar recursos a um processo (sem a sua cooperação) é inviável na maioria dos casos 4) Atacar a Espera Circular
  • a um processo só pode ser atribuído um recurso de cada vez; tem k libertar recurso para poder requisitar outro → não aconselhável → exemplo: imprimir a partir de uma tape
  • numeração global de todos os tipos de recursos → requisição feita por ordem  elimina impasses  MAS ordenação pode ser complicada pk nunca satisfaz todos

**2.5.6. Outros Asuntos

  1. Two-Phase Locking**
  • 1ª fase  processo “tranca” (locks) todos os recursos k necessita
  • se encontrar algum recurso jà utilizado por outro processo → liberta todos os recursos → reinicia 1ª fase → sem impasses
  • 2ª fase  trabalho normal do processo
  • método não aplicável em geral → sistemas de tempo-real → há processos k não podem ser reiniciados de qualquer maneira 2) Nonresource Deadlock
  • 2 processos podem bloquear-se mutuamente (mesmo sem recursos)  impasse
  • ex: ordem de DOWNs em semáforos 3) Starvation (Privação)
  • processos k nunca recebem atenção → não é um problema de impasse MAS sim de privação
  • ex: Shortest Job First → se entram sempre trabalhos curtos  os longos nunca são atendidos
  • evitar privação  First-Come First-Served

Tema 3 – GESTÃO DE MEMÓRIA

 limitações da memória  hierarquia de memória → Registos, Cache, Memória principal (RAM), Discos (memória secundária), Tapes  gestor de memória  parte do SO k gere a hierarquia de memória  É da responsabilidade do sistema operativo gerir a memória disponível no sistema: ― Representação do estado da memória ― Atribuição de memória aos processos ― Libertação da memória ― Conjugação entre a memória principal e secundária

**3.1. Gestão Básica de Memória

  1. Monoprogramação sem Swapping nem Paging**
  • Programas/processos executados um de cada vez
  • Formas simples de organizar a memória com um SO e um processo (de baixo para cima): ― SO em RAM, Pr. em Mem.  mainframes e minicomputadores ― Pr. em Mem., SO em ROM  Palmtop Computers, sistemas embutidos ― SO em RAM, Pr. em Mem., Drivers dos disp. em ROM  1ºs PCs (MS-DOS) → ROM (BIOS)
  • Mediante um comando, o SO carrega o programa em memória principal, e este corre até terminar 2) Multiprogramação com Partições Fixas
  • dividir memória em N partições fixas (de tamanhos diferentes)
  • cada programa é carregado numa partição com uma dimensão adequada
  • parte da partição não utilizada é perdida
  • múltiplas filas de espera  desvantagem: pode haver uma partição vazia → desperdíçio
  • fila de espera única  partição livre → carrega-se 1º trabalho da fila k lá cabe
  • manter interactividade → manter sempre pelo menos uma partição pequena → trabalhos pequenos nunca esperam muito 3) Modelar a Multiprogramação
  • processos passam uma fracção ᡂ do tempo da sua existência bloqueados em operações de I/O
  • se ᡀ processos estiverem a correr, a probabilidade da CPU estar desocupada será ᡂ〕
  • taxa de ocupação do CPU será então dada por 1 − ᡂ〕^  grau de multiprogramação 4) Análise do Desempenho de Sistemas Multiprogramados
  • modelo anterior pode ser usado para analisar sistemas batch
  • exemplo: 4 jobs ; 1º job não perde muito qdo 2º é adicionado, … 5) Realocação e Protecção
  • A multi-programação trouxe dois problemas a resolver: ― realocação  garantir que os endereços referenciados por um programa sejam os correctos independentemente da posição de memória a partir da qual é carregado ― protecção  impedir que um programa aceda aos endereços de um outro programa
  • Soluções: ― Registo Base  a todos os endereços referenciados pelo programa soma-se o endereço base da partição onde este é carregado. Os programas são escritos como se o primeiro endereço fosse 0. ― Registo Limite  verifica-se se os endereços referenciados pelo programa se encontram dentro da partição que lhe é atribuída

3.2. Swapping

  • em sistemas batch, a gestão básica de memória é suficiente
  • em sistemas de timesharing e GUI, há demasiados processos → não cabe tudo na memória → tem k haver trocas (swapping) conforme os programas vão sendo utilizados
  • equema que envolve a memória principal e a memória secundária (disco)
  • swapping  consiste em transferir processos da memória principal para o disco e vice-versa
  • transferir para o disco um processo bloqueado, e trazer para a RAM um processo pronto
  • estratégia utilizada em conjunto com partições de dimensões variáveis
  • conduz à proliferação de buracos (fragmentação) → compactação da memória → demora demasiado tempo
  • processos com tamanho fixo → alocação de memória simples
  • A função da MMU é converter endereços virtuais em endereços físicos; notifica o sistema se for feito um acesso a um endereço virtual que não corresponde fisicamente à memória principal (page fault → trap to kernel)
  • Paginação : Método mais comum de gestão da memória virtual
  • Páginas (pages) : O espaço de endereçamento virtual é divido em blocos de dimensão fixa designadas por páginas. A dimensão de cada página é uma potência de 2
  • Molduras de página (page frames) : A memória principal é dividida em blocos com a capacidade de alojarem uma página
  • Faltas de página (Page faults) ― qdo é acedida uma página que não se encontra na memória principal, ocorre uma page fault ― uma page fault é uma excepção que causa bloqueio ao processo em questão ― carregamento da página em falta, da memória secundária para a memória principal ― efectuam-se as alterações necessárias na page table, de modo a esta continuar consistente ― pode ser necessário transferir uma outra página para a memória secundária, de modo a libertar-se uma page frame → nesse caso corre-se o algoritmo de substituição de páginas 2) Tabelas de Páginas (Page Tables)
  • 16 bits  4 bits → número da página ; 12 bits → offset
  • MMU  troca 4 bits iniciais (endereço virtual) por outros bits (número da moldura de página)  offset é apenas copiado
  • tabela de páginas é como uma função  f(nº da página) = nº da moldura de página
  • Cada processo tem associado ao seu espaço de endereçamento uma tabela de páginas
  • A tabela de páginas de cada processo tem que estar carregada em memória
  • Bit de presença: Indica se a página se encontra carregada na memória principal ou não
  • Assuntos importantes
  1. a tabela de páginas pode ser extremamente grande
  2. o mapeamento tem de ocorrer com muita rapidez
  • problema: guardar tabelas de páginas enormes na memória  solução: TP Multi-Nível
  • Tabelas de páginas multi-nível ― Guardam-se na memória uma tabela principal (directoria) e as tabelas dos restantes níveis, que contém os descritores das páginas que estão a ser utilizadas pelo processo ― Estas tabelas têm uma dimensão muito mais pequena do que se fosse utilizado um esquema com um só nível
  • Estrutura de uma entrada de tabela de páginas ― Nº da página: indica nº da moldura de página (principal razão da existência de TPs) ― Bit de presença: indica se a página se encontra carregada na memória principal ou não ― Protecção: Bits de protecção da página (ex: read-only, rwx) ― Modificação: bit k indica se a página foi modificada (dirty bit) ― Referência: bit k indica se a página foi usada (grau de utilização) ― Caching: bit k activa/desactiva caching
  • TLBs – Translation Lookaside Buffers ― conversão end.virt. para end.fís. → consultar page table → na memória → acessos extra ― para minorar desperdício de tempo feito por estes acessos  MMUs contém geralmente uma espécie de cache para páginas, designada TLB ― TLB mantém um conjunto de descritores das páginas acedidas mais recentemente ― cada processo tende a utilizar mais exaustivamente um pequeno conjunto de páginas ― quando uma página é descartada da memória principal, é também libertada a entrada correspondente na TLB

― faltas de TLB geridas pelo HW da MMU ou por SW (pelo SO)

  • Tabelas de páginas invertidas ― Uma entrada para cada página de memória ― Cada entrada contém: → o endereço virtual da página → o endereço físico → o processo que é dono da página ― Vantagem: diminui a memória necessária para armazenar a tabela ― Desvantagem: pode aumentar o tempo necessário para procurar na tabela

**3.4. Algoritmos de Substituição de Páginas (Page Replacement Algorithms)

  1. O algoritmo ideal**
  • sempre que for necessária uma substituição de páginas, a que deveria sair será aquela que só será utilizada daqui a mais tempo  impossível → SOs não conseguem prever o futuro
  • aproximação  tentar descartar as páginas que são pouco utilizadas, ou que já não são utilizadas há muito tempo, na esperança de que não venham a ser utilizadas brevemente 2) Algoritmo “Not Recently Used” (NRU)
  • quando ocorre uma page fault, este algoritmo classifica as páginas carregadas em memória
  • Utilização de dois bits: ― R (Referenced): indica k a página foi acedida desde a última interrupção do relógio ― M (Modified): indica k a página foi modificada desde que foi carregada na memória principal
  • Estabelecem-se 4 classes diferentes, de acordo com R e M ― Classe 0: R=0 e M= ― Classe 1: R=0 e M= ― Classe 2: R=1 e M= ― Classe 3: R=1 e M=
  • A página a substituir será uma página aleatória pertencente à classe mais baixa encontrada 3) Algoritmo “First-In, First-Out” (FIFO)
  • A página a substituir é a que se encontra carregada há mais tempo na memória principal
  • fácil implementação → lista com índices de páginas → a + antiga no topo e a + recente no fim
  • à medida que as páginas vão sendo carregadas na memória, os seus índices vão também sendo acrescentados ao fim da lista mantida pelo algoritmo
  • Problema: a página que foi carregada há mais tempo pode estar a ser utilizada 4) Algoritmo da Segunda Chance (Second Chance)
  • Algoritmo baseado no FIFO, mas que utiliza o bit de referência (R)
  • Antes de uma página ser descartada, analisa-se o bit R e, caso este se encontre a “1”, então é posto a “0”, mas a página não é descartada, analisando-se a próxima.
  • A página a descartar será a primeira que for encontrada com R= 5) Algoritmo do Relógio
  • Semelhante ao algoritmo da segunda chance, mas a lista de páginas é circular
  • Deste modo ganha-se eficiência pois deixa de ser necessário retirar estruturas do topo da lista para as inserir no fim 6) Algoritmo “Least Recently Used” (LRU)
  • A página a substituir será a que não é acedida hà mais tempo
  • Para tal, guarda-se para cada página uma marca temporal com o tempo do último acesso
  • Teoricamente este algoritmo é o que efectua a melhor escolha na página a substituir
  • Bom desempenho a um custo elevado