Mudanças entre as edições de "Sistemas Operacionais e Introdução a Programação (diário 2009-2)"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 245: Linha 245:
 
# Armazenamento da ficha - de volta ao fichário.
 
# Armazenamento da ficha - de volta ao fichário.
 
# Fim do reconhecimento.
 
# Fim do reconhecimento.
* Material de apoio: '''Lógica de Programação''', de Paulo Sérgio de Moraes - vide [[Sistemas Operacionais e Introdução a Programação#Referências_Bibliográficas|referências bibliográficas]] da disciplina.
+
* Material de apoio: '''Lógica de Programação''', de Paulo Sérgio de Moraes - consulte as [[Sistemas Operacionais e Introdução a Programação#Referências_Bibliográficas|referências bibliográficas]] da disciplina.
  
  
 
<center><small>[[Sistemas Operacionais e Introdução a Programação (página)|Página principal da disciplina]]</small></center>
 
<center><small>[[Sistemas Operacionais e Introdução a Programação (página)|Página principal da disciplina]]</small></center>

Edição das 09h29min de 9 de setembro de 2009

27/07: NÃO HOUVE

29/07: NÃO HOUVE

03/08: NÃO HOUVE

05/08: NÃO HOUVE

10/08: História dos Sistemas Operacionais e das Linguagens de Programação

12/08: Usuários e Grupos

Atividades

  • Quem pode executar o comando /usr/bin/firefox? O usuário aluno pode modificar tais permissões?
  • Para o comando acima mencionado, informe quais as permissões e propriedades necessárias para permitir que apenas usuários do grupo "internet" possam executá-lo.
  • Se um dado arquivo tiver as permissões 000 (formato octal de representação), mesmo assim o usuário root tem permissão de leitura. Por quê?
  • A partir do diretório raiz (/), quais são todos os diretórios em que o usuário aluno pode criar arquivos e subdiretórios? Para cada caso, informe que propriedades e permissões garantem tal direito.
  • Um certo programa, chamado firefox-3.6, foi descarregado da Internet pelo usuário aluno, mas ele não pode ser executado. Que permissões garantem que ele possa ser executado por tal usuário?
  • Qual a lista completa de usuário e grupos do sistema operacional Linux? A resposta está em dois arquivos que utilizamos como exemplo... eles estão no diretório /etc.

17/08: Processos

  • Tópicos: árvore de processos, escalonamento de processos e seus estados.
  • Referência externa: Cap. 2 do livro Sistemas Operacionais Modernos - particularmente os tópicos vistos em aula.

19/08: Sistemas de Arquivos

  • Tópicos: arquivos e diretórios, hard link e soft link, sistema de arquivos corrente e pontos de montagem.
  • Referência externa:

Atividades

  • Quantos processos chamados bash estão rodando no sistema?
  • Se todos os processos bash forem encerrados, todas as sessões de usuário (logins) também o serão? Por quê?
  • O comando top pode mostrar todos os processos de um certo usuário, como por exemplo aluno? O comando ps também? Por que um processo precisa ter um usuário associado a ele?
  • É possível identificar, através do comando top, quais processos estão em estado bloqueado?
  • É possível criar um soft link de outro soft link? Eles conterão o mesmo conteúdo?
  • Se o conteúdo de um certo arquivo é acessado pelo seu soft link, por que este arquivo (original) tem a data de modificação alterada?
  • Um arquivo pode ter, como conteúdo, um sistema de arquivos? Explique como isso é possível, e qual o processo de ler este conteúdo.
  • Crie um soft link com o nome /tmp/diretorioNovo/arquivoNovo para o arquivo /etc/passwd. Em caso de dúvida, consulte a lista de comandos.
  • É possível bloquear o uso do comando ls - armazenado no diretório /bin - apenas retirando as permissões de execução? Por quê? Exemplifique com o usuário aluno.

24/08: Linguagens de Programação

  • Tópicos: linguagens de programação, execução de programas.

26/08: Revisão de Sistemas Operacionais

Assumindo como cenário o sistema operacional GNU/Linux para auxiliar nas respostas.

  • Por que as permissões em arquivos são tão importantes?

Pelo fato de o sistema prover um ambiente multi-usuário, é preciso que haja limites para cada um dos usuários desse sistema, não só para controlar o acesso a arquivos pessoais mas também a informação referente ao próprio S.O. - acesso ao arquivo de senhas, por exemplo.

Comandos relacionados: ls.

  • Como se dá o controle de acesso a arquivos abertos por processos?

As permissões a arquivos, sejam eles executáveis ou não, se dão por uma lista de controle de acesso: usuário (dono do arquivo), grupo e outros. Se o usuário possui a permissão por ele desejada (leitura, escrita ou execução), terá o respectivo acesso ao arquivo. Isso acontecerá para um executável (permissão de execução), por exemplo. E como um processo está sempre associado a um usuário (ou por padrão outorgados ao root), ainda assim tem-se a relação usuário-permissões, as quais serão utilizadas para abrir arquivos. Exemplo: o comando cat que lerá o arquivo /etc/passwd

Comandos relacionados: lsof, fuser.

  • Todo processo tem um dono? Por quê?

Todo arquivo tem um dono, e todo processo também. Parte desta resposta já fora apresentada na questão anterior, mas cabe complementar: é preciso estabelecer limites para os usuários e seus processos e arquivos, a fim de que não haja abuso ou mesmo a inoperância do sistema como um todo por causa de falhas humanas e/ou má fé.

Comandos relacionados: ps, top.

  • Quantos e quais são os estados de um processo? O que um processo precisa fazer para entrar para o estado bloqueado?

<graphviz> digraph Estados { Criação Apto Executando [shape=record] Bloqueado Destruição

Criação -> Apto [label="Admissão"] Apto -> Executando [label="Seleção"] Executando -> Apto [label="Int. por tempo/voluntária"] Executando -> Bloqueado [label="Sincr. ou req. de E/S"] Bloqueado -> Apto [label="Ocorrência de evento"] Executando -> Destruição [label="Término"] } </graphviz>

São cinco os estados, conforme o material recomendado pelo Prof. Semprebom. No caso, processos que estão no estado executando podem fazer uso de I/O bound, o que significa que haverá mais E/S e menos processamento. Por este motivo, é interessante que este processo fique aguardando o seu recurso (via E/S), enquanto que outros processos, que fazem mais CPU bound, aproveitem melhor o recurso de processamento.

Comandos relacionados: ps, top.

  • Qual a relação entre escalonamento preemptivo e prioridade de processos?

Associado ao escalonamento preemptivo, faz-se o uso de prioridades para garantir que os processos sejam atendidos conforme a sua demanda: processos referentes a aplicações de tempo real, por exemplo, requerem mais processamento, portanto uma maior prioridade. Contudo, é preciso, ao longo do tempo, manipular tais prioridades, garantindo que os todos os processos rodem - caso contrário aqueles com maior prioridade sempre voltarão ao começo da fila. O envelhecimento de prioridades, portanto, é uma forma de equilibrar o uso do processador de forma mais eficiente e justa. Lembrando que no escalonamento preemptivo o processador pode parar um processo quando finda seu tempo (timeslice) - a figura da questão anterior ilustra o caso (interrupção por tempo).

Comandos relacionados: top.

  • É possível haver vários sistemas de arquivos montados ao mesmo tempo, de forma hierárquica? Por quê?

Nada impede que haja vários sistemas de arquivos montados, desde que eles estejam em formato compreensível pelo kernel - para depois serem abstraídos às aplicações (veja o Virtual File System do Linux). Como o sistema de arquivos corrente, global, já é hierárquico (árvore de diretórios), a montagem sequencial dos vários sistemas se dará de forma natural.

Comandos relacionados: mount, umount.

  • O que é swap e qual a sua função?

Swap é um tipo de partição da memória secundária, formatada para servir como extensão da memória principal. Juntas, elas formam a memória virtual - que será utilizada pelas aplicações. Para manipular as partições de troca, ou swap, veja o Guia Foca Linux. Cabe destacar que este tipo de memória é mais barata e lenta.

Comandos relacionados: free.

  • O que é um interpretador de comandos? Cite um exemplo e um cenário onde ele apareça.

O interpretador de comandos, ou shell, é uma das aplicações voltadas para o usuário. Esta, em particular, é um terminal em formato texto para interpretador ordens do usuários: os comandos. Há vários interpretadores, onde cada um deles implementa uma linguagem para facilitar a entrada de dados ao computador. O bash é talvez o interpretador mais utilizado nos Linux "de usuário": Ubuntu, Mandriva, etc.

Comandos relacionados: bash.

  • O que é kernel? Por que ele é tão importante? Cite pelo menos 3 funções dele.

O kernel é nada mais que o núcleo do sistema operacional, sendo responsável pela maioria das funções ligadas ao S.O. Dentre as suas funções, podemos destacar: gerência de memória, gerência de processos, controle do sistema de arquivos (E/S).

  • Qual a diferença entre arquivo executável e processo? Processos consomem recursos como processamento, memória e barramento: comente e mostre em uma captura de tela.

O arquivo executável é um arquivo regular, cujo conteúdo é um programa - em código de máquina ou passível de interpretação por outro programa (Python, PHP, etc.). Já o processo é um programa carregado em memória, consumindo recursos da máquina (processamento, memória, E/S) para realizar as suas instruções. Portanto, um arquivo executável será carregado em memória para virar um processo (cuidado com código interpretado: o processo será, na verdade, o seu interpretador, e associado a ele o código a interpretar).

Comandos relacionados: ps, top, vmstat.

31/08: Preparativos para a prova

  • Atividades: o que este faz este script? Consegue "execuá-lo" mentalmente?
# Etapa 1 - Entrar no diretório "/home/aluno":
cd /
cd home
cd aluno
echo "Estou no diretório /home/aluno."
sleep 1
# Etapa 2 - Criar o diretório "q2":
mkdir q2
echo "Criei o subdiretório q2."
sleep 1
# Etapa 3 - Criar os subdiretórios "a", "b", "c" e "d" sob "q2":
cd q2	
mkdir a
mkdir b
mkdir c
mkdir d
echo "Criei os subdiretório a, b, c, e d."
# Etapa 4 - Criar o arquivo "h" sob "q2" com o conteúdo "xyz":
touch h
echo "xyz" > h
# Etapa 5 - Criar os diretórios "e" e "f" sob "a":
cd a
mkdir e
mkdir f
# Etapa 6 - Criar o arquivo "g" sob "d" com o conteúdo "123":
cd ../
cd d
echo "123" > g
  • Dada a seguinte estrutura de diretórios e arquivos:

<graphviz> digraph Dirs { antialias = true splines = true

e [shape=record] i [shape=record] k [shape=record] f [shape=record,label="<0>f|<1>123456"] j [shape=record,label="<0>j|<1>654321"]

a -> b a -> c a -> d a -> e e -> i [label="link simbólico",arrowhead=onormal] a -> f d -> g g -> h h -> i i -> f [label="link simbólico",arrowhead=onormal] c -> h [label="link simbólico",arrowhead=onormal] g -> j a -> k k -> j [label="link simbólico",arrowhead=onormal] b -> l l -> d [label="link simbólico",arrowhead=onormal] } </graphviz>

Nomenclatura:

  1. Círculo ou elipse: diretório
  2. Quadrado ou retângulo: arquivo
  3. Flecha com ponta escura: hard link
  4. Flecha com ponta vazada (clara): soft link

Perguntas referentes ao grafo anterior:

  1. Os arquivos "e" e "i" contêm o mesmo conteúdo?
  2. Os diretórios b e d contêm o mesmo conteúdo?
  3. Como criar esta estrutura de diretórios e arquivos? Apresente a sequência de passos ou operações; em seguida, a sequência de comandos de shell (interpretador de comandos).
  • Perguntas que "podem" cair na prova:
    • No artigo do UNIX, fala-se no diretório "..". O que ele significa?
    • A linguagem de programação C ajudou na disseminação do sistema UNIX. Comente.
    • Qual a relação entre usuário, uid e /gid?
    • Qualquer usuário pode listar os processos do sistema usando o comando ps? Por quê? Em que parte do sistema esta permissão está dita? Como garantir que apenas o usuário joao possa fazê-lo? Assuma que o usuário joao já exista no sistema; além disso, ignore o caso do usuário root, que ignora tais permissões.
    • Salve o seu histórico de comandos em um arquivo texto.
    • Apresente, na tela, apenas os nomes dos usuários cadastrados no sistema EXCETO o root. Dicas: veja o arquivo /etc/passwd; além disso, os comandos grep e cut, que podem auxiliar na tarefa.
    • Um estado bloqueado pode voltar a ser executado? O que o impede e como liberá-lo?
    • Um pid está, de alguma forma, associado a um uid. Comente.
    • Um arquivo texto pode ser interpretado? Como?
    • O que é E/S? Exemplifique-o com um comando.

02/09: Prova

1a. Aula: "Cola"

  • Usuários
    • Cadastro de usuários e grupos
    • Grupos primário e secundários
    • uid e gid
  • Processos
    • pid
    • Estados
  • Sistemas de arquivos
    • Diretórios
      • Diretórios importantes
      • Comandos de navegação
    • Arquivos
      • Criação e modificação
      • Permissões e propriedades
      • Comandos de manipulação
    • Links simbólicos
      • Criação de links

2a. e 3a. Aulas: Prova teórica

09/09: Lógica de Programação

  • Problema: reconhecimento de firma. Proposta de solução (em formato textual):
  1. Distribuir senhas sequencialmente.
  2. Atendimento por ordem sequencial das senhas. Se for preferencial, anteder; caso contrário, atender o próximo.
  3. Recebimento dos documentos.
  4. Verifica se o assinante está presente. Se estiver, tudo bem; caso contrário, verifica se o documento pode ser reconhecido por semelhança.
  5. Verifica a existência de uma ficha relacionada ao nome do documento.
  6. Se existir,pegar a ficha; caso contrário, e se a pessoa estiver presente, cria uma ficha.
  7. Assinatura de um termo de comparecimento com data.
  8. Comparação das assinaturas dos documentos e do termo.
  9. Se forem iguais, reconhece, aplica o selo e leva ao tabelião assinar; caso contrário negar o reconhecimento.
  10. Recebimento do pagamento.
  11. Devolução dos documentos.
  12. Armazenamento da ficha - de volta ao fichário.
  13. Fim do reconhecimento.


Página principal da disciplina