Baixe o app para aproveitar ainda mais
Prévia do material em texto
Conceitos de sistemas operacionais Apresentação Sistemas operacionais têm a função de gerenciar o hardware do computador e garantir o seu correto funcionamento. Para isso, é necessário que qualquer comunicação com o hardware seja intermediada pelo sistema operacional. Softwares de aplicação constantemente têm a necessidade de interagir com peças de hardware: É necessário abrir e salvar arquivos (acessando algum dispositivo de memória secundária, como o disco rígido ou um pendrive), fazer comunicação com outros computadores (por meio da placa de rede), tocar sons ou enviar imagens e textos para a tela. Os sistemas operacionais disponibilizam chamadas de sistema para permitir que a aplicação tenha um acesso controlado a esses dispositivos. As chamadas de sistema são funções padronizadas que, ao serem chamadas por um programa, irão fazer com que o sistema operacional execute uma série de comandos de baixo nível, evitando que essa complexidade seja levada para o software que está sendo executado pelo sistema. As chamadas de sistema são a forma do software acessar funções do sistema operacional, mas usuários mais experientes precisam de uma ferramenta para interagir com o sistema. Os interpretadores de comandos (shell) cumprem esse papel, oferecendo uma interface baseada em texto, na qual é possível inserir comandos para executar programas que irão fazer a interação com o sistema operacional. Nesta Unidade de Aprendizagem, você vai aprender o que são chamadas de sistema, por que são necessárias e como é o seu processo de execução. Vai entender o funcionamento dos interpretadores de comandos e ser apresentado a um histórico da linguagem C e como sua criação está ligada à criação do sistema operacional Unix. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Definir características e papel do shell em sistemas operacionais.• Compreender as chamadas de sistemas.• Descrever o histórico da linguagem de programação C para criação do sistema operacional Unix. • Desafio O interpretador de comandos, ou shell do sistema operacional, é um tipo de software de sistema embutido na maioria dos sistemas operacionais, para permitir que usuários possam enviar comandos e receber as respostas de uma forma legível. Utilizando o terminal, usuários com conhecimento mais avançado podem, por exemplo, automatizar tarefas, ou mesmo realizar várias ações de forma mais rápida do que se usassem aplicativos com interface gráfica. A maioria das ferramentas de auxílio a atividades de desenvolvimento de software oferece, além dos programas com interfaces gráficas, utilitários de linha de comando que podem ser chamados a partir do shell do sistema operacional. Compiladores, ferramentas de controle de versão e clientes de banco de dados, por exemplo, geralmente podem ser acessados com linha de comando. A possibilidade de aninhar comandos usando o operador | (pipe), levando a saída do programa à esquerda do operador para a entrada do programa à direita também traz grande poder e flexibilidade para usuários de interpretadores de comando. Tudo isso é particularmente importante ao se considerar a tendência atual de infraestrutura como código (infrastructure as code - IaC), na qual se deve permitir criar e configurar ambientes por meio de código e não de atividades manuais. Você é membro de uma equipe trabalhando com a escrita de código IaC e recebe a tarefa de converter um passo manual, que era necessário ao instalar um sistema em um procedimento automático, usando o interpretador de comandos de sua escolha (como sh ou bash no Linux; no caso do Windows, pode ser usado o cmd ou o PowerShell). O passo manual que deve ser convertido é o seguinte: a) Escrever no arquivo output.txt a data e a hora atuais, sem apagar o conteúdo que poderia existir anteriormente no arquivo. b) Escrever no arquivo output.txt a pasta atual, sem apagar o conteúdo que estava presente no arquivo anteriormente. c) Rodar o comando ping www.google.com (no Windows) ou ping -c 4 www.google.com (no Linux), escrevendo as linhas com o resultado do ping para o arquivo output.txt (dica: no Windows, essas linhas têm a palavra “Resposta”, e no Linux, as linhas têm o texto “64 bytes”), sem apagar o conteúdo que estava presente no arquivo anteriormente. d) Escrever no arquivo “output.txt” a listagem dos arquivos existentes com a extensão “.jpg” atualmente na pasta (não é um problema que a linha tenha mais informação além do nome dos arquivos, como por exemplo, a data de criação ou seu tamanho), sem apagar o conteúdo que estava presente no arquivo anteriormente. e) Dentro da pasta atual, criar uma nova pasta com o nome “jpgBackup” f) Copiar todos os arquivos .jpg da pasta atual para a pasta “jpgBackup” Infográfico Sempre que é necessário interagir com o sistema operacional, as aplicações devem solicitar uma chamada de sistema. É por meio dessas chamadas que o sistema garante o correto funcionamento de suas abstrações, sem interferência entre os vários programas que podem estar sendo executados em um dado instante. Para que essas chamadas funcionem, de forma geral os sistemas operacionais seguem um fluxo bem definido, tomando o controle da execução da aplicação, rodando a chamada de sistema em si e, finalmente, retornando o resultado da chamada e o controle da execução para a aplicação solicitante. No Infográfico a seguir, você vai poder compreender o funcionamento interno do sistema operacional durante uma chamada de sistema, entendendo quais passos são seguidos e aprendendo o conceito de espaço de usuário e espaço de núcleo. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://statics-marketplace.plataforma.grupoa.education/sagah/2822d37b-3f83-4573-9284-565314ef623c/161942cc-c020-44b9-b236-37a7e67909b2.jpg Conteúdo do livro Um sistema operacional é um programa de computador que coordena e administra os recursos do sistema, além de estabelecer a comunicação entre o usuário e o hardware. Ele desempenha um papel crucial ao possibilitar a execução de programas, garantir a segurança e facilitar a interação com o computador. Os usuários têm a opção de interagir com o sistema operacional por meio da interface gráfica ou do shell. A interface gráfica oferece uma interação visual, enquanto o shell é uma interface de linha de comando amplamente utilizada em sistemas baseados em Linux, especialmente no sistema operacional Unix. O shell permite que os usuários se comuniquem com o sistema por meio de comandos de texto, permitindo a execução de tarefas, o gerenciamento de recursos e a automação de processos de maneira eficiente. No capítulo Conceitos de sistemas operacionais, base teórica desta Unidade de Aprendizagem, você explorará a importância do shell nos sistemas operacionais, compreenderá o conceito de chamadas de sistema e descobrirá a relevância histórica da linguagem de programação C no desenvolvimento do Unix. Esses conhecimentos serão fundamentais para aprofundar sua compreensão e se aventurar em áreas mais avançadas desse fascinante campo da ciência da computação. Boa leitura. SISTEMAS OPERACIONAIS Identificação interna do documento OBJETIVOS DE APRENDIZAGEM > Definir as características e o papel do shell em sistemas operacionais. > Compreender as chamadas de sistemas. > Descrever o histórico da linguagem de programação C para a criação do sistema operacional Unix. Introdução Um sistema operacional é um software que gerencia recursos e fornece uma interface entre o usuário e o hardware de um computador, desempenhando um papel fundamental ao permitir a execução de programas, garantir a segurança e facilitar a interação com a máquina. Os usuários podem interagir com o sistema operacional por meio da interface gráfica ou por comandos de texto, independentemente do sistema operacional utilizado. O shell, uma interface de linha de comando amplamente adotada emsistemas baseados em Linux e essencial no sistema operacional Unix, possibilita aos usuários interagir com o sistema via comandos de texto, permitindo a execução de tarefas, o gerenciamento de recursos e a automação de processos de forma eficiente. Essa funcionalidade está presente em diversos sistemas operacionais, como o Windows, oferecendo aos usuários a flexibilidade de escolher a forma de interação mais adequada às suas necessidades. Conceitos de sistemas operacionais Marcelo da Silva dos Santos Identificação interna do documento Neste capítulo, você compreenderá o papel do shell em sistemas operacio- nais, as chamadas de sistema e o histórico da linguagem de programação C no desenvolvimento do Unix. Introdução ao shell de sistema Um componente essencial de qualquer sistema operacional é o shell de sis- tema, que desempenha um papel fundamental na interação entre o usuário e o sistema. O shell de sistema é uma interface de linha de comando que permite ao usuário executar comandos e controlar o sistema operacional. Um dos exemplos mais comuns de shell de sistema é o prompt de comando no sistema operacional Windows e o terminal no sistema operacional Linux. Essas interfaces permitem que os usuários emitam comandos ao digitar instruções num prompt de texto. O prompt de comando e o terminal fornecem uma ampla gama de recursos e funcionalidades para realizar diversas tarefas no sistema operacional. Por meio dessas interfaces, é possível executar programas, gerenciar arquivos e diretórios, manipular processos, configurar o sistema e muito mais. Ao usar o prompt de comando no Windows, o usuário pode digitar co- mandos como dir para listar os arquivos em um diretório, cd para mudar de diretório, copy para copiar arquivos, entre outros. O prompt de comando exibe o resultado dos comandos na mesma janela, permitindo uma interação rápida e eficiente com o sistema operacional. Quando um usuário se conecta, um shell é iniciado, utilizando o terminal como entrada e saída-padrão. O shell apresenta um prompt, geralmente representado por um caractere, como o cifrão ($), indicando que está pronto para receber comandos do usuário (TANENBAUM; WOODHULL, 2008). No Linux, o terminal oferece recursos semelhantes, mas com uma maior flexibilidade e poder. Os comandos no terminal são tipicamente baseados em texto e oferecem uma vasta gama de opções e argumentos. É possível criar scripts de shell, que são sequências de comandos em um arquivo, para automatizar tarefas e realizar operações complexas no sistema operacional. O uso do prompt de comando ou do terminal requer familiaridade com os comandos disponíveis e sua sintaxe. Existem muitos recursos e comandos avançados que podem ser explorados para melhorar a produtividade e a eficiência no uso do sistema operacional. Conceitos de sistemas operacionais2 Identificação interna do documento Em resumo, o shell de sistema, representado pelo prompt de comando no Windows e pelo terminal no Linux, é uma interface poderosa que permite aos usuários interagir diretamente com o sistema operacional por meio de comandos de texto. É fundamental dominar o uso dessas interfaces para aproveitar ao máximo os recursos e funcionalidades oferecidos pelos sis- temas operacionais. Introdução ao prompt de comando no Windows O prompt de comando no sistema operacional Windows é uma interface de linha de comando que permite aos usuários interagir diretamente com o sistema operacional por meio de comandos de texto. Essa ferramenta versátil e poderosa oferece uma variedade de recursos para executar ta- refas, gerenciar arquivos, configurar o sistema e muito mais (TANENBAUM; WOODHULL, 2008). Ao abrir o prompt de comando, o usuário é apresentado a uma janela de console onde pode digitar comandos. Esses comandos podem realizar uma ampla gama de tarefas, como listar arquivos em um diretório, navegar entre pastas, executar programas, criar e renomear arquivos, gerenciar serviços e redes, entre outras funcionalidades. O Windows conta atualmente com duas versões de prompt: o CMD (Com- mand Prompt) e o PowerShell. Ambas são interfaces de linha de comando disponíveis no sistema operacional e se diferenciam em termos de recursos e funcionalidades. O CMD é a interface de linha de comando padrão do Windows, oferecendo um ambiente simples com comandos básicos para executar tarefas como navegar entre diretórios, executar programas e realizar operações de arquivo. Embora seja amplamente utilizado, trabalha com uma sintaxe de comando mais antiga e recursos limitados em comparação com o PowerShell. Por outro lado, o PowerShell é uma interface de linha de comando avan- çada e poderosa, baseada numa plataforma de automação da Microsoft. Ele proporciona recursos aprimorados, como suporte a scripts, manipulação de objetos e uma sintaxe mais rica. Com o PowerShell, é possível automatizar tarefas complexas e ter acesso a uma ampla gama de recursos e serviços do Windows. Em resumo, o CMD é mais adequado para tarefas básicas e simples, en- quanto o PowerShell é mais robusto e flexível, permitindo automação avan- çada e oferecendo um conjunto mais amplo de recursos para administradores de sistema e desenvolvedores. Conceitos de sistemas operacionais 3 Identificação interna do documento Ambos seguem uma sintaxe específica, em que cada comando é digitado na linha de comando, seguido de parâmetros e argumentos, quando necessário. Os comandos são interpretados pelo sistema operacional, que executa as ações solicitadas pelo usuário. Na Figura 1, você pode observar a execução do comando ping, em que é demonstrado o envio de pacotes de dados para os endereços IP 192.168.1.5 e 192.168.1.6, e a exibição dos dados resultantes, incluindo o tempo de resposta (latência), o número de pacotes perdidos e informações estatísticas sobre a conectividade de rede. Figura 1. Exemplo de um comando ping num CMD do Windows. Para facilitar a compreensão e familiarização com o prompt de comando no Windows, apresentaremos alguns comandos que ilustram o uso dessa interface de linha de comando. � Para iniciar, abra o menu Iniciar e pesquise por "Prompt de Comando" ou "cmd" e clique no resultado correspondente para abrir a janela do prompt de comando. � Na janela do prompt de comando, você verá o prompt atual, geralmente exibido como C:\Users\nome _ do _ usuário>. Isso indica o diretório atual em que você está trabalhando. � Digite o comando dir e pressione Enter. Isso listará os arquivos e diretórios no diretório atual. � Experimente outros comandos, como cd para mudar de diretório, mkdir para criar um diretório, del para excluir um arquivo, copy para copiar Conceitos de sistemas operacionais4 Identificação interna do documento um arquivo, entre outros. Observe as respostas e saídas exibidas pelo prompt de comando. � Utilize comandos adicionais para explorar ainda mais recursos, como ipconfig para exibir informações de rede, tasklist para listar os processos em execução, ping para testar a conectividade de rede, entre outros. � Para criar uma pasta, utilize o comando mkdir nome _ da _ pasta e pressione Enter. Isso criará uma pasta no diretório atual. � Para exibir a data e a hora atuais, digite o comando date ou time e pressione Enter. Isso mostrará a data e a hora do sistema. � Para escrever a saída de um comando num arquivo TXT, utilize o ope- rador de redirecionamento “>” seguido do nome do arquivo. Se você executar, por exemplo, o comando dir > lista _ arquivos.txt, será criado um arquivo chamado lista _ arquivos.txt com a lista de arquivos do diretório atual. � Se você quiser acrescentar a saída a um arquivo existente, utilize o operador de redirecionamento “>>”. Por exemplo, dir >> lista _ ar- quivos.txt adicionará a lista de arquivos ao final do arquivo existente lista _ arquivos.txt. Para aprofundar seu conhecimento e realizar diversas tarefas de geren- ciamento e configuração no sistema operacional Windows, exploreesses comandos e recursos adicionais do prompt de comando, como taskkill para forçar o encerramento de um processo, netstat para exibir conexões ativas, findstr para pesquisar padrões em textos, entre outros. Essa inte- ração prática permitirá que você se familiarize com os comandos básicos e comece a explorar os recursos avançados do prompt de comando no sistema operacional Windows. Introdução ao terminal no Linux O terminal no sistema operacional Linux é uma interface de linha de comando poderosa e flexível que permite aos usuários interagir diretamente com o sistema operacional por meio de comandos de texto. É uma ferramenta fundamental para administradores de sistema, desenvolvedores e usuários avançados que desejam ter controle total sobre o sistema operacional (TA- NENBAUM; WOODHULL, 2008). Ao abrir o terminal, você terá acesso a uma janela de console onde pode digitar comandos e receber a saída correspondente. O terminal no Linux Conceitos de sistemas operacionais 5 Identificação interna do documento oferece uma ampla variedade de recursos e comandos que permitem executar tarefas complexas, automatizar processos e personalizar a experiência do usuário. No terminal, os comandos são inseridos seguindo uma sintaxe espe- cífica. Cada comando é digitado na linha de comando, podendo ser seguido por opções e argumentos, conforme necessário. Na Figura 2, você pode observar a execução do comando tree, que exibe uma representação hierárquica dos diretórios e arquivos numa estrutura de árvore. O resultado do comando tree mostra os diretórios como nós e os arquivos como folhas, permitindo uma visualização organizada da estrutura do sistema de arquivos. Isso facilita a compreensão da organização dos dire- tórios e a identificação dos arquivos presentes em cada nível da hierarquia. Figura 2. Exemplo de um comando tree em terminal Linux. No Linux, o terminal oferece uma grande variedade de comandos internos e externos. Os comandos internos são incorporados ao shell do sistema operacional, enquanto os comandos externos são programas executáveis que podem ser acessados pelo terminal (TANENBAUM; WOODHULL, 2008). Esses comandos permitem ao usuário gerenciar arquivos, diretórios, processos, usuários, permissões, redes e muitos outros aspectos do sistema operacional. Para fornecer uma visão prática do terminal no Linux, a seguir apresen- tamos uma ilustração do uso e dos recursos dessa poderosa interface de linha de comando. Conceitos de sistemas operacionais6 Identificação interna do documento � Abra o terminal no seu sistema Linux. Você pode encontrá-lo no menu de aplicativos ou pressionando a combinação de teclas Ctrl + Alt + T. � Na janela do terminal, você verá um prompt, geralmente exibido como "$" ou username@hostname:~$. Esse prompt indica que você está pronto para digitar comandos. � Digite o comando ls e pressione Enter. Isso listará os arquivos e di- retórios no diretório atual. � Experimente outros comandos básicos, como cd para mudar de dire- tório, mkdir para criar um diretório, rm para excluir um arquivo, cp para copiar arquivos, mv para mover arquivos, entre outros. Observe as saídas e resultados exibidos no terminal. � Para criar uma pasta, utilize o comando mkdir seguido do nome dese- jado para o diretório. Por exemplo, mkdir nova _ pasta criará uma pasta chamada nova _ pasta. � Para escrever a data e hora atuais no terminal, você pode usar o co- mando date. Ele exibirá a data e hora do sistema no formato definido. � Para redirecionar a saída de um comando para um arquivo de texto no Linux, você pode utilizar o operador de direcionamento ">". Por exemplo, o comando ls > lista _ arquivos.txt criará um arquivo chamado lista _ arquivos.txt e gravará nele a saída do comando ls. � Além disso, há também o operador de direcionamento ">>", que difere do ">" em seu comportamento. O ">>" é usado para redirecionar a saída de um comando e anexá-la a um arquivo existente, sem substituir o conteúdo existente. Por exemplo, se você executar o comando ls >> lista _ arquivos.txt mais de uma vez, a saída será adicionada ao final do arquivo lista _ arquivos.txt sem remover o conteúdo anterior. � Você ainda pode utilizar comandos mais avançados para explorar re- cursos adicionais, como grep para pesquisar por padrões em arquivos, ps para listar processos em execução, sudo para executar comandos com privilégios de superusuário, entre outros. Da mesma forma como comentado na seção anterior, lembre-se de explorar outros comandos e suas opções para descobrir mais recursos e funcionalida- des do terminal Linux. Com a prática e a experiência, você poderá aprofundar seu conhecimento e aproveitar ao máximo o terminal no Linux, tornando-se mais eficiente na administração e uso do sistema operacional. Conceitos de sistemas operacionais 7 Identificação interna do documento Conceito de chamadas de sistema e suas aplicações Um sistema operacional é responsável por gerenciar os recursos do computa- dor e permitir que os aplicativos possam utilizá-los de maneira organizada e controlada. Para isso, os sistemas operacionais disponibilizam uma interface de programação de aplicativos (API), que é uma coleção de rotinas, protocolos e ferramentas para a criação de aplicativos. Essa interface permite que os aplicativos possam solicitar serviços ao sistema operacional para acessar seus recursos (TANENBAUM; WOODHULL, 2008). As chamadas de sistema (system calls) são uma forma como os aplicativos podem solicitar serviços ao sistema operacional. Uma chamada de sistema é uma solicitação feita por um aplicativo ao sistema operacional para que execute uma determinada tarefa, como, por exemplo, ler um arquivo ou escrever em um dispositivo de armazenamento (TANENBAUM, 2009). As cha- madas de sistema são realizadas por meio de uma interrupção de software, que interrompe a execução normal do programa e transfere o controle para o sistema operacional, que então executa a tarefa solicitada. As chamadas de sistema são classificadas de acordo com a tarefa que cada uma delas realiza. Eis a seguir algumas das chamadas mais comuns (TANENBAUM; WOODHULL, 2008): � Chamadas de sistema para gerenciamento de processos: permitem que os programas solicitem a criação, execução, término e controle de processos. Essas chamadas incluem operações como criação de processos, término de processos, obtenção de identificadores de processo (PID), troca de contexto entre processos, agendamento de processos, entre outras. � Chamadas de sistema para sinais: permitem que um programa notifique ou seja notificado sobre eventos ou condições específicas que ocorrem durante a execução. Os sinais podem ser usados para interrupção de processos, manipulação de erros, comunicação entre processos, entre outras finalidades. � Chamadas de sistema para gerenciamento de arquivos: fornecem aos programas a capacidade de criar, abrir, ler, gravar, renomear e excluir arquivos. Essas chamadas são essenciais para o trabalho com sistemas de arquivos, permitindo que os programas acessem e manipulem dados persistentes. Conceitos de sistemas operacionais8 Identificação interna do documento � Chamadas de sistema para gerenciamento de diretórios: permitem que os programas interajam com estruturas hierárquicas de diretórios, como navegar por diretórios, criar, renomear e excluir diretórios, entre outras operações. � Chamadas de sistema para proteção: usadas para controlar o acesso a recursos do sistema operacional, como arquivos, diretórios, dispositi- vos e outras entidades. Essas chamadas permitem que os programas solicitem permissões, definam permissões de acesso e verifiquem a autorização para realizar determinadas operações. � Chamadas de sistema para gerenciamento de tempo: são funcionalida- des disponíveis em sistemas operacionais que permitem aos programas obter informações sobre o tempo atual, medir durações, agendar tarefas e realizar outras operaçõesrelacionadas ao tempo. Essas chamadas de sistema são essenciais para o desenvolvimento de aplicações que requerem sincronização, agendamento de tarefas e manipulação de eventos baseados em tempo. As chamadas de sistema desempenham um papel fundamental no fun- cionamento dos sistemas operacionais e na interação entre os programas de usuário e o núcleo do sistema. Por meio das chamadas de sistema, os programas podem solicitar serviços e recursos do sistema operacional, como acesso a arquivos, manipulação de processos, gerenciamento de memória e comunicação entre processos (WEBER, 2012). As chamadas de sistema permitem que os programas aproveitem os recur- sos e as funcionalidades oferecidos pelo sistema operacional, tornando-se uma interface crucial para a criação de aplicativos eficientes e robustos. A linguagem C, com seu suporte integrado a chamadas de sistema, proporciona uma maneira conveniente e poderosa de utilizar essas funcionalidades, permitindo que os desenvolvedores aproveitem ao máximo os recursos do sistema operacional Unix e desenvolvam software de maneira eficiente. Na próxima seção, vamos conhecer um pouco mais sobre a origem da linguagem C e sua relação com a plataforma Unix. A importância da linguagem C no desenvolvimento do Unix O sistema Unix teve sua origem nos Laboratórios Bell, da AT&T, na década de 1970, sendo desenvolvido por uma equipe de talentosos colaboradores. Dois nomes fundamentais nesse contexto são Ken Thompson e Dennis Ritchie. Conceitos de sistemas operacionais 9 Identificação interna do documento Thompson, um engenheiro de software, iniciou o desenvolvimento do sistema Unix em 1969 como uma reimplementação do sistema operacional Multics. Mais tarde, em parceria com Ritchie, amplamente reconhecido como o criador da linguagem C, eles aprimoraram e expandiram o sistema Unix (TANENBAUM; WOODHULL, 2008). Inicialmente, o Unix foi implementado em Assembly, uma linguagem de programação de baixo nível específica para cada arquitetura de hardware. A primeira versão, conhecida como Unix Versão 1, foi escrita principalmente em Assembly para o PDP-7, um computador da DEC (Digital Equipment Corpo- ration). Posteriormente, o Unix foi portado para outras arquiteturas, como o PDP-11, e continuou sendo programado em Assembly para cada plataforma específica (RITCHIE, 1984). No entanto, à medida que o desenvolvimento do Unix progredia e o sis- tema se expandia, tornou-se evidente que o uso de Assembly tornava o desenvolvimento e a manutenção do código muito mais complexos e demo- rados. Foi nesse momento que Ken Thompson e Dennis Ritchie perceberam a necessidade de uma linguagem de programação de alto nível que fosse eficiente, portável e próxima ao hardware, levando à criação da linguagem C (KERNIGHAN; RITCHIE, 1988). Desse modo, Ritchie projetou originalmente a linguagem C com o obje- tivo específico de criar uma linguagem eficiente, expressiva e próxima ao hardware. A linguagem C, sucessora da linguagem B, também desenvolvida por Ken Thompson e Dennis Ritchie, é de alto nível, o que permite um de- senvolvimento mais rápido e facilita a portabilidade do Unix para diferentes arquiteturas de hardware. A seguir, você pode observar um exemplo de um programa básico escrito na linguagem C. #include <stdio.h> int main(){ // Corpo do programa printf(“Olá, mundo!\n”); return 0; } Nesse trecho de código, você pode ver a estrutura básica de um programa em C. O código começa com a inclusão de bibliotecas necessárias, seguido pela função principal main(), onde o corpo do programa é colocado. Dentro da função principal, você pode escrever o código que deseja executar. Neste exemplo, você pode observar as seguintes estruturas: Conceitos de sistemas operacionais10 Identificação interna do documento � #include <stdio.h>: é uma diretiva de pré-processador que inclui a biblioteca de entrada e saída padrão (stdio.h), que fornece funções como printf e scanf para entrada e saída de dados. � int main() { ... }: é a função principal do programa, onde a execução do código começa. O tipo int indica que a função retorna um valor inteiro. As chaves {} delimitam o corpo da função. � //Corpo do programa: é um comentário, utilizado para adicionar notas explicativas ao código. Comentários não são executados pelo programa. � printf("Olá, mundo!\n");: é uma função de saída que imprime a mensa- gem "Olá, mundo!" no console. O \n representa um caractere de nova linha, para que a próxima linha seja exibida abaixo. � return 0;: é uma instrução de retorno, em que o valor 0 indica que o pro- grama foi executado com sucesso. O valor de retorno é retornado ao sistema operacional quando o programa termina. Essa interconexão entre o Unix e a linguagem C, mediante o uso de pontei- ros, tipos e meio de incluir código Assembly, criou um ecossistema coeso em que a linguagem de programação e o sistema operacional se complementavam perfeitamente, permitindo que os programadores do Unix aproveitassem ao máximo os recursos do sistema operacional. A importância da linguagem C no desenvolvimento do Unix e na compu- tação moderna é indiscutível. Sua combinação de expressividade, controle de baixo nível via escrita de código de alto nível, portabilidade e eficiência tornou-a uma linguagem poderosa e versátil (TANENBAUM; WOODHULL, 2008). A linguagem C estabeleceu os fundamentos para o desenvolvimento de sis- temas operacionais, aplicativos e bibliotecas que impulsionaram a evolução da computação ao longo das décadas. A influência da linguagem C se estendeu além do desenvolvimento do Unix e de sistemas operacionais relacionados. Na verdade, tal linguagem se tornou a base para muitas outras linguagens de programação modernas, como C++, C# e Objective-C. Essas linguagens, derivadas ou inspiradas na linguagem C, mantêm sua sintaxe e seus princípios básicos, fornecendo con- tinuidade e familiaridade aos programadores que aprendem novas linguagens. Em resumo, a linguagem C desempenhou um papel crucial no desenvolvi- mento do sistema operacional Unix. A combinação do Unix com a linguagem C proporcionou um ambiente de programação eficiente, flexível e portátil. A sintaxe clara, o controle de baixo nível e a capacidade de acessar diretamente a memória e os recursos do sistema fizeram da linguagem C a escolha perfeita Conceitos de sistemas operacionais 11 Identificação interna do documento para implementar o Unix. Ademais, a influência da linguagem C se estendeu além do Unix, moldando o desenvolvimento de software e estabelecendo uma base sólida para muitas outras linguagens de programação modernas. Ao longo deste capítulo, exploramos de forma abrangente os principais temas relacionados ao shell em sistemas operacionais, as chamadas de sistemas e o histórico da linguagem de programação C no contexto do desen- volvimento do sistema operacional Unix. Compreendemos as características fundamentais e o papel essencial desempenhado pelo shell, que atua como interface entre o usuário e o sistema operacional. Aprofundamos nossos conhecimentos nas chamadas de sistemas, entendendo sua importância na interação com o kernel e no acesso aos recursos do sistema. Além disso, mergulhamos na fascinante história da linguagem C, desde sua concepção pelos visionários Ken Thompson e Dennis Ritchie até seu impacto duradouro no desenvolvimento do Unix. Esperamos que este material tenha fornecido os conceitos básicos necessários para compreender esses temas e sua importân- cia na computação moderna, capacitando os leitores a explorar e aproveitar plenamente o potencial desses conceitos em suas jornadas tecnológicas. Referências KERNIGHAN, B. W.; RITCHIE, D. M. The C programming language. 2nd. ed. New Jersey: Prentice Hall, 1988. RITCHIE, D. M. The evolution of the Unix time-sharing system. AT&T Bell Laboratories Technical Journal, v. 63, n. 8, 1984. Disponível em: https://ieeexplore.ieee.org/docu- ment/6771908. Acesso em: 24maio 2023. TANENBAUM, A. S. Sistemas operacionais modernos. 3. ed. São Paulo: Prentice Hall do Brasil, 2009. TANENBAUM, A.; WOODHULL, A. Sistemas operacionais: projeto e implementação. Porto Alegre: Bookman, 2008. WEBER, R. F. Fundamentos de arquitetura de computadores. 4. ed. Porto Alegre: Book- man, 2012. v. 8. Leituras recomendadas OLIVEIRA, R. S.; CARISSIMI, A. S.; TOSCANI, S. S. Sistemas operacionais. 4. ed. Porto Alegre: Bookman, 2010. RAYMOND, E. S. The art of Unix programming. [S. l.]: Addison-Wesley Professional, 2003. SILBERSCHATZ, A. et al. Fundamentos de sistemas operacionais. 8. ed. Rio de Janeiro: LTC, 2010. STALLINGS, W. Arquitetura e organização de computadores. 8. ed. São Paulo: Pearson, 2013. Conceitos de sistemas operacionais12 Identificação interna do documento Os links para sites da web fornecidos neste capítulo foram todos testados, e seu funcionamento foi comprovado no momento da publicação do material. No entanto, a rede é extremamente dinâmica; suas páginas estão constantemente mudando de local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade sobre qualidade, precisão ou integralidade das informações referidas em tais links. Conceitos de sistemas operacionais 13 Identificação interna do documento Identificação interna do documento Dica do professor A linguagem de programação C é muito poderosa e é usada para o desenvolvimento de partes de praticamente todos os sistemas operacionais atuais. Apesar de ser uma linguagem de alto nível, ela proporciona ao desenvolvedor o poder de controle em alguns aspectos de baixo nível. Seu desenvolvimento foi feito quase que em paralelo ao do sistema operacional Unix, cujos princípios deram origem a vários sistemas que usamos até hoje, como o Linux. Nesta Dica do Professor, você verá como a criação da linguagem de programação C e do sistema operacional Unix estão ligadas. Você irá aprender sobre o contexto em que ambos surgiram e conhecer um pouco da história de um cientista que participou do projeto e do desenvolvimento da linguagem e do sistema operacional. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://fast.player.liquidplatform.com/pApiv2/embed/cee29914fad5b594d8f5918df1e801fd/91c1b5978702148ef1803f5ccb3386ed Exercícios 1) Uma atividade recorrente em software de aplicação é a leitura e escrita de arquivos. A maioria dos programas irá, em algum momento de seu ciclo de vida, necessitar de dados que estão armazenados em algum dispositivo de memória secundária. Também é comum a necessidade de gravar dados de forma persistente. Assinale a alternativa que descreve o fluxo seguido por uma aplicação para fazer a gravação ou a leitura de dados em dispositivos de memória secundária. A) A aplicação solicita diretamente ao driver do dispositivo a leitura ou a escrita dos setores nos quais o arquivo se encontra. B) A aplicação envia comandos para o driver mover sua cabeça de leitura, iniciar o processo de leitura e escrita e retornar os dados. C) A aplicação envia comandos para o sistema operacional solicitar para o driver mover sua cabeça de leitura e iniciar o processo de leitura e escrita. D) A aplicação grava o arquivo na memória primária e automaticamente o sistema operacional irá sincronizá-la com o dispositivo de memória secundária. E) A aplicação dispara uma chamada de sistema, fornecendo ao sistema operacional informações sobre o arquivo que deve ser lido ou escrito. 2) A linguagem C se provou, nas últimas quatro décadas, muito eficiente para a tarefa de programar sistemas operacionais. Sua leveza, simplicidade e elegância não prejudicam em nada o seu poder de interagir com o computador em baixo nível, ainda que C seja uma linguagem de alto nível. Quais das características abaixo a linguagem C tem e são interessantes para seu uso no desenvolvimento de sistemas operacionais? A) Gerenciador de memória e garbage collector. B) Ponteiros, tipos e meio de incluir código assembly. C) Variáveis, controle de laço e controle de fluxo. D) Blocos de execução, comando goto e máquina virtual. E) Garbage collector, ponteiros e controle de laço. 3) Interpretadores de comando são uma ferramenta utilizada para que usuários possam enviar comandos para o sistema operacional. Esses comandos geralmente irão disparar chamadas de sistema, como por exemplo para a criação de novas pastas e arquivos e iniciar processos para a execução de um programa. Essa ferramenta também pode alterar configurações de sistema e realizar tarefas de manutenção. Assinale a alternativa correta em relação ao uso de interpretadores de comando. A) São muito usados por usuários mais experientes, que conhecem os comandos, sendo mais ágeis do que o uso de interface gráficas. B) São ferramentas de interface gráfica com o usuário, usando dispositivos apontadores, como o mouse, para efetuar as ações. C) São simples de usar por usuários comuns e inexperientes, sendo uma boa escolha para o primeiro contato com computadores. D) O uso de comandos em texto torna o trabalho mais complicado para usuários experientes, que preferem usar interfaces gráficas. E) Não é possível automatizar tarefas usando interpretadores de comandos, as ferramentas de shell são muito primitivas. 4) O pipe, criado no terminal colocando o caractere “|” entre dois programas, cria uma conexão entre os processos desses programas. Ao enviar o comando “netstat | findstr https” no shell, o sistema criará um processo para executar o programa netstat, outro processo para executar o programa findstr passando o valor https como argumento. Além disso, criará um “arquivo virtual”, e vai redirecionar a saída do programa netstat para esse arquivo, ao mesmo tempo em que vai configurar esse mesmo arquivo virtual como a entrada para o comando findstr. Sabendo disso, assinale a alternativa que descreve corretamente qual será a saída desse comando para o terminal do interpretador de comandos. A) Todas as conexões ativas no computador. B) Todos os arquivos que têm o texto https. C) Lista de conexões ativas no computador que não têm a porta https. D) Lista de conexões ativas no computador com a porta https. E) A quantidade de conexões ativas para a porta https. 5) Cada sistema operacional disponibiliza um conjunto de bibliotecas ou APIs para que desenvolvedores de software criem programas que podem ser executados nesse sistema. Vários métodos destas APIs disparam em algum momento chamadas de sistema. Assinale a alternativa correta sobre a execução das chamadas de sistema. A) Aplicações e as próprias APIs rodam em espaço de usuário. Apenas as chamadas de sistema são executadas em espaço de núcleo. B) As aplicações rodam em espaço de usuário, mas as APIs e as chamadas de sistema são executadas em espaço de núcleo. C) Aplicações, APIs e chamadas de sistema rodam em espaço de usuário. Apenas o núcleo do sistema operacional roda em espaço de núcleo. D) Aplicações e as próprias APIs rodam em espaço de núcleo. Apenas as chamadas de sistema são executadas em espaço de usuário. E) As aplicações rodam em espaço de núcleo, mas as APIs e as chamadas de sistema são executadas em espaço de usuário. Na prática Com a popularização das interfaces gráficas, o caminho natural aparentava ser o fim dos terminais de interpretadores de comandos, afinal as interfaces baseadas em paradigmas visuais são mais intuitivas, não exigem que os usuários decorem comandos e lidam bem com fluxos alternativos, como erros ou informações opcionais. Essa previsão parece ter sido cumprida para usuários comuns, mas para profissionais de TI, como desenvolvedores de software e profissionais envolvidos na operação de sistemas (OPS), os interpretadores de comandos continuam sendo vastamente usados. Neste Na Prática, você vai compreender como interpretadores de comando podem contribuir para agilizar o trabalho de desenvolvedores e profissionais da área de operação e infraestrutura,com base em exemplos reais de situações nas quais o uso da shell contribuiu para uma melhora no processo de desenvolvimento e entrega de software. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://statics-marketplace.plataforma.grupoa.education/sagah/5413cdbc-60a0-4e7b-afc1-b9e993fd0232/a1708186-6359-490c-95fa-c94fb9f07c5d.png O PowerShell é uma interface de linha de comandos utilizada para instruir o computador a executar tarefas utilizando comandos digitados. É importante para o sistema operacional, pois torna possível a automatização de tarefas com um comando. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://fast.player.liquidplatform.com/pApiv2/embed/cee29914fad5b594d8f5918df1e801fd/291a61348abe371ec31d5b26b8e93ec2 Saiba + Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: O desenvolvimento da linguagem C* Tradução oficial do artigo escrito por Dennis Ritchie, um dos criadores da linguagem C, descrevendo a história de projeto e desenvolvimento da linguagem, como foi sua evolução a partir de outras linguagens existentes entre as décadas de 60 e 70 e o relacionamento de benefício mútuo entre a criação da linguagem C e a evolução das primeiras versões do sistema operacional Unix. Confira. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. Comandos Prompt do Windows Leia mais sobre Comandos Prompt do Windows Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. Comandos Bash (Linux) Veja uma referência completa de comandos disponíveis em bash. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://www.bell-labs.com/usr/dmr/www/chistPT.html https://www.ufsm.br/app/uploads/sites/762/2021/05/Principais-comandos-do-prompt-do-Windows-CMD.pdf https://www.devmedia.com.br/comandos-importantes-linux/23893 Documentação oficial do PowerShell Confira este site oficial da Microsoft com a documentação do interpretador de comandos Powershell. Há um tutorial para iniciantes e vários exemplos de código. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://docs.microsoft.com/pt-br/powershell/
Compartilhar