Mudanças entre as edições de "SOP-EngTel 2018 1"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 115: Linha 115:
  
 
{{collapse bottom}}
 
{{collapse bottom}}
 +
 +
 +
 +
=Laboratórios=
 +
 +
{{collapse top| bg=lightyellow | expandir=true | Um Exemplo de Uso "API Padrão POSIX"}}
 +
== Um Exemplo de Uso "API Padrão POSIX" ==
 +
 +
;Referências
 +
* Referência http://man7.org/linux/man-pages/man2/mmap.2.html
 +
 +
 +
Crie uma função soma que receba 2 ponteiros referenciando posições na memória, criadas utilizando nmap(), de maneira que estas posições armazenem números inteiros. A função soma deverá retornar a soma dos números apontados em regiões da memória sem a utilização de nenhuma rotina da biblioteca do C, que não sejam definidas por APIs posix,  para criação destas
 +
regiões na  memória (malloc, alloc, calloc). Após retornar o resultado da soma os devidos ponteiros deverão ser extintos da memória.
 +
 +
 +
*'''Experimento 1:''' Aumente o tamanho da memória alocada até quando for possível.
 +
 +
Qual o tamanho limite da memória que você conseguiu alocar?
 +
 +
*'''Experimento 2:''' Mude o escopo para PROT_NONE, após executar e  depurar o código explique o que aconteceu.
 +
 +
Em sua opinião NMAP trata-se de uma syscall ou de uma API? Afinal API e syscall são a mesma coisa? Explique.
 +
 +
<syntaxhighlight lang=cpp>
 +
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
 +
int munmap(void *addr, size_t length);
 +
 +
addr = Valor do início do mapeamento.
 +
length = valor do tamanho da região a ser alocada.
 +
prot = especificações de proteção da região alocada (consultar http://man7.org/linux/man-pages/man2/mmap.2.html).
 +
flags = especificação do escopo e do tipo da região criada (exemplo publica ou privada, se é anônima ou não).
 +
</syntaxhighlight>

Edição das 23h28min de 18 de fevereiro de 2018

Sistemas Operacionais

  • Professor: André D'Amato
  • Encontros: Segundas às 7:30 e sextas às 09:40 no Laboratório de Redes II.



Material de aula

Slides


Listas de exercícios

As listas de exercícios são compostas por exercícios selecionados do livro do Silberschatz, 8a edição. Há 10 volumes deste livro na biblioteca do campus.

SILBERSCHATZ, Abraham; GALVIN, Peter; GAGNE, Greg. Fundamentos de sistemas operacionais. 8. ed. Rio de Janeiro: LTC, 2011. 515 p., il. ISBN 9788521617471.

Exercícios selecionados:

  • Capítulo 1: 1-3, 6-8, 10, 13, 14, 17, 22, 23, 25.


Conteúdo

Unidade 01: Introdução

Unidade 01: Introdução

Apresentação do Curso

Visão geral de funções, responsabilidades e estruturas de um SO

Arquitetura de sistemas operacionais e modelos de programação

Unidade 02: Processos

Unidade 02: Processos

Gerência de tarefas; contextos, processos e threads

Escalonamento de tarefas

Comunicação entre Processos

Coordenação de processos

Unidade 03: Memória

Unidade 03: Memória

Introdução ao Gerenciamento de Memória

Memória Principal

Memória Virtual


Unidade 04: Armazenamento

Unidade 04: Armazenamento

Interface do Sistema de Arquivos

Implementação do Sistema de Arquivos

Estrutura de Armazenamento em Massa

Gerenciamento de Entrada e Saída


Laboratórios

Um Exemplo de Uso "API Padrão POSIX"

Um Exemplo de Uso "API Padrão POSIX"

Referências


Crie uma função soma que receba 2 ponteiros referenciando posições na memória, criadas utilizando nmap(), de maneira que estas posições armazenem números inteiros. A função soma deverá retornar a soma dos números apontados em regiões da memória sem a utilização de nenhuma rotina da biblioteca do C, que não sejam definidas por APIs posix, para criação destas regiões na memória (malloc, alloc, calloc). Após retornar o resultado da soma os devidos ponteiros deverão ser extintos da memória.


  • Experimento 1: Aumente o tamanho da memória alocada até quando for possível.

Qual o tamanho limite da memória que você conseguiu alocar?

  • Experimento 2: Mude o escopo para PROT_NONE, após executar e depurar o código explique o que aconteceu.

Em sua opinião NMAP trata-se de uma syscall ou de uma API? Afinal API e syscall são a mesma coisa? Explique.

void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
int munmap(void *addr, size_t length);

addr = Valor do início do mapeamento.
length = valor do tamanho da região a ser alocada.
prot = especificações de proteção da região alocada (consultar http://man7.org/linux/man-pages/man2/mmap.2.html).
flags = especificação do escopo e do tipo da região criada (exemplo publica ou privada, se é anônima ou não).