O que é Sistema Operacional

O sistema operacional que aqui chamaremos de SO, é um programa ou um conjunto de programas cuja função principal é gerenciar os recursos do computador como um todo. Também pode ser definido como um software que inicializa o computador, quando o ligamos, e que serve como a conexão entre os hardwares e os demais programas. Os principais recursos do computador que o SO gerencia são: definir qual o programa recebe atenção do processador por meio do gerenciamento do processador, gerenciar a memória e sua utilização, criar um sistema de arquivos e cuidar de todos os dispositivos ligados a ele, além de fornecer uma interface entre o computador e o usuário do sistema . É, na verdade, o primeiro programa que o computador executa no momento que é ligado, chamado de bootstrapping, e fica funcionando até que o computador seja desligado. Com o sistema operacional não conseguimos realizar as tarefas como acessar uma página na internet, redigir um documento ou uma planilha, mas sem o SO os demais aplicativos não poderiam acessar os dispositivos de hardware ou fazer a comunicação entre os aplicativos. O sistema operacional pode ser visualizado como uma camada entre o hardware e os aplicativos. Como exemplo, a impressão de um documento: toda vez que um aplicativo necessita imprimir, este irá pedir ao SO que encaminhe seu material à impressora. É o SO que gerencia o envio do documento a impressora. Toda vez que um aplicativo precisa salvar uma informação para recuperá-la posteriormente, o aplicativo irá solicitar ao SO que ative o dispositivo de armazenamento (que pode ser o hd, pendrive, cartão de memória e etc).

Histórico dos Sistemas Operacionais
Nos primórdios da computação, em meados da década de 40, não existia o conceito
de sistema operacional propriamente dito, visto que, as operações eram definidas
por meio de hardware. Nesse período, era muito comum que a mesma pessoa
projetasse, programasse e utilizasse os computadores. A principal implicação desta
abordagem é o fato de que era muito difícil criar rotinas programáveis, exigindo
trabalho intenso dos operadores de máquinas.
No início da computação, os sistemas operacionais eram únicos, pois cada
mainframe (computador de grande porte) vendido necessitava de um sistema operacional
específico para ele. Esse problema era resultado de arquiteturas diferentes
e da linguagem de máquina utilizada.
Na década de 1960, uma equipe de desenvolvedores da at&t Bell Labs resolveu
trabalhar em um software mais objetivo e simplificado do que aquele que era utilizado
nos mainframes da época. Após alguns anos, mais precisamente em 1969,
o resultado foi o sistema operacional proprietário apelidado de unix (Serviço de
Computação e Informação Uniplexada). Unix é um sistema operacional portável, multitarefa
e multiutilizador originalmente criado por Ken Thompson, Dennis Ritchie,
Douglas McIlroy e Peter Weiner, que trabalhavam nos Laboratórios Bell (Bell
Labs) da at&t. A marca unix é uma propriedade do The Open Group, uma
companhia formada por empresas de informática.
De início, o sistema foi programado especificamente para um tipo de máquina,
mas, em 1973, o software foi recodificado para a linguagem C. Apesar de se tratar
de um software com código fechado, a at&t forneceu cópias para universidades.
Em 1977, o un ix teve seu primeiro descendente. Ainda que tivesse características
próprias, o SO bsd estava claramente ligado com seu antecessor, visto que utilizava
parte do código-fonte e do design do sistema que foi criado pela at&t. De início, o
sistema era apenas uma extensão do unix e agregava algumas poucas funcionalidades.
Assim como seu “pai”, o bsd também adotou a ideia do código fechado (algo
que foi mudado décadas depois), mas isso não era exatamente um problema, visto
que ele era voltado para o uso em universidades e máquinas de grande porte.
Tanto o Unix quanto o bsd, em suas primeiras versões, foram desenvolvidos para
o uso de computadores de grande porte, normalmente em universidades.
Contudo,
alguns jovens programadores possuíam uma ideia absurda para época: criar
sistemas operacionais para o uso de pessoas comuns.
Um dos primeiros a pensar desta forma foi Steve Jobs, fundador da Apple. Desde
a criação de sua empresa, seu principal objetivo foi a criação de computadores com
sistemas operacionais fáceis de serem operados. O lançamento do Apple I em 1976,
um dos primeiros computadores pessoais, foi um marco na história da computação.
Pela primeira vez, um pc (Personal Computer ou Computador Pessoal) continha
um teclado fácil de ser utilizado, com uma minitelevisão adaptada como monitor.
Assim, conhecimentos avançados de computação já não eram mais requisitos para
se operar um pc. O Apple Machintosh foi lançado em 1984, introduzindo o conceito
de desktop, utilizando ícones e pastas para representar programas e arquivos do
modo como conhecemos hoje. Esta máquina acompanhava o revolucionário e
inovador SO chamado mac os.
No início dos anos 90, o mercado de sistemas operacionais sofreu novo boom
com o lançamento do Windows 3.0 (1990) e do Windows 3.1(1992).
No final dos anos 90, o código do Macintosh apresentava muitos problemas, o
que obrigou que um novo plano fosse traçado. Em 2001, a Apple surpreendeu o
mundo da informática, abandonando o seu próprio código e reescrevendo todo
o seu sistema operacional usando o Unix como base. A partir daí ele passou a se
chamar MAC OSX, sistema que continua forte até os dias de hoje.
Principais funções de um Sistema Operacional
O sistema operacional pode ser visto como um programa de grande complexidade, responsável por todo o funcionamento de uma máquina, desde o software até o hardware instalado. O SO está por trás de tudo que é feito pelo computador por meio de uma programação complexa que comanda todas as funções da máquina.
Os principais sistemas operacionais utilizados nos computadores pessoais na atualidade e suas devidas variações são: Windows, Linux e o Mac OS.
Um sistema operacional possui basicamente as seguintes funções: gerenciamento de processos, gerenciamento de memória, sistemas de arquivos e entrada e saída de dados.
Gerenciamento de processos
Um sistema operacional multitarefa é preparado para dar uma visão ao usuário de que o número de processos que executam simultaneamente é maior que o número de processos instalados. Cada processo possui uma parte do tempo e a alternância desses processos é tão rápida que dá uma impressão aos usuários de que tudo está sendo executado simultaneamente. Para determinar qual o processo que está sendo executado naquele instante, são utilizados algoritmos que fazem o gerenciamento dos processos. A comunicação, entre os diversos processos, é chamada de ipc (Inter-Process Communication). Os mecanismos que estão por trás dessa comunicação são: os sinais, pipes, named pipes, memória compartilhada, soquetes (sockets) e troca de mensagens. O sistema operacional deve possibilitar normalmente o multiprocessamento. Neste caso, processos distintos e threads (fluxos de execução) podem ser executados em diferentes processadores. Para isso, o processo deve ser gerenciável a ponto de sofrer uma interrupção durante a execução de uma tarefa caso necessite.
Fique esperto no significado!
O termo "thread" é frequentemente usado no contexto da programação e se refere a uma sequência de execução dentro de um programa. Uma thread é uma unidade básica de execução que pode ser agendada e executada pelo sistema operacional. Ela permite que um programa seja executado de forma concorrente, com várias partes do código sendo executadas simultaneamente. As threads são usadas para melhorar a eficiência e a capacidade de resposta de um programa, especialmente em situações em que várias tarefas precisam ser realizadas simultaneamente. Em vez de executar uma tarefa de cada vez, o uso de threads permite que várias tarefas sejam executadas em paralelo, aproveitando os recursos disponíveis, como múltiplos núcleos de processador. Uma thread é composta por um fluxo sequencial de instruções que são executadas independentemente de outras threads no programa. Cada thread tem seu próprio contador de programa, pilha de chamadas e estado de registro. As threads compartilham o mesmo espaço de memória do processo em que estão sendo executadas, o que permite que elas acessem e compartilhem dados entre si. As threads podem ser usadas para realizar tarefas diferentes e independentes dentro de um programa, ou podem ser usadas para dividir uma tarefa em partes menores e executá-las em paralelo. Por exemplo, em um programa de processamento de imagens, pode-se usar uma thread para carregar a imagem, outra thread para aplicar filtros e uma terceira thread para exibir o resultado. Isso permite que essas tarefas sejam executadas simultaneamente, melhorando o desempenho geral do programa. No entanto, é importante ressaltar que o uso de threads requer cuidados especiais, pois a concorrência pode introduzir problemas de sincronização e acesso incorreto a dados compartilhados. É necessário garantir que as threads sejam coordenadas corretamente e que o acesso a recursos compartilhados seja gerenciado de forma adequada para evitar condições de corrida e erros de programação. Em resumo, uma thread é uma sequência de instruções em um programa que pode ser executada independentemente de outras threads. Elas são usadas para permitir a execução concorrente de tarefas e melhorar o desempenho e a capacidade de resposta dos programas..
Gerenciamento de memória
O sistema operacional tem acesso completo à memória lógica e física do sistema, permitindo que os processos dos usuários tenham acesso seguro quando fazem solicitação de alocação de memória. O principal objetivo do gerenciamento de memória nos sistemas operacionais é apresentar técnicas de gerência de memória que possibilitam o carregamento de todo, ou parte, do programa a ser executado para a memória. Entretanto, um programa não precisa estar todo na memória para executar. Às vezes, algumas partes de programa não são necessárias o tempo todo. As técnicas de gerência de memória estão intimamente ligadas ao hardware do computador. Na prática, as arquiteturas existentes no mercado, possuem uma série de detalhes que tornam complexa a sua implementação, utilizando os mecanismos de gerência de memória. A memória pode ser definida como lógica e física. A memória lógica de um processo é que o processo é capaz de endereçar e acessar usando as suas instruções. Em outras palavras, é aquela que o processo enxerga. Todos os endereços manipulados pelo processo são endereços lógicos. A memória física é implementada pelos circuitos integrados de memória, pela eletrônica do computador. O endereço físico é aquele que vai para a memória física usada para endereçar os circuitos integrados de memória. Também temos os espaços de endereçamentos lógicos e físicos. Os espaços de endereçamentos lógicos são formados por todos os endereços lógicos que o processo pode gerar. Existe um espaço de endereçamento lógico por processo. Já o espaço de endereçamento físico é formado por todos os endereços aceitos pelos circuitos integrados da memória. A unidade de gerência de memória (Memory Management Unit, mmu) é o componente do hardware responsável por prover os mecanismos básicos que serão usados pelo sistema operacional para gerenciar a memória. Em outras palavras, é a mmu que vai mapear os endereços lógicos gerados pelos processos nos correspondentes endereços físicos que serão enviados para a memória.Sistemas de arquivos
A memória principal do computador é volátil, e seu tamanho é limitado pelo custo do hardware. Assim, os usuários necessitam de algum método para armazenar e recuperar informações de modo permanente. Os sistemas operacionais agrupam os dados em compartimentos lógicos para armazená-los em disco (memória secundária, tais como hd, pendrive, etc). Esses grupos de dados são chamados de arquivos. Os computadores armazenam informações em arquivos e estes podem conter instruções de programas ou dados criados e usados por um programa. A maioria dos programas vem com inúmeros arquivos. Esses programas também permitem que você crie seus próprios conjuntos de dados e armazene-os como arquivos. O SO também mantém uma lista de arquivos contidos nos discos. Um arquivo é um conjunto de bytes, normalmente armazenado em um dispositivo periférico não volátil, como por exemplo, um disco rígido que pode ser lido e gravado por um ou mais processos. Eles são normalmente implementados a partir de discos magnéticos (sta llings,,2010). Um arquivo pode conter um programa executável, um código fonte (código escrito em uma linguagem de programação), um texto, uma planilha, uma figura, uma fotografia, uma música, um vídeo ou um conjunto de arquivos compactados.Fique esperto no significado!
Em informática, os termos “volátil” ou “não volátil” são aplicados às memórias (componentes de armazenamento de informações). A memória RAM é considerada um tipo de memória “volátil”, pois todos os dados que não forem guardados de forma permanente serão apagados após encerramento do computador.
Fique esperto no significado!
Uma interface de linha de comandos (ILC), em inglês command-line interface (CLI), é um meio de interagir com um programa de computador, onde o utilizador emite comandos para o programa sob a forma de sucessivas linhas de texto (linhas de comando).
Classificação dos SOs
Segundo Machado (2014), os sistemas operacionais estão aqui classificados em duas divisões: quanto a sua arquitetura (projeto) e quanto ao gerenciamento dos processos.Em relação a sua arquitetura, temos:
» Núcleo monolítico ou monobloco: o núcleo consiste em um único processo executando as principais funções em uma memória protegida;
» Micronúcleo ou modelo cliente – servidor: o núcleo consiste de funções mínimas como comunicação e gerenciamento de processos, sistemas de arquivos e gerenciamento de memória. São executadas no espaço do usuário;
» Sistemas de camadas: funções do núcleo irão executar em camadas distintas, de acordo com seu nível de privilégio;
» Monitor de máquinas virtuais: fornece uma abstração do hardware para vários sistemas operacionais. Ex: VMware, Xen dentre outros.
Em relação ao gerenciamento de processos, temos:
» Monotarefa: pode-se executar apenas um processo de cada vez. Exemplo, MS-DOS.
» Multitarefa: além do próprio SO, vários processos estão carregados em memória, sendo que um pode estar ocupando o processador e outros ficam enfileirados, aguardando a sua vez. O compartilhamento de tempo no processador é distribuído de modo que o usuário tenha a impressão que diversos processos estão sendo executados simultaneamente. Exemplos são os SOs Linux, Windows, FreeBSD e Mac OS X.
» Multiprocessamento: o SO distribui as tarefas entre dois ou mais processadores.
» Multiprogramação: o SO divide o tempo de processamento entre vários processos mantendo o processador sempre ocupado.
Além dessas classificações, encontra-se na literatura uma divisão quanto à quantidade de usuários que podem utilizar o sistema simultaneamente. São eles, os monousuários e os multiusuários.
Em um SO monousuário apenas um usuário acessa o sistema por vez, apesar de suportar recursos como troca de usuários e os multiusuários, vários usuários podem utilizar o computador ao mesmo tempo, seja por terminais ou por conexão remota SSH.
Hoje em dia se destacam no mercado corporativo e doméstico três sistemas operacionais, windows, Mac OS, Linux.

O Windows é um sistema operacional desenvolvido pela Microsoft. É um dos sistemas operacionais mais populares e amplamente utilizados em computadores pessoais e em uma variedade de dispositivos, como laptops, tablets e desktops. O Windows oferece uma interface gráfica do usuário (GUI) que permite aos usuários interagir com o computador de forma intuitiva, usando ícones, menus e janelas.

Linux é um sistema operacional de código aberto e livre, baseado no kernel Linux. Ele foi criado por Linus Torvalds em 1991 e se tornou uma alternativa popular ao Windows e a outros sistemas operacionais proprietários.

O macOS é um sistema operacional desenvolvido pela Apple exclusivamente para os computadores Mac. É um sistema operacional baseado em Unix e oferece uma interface gráfica do usuário (GUI) elegante e intuitiva.