Transcrição do áudio
E a coleguinha, vamos falar agora sobre o Schedule, o cara que vai trazer o comportamento do sistema operacional, ele que dita qual é o próximo processo a ser executado, sempre que nós temos uma troca de processo que está em execução, nós temos uma troca de contexto e o Schedule ele é um processo, você tem que lembrar do livro do Turnable sobre troca de contexto e sobre naturalmente a questão de processo de execução, lista de processos prontos e lista de processos bloqueados, Deadlock também. Bom, naturalmente posso dizer para vocês que hoje nós temos sistemas operacionais multi-usuários, isso é normal, o Schedule ele compreende isso, há uma segmentação então da área do usuário, da área por exemplo do suprusuário, na memória e nós temos um modelo mais simples de Schedule aqui no livro de Linux, se comparado com o livro do Turnable, tá? Bom, tivemos várias mudanças no passado e tem o seu uma regra, é um comportamento do Schedule que determina o que é executado e naturalmente quando a política de um Schedule geralmente determina essa sensação geral de um sistema, como que ele opera. Lá no livro do Turnable você vai encontrar isso como zoológico de sistemas operacionais, ele vai falar que tem sistemas operacionais que são projetados para processamento em Lote, tá? Por exemplo, eu estou aqui numa máquina, a uma máquina, essa máquina tem 72 núcleos, beleza? Então, mas são núcleos muito pequenininhos, muitos saquinhos. Para quê? Para que eu tenha processamento em Lote. Então, a máquina boa para o processamento em Lote, com um sistema operacional bom de processamento em Lote. O processamento em Lote ele sempre vai procurar executar os processos mais curtos primeiro. Já um sistema operacional desktop comum de usuário, tá? O sistema operacional vai tentar executar aquilo que o usuário pede primeiro. Então, tem essa política envolvida, tá? No Linux é muito simples, tá? Nós temos uma lista encadeada de prioridade, de uma lista encadeada de processos na prioridade. Eu vou ter que instalar aqui um tal de color paint, não tá aqui já tem o desenho, tá? Como funciona essa política no livro do tarnable? O tarnable vai falar que existe lá o algoritmo do banqueiro, que vai dizer qual é o melhor dos processos, que é o próximo, que vai ser tudo lido e maravilhoso, mas não implementável. Tá? Como que o Linux fax? Imagina então que eu tenho priorite 1, priorite 2, priorite 3, priorite 4, né? Até 139. Tá? As prioridades. Beleza? E aqui eu tenho uma fila de processos aqui. Então é uma lista encadeada de prioridades, no qual eu tenho uma fila, que é uma lista encadeada também. É uma fila de processos em cada nível. Olha a jogada, tá? E vamos imaginar aqui que um processo, ele processam o seu slice time, que no livro do tarnable é chamado de quantum, tá? Aqui é slice time. E então ele recuta o seu quantum de tempo, então ele é jogado pro final porque ele não terminou a execução, ele não saiu ainda, né? Não deu exit, igual nós conversamos até então. Tá? Então ele também não chegou até a invadir a sua pilha de funções. Então ele vai pro final e aí ele vem aqui, ó, ele fica nessa, certo? Quando o processo, então, ele recebe um exit ou um signal ou ele finaliza zerando a pilha de funções, então ele sai de forma voluntária, tá? Ele é apagado de forma voluntária. Beleza? Esse apagado é meio complicado. Ele passa por um momento em que ele vira um zumbi na memória pra talvez ser revivido com outros dados porque é mais fácil do que criar tudo de novo. Bom, vamos lá. Então ele tem essa ideia aí, tá? Então outra coisa que você também tem que saber que é o seguinte, vamos imaginar que aqui tivesse a priorite zero, tá? Aqui embaixo. E digamos que esse cara tivesse em execução esse processo aqui em priorite 1, esse aqui, o primeiro. Se chegar um processo em priorite zero, tu supondo, tá, colega? Tá? A execução do priorite 1 é parada, o processo ele vai para, é pronto, para execução e imediatamente o esquema ele chama aquele processo que chegou em priorite zero. É assim que funciona no Linux, tá? Então aquilo que chega com prioridade menor, ele é executado quase que imediatamente. Quando aquilo que chega com prioridade maior, tá? É invertido, tá galera? Invertido. Com um número maior, ele vai mais lá para cima e ele acaba sendo executado quando não tem nada para ser executado. Essa é a verdade. Você colocar algo em 139 é algo que só vai ser executado caso não tenha mais nada para ser executado. Como assim não tem mais nada para ser executado? Quer dizer que os processos estão esperando alguma coisa que geralmente é um I.O. Na fila de bloqueados, tá? O que tá lá no livro do Trandeba, gente? Bom, aqui eu tenho de 1 a 99 o que nós chamamos de real time, são processos de tempo real do sistema operacional. Se é do sistema operacional, tá ali dentro das priorites que vai de 1 a 99. Nós não usamos priorite zero, por isso tem que atrás eu falei supondo priorite zero, porque nós não usamos priorite zero. Naquela imagem eu precisei. Então os processos vão chegando, sempre que eu chego aqui em 1 é real time. Processos de real time tem prioridade máxima sobre os processos do usuário, porque a manutenção do sistema operacional é mais importante do que o usuário. O usuário só é o cara que pressiona o botão power. Na visão da máquina é só o cara que colocou ali power. Bom, então os processos do usuário entram aqui em cima, de 100 para cima. Então aqui eu tenho os intervalos e tal. Bom, todo o processo de usuário quando ele é criado é fixo na 120. Funciona assim. Ajuda 120 aqui. Você criou um processo agora, um processo seu. Processo seu aí. Então ele vai entrar aqui em 120. Você pode descer ele até 100. Você não pode pegar um processo de usuário e colocar abaixo de 100. Você também não pode passar de 139. Então você tem que ficar nessa área verde aqui com o seu processinho. É brutal a diferença. É uma diferença brutal. Coisa que executariam em dias em 120 se você colocar em 100 vai para horas. Estou brincando não. O dump de bancos de dados aconteceu com o banco de dados. Para isso nós alteramos o tal de nice ou incrementamos o nice. Isso eu nunca gostei no livro do Linux. O Linux todo o processo assume priorite 120. E aí você pode executar um renice em menos 20. Você iria para 100. Então quer dizer que a prioridade real é o priorite menos o nice. Vamos dar uma olhada aqui. Clear top. Vamos chamar o top. Aqui tem priorite. Priorite em menos 1 ou nice menos 1. 120 menos 1 dá 119. Olha esse cara aqui. Eu tenho a prioridade 120 menos 0. Então 120 aqui. Não está parecendo 1. Ele é imaginário aqui na nossa mente. Olha esse cara aqui mesmo. Você pode criar processos e colocar esses nices. Ele é real time do kernel. Quer dizer que nós não podemos mexer nem saber a prioridade desse processo. Essa é a verdade. Nós temos um quantum de tempo que é uma fatia de tempo. Cara da foda hoje. Nós temos uma fatia de tempo e que processo ele tem aqui. Então ele está aqui em execução. Ele tem uma fatia de tempo. Ele esgota sua fatia de tempo. Não terminou. Ele vai para o final conforme eu já expliquei. Aqui é o tal do quantum de tempo. Pré-epsão de processos? Bom, todo o processo ele pode ser executado num processador e os seus contadores são congelados e ele vai para o final da fila. Se você fosse um processo, nós iríamos iria noite. Tudo seria dia e seria trabalho o tempo inteiro. Mas você não sabe em alguns momentos você dormiu. É mais ou menos como é sua vida hoje. Você trabalha, vai para casa, apaga, volta para o trabalho. É assim? O que aconteceu enquanto você ficou apagado? Você não ficou sabendo. Porra cara, nós já estamos vendo processos. E naturalmente nós vimos que o processo de usuário é quem menos tem prioridade de execução. É o cara que mais vai ali esperar. Mas por que isso? Você tem que entender que todo o programa de usuário tem muito I.O. Se você tem muito I.O, ou seja, muita coisa esperando, vamos mostrar aqui para vocês aqui um top. Aqui eu tenho 168 tasks que podem ser threads, processos, já vimos isso. O número que está rodando, o que provavelmente eu não sei quantos núcleos eu tenho aqui, 167 estão praticamente dormindo. Por que tem tantos processos dormindo em slipping? Porque estão esperando dispositivos de entrada e saída. Então o grau de processamento é baixo porque tem muito I.O. aqui acontecendo nessa máquina. Hoje o dia está meio que pegando fogo galera. Essa máquina entrou em swap cara. Ah não, não, não, não. Ufa que susto, total de swap, vazio, tá bom. Nada usado, tá bom. Eu estava assustado, você vai que essa máquina entrou em swap? Então eu tenho muitos processos dormindo, tá? Eu tenho um que bom também, não posso acontroler um errado aqui da máquina, tem muitas visualizações aqui. Tudo apt install, HGTOP. Caria bem legal para você, bem grafo, mais visual, não está no meu livro. Ele é opcional, então você tem que instalar ele. Mas ele é conhecido, tá? Muito conhecido. HGTOP, opa. Eu gosto muito desse processo porque eu consigo enxergar como é que está a distribuição de trabalho entre as linhas de processamento. O processador físico pode ser dividido em linhas de processamento. E essas linhas de processamento podem ser utilizadas como se fossem processadores reais. Então, por exemplo, a minha máquina tem 72 processadores na visão do sistema operacional. A real mesmo ela tem 36, físico e real. E cada um desses físicos real, eles têm duas linhas de processamento, cada um muito fracinhas, vamos chamar fracinhas assim. Então essa minha máquina é para quê? Para rodar inúmeras coisas ao mesmo tempo. Para centras coisas ao mesmo tempo. Vou pegar aqui para vocês verem. Então, por exemplo, nesse exato momento tem uma, duas, três, quatro, cinco, seis, sete, oito máquinas virtuais ligadas e funcionando. Essas que estão vedindo, estão tudo funcionando. Máquinas funcionando, virtualizadas. Então eu coloquei um sistema operacional de servidor e virtualizo inúmeras máquinas ao mesmo tempo. Para segmentar os processos e as pessoas e o que eu acesso e no que eu estou trabalhando. Para que a minha vida pessoal não traparça a minha vida real. O profissional, nem a minha profissional, acabe impactando na minha pessoal aqui. Basicamente isso. Então eu gosto muito do H-TOP, porque eu vejo como está a distribuição de trabalho aqui nessas linhas. Então, teoricamente, essa máquina tem dois processadores reais, essa máquina é virtual, com cada um com duas linhas de processamento. As tradições encaradas como se fosse um, como se fosse processos, então elas parecem que elas contam como processos. Aqui ele até separou 64 tasks e 94 trades. Vamos lá. Beleza. Então aqui nós temos o I.O. Impactando bastante. Quando é servidores, eu juro, quando é servidores o número de processos chega muito próximo ao número de linhas de processamento que você tem. Digamos, eu tenho 20 núcleos naquele processador, naquela máquina, naquele servidor. Ele é um servidor. H-T-T-P, por exemplo. Cara, é comum você entrar lá e ver 20, 18 processos em execução no mesmo momento. Bom, você naturalmente no Linux você pode importar o Schedule no seu programa em C++ e usar normalmente, cara. Basta você chamar ele o Sketch.C. E você vai ver toda a implementação do Linux para escalonamento, para decisão, para troca de contexto. Está tudo lá nesse arquivo. É um arquivo demoníaco. É uma estrutura interessante. Você consegue obter várias informações de como foi um processamento, como está aqui o e do processo. Então, você pode obter essas informações que você pode interagir com tudo isso via programação. Beleza? Matrizes de prioridade. Cada fila de execução tem duas matrizes de prioridade. A matriz de prioridade é a ativa expirada. Então, você tem duas matrizes que esse Schedule C trata e por essa matriz você sabe teoricamente qual seria o melhor processo dentro de sua prioridade. Eu simplifiquei. No início, eu falei para vocês, olha, você tem lá, então, uma lista encadeada com uma fila. Então, no Linux, além disso, você tem uma matriz de decisão dentro da prioridade. Todo o processo tem um max priority, que é um número padrão ali, é 140. Você pode então ir de 0 a 139. Os processos de usuário são 120. Processo real time pode ser de 0 a 99. E nós podemos fazer um ajuste com renasce só dos processos de usuário. Time Slides você também vai encontrar em Schedule.C, que é onde você define o tempo de execução de cada slot de processamento. Vamos colocar assim, como eu já falei. No livro do Tannibal, ele chama de quantum isso aqui. Próxima aula vamos falar sobre Schedule e como é feito o cálculo da Schedule. Até mais, tchau.