·

Engenharia de Software ·

Arquitetura de Computadores

Envie sua pergunta para a IA e receba a resposta na hora

Fazer Pergunta

Texto de pré-visualização

O Kernel Núcleo O kernel é o componente central de um sistema operacional de computador O único trabalho realizado pelo kernel é gerenciar a comunicação entre o software e o hardware Um Kernel está no núcleo de um computador Isso torna possível a comunicação entre o hardware e o software Enquanto o Kernel é a parte mais interna de um sistema operacional uma shell é a mais externa Firmware x Sistema Operacional Firmware Operating System Firmware é um tipo de programa que está embarcadoembutido e relacionado com os chips que compõem um dispositivo e que o controla Basicamente o SO fornece funcionalidade sobre aquilo que é fornecido pelo firmware Firmware é um programa que foi codificado em fábrica e não pode ser facilmente alterado requerendo procedimentos complexos ou mesmo que não podem ser alterados OS é um programa que pode ser instalado pelo usuário e que pode ser alterado Armazenado em memória nãovolátil OS é armazenado em HD 32 bits x 64 bits O que define o tamanho de palavra usada pelos Sistemas Operacionais é o tamanho do barramento de dados e de endereçamento Para termos uma ideia o primeiro micro processador de uso comercial para o mercado em geral tinha apenas 4 bits Logo foi substituído pelo 8080 que tinha 8 bits Os processadores então evoluíram para versões com 16 32 e finalmente 64 bits Atualmente o tamanho de 64 bits é considerado ótimo para os projetos contemporâneos Para Refletir O que é competição por recursos Que recursos serão alvo de competição em um Sistema Operacional Recursos Computacionai s são sempre Escassos São escassos porque são finitos Uma solução é aumentar a capacidade de recursos disponibilizada Porém por mais que se ofertem recursos a demanda pelos mesmos será estimulada Em outras palavras quanto mais recursos se oferecem maior será a demanda Esta lei não escrita basicamente determina que deve haver algumuns tipos de mecanismos que a partir de determinadas políticas gerenciem a demanda acima da oferta Lei da oferta e da procura Desta forma qual é o recurso mais escasso Imaginem qual é o recurso computacional mais escasso de todos O Recurso mais Escasso A hierarquia de memória de sistema 2016 Pearson Education Inc Hoboken NJ All rights reserved 2016 Pearson Education Inc Hoboken NJ All rights reserved Por que a memória evolui pouco Address line Transistor Storage capacitor Ground bit line DRAM Prefetch Architecture Prefetch 1 SDRAMWide IO DRAM DRAM Interface DRAM Core 1n bits 100266MHz 1x Rate 100266Mbps Prefetch 2 DDRLPDDRWide IO DDR DRAM DRAM Interface DRAM Core 2n bits 100266MHz 2x Rate 200533Mbps Prefetch 4 DDR2GDDR3LPDDR2 DRAM DRAM Interface DRAM Core 4n bits 100266MHz 4x Rate 4001066Mbps Prefetch 8 DDR3GDDR4LPDDR3 DRAM DRAM Interface DRAM Core 8n bits 100266MHz 8x Rate 8002133Mbps Prefetch 8Bank Grouping GDDR5DDR4 DRAM DRAM Interface Bank Group 81 Bank Group 81 Bank Group 81 Bank Group 81 8n bits 100266MHz 16x Rate 16004266Mbps Características da memória Em geral computadores de pequeno porte terão entre 4 e 8GB de memória RAM dinâmica alcançando até 16GB em alguns casos Servidores poderão possuir entre 32GB e 256GB de memória RAM em DataCenter privado ou na Nuvem Contudo segundo a lei da demanda este poder computacional acabará sendo sempre dividido entre vários Servidores Virtuais em que tipicamente um Servidor virtual terminará por ser constituído por uma oferta de memória RAM de 4GB a 8GB por tipo de serviço Desta forma por mais que haja recursos a oferta de memória RAM será sempre muito limitada Como lidar com a Escassez de Memória RAM São adotadas as estratégias de Paginação e Memória Virtual Desta forma em Hardware é implementado um controle que permite mapear o endereço lógico um espaço de endereçamento muito maior em um esquema de paginação Utilizase para isto o espaço em disco que passa a funcionar como uma extensão da memória RAM Sendo assim se for endereçada uma página que não esteja presente em memória RAM aquela página que estava em disco é trazida para memória RAM Funciona de uma forma similar ao conceito de memória Cache Permite apresentar aos softwares utilizadores de recursos uma quantidade virtual de memória muito superior à memória física Memória Virtual Virtual memory Facilidade que permite a programas endereçar a memória de um ponto de vista lógico independente da quantidade de memória fisicamente disponível Quando usada os campos de endereços das instruções de máquina contêm endereços virtuais Para leituras e escritas para a memória principal uma unidade de gerenciamento de memória MMU traduz cada endereço virtual em um endereço físico na memória principal 2016 Pearson Education Inc Hoboken NJ All rights reserved Penalização no acesso à Página em Disco Penalização no acesso à Página em Disco Limitações Observemos novamente a hierarquia de memória Todo este processo tem uma penalização pois o acesso ao disco rígido é muito mais lento do que o acesso à memória virtual Uma forma de resolver isto é utilizar discos com tempo de resposta mais alto tais como discos baseados em tecnologia sólida do tipo SSD Porém podemos observar que mesmo assim o tempo de acesso ao SSD é de ordens de grandeza superior ao do acesso à memória RAM Todos estes fatores devem ser levados em conta no dimensionamento de uma máquina virtual e do espaço em RAM reservado Haverá então um compromisso entre consumo de recurso RAM e quantidade de operações de Paginação em outras palavras quanto ao desempenho O Escalonamento Que situaçãoões você consegue identificar que podem requerer Escalonamento Quantos processos uma CPU pode executar Mesmo considerando a existência de várias CPUs virtuais vamos acabar remetendo à CPU virtual unitária Como esta CPU pode lidar com vários processos em execução simultaneamente É preciso adotar uma estratégia para isto Escalonament o de Processos O Escalonamento de Processos é a atividade do Gerente de Processo que lida com a remoção do processo de execução da CPU e a seleção de outro processo com base em uma estratégia específica Process Scheduling é uma parte essencial de um sistema operacional multiprograma Esses sistemas operacionais permitem que mais de um processo seja carregado na memória executável de cada vez e o processo carregado compartilha a CPU usando multiplexação no tempo O que é Multiplexaç ão no Tempo Multiplexação é uma técnica empregada para dividir espaços em determinados domínios de forma a permitir o compartilhamento do todo entre várias partes dividindo este mesmo todo em suas partes Confuso Vamos pegar um exemplo da Telefonia Um cabo coaxial e apenas um cabo coaxial chega ao equipamento de telefonia e este mesmo cabo comporta 32 canais simultâneos Como é possível realizar este tipo de compartilhamento Multiplexação TDM E1R2 23 Qual é a taxa em Mbps R 2048Mbps É um número mágico Compartilhando Circuitos FDM e TDM FDM frequência tempo TDM frequência tempo 4 usuários Exemplo Todo o material copyright 19962009 JF Kurose e KW Ross Todos os direitos reservados Quebrando a Sequência Processamento da Interrupção Interrupções Geradas por um sinal de hardware e pode ocorrer de forma aleatória durante a execução de um programa Mascarável Não mascarável Exceções Geradas a partir do software e provocadas pela execução de uma instrução Detectável pelo processador Programável Tabela de vetor de interrupção A cada tipo de interrupção é atribuído um número Este número é usado para indexar dentro da tabela de vetor de interrupção Interrupções e Exceções 2016 Pearson Education Inc Hoboken NJ All rights reserved 256 32bit interrupt vectors which is the address segment and offset of the interrupt service routine for that interrupt number Transferên cia de Controle via Interrupçã o 27 2016 Pearson Education Inc Hoboken NJ All rights reserved User 3 User 4 User 2 CPU User 5 Active state User 1 User 6 Ready state Process Scheduling Queues O OS ou SO mantém todos os PCBs Process Control Blocks em Process Scheduling Queues O OS mantém uma fila separada para cada um dos estados do processo e os PCBs de todos os processos no mesmo estado de execução são colocados na mesma fila Quando o estado de um processo é alterado seu PCB é desvinculado de sua fila atual e movido para sua nova fila de estado O Sistema Operacional mantém as seguintes importantes process scheduling queues Job queue Essa fila mantém todos os processos no sistema Ready queue Essa fila mantém um conjunto de todos os processos residentes na memória principal prontos e esperando para serem executados Um novo processo é sempre colocado nessa fila Device queues Os processos que são bloqueados devido à indisponibilidade de um dispositivo de IO constituem essa fila PCB e PID Ao criar um processo o sistema operacional realiza várias operações Para identificar os processos ele atribui um número de identificação de processo PID a cada processo Como o sistema operacional suporta multiprogramação ele precisa acompanhar todos os processos Para essa tarefa o bloco de controle de processo PCB é usado para rastrear o status de execução do processo Cada bloco de memória contém informações sobre o estado do processo contador de programas ponteiro de pilha status de arquivos abertos algoritmos de agendamento etc Todas essas informações são necessárias e devem ser salvas quando o processo é trocado de um estado para outro Quando o processo faz uma transição de um estado para outro o sistema operacional deve atualizar as informações no PCB do processo PCB e Tabela de Processos Um bloco de controle de processos PCB contém informações sobre o processo ou seja registros quantum prioridade etc A tabela de processos é uma matriz de PCBs ou seja logicamente contém um PCB para todos os processos atuais no sistema Informações sobre o Processo Pointer É um ponteiro de pilha que é necessário para ser salvo quando o processo é trocado de um estado para outro para manter a posição atual do processo Process state Armazena o respectivo estado do processo Process number Cada processo é atribuído com um id único conhecido como ID de processo ou PID que armazena o identificador de processo Program counter Armazena o contador que contém o endereço da próxima instrução que deve ser executada para o processo Register Estes são os registros de CPU que incluem acumulador base registros e registros de finalidade geral Memory limits Este campo contém as informações sobre o sistema de gerenciamento de memória usado pelo sistema operacional Isso pode incluir as tabelas de página tabelas de segmento etc Open files list Essas informações incluem a lista de arquivos abertos para um processo Contabilidade e Status Este campo inclui informações sobre a quantidade de CPU usada restrições de tempo jobs ou número de processo etc O bloco de controle de processo armazena o conteúdo de registro também conhecido como conteúdo de execução do processador quando ele foi impedido de funcionar Essa arquitetura de conteúdo de execução permite que o sistema operacional restaure o contexto de execução de um processo quando o processo retorna ao estado em execução Quando o processo faz uma transição de um estado para outro o sistema operacional atualiza suas informações no PCB do processo O sistema operacional mantém ponteiros no PCB de cada processo em uma tabela de processo para que ele possa acessar o PCB rapidamente PID x PCB PID PCB 1 2 3 PCB PID 1 PCB PID 2 Process table and process control block Filas O SISTEMA OPERACIONAL pode usar diferentes políticas para gerenciar cada fila FIFO Round Robin Priority etc O agendador de sistemas operacional determina como mover processos entre as filas que só podem ter uma entrada por núcleo de processador no sistema Context Switch Um comutador ou chaveador de contexto é o mecanismo para armazenar e restaurar o estado ou o contexto de uma CPU no Bloco de Controle de Processos para que uma execução de processo possa ser retomada a partir do mesmo ponto posteriormente Usando essa técnica um switcher de contexto permite que vários processos compartilhem uma única CPU A comutação de contexto é uma parte essencial de um sistema operacional multitarefa Quando o agendador muda a CPU da execução de um processo para executar outro o estado do processo de execução atual é armazenado no bloco de controle de processo Depois disso o estado para o processo para execução seguinte é carregado a partir de seu próprio PCB e usado para definir o PC registradores etc Nesse ponto o segundo processo pode começar a ser executado Pergunta o que são PC registradores etc Process Contexts Process 1 Process 2 Process 3 Process 4 Process 4 context stored in trapframe in kernel stack page tables related to process 4 kernel CPU Process P1 Saves P1 State Process P2 Restore P2 State Process P2 Save P2 State Process P1 Restore P1 State Context Switch Os switches de contexto são computacionalmente intensivos uma vez que o estado de registro e memória deve ser salvo e restaurado Para evitar a quantidade de tempo de comutação de contexto alguns sistemas de hardware empregam dois ou mais conjuntos de registros de processadores Quando o processo é comutado as seguintes informações são armazenadas para uso posterior Program Counter Scheduling information Base and limit register value Currently used register Changed State IO State information Informações Complementares depende da implementação Gerenciamen to de Recursos Vimos até o momento algumas funções que ficam a cargo do Sistema Operacional que vamos elencar O Sistema Operacional abstrai os recursos de hardware das camadas superiores do Sistema Computacional Abstrai o controle e uso de microcontroladores operações sobre o barramento controle direto dos dispositivos quanto à sua programação assim como a interação com o firmware Também abstrai a comunicação com os drivers de dispositivos Drivers de Dispositivos Applications User Operating System Device Drivers Device Drivers Driver de dispositivo é um programa de software especializado em execução como parte do sistema operacional que interage com um dispositivo conectado a um computador É apenas um código dentro do SO que permite ser ativado a partir de comandos específicos necessários para operar o dispositivo associado O SISTEMA OPERACIONAL gerencia e controla os dispositivos conectados ao computador fornecendo funcionalidade necessária aos programas de software para controlar diferentes aspectos dos dispositivos O SISTEMA OPERACIONAL faz isso combinando técnicas de hardware e software O SISTEMA OPERACIONAL interage com o hardware de IO através do software do driver do dispositivo O software do driver do dispositivo vem junto com cada dispositivo Os drivers de dispositivos são basicamente programas de baixo nível que permitem que o núcleo do computador se comunique com diferentes dispositivos de hardware sem se preocupar com os detalhes de como o hardware funciona Assim eles fornecem ao kernel o conhecimento adequado sobre como controlar os dispositivos Gerenciand o Usos e Recursos Verificamos também que o Sistema Operacional lida com a tarefa de alocar recursos de acordo com a oferta e demanda dos mesmos Aplica políticas de uso o que envolve estratégia de escalonamento e agendamento Faz uso de filas às quais podem ser empregados critérios de uso como prioridades e também pelo tipo de uso tal como se faz uso de ES IO ou não Emprega estratégias de Swap e Paginação para melhor poder acomodar os usos e racionalização do uso de memória Outras Funções do SO Propiciar mecanismos para manutenção da consistência global do sistema Evitar indisponibilidade prolongada ou mesmo permanente do sistema Por exemplo longos tempos de espera ou mesmo o travamento do sistema O que pode causar travamento Fontes de Travament o Também chamados de Deadlock Basicamente ocorre quando dois ou mais processos requerem a utilização de um mesmo recurso que pode ser uma informação ou acesso a um determinado dispositivo Um processo prende aquele recurso e não o libera devido a algum outro motivo Este recurso somente pode ser liberado quando a operação deste processo for completada Um terceiro processo que também precisa deste recurso fica em espera e também retém recursos solicitados por outros processos e somente o pode liberar após completar a operação Este cenário em cascata pode desencadear o travamento do sistema São situações às quais denominamos Deadlock Estratégias para lidar com Deadlocks Semáforos Um semáforo é uma variável do tipo inteiro compartilhada entre múltiplos processos O principal objetivo do uso de um semáforo é a sincronização de processos e o controle de acesso para um recurso comum em um ambiente simultâneo O valor inicial de um semáforo depende do problema em questão Por exemplo pode ser usado o número de recursos disponíveis como o valor inicial É uma ferramenta de sincronização que não requer espera ocupada Assim o sistema operacional não desperdiça os ciclos de CPU quando um processo não puder operar devido à falta de acesso a um recurso Semáforos Um semáforo possui duas operações indivisíveis atômicas denominadas wait e signal Também referenciadas como P e V ou down e up Semáforos podem ser implementados no Kernel e desta forma o wait for e signal são implementados como chamadas de sistema Chamemos S de semáforo e o seu valor inteiro representa a quantidade de recursos disponível Vejamos como funciona a operação de wait Tipos de Semáforos Um semáforo binário pode ter apenas dois valores inteiros 0 ou 1 É mais simples de implementar e fornece exclusão mútua Podemos usar um semáforo binário para resolver o problema da seção crítica Um semáforo é um mecanismo de sinalização onde por outro lado existe um mecanismo denominado mutex que é um mecanismo de travamento Um semafórico binário não é um mutex Já um semáforo de contagem é novamente um valor inteiro que pode variar sobre um domínio irrestrito Podemos usálo para resolver problemas de sincronização como alocação de recursos Algoritmo Operação wait A função wait simplesmente decrementa os recursos caso ainda haja algum disponível Se não houver recurso O processo é colocado em modo sleep para dormir e fica em espera Signal A operação signal incrementa S se não houver outros processos que estão esperando pelo recurso Caso contrário em vez de aumentar seu valor um processo de espera é selecionado para ser acordado pelo agendador do sistema operacional Como resultado esse processo ganha o controle do recurso Sincronizaçã o de Processos Em um ambiente multithreaded a sincronização de processos significa compartilhamento eficiente dos recursos do sistema por processos simultâneos Garantir a execução sincronizada requer uma maneira de coordenar processos que usam dados compartilhados Um mecanismo de sincronização satisfatório viabiliza a concorrência a fim de evitar impasses deadlocks e exaurimento starvation Com uso cuidadoso um semáforo é uma poderosa ferramenta de sincronização que pode permitir a sincronização de processos Vamos examinar como podemos cuidar de alguns problemas a seguir Evitando Deadlock s Um impasse deadlock ocorre quando um grupo de processos é bloqueado em um estado à espera de alguma outra ação de outro membro Para evitar possíveis impasses precisamos ter cuidado com a forma como implementamos os semáforos Vamos examinar um caso de impasse Dois Processos Concorrentes Process 0 waitS waitQ program code signalS signalQ Process 1 waitQ waitS program code signalQ signalS Dois Processos Concorrentes Suponha que o Processo 0 inicie primeiro e em seguida Chame wait S Em seguida é interrompido Já o Processo 1 é iniciado um tempo depois e chama wait Q Sendo em seguida interrompido Quando o Processo 0 retorna ficará esperando pela liberação Signal Q e não poderá prosseguir Já o Processo 1 retornará e esperará pela liberação Signal S Desta forma um processo ficará esperando pelo outro Indefinidamente Deadlock Manipulan do o Semáforo Digamos que tenhamos dois processos Processo 0 e Processo 1 Queremos que o Processo 1 seja executado apenas quando o Processo 0 tiver terminado a execução de um trecho de código Neste caso adotase uma variação do semáforo inicializandoo com o valor 0 Supondo então que o valor inicial do semáforo é zero vamos acompanhar a operação P0 x P1 Digamos que Processo 1 é iniciado Ele chama waitx que neste caso está zerado Processo 0 inicia executa S1 sem restrições e chama signalx adicionando 1 ao semáforo Desta forma agora então P1 pode iniciar a sua operação Vamos analisar mais algumas situações Critical Session Produces x Consumer Readers and Writers Starvation Critical Session A seção crítica faz parte do código do programa onde queremos evitar acesso simultâneo Podemos usar um semáforo binário para resolver o problema da seção crítica Neste caso o valor inicial do semáforo é de 1 no kernel Critical Session No exemplo acima garantimos a exclusão mútua no acesso de seção crítica Em vez de esperar o processo de espera está dormindo enquanto aguarda sua vez na seção crítica Em seguida a operação do sinal é realizada o kernel adiciona um processo de sleep à fila pronta Se o kernel decidir executar o processo ele continuará na seção crítica Desta forma garantimos que apenas um processo esteja na seção crítica a qualquer momento Problema do Consumidor Produtor Vamos considerar o conhecido problema produtor consumidor em seguida Neste problema há um buffer limitado consistindo de células com um bufsize Em outras palavras o buffer pode armazenar um número máximo de elementos de um bufsize Dois processo estão acessando o Buffer denominados Produtor e Consumidor Para superar este problema utilizase um semáforo contador representando o número de células preenchidas À medida que o produtor coloca um item no buffer ele aumenta o semáforo por uma operação de sinal Pelo contrário quando o consumidor consome um item por operação de espera o semáforo é diminuído Quando um consumidor usa o último item no buffer ele é colocado em sleep por meio da última operação de espera wait Produtor x Consumidor Producer do produce an item and put it into buffer signalS whileTrue Consumer do waitS consume item whileTrue kernel waitS signalS Semaphore S initialized to 0 Problema dos Leitores e Escritores Este tipo de problema possui vários leitores e escritores trabalhando sobre o mesmo conjunto de dados Os processos leitores apenas leem o conjunto de dados Estes não realizam qualquer atualização Ao passo que os processos escritores podem tanto ler como escrever O problema de sincronização decorre da necessidade de permitir apenas um escritor atuando sobre o conjunto de dados Não há entretanto restrições para múltiplos leitores simultâneos Assumindo que realizemos um lock do data set O primeiro reader deverá realizar um lock no data set permitindo que todos os leitores subsequentes leiam livremente E o último reader deverá liberar o lock Neste problema serão empregados um valor inteiro e dois semáforos Passos para o Writer Quando um writer inicia a leitura ou a finaliza este deverá realizar o lockunlock para os demais leitores e escritores Para permitir a sincronização neste problema precisaremos empregar um valor inteiro e dois semáforos Inicializase o inteiro read com zero que representa o número de readers acessando o arquivo Este não é o semáforo apenas uma variável inteiro Inicializemos o semáforo S para 1 o que protege a variável read de ser atualizada por múltiplos processos Por fim inicializar o semáforo write para 1 o que protege o data set de ser acessado ao mesmo tempo por múltiplos escritores Passos para o Writer e Reader No caso do writer este apenas espera sinais do semáforo write Se este puder adquirir o semáforo write poderá seguir De outra forma é bloqueado Assim que a operação de escrita é completada o writer sinaliza signals o semáforo write Desta forma outros processos podem acessar os dados Um workflow para reader é mais complicado A primeira coisa a fazer é incrementar o readcount Para fazer isto o reader precisa adquirir o semáforo S a fim de modificar o readcount Para ter certeza de que não é acessado simultaneamente por outros processos Se nenhum outro reader estiver acessando os dados naquele momento o readcount tornase 1 após a operação de incremento Neste caso o reader espera o semáforo write antes de acessar o data set para asssegurar que nenhum writer estará acessando Após liberar o semáforo S o reader prossegue e realiza a operação de leitura Por fim quando o reader completa o trabalho sobre o data set decrementase o valor de readcount Novamente adquire o semáforo S muda variável readcount e finalmente libera o semáforo S Writer do waitwrite write on the data set signalwrite whileTrue Reader do waitS readcount readcount 1 readcount1 yes waitwrite no signalS perform reading operation waitS readcount readcount 1 readcount0 yes signalwrite no signalS whileTrue kernel waitS signalS int readcount num readers accessing the data set init to 0 Semaphore S protects the integer value initialized to 1 Semaphore write protects the data set init to 1 Thread A Thread A Program Simultaneidade Two Threads A Program Thread Uma thread é considerada leve porque funciona dentro do contexto de um programa completo e aproveita os recursos alocados para esse programa e para o ambiente do programa Como um fluxo sequencial de controle uma thread deve constituir alguns de seus próprios recursos dentro de um programa em execução Por exemplo uma thread deve ter sua própria pilha de execução e contador de programas O código em execução dentro de uma thread funciona apenas dentro desse contexto Alguns outros textos usam o contexto de execução como sinônimo de thread Thread Uma thread é uma sequência de instruções dentro de um programa que podem ser executadas independentemente de outros códigos Este conceito pode ser aplicado ao Hardware também em Software Em Hardware uma CPU Multithread é capaz de executar duas threads simultaneamente Nestes casos a CPU se comporta como se fossem duas A efetitividade é estatística Conceito O que é uma Thread Exemplo de Aplicação Uma aplicação que se propõe a realizar uma varredura de alcançabilidade por meio de pings em cada host cuja presença se deseja verificar Uma alternativa é realizar cada ping sequencialmente em um loop for realizando um a um Porém o tempo de execução e resposta de cada ping é relativamente longo Uma possibilidade é realizar vários pings em paralelo o que permite realizar esta varredura com múltiplos pings em paralelo acelerando o processo Exemplo com Python Disparando 4 threads simultaneamente o tempo de varredura pode ser substancialmente reduzido Empregando listas compreendendo faixas de endereços esta varredura pode ser realizada com várias threads simultaneamente acelerando substancialmente o processo usrbinpython import threading import time import subprocess import os def workerde ate iplist with openosdevnull wb as limbo for n in xrangede ate ip19216800formatn resultsubprocessPopenping n 1 w 2 ip stdoutlimbo stderrlimbowait if result print s inativo ip iplistappendip else print s ativo ip n leniplist for x in range n krawinput print iplistx de1 ate32 t1 threadingThreadtargetworkerargsdeate t1start de33 ate64 t2 threadingThreadtargetworkerargsdeate t2start de65 ate96 t3 threadingThreadtargetworkerargsdeate t3start de97 ate128 t4 threadingThreadtargetworkerargsdeate t4start Para ir mais a fundo httpstldporgLDPlpgnode53html Na Próxima Aula Vamos falar um pouco de Sistemas Operacionais e sua relação com os Sistemas de Rede Scheduler Despachante Modelo de processo de dois estados referese a estados em execução e nãoexecutados que são descritos abaixo SN Estado Descrição 1 Running Quando um novo processo é criado ele entra no sistema como no estado em execução 2 Not Running Os processos que não estão em execução são mantidos na fila esperando sua vez de executar Cada entrada na fila é um ponteiro para um processo específico A fila é implementada usando a lista vinculada O uso do despachante é o seguinte Quando um processo é interrompido esse processo é transferido para a fila de espera Se o processo tiver concluído ou abortado o processo será descartado Em ambos os casos o despachante seleciona um processo da fila para executar Time Slice O Kernel da CPU não distribui simplesmente a totalidade dos recursos dos PCs para um único processo ou serviço A CPU funciona continuamente em muitos processos essenciais para que funcione por isso o Kernel precisa gerenciar esses processos sem demora Quando o programa precisa ser executado um processo deve ser criado para ele Esse processo precisa ter recursos importantes como RAM e CPU O Kernel agenda períodos de tempo para que a CPU execute comandos e instruções sobre o processo considerando que uma CPU deve lidar com inúmeros processos A CPU deve executar diferentes processos sem impor esperas demasiadas Esta atribuição é realizada executando processos um a um individualmente por fatia de tempo Uma fatia de tempo é um prazo delimitado e curto que é atribuído ao processo para execução da CPU É um timeframe que é atribuído a cada processo para execução em uma CPU multitarefa preemptiva O agendador executa cada processo a cada fatia de tempo O período de cada fatia de tempo pode ser muito significativo e crucial para equilibrar o desempenho e a capacidade de resposta das CPUs Time Slice User Interface Applications Kernel Process Manager Memory Manager File Manager IO Manager Hardware RAM CPU Time Slice Process 1 Time Slice Process 2 Time Slice Process 3 Time Slice Process 4 Temporizador e Filas Quando o processo é atribuído à CPU o temporizador do relógio é definido correspondente à fatia de tempo Se o processo terminar sua explosão antes da fatia de tempo a CPU simplesmente a troca como o cálculo FCFS convencional Se a fatia de tempo for finalizada antes a CPU a desloca o processo para o final da fila de execuções A fila contínua é gerenciada como fila circular então depois que todos os processos são executados uma vez o agendador executa o primeiro processo novamente e depois segundo e assim por diante Exemplo Process Queue Required burst time by processms P1 1 P2 4 P3 5 Temos três processos P1 P2 P3 com seus tempos de burst correspondentes 1ms 4ms 5ms Uma regra geral é que 80 dos burst de CPU devem ser menores do que o quantum temporal Considerando o timeslice de a parte do tempo de 2ms é assim que a CPU o gerencia com a técnica de time slice Time Slice Exemplo T0 P1 P2 P3 Queue T2 P1 P2 P3 Queue T4 P1 P2 P3 Queue T6 P1 P2 P3 Queue T8 P1 P2 P3 P2 P3 Queue T10 P1 P2 P3 P2 P3 Queue T12 P1 P2 P3 P2 P3 P3 Queue Vantagens e Desvantagens Vantagens Alocação justa de recursos da CPU Trata todo o processo com igual prioridade Facilmente implementável no sistema Método de comutação de contexto usado para salvar estados de processos preemptivos Melhor desempenho em termos de tempo médio de processamento Desvantagens Se o time slice for muito curto o resultado na saída do processador será adiado Gastase tempo em mudança de contexto O desempenho depende muito do tempo quantificado Prioridades não podem ser fixadas para processos Não há prioridade para tarefas mais importantes Encontrar um quantum de tempo apropriado é um desafio Lab em 2803 e 2903 Vamos visitar o Little Man Computer O simulador SoSim Gera relatório Aulas Seguintes 0404 Continuação dos Assuntos 1104 Lab 1804 Revisão e Exercícios 2504 AV1 O problema dos Filósofos Comensais A ideia por detrás deste tipo de exposição quanto a uma determinada situação é a de ilustrar problemas que de fato ocorrem na realidade da computação O problema dos Filósofos comensais é um dos clássicos dos Estudos de Casos para a questão do colapso por exaustão No caso dos filósofos irá se referir a uma situação hipotética em que algum dos filósofos eventualmente irá morrer de fome mesmo estando à mesa de jantar fartamente abastecida