Lista de Exercícios 1 (2019.2)

Unidade 1.1: processos e thrads

  1. O que são processos?
  2. Que benefícios são proporcionados por processos?
  3. Por que costumamos dizer que um processo é uma instância de um programa?
  4. O que é o espaço de endereçamento virtual?
  5. O que são threads?
  6. Que comando unix permite consultar/listar os processos em execução?

  7. Classifique as afirmações em Verdadeiras e Falsas. Justifique sua resposta.

    a. Os processos em execução em uma máquina compartilham o Espaço de Endereçamento Virtual proporcionado pelo sistema operacional. b. O Espaço de Endereçamento Virtual é uma abstração provida pelo sistema operacional que permite a um processo atuar como se tivesse uma memória de uso exclusivo. c. É o uso de múltiplas CPUs (computadores multi-core) que permite o uso de threads e, portanto, de sistemas multi-thread. d. É o uso de múltiplas CPUs (computadores multi-core) que permite que o computador execute vários processos simultaneamente. e. É graças ao conceito de threads que um sistema operacional pode executar o mesmo programa múltiplas vezes e simultaneamente. f. Threads são usadas nos servidores para permitir que um mesmo processo atenda a múltiplas requisições simultaneamente.

Unidade 1.2: streams e pipes

  1. O que são streams?
  2. Quais os streams default de um processo?
  3. Para que devem ser usados stdin, stdout e stdev?
  4. O que é redirecionamento?
  5. O que é um pipeline?
  6. Qual a diferença entre o shell e um terminal?
  7. Que comando pode ser usado para listar os processos em execução de forma que a lista resultante seja armazenada no arquivo arq.txt?
  8. Um processo pode estar conectado a múltiplos streams simultaneamente?
  9. Como o sistema operacional executa um pipeline unix? Cada programa é executado na ordem indicada pelo pipeline, coletando a saída de cada um deles e armazenando-a para que seja usada como entrada do próximo programa? Explique.

Unidade 1.3: Sockets

  1. O que são sockets?
  2. O que são conexões TCP e quais suas características relevantes?
  3. O que se quer dizer com “conexões TCP são full-duplex”?
  4. A comunicação por TCP é baseada em requisições e respostas? Explique.
  5. O que é um endereço TCP? Como é formado?
  6. O que se quer dizer com “_conexões TCP transmitem bytes, não caracteres”?
  7. Usando o comando nc, indique como criar um servidor que “ouça” na porta 2626 da máquina local.
  8. Usando o comando nc, indique como criar um cliente para se conectar em um servidor na porta 2626 da máquina local.
  9. Escreva um programa em python que a partir de um endereço dado pelo usuário, estabeleça uma conexão TCP e que envie uma sequência de 100 números aleatórios entre 0 e 200.
  10. Reescreva o programa da atividade anterior, mudando a codificação utilizada. Se você os números foram enviados como strings, desta vez represente-os como bytes (observe que isto é possível, porque os valores estão entre 0 e 200). Se na atividade anterior você já havia utilizado bytes, desta vez, represente os números em formato textual. Observe que você precisará de um separador entre as representações neste caso. Sugestão: use \n.

Unidade 1.4: Introdução à Web e a HTTP

  1. O que é um recurso web?
  2. Por que dizemos que HTTP é um protocolo cliente-servidor?
  3. Por que dizemos que HTTP é stateless?
  4. HTTP é uma alternativa a TCP? Explique?
  5. O que se quer dizer com “a comunicação HTTP é basada em ciclos _requisição-resposta”?
  6. Quais os elementos do formato geral de mensagens HTTP?
  7. O que é o request line? E qual o seu formato?
  8. O que é o status line? E qual o seu formato?
  9. O que são cabeçalhos e para quê servem?
  10. Escreva, manualmente, uma requisição em HTTP/1.1 para solicitar o recurso /msg/1 do servidor www.seila.com.
  11. Assumindo que apenas o cabeçalho Date seja produzido pelo servidor, escreva, manualmente, um exemplo de resposta que poderia resultar da requisição escrita na mensagem anterior. Assuma que o recurso contém apenas uma ou duas linhas de texto.
  12. O que é uma classe de status-codes?
  13. Quais são as classes de status-codes existentes e quais os seus significados?
  14. Escreva em Python um pequeno servidor HTTP (você só pode usar a biblioteca sockets, não deve usar a biblioteca de HTTP, obviamente) que seja capaz de atender a uma única requisição. O servidor deve funcionar localmente, na porta 8080. A requisição deve ser um GET e o recurso deve ser /. O servidor deve ignorar todos os cabeçalhos. A resposta não precisa conter nenhum cabeçalho. O corpo deve consistir em apenas uma linha contendo <h1>funciona!</h1>. Para testá-lo, use um browser.