TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Pontos de Inflexão e Concavidade - Matemática

Por:   •  12/12/2016  •  Pesquisas Acadêmicas  •  841 Palavras (4 Páginas)  •  246 Visualizações

Página 1 de 4

SISTEMAS OPERACIONAIS

TRABALHO DE CONCLUSÃO DE DISCIPLINA

GRUPO 9

Leticia F B de Araujo - 11611BSI245

Luis Heleno Silva - 31211BSI004

Maressa Sales – 11311BSI213

Universidade Federal de Uberlândia

Uberlândia, 27 de Junho de 2016.

Relatório

1. Introdução

Neste relatório será apresentado o trabalho de conclusão da disciplina de Sistemas Operacionais.

A proposta do nosso grupo foi projetar e implementar duas system calls para o kernel Linux, plataforma x86. As system calls que foram implementadas foram chamadas de io_block() e io_unblock(). Ao chamar io_block() deve-se receber uma partição como argumento e deve bloquear qualquer operações read() e write() realizadas sobre a partição informada. io_unblock() desativa o bloqueio realizado pela chamada de io_block(). A definição dos parâmetros de entrada e valores de retorno faz parte da etapa de projeto da system call.

2. Metodologia

Para realizarmos a atividade proposta, usamos o comando “sudo apt­get install libncurses5­dev gcc make git exuberant­ctags” para instalar as ferramentas gcc e make. Logo em seguida, baixamos o kernel na sua versão 4.6.2, o qual era a versão mais atual e estável, através do link https://www.kernel.org, pois o comando “wget https://www.kernel.org/pub/linux/kernel/v3.x/linux­4.6.2.tar.xz” não estava achando a versão 4.6.2. Após esse processo, extraímos o kernel baixado na pasta Downloads através do comando “tar xvf linux-4.6.2.tar.xz”.

Primeiramente, inserimos na tabela de system calls, a qual está em “Downloads/linux-4.6.2/arch/m32r/Kernel/syscall_table.S”, nas posições 326 e 327, .long sys_io_block e .long sys_io_unblock. Depois, inserimos um protótipo de cada uma das system calls em “Downloads/linux-4.6.2/include/linux/syscalls.h” no fim do arquivo antes do “#endif”. E por último, no arquivo sys.c, o qual está localizado em “Downloads/linux-4.6.2/kernel”, foi inserido no final do mesmo depois do “#endif”.

Finalizado essa etapa, discutimos uma forma de bloquear o read e write de uma partição. Ao passar uma partição para ser bloqueada, um arquivo que está nesta partição não poderá ser lido nem modificado. Assim, a solução encontrada foi criar uma variável global no Kernel do Linux, chamada blockedPartition, e outra, chamada partitionStatus na system call write.

A variável blockedPartition recebe uma partição. Já a partitionStatus é um vetor de 15 posições, todas inicializadas com zero. O vetor é usado para saber se uma partição está bloqueada, recebe 1, ou desbloqueada, recebe zero.

Antes precisávamos entender o que é major number e minor number.

MAJOR NUMBER corresponde ao primeiro disco rígido na primeira controladora SCSI ou SATA, que no caso é representado pelo número 8. E o MINOR NUMBER é a partição do disco rígido, que está entre 0 e 15.

Após essa pesquisa, a variável blockedPartition recebe o minor number que o usuário passa pela system call. O vetor guarda o status (1 ou 0) de cada partição, por isso o vetor tem tamanho igual a 15.

Dentro da system call write original, acrescentamos uma condição que compara a partição bloqueada pelo usuário e a partição onde está o arquivo. Se a comparação for verdadeira

...

Baixar como (para membros premium)  txt (5.7 Kb)   pdf (147.7 Kb)   docx (11.6 Kb)  
Continuar por mais 3 páginas »
Disponível apenas no TrabalhosGratuitos.com