Processos, Espaços de Endereçamento e Arquivos em Sistemas Operacionais

Neste tutorial sobre Sistemas Operacionais (do ponto de vista da programação) , iremos aprender três conceitos básicos, e de grande importância, para o estudo e entendimento do funcionamento dos SO's: processos, espaços de endereçamento e arquivos.



Processo, em Sistemas Operacionais

Processo é, simplesmente, um programa em execução.
Quando você abriu seu navegador para entrar em nosso site, um processo se iniciou.
Quando abriu seu player de música (para ouvir Rock Progressivo, claro), outro processo foi iniciado.

Se estiver no Linux, digite no terminal ps aux ou tasklist no propompt, caso esteja no Windows.
Você verá uma longa lista, onde cada linha é um processo que está executando em seu computador.

Se você tentar criar novos processos através da linha de comando (DOS ou Shell), vai notar uma coisa interessante: somente um processo, de cada vez, será executado.
Deu dois comandos? Ok, mas o segundo só vai ser executado depois do segundo.

Durante muito tempo, os sistemas operacionais só funcionavam assim, executando um processo de cada vez. Graças aos vários núcleos (máquinas multicore), as coisas já mudara radicalmente, mas mesmo assim, essa ideia de "um por vez" ainda existe, e acontece sem que você perceba.








Multiprocessamento em Sistemas Operacionais

Se você está com vários programas (processos) abertos nesse momento, e acha que seu computador está executando tudo ao mesmo tempo, saiba de uma coisa: sabe de nada, inocente!
Na verdade, isso é uma tremenda de uma abstração que o hardware faz, literalmente nos iludindo.

Os sistemas atuais, ditos multiprogramação, ficam variando de processo em processo.
É um trabalho conjunto do sistema operacional com a CPU.

O SO pega um processo, e manda pra CPU para ser executado.
Não terminou? Então ele pausa um pouco esse process, e coloca outro pra CPU executar.
Se não terminar, ele pausa também, e vai chamando o próximo.

O grande segredo segredo da coisa é: isso é tão, tão, tão rápido que nem percebemos.
A execução de uma instrução nos processadores dura nanosegundos ou menos.
Assim, o Sistema Operacional "libera" alguns milissegundos para cada processo (e dá pra fazer MUITA coisa, em termos de processamento, nesse tempo).

Porém, nós humanos, não notamos essa pausa, volta e tudo mais, pois são tempos imperceptíveis para nós. Mas sim, é assim que ocorre por debaixo dos panos.
Mesmo que tenha vários núcleos, os processos chegam, executam, param, vão para uma fila e esperam sua vez de novo. É um por vez, e não vários ao mesmo tempo em cada núcleo de processamento destes.










Árvore de Processo, Estados de Processos e Comunicações

Sistemas Operacionais segundo a programação e computação
Processos em um Sistema Operacional
Uma coisa importante a se ter em mente, agora nestes tutoriais básicos, é que os processos podem dar origem a novos processos, que são chamados de processos filhos.

Por exemplo, você abre um editor de textos, é um processo.
Aí você escolhe abrir um arquivo salvo, e é disparado outro processo para fazer a buscar desse arquivo, vasculhando seu sistema de arquivos.

Então, os processos podem dar origem a novos processos, que por sua vez dão origem a outros, e assim sucessivamente, enquanto for necessário para se executar o que desejarmos. No fim das contas, é como se tivéssemos uma árvore de processos (faça uma analogia com a estrutura dinâmica de dados, em programação).

Além disso, seus processos se comunicam. As vezes, um depende do resultado de outro para prosseguir, ou mesmo dois processos trabalham junto (cooperação) para realizar uma mesma tarefa, e até chegam a competir para saber que processo será executado na CPU.

Na figura ao lado, temos uma ideia mais realista sobre as coisas que estão acontecendo agora,em sua máquina, com os processos, onde um cria outro, que se comunicam com outros, uns começam, outros terminam etc.

Em tutoriais futuros, iremos entrar em mais detalhes nos processos, criando-os através de programação (linguagem C).









Gerenciamento do Espaço de Endereçamentos dos Processos

Todo processo vai requerer recursos do sistema, dependendo do processo e da máquina.
Assim, um programa executado vai precisar, por exemplo, de memória.

Um conjunto de endereços fica a disposição dos processos, então na maioria dos computadores, vai depender da arquitetura da máquina. Ou seja, o espaço de endereçamento vai até 2³² para máquinas de 32 bits e até 2⁶⁴ para 64 bits.

Indo além da questão do espaço de endereçamento, dependendo do processo, este pode querer muitos outros recursos.
Por exemplo, dissemos que a CPU está a todo instante executando algum processo, parando, executando outro, parando, outro...

Mas imagine que está ouvindo uma música, esse processo está sendo executado.
A CPU vai executar outro processo e depois volta pra sua música (sim, ocorre esse vai, para e volta, mas tudo to rápido que não percebemos). Obviamente, a música deve retornar do ponto que parou.

Logo, sempre que um processo é pausado, uma série de informações tem que ser salvas, para saber exatamente onde parou e retomar exatamente desse ponto quando esse processo voltar a ser executado.
Isso tudo é feito diretamente no hardware, no processador, e envolve pilhas, ponteiros de pilhas, contadores de programa e outros registros especiais (varia de acordo com o processador).

Entraremos mais detalhadamente nesses assuntos em outros tutoriais sobre sistemas operacionais.


Arquivos em Sistemas Operacionais

De nada adiantaria ter um sistema operacional ou mesmo um hardware, se não pudéssemos armazenar informações nele.
Imagine seu computador ou celular totalmente zerado, sem arquivos, a cada vez que você liga.

Porém, para o usuário comum, é totalmente inviável ver os dados no modo mais natural, de bits.
Por isso, os sistemas operacionais nos fornecem uma maneira fantasticamente simples, agradável e interessante de ver essas informações, através de arquivos.

Para facilitar a organização do usuário, os sistemas operacionais utilizam o conceito de diretório (também conhecidos por pastas), que facilitam o manuseio dos arquivos.
Embora não existe no começo da computação, hoje se tornaram obrigatório, pois um usuário comum necessita de milhares ou milhões de arquivos, e os dividir em diretórios é essencial.

O sistema operacional fornecem chamadas específicas para trabalharmos com arquivos, como comando para inserir, mover e apagar arquivos.

É importante saber, em termos de estudos de sistemas operacionais, que cada arquivo, dos milhões que devem ter em seu computador, que cada um deve possuir um único endereço.
Esses endereços são formados através de uma hierarquia de diretórios, a partir de um diretório raiz.

Os caminhos, ou endereços dos arquivos, são essenciais para quando formos trabalhar com eles usando as chamadas do SO.
Porém, só isso não basta.

Antes de usarmos um arquivo, devemos abri-lo (quem já estudou arquivos em alguma linguagem de programação, como em C, sabe disso), e nesse instante será tratado a questão de permissões do arquivo, através do descritor de arquivos, um dado (número inteiro) que nos diz se podemos abrir tal arquivo ou não.

Porém, não basta só abrir. As vezes se pode somente ler, as vezes escrever, pode-se proibir de ser apagado por determinado usuário, etc.
Há muitas possibilidades com o sistema de arquivos, que iremos estudar em detalhes, usando programação, em tutoriais futuros.

Mas, por hora, é interessante ter essa noção sobre esses conceitos em Sistemas Operacionais.


Arquivos no Sistema Operacional Unix

Como podemos ver, arquivos não são bons ou importantes. São essenciais.
Sem exagero algum, sem essas ideias e conceitos de arquivos, a tecnologia não estaria no patamar atual.

Se os arquivos são essenciais, nos sistemas operacionais derivados do Unix, são mais ainda.

2 comentários:

Anônimo disse...

muito bom estou começando agora no mundo do desenvolvimento de sistemas operacionais.

Anônimo disse...

Muito bom!