O sistema operacional define a nossa experiência em computação. É o primeiro software que vemos quando ligamos o computador, e o último software que vemos quando o computador é desligado. É o software que habilita todos os programas que usamos. O sistema operativo organiza e controla o hardware nas nossas mesas e nas nossas mãos, mas a maioria dos utilizadores não pode dizer com exactidão o que é que o sistema operativo faz.
Nesta edição de HowStuffWorks, vamos dizer-lhe o que um software deve fazer para ser chamado de sistema operacional, e mostrar-lhe como o sistema operacional funciona para transformar uma coleção de hardware em uma poderosa ferramenta de computação!
A Bare Bones
É importante perceber que nem todos os computadores têm sistemas operativos. O computador que controla o forno microondas na sua cozinha, por exemplo, não precisa de um sistema operativo. Ele tem um conjunto de tarefas relativamente simples de executar, métodos de entrada e saída muito simples (um teclado e um ecrã LCD), e hardware simples, nunca mudando para controlar. Para um computador como este, um sistema operacional seria uma bagagem desnecessária, acrescentando complexidade onde nenhuma é necessária. Em vez disso, o computador em um forno microondas simplesmente executa um único programa o tempo todo.
Para sistemas de computador que vão além da complexidade do microondas, no entanto, um sistema operacional pode ser a chave para uma maior eficiência operacional e um desenvolvimento de aplicativos mais fácil. Todos os computadores desktop têm sistemas operacionais. Os mais comuns são a família de sistemas operacionais Windows, a família UNIX de sistemas operacionais e os sistemas operacionais Macintosh. Há centenas de outros sistemas operacionais disponíveis para aplicações especiais, incluindo especializações para mainframes, robótica, fabricação, sistemas de controle em tempo real e assim por diante.
No nível mais simples, um sistema operativo faz duas coisas:
>
- Gere os recursos de hardware e software do sistema informático. Estes recursos incluem coisas como o processador, memória, espaço em disco, etc.
- Provê uma forma estável e consistente para as aplicações lidarem com o hardware sem terem que conhecer todos os detalhes do hardware.
A primeira tarefa, gerir os recursos de hardware e software, é muito importante, pois vários programas e métodos de entrada competem pela atenção da unidade central de processamento (CPU) e exigem memória, armazenamento e largura de banda de entrada/saída (I/O) para os seus próprios fins. Nesta capacidade, o sistema operacional desempenha o papel do bom pai, garantindo que cada aplicação obtenha os recursos necessários, enquanto joga bem com todas as outras aplicações, bem como a capacidade limitada do sistema para o maior bem de todos os usuários e aplicações.
A segunda tarefa, fornecer uma interface consistente de aplicativos, é especialmente importante se houver mais de um tipo particular de computador usando o sistema operacional, ou se o hardware que compõe o computador estiver sempre aberto para mudanças. Uma interface consistente de programas de aplicação (API) permite que um desenvolvedor de software escreva uma aplicação em um computador e tenha um alto nível de confiança de que ela será executada em outro computador do mesmo tipo, mesmo que a quantidade de memória ou a quantidade de armazenamento seja diferente nas duas máquinas. Mesmo que um determinado computador seja único, um sistema operativo pode garantir que as aplicações continuam a funcionar quando ocorrem actualizações e actualizações de hardware, porque o sistema operativo e não a aplicação está encarregado de gerir o hardware e a distribuição dos seus recursos. O Windows 98 é um grande exemplo da flexibilidade que um sistema operacional oferece. O Windows 98 é executado em hardware de milhares de fornecedores. Ele pode acomodar milhares de diferentes impressoras, unidades de disco e periféricos especiais em qualquer combinação possível.
Com a ampla família de sistemas operacionais, existem geralmente quatro tipos, categorizados com base nos tipos de computadores que eles controlam e no tipo de aplicações que suportam. As categorias amplas são:
- Sistema operacional em tempo real (RTOS) – Sistemas operacionais em tempo real são usados para controlar máquinas, instrumentos científicos e sistemas industriais. Um RTOS normalmente tem muito pouca capacidade de interface com o usuário, e nenhuma utilidade para o usuário final, uma vez que o sistema será uma “caixa selada” quando entregue para uso. Uma parte muito importante de um RTOS é a gestão dos recursos do computador para que uma determinada operação seja executada precisamente no mesmo tempo cada vez que ela ocorre. Em uma máquina complexa, ter uma peça movendo-se mais rapidamente só porque os recursos do sistema estão disponíveis pode ser tão catastrófico quanto não se movimentar, pois o sistema está ocupado.
- Único usuário, única tarefa – Como o nome indica, este sistema operacional foi projetado para gerenciar o computador para que um usuário possa efetivamente fazer uma coisa de cada vez. O Palm OS para computadores de mão Palm é um bom exemplo de um sistema operacional moderno de usuário único e de tarefa única.
- Single-user, multi-tarefa – Este é o tipo de sistema operacional que a maioria das pessoas usam em seus computadores desktop e laptop hoje em dia. O Windows 98 e o MacOS são ambos exemplos de um sistema operacional que permitirá a um único usuário ter vários programas em funcionamento ao mesmo tempo. Por exemplo, é inteiramente possível que um usuário Windows esteja escrevendo uma nota em um processador de texto enquanto baixa um arquivo da Internet enquanto imprime o texto de uma mensagem de e-mail.
- Multi-user – Um sistema operacional multiusuário permite que muitos usuários diferentes tirem proveito dos recursos do computador simultaneamente. O sistema operacional deve garantir que os requisitos dos vários usuários sejam equilibrados, e que cada um dos programas que estão usando tenha recursos suficientes e separados para que um problema com um usuário não afete toda a comunidade de usuários. Unix, VMS e sistemas operacionais mainframe, como o MVS, são exemplos de sistemas operacionais multiusuário.
É importante diferenciar aqui entre sistemas operacionais multiusuário e sistemas operacionais de usuário único que suportam rede. O Windows 2000 e a Novell Netware podem suportar centenas ou milhares de usuários em rede, mas os próprios sistemas operacionais não são verdadeiros sistemas operacionais multiusuário. O administrador do sistema é o único “usuário” para o Windows 2000 ou Netware. O suporte de rede e todos os logins remotos de usuários que a rede permite são, no plano geral do sistema operacional, um programa sendo executado pelo usuário administrativo.
Tendo os diferentes tipos de sistemas operacionais em mente, é hora de olhar para as funções básicas fornecidas por um sistema operacional.
Chamada de despertar
Quando a energia de um computador é ligada, o primeiro programa que é executado é geralmente um conjunto de instruções guardado na memória somente leitura (ROM) do computador que examina o hardware do sistema para ter certeza de que tudo está funcionando corretamente. Este autoteste de ligação (POST) verifica a CPU, memória e sistemas básicos de entrada-saída (BIOS) quanto a erros e armazena o resultado em uma localização especial da memória. Assim que o POST for concluído com sucesso, o software carregado na ROM (às vezes chamado de firmware) começará a ativar as unidades de disco do computador. Na maioria dos computadores modernos, quando o computador ativa o disco rígido, ele encontra a primeira peça do sistema operacional: o carregador de bootstrap.
O carregador bootstrap é um pequeno programa que tem uma única função: Ele carrega o sistema operacional na memória e permite que ele comece a funcionar. Na forma mais básica, o carregador bootstrap configura os pequenos programas de driver que fazem interface e controlam os vários subsistemas de hardware do computador. Configura as divisões de memória que contêm o sistema operativo, a informação do utilizador e as aplicações. Estabelece as estruturas de dados que irão conter os inúmeros sinais, bandeiras e semáforos que são utilizados para comunicar dentro e entre os subsistemas e aplicações do computador. Em seguida, ele passa o controle do computador para o sistema operacional.
As tarefas do sistema operativo, no sentido mais geral, dividem-se em seis categorias:
- Gestão de processador
- Gestão de memória
- Gestão de dispositivos
- Gestão de armazenamento
- Interface de aplicação
- Interface de utilizador
Embora haja quem argumente que um sistema operativo deve fazer mais do que estas seis tarefas, e alguns fornecedores de sistemas operacionais constroem muito mais programas utilitários e funções auxiliares em seus sistemas operacionais, estas seis tarefas definem o núcleo de quase todos os sistemas operacionais. Vamos ver as ferramentas que o sistema operacional utiliza para executar cada uma dessas funções.
Gerenciamento do processador
O coração do gerenciamento do processador se resume a duas questões relacionadas:
>
- Confirmar que cada processo e aplicação recebe tempo suficiente do processador para funcionar adequadamente
- Usar o maior número possível de ciclos do processador para trabalho real
A unidade básica de software com que o sistema operacional lida ao programar o trabalho feito pelo processador é ou um processo ou um thread, dependendo do sistema operacional.
É tentador pensar num processo como uma aplicação, mas isso dá uma imagem incompleta de como os processos se relacionam com o sistema operativo e o hardware. A aplicação que você vê (processador de texto ou planilha ou jogo) é, de fato, um processo, mas essa aplicação pode fazer com que vários outros processos comecem, para tarefas como comunicação com outros dispositivos ou outros computadores. Existem também inúmeros processos que correm sem lhe dar provas directas de que alguma vez existiram. Um processo, então, é um software que executa alguma ação e pode ser controlado — por um usuário, por outros aplicativos ou pelo sistema operacional.
São processos, ao invés de aplicativos, que o sistema operacional controla e agenda a execução pela CPU. Em um sistema com uma única tarefa, a programação é simples. O sistema operacional permite que a aplicação comece a funcionar, suspendendo a execução apenas o tempo suficiente para lidar com as interrupções e a entrada do usuário. As interrupções são sinais especiais enviados por hardware ou software para a CPU. É como se alguma parte do computador levantasse de repente a mão para pedir a atenção da CPU em uma reunião animada. Algumas vezes o sistema operacional irá agendar a prioridade dos processos para que as interrupções sejam mascaradas — ou seja, o sistema operacional irá ignorar as interrupções de algumas fontes para que um determinado trabalho possa ser terminado o mais rápido possível. Existem algumas interrupções (tais como as de condições de erro ou problemas de memória) que são tão importantes que não podem ser ignoradas. Estas interrupções não-máscaras (MNIs) devem ser tratadas imediatamente, independentemente das outras tarefas em questão.
Embora as interrupções acrescentem alguma complicação à execução dos processos em um sistema mono-tarefa, o trabalho do sistema operacional se torna muito mais complicado em um sistema multitarefa. Agora, o sistema operacional deve organizar a execução das aplicações para que você acredite que há várias coisas acontecendo ao mesmo tempo. Isto é complicado porque a CPU só pode fazer uma coisa de cada vez. Para dar a aparência de muitas coisas acontecendo ao mesmo tempo, o sistema operacional tem que alternar entre diferentes processos milhares de vezes por segundo. Aqui está como isso acontece.
- Um processo ocupa uma certa quantidade de RAM. Ele também faz uso de registros, pilhas e filas dentro da CPU e do espaço de memória do sistema operacional.
- Quando dois processos são multi-tarefas, o sistema operacional aloca um certo número de ciclos de execução da CPU para um programa.
- Após esse número de ciclos, o sistema operacional faz cópias de todos os registros, pilhas e filas utilizadas pelos processos, e anota o ponto em que o processo pausou em sua execução.
- Carrega então todos os registros, pilhas e filas utilizados pelo segundo processo e permite um certo número de ciclos de CPU.
- Quando estes estão completos, ele faz cópias de todos os registros, pilhas e filas utilizadas pelo segundo programa, e carrega o primeiro programa.
Toda a informação necessária para manter o controle de um processo quando a comutação é mantida em um pacote de dados chamado bloco de controle de processo. O bloco de controle de processo normalmente contém:
- Um número de identificação que identifica o processo
- Pontos para os locais no programa e seus dados onde o processamento ocorreu pela última vez
- Conteúdo do registro
- Estados de vários flags e switches
- Pontos para o e limites inferiores da memória necessária para o processo
- Uma lista de ficheiros abertos pelo processo
- A prioridade do processo
- O estado de todos os dispositivos de E/S necessários ao processo
Quando o estado do processo muda, De pendente para ativo, por exemplo, ou de suspenso para em execução, as informações no bloco de controle de processo devem ser utilizadas como os dados em qualquer outro programa para direcionar a execução da parte de comutação de tarefas do sistema operacional.
Esta troca de processos acontece sem interferência direta do usuário, e cada processo recebe ciclos de CPU suficientes para realizar sua tarefa em um período de tempo razoável. O problema pode vir, no entanto, se o usuário tentar ter muitos processos funcionando ao mesmo tempo. O próprio sistema operacional requer alguns ciclos de CPU para realizar a gravação e a troca de todos os registros, filas e pilhas dos processos da aplicação. Se forem iniciados processos suficientes, e se o sistema operacional não tiver sido cuidadosamente projetado, o sistema pode começar a usar a grande maioria dos seus ciclos de CPU disponíveis para fazer a troca entre processos ao invés de executar processos. Quando isso acontece, chama-se thrashing, e normalmente requer algum tipo de intervenção direta do usuário para parar os processos e trazer a ordem de volta ao sistema.
Uma forma de os designers de sistemas operacionais reduzirem a chance de thrashing é reduzindo a necessidade de novos processos para executar várias tarefas. Alguns sistemas operacionais permitem um “process-lite”, chamado thread, que pode lidar com todo o trabalho intensivo de CPU de um processo normal, mas geralmente não lida com os vários tipos de E/S e não estabelece estruturas que requerem o extenso bloco de controle de processo de um processo normal. Um processo pode iniciar muitas threads ou outros processos, mas uma thread não pode iniciar um processo.
Até agora, todo o agendamento que discutimos diz respeito a uma única CPU. Em um sistema com duas ou mais CPUs, o sistema operacional deve dividir a carga de trabalho entre as CPUs, tentando equilibrar as demandas dos processos necessários com os ciclos disponíveis nas diferentes CPUs. Os sistemas operacionais assimétricos utilizam uma CPU para suas próprias necessidades e dividem os processos de aplicação entre as CPUs restantes. Sistemas operacionais assimétricos dividem-se entre as várias CPUs, equilibrando a demanda com a disponibilidade da CPU, mesmo quando o próprio sistema operacional é tudo o que está em execução.
Even se o sistema operacional é o único software com necessidades de execução, a CPU não é o único recurso a ser programado. O gerenciamento de memória é o próximo passo crucial para garantir que todos os processos sejam executados sem problemas.
Gestão de memória e armazenamento
Quando um sistema operacional gerencia a memória do computador, há duas tarefas amplas a serem realizadas:
- Cada processo deve ter memória suficiente para ser executado, e não pode correr para o espaço de memória de outro processo nem ser corrido por outro processo.
- Os diferentes tipos de memória no sistema devem ser usados corretamente para que cada processo possa ser executado com mais eficiência.
A primeira tarefa requer que o sistema operacional estabeleça limites de memória para tipos de software e para aplicações individuais.
Como exemplo, vamos olhar para um sistema imaginário com 1 megabyte (1.000 kilobytes) de RAM. Durante o processo de inicialização, o sistema operacional do nosso computador imaginário é projetado para ir até o topo da memória disponível e depois “fazer backup” o suficiente para atender às necessidades do próprio sistema operacional. Digamos que o sistema operativo precisa de 300 kilobytes para funcionar. Agora, o sistema operacional vai para o fundo do pool de RAM e começa a se acumular com os vários drivers de software necessários para controlar os subsistemas de hardware do computador. No nosso computador imaginário, os drivers ocupam 200 kilobytes. Assim, depois de carregar completamente o sistema operativo, restam 500 kilobytes para os processos de aplicação.
Quando as aplicações começam a ser carregadas na memória, elas são carregadas em blocos de tamanhos determinados pelo sistema operacional. Se o tamanho do bloco for de 2 kilobytes, então cada processo que for carregado receberá um pedaço de memória que é um múltiplo de 2 kilobytes de tamanho. As aplicações serão carregadas nestes tamanhos fixos de blocos, com os blocos começando e terminando em limites estabelecidos por palavras de 4 ou 8 bytes. Estes blocos e limites ajudam a garantir que as aplicações não serão carregadas em cima do espaço um do outro por um bit ou dois mal calculados. Com isso assegurado, a questão maior é o que fazer quando o espaço de aplicação de 500 kilobytes é preenchido.
Na maioria dos computadores, é possível adicionar memória para além da capacidade original. Por exemplo, você pode expandir a RAM de 1 para 2 megabytes. Isto funciona bem, mas tende a ser relativamente caro. Também ignora um fato fundamental da computação — a maioria das informações que um aplicativo armazena na memória não está sendo usada em um dado momento. Um processador só pode acessar a memória um local de cada vez, portanto a grande maioria da RAM não é usada a qualquer momento. Uma vez que o espaço em disco é barato em comparação com a RAM, então mover a informação na RAM para o disco rígido pode expandir muito o espaço RAM sem nenhum custo. Esta técnica é chamada de gerenciamento de memória virtual.
O armazenamentoDisk é apenas um dos tipos de memória que deve ser gerenciado pelo sistema operacional, e é o mais lento. Classificados em ordem de velocidade, os tipos de memória em um sistema de computador são:
- Cache de alta velocidade – Isto é rápido, quantidades relativamente pequenas de memória que estão disponíveis para a CPU através das conexões mais rápidas. Os controladores de cache prevêem quais os dados que a CPU vai precisar a seguir e puxam-na da memória principal para o cache de alta velocidade para acelerar o desempenho do sistema.
- Memória principal – Esta é a RAM que você vê medida em megabytes quando você compra um computador.
- Memória secundária – Esta é a maioria das vezes algum tipo de armazenamento magnético rotativo que mantém aplicações e dados disponíveis para serem usados, e serve como RAM virtual sob o controle do sistema operacional.
O sistema operacional deve equilibrar as necessidades dos vários processos com a disponibilidade dos diferentes tipos de memória, movendo os dados em blocos (chamados páginas) entre a memória disponível, conforme o cronograma de processos dita.
Administração de dispositivos
O caminho entre o sistema operacional e praticamente todo o hardware que não está na placa-mãe do computador passa por um programa especial chamado driver. Grande parte da função de um driver é ser o tradutor entre os sinais elétricos dos subsistemas de hardware e as linguagens de programação de alto nível do sistema operacional e dos programas aplicativos. Os drivers pegam os dados que o sistema operacional definiu como um arquivo e os traduzem em fluxos de bits colocados em locais específicos em dispositivos de armazenamento, ou uma série de pulsos de laser em uma impressora.
Porque existem diferenças tão grandes no hardware controlado através dos drivers, existem diferenças na forma como os programas dos drivers funcionam, mas a maioria são executados quando o dispositivo é necessário, e funcionam de forma muito semelhante a qualquer outro processo. O sistema operacional freqüentemente atribui blocos de alta prioridade aos drivers para que o recurso de hardware possa ser liberado e readied para uso posterior o mais rápido possível.
Uma razão pela qual os drivers estão separados do sistema operacional é para que novas funções possam ser adicionadas ao driver — e assim aos subsistemas de hardware — sem requerer que o próprio sistema operacional seja modificado, recompilado e redistribuído. Através do desenvolvimento de novos drivers de dispositivos de hardware, o desenvolvimento frequentemente realizado ou pago pelo fabricante dos subsistemas ao invés do editor do sistema operacional, as capacidades de entrada/saída do sistema como um todo podem ser grandemente melhoradas.
Gerenciar entrada e saída é em grande parte uma questão de gerenciar filas e buffers, instalações especiais de armazenamento que pegam um fluxo de bits de um dispositivo, talvez um teclado ou uma porta serial, seguram esses bits e os liberam para a CPU a uma velocidade lenta o suficiente para a CPU lidar com eles. Esta função é especialmente importante quando vários processos estão sendo executados e ocupando tempo do processador. O sistema operacional instruirá um buffer para continuar recebendo dados do dispositivo, mas para parar de enviar dados para a CPU enquanto o processo usando a entrada é suspenso. Então, quando o processo que necessita de entrada for ativado novamente, o sistema operacional comandará o buffer para enviar os dados. Este processo permite que um teclado ou um modem lide com usuários externos ou computadores em alta velocidade, mesmo que haja momentos em que a CPU não possa usar a entrada dessas fontes.
Gerenciar todos os recursos do sistema de computador é uma grande parte da função do sistema operacional e, no caso de sistemas operacionais em tempo real, pode ser praticamente toda a funcionalidade necessária. Para outros sistemas operacionais, porém, fornecer uma forma relativamente simples e consistente para que aplicativos e humanos usem a potência do hardware é uma parte crucial de sua razão de existir.
Interface para o Mundo
Interface de Aplicação
Apenas como os drivers fornecem uma forma de as aplicações utilizarem os subsistemas de hardware sem terem de conhecer todos os detalhes do funcionamento do hardware, as interfaces de programa de aplicação (APIs) permitem que os programadores de aplicações utilizem funções do computador e do sistema operativo sem terem de acompanhar directamente todos os detalhes do funcionamento da CPU. Vejamos o exemplo da criação de um ficheiro de disco rígido para guardar dados para ver porque é que isto pode ser importante.
Um programador escrevendo uma aplicação para gravar dados de um instrumento científico pode querer permitir que o cientista especifique o nome do ficheiro criado. O sistema operacional pode fornecer uma função da API chamada MakeFile para criar arquivos. Ao escrever o programa, o programador inseriria uma linha que se parecesse com isto:
MakeFile
Neste exemplo, a instrução diz ao sistema operacional para criar um arquivo que permitirá acesso aleatório aos seus dados (1), terá um nome digitado pelo usuário (%Name), e terá um tamanho que varia dependendo de quantos dados estão armazenados no arquivo (2). Agora, vamos ver o que o sistema operacional faz para transformar a instrução em ação.
- O sistema operacional envia uma consulta para a unidade de disco para obter a localização do primeiro local de armazenamento livre disponível.
- Com essa informação, o sistema operacional cria uma entrada no sistema de arquivos mostrando a localização inicial e final do arquivo, o nome do arquivo, o tipo de arquivo, se o arquivo foi arquivado, quais usuários têm permissão para olhar ou modificar o arquivo, e a data e hora da criação do arquivo.
- O sistema operacional escreve informações no início do arquivo que identifica o arquivo, configura o tipo de acesso possível e inclui outras informações que ligam o arquivo à aplicação.
Em todas estas informações, as consultas à unidade de disco e endereços do ponto inicial e final do ficheiro estão em formatos fortemente dependentes do fabricante e modelo da unidade de disco.
Porque o programador escreveu o seu programa para usar a API para armazenamento em disco, ela não tem que acompanhar os códigos de instrução, tipos de dados e códigos de resposta para cada possível disco rígido e unidade de fita. O sistema operacional, conectado a drivers para os vários subsistemas de hardware, lida com os detalhes de mudança do hardware — o programador deve simplesmente escrever o código para a API e confiar no sistema operacional para fazer o resto.
APIs se tornaram uma das áreas mais disputadas da indústria de computadores nos últimos anos. As empresas percebem que os programadores que utilizam a sua API acabarão por se traduzir na capacidade de controlar e lucrar com uma determinada parte da indústria. Esta é uma das razões pelas quais tantas empresas têm estado dispostas a fornecer aplicações como leitores ou telespectadores para o público sem qualquer custo. Eles sabem que os consumidores vão solicitar que os programas aproveitem os leitores gratuitos, e as empresas de aplicativos estarão prontas para pagar royalties para permitir que seu software forneça as funções solicitadas pelos consumidores.
Interface do utilizador
Apenas porque a API fornece uma forma consistente para as aplicações utilizarem os recursos do sistema informático, uma interface do utilizador (IU) traz estrutura à interacção entre um utilizador e o computador. Na última década, quase todo o desenvolvimento em interfaces de usuário tem sido na área da interface gráfica de usuário (GUI), com dois modelos, Macintosh da Apple e Windows da Microsoft, recebendo a maior parte da atenção e ganhando a maior fatia do mercado. Existem outras interfaces de usuário, algumas gráficas e outras não, para outros sistemas operacionais.
Unix, por exemplo, tem interfaces de usuário chamadas shells que apresentam uma interface de usuário mais flexível e poderosa do que a interface baseada em texto padrão do sistema operacional. Programas como o Korn Shell e o C Shell são interfaces baseadas em texto que adicionam utilitários importantes, mas seu objetivo principal é facilitar ao usuário a manipulação das funções do sistema operacional. Há também interfaces gráficas de usuário, como X-Windows e Gnome, que tornam Unix e Linux mais parecidos com computadores Windows e Macintosh do ponto de vista do usuário.
É importante lembrar que em todos estes exemplos, a interface do usuário é um programa ou conjunto de programas que fica como uma camada acima do próprio sistema operacional. A mesma coisa é verdade, com mecanismos um pouco diferentes, tanto do sistema operacional Windows quanto do Macintosh. As funções centrais do sistema operacional, o gerenciamento do sistema de computador, estão no kernel do sistema operacional. O gerenciador de exibição é separado, embora possa estar firmemente vinculado ao kernel abaixo. As ligações entre o kernel do sistema operacional e a interface do usuário, utilitários e outros softwares definem muitas das diferenças nos sistemas operacionais de hoje, e irão defini-las ainda mais no futuro.
O Futuro
Uma questão relativa ao futuro dos sistemas operacionais gira em torno da capacidade de uma filosofia particular de distribuição de software para criar um sistema operacional utilizável por corporações e consumidores em conjunto.
Linux, o sistema operacional criado e distribuído de acordo com os princípios do código aberto, poderia ter um impacto significativo sobre o sistema operacional em geral. A maioria dos sistemas operacionais, drivers e programas utilitários são escritos por organizações comerciais que distribuem versões executáveis de seus softwares — versões que não podem ser estudadas ou alteradas. O código aberto requer a distribuição de materiais originais que podem ser estudados, alterados e construídos, com os resultados mais uma vez distribuídos livremente.
O crescimento contínuo da Internet e a proliferação de computadores que não são máquinas desktop ou laptop padrão significa que os sistemas operacionais mudarão para acompanhar o ritmo, mas as funções centrais de gerenciamento e interface continuarão, mesmo quando elas evoluírem.