Pontos de Inflexão e Concavidade - Matemática
Por: MaressaSales • 12/12/2016 • Pesquisas Acadêmicas • 841 Palavras (4 Páginas) • 247 Visualizações
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 aptget install libncurses5dev gcc make git exuberantctags” 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/linux4.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
...