{"id":30992,"date":"2019-10-31T21:38:47","date_gmt":"2019-10-31T18:38:47","guid":{"rendered":"https:\/\/prohoster.info\/blog\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod\/"},"modified":"2019-10-31T21:38:47","modified_gmt":"2019-10-31T18:38:47","slug":"operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","title":{"rendered":"Sistemas Operacionais: Tr\u00eas Pe\u00e7as F\u00e1ceis. Parte 2: Abstra\u00e7\u00e3o: Processo (tradu\u00e7\u00e3o)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Introdu\u00e7\u00e3o aos sistemas operacionais<\/h1>\n<p>\nOl\u00e1, Habr! Quero apresentar a voc\u00eas uma s\u00e9rie de artigos traduzidos de uma literatura que considero interessante \u2014 OSTEP. Este material explora a fundo o funcionamento dos sistemas operacionais semelhantes ao Unix, particularmente \u2014 o trabalho com processos, v\u00e1rios escalonadores, mem\u00f3ria e outros componentes que comp\u00f5em um sistema operacional moderno. Voc\u00ea pode olhar o original de todo o material aqui <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/\">aqui<\/a><\/noindex>. Pe\u00e7o que considerem que a tradu\u00e7\u00e3o foi feita de forma n\u00e3o profissional (de maneira bastante livre), mas espero ter mantido o sentido geral.<\/p>\n<p>Os trabalhos de laborat\u00f3rio sobre este assunto podem ser encontrados aqui:<\/p>\n<ul>\n<li>original: <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/Homework\/homework.html\">pages.cs.wisc.edu\/~remzi\/OSTEP\/Homework\/homework.html<\/a><\/noindex><\/li>\n<li>original: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/remzi-arpacidusseau\/ostep-code\">github.com\/remzi-arpacidusseau\/ostep-code<\/a><\/noindex><\/li>\n<li>minha adapta\u00e7\u00e3o pessoal: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bykvaadm\/OS\/tree\/master\/ostep\">github.com\/bykvaadm\/OS\/tree\/master\/ostep<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nPartes adicionais:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446340\/\">Parte 1: Introdu\u00e7\u00e3o<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nE voc\u00ea tamb\u00e9m pode acessar meu canal em <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/bykvaadm\">telegram<\/a><\/noindex> =)<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Vamos considerar a abstra\u00e7\u00e3o mais fundamental que o sistema operacional oferece aos usu\u00e1rios: o processo. A defini\u00e7\u00e3o de um processo \u00e9 bastante simples \u2014 \u00e9 <b>um programa em execu\u00e7\u00e3o<\/b>. Um programa por si s\u00f3 \u00e9 uma coisa inerte, armazenada no disco \u2014 \u00e9 um conjunto de instru\u00e7\u00f5es e, possivelmente, alguns dados est\u00e1ticos, aguardando o momento de ser iniciado. \u00c9 o sistema operacional que pega esses bytes e os inicia, transformando o programa em algo \u00fatil.<br \/>\n Na maioria das vezes, os usu\u00e1rios desejam executar mais de um programa ao mesmo tempo, por exemplo, voc\u00ea pode abrir em seu laptop um navegador, um jogo, um reprodutor de m\u00eddia, um editor de texto e assim por diante. De fato, um sistema t\u00edpico pode executar dezenas, at\u00e9 centenas de processos simultaneamente. Esse fato torna o sistema mais f\u00e1cil de usar, voc\u00ea nunca precisa se preocupar se o CPU est\u00e1 livre, voc\u00ea simplesmente inicia os programas.<\/p>\n<p><i>Da\u00ed surge o problema: como criar a ilus\u00e3o de m\u00faltiplos CPUs? Como o sistema operacional pode gerar a ilus\u00e3o de um n\u00famero quase infinito de CPUs, mesmo que voc\u00ea tenha apenas um CPU f\u00edsico?<\/i><\/p>\n<p>O sistema operacional cria essa ilus\u00e3o por meio da virtualiza\u00e7\u00e3o do CPU. Ao iniciar um processo, depois interromp\u00ea-lo, iniciar outro e assim por diante, o sistema operacional pode manter a ilus\u00e3o de que existem v\u00e1rios CPUs virtuais, embora na verdade haja apenas um ou alguns processadores f\u00edsicos. Essa t\u00e9cnica \u00e9 chamada de <b>parti\u00e7\u00e3o de recursos do CPU por tempo<\/b>. Essa t\u00e9cnica permite que os usu\u00e1rios executem quantos processos simult\u00e2neos quiserem. O pre\u00e7o dessa solu\u00e7\u00e3o \u00e9 a performance \u2013 uma vez que, se o CPU \u00e9 compartilhado por v\u00e1rios processos, cada processo ser\u00e1 processado mais lentamente.<br \/>\n Para implementar a virtualiza\u00e7\u00e3o do CPU, especialmente para faz\u00ea-lo de maneira eficaz, o sistema operacional necessita de suporte tanto de baixo n\u00edvel quanto de alto n\u00edvel. O suporte de baixo n\u00edvel \u00e9 chamado de <b>mecanismos<\/b> \u2014 s\u00e3o m\u00e9todos ou protocolos de baixo n\u00edvel que implementam a parte necess\u00e1ria da funcionalidade. Um exemplo dessa funcionalidade \u00e9 a troca de contexto, que permite ao sistema operacional parar um programa e iniciar outro no processador. Essa parti\u00e7\u00e3o por tempo \u00e9 implementada em todos os sistemas operacionais modernos.<br \/>\n No topo desses mecanismos, existe uma l\u00f3gica incorporada no sistema operacional, sob a forma de \"pol\u00edticas\". <b>Pol\u00edtica<\/b> \u00e9 um algoritmo de tomada de decis\u00e3o do sistema operacional. Tais pol\u00edticas, por exemplo, determinam qual programa deve ser iniciado (da lista de comandos) em primeiro lugar. Assim, por exemplo, essa tarefa ser\u00e1 resolvida por uma pol\u00edtica chamada <b>pol\u00edtica de agendamento (scheduling policy)<\/b> e, na escolha da decis\u00e3o, ser\u00e1 guiada por dados como: hist\u00f3rico de execu\u00e7\u00e3o (qual programa foi executado por mais tempo no \u00faltimo minuto), que carga este processo est\u00e1 gerando (quais tipos de programas foram iniciados), m\u00e9tricas de desempenho (se o sistema foi otimizado para intera\u00e7\u00e3o ou para largura de banda) e assim por diante.<\/p>\n<h3>Abstra\u00e7\u00e3o: processo<\/h3>\n<p>\n A abstra\u00e7\u00e3o de um programa em execu\u00e7\u00e3o, realizada pelo sistema operacional, \u00e9 o que chamamos de <b>processo<\/b>. Como j\u00e1 mencionado anteriormente, um processo \u00e9 simplesmente um programa em execu\u00e7\u00e3o em um dado instante no tempo. Um programa com o qual podemos obter informa\u00e7\u00f5es consolidadas de diversos recursos do sistema e que s\u00e3o acessados ou afetados por esse programa durante sua execu\u00e7\u00e3o.<br \/>\n Para entender os componentes de um processo, precisamos compreender os estados do sistema: o que um programa pode ler ou alterar durante sua opera\u00e7\u00e3o. Em qualquer momento, \u00e9 necess\u00e1rio entender quais elementos do sistema s\u00e3o importantes para a execu\u00e7\u00e3o do programa.<br \/>\n Um dos elementos \u00f3bvios do estado do sistema que o processo inclui \u00e9 <b>a mem\u00f3ria<\/b>. Instru\u00e7\u00f5es s\u00e3o armazenadas na mem\u00f3ria. Os dados que o programa l\u00ea ou escreve tamb\u00e9m s\u00e3o armazenados na mem\u00f3ria. Assim, a mem\u00f3ria que um processo pode endere\u00e7ar (o chamado espa\u00e7o de endere\u00e7amento) \u00e9 parte do processo.<br \/>\n Os registradores tamb\u00e9m fazem parte do estado do sistema. Muitas instru\u00e7\u00f5es s\u00e3o orientadas a alterar o valor dos registradores ou ler seus valores e, assim, os registradores tamb\u00e9m se tornam uma parte importante do funcionamento do processo. <br \/>\n\u00c9 importante notar que o estado da m\u00e1quina tamb\u00e9m \u00e9 formado por alguns registradores especiais. Por exemplo,<b> IP \u2014 ponteiro de instru\u00e7\u00e3o<\/b> \u00e9 o ponteiro para a instru\u00e7\u00e3o que o programa est\u00e1 executando no momento. Existe tamb\u00e9m <b>ponteiro da pilha<\/b> e o correspondente <b>ponteiro de quadro<\/b>, que s\u00e3o usados para gerenciar: par\u00e2metros de fun\u00e7\u00f5es, vari\u00e1veis locais e endere\u00e7os de retorno.<br \/>\nPor fim, os programas frequentemente acessam a ROM (mem\u00f3ria apenas de leitura). Essas informa\u00e7\u00f5es sobre \u201cI\/O\u201d (entrada e sa\u00edda) devem incluir uma lista de arquivos que est\u00e3o abertos pelo processo no momento.<\/p>\n<h3>API do Processo<\/h3>\n<p>\n Para melhorar a compreens\u00e3o do funcionamento do processo, vamos examinar exemplos de chamadas de sistema que devem ser inclu\u00eddas em qualquer interface do sistema operacional. Essas APIs est\u00e3o, de uma forma ou de outra, dispon\u00edveis em qualquer SO.<\/p>\n<p>\u25cf <b>Criar<\/b> (cria\u00e7\u00e3o): O SO deve ter algum m\u00e9todo que permita criar novos processos. Quando voc\u00ea digita um comando no terminal ou executa um aplicativo dando um duplo clique no \u00edcone, uma chamada \u00e9 enviada ao SO para criar um novo processo e, em seguida, iniciar o programa especificado.<br \/>\n\u25cf <b>Remo\u00e7\u00e3o<\/b>: Como h\u00e1 uma interface para criar um processo, o SO tamb\u00e9m deve fornecer a capacidade de for\u00e7ar a exclus\u00e3o de um processo. A maioria dos programas naturalmente iniciar\u00e1 e terminar\u00e1 por conta pr\u00f3pria \u00e0 medida que forem executados. Caso contr\u00e1rio, o usu\u00e1rio gostaria de ter a possibilidade de encerr\u00e1-los, portanto, a interface para interromper um processo seria \u00fatil.<br \/>\n\u25cf <b>Aguardar <\/b>(espera): \u00c0s vezes, \u00e9 \u00fatil esperar pela conclus\u00e3o de um processo, ent\u00e3o algumas interfaces s\u00e3o fornecidas que permitem essa espera.<br \/>\n\u25cf <b>Controle Diversificado<\/b> (controle diverso): Al\u00e9m de encerrar e esperar por um processo, existem outros m\u00e9todos de controle variados. Por exemplo, a maioria dos SOs fornece a possibilidade de congelar um processo (interromper sua execu\u00e7\u00e3o por um per\u00edodo) e, em seguida, retomar (continuar a execu\u00e7\u00e3o).<br \/>\n\u25cf <b>Status <\/b>(estado): Existem v\u00e1rias interfaces para obter informa\u00e7\u00f5es sobre o status de um processo, como a dura\u00e7\u00e3o de sua opera\u00e7\u00e3o ou em que estado ele se encontra atualmente.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemas Operacionais: Tr\u00eas Pe\u00e7as F\u00e1ceis. Parte 2: Abstra\u00e7\u00e3o: Processo (tradu\u00e7\u00e3o)\" src=\"\/wp-content\/uploads\/2019\/04\/eccf4ba3b12a60a54a62bb13986a7783.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Cria\u00e7\u00e3o do Processo: detalhes<\/h3>\n<p>Uma das coisas interessantes \u00e9 como os programas se transformam em processos. Especialmente, como o SO inicia e executa o programa. Como um processo \u00e9 criado exatamente.<br \/>\nEm primeiro lugar, o sistema operacional deve carregar o c\u00f3digo do programa e os dados est\u00e1ticos na mem\u00f3ria (no espa\u00e7o de endere\u00e7amento do processo). Os programas geralmente est\u00e3o armazenados em disco ou em uma unidade de estado s\u00f3lido em algum formato execut\u00e1vel. Assim, o processo de carregamento do programa e dos dados est\u00e1ticos na mem\u00f3ria exige que o sistema operacional tenha a capacidade de ler esses bytes do disco e posicion\u00e1-los em algum lugar na mem\u00f3ria.<\/p>\n<p>Nos sistemas operacionais mais antigos, o processo de carregamento era feito de maneira apressada (eagerly), ou seja, isso significa que o c\u00f3digo era carregado na mem\u00f3ria por completo antes da execu\u00e7\u00e3o do programa. Sistemas operacionais modernos fazem isso de forma pregui\u00e7osa (lazily), ou seja, carregando peda\u00e7os de c\u00f3digo ou dados apenas quando s\u00e3o necess\u00e1rios para o programa durante sua execu\u00e7\u00e3o.<\/p>\n<p>Depois que o c\u00f3digo e os dados est\u00e1ticos s\u00e3o carregados na mem\u00f3ria, o sistema operacional precisa realizar algumas outras tarefas antes de iniciar o processo. Uma quantidade de mem\u00f3ria deve ser alocada para a pilha. <b>Os programas utilizam a pilha para vari\u00e1veis locais, par\u00e2metros de fun\u00e7\u00f5es e endere\u00e7os de retorno.<\/b>. O sistema operacional aloca essa mem\u00f3ria e a entrega ao processo. A pilha tamb\u00e9m pode ser alocada com alguns argumentos, especificamente preenchendo os par\u00e2metros da fun\u00e7\u00e3o main(), como um array argc e argv.<\/p>\n<p>O sistema operacional tamb\u00e9m pode alocar uma quantidade de mem\u00f3ria para o heap do programa. <b>O heap \u00e9 utilizado pelos programas para dados que s\u00e3o dinamicamente alocados por solicita\u00e7\u00e3o expl\u00edcita.<\/b>. Os programas solicitam esse espa\u00e7o chamando a fun\u00e7\u00e3o <b>para aloca\u00e7\u00e3o de mem\u00f3ria pode falhar se precisar da mem\u00f3ria RAM atualmente ocupada pelo ARC. Mas h\u00e1 boas raz\u00f5es para usar o cache pr\u00f3prio, pelo menos agora.<\/b> e o liberam explicitamente, chamando a fun\u00e7\u00e3o <b>free()<\/b>. O heap \u00e9 necess\u00e1rio para estruturas de dados como: listas encadeadas, tabelas hash, \u00e1rvores e outras. Inicialmente, uma pequena quantidade de mem\u00f3ria \u00e9 alocada para o heap, mas com o tempo, \u00e0 medida que o programa opera, o heap pode solicitar uma quantidade maior de mem\u00f3ria atrav\u00e9s da chamada de API de biblioteca malloc(). O sistema operacional est\u00e1 envolvido no processo de aloca\u00e7\u00e3o de mais mem\u00f3ria para ajudar a satisfazer esses pedidos.<\/p>\n<p>O sistema operacional tamb\u00e9m executar\u00e1 tarefas de inicializa\u00e7\u00e3o, especialmente aquelas relacionadas \u00e0 entrada e sa\u00edda. Por exemplo, em sistemas UNIX, cada processo, por padr\u00e3o, tem 3 descritores de arquivo abertos: para o fluxo padr\u00e3o de entrada, sa\u00edda e erro. Esses descritores permitem que os programas leiam a entrada do terminal e tamb\u00e9m enviem informa\u00e7\u00f5es para a tela. <\/p>\n<p>Assim, ao carregar o c\u00f3digo e os dados est\u00e1ticos na mem\u00f3ria, criar e inicializar a pilha, al\u00e9m de realizar outras tarefas relacionadas \u00e0 execu\u00e7\u00e3o de opera\u00e7\u00f5es de entrada e sa\u00edda, o sistema operacional prepara o ambiente para a execu\u00e7\u00e3o do processo. No final, resta uma \u00faltima tarefa: iniciar a execu\u00e7\u00e3o do programa atrav\u00e9s de seu ponto de entrada, chamado de fun\u00e7\u00e3o main(). Ao entrar na execu\u00e7\u00e3o da fun\u00e7\u00e3o main(), o sistema operacional transfere o controle da CPU para o novo processo, permitindo assim que o programa comece a ser executado. <\/p>\n<h3>Estado do processo<\/h3>\n<p>\n Agora que temos uma certa compreens\u00e3o do que \u00e9 um processo e como ele \u00e9 criado, vamos listar os estados do processo nos quais ele pode se encontrar. Na forma mais simples, um processo pode estar em um desses estados:<br \/>\n\u25cf <b>Em execu\u00e7\u00e3o<\/b>. No estado em execu\u00e7\u00e3o, o processo est\u00e1 sendo executado na CPU. Isso significa que as instru\u00e7\u00f5es est\u00e3o sendo processadas.<br \/>\n\u25cf <b>Pronto<\/b>. No estado de pronto, o processo est\u00e1 pronto para iniciar, mas por algum motivo o sistema operacional n\u00e3o o executa naquele momento.<br \/>\n\u25cf <b>Bloqueado<\/b>. No estado bloqueado, o processo est\u00e1 realizando algumas opera\u00e7\u00f5es que o impedem de estar pronto para execu\u00e7\u00e3o at\u00e9 que ocorra algum evento. Um exemplo comum \u00e9 quando um processo inicializa uma opera\u00e7\u00e3o de IO, tornando-se bloqueado, permitindo que outro processo utilize a CPU.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemas Operacionais: Tr\u00eas Pe\u00e7as F\u00e1ceis. Parte 2: Abstra\u00e7\u00e3o: Processo (tradu\u00e7\u00e3o)\" src=\"\/wp-content\/uploads\/2019\/04\/d2c01bdb08e7b7aeea78edcbf6ce0250.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEsses estados podem ser imaginados como um gr\u00e1fico. Como podemos ver na imagem, o estado do processo pode mudar entre RUNNING e READY a crit\u00e9rio do sistema operacional. Quando o estado do processo muda de READY para RUNNING, isso significa que o processo foi agendado. No sentido oposto, \u00e9 retirado da programa\u00e7\u00e3o. No momento em que o processo se torna BLOCKED, por exemplo, ao inicializar uma opera\u00e7\u00e3o de IO, o sistema operacional o manter\u00e1 nesse estado at\u00e9 que um certo evento ocorra, como a conclus\u00e3o do IO. Nesse momento, ele transita para o estado READY e, possivelmente, instantaneamente para o estado RUNNING, se assim decidir o sistema operacional. <br \/>\nVamos dar uma olhada em um exemplo de como dois processos transitam por esses estados. Para come\u00e7ar, suponhamos que ambos os processos estejam em execu\u00e7\u00e3o e cada um utilize apenas a CPU. Nesse caso, seus estados ser\u00e3o os seguintes.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemas Operacionais: Tr\u00eas Pe\u00e7as F\u00e1ceis. Parte 2: Abstra\u00e7\u00e3o: Processo (tradu\u00e7\u00e3o)\" src=\"\/wp-content\/uploads\/2019\/04\/904cef8e04c2f0d8eaf4fdc5860f5bfd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNo exemplo a seguir, o primeiro processo solicita IO ap\u00f3s algum tempo de execu\u00e7\u00e3o e muda para o estado BLOQUEADO, permitindo que outro processo seja iniciado (FIG 1.4). O SO v\u00ea que o processo 0 n\u00e3o est\u00e1 utilizando o CPU e inicia o processo 1. Durante a execu\u00e7\u00e3o do processo 1, o IO \u00e9 conclu\u00eddo e o status do processo 0 muda para PRONTO. Por fim, o processo 1 \u00e9 finalizado, e ao t\u00e9rmino dele, o processo 0 \u00e9 iniciado, executado e conclui sua tarefa.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemas Operacionais: Tr\u00eas Pe\u00e7as F\u00e1ceis. Parte 2: Abstra\u00e7\u00e3o: Processo (tradu\u00e7\u00e3o)\" src=\"\/wp-content\/uploads\/2019\/04\/06f44895cc976e7755c1f7bf5afe466b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Estrutura de dados<\/h3>\n<p>\n O SO \u00e9 um programa e, como qualquer outro programa, possui algumas estruturas de dados-chave que rastreiam v\u00e1rias informa\u00e7\u00f5es relevantes. Para rastrear o estado de cada processo, o SO mant\u00e9m uma certa <b>lista de processos<\/b> para todos os processos no estado PRONTO, al\u00e9m de algumas informa\u00e7\u00f5es adicionais para acompanhar os processos que est\u00e3o sendo executados no momento. Al\u00e9m disso, o SO deve acompanhar tamb\u00e9m os processos bloqueados. Ap\u00f3s a conclus\u00e3o do IO, o SO deve despertar o processo necess\u00e1rio e mud\u00e1-lo para o estado pronto para execu\u00e7\u00e3o.<\/p>\n<p>Assim, por exemplo, o SO deve preservar o estado dos registradores da CPU. No momento em que o processo \u00e9 interrompido, o estado dos registradores \u00e9 salvo no espa\u00e7o de endere\u00e7o do processo, e ao continuar sua execu\u00e7\u00e3o, os valores dos registradores s\u00e3o restaurados, continuando assim a execu\u00e7\u00e3o desse processo.<\/p>\n<p>Al\u00e9m dos estados pronto, bloqueado e em execu\u00e7\u00e3o, existem outros estados. \u00c0s vezes, ao ser criado, um processo pode ter o estado INIT. Finalmente, um processo pode ser colocado no estado FINAL quando j\u00e1 foi conclu\u00eddo, mas as informa\u00e7\u00f5es sobre ele ainda n\u00e3o foram limpas. Em sistemas UNIX, esse estado \u00e9 chamado de <b>processo zumbi<\/b>. Esse estado \u00e9 \u00fatil em casos em que o processo pai deseja saber o c\u00f3digo de retorno do filho, por exemplo, geralmente 0 sinaliza uma conclus\u00e3o bem-sucedida, e 1 uma falha, no entanto, programadores podem criar c\u00f3digos de sa\u00edda adicionais, sinalizando diferentes problemas. Ao finalizar, o processo pai faz a \u00faltima chamada de sistema, como wait(), para aguardar a conclus\u00e3o do processo filho e sinalizar ao SO que pode limpar quaisquer dados associados ao processo finalizado.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemas Operacionais: Tr\u00eas Pe\u00e7as F\u00e1ceis. Parte 2: Abstra\u00e7\u00e3o: Processo (tradu\u00e7\u00e3o)\" src=\"\/wp-content\/uploads\/2019\/04\/4756790c823a7e9ebbe26ff067ca00cc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Pontos-chave da palestra:<\/h3>\n<p>\n\u25cf <b>Processo <\/b> \u2014 a principal abstra\u00e7\u00e3o de um programa em funcionamento em um sistema operacional. A qualquer momento, um processo pode ser descrito pelo seu estado: o conte\u00fado da mem\u00f3ria em seu espa\u00e7o de endere\u00e7amento, o conte\u00fado dos registradores do processador, incluindo o ponteiro de instru\u00e7\u00e3o e o ponteiro de pilha, al\u00e9m de informa\u00e7\u00f5es sobre I\/O, como arquivos abertos que est\u00e3o sendo lidos ou escritos.<br \/>\n\u25cf <b>API do Processo<\/b> consiste em chamadas que programas podem fazer em rela\u00e7\u00e3o a processos. Normalmente, s\u00e3o chamadas de cria\u00e7\u00e3o, exclus\u00e3o ou outras.<br \/>\n\u25cf Um processo est\u00e1 em um dos muitos estados, incluindo running, ready, blocked. Diferentes eventos, como agendamento, exclus\u00e3o do agendamento ou espera, podem fazer a transi\u00e7\u00e3o do estado do processo de um para outro.<br \/>\n\u25cf <b>Lista de Processos<\/b> cont\u00e9m informa\u00e7\u00f5es sobre todos os processos no sistema. Cada entrada nela \u00e9 chamada de bloqueio de controle de processo, que na realidade \u00e9 uma estrutura que cont\u00e9m todas as informa\u00e7\u00f5es necess\u00e1rias sobre um processo espec\u00edfico.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/446866\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP. \u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430 unix-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438, \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u043f\u0440\u043e\u0447\u0438\u0438\u043c\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u041e\u0421. \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0432\u0441\u0435\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0443\u0442. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":22968,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30992","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 2: \u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f: \u041f\u0440\u043e\u0446\u0435\u0441\u0441 (\u043f\u0435\u0440\u0435\u0432\u043e\u0434) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:38:47+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:38:47+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Sistemas Operacionais: Tr\u00eas Pe\u00e7as F\u00e1ceis. Parte 2: Abstra\u00e7\u00e3o: Processo (tradu\u00e7\u00e3o) | ProHoster","description":"Introdu\u00e7\u00e3o aos sistemas operacionais Ol\u00e1, Habr! Gostaria de apresentar a voc\u00eas uma s\u00e9rie de artigos-tradu\u00e7\u00f5es de uma literatura que considero interessante \u2014 OSTEP.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 2: \u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f: \u041f\u0440\u043e\u0446\u0435\u0441\u0441 (\u043f\u0435\u0440\u0435\u0432\u043e\u0434) | ProHoster","og:description":"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP.","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:38:47+00:00","article:modified_time":"2019-10-31T18:38:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30992","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 03:59:23","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:26:04","updated":"2026-01-21 03:59:23","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/30992","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=30992"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/30992\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/22968"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=30992"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=30992"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=30992"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}