{"id":30717,"date":"2019-10-31T21:37:05","date_gmt":"2019-10-31T18:37:05","guid":{"rendered":"https:\/\/prohoster.info\/blog\/operating-systems-three-easy-pieces-part-1-intro-perevod\/"},"modified":"2019-10-31T21:37:05","modified_gmt":"2019-10-31T18:37:05","slug":"operating-systems-three-easy-pieces-part-1-intro-perevod","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-1-intro-perevod","title":{"rendered":"Sistemas Operacionais: Tr\u00eas Pe\u00e7as F\u00e1ceis. Parte 1: Introdu\u00e7\u00e3o (tradu\u00e7\u00e3o)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Introdu\u00e7\u00e3o aos sistemas operacionais<\/h1>\n<p>Ol\u00e1, Habr! Quero apresentar a voc\u00eas uma s\u00e9rie de artigos traduzidos de uma literatura que considero interessante \u2014 OSTEP. Este material explora profundamente o funcionamento de sistemas operacionais similares ao Unix, especificamente o trabalho com processos, diversos escalonadores, mem\u00f3ria e outros componentes semelhantes que constituem um sistema operacional moderno. Voc\u00ea pode ver 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:<br \/>\n \u2014 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><br \/>\n \u2014 original: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/remzi-arpacidusseau\/ostep-code\">github.com\/remzi-arpacidusseau\/ostep-code<\/a><\/noindex><br \/>\n \u2014 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><\/p>\n<p>E 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<h3>Execu\u00e7\u00e3o do programa<\/h3>\n<p>\nO que acontece quando algum programa est\u00e1 em execu\u00e7\u00e3o? O programa iniciado executa uma tarefa simples \u2014 ele executa instru\u00e7\u00f5es. A cada segundo, milh\u00f5es e at\u00e9 bilh\u00f5es de instru\u00e7\u00f5es s\u00e3o extra\u00eddas pelo processador da mem\u00f3ria RAM, que por sua vez as decodifica (por exemplo, reconhecendo a qual tipo pertencem essas instru\u00e7\u00f5es) e as executa. Isso pode incluir a soma de dois n\u00fameros, acesso \u00e0 mem\u00f3ria, verifica\u00e7\u00e3o de condi\u00e7\u00f5es, chamada de fun\u00e7\u00f5es e assim por diante. Ap\u00f3s a conclus\u00e3o da execu\u00e7\u00e3o de uma instru\u00e7\u00e3o, o processador passa para a pr\u00f3xima. E assim, instru\u00e7\u00e3o por instru\u00e7\u00e3o, elas s\u00e3o executadas at\u00e9 que o programa seja encerrado.<br \/>\nEste exemplo, naturalmente, \u00e9 uma simplifica\u00e7\u00e3o \u2014 na verdade, para acelerar o trabalho do processador, o hardware moderno permite a execu\u00e7\u00e3o de instru\u00e7\u00f5es fora de ordem, calcular resultados potenciais, executar instru\u00e7\u00f5es simultaneamente e outras artimanhas similares.<\/p>\n<h3>Modelo de Computa\u00e7\u00e3o de Von Neumann<\/h3>\n<p>\nA forma simplificada de trabalho que descrevemos \u00e9 semelhante ao modelo de computa\u00e7\u00e3o de Von Neumann. <i>Von Neumann \u00e9 um dos pioneiros dos sistemas computacionais, e tamb\u00e9m um dos autores da teoria dos jogos<\/i>. Durante a execu\u00e7\u00e3o do programa, ocorrem muitos outros eventos, e outros processos e l\u00f3gicas paralelas operam, cuja principal finalidade \u00e9 simplificar a inicializa\u00e7\u00e3o, opera\u00e7\u00e3o e manuten\u00e7\u00e3o do sistema.<br \/>\nH\u00e1 um conjunto de software respons\u00e1vel pela facilidade de execu\u00e7\u00e3o de programas (ou mesmo permitindo a execu\u00e7\u00e3o simult\u00e2nea de v\u00e1rios programas), que permite que os programas compartilhem a mesma mem\u00f3ria e interajam com diferentes dispositivos. Este conjunto de software \u00e9, em ess\u00eancia, o que chamamos de sistema operacional, cuja principal fun\u00e7\u00e3o \u00e9 monitorar se o sistema opera corretamente e eficientemente, al\u00e9m de garantir a facilidade de gerenciamento desse sistema. <\/p>\n<h2>Sistema operacional<\/h2>\n<p>\n<b>Sistema operacional, ou SO, \u00e9 um conjunto de programas inter-relacionados, projetados para gerenciar os recursos do computador e organizar a intera\u00e7\u00e3o do usu\u00e1rio com o computador.<\/b>. <br \/>\nO SO alcan\u00e7a sua efici\u00eancia principalmente atrav\u00e9s da t\u00e9cnica mais importante \u2014 a t\u00e9cnica de <b>virtualiza\u00e7\u00e3o.<\/b>. O SO interage com os recursos f\u00edsicos (como processador, mem\u00f3ria, disco e semelhantes) e os transforma em uma forma mais geral, com maiores capacidades e mais f\u00e1cil de usar. Portanto, para uma compreens\u00e3o geral, pode-se comparar muito grosseiramente o sistema operacional a uma m\u00e1quina virtual.<br \/>\nPara permitir que os usu\u00e1rios emitam comandos para o sistema operacional e, dessa forma, utilizem as capacidades da m\u00e1quina virtual (como: executar um programa, alocar mem\u00f3ria, acessar arquivos e assim por diante), o sistema operacional fornece uma interface conhecida como <b>API<\/b> (interface de programa\u00e7\u00e3o de aplicativos) \u00e0 qual podem ser feitas chamadas (call). Um sistema operacional t\u00edpico permite centenas de chamadas de sistema.<br \/>\nE finalmente, como a virtualiza\u00e7\u00e3o permite que v\u00e1rios programas funcionem (compartilhando assim a CPU) e acessem simultaneamente suas instru\u00e7\u00f5es e dados (dividindo assim a mem\u00f3ria), bem como acessando os discos (compartilhando dispositivos de entrada e sa\u00edda), o sistema operacional \u00e9 tamb\u00e9m chamado de gerenciador de recursos. Cada processador, disco e mem\u00f3ria \u00e9 um recurso do sistema e, portanto, uma das fun\u00e7\u00f5es do sistema operacional \u00e9 gerenciar esses recursos, fazendo isso de maneira eficiente, justa ou, ao contr\u00e1rio, dependendo da tarefa para a qual foi projetado.<\/p>\n<h3>Virtualiza\u00e7\u00e3o da CPU<\/h3>\n<p>\nVamos considerar o seguinte programa:<br \/>\n(https:\/\/www.youtube.com\/watch?v=zDwT5fUcki4&amp;feature=youtu.be)<\/p>\n<p> <img decoding=\"async\" alt=\"Sistemas Operacionais: Tr\u00eas Pe\u00e7as F\u00e1ceis. Parte 1: Introdu\u00e7\u00e3o (tradu\u00e7\u00e3o)\" src=\"\/wp-content\/uploads\/2019\/04\/1f353e582b857fc71231472ec4f55319.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEle n\u00e3o realiza a\u00e7\u00f5es especiais; essencialmente, tudo o que faz \u00e9 chamar a fun\u00e7\u00e3o <b>spin<\/b>(), cuja tarefa \u00e9 verificar ciclicamente o tempo e retornar depois que um segundo se passou. Assim, ele repete infinitamente a string que o usu\u00e1rio passou como argumento.<br \/>\nVamos executar este programa e passar o car\u00e1ter \u201cA\u201d como argumento. O resultado n\u00e3o \u00e9 especialmente interessante \u2014 o sistema simplesmente executa o programa que periodicamente imprime na tela o car\u00e1ter \u201cA\u201d.<br \/>\nAgora vamos tentar uma variante em que v\u00e1rias inst\u00e2ncias do mesmo programa est\u00e3o em execu\u00e7\u00e3o, mas imprimindo letras diferentes, para que fique mais claro. Nesse caso, o resultado ser\u00e1 um pouco diferente. Apesar de termos um \u00fanico processador, o programa \u00e9 executado simultaneamente. Como isso \u00e9 poss\u00edvel? Isso acontece porque o sistema operacional, com a ajuda das capacidades do hardware, cria uma ilus\u00e3o. A ilus\u00e3o de que o sistema possui v\u00e1rios processadores virtuais, transformando um processador f\u00edsico em uma quantidade teoricamente infinita e, assim, permitindo que os programas pare\u00e7am estar sendo executados simultaneamente. Essa ilus\u00e3o \u00e9 chamada de <i>Virtualiza\u00e7\u00e3o de CPU<\/i>.<br \/>\n Esse cen\u00e1rio levanta muitas perguntas, por exemplo, se v\u00e1rios programas desejam ser iniciados ao mesmo tempo, qual deles ser\u00e1 realmente executado? Essa quest\u00e3o \u00e9 gerenciada por \u201cpol\u00edticas\u201d do sistema operacional. As pol\u00edticas s\u00e3o utilizadas em muitos lugares do sistema operacional e respondem a perguntas como essa, al\u00e9m de serem mecanismos b\u00e1sicos implementados pelo sistema operacional. Da\u00ed a fun\u00e7\u00e3o do sistema operacional como gerente de recursos.<\/p>\n<h3>Virtualiza\u00e7\u00e3o de mem\u00f3ria<\/h3>\n<p>\n Agora, vamos considerar a mem\u00f3ria. <b>O modelo f\u00edsico da mem\u00f3ria em sistemas modernos \u00e9 representado como um array de bytes<\/b>. Para ler da mem\u00f3ria, \u00e9 necess\u00e1rio especificar o <b>endere\u00e7o da c\u00e9lula<\/b>, para acessar. Para gravar ou atualizar dados, \u00e9 necess\u00e1rio tamb\u00e9m especificar os dados e o endere\u00e7o da c\u00e9lula onde grav\u00e1-los.<br \/>\n As acessos \u00e0 mem\u00f3ria ocorrem constantemente durante a execu\u00e7\u00e3o do programa. O programa armazena em mem\u00f3ria toda a sua estrutura de dados e a acessa, executando v\u00e1rias instru\u00e7\u00f5es. As instru\u00e7\u00f5es, por sua vez, tamb\u00e9m est\u00e3o armazenadas na mem\u00f3ria, portanto, o acesso a ela ocorre tamb\u00e9m a cada solicita\u00e7\u00e3o da pr\u00f3xima instru\u00e7\u00e3o.<\/p>\n<h4>Chamada malloc()<\/h4>\n<p>Vamos considerar o seguinte programa que aloca uma \u00e1rea de mem\u00f3ria usando uma chamada <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> (https:\/\/youtu.be\/jnlKRnoT1m0):<\/p>\n<p><img decoding=\"async\" alt=\"Sistemas Operacionais: Tr\u00eas Pe\u00e7as F\u00e1ceis. Parte 1: Introdu\u00e7\u00e3o (tradu\u00e7\u00e3o)\" src=\"\/wp-content\/uploads\/2019\/04\/00b285e1999c2b010c84e712a3ac3087.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO programa realiza v\u00e1rias a\u00e7\u00f5es. Primeiro, aloca uma certa quantidade de mem\u00f3ria (linha 7), em seguida, imprime o endere\u00e7o da c\u00e9lula alocada (linha 9), grava zero no primeiro slot da mem\u00f3ria alocada. Depois, o programa entra em um loop, no qual incrementa o valor gravado na mem\u00f3ria pelo endere\u00e7o da vari\u00e1vel 'p'. Ele tamb\u00e9m imprime o identificador do pr\u00f3prio processo. <b>O identificador do processo \u00e9 \u00fanico para cada processo em execu\u00e7\u00e3o<\/b>. Ao executar v\u00e1rias c\u00f3pias, nos deparamos com um resultado interessante: No primeiro caso, se n\u00e3o fizermos nada e simplesmente executarmos v\u00e1rias c\u00f3pias, os endere\u00e7os ser\u00e3o diferentes. Mas isso n\u00e3o se encaixa em nossa teoria! Exato, pois em distribui\u00e7\u00f5es modernas, a fun\u00e7\u00e3o de randomiza\u00e7\u00e3o de mem\u00f3ria est\u00e1 ativada por default. Se a desativarmos, teremos o resultado esperado \u2014 os endere\u00e7os de mem\u00f3ria de dois programas rodando simultaneamente coincidir\u00e3o. <\/p>\n<p><img decoding=\"async\" alt=\"Sistemas Operacionais: Tr\u00eas Pe\u00e7as F\u00e1ceis. Parte 1: Introdu\u00e7\u00e3o (tradu\u00e7\u00e3o)\" src=\"\/wp-content\/uploads\/2019\/04\/882fe00a72deadac12f146bc8d15b024.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Assim, resulta que dois programas independentes operam com seus pr\u00f3prios espa\u00e7os de endere\u00e7o privados, que, por sua vez, s\u00e3o mapeados pelo sistema operacional na mem\u00f3ria f\u00edsica.<\/b>. Portanto, o uso de endere\u00e7os de mem\u00f3ria dentro de um programa n\u00e3o afetar\u00e1 outros, e cada programa parece ter seu pr\u00f3prio peda\u00e7o de mem\u00f3ria f\u00edsica, totalmente alocado \u00e0 sua disposi\u00e7\u00e3o. A realidade, no entanto, \u00e9 que a mem\u00f3ria f\u00edsica \u00e9 um recurso compartilhado, cuja gest\u00e3o \u00e9 realizada pelo sistema operacional.<\/p>\n<h3>Consist\u00eancia<\/h3>\n<p>\nOutro tema importante no \u00e2mbito dos sistemas operacionais \u00e9 a <b>consist\u00eancia<\/b>. Este termo \u00e9 utilizado quando se fala sobre problemas no sistema que podem surgir ao trabalhar com muitas coisas simultaneamente dentro de um \u00fanico programa. Problemas de consist\u00eancia ocorrem at\u00e9 mesmo no pr\u00f3prio sistema operacional. Nos exemplos anteriores com virtualiza\u00e7\u00e3o de mem\u00f3ria e de CPU, entendemos que o SO gerencia muitas coisas ao mesmo tempo \u2014 iniciando o primeiro processo, depois o segundo e assim por diante. Como se tornou evidente, esse comportamento pode levar a alguns problemas. Por exemplo, programas multithread modernos enfrentam tais dificuldades.<\/p>\n<p>Vamos considerar o seguinte programa:<\/p>\n<p> <img decoding=\"async\" alt=\"Sistemas Operacionais: Tr\u00eas Pe\u00e7as F\u00e1ceis. Parte 1: Introdu\u00e7\u00e3o (tradu\u00e7\u00e3o)\" src=\"\/wp-content\/uploads\/2019\/04\/091af38bd53fb94e65afa6c57b08f012.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO programa na fun\u00e7\u00e3o principal cria dois threads, utilizando a chamada <b>Pthread_create()<\/b>. Neste exemplo, um thread pode ser pensado como uma fun\u00e7\u00e3o executada em um \u00fanico espa\u00e7o de mem\u00f3ria ao lado de outras fun\u00e7\u00f5es, com o n\u00famero de fun\u00e7\u00f5es executadas simultaneamente sendo claramente mais de uma. Neste exemplo, cada thread inicia e executa a fun\u00e7\u00e3o <b>worker(), que por sua vez simplesmente incrementa uma vari\u00e1vel<\/b>,.<\/p>\n<p>. Vamos executar este programa com o argumento 1000. Como voc\u00ea j\u00e1 deve ter adivinhado, o resultado deve ser 2000, pois cada thread incrementou a vari\u00e1vel 1000 vezes. No entanto, n\u00e3o \u00e9 t\u00e3o simples. Vamos tentar executar o programa com um n\u00famero de repeti\u00e7\u00f5es muitas vezes maior.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemas Operacionais: Tr\u00eas Pe\u00e7as F\u00e1ceis. Parte 1: Introdu\u00e7\u00e3o (tradu\u00e7\u00e3o)\" src=\"\/wp-content\/uploads\/2019\/04\/a6a3e63f9ab94793ffde67342c5a19da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAo fornecer um n\u00famero, por exemplo, 100000, esperamos ver a sa\u00edda 200000. No entanto, ao executar o n\u00famero 100000 v\u00e1rias vezes, n\u00e3o apenas n\u00e3o veremos a resposta correta, mas tamb\u00e9m obteremos respostas incorretas diferentes. O mist\u00e9rio est\u00e1 no fato de que, para aumentar o n\u00famero, s\u00e3o necess\u00e1rias tr\u00eas opera\u00e7\u00f5es \u2014 extrair o n\u00famero da mem\u00f3ria, incrementar e, em seguida, gravar o n\u00famero de volta. Como todas essas instru\u00e7\u00f5es n\u00e3o s\u00e3o realizadas de forma at\u00f4mica (todas ao mesmo tempo), coisas estranhas podem acontecer. Este problema \u00e9 chamado em programa\u00e7\u00e3o <b>race condition \u2014 condi\u00e7\u00e3o de corrida<\/b>. Quando for\u00e7as desconhecidas em um momento incerto podem impactar a execu\u00e7\u00e3o de suas opera\u00e7\u00f5es.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/446340\/\">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\u044b\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\u043d\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":22702,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30717","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\u044b\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-1-intro-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 1: Intro (\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\u044b\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-1-intro-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:37:05+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:37:05+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 1: Introdu\u00e7\u00e3o (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 interessante \u2014 OSTEP.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-1-intro-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 1: Intro (\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\u044b\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-1-intro-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:37:05+00:00","article:modified_time":"2019-10-31T18:37:05+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30717","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 02:38:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:30:51","updated":"2026-01-21 02:38:19","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\/30717","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=30717"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/30717\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/22702"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=30717"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=30717"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=30717"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}