Sistemas operacionais: tudo o que você precisa saber sobre
Neste texto, se você decidir ficar até o final, certamente poderá dizer a todos que entende para que serve um sistema operacional, o que são processos, threads, e o famoso Kernel. Além disso, você compreenderá conceitos essenciais como concorrência, paralelismo, e até a utilidade da virtualização no mundo moderno. Não perca!
TECNOLOGIA
Daniel Azevedo de Oliveira Maia
9/7/20248 min ler
Windows, Mac OS, Linux, Onix, iOS, Android... você certamente já ouviu falar de todos esses sistemas operacionais ou até mesmo é usuário de algum deles. Mas você já parou para se perguntar o que realmente é um sistema operacional?
Talvez você até se considere um usuário relativamente avançado no seu sistema operacional favorito, mas se eu te perguntar o que é, por exemplo, um processo dentro do sistema operacional, você saberia responder? E o que seriam threads? (E não, não estou falando daquela nova rede social do Mark Zuckerberg.)
Você saberia explicar o que são threads? Outro ponto crucial quando falamos de sistemas operacionais é o conceito de Kernel. Você saberia dizer o que é o Kernel? Na prática, temos muitas expressões como "modo usuário" e "modo Kernel". O que significam esses termos?
Paralelismo e concorrência em sistemas? E a tão falada virtualização, você saberia explicar o que é e como funciona? Se você ficou um pouco perdido até agora, fique comigo até o final, que eu tenho certeza de que você vai entender tudo o que eu disser daqui para frente.
Tenho certeza de que você já sabe que nossos computadores são formados por diversos componentes físicos. Todo aquele emaranhado de peças, circuitos e chips, em resumo, é o hardware. Existe até uma brincadeira que diz que software é aquilo que xingamos e hardware é aquilo que chutamos.
Quando utilizamos um computador, estamos, de certa forma, interagindo com esses componentes físicos. Estamos emitindo ordens, comandos. Ou seja, estamos interagindo com o hardware da máquina.
Você poderia me dizer: "Mas Daniel, eu não interajo com a máquina dessa maneira. Afinal, para dar ordens à máquina, teríamos que falar a mesma linguagem, certo? Eu teria que entender como conversar com a máquina em baixo nível, utilizando códigos binários, e isso está muito distante da minha realidade."
E você estaria certo.
Imagine só se precisássemos conhecer todos os detalhes sobre o funcionamento interno de uma máquina para conseguir nos comunicar com ela!
"Tá, Daniel, agora eu entendo que, de certa forma, conversamos com o hardware. Afinal, os cliques de mouse e as teclas pressionadas fazem minha máquina realmente agir conforme o que mando. Mas, se eu interajo com o hardware, deve haver algum tipo de abstração no meio do caminho, um tradutor que compreenda meus comandos e os converta para a linguagem que a máquina entende nativamente, para que ela possa, de fato, processá-los. Talvez um software complexo, com quem eu possa interagir de maneira intuitiva e que receba essas ordens e as converta para uma linguagem de baixo nível, atingindo assim o hardware."
Essa é, essencialmente, a ideia de um sistema operacional. Ele é um software, ou um conjunto de softwares, que facilita e permite a interação entre você e o hardware do seu computador. O sistema operacional abstrai detalhes técnicos que você, como usuário, não precisa conhecer para utilizar o computador. Ele torna o uso da máquina intuitivo e abstrato, facilitando a interação humano-computador.
Claro, esta é uma definição básica de sistema operacional: ele funciona como uma interface entre você e o computador. É o sistema operacional que te poupa da responsabilidade de entender como toda a complexidade da máquina funciona "por debaixo dos panos". Quando você salva um arquivo no computador, por exemplo, você só precisa clicar no ícone do disquete. Pronto, clicou e salvou. Ou então pressiona Ctrl+S e resolveu o seu problema. Você não quer, nem precisa, saber os detalhes de como o hardware manipula e gerencia o disco. Isso não é do seu interesse.
Então, essa é a ideia do sistema operacional como interface. E, convenhamos, essa é uma definição bastante básica, pois o sistema operacional vai muito além de ser apenas uma interface entre o usuário e o computador.
E quais seriam essas outras funções tão importantes do sistema operacional?
Em primeiro lugar, o sistema operacional gerencia os processos do seu computador. Você se lembra do termo processo? Um processo é, basicamente, um programa em execução. Indo um pouco além, um processo é uma instância de um programa que está sendo executado. Então, se você clicar duas vezes na área de trabalho para abrir um programa, iniciou-se um novo processo no sistema operacional. Esse processo é único e recebe um PID (Process Identifier).
Agora, faça o teste: pressione Ctrl + Shift + Esc no seu computador e verá a lista de todos os processos em execução, junto com informações sobre o consumo de CPU, memória e espaço em disco.
Posso citar vários exemplos: se eu abrir um navegador agora, estarei iniciando um novo processo. Mas onde o sistema operacional entra nisso? Se eu abrir vários processos — um bloco de notas, um reprodutor de música, um navegador — perceba que estou realizando várias atividades ao mesmo tempo. Quem gerencia isso tudo é o sistema operacional, pois é ele quem permite criar, agendar e finalizar (ou "matar") processos.
Agora, vamos nos aprofundar um pouco mais. Pense em um processo como um programa em execução. Ele pode ter mini-funções, mini-tarefas internas, como subprocessos. Por exemplo, ao abrir um editor de texto e começar a digitar, o corretor ortográfico está ativo. Muitas vezes, o documento está sendo salvo automaticamente. Quando você digita, existe uma funcionalidade que faz com que os caracteres apareçam na tela. Essas mini-tarefas ou mini-funções são chamadas de threads.
As threads funcionam como subprocessos, mas que estão dentro do mesmo processo, compartilhando a mesma "região". Traduzindo literalmente, threads seriam "linhas" ou "fios". São pequenos trechos de código que o processador executa tão rapidamente que você tem a sensação de que tudo está acontecendo ao mesmo tempo. Afinal, é como se cada partícula de código estivesse competindo para ser processada. Elas disputam entre si pelo processador, ou melhor dizendo, concorrem entre si. Daí vem o termo "concorrência".
Na verdade, o que o processador faz é executar uma thread, mudar para outra, depois voltar, e assim sucessivamente. Tudo isso ocorre tão rapidamente que você tem a impressão de que tudo está sendo executado simultaneamente. Mas, repito, isso é apenas uma sensação. É uma falsa ideia de que tudo está sendo executado de forma paralela, pois não há paralelismo nesse caso.
O que ocorre aqui é um pseudo-paralelismo, pois as threads estão alternando entre si. Não é tudo ao mesmo tempo. No entanto, você deve saber que as CPUs modernas estão muito avançadas.
Atualmente, os processadores possuem vários núcleos de processamento. E o que isso significa? Significa que, se cada thread for executada em um núcleo diferente, aí sim é possível executar tudo ao mesmo tempo, porque cada thread ocupará um núcleo diferente. Na situação em que você tem um único núcleo, as threads competem entre si para ver qual será executada. O núcleo alterna entre uma e outra rapidamente. Isso é o que chamamos de pseudo-paralelismo. Não há paralelismo real, é uma falsa impressão.
Repito: isso não acontece quando temos vários núcleos, pois cada thread é executada em seu próprio núcleo. Nesse caso, há, de fato, paralelismo real.
Então, só para resumir: um processo é uma instância de um programa em execução, que recebe um identificador único, o PID. Thread é uma pequena tarefa dentro do processo, que é executada pelo processador. Concorrência é a situação em que várias threads disputam a atenção do processador. Paralelismo ocorre quando várias threads são de fato executadas simultaneamente, em diferentes núcleos do processador. E pseudo-paralelismo é a impressão de que várias threads estão sendo executadas ao mesmo tempo, quando na verdade há uma alternância rápida entre elas.
Pode haver pseudo-paralelismo em mais de um núcleo. Isso é possível. Se houver quatro núcleos e 30 threads, os núcleos não darão conta de processar tudo ao mesmo tempo, então o processador precisará alternar entre as threads. Lembre-se: dentro de um processo, há várias threads. Por isso, ao abrir um programa, você consegue realizar várias tarefas simultaneamente, pois ele gerencia várias threads ao mesmo tempo, seja de forma paralela ou pseudo-paralela.
Falamos que o sistema operacional gerencia processos, mas ele também gerencia a memória do computador. O sistema aloca espaço na memória quando você inicia um novo processo e libera esse espaço quando o processo é encerrado. Ele determina qual parte da memória será utilizada pelo processador, garantindo que um processo não interfira no outro. Essa é um tipo de proteção essencial para evitar erros, como acessar a memória de outro processo, e serve para prevenir falhas de segurança, onde um processo malicioso poderia interferir no funcionamento de outro. E, embora os processos não interfiram entre si, eles podem se comunicar. Essa comunicação é chamada de IPC (Inter Process Communication), que é gerenciada por meio de técnicas como pipes e semáforos, todas sob responsabilidade do sistema operacional.
O sistema operacional também gerencia o armazenamento. Quando você salva um arquivo, o sistema decide onde ele será salvo no disco rígido e garante que você possa acessá-lo mais tarde. Ele também gerencia dispositivos de entrada e saída, como mouse, teclado, impressora, dispositivos de armazenamento externo ou qualquer outro dispositivo conectado ao computador.
Além dessas funções, o sistema operacional garante a segurança. Por exemplo, ele impede que você delete um arquivo enquanto ele está aberto, evitando erros. Outra função importante é fornecer uma interface, seja por linha de comando ou interface gráfica (GUI), para facilitar sua interação com o computador.
Agora chegamos ao ponto mais importante: o Kernel. O Kernel é o cérebro do sistema operacional. Ele faz a ponte entre os aplicativos e o hardware, gerenciando recursos, tempo de processamento e memória.
Por ser tão essencial, o Kernel opera em um modo protegido, o modo Kernel. Isso evita que aplicativos comuns acessem diretamente o hardware, o que poderia causar falhas graves ou comprometer a segurança do sistema. Apenas o Kernel possui privilégios para controlar esses recursos diretamente. Assim, enquanto você, usuário, atua no modo usuário (Ring 3), o Kernel atua no Ring 0, uma área mais restrita. Quando um programa precisa acessar o hardware, ele faz uma System Call (chamada de sistema), solicitando que o Kernel execute a ação. Entenda a System Call (traduzindo, "chamada ao sistema") como sendo o principal mecanismo utilizado por programas no modo usuário para pedir ao Kernel que execute ações que exigem maiores privilégios, como acessar hardware ou manipular processos.
Finalmente, vamos falar sobre virtualização. A virtualização permite que você crie máquinas virtuais dentro de um computador físico. Essas máquinas virtuais replicam computadores reais, com sistemas operacionais, processadores e memória próprios. O software que gerencia essas máquinas é chamado de hypervisor.
Você encontrará dois tipos de hypervisores: aqueles do tipo 1, que funcionam diretamente sobre o hardware (como o VMware ESXi), e os do tipo 2, que rodam sobre um sistema operacional existente (como o VirtualBox).
Uma das vantagens da virtualização é a flexibilidade e o isolamento. Se uma máquina virtual for infectada por um vírus, por exemplo, você pode apagá-la sem afetar o computador físico. Além disso, você pode ajustar a quantidade de memória e processador de cada máquina conforme sua necessidade.
Outro benefício da virtualização é a economia de recursos, pois você pode ajustar o desempenho da máquina virtual de acordo com suas necessidades. Também é excelente para testes, pois você pode realizar experimentos sem risco de afetar seu sistema principal. E, caso algo dê errado, basta deletar a máquina virtual e começar de novo.
Portabilidade também é uma vantagem importante. Você pode configurar uma máquina virtual em um computador e, posteriormente, transferi-la para outro sem maiores dificuldades. Isso facilita o backup, recuperação de pontos anteriores, e garante uma maior segurança dentro das máquinas virtuais.
Reduzir custos também é um ponto forte da virtualização. Em vez de comprar múltiplos computadores para rodar diferentes sistemas operacionais, você pode simplesmente criar várias máquinas virtuais dentro de uma única máquina física.
Muito conteúdo, não é? Mas espero que vocês tenham gostado. Consegui dar um overview interessante sobre sistemas operacionais. Falamos sobre processos, threads, responsabilidades, virtualização.
Espero que tenham aproveitado e até a próxima!