{"id":20266612,"url":"https://github.com/pferreirafabricio/cpu-scheduling","last_synced_at":"2026-03-19T15:01:58.048Z","repository":{"id":134793957,"uuid":"305539249","full_name":"pferreirafabricio/cpu-scheduling","owner":"pferreirafabricio","description":":bar_chart: Explicação simples sobre escalonamento de CPU","archived":false,"fork":false,"pushed_at":"2021-06-21T17:28:30.000Z","size":36,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-05T21:53:27.821Z","etag":null,"topics":["cpu-scheduling","fifo","hpf","hrn","mfq","mq","pt-br","rr","sjf","srt"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pferreirafabricio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-10-19T23:40:54.000Z","updated_at":"2024-11-28T13:33:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"b4381af8-6963-48e9-a5f4-879dc0bcff18","html_url":"https://github.com/pferreirafabricio/cpu-scheduling","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pferreirafabricio/cpu-scheduling","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pferreirafabricio%2Fcpu-scheduling","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pferreirafabricio%2Fcpu-scheduling/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pferreirafabricio%2Fcpu-scheduling/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pferreirafabricio%2Fcpu-scheduling/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pferreirafabricio","download_url":"https://codeload.github.com/pferreirafabricio/cpu-scheduling/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pferreirafabricio%2Fcpu-scheduling/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30710543,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-19T05:29:31.190Z","status":"ssl_error","status_checked_at":"2026-03-19T05:28:25.821Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpu-scheduling","fifo","hpf","hrn","mfq","mq","pt-br","rr","sjf","srt"],"created_at":"2024-11-14T12:10:27.531Z","updated_at":"2026-03-19T15:01:58.043Z","avatar_url":"https://github.com/pferreirafabricio.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Escalonamento de CPU 📊\n\n\u003e Não Preempritivo: O processo __não__ pode ser interrompido \u003cbr/\u003e\n\u003e Preempritivo: __Pode__ ser interrompido\n\n## :arrow_right: Escalonamento FIFO (First In First Out) :arrow_lower_right:: \u003cimg src=\"https://img.shields.io/badge/-n%C3%A3o%20preemptivo-red\" /\u003e \n  - O escalonamento *FIFO*, significa o primeiro processo a “chegar” será o primeiro a “sair”, ou seja, ser executado, além de não poder ser interrompido até o final de sua execução (não preemptivo).\n  \n  __Exemplo:__ Em uma analogia simples com um estacionamento de um shopping, em que há uma fila para poder entrar e sair do mesmo, o 1º carro a chegar, será o 1º a sair também. \u003cbr/\u003e\n\n## :chart: Escalonamento HPF (Highest Priority First): \u003cimg src=\"https://img.shields.io/badge/-n%C3%A3o%20preemptivo-red\" /\u003e\n  - Nesse escalonamento, o que define a ordem de execução é a prioridade do processo, logo processos como o do sistema operacional, por exemplo, serão executados antes de outros mais secundários.\n  \n  __Exemplo:__ Utilizando ainda o exemplo do estacionamento, seria o caso de chegar um carro ao estacionamento de uma pessoa super importante do governo, sendo colocado como o 1º da fila para entrar no estacionamento. \u003cbr/\u003e\n\n## :pinching_hand: Escalonamento SJF (Shortest Job First): \u003cimg src=\"https://img.shields.io/badge/-n%C3%A3o%20preemptivo-red\" /\u003e\n  - É quase o contrário do *HPF*, definindo agora o processo a ser executado pelo seu tamanho, ou seja, quanto menor o processo mais rápido ele será executado, sendo posto assim para ser 1º que outros processos.\n  \n  __Exemplo:__ No caso do estacionamento, seria o caso de alguém com um meio de locomoção menor, como uma bicicleta, entrar antes de um carro por exemplo, visto que uma bicicleta é menor e mais rápida de entrar e “estacionar”. \u003cbr/\u003e\n \n## :balance_scale: Escalonamento HRN (Highest Response-Ratio Next): \u003cimg src=\"https://img.shields.io/badge/-n%C3%A3o%20preemptivo-red\" /\u003e\n  - Administra de forma dinâmica os processos que estão na fila, levando em consideração seu tempo de execução e prioridade, unindo assim os escalonamentos *SJF* e *HPF*, colocando o processo com maior prioridade para execução, mas depois de concluído, podendo trocá-lo por um processo com menor tempo de execução.\n  \n  __Exemplo:__ Em um estacionamento, seria o caso de ser a vez da bicicleta entrar, contudo acaba de chegar o carro do presidente do país para entrar no estacionamento, passando assim a entrada ao carro. \u003cbr/\u003e\n\n## :small_red_triangle_down: Escalonamento SRT (Shortest Remaining Time): \u003cimg src=\"https://img.shields.io/badge/-preemptivo-green\" /\u003e\n  - É a versão preemptiva do *SJF*, ou seja, pode ser interrompida durante sua execução. Possui a mesma ideia de processar primeiro processos menores, porém caso o processo que estiver sendo executado tiver um tempo para ser finalizado maior que o tempo de execução do novo processo que chegou, ele será substituído, voltando para o final da fila. \u003cbr/\u003e\n - Contudo, voltará somente com o tempo que faltava para terminar seu processamento, ou seja, se o Processo A levava 12s para ser concluído e foi interrompido com 5s de execução, pois chegou um processo B que levava só 2s para ser processado, o processo A voltará para o final da fila faltando 7s para terminar de ser processado pela CPU.\n \n  __Exemplo:__ Fazendo uma analogia com um supermercado, podemos imaginar uma fila de um atendimento caracterizado como “Caixa Rápido”, a onde há alguém (Pessoa A) sendo atendido com 7 produtos, dos quais 2 já foram passados pela caixa, porém acaba de chegar mais uma pessoa (Pessoa B) a fila com apenas 2 produtos, logo essa pessoa passará imediatamente a frente da Pessoa A e a mesma voltará ao final da fila, agora com apenas 5 produtos restando. \u003cbr/\u003e\n\n## :arrows_clockwise: Escalonamento RR (Round Robin): \u003cimg src=\"https://img.shields.io/badge/-preemptivo-green\" /\u003e\n  - É quase igual ao *FIFO*, com a organização segundo a ordem de chegada, porém nele existe a presença de um intervalo chamado de *Quantum*, o qual define o tempo que cada processo terá para ser executado, terminando esse tempo e o processo não sendo terminado de ser executado, ele voltará ao final da fila, tendo seu contexto salvo, e aguardará ser processado novamente.\n  \n  __Exemplo:__ Utilizando as pessoas A e B do exemplo anterior, na mesma fila do supermercado, imaginemos que existe um tempo (*Quantum*) para a atendente do caixa conseguir passar as compras, por exemplo de 10s, todas as compras da Pessoa A levam cerca de 21s para serem passadas e da Pessoa B 8s. \u003cbr/\u003e\nAssim quando for a vez da Pessoa A ser atendida, ela terá que voltar ao final da fila novamente, com seu contexto de 11s restantes para terminar de ser atendida (visto que 21s da Pessoa A menos 10s da atendente é igual aos 11s restantes), porém a Pessoa B será atendida de uma vez, sem a necessidade de voltar novamente a fila. \u003cbr/\u003e\n\n## :fog: Escalonamento MQ (Multilevel Queues): \u003cimg src=\"https://img.shields.io/badge/-preemptivo-green\" /\u003e\n  - Cada tipo de processo é separado em uma fila específica para ele, havendo agora uma ordenação de quais filas são mais importantes e precisam ser executadas primeiro, ou seja, processos do sistema ficam em uma fila que tem a maior prioridade, processos secundários ficam em outra fila (podendo ter um outro tipo de processo como o *FIFO* por exemplo), processos *RR* ficam em outra fila e assim por diante, sendo assim, cada fila pode ter um tipo diferente de escalonamento.\n  \n  __Exemplo:__ Fazendo a analogia com o as filas de um supermercado, onde há caixas (filas) específicas para cada necessidade (processo), por exemplo, há uma fila para pessoas com necessidades especiais (idosos, gestantes, deficientes e etc), uma fila para compras rápidas, uma fila para compras mais extensas e etc, além de que, dependendo da ocasião, uma determinado fila pode ter uma atenção (prioridade) maior que as demais. \u003cbr/\u003e\n\n## :arrow_right: :arrows_clockwise: Escalonamento MFQ (Multilevel Feedback Queues): \u003cimg src=\"https://img.shields.io/badge/-preemptivo-green\" /\u003e\n  - É baseado em filas encadeadas, ou seja, uma após a outra, não sendo mais separadas pelo tipo de processo. Todos os novos processos são sempre colocados na 1ª fila que tem o escalonamento *FIFO*, assim como a 2ª, 3ª ..., menos a última fila, possuindo o escalonamento *RR*, visto que é necessário que todos os processos sejam finalizados de alguma maneira.\n  \n  __Exemplo:__ No caso de um supermercado, podemos imaginar uma fila que leva logo a outra, sendo que as pessoas que chegaram primeiro são também as primeiras a chegarem a última fila, que tem por objetivo de que terminem todas as compras, acontecendo nela o mesmo [exemplo do escalonamento RR](https://github.com/pferreirafabricio/cpu-scheduling/blob/main/README.md#arrows_clockwise-escalonamento-rr-round-robin-), entre a Pessoa A e a Pessoa B. \u003cbr/\u003e\n  \n## :recycle: Contribua\n  Acha que alguma explicação ficou confusa ou que poderia ser melhor? Quer adicionar algum vídeo ou imagem para complementar a explicação? É só mandar um Pull Request com a sua alteração 😃\n 1. Clone esse repositório;\n 2. Crie uma branch com a sua alteração: ```git checkout -b adiciona-video-fifo```\n 3. Commit suas mudanças: ```git commit -m 'feat: Adiciona vídeo de explicação sobre FIFO'```\n 4. Push sua branch: ```git push origin adiciona-video-fifo```\n \n## :page_with_curl:\tLicensa\nEsse projeto está sob a licensa MIT. De uma olhada nela [LICENSE](LICENSE.md) para mais detalhes.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpferreirafabricio%2Fcpu-scheduling","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpferreirafabricio%2Fcpu-scheduling","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpferreirafabricio%2Fcpu-scheduling/lists"}