E aí [Música] o Olá pessoal bem-vindos aula 3 da semana 5 da disciplina de sistemas computacionais vamos lá na aula de hoje nós usaremos conceitos que a gente viu nas aulas passadas a gente fala de ponteiros a gente falou The Strokes está em PDF e nós vamos usar esses conceitos para falar hoje simulação de paginação e simulação de particionamento fixo é primeiramente eu gostaria de pedir que vocês baixassem software para desenvolvimento de aplicações e eu sugiro três dessas aqui vocês podem escolher a visual Studio code o Dev developer ser ou code Blocks aqui eu vou
mostrar para vocês essa telinha do Code Blocks eu instalei naquele endereço que eu passei no slide anterior e tranquilamente eu consigo compilar e executar os programas aí que eu fiz nas aulas passadas e o que eu vou fazer nessa aula com vocês descer tá eu usei particularmente deve ser o deve ser Oi gente e é integrada né uma ideia de desenvolvimento também é livre como Cold né utiliza os compiladores gênio né E aí ele compra ele compila programa sem ser tanto na plataforma da Microsoft Windows como ele tem para ele no como ele tem também
para quem trabalha com máquinas da Apple tá bom ele suporta além de linguagens esse é mais mais ouço ir aí as bibliotecas padrão tá então uma curiosidade ter um escrito Delphi Tá bom então tem que baixar e instalar Epa paginação é como a gente vincular na semana três é uma técnica né de memória virtual e de quebra de processos em páginas né que são uma piada sem Freios na memória principal a paginação ela é implementada normalmente por unidades dedicadas errada bom então a Integradas os nossos processadores no caso da família Intel x86 essa funcionalidade como
a gente falou lá na semana três é parte lá do MMO né o gerenciador de memória na unidade de gerenciamento de memória a paginação ela é feita pela consulta à tabela que relaciona os endereços lineares da página que tá lá na memória de disco na nossa armazenamento secundário né com os endereços físicos aí da memória principal chamados de frame tá então a gente vai ver aí no desenho como ficaria né então a gente tem a subdivisão das mortes Olha que vai chamar de memória física né em pequenas adições que a gente vai chamar de frente
e aí você vai permitir uma utilização mais eficiente dessa memória né os cremes da memória principal física eles vão corresponder a páginas né eu tenho que a gente tá chamando de memória virtual e aí você vê que tem uma correspondência das páginas aos Friends né alocação de memória é requisitada por página então a página que diz aí que eu preciso de um espaço de memória nem a página é a nossa menor unidade né Então aí a página é mapeada nesse treino e da memória Nesse contexto cada processo do nosso computador tem a sua própria aí
tabela de páginas em que cada endereço virtual Então veja eu tenho os meus endereços virtuais corresponde a endereço físicos né Então veja aí que eu tenho endereço virtual correspondendo a endereço físico onde a informação está efetivamente armazenada visto que a informação está dividido em pequenas unidades o armazenamento dela não tem que ser sequencial né como a gente pode ver aqui na figura ele não é sequencial o que elimina a questão a aplicação externa de memória então aqui eu tô fazendo como se fosse um naquela tabela de páginas e tô dizendo que a minha tabela de
páginas né ela tem aí uma estrutura composta né Por registradores né E aí você tem o número da página lá na memória principal né E é isso que nos remete a ideia de uma Street né uma estrutura aí da minha página são né É só para relembrar o deslocamento né Ele é o deslocamento no endereço da memória é e além dele você tem o outros Campos aí é Como por exemplo o bit de residência que quer dizer se aquela informação tá na memória principal não o endereço virtual ele também tem outros Campos né o bit
de proteção para dizer se a leitura escrita o bit de modificação se a página foi modificada ou não né o bit de referência é né para saber se a página foi referenciada tem um bit de quer e para ver se esta Militar dos principais aqui no nosso caso nossa conversa vai ter lógico simplificada é um bit de validade que ele vai indicar se a página virtual é correspondente né naquela estante está carregada na memória principal ou não então sensibility aí de validade o bit tiver com o valor um a página virtual tá carregada na memória
né e o número da página virtual é convertido aí no número da página na memória principal na física né e o número da tem esse valor né de se ver tiver como 10 a página virtual não tá carregada na memória né E aí é essa é uma outra situação que a gente vai ter Então a gente vai facilitar aí simplificando na no disco né cada par e esse Beach de validade revisando aí um ele tá na Hum tá na memória principal física é E vai ter um ponteiro aí para a página principal na hum né
Na outra estrutura a gente vai ter aí ela composta por frames E aí o frame vai ter o número da página física né e o conteúdo então para exemplificar isso a gente definiu duas estruturas a primeira estrutura é uma estrutura do tipo moldura né cm onde eu tenho Beach de validade o conteúdo da página também simplificado né o conteúdo aí da minha página é só um chá né e eu tô dizendo que essa história que eu tô dando o nome desse tipo de frango ainda eu tô usando até pudesse na outra é estrutura eu tenho
a estrutura da página né aqui é a minha memória é física aqui é minha memória virtual né e a página Eu tenho também o bit de validade é para dizer que tem informação lá o conteúdo né E essa informação tem então quando essa informação aí subir para raiz conteúdo vai ser passado para o conteúdo da hum né e eu tenho aí um ponteiro né que vai apontar para onde eu tô armazenando né voltando aquele a figura lá onde eu tinha os ponteiros das páginas para as memórias memórias janela lá no friends da memória RAM e
eu tô chamando essa estrutura de página né de peixe e um disco de 20 espaços aí né normalmente diz que a maior quer hum né onde eu tenho aí esse disco é do tipo peixe que esse outro tipo aqui bom então pessoal eu quero que vocês tentem aí fazer em casa eu usei essas duas estruturas nesse primeiro forte tem aí né eu tenho laço aí de repetição que vai trabalhar com o disco e no conteúdo do disco eu vou por o caracter a né b c d e até 20 né então vai ser dia até
é para cada uma daqueles Campos conteúdo disco E aí eu vou mudar o bit de validade já que eu tô colocando conteúdo no disco o dever do disco vai para um né e o ponteiro vai para no porque eu ainda não carreguei na memória principal na hum eh ele tá só em disco aí eu tô simulando que a quinta e a décima página né a página que tem o conteúdo de disco como e e o conteúdo de disco como J né vamos supor que essas são as minhas páginas mais usadas né então eu vou subir
essa e lá na minha memória RAM né E aí eu vou fazer o quê como eu tenho dois espaços né eu tenho que ver na hum qual é o espaço que tá livre né e é isso o bicho de validade da ran for zero eu troco esse bicho de validade para um né coloco Esse é o ponteiro né do disco apontando para o endereço da onde eu tô colocando aí onde eu tô subindo esse conteúdo que tava no disco né E aí Finalmente eu passo conteúdo aí do disco para hum né E ela é só
vou fazer nos dois casos né Tanto para o e quanto Projota tá E aí do lado na figura vocês estão vendo né eu tenho aí o conteúdo do disco nesse primeiro conjunto né E aí vocês estão vendo que caso do né e do j eu tenho meu ponteiro aqui apontando para o endereço da rã e aí a E aí vocês vão ver a ham Femme né Onde tem um conteúdo e E aí o bicho é de validade Agora como ela está sendo usada né nesse caso ela tá completa porque eu só tinha dois espaços valendo
um a com isso eu simulei aí uma página são bem simples pessoal E aí eu espero que vocês consigam fazer aí nas suas casas nos seus após hospitalares aí os seus editores de programa se tá bom então vamos lá agora eu quero mostrar para vocês um outro contexto de simulação onde a gente vai falar de particionamento né Eu queria que vocês vissem a ideia que a gente falou lá na semana três né porque para trabalhar com ele aqui é de memória né quando a gente tinha os processadores Aí lá antigos né os sistemas antigos a
gente trabalhava em mono programação onde você tinha aí o único processo executando por vez no processador agora a gente a multiprogramação né Isso é vários processos compartilhando o único para o único processador né e multiprogramação existem existem basicamente duas estratégias aí para divisão da memória principal para manipular os processos uma é o particionamento físico outra o particionamento por Demanda variável né na figura dinâmico né nessa figura aí do lado no slide né você vai ter os dois tipos aí de particionamento fixo o primeiro né é dele ele tem um particionamento fixo com tamanhos fixos né
então cada partição tem o mesmo tamanho não outra figura Você tem o tamanho variável né então você é um apartamento com mãe piada E aí casa ontem o seu tamanho tá E além disso eu vou agora usar esse exemplo do particionamento é bom tamanho eu fico seu para gente faz ganhar nossa primeira e simular a segunda simulação aqui nessa aula então você vai definir um typedef struct E aí esse teste que tiver chamar partição onde você vai ter um bit de validade né que eu trouxe uma novidade eu defini acidente de validade como inteiro mas
como ele é o inteiro sem sinal né e acaba reservando o espaço menor aí gasta menos memória né onde zero a partição vazia e um é que a partição né Tem um processo na memória e aí você vai definir uma uma fila de processos é um ponteiro de processos aí onde você vai ter cinco processos né E aí cada partição né o tipo partição eu vou criar uma hum com dois espaços aí e aí nessa hum né ela vai ser formada de partições né um vetor de participar é um vetor de certo É como se
eu tivesse dizendo que isso aqui é um vetor né e cada parte e essa mais top guardando um é o inteiro BV e se for zero a partição tá livre se for uma partição tá ocupada né e o processo né o processo o processo aí é um vetor não é de caracteres né até cinco caracteres então eu vou dizer aí alguma coisa que vai estar processando né E aí cada um desses na Como se eu tivesse dez espaços desses né Cada um ocupado por uma história no meu programa amei eu vou fazer a inicialização dessa
hum hum vai e aí depois ver como é que vai chegar para você com essas nesta né E aí eu vou mostrar por exemplo executei processo tá aí processo e como não seria uma simplificação de entrar novos processos usando então a strict que a gente definiu lá no slide anterior né que você tem esse ter que te dar partição que tem o bit de paridade BV né e tem a e essa escrita em cinco caracteres a gente usou essa Stretch fez aí o nosso a nossa hum né sendo um vetor disse trote aí de 10
posições inicialmente a gente vai inicializar essa hum colocando o bit de paridade aí o bit de validade desculpa em 10 né na sequência a gente vai fazer o papel aí do processador e vai alocar processos aí para nossa Hum então de 0 a 10 para cobrir todo o vetor se o bicho de validade é zero O que que você vai fazer né eu tô pedindo nesse caso para o usuário aí é digitar né o processo que vai subir aí na então eu vou mudar o bit de validade para um E aí se vocês acompanharem aqui
pela tela a tela né vocês vão ver que eu coloquei aí dez processos 10 palavrinhas reservadas como se fosse processo não é do ar eu senti então depois de finalizar essa alocação né um certo período de tempo eu vou simular aqui dois processos foram finalizados né O que tá na terceira posição ainda minha Hum e o que tá na 9ª posição da do que ele foi finalizado eu fiz uma outro status aqui da rã e vocês vão ver que na terceira agora o meu Beach de validade É zero né tá vazio não tem nenhum processo
e na nona também acontece a mesma situação Então vamos supor que agora eu vou subir mais dois processos aí para mim aham então eu faço lá de 0 a 10 aonde encontrar um vídeo de validade zero né no caso aí vai ser na terceira La Nonna eu vou alocar um processo da do que eu fiz isso agora se eu fizer novamente uma visualização da minha hum né vocês vão ver que a gente trocou aí e acabou ficando agora né a página da a minha Ana é a situação da minha hum agora ficou uma situação onde
a e eu vou ter na terceira posição eu tenho 1 suíte na escrito maiúscula até e um scaef aqui na nona posição então com isso eu consigo mostrar Aí como eu como eu simular Yahoo um particionamento físico aí alocação de memória de partições né para processos eu fiz aqui de uma maneira sequencial mas é lógico né Vocês podem melhorar esse código por exemplo definindo a função de inicialização e alocação já que ela se repetem né a gente pode chamar essa função empacotar ainda uma função eu queria mostrar para vocês essa figurinha que vocês viram na
semana três Onde está lá no desafio para vocês agora fazer eu vou usar mesma estrutura que a gente usou mudando só Uns detalhes é e vez agora de trabalhar com partição física pizza trabalhar com partição variável então vocês definam lá na sua Street 1 E aí eu pedi para o tamanho da partição né E aí de repente uma vai valer três outra vai valer quatro porque aqui que muda na hora que o processo força locado o processo também vai ter que ter o tamanho e aí você vai verificar se aquele tamanho da partição aonde ele
vai ser atribuído caro né A ideia é que cada processo ele vai pegar a menor parte são na qual Ele cabe né a ideia do algoritmo best Fit de tal modo que você minimiza o desperdício de memória em cada partição para evitar a fragmentação interna Então pensa em mim fazer em uma dessas duas maneiras né Vocês podem fazer uma fila de Jobs para cada partição ou melhora que se Vocês conseguem também fazer uma fila única né para todas as partições não necessariamente melhor né mas é uma coisa interessante de se fazer e essa fila de
job vocês podem fazer pensar em vetores ou mesmo pensando em uma lista de ligada dinâmica né e vocês aproveita estudar um pouquinho de alocação dinâmica aí de linguagem se vocês ainda não fizeram é aqui é mais uma questão de curiosidade né esse é o tipo de parcelamento variável e se não tô pedindo para você seria o desafio dos Desafios né A cada novo processo que a memória é dividida né A cada novo processo que a memória recebe ela é dividida de tal forma que as partições de diferentes tamanhos elas sejam posicionados aí como a desalocadas
é Livres da memória e aí a medida que os processos é sejam colocados aí finalizado suas partições também não se livre podemos ser ocupadas no todo né ou em parte por novos processos como aí vocês vem na figura esse esquema de organização de memória também é chamado de particionamento por Demanda bom pessoal com essas duas simulações eu encerro a aula a semana 5 da disciplina sistemas computacionais e também encerra a semana espero que vocês tenham quem não conhecia linguagem ser tenha conseguido pelo menos começar a entender essa linguagem quem já conhecia Aproveite aí para se
desafiar e trabalhar com coisas novas podemos fazer simulações novas trabalhar com alocação dinâmica estudarem as estruturas de dados históricos que a gente viu um abraço a todos e até a próxima semana Obrigada tá E aí E aí