fala pessoal tudo bem ah na última aula a gente encerrou o assunto sobre trads claro que a gente não esgotou o assunto então fica o convite para você se aprofundar um pouco mais caso você tenha interesse eh é muito importante principalmente em programação tá principalmente em programação assíncrona então conhecer profundamente sobre trads é muito importante né ah a gente fez a aula teórica e fez a aula prática né encerramos o assunto mas fico o convite para você se aprofundar beleza na aula de hoje então a gente vai tratar sobre gestão de memória Beleza então vamos
fazer aqui uma introdução bem breve sobre memória ah pensa um pouquinho na memória lá do seu computador né quando a gente fala de memória normalmente né pros Legos vem aquela memória do celular lá que tem o espaço de armazenamento né mas pra gente que tá na área né já algum tempo ã é comum você pensar na tal da memória RAM né então você tem lá memória eh a memória RAM né que é uma memória ã volátil quando você desliga o computador né ela para de se alimentada e ela perde o conteúdo dela então aquele dispositivo
se você nunca viu Dá uma olhada no Google o que que é um uma né como é uma plaquinha de memória RAM né Mas você vai ver que é uma plaquinha compridinha ã com vários os chips né de armazenamento tá E esses chips né eles precisam ser alimentados por energia elétrica então basicamente dentro de uma memória né de uma memória RAM o que tem ali dentro são zeros e uns né são os dados né em formato binário então quando a energia alimenta aquilo lá né zeros e uns né então zero tá ligado aliás zero tá
desligado um tá ligado etc né aquilo forma forma lá um conjunto binário que quando interpretado pela máquina né Ah vai ser o programa ou aquilo que a gente colocou na memória Beleza então a gente tem dois tipos de memória aquela memória quando e a gente ouve Ah meu celular tá sem tá sem memória né na verdade tá sem espaço né memória no sentido de que pra pessoa pode parecer memória de relembrar de lembrar de guardar né armazenar mas ah não é exatamente essa memória né aquilo lá é espaço de armazenar e é algo que se
você desligar o celular aquilo não se perde Você pode tirar o chip pode colocar em outro celular né isso se a gente tiver falando de de um chip Extra por exemplo Então isso é o que a gente chama de memória ou dado não volátil né ele não se perde quando desligado quando par quando a gente para de alimentar ele continua lá e assim são os HDs os ssds os pendriv CDs DVDs etc Tá então não volátil é aquilo que não se perde quando desligado é que também se a gente parar para pensar não tem como
desligar um DVD desligar um CD né não faz muito sentido mas a ideia é aquilo está gravado ali e aquilo tem um tempo de permanência né Se você dar uma pesquisada você vai ver que tem validade do dado guardado num HD tem validade do dado guardado num DVD né E E por aí num pend drive Qual é a validade bom a validade é o tanto que aquela mídia vai durar claro que se a gente parar para pensar num DVD que claramente não é usual hoje né Eh se você riscar perdeu o dado é o que
acontece com um HD antigo né um HD de disco né não um SSD um SSD você pode chacoalhar que não vai acontecer nada basicamente né um pen drive você carrega no bolso Às vezes você até toma chuva com o pen drive lá tá funcionando de boa né então ele tem uma resiliência maior mas ele né O importante é lembrar que ele é é não volátil aquilo não se perde a memória RAM quando você desliga a máquina né se acabar a energia você perdeu o que tava lá então você tava lá num né talvez não sei
se deve ter acontecido com você ou não mas eu já meu pai fazendo declaração de imposto de renda tá lá no programa acabou a memória acabou a energia né acabava a energia do do desktop né então ele tava lá no desktop acabava energia ele perdia tudo não ficava salvo porque nada fica Guardado na memória né Se ela para de ser alimentado aqueles dados ã desaparecem beleza até Existe algum tipo de artigo que mais voltado pra área forense que diz que algo ainda fica lá mas é assim muita especulação em tese né assim em tese e
na prática parou de alimentar não tem mais nada beleza então os computadores utilizam essa hierarquia ah de memória em sua organização né então então a memória volátil que é a memória RAM e a memória não volátil que é Pensa aí como HD né E quando a gente fala de HD já pensa no tal do SSD a memória flash Seja lá o que for mas não é memória RAM é aquilo que você usa para armazenar tá SSD HD pendrive tá então tudo que é não volátil beleza Ah então os computadores utilizam essa hierarquia os celulares também
claro né tem memória RAM e tem memória de armazenamento um smartwatch a mesma coisa se a gente tivesse falando de um sei lá de qualquer tipo de computador vai usar a mesma hierarquia Ok ah e o gerenciador né de memória do sistema operacional ele controla quais partes da memória estão sendo utilizadas e quais partes não estão sendo utilizadas Pode parecer ridículo isso né mas é basicamente o que ele faz ele controla o que tá sendo utilizado e o que não tá sendo utilizado tá isso é muito importante a gente já vai o porquê e ele
é o responsável por alocar o espaço na memória Então você tem lá ah sei lá 4 8 16 32 GB de memória RAM como que isso é alocado né quem aloca quem é o responsável por cuidar disso é o são os gerenciadores aqui né de memória né então a gente tem um gerenciador que tem vários algoritmos ali né tem a sua parte lógica e sua parte física e ele é responsável por alocar dados na memória RAM beleza e também ele é responsável por limpar né desalocar né eliminar o que tá lá quando você fecha um
programa então nessa altura do campeonato você já deve lembrar que quando a gente executa um programa Quando eu abro um arquivo quando enfim né quando eu tô fazendo qualquer coisa no meu computador Aquele processo né vai pra memória RAM e hoje você sabe que parte tá na memória RAM parte não está mas vamos pensar num num contexto geral né então o processo vai lá pra memória RAM Então tá tá lá o arquivo aberto a referência do arquivo aberto está lá na memória RAM o que você tá fazendo né o Word que você tá utilizando o
arquivo que você tá aberto lá no Word né a planilha do Excel o jogo que você tá jogando isso tá lá na memória RAM quando a gente fecha Quando encerra o processo seja esse encerramento normal ou não né tipo acabou a bateria do computador acabou energia deu uma Pan aqui no sistema operacional sei lá por algum motivo deu algum problema ou você foi lá e fechou normalmente aquilo precisa sair da memória tá claro que se o computador reiniciar isso daí é abrupto né tipo parou de ser alimentado acabou na hora do post na hora que
a máquina ligar novamente ela vai fazer um flash na memória né vai vai lá vai carrega E descarrega a memória mas ah né para até para fazer testes e tal né se tá tudo bem e etc mas isso já seria caso ainda houvesse né e eu nem tô afirmando que tem porque se ela parou de alimentar porque não tem mais nada isso já seria suficiente para limpar né e bom então se você vai lá fecha o teu aplicativo teu jogo teu documento Seja lá o que for aquele processo que ocupava né que está lá na
memória ele precisa ser encerrado ele precisa ser subtraído da memória e quem faz isso é o gerenciador de memória do operacional tá então o gerenciador de memória do sistema operacional ele é responsável por alocar um processo na memória né Por falar olha processo você vai nesse espaço aqui tá E por tirar esse processo da memória quando você encerra então lembra que a gente falou né que o processo tem vários estados né então você tem lá o estado de bloqueado estado ah de execução né Tem diversos estados quando a gente encerra normalmente sem nenhum problema acontece
que esse encerramento ele é um desligamento em Cadeia né você fechou você tá mandando né Você clicou lá no x deu um Alt F4 sei lá o que você fez mas feito isso da forma convencional o sistema operacional começa a receber ah sinais olha processo tal está encerrando então ele começa a tirar tudo que tá na memória RAM começa a eliminar para liberar um espaço que tá na memória RAM e aí por fim o gerenciador de memória do so vai lá limpa aquele espaço e ele fica livre para receber um novo processo Ok então é
basicamente isso que ele faz uma outra funcionalidade do gerenciador de memória é fazer o que a gente chama de ah de swapping Tá o que que é o swaping ou até paginação lá no no Windows é mais comum falar em paginação mas o processo se chama swaping é fazer aquele esquema de o processo tá na memória RAM e não tá sendo utilizado Então você tem lá um tanto de memória RAM e tá lá um tempo sem utilizar você abriu um documento do Word faz 16 dias que tá aberto lá e ninguém tá usando que que
o sistema operacional faz ele não vai deixar aquilo ativo ele pega aquele processo joga faz o swpp tira da memória faz a troca e joga pro disco por qu a memória RAM Se você dá uma procurada ou se você é do mundo Gamer você vai ver que é comum falar ah quantos MHz você tem essa memória né Aí você vai ver lá 3.000 e não sei quanto 4000 MHz né E por aí vai o que que é isso é a velocidade que essa memória tem né de leitura escrita vamos dizer assim né é a velocidade
com a qual você consegue operar dentro daquele daquela placa de memória Quanto maior melhor Porém tem que ser suportado pela pela pela placa mãe né mas Quanto maior melhor então a memória RAM por ela ser um chip muito menor por ela tá tudo ali as informações estão todas ali organizadas em bloquinhos e ela tem essa velocidade rápida é mais rápido na grande maioria tratar dentro da memória do que no disco principalmente se a gente não tiver falando de SSD se a gente tiver falando de um disco magnético né se você deitar no Google lá você
vai ver a imagem de um disco magnético é como se fosse um CD né É um disco exato mente e ele é magnético tem uma agulha que vai escrevendo dados naquele disco E aí para chegar numa parte de uma informação você tem que esperar uma volta do disco né E precisa procurar onde tá essa informação isso é muito mais lento por isso que quando você troca o teu HD por um SSD você fala putz é muito mais rápido e é porque não é um disco né é uma memória flash é como se fosse um pendrive
Zão né só que muito melhor Então as informações estão organizadas de uma forma bem interessante e a velocidade daquele chip é muito maior Então esse papel hoje é da memória RAM ela tem a velocidade maior do que o disco em 90% ou mais né em 99% das máquinas tá um caso que quase que se iguala né É o caso recente né no caso recente da data dessa aula que é a que são os chips da Apple né os ã os Apple Silicon né atualmente a gente tá no m2 mas toda essa história né do Apple
Silicon ah gerou muita polêmica quando eles lançaram porque tinha tem né um SSD extremamente caro então se você somasse lá um SSD maior na máquina Ficava muito mais caro Tipo dois R 3.000 R 4.000 a mais na máquina por meio giga de de de de dados a mais porque aqu ele é um SSD extremamente rápido porque a Apple nessa estratégia desse tipo de máquina apostou em fazer swaping mas um swaping muito rápido então a memória já é uma memória muito rápida que tá tudo no mesmo chipinho é bem pequenininho né menor do que uma unha
atualmente né o processador a memória né é menor do que uma unha né se você olhar para tua unha menor que isso então é muito rápido é muito pequeno tá como é muito pequeno nota que as coisas estão muito Pertinho então muito veloz mas ainda assim eles apostaram num SSD muito veloz muito muito rápido para fazer swaping como Se Tudo estivesse na memória RAM por isso que você né se você já viu review se você procurar você vai ver a galera falando que é uma super máquina né é muito rápido etc né Por conta desta
desta estratégia Tá mas isso não é o comum normalmente a memória é mais rápido do que o do que o disco do que o SSD tá então a memória principal é a memória RAM a memória de apoio a memória secundária é a memória de armazenamento e o swapping ocorre porque a memória RAM Ah ela é finita né Ela é mais é caro né você ter você não tem 500 GB 1 ta de memória RAM você vai ter lá 32 normalmente né o 8 GB de Ram aí os gamers 16 32 por aí vai né servidores
vão ter muito mais do que isso né servidores sim pode chegar 1 taa né ou mais mas é caro né e a placa mãe precisa suportar então como é mais caro você guarda os teus dados numa memória secundária e esse swpp ocorre porque o espaço na memória Ram ou está acabando ou aquilo que você que tá lá na memória RAM não tá não tá sendo utilizado n então há 16 dias você abriu um arquivo e deixou ligado lá e você não tá utilizando o so vai tirar aquilo da memória RAM vai fazer o swpp para
um arquivo físico no disco tá E vai liberar aquele espaço da memória RAM mas se continua se você der um Alt Tab você vai ver que o teu sei lá teu Word tá aberto naquele arquivo quando você der o Alt Tab e voltar para aquele arquivo pode ser tão rápido que você não vai perceber mas o so vai fazer o swpp de volta vai pegar o que tá lá no disco e trazer de volta pra memória e você segue a tua vida normalmente você continua editando no arquivo normalmente Então esse é o swpp tá é
comum para quem instala o Linux por exemplo Deixar uma partição para Swap tá que é justamente a partição aonde né o espaço no disco né ou o SSD entenda que quando a gente falar disco é o SSD ou é o HD tá não importa é a m memória secundária tá então é normal você deixar um espaço de Swap para fazer essa paginação né para fazer essa troca beleza no Windows isso chama paginação mas o conceito é sapping OK então Seguindo aqui ah e pra gente adentrar nos conceitos de gerenciador de memória existe e um conceito
muito importante que é o conceito do mmu o memory Management unit né a unidade de de gerenciamento de memória esse é a parte hardware que faz né é o módulo de hardware que vai fazer esse mapeamento de endereços lógicos ou seja o que tá lá no teu HD ã e os endereços físicos tá então esse carinha aqui vai fazer né os endereços lógicos parecer endereços físicos então lá pro hardware para quando você tá colocando alguma coisa na memória Ah o so começa a abstrair tudo isso você não precisa saber se o dado que você tá
que você tá utilizando tá no disco ou tá na memória RAM você não precisa saber isso acontece de forma transparente e quem faz esse mapeamento é o mmu tá aqui embaixo tem um esquema e tem uma legenda Ah não vou entrar né Muito mais a fundo no mmu Mas se você quiser dar uma aprofundada pesquisa aqui pelo translation loable Lucas buffer tá perdão Então procura por esse termo tá que é o tlb e dá uma aprofundada mas isso aqui é realmente para quem vai trabalhar com so de forma mais profunda Ok mas lembra que esse
cara existe e quando a gente começa a falar então né olhar para esse m1000 e falar de estratégias de gerenciamento de memória a gente pode dividir isso basicamente em dois grandes grupos tá o primeiro grupo de estratégias né são as estratégias de gerenciamento que permite a troca né que permite fazer o swaping pegar o que tá na memória RAM o processo e pôr no disco e vice-versa e o segundo grande grupo são as estratégias que não permitem tá parece Óbvio Talvez né Mas você vai ver que isso faz sentido e a gente discutiu aqui a
necessidade então eu vou seguir um pouquinho mais tá e dentro dessas grandes estratégias tá a gente tem as os algoritmos tá a gente tem os modelos então a gente tem o modelo de monoprogramação sem troca de processos ou paginação que que isso significa é um sistema mono programado um processo de usuário por vez na memória e não permite a troca entre memória e HD Tá o que que isso significa na prática significa que se eu tenho ã um processo né maior do que a memória Ram eu não consigo pôr na memória RAM tá já começa
por aí E se eu tenho um processo que tá lá na memória RAM e tá parado esperando operações de entrada e saída como a gente já discutiu acontece que você vai ficar ali com a máquina travada parada esperando porque não há a troca de processos tá então ele é o mais simples ah né um dos primeiros modelos que surgiu lá atrás naquela história toda que a gente já que a gente já conversou sobre histórico de computadores e aqui embaixo tem uma ilustração de como era essa organização no sentido de arquitetura nas máquinas da época tá
então você vai ver aqui o primeiro tá o número um que basicamente a memória era dividida entre o sistema operacional na memória RAM e programas de usuário na memória RAM tá bem complexo isso aqui para dar um problema de um programa acessar alguma coisa do so né né já o segundo modelo que é bem parecido também ah Era um modelo esse primeiro modelo aqui eram os o modelo dos Main frames né as primeiras máquinas o segundo modelo que só muda a ordem aqui mas é a mesma coisa foi utilizado nos antigos Palm toops tá que
é foram os precursores dos dos smartphones né os vendedores utilizavam para tirar pedido né era você tinha aquela canetinha e tal né e o terceiro modelo também muito antigo era um modelo utilizado em computadores pessoais lá no início né você tinha uma divisão né bem definida de sistema operacional memória RAM programas de usuário e drivers tá e dentro ainda da memória home né desse chip de memória home que é o read only Memory né você não pode gravar já vem gravado de fábrica aqui dentro tinha uma parte do sistema operacional que era a Bills tá
então a Binha gravada aqui dentro então hoje se a gente fala em atualização de Bills nessa época parceiro veio gravada a Bills de fábrica vai ficar não tem atualização não tem como mexer né A não ser que você Trocasse a placa mãe é né Essa época existiu então a gente tinha esse esquema aqui de arquitetura beleza ah falando de mais um esquema de gerenciamento de memória a gente parte então pra multiprogramação com partes fixas que que o que que é né O que significa isso na prática bom multiprogramação você já sabe que são vários processos
em memória e eles são multiprogramados então quando um está parado Lembra daquela formulinhas entrada e saída o stão operacional multi programa ele troca pega um outro processo que está lá na memória RAM junto né e fala Olha tá aqui o teus 15 minutos de fama de processamento e ele segue né com o controle de processamento tá enquanto esse outro processo a fica lá esperando nesse esquema de multiprogramação a gente tá falando aqui de partes fixas então a memória RAM ela dividida em blocos fixos e os processos entram como se fosse uma fila tá então eles
entram em fila encaixando nesse nesses blocos fixos Ah mas fixo como então era definido um tamanho de bloco então tem lá uma memória de 8 GB né então divide essa memória em blocos iguais e é isso que a gente tem tá Isso foi foi interessante né pra época mas traz dois problemas né o primeiro problema é o problema de fragmentação interna e o segundo problema é de fragmentação externa tá fragmentação interna basicamente ocorre quando um processo ele não ocupa o todo desse bloco então ele pega lá você abriu o Word e o Word ocupou metade
do bloco fixo né de memória que o gerenciador de memória ah especificou o que que acontece esse espaço né essa outra metade que não foi ocupado ela é perdida ela não pode ser realocada porque os blocos já estão definidos com tamanho fixo então isso acaba né se se a gente pegasse uma imagem né você veria vários buracos na memória que se a gente juntasse esses buracos daria sei lá né mais um outro tanto para multi programar mas não é possível porque é um esquema de tamanho fixo não dá para rearranjar Então isso é o que
a gente chama de fragmentação interna interna no sentido de o espaço que foi alocado pro processo não pode ser remanejado né Mesmo que ele não esteja utilizando Ok o segundo problema que é o problema da fragmentação externa ocorre da seguinte forma imagina que um processo ele é maior do que um bloco de memória tá então aqui eu tenho até um exemplo Ó imagina aqui que a gente tem duas partições tá uma de 25 e outra de 100 KB Ok não não contíguos tá E aí é criado um processo de 110 KB bom processo 110 KB
cabe num se a gente juntasse um bloco de 125 caberia porém ele não vai ser Ah não vai ser alocado na memória porque ele não tem espaço suficiente Então eu tenho fragmentação externa tá eu tenho espaço sobrando na memória mas ele não é contigo né ele não é ele não forma um bloco novo então eu tenho fragmentação externa vai sobrar espaço fragmentado Mas é externo porque o processo não foi alocado Ok Esses são os dois problemas principais que surgem com esse modelo mas Para para pensar no modelo anterior de de monoprogramação isso era muito pior
né era muito mais lento aqui a gente conseguiu resolver né Muito legal mas surgem esses problemas e aí esse modelo evolui tá então falando a evolução desse modelo surge então a multiprogramação com partes variáveis pô aqui é legal né porque eu não tenho esses blocos em tamanhos fixos esses blocos são variáveis eles vão ser e eles vão ser ajustar dinamicamente de acordo com a necessidade do processo aqui né ficou bacana então aqui eu não tenho problema de fragmentação interna não tenho problema de fragmentação externa mas surge uma desvantagem tá a desvantagem aqui é que se
você parar para olhar esse modelo né ah uma parte da memória né ocupou lá um espaço tal né tava lá ocupado e começou a desalocar né alguém começou a fechar lá os programas né eles começaram Semer errados e você vai ver diversos buracos na memória e esses buracos São problema né Eu seria interessante eu percorrer uma lista né uma lista contínua e eu vou teros onde eu não preciso percorrer ISO me causa né Isso vai impactar numa desperdício de tempo e processamento né então o que que foi pensado para isso bom vamos pegar e vamos
juntar tudo isso né então existe aqui um conceito de a compactação de memória que consiste em pegar os processos e rearranjar na parte baixa da memória então começo construir isso da parte baixa até a parte alta da memória né parte alta e parte baixa eu tô falando dos endereços tá o menor pro maior tá então começo fazer isso e junto tudo sem buracos é mais rápido de ler é mais rápido de achar as informações mas o problema é que esse processo é caro pro sistema operacional né Ele custa performance Então não é um um processo
que dá para fazer o tempo todo tá mas é um processo que é interessante para melhorar a performance tá aqui a gente tem uma ilustração pessoal de como seria ó o so né sempre o so processo de so estão na memória RAM tá aí eu tenho um processo a e um espação Aí surge o processo B surge o processo C né sai o processo a olha ficou um buraco né aí entra depois o processo e no lugar que era o processo a né então você vê que esse é um esquema muito mais dinâmico é um
esquema que a gente utiliza atualmente e é um esquema que funciona super bem com essa questão aí ah da compactação de memória esse processo fica muito legal tá E para finalizar essa parte pessoal tem aqui ah alguns algumas formas né de percorrer ah a lista de memória tá então tem alguns algoritmos aqui utilizados pelo so eu não vou entrar nesses algoritmos se você quiser dar uma aprofundada mas isso aqui que é realmente para quem vai trabalhar com Kernel com so né então tem esses algoritmos aqui e só para fechar né como é que a memória
Ah vai tratar isso daí então a memória vai manter né vai o o se vai manter uma lista tá eh de endereços de espaços Livres tá ele vai manter uma lista de espaços Livres lá na memória e essa lista é percorrida E aí quando acha um espaço onde é possível alocar um processo ele vai alocar essa forma de percorrer tem alguns algoritmos conforme eu falei que são esses aqui ó first Fit best Fit etc tá então são vários algoritmos que os SOS implementam para percorrer essa lista e falar Opa aqui tem um buraco que eu
posso encaixar perfeitamente um processo e quanto melhor esse algoritmo for mais rápido mais eficiente é a memória e você vai sentir isso claro na velocidade né do teu computador beleza ah tem mais uma ilustração aqui né de dessa compactação mas acho que já deu para visualizar né E para se aprofundar eu deixo aqui dois tópicos tá Ah existe outras duas formas de gestão que é mapeamento de bits e com lista ligada de novo isso aqui é para quem vai trabalhar efetivamente com sistema operacional tá mas se for teu interesse e eu até recomendo Dá uma
pesquisada É bem interessante pode fazer sentido para você tá bom pessoal nessa aula é isso né conseguimos cobrir aqui né uma introdução sobre gerenciamento de memória então a gente se V na aula que vem valeu