Mudanças entre as edições de "SOP29005-2020-1"
Ir para navegação
Ir para pesquisar
Linha 188: | Linha 188: | ||
**Tipos de Chamadas de Sistema (2.4) ver Fig.2.8 | **Tipos de Chamadas de Sistema (2.4) ver Fig.2.8 | ||
***Chamadas de Controle de Processos | ***Chamadas de Controle de Processos | ||
+ | |||
+ | =AULA 4 - Dia 21/08/2019= | ||
+ | |||
+ | ===Objetivos=== | ||
+ | |||
+ | *PARTE 2A: Gerenciamento de Processos (cap.3) | ||
+ | *3.1.Conceito de Processo | ||
+ | *3.2.Escalonamento de Processos | ||
+ | *3.3.Operações sobre Processos (Laboratório Operações sobre Processos no Linux: Fork/Exec/Wait) | ||
+ | |||
+ | ===Material de Referência=== | ||
+ | |||
+ | *Slides do Cap.3 - Silberschatz | ||
+ | *Laboratório Fork/Exec/Wait | ||
+ | |||
+ | === Exercícios de Demonstração=== | ||
+ | |||
+ | #Executar em um terminal o comando top. Em um outro terminal executar: | ||
+ | yes > /dev/null & | ||
+ | yes > /dev/null & | ||
+ | #Parar um dos processos yes | ||
+ | kill -STOP <pid_yes> | ||
+ | #Continuar o processo | ||
+ | kill -CONT <pid_yes> | ||
+ | #Destruir todos | ||
+ | killall yes |
Edição das 07h24min de 21 de fevereiro de 2020
AULA 1 - Dia 11/02/2020
Objetivos/Conteúdos
- Apresentação do Plano de Ensino
- Objetivos e Conteúdo Programático da Disciplina (ver SIGAA)
- Forma de Avaliação (ver SIGAA)
- Introdução a Sistemas Operacionais (Cap1. do Silberschatz)
- O que faz um sistema operacional (1.1)
- Organização e Arquitetura de um Sistema Computacional (1.2 e 1.3)
- Importância da Interrupção e Timers (1.2.1)
- Estrutura de Armazenamento (1.2.2)
- Estrutura de IO (1.2.3)
- Estrutura e Operações de um Sistema Operacional (1.4 e 1.5)
Material de Referência
- Apresentação sobre histórico visão geral e estruturas básicas de um SO
- Slides Silberschatz Oitava Edição
- Tradução Slides Silberschatz Cap1
- Tradução Slides Silberschatz Cap2
- Tradução Slides Silberschatz Cap3
- Tradução Slides Silberschatz Cap4
- Livro do Prof.Maziero
- Université Nice Sophia Antipolis
Arliones:
Leitura Recomendada
- Cap.1 do Silberschatz principalmente:
- 1.1 a 1.9
Exercícios Práticos de Apoio a Aula
Na sequência. com fins motivacionais, são apresentados alguns exercícios ilustrando conceitos de processos, arquivos e permissionamento.
-
Comando para ver todos os processos no linux:
$ ps aux
-
Colocar 2 processos se executando no contexto de um terminal e verificar número dos processos e então "destruí-los":
$ yes > /dev/null $ yes > /dev/null $ ps $ kill -9 <pid_yes> $ kill -9 <pid_yes>
Observe que dois processos foram criados a partir do programa "yes". Os processos associados ao terminal são visualizados e então destruídos. Tente destruir também o interpretador de comando (shell) associado ao terminal.
-
Criar um terminal adicional
$ xterm
Ir no terminal criado e listar os processos que se executam associados a este terminal. Verificar qual o dispositivo de entrada e saída associado a ele. Voltar ao terminal original e enviar uma mensagem. Destruir o terminal criado:
$ echo Alo Terminal > /dev/pts/2 $ kill -9 <pid_terminal>
-
Comunicação entre processos:
$ cat /etc/passwd | grep home | wc -l
-
Retirando a permissão de leitura de um arquivo em nível de usuário proprietário:
$ echo Alo Mundo > alfa.txt $ ls -l alfa.txt $ cat alfa.txt $ chmod u-r alfa.txt $ cat alfa.txt $ chmod u+r alfa.txt $ cat alfa.txt
AULA 2 - Dia 14/02/2020
Objetivos/Conteúdos
- Estruturas do Sistema Operacional (cap.2)
- Serviços do Sistema Operacional (2.1)
- Interfaces com Usuários (2.2)
- Chamadas do Sistema (2.3)
- Tipos de Chamadas de Sistema (2.4) ver Fig.2.8
- Chamadas de Controle de Processos
Material de Referência
- [http://docente.ifsc.edu.br/arliones.hoeller/sop/slides/SOP29005-parte1.pdf Apresentação sobre histórico visão geral
- [3]
Leitura Recomendada
- Cap.2 do Silberschatz principalmente:
- 2.1 a 2.8
Exercícios
- Estudar e executar o código em http://cs.lmu.edu/~ray/notes/gasexamples/ Detalhes das chamadas na arquitetura x86_64 ver em https://lwn.net/Articles/604287/
- Estudar e executar o código usando a função (em conformidade com a API POSIX) write() para o hello world:
#include <unistd.h> main() { write(1,"Alo Mundo\n",10); }
- Use o comando strace para verificar todas as chamadas de sistema dos programas acima.
-
DESAFIO 1: Estude a seção "Mixing C and Assembly Language" da http://cs.lmu.edu/~ray/notes/gasexamples/ e construa uma função meu_hello_world() usando o código em assembly do exercício inicial. Estude como poderia disponibilizar esta e outras funções de interface (a sua API) em uma biblioteca. Note que esta função deve ser chamada da forma:
main() { meu_hello_world(); }
Gere o assembly do código em C e discuta a diferença entre uma chamada de função e uma chamada de sistema.
-
DESAFIO 2: Estude o link http://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/ e melhore a função meu_hello_world para suportar uma mensagem adicional da forma:
#include <string.h> main() { char *p="Tudo bem com vocês?"; meu_hello_world(p, strlen(p)); }
Solução:
Solução modificado de http://cs.lmu.edu/~ray/notes/gasexamples/ .global meu_hello_world .text meu_hello_world: push %rdi # salva primeiro parâmetro push %rsi # salva segundo parâmetro mov $1, %rax # system call 1 é write mov $1, %rdi # file handle 1 é stdout mov $message, %rsi # endereço da string mov $13, %rdx # número de bytes da string syscall # chamada ao sistema pop %rdx # o que havia sido passado em rsi (número de bytes) é colocado em rdx pop %rsi # o que havia sido colocado em rdi (endereço da string) é colocado em rsi mov $1, %rax # system call 1 is write mov $1, %rdi # file handle 1 é stdout syscall # nova chamada ao sistema ret message: .ascii "Hello, World\n"
AULA 3 - Dia 18/02/2020
Objetivos/Conteúdos
- Interfaces com Usuários (2.2)
- Chamadas do Sistema (2.3)
- Tipos de Chamadas de Sistema (2.4) ver Fig.2.8
- Chamadas de Controle de Processos
AULA 4 - Dia 21/08/2019
Objetivos
- PARTE 2A: Gerenciamento de Processos (cap.3)
- 3.1.Conceito de Processo
- 3.2.Escalonamento de Processos
- 3.3.Operações sobre Processos (Laboratório Operações sobre Processos no Linux: Fork/Exec/Wait)
Material de Referência
- Slides do Cap.3 - Silberschatz
- Laboratório Fork/Exec/Wait
Exercícios de Demonstração
- Executar em um terminal o comando top. Em um outro terminal executar:
yes > /dev/null & yes > /dev/null &
- Parar um dos processos yes
kill -STOP <pid_yes>
- Continuar o processo
kill -CONT <pid_yes>
- Destruir todos
killall yes