SOP-EngTel 2018 1: mudanças entre as edições

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Sem resumo de edição
Linha 194: Linha 194:
}
}
</syntaxhighlight>
</syntaxhighlight>
* [[SOP-EngTel_2018_1-at1| Atividade 1]]

Edição das 16h25min de 23 de fevereiro de 2018

1 Sistemas Operacionais

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



2 Material de aula

2.1 Slides


2.2 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.


3 Conteúdo

Unidade 01: Introdução

3.1 Unidade 01: Introdução

3.1.1 Apresentação do Curso

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

3.1.3 Arquitetura de sistemas operacionais e modelos de programação

Unidade 02: Processos

3.2 Unidade 02: Processos

3.2.1 Gerência de tarefas; contextos, processos e threads

3.2.2 Escalonamento de tarefas

3.2.3 Comunicação entre Processos

3.2.4 Coordenação de processos

Unidade 03: Memória

3.3 Unidade 03: Memória

3.3.1 Introdução ao Gerenciamento de Memória

3.3.2 Memória Principal

3.3.3 Memória Virtual


Unidade 04: Armazenamento

3.4 Unidade 04: Armazenamento

3.4.1 Interface do Sistema de Arquivos

3.4.2 Implementação do Sistema de Arquivos

3.4.3 Estrutura de Armazenamento em Massa

3.4.4 Gerenciamento de Entrada e Saída


4 Laboratórios

Um Exemplo de Uso "API Padrão POSIX"

4.1 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).


void* meu_malloc(size_t tamanho) {
  void* addr = mmap(0,                      // addr
                    tamanho,   // len
                    PROT_READ | PROT_WRITE,  // prot
                    MAP_ANON | MAP_PRIVATE, // flags
                    -1,                     // filedes
                    0);                     // off
  *(size_t*)addr = tamanho;
  return addr + sizeof(size_t);
}

int meu_free(void* addr) {
  return munmap(addr - sizeof(size_t), (size_t) addr);
}


int soma(int *N1, int *N2){

return (*N1+*N2);

}


int main(int argc, char* argv[]) {
  
  int* numero1 = meu_malloc(sizeof(int));
  int* numero2 = meu_malloc(sizeof(int)); 
  

  *numero1 = 10;
  *numero2 = 20;	

  int resultado = soma(numero1, numero2);

  printf("\n\n O resultado da soma é %d \n\n",resultado);	  	
  
  meu_free(numero1);
  meu_free(numero2);

  return 0;
}