6 Introdução à programação de drivers para dispositivos de bloco

Tamanho: px
Começar a partir da página:

Download "6 Introdução à programação de drivers para dispositivos de bloco"

Transcrição

1 6 Introdução à programação de drivers para dispositivos de bloco 6.1 Driver elementar para dispositivos de bloco: RAMDSK Para introduzir os conceitos elementares de drivers para dispositivos de bloco será apresentado um exemplo de uma RAMDISK, isto é um disco virtual composto por um array de blocos na memória RAM, mas que para efeitos de transferência de informação comportase como um disco físico. O dispositivo terá uma entrada no sistema de ficheiros em /dev/ramdsk, e uma entrada em /proc/devices, na área de dispositivos de bloco: Block devices: (...) 3 ide0 7 loop (...) 254 ramdsk Este periférico virtual responde aos comandos de sistema para unidades de disco. A informação poderá ser editada ao nível sector, ou mesmo do byte num endereçamento linear, com: hexedit s /dev/ramdsk Este driver foi desenvolvido para a versão do kernel Linux. Nas versões e , embora na instalação e remoção sejam indicados warnings, deve também executar-se normalmente. No entanto para versões mais recentes, como por exemplo o kernel não se executa normalmente Registo do driver As estruturas necessárias ao registo, tal como no caso dos dispositivos de caracter são duas. Para indicar as operações suportadas pelo dispositivos usa-se a estrutura block_device_operations definida em <linux/fs.h>. Para representar internamente o dispositivo usa-se a estrutura gendisk, definida em <linux/genhd.h>. Os campos da primeira estrutura e o seu significado são: struct module *owner; Um ponteiro para o módulo que contém esta estrutura. Tal como nos drivers para dispositivos de caracter é normalmente inicializada com a macro THIS_MODULE. int (*open) (struct inode *inode, struct file *filp); int (*release) (struct inode *inode, struct file *filp); Semelhantes às funções para dispositivos de caracter. Um driver para dispositivos de bloco pode responder a uma operação open fazendo girar os pratos, fechando a porta, etc. int (*ioctl) (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg); Implementação da chamada de sistema IOCTL. A camada do sistema operativo que gere dispositivos de bloco genéricos intercepta um grande número de pedidos padrão, de modo que ao contrário dos dispositivos de caracter a implementação desta função para dispositivos de bloco geralmente consiste num switch com poucos casos. PIN T06-1/16

2 int (*media_changed) (struct gendisk *gd); Método invocado pelo kernel para verificar se o utilizador mudou o suporte, normalmente o disco, retornando um valor não nulo nesse caso. Só deve ser usado para dispositivos que suportação a remoção do suporte. Pode ser omitida noutros casos. int (*revalidate_disk) (struct gendisk *gd); Chamada pelo kernel após ser inserido um novo suporte. Permite efectuar as operações necessárias para que o novo suporte esteja pronto para ser usado. Por exemplo ler o sector de arranque do disco para identificar a sua geometria, partições, sistema de ficheiros. O suporte para media removível será abordado num ponto posterior deste capítulo. Repare-se que nesta estrutura não se encontram ponteiros para as funções read ( ) e write ( ). De facto no caso de dispositivos de bloco, a transferência de informação é efectuada através de pedidos ou requests que são colocados numa fila de espera, como será abordado mais à frente. Na maior parte dos casos a operação por defeito de read ( ) e write ( ), implementadas pelo kernel é suficiente, não sendo necessário definir estas funções no driver. A estrutura gendisk consiste na representação interna do kernel de uma unidade de disco. O kernel também usa esta estrutura para representar as partições, mas não é necessário tomar isso em conta na programação de drivers. Os campos desta estrutura são: int major; Major do número de dispositivo int first_minor; Primeiro minor do número de dispositivo. No caso de unidades de disco particionáveis cada partição é atribuído um minor. Um valor comum para o número de partições de cada unidade é 16. int minors; Como já referido acima o número de minors para cada unidade de disco. Um valor comum para o número de partições de cada unidade é 16, o que permite um minor para todo o disco e 15 para partições. Por exemplo: Major Minor Name 3 0 hda #Todo o disco "master" do interface ide0 3 1 hda1 #A 1ª partição do disco "master" do interface 3 2 hda2 #A 2ª hda3 # A 3ª hdb #Todo o disco "slave" do interface ide hdb1 #A 1ª partição do disco "slave" do interface char disk_name[32]; Nome do dispositivo como aparece em /proc/partitions e sysfs. struct block_device_operations *fops; Estrutura que indica as operações suportadas pelo dispositivo, descrita na secção anterior. PIN T06-2/16

3 struct request_queue *queue; Estrutura usada para guardar os pedidos de transferência de dados. int flags; Descrição do estado da unidade, embora com pouco uso. Seleccionando os seguintes bits indica: GENHD_FL_REMOVABLE GENHD_FL_CD GENHD_FL_SUPPRESS_PARTITION_INFO sector_t capacity; Dispositivo contém suporte removível Unidade é CD-ROM Não mostrar informação sobre as partições em /proc/partitions. A capacidade da unidade em sectores de 512 bytes. O tipo de dados sector_t pode ter 64 bits em algumas arquitecturas. Este valor não deve ser definido directamente, mas sim através da função set_capacity ( ). void *private_data; Ponteiro que pode ser usado para indicar dados internos do driver de cada dispositivo. Semelhante ao usado para drivers de caracter. Seguidamente será apresentado e discutido o código do driver ramdsk.c por secções. Começando pela inclusão dos header necessários e algumas macros definição das variáveis globais, parâmetros do módulo dos includes... #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/init.h> #include <asm/uaccess.h> // copy_to_user,... #include <linux/timer.h> // init_timer,... #include <linux/kernel.h> // printk #include <linux/vmalloc.h> #include <linux/fs.h> // struct blk_device_operations #include <linux/errno.h> // códigos de erro #include <linux/types.h> // size_t,... #include <linux/hdreg.h> // macro HDIO_GETGEO, struct hd_geometry,... #include <linux/genhd.h> // struct gendisk, alloc_disk, add_disk,... #include <linux/spinlock.h> #include <linux/blkdev.h> //blk_init_queue,... #define name "ramdsk" #define MINORS 16 #define SECSIZE 512 #define SECTRACK 16 #define HEADS 4 #define CYL 100 #define NSECTORS SECTRACK*CYL*HEADS #define SIZE SECSIZE*NSECTORS static int Major = 0; module_param(major, int, 0); PIN T06-3/16

4 MODULE_PARM_DESC(addr, "Device Major NUmber.\n" "(por defeito atribuição dinâmica)"); A unidade virtual permitirá 15 partições. A geometria do disco virtual será para todos os efeitos 4 superfícies com 100 cilindros e 16 sectores de 512 bytes por pista, o que dá uma capacidade de: SECSIZE*SECTRACK*HEADS*CYL = 512*16*4*100 = bytes O módulo terá apenas um parâmetro opcional Major que indicará o Major do número de dispositivo desejado. Por defeito esta variável toma o valor zero o que implica atribuição automática de Major. As operações suportadas pelo dispositivo serão apenas open, release e ioctl. Para já não vai ser possível simular a remoção do suporte, esta funcionalidade será adicionada depois. static int ramdsk_open(struct inode *inode, struct file *filp); static int ramdsk_release(struct inode *inode, struct file *filp); static int ramdsk_ioctl (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg); static struct block_device_operations fops = {.owner = THIS_MODULE,.open = ramdsk_open,.release = ramdsk_release,.ioctl = ramdsk_ioctl, ; A representação interna do driver será dada pela seguinte estrutura. Repare-se que ao incluir toda esta informação numa estrutura será possível criar um array deste tipo, possibilitando assim que o mesmo driver possa controlar múltiplos periféricos semelhantes. No entanto o código apresentado foi deseno apenas para controlar um dispositivo, se bem que suporte particionamento. struct ramdsk_dev { int size; // Tamanho em bytes struct request_queue *queue; // Fila de pedidos (request queue) u8 *data; // Disco virtual (os sectors do disco) struct gendisk *gd; short users; // utilizadores corentes short media_change; // Suporte mudado? spinlock_t lock; // Exclusão mútua struct timer_list timer; // timer para simulação da remoção ; // do suporte static struct ramdsk_dev device; Se fosse pretendido geometria diferente para dispositivos diferentes, esta informação deveria ser adicionada à estrutura acima e não apenas o seu tamanho size. O registo do driver será efectuado na função de inicialização e na função de encerramento o desregisto. A função de inicialização, tal como para os drivers para dispositivos de caracter, primeiro tenta registar o Major do número de dispositivo, com a função: int register_blkdev(unsigned int Major, const char *name); onde se Major for nulo atribuí um valor dinâmico. O segundo argumento deve ser o nome do dispositivo que aparece em /proc/devices, agora na secção dos dipositivos de bloco. De PIN T06-4/16

5 qualquer modo em caso de sucesso é retornado o Major ou um número menor ou igual a zero em caso de erro, no qual o módulo não é inserido: static int init start(void) { /* Registo do número de dispositivo Se Major == 0 atribuí Major dinâmico */ Major = register_blkdev(major, name); if (Major <= 0) { printk(kern_warning "%s: Impossivel obter Major\n", name); return -EBUSY; if (ramdsk_setup(&device)<0) { unregister_blkdev(major, name); return -EBUSY; printk(kern_warning "Driver %s inserido\n", name); return 0; O resto do registo do driver é efectuado pela função ramdsk_setup() que retorna um número negativo em caso de erro e que será descrita a seguir. O eliminação do registo do número do dispositivo é efectuado com a função: int register_blkdev(unsigned int Major, const char *name); ambas as funções estão definidas em <linux/fs.h>. O resto do registo do driver é efectuado pela função seguinte: static int ramdsk_setup(struct ramdsk_dev *dev) { // Inicia disco virtual memset (dev, 0, sizeof (struct ramdsk_dev)); dev->size = SIZE; dev->data = (u8*) vmalloc(dev->size*sizeof(u8)); if (dev->data == NULL) { printk (KERN_NOTICE "%d %s: falha na criação do ram disk\n", dev->size, name); goto errmem; // Inicializa spinlock spin_lock_init(&dev->lock); // Inicia I/O queue dev->queue = blk_init_queue(ramdsk_request, &dev->lock); if (dev->queue == NULL) { printk (KERN_NOTICE "%s: Falha na alocação do request queue\n", name); goto errque; blk_queue_hardsect_size(dev->queue, SECSIZE); // Regista dispositivo com gendisk dev->gd = alloc_disk(minors); if (! dev->gd) { printk (KERN_NOTICE "%s: falha no registo do disco\n", name); goto erraloc; PIN T06-5/16

6 return -1; dev->gd->major = Major; dev->gd->first_minor = 0; dev->gd->fops = &fops; dev->gd->queue = dev->queue; snprintf (dev->gd->disk_name, 32, name); set_capacity(dev->gd, NSECTORS); add_disk(dev->gd); return 0; erraloc: errque: errmem: blk_cleanup_queue(dev->queue); if (dev-<data) vfree(dev->data); return -1; Primeiro é inicalizado o array que suporta o disco virtual com: void* vmalloc(unsigned int size); Esta função aloca memória virtual contígua, não inicializada e retorna um ponteiro para o inicio deste bloco. Embora a memória virtual seja composta de páginas contíguas as zonas de memória física correspondentes não tem de ser contíguas. Para libertar a memória alocada deve ser usada a função: void vfree(void* p); Seguidamente é inicializado um fecho que será usado para garantir acesso único a área criticas. Para o fecho são usados spinlocks definidos em <linux/spinlock.h>. O fecho é inicializado aberto com: void spin_lock_init(spinlock_t *lock); Para fechar e abrir o fecho deve ser usado o par de funções void spin_lock(spinlock_t *lock); void spin_unlock(spinlock_t *lock); Este técnica é superior ao uso de semáforos em termos de eficiência, além de poder ser usados em rotinas que nunca podem ser postas no estado adormecido pelo scheduler tal como rotinas de tratamento de interrupções. O bloco de código seguinte inicializa a fila para os pedidos de E/S, e indica qual a função que trata os pedidos. É fornecido um spinlock para controlar o acesso à fila. Além disso é indicado à fila o tamanho do bloco da unidade, isto é o comprimento físico do sector. As funções para manipular a fila, estão definidas em <linux/blkdev.h> request_queue_t blk_init_queue(request_fn_proc *request, spinlock_t *lock); void blk_cleanup_queue(request_queue_t *); void blk_queue_hardsect_size(request_queue_t *queue, unsigned short max); Finalmente efectua-se o registo do driver com as funções definidas em <linux/genhd.h> struct gendisk *alloc_disk(int minors); PIN T06-6/16

7 Aloca uma instância da estrutura gendisk para Minors minors. Esta estrutura tem de ser alocada primeiro por esta função, e só depois podem ser preenchidos os seus campos. void del_gendisk(struct gendisk *gd); Liberta a estrutura gendisk. void add_disk(struct gendisk *gd); Regista no kernel o driver descrito por gd, após terem sido definidos todos os campos. A capacidade do driver deve ser previamente definida em sectores pela função: void set_capacity(struct gendisk *gd, sector_t sectors); Repare-se que o tratamento de erros é efectuado usando um goto para o fim da função, onde é efectuada a libertação de estruturas já alocadas e retornado um valor negativo indicando erro. Esta técnica permite evitar redundância de código, embora o uso da instrução goto seja desaconselo em linguagens de programação estruturadas de alto nível. No encerramento do módulo além de desregistar o número de dispositivo é também eliminada da memória a representação interna do dispositivo com del_gendisk ( ), eliminada fila de pedidos de entrada saída com blk_cleanup_queue ( ) e o array que suporta o disco virtual com vfree ( ). Repare-se que só no caso destes ponteiros não serem nulos, é que são eliminadas as estruturas, evitando tentar libertar estruturas que poderão já ter sido libertas. static void stop(void) { if (device.gd) del_gendisk(device.gd); if (device.queue) blk_cleanup_queue(device.queue); if (device.data) vfree(device.data); unregister_blkdev(major, name); printk(kern_warning "Driver %s removido\n", name); module_init(start); module_exit(stop); Falta descrever a implementação da função que atende os pedidos de E/S. Esta função consiste na implementação mais simples. Não são tomadas em consideração características do dispositivo físico que permitiriam optimizar a leitura de sectores, tal como a ordenação de um conjunto de pedidos de E/S por número de sectores para aumentar a eficiência no acesso aos sectores do disco. static void ramdsk_request(request_queue_t *q) { struct request *req; while ((req = elv_next_request(q))!= NULL) { if (! blk_fs_request(req)) { printk (KERN_NOTICE "Skip non-fs request\n"); end_request(req, 0); continue; ramdsk_transfer(&device, req->sector, req->current_nr_sectors, req->buffer, rq_data_dir(req)); end_request(req, 1); PIN T06-7/16

8 Esta função retira os pedidos da fila e trata-os um a um até que não haja mais pedidos, com a função: struct request *elv_next_request(request_queue_t *queue); que retorna NULL se a fila estiver vazia. Os pedidos só serão atendidos se forem do tipo que implicam transferência de dados isto é os pedidos cuja seguinte função retorna um valor não nulo: int blk_fs_request(struct request *req); Poderão ser também pedidos de diagnostico de baixo nível. Neste caso são descartados com: void end_request(struct request *req, int success); Repare-se que estas funções não retiram os pedidos da fila. A primeira retorna o pedido mas deixa-o na fila a última marca-o como terminado para que o kernel o remova da fila. A transferência de dados é efectuada chamando a seguinte função auxiliar: static void ramdsk_transfer(struct ramdsk_dev *dev, unsigned long sector, unsigned long nsect, char *buffer, int write) { unsigned long offset = sector*secsize; unsigned long nbytes = nsect*secsize; if ((offset + nbytes) > dev->size) { printk (KERN_NOTICE "Fora do limite do disco (%ld %ld)\n", offset, nbytes); return; if (write) memcpy(dev->data + offset, buffer, nbytes); else memcpy(buffer, dev->data + offset, nbytes); Esta função recebe como argumentos o descriptor do dispositivo, o primeiro sector a transferir, o número de sectores consecutivos a transferor, o endereço do buffer do processo que pediu a transferência, e o sentido da transferência. Repare-se que neste caso o endereço do buffer passado pode ser directamente dereferenciado, pois aponta uma zona de memória virtual do kernel. Inicialmente a função converte sectores para bytes para poder indexar o array que implementa o disco virtual. Se o comprimento do pedido exceder o limite do disco virtual, o pedido não é efectuado terminando a função e sendo marcado para remoção na função ramdsk_request ( ). A transferência é efectuada usando a função memcpy (dst, src, size), pois tanto o buffer do processo, como o disco virtual encontram-se na memória virtual do kernel Abertura e encerramento do driver O dispositivo é aberto quando montado e feco quando desmontado. No entanto alguns utilitários no espaço de utilizador abrem o periférico quando se iniciam e fecham quando terminam. Neste caso de disco virtual simples, não são necessárias implementar mas num periférico real poderiam ter de inicializar o periférico fechando ou abrindo a porta para remover o suporte ou rodar o disco. PIN T06-8/16

9 Na simulação da remoção do suporte serão utilizadas para esse efeito de modo que serão descritas nessa secção IOCTL No caso dos dispositivos de bloco, o suporte genérico para este tipo de dispositivos, intercepta e trata grande parte dos pedidos IOCTL, de modo que a implementação desta função costuma prever poucos tipos de pedidos. Para este driver só vai implementar o pedido que retorna a geometria do disco virtual, para que programas como o fdisk possam ser usados, no entanto como já foi referido ao nível do kernel, e os novos aplicativos acedem aos sectores do disco segundo o modo LBA. static int ramdsk_ioctl (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) { struct hd_geometry geo; switch(cmd) { case HDIO_GETGEO: geo.cylinders = geo.heads = CYL; HEADS; geo.sectors = SECTRACK; geo.start = 0; //Start LBA sector of disk or partition: //hda = 0, hda1 = 63,... //(part 0 is on 2º track so start=sectrack) if (copy_to_user((void*) arg, &geo, sizeof(geo))) return -EFAULT; else return 0; return -ENOTTY; /* commando não conhecido */ Numa instância da estrutura HDIO_GETGEO, definida em <linux/hdreg.h> é passada a informação para o processo que a pediu, tendo o inicio do seu buffer sido passado em arg, usando a função copy_to_user ( ) Simulação de suporte removível Para suportar a substituição do suporte é necessário adicionar um serviço que efectue o reconhecimento de remoção do suporte, e outro que habilite o novo disco, respectivamente: static int ramdsk_media_changed(struct gendisk *gd); static int ramdsk_revalidate(struct gendisk *gd); static struct block_device_operations fops = {.owner = THIS_MODULE,.open = ramdsk_open,.release = ramdsk_release,.ioctl = ramdsk_ioctl,.media_changed = ramdsk_media_changed,.revalidate_disk = ramdsk_revalidate, ; A função seguinte é chamada pela função exportada pelo kernel check_disk_change( ), retornando 1 se o suporte foi substituido ou 0, caso contrário, isto é retorna o estado da variável device.media_change. Numa implementação com um dispositivo real poderá ser necessário verificar os registos do controlador. int ramdsk_media_changed(struct gendisk *gd) { return device.media_change; PIN T06-9/16

10 A próxima função é chamada pelo kernel sempre que é inserido um novo suporte, ie. um novo disco. int ramdsk_revalidate(struct gendisk *gd) { if (device.media_change) { memset (device.data, 0, device.size); device.media_change = 0; return 0; No caso deste driver limpa o array que constituí o disco virtual, colocando 0 em todos os bytes. Coloca também 0 no valor da bandeira device.media_change de modo a indicar que o novo suporte já foi inserido. Como se verá mais adiante, é garantido que o disco só pode ser removido quando ninguém estiver a utilizá-lo. Assim, na abertura do dispositivo, e se não há utilizadores é pedido ao kernel que verifique se o disco foi substituido com check_disk_change ( ): static int ramdsk_open(struct inode *inode, struct file *filp) { spin_lock(&device.lock); if (! device.users) check_disk_change(inode->i_bdev); device.users++; spin_unlock(&device.lock); return 0; A função check_disk_change ( ), executa o serviço media_changed, ie. a função ramdsk_media_change ( ), que retorna o valor da variável device.media_change. Se o resultado for não nulo chama ramdsk_revalidate ( ) para revalidar o novo disco, ie. efectuar as operações necessárias para que um novo disco fique utilizável. No caso deste driver, como já foi visto, apenas limpa o array que implementa o disco virtual. Num disco real poderá efectuar alguma operação para, por exemplo, reconhecer o sistema de ficheiros, a partir do MBR. A função ramdsk_open() incrementa ainda o contador de utilizadores correntes device.users. Ao fechar o dispositivo, deverá ser decrementado este contador: static int ramdsk_release(struct inode *inode, struct file *filp) { spin_lock(&device.lock); device.users--; spin_unlock(&device.lock); return 0; Convém referir que a operação de montagem implica a abertura do dispositivo e a desmontagem o fecho do dispositivo. Já programas na área de utilizador, como por exemplo cfdisk, abrem o dispositivo quando se iniciam e fecham quando terminam. Por outro lado, será possível que mais que um programa aceda concorrentemente ao dispositivo, como é normal no acesso a discos num sistema multi-tarefa e/ou multi-utilizador. No caso dos drivers para dispositivo de carácter apresentados nos capítulos anteriores, as operações de open e release foram programadas para que apenas um utilizador pudesse aceder ao dispositivo ao mesmo tempo. Tal não é obrigatório para todos os dispositivos, poderá ser no entanto conveniente dependendo do caso. PIN T06-10/16

11 De qualquer modo a técnica apresentada nesta capítulo para permitir acesso concorrente ao dispositivo /dev/ramdsk, poder-se-á também aplicar a drivers para outro tipo de dispositivos. Falta apenas definir a função que permite simular a remoção do disco: void ramdsk_chgdisk(unsigned long arg) { //arg necessário apenas para timer spin_lock(&device.lock); // Se há utilizadores ou o dispositivo não existe, // não pode remover o disco if (device.users!device.data) printk (KERN_WARNING "%s: Dispositivo não existe ou em uso\n", name); else device.media_change = 1; //signal media_change spin_unlock(&device.lock); Como já foi referido Esta função apenas assinala na variável device.media_change a substituição do disco. No entanto tal só é efectuado se nenhum utilizador estiver a aceder ao disco. Este comportamento é visível em Linux se se tentar ejectar um CD que esteja montado. Para simular a substituição do disco, esta função terá de ser activada. Poderá ser através de um comando de IOCTL, ou quando um timer chegar a fim da contagem. Para implementar o primeiro método basta adicionar um caso ao switch do serviço ioctl para que chama-me a função: static int ramdsk_ioctl (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) { switch(cmd) { //... case DISK_SUBSTITUTE: ramdsk_chgdisk(0); return 0; //... return -ENOTTY; /* commando não conhecido */ e implementar um programa no espaço de utilizador que peça a execução deste IOCTL. A implementação do segundo método, usando um timer, pode ser consultada no apêndice B. 6.2 Bibliografia Corbet, Jonathan, Alessandro Rubini e Kroah-Hartman, Greg (2005). Linux Device Drivers 3rd edition, O Reilly, Linux man pages PIN T06-11/16

12 PIN T06-12/16

13 Apêndice A Utilização o driver O driver estará pronto para ser utilizado, fornecendo um disco virtual com aproximadamente 3.2 MBytes, após ser inserido o módulo no kernel. Para dispositivos de bloco o núcleo deve criar automaticamente o nó em /dev com o nome do drivers, por isso basta: insmod ramdsk.ko Pode também ser inserido com o script drvload2, dado no código auxiliar: sh drvload2 b ramdsk 1 start [ Major=<umInteiro>] O driver suporta um parâmetro de linha de comando que se mencionado indica o Major a atribuir. Se for omitido este é atribuído pelo sistema. De qualquer forma o módulo só será inserido no kernel se for existir um Major livre. Será também possível particionar o dispositivo com: ou cfdisk /dev/ramdsk fdisk /dev/ramdsk Criando por exemplo duas partições primárias. Após a criação das partições, o núcleo deve ter criado em /dev para cada uma delas uma entrada, com o Major de ramdsk, e de acordo com o nome indicado em cfdisk. Se tal não suceder os nós podem ser criados com: mknode /dev/ramdsk1 b mknode /dev/ramdsk2 b Cada partição poderá ser formatada em alto nível para um dado sistema de ficheiros, como por exemplo ext2, com: mkfs.ext2 /dev/ramdsk1 v mkfs.ext2 /dev/ramdsk2 v As partições poderão ser montadas e desmontadas com: mount t ext2 /dev/ramdsk2 <mount point> umount <mount point> Se a simulação de suporte removível através de um timer estiver activa, cada um dos comandos terá de ser efectuado antes do prazo de expiração do timer, no exemplo anterior 30 segundos, pois cfdisk fecha o dispositivo ao se encerrar, sendo iniciado o timer. Assim pelo menos uma partição terá de ser montada dentro de 30 segundos, abrindo o dispositivo, para desabilitar o timer. Informação sobre as partições pode ser obtido com o comando: cat /proc/partitions major minor #blocks name hda hda hda hda3 PIN T06-13/16

14 ramdsk ramdsk ramdsk2 é também possível obter informação estatística, sobre o dispositivo com: cat /proc/diskstats Major Minor Name Stats 3 0 hda hda hda hda ramdsk Nos 10 últimos campos encontra-se a informação estatística. Para mais informações consultar as páginas de manual de Linux. Para testar uma partição pode-se copiar um ficheiro para esta, por exemplo: cp /etc/fstab <mount point> Agora ao se listar o directório raiz da partição ter-se-á: ls -F /tmp_mnt fstab lost+found/ Pode-se editar o conteúdo do ficheiro com hexedit visualizando sector a sector os ficheiros ou a própria partição. É também possível copiar conjuntos de count sectores com bs bytes, por exemplo para um ficheiro file.dat, com: dd if=/dev/ramdsk of=file.dat sc=512 count=10 O comando df poderá ser utilizado para indicar o espaço ocupado e livre na partição: df /tmp_mnt df /dev/ramdsk2 ou Filesystem 1k-blocks Used Available Use% Mounted on /dev/ramdsk % /tmp_mnt Agora com o comando dd pode-se verificar o que sucede quando se tenta escrever ou ler dados para além do tamanho do disco virtual: dd if=/dev/ramdskop2 of=file.dat bs=1024 count=3500 Como se tenta-se ler mais blocos de 1024 bytes do que os existentes no disco, a função ramdsk_transfer ( ), cancela o pedido e indica-o no registo do sistema. PIN T06-14/16

15 Apêndice B Simulação de remoção do suporte através de um timer Para simular a substituição do suporte após 30 segundos do periférico ter sido feco pelo último utilizador (e se não for aberto entretanto por outro processo), pode ser usado um timer. A manipulação de timers em Linux pode ser efectuada com o seguinte conjunto de funções definidas em <linux/timer.h>: void add_timer(struct timer_list * timer); int del_timer(struct timer_list * timer); int del_timer_sync(struct timer_list * timer); void init_timer(struct timer_list * timer); A função add_timer ( ) adiciona um evento a uma lista ligada, del_timer ( ) apaga o evento da lista e retorna 0 em caso de erro. Alternativamente pode ser usada a função del timer sync() que espera até que o timer não esteja a correr em nenhum CPU. A estrutura timer_list, que descreve o evento, define-se como: struct timer_list { struct timer_list * next ; struct timer_list * prev ; unsigned long expires ; unsigned long data ; void (* function )(unsigned long ); ; A função init_timer() inicializa os campos next e prev para NULL, tal é necessário para o argumento de add_timer ( ), que após executado preenche estes campos de acordo com a posição do elemento adicionado à lista. O campo expires é a duração do timer em jiffies. Quando o timer expirar, a função apontada por function é chamada com o argumento data. Este argumento pode ser usado para distinguir qual o evento, numa função que trate vários eventos (timers). Um jiffy representa o menor pacote de tempo do kernel. Para converter para segundos multiplicar pela constante HZ. Assim no segundo existem HZ jiffies. Num x86 HZ tipicamente toma o valor 250 de modo que uma interrupção do timer dá-se em cada 4 ms, isto é um jiffy. Para implementar a simulação pode-se começar por seleccionar o período do timer para 30 segundos, logo no inicio do código: // Após 30 seg simula substituição de disco ( media change.) #define CHGDISK_DELAY 30*HZ Agora adicionar a inicialização do timer na função: static int ramdsk_setup(struct ramdsk_dev *dev) { (...) // Inicializa spinlock spin_lock_init(&dev->lock); // Inicia timer para mudar disco init_timer(&dev->timer); dev->timer.data = (unsigned long) dev; //o argumento da função abaixo dev->timer.function = ramdsk_chgdisk; PIN T06-15/16

16 (...) erraloc: errque: errmem: return -1; blk_cleanup_queue(dev->queue); del_timer_sync(&dev->timer); vfree(dev->data); Repare-se que é indicado por dev->timer.function, a função que se executa quando o timer chega a fim da contagem, ie. ramdsk_chgdisk(). Deve ser adicionada também uma linha ao inicio da função de encerramento para libertar o timer: del_timer_sync(&device.timer); A função ramdsk_open() deverá ser alterada para que no caso do dispositivo ser aberto, o timer de 30 segundos ser apagado, de modo a que não seja simulada a substituição do suporte: static int ramdsk_open(struct inode *inode, struct file *filp) { del_timer_sync(&device.timer); spin_lock(&device.lock); if (! device.users) check_disk_change(inode->i_bdev); device.users++; spin_unlock(&device.lock); return 0; Ao fechar o dispositivo, é decrementado o contador de utilizadores do dispositivo. Agora se este for nulo deve ser inicializado o timer, para 30 segundos e adicionado à fila de eventos mantida pelo kernel: static int ramdsk_release(struct inode *inode, struct file *filp) { spin_lock(&device.lock); device.users--; if (!device.users) { device.timer.expires = jiffies + CHGDISK_DELAY; add_timer(&device.timer); spin_unlock(&device.lock); return 0; A variável jiffies é exportada pelo kernel e representa um contador que indica os ticks desde que o computador foi ligado ou desde que atingiu o limite e foi reinicializada a zero. PIN T06-16/16

implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Fernando Ramos, Nuno Neves, Sistemas Operativos, 2014 2015

implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Fernando Ramos, Nuno Neves, Sistemas Operativos, 2014 2015 Sistemas de ficheiros: implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Objetivos da aula Descrever algunsdetalhes daimplementação deumsistema de ficheiros Discutir algoritmos

Leia mais

Entradas/Saídas. Programação por espera activa Programação por interrupções

Entradas/Saídas. Programação por espera activa Programação por interrupções Entradas/Saídas Programação por espera activa Programação por interrupções Programação por espera activa 1. O programa lê o estado do periférico: CPU pede ao controlador (IN) o valor no registo ESTADO

Leia mais

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre Cap. 02 Fundamentos de Linguagens Sumário : Linguagem, alfabeto e gramática

Leia mais

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Estruturas de Sistemas Operacionais Um sistema operacional fornece o ambiente no qual os programas são executados. Internamente,

Leia mais

Tipo de Dados em Linguagem C

Tipo de Dados em Linguagem C Tipo de Dados em Linguagem C Principais tipos de dados em C int : tipo de dados inteiros (exemplo: 1, -3, 100, -9, 18, etc.) float : tipo de dados reais (exemplo: 1.33, 3.14, 2.00, -9.0, 1.8, etc.) Ocupa

Leia mais

Trabalho 3: Agenda de Tarefas

Trabalho 3: Agenda de Tarefas INF 1620 Estruturas de Dados Semestre 08.2 Trabalho 3: Agenda de Tarefas O objetivo deste trabalho é a implementação de um conjunto de funções para a manipulação de uma agenda de tarefas diárias, de forma

Leia mais

Métodos de Sincronização do Kernel

Métodos de Sincronização do Kernel Métodos de Sincronização do Kernel Linux Kernel Development Second Edition By Robert Love Tiago Souza Azevedo Operações Atômicas Operações atômicas são instruções que executam atomicamente sem interrupção.

Leia mais

Linguagem C Tipos de Dados. void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador

Linguagem C Tipos de Dados. void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador Linguagem C Tipos de Dados void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador Funções void void pode ser usado em lugar de um tipo, para indicar a ausência de valor

Leia mais

REDES INTEGRADAS DE TELECOMUNICAÇÕES II 2011 / 2012

REDES INTEGRADAS DE TELECOMUNICAÇÕES II 2011 / 2012 Departamento de Engenharia Electrotécnica REDES INTEGRADAS DE TELECOMUNICAÇÕES II 2011 / 2012 4º ano 8º semestre 2º Trabalho prático: Serviço de distribuição de vídeo com CORBA e JMF http://tele1.dee.fct.unl.pt

Leia mais

Processos. Paulo Sérgio Almeida 2005/2006. Grupo de Sistemas Distribuídos Departamento de Informática Universidade do Minho

Processos. Paulo Sérgio Almeida 2005/2006. Grupo de Sistemas Distribuídos Departamento de Informática Universidade do Minho Paulo Sérgio Almeida Grupo de Sistemas Distribuídos Departamento de Informática Universidade do Minho 2005/2006 Conceito de processo Operações sobre processos Conceito de processo Conceito de processo

Leia mais

Universidade do Algarve Faculdade de Ciências e Tecnologia Área Departamental de Engenharia Electrónica e Computação

Universidade do Algarve Faculdade de Ciências e Tecnologia Área Departamental de Engenharia Electrónica e Computação Universidade do Algarve Faculdade de Ciências e Tecnologia Área Departamental de Engenharia Electrónica e Computação Periféricos e Interfaces 2003/2004 Cursos de Informática e Ensino de Informática Exame

Leia mais

Algoritmos e Programação

Algoritmos e Programação Universidade Federal do Vale do São Francisco Curso de Engenharia da Produção / Elétrica Algoritmos e Programação Parte 05 Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti

Leia mais

Trabalho Prático Nº2 Escrita e Leitura em Portos IO

Trabalho Prático Nº2 Escrita e Leitura em Portos IO Trabalho Prático Nº2 Escrita e Leitura em Portos IO 1. OBJECTIVOS - Saber efectuar a escrita e leitura em portos de entrada saída num PC num com operativo DOS e Windows. 2. INTRODUÇÃO Para este trabalho

Leia mais

Catálogo Nacional de Compras Públicas. Manual de Fornecedores

Catálogo Nacional de Compras Públicas. Manual de Fornecedores 10 de Julho de 2009 Índice 1. Introdução... 3 1.1. Objectivo... 3 2. Fornecedor... 4 2.1. AQs/CPAs... 4 2.2. Contratos... 4 2.3. Grupos AQ/CPA... 5 3. Carregamento e Actualização do Catálogo... 7 3.1.

Leia mais

LINGUAGEM C. Estrutura básica de um programa

LINGUAGEM C. Estrutura básica de um programa LINGUAGEM C Estrutura básica de um programa Um programa em linguagem C é constituído por uma sequência de funções (módulos) que em conjunto irão permitir resolver o problema proposto. Estas funções contêm

Leia mais

SOP - TADS Sistemas de Arquivos Cap 4 Tanenmbaum

SOP - TADS Sistemas de Arquivos Cap 4 Tanenmbaum SOP - TADS Sistemas de Arquivos Cap 4 Tanenmbaum Prof. Ricardo José Pfitscher dcc2rjp@joinville.udesc.br Material cedido por: Prof. Rafael Rodrigues Obelheiro Prof. Maurício Aronne Pillon Cronograma Introdução

Leia mais

Sistema de Entrada/Saída

Sistema de Entrada/Saída Conteúdo Ficheiros (jpo@di.uminho.pt) Grupo de Sistemas Distribuídos Departamento de Informática Escola de Engenharia Universidade do Minho Sistemas Operativos 2006-2007 2 Descritores de ficheiros Descritores

Leia mais

8. Perguntas e Respostas

8. Perguntas e Respostas Arquimedes Manual do Utilizador 185 8. Perguntas e Respostas 8.1. Aparência Para conservar a disposição na qual estão expostas as B.D. no ecrã e para que em posteriores sessões de trabalho tenham a mesma

Leia mais

Programação de Sistemas

Programação de Sistemas Programação de Sistemas Sistemas de ficheiros ext e iso9660 Programação de Sistemas Sistema de ficheiros : 1/21 Sistema de ficheiros ext (1) As estruturas de dados usadas nas partições do Unix muito diversificadas

Leia mais

Algoritmos e Programação Estruturada

Algoritmos e Programação Estruturada Algoritmos e Programação Estruturada Virgínia M. Cardoso Linguagem C Criada por Dennis M. Ritchie e Ken Thompson no Laboratório Bell em 1972. A Linguagem C foi baseada na Linguagem B criada por Thompson.

Leia mais

Processos. Estados principais de um Processo: Contexto de um Processo. Nível de um Processo. http://www.dei.isep.ipp.pt/~orlando/so2/processos.

Processos. Estados principais de um Processo: Contexto de um Processo. Nível de um Processo. http://www.dei.isep.ipp.pt/~orlando/so2/processos. Página 1 de 5 Processos Consiste num método de descrição das actividades de um sistema operativo; Todo o software incluído no sistema operativo é organizado num grupo de programas executáveis. Cada um

Leia mais

Boot Camp Manual de Instalação e Configuração

Boot Camp Manual de Instalação e Configuração Boot Camp Manual de Instalação e Configuração Conteúdo 3 Introdução 3 Do que necessita 4 Descrição geral da instalação 4 Passo 1: Procurar actualizações 4 Passo 2: Preparar o computador Mac para o Windows

Leia mais

Manual do InCD Reader

Manual do InCD Reader Manual do InCD Reader Nero AG Informações sobre direitos de autor e marcas comerciais Este manual e todo o respectivo conteúdo estão protegidos por direitos de autor e são propriedade da Nero AG. Todos

Leia mais

Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger

Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger O controle da entrada e saída (E/S ou I/O, input/output) de dados dos dispositivos é uma das funções principais de um sistema operacional.

Leia mais

Programação de Computadores I. Linguagem C Arquivos

Programação de Computadores I. Linguagem C Arquivos Linguagem C Arquivos Prof. Edwar Saliba Júnior Novembro de 2011 Unidade 12 Arquivos 1 Trabalhando com Arquivos Um arquivo em Linguagem C pode representar diversas coisas, como: arquivos em disco, uma impressora,

Leia mais

Módulo 10. Medição do Desempenho

Módulo 10. Medição do Desempenho Módulo 10 Medição do Desempenho 1. Introdução Pretende-se com esta aula prática que os alunos se familiarizem com o processo de profiling de programas e que avaliem o impacto no desempenho de um programa

Leia mais

Capítulo 6. Gerenciamento de Arquivos. 6.1 Arquivos 6.2 Diretórios 6.3 Implementação (6.3.1 a 6.3.6) 6.4 Exemplos

Capítulo 6. Gerenciamento de Arquivos. 6.1 Arquivos 6.2 Diretórios 6.3 Implementação (6.3.1 a 6.3.6) 6.4 Exemplos Capítulo 6 Gerenciamento de Arquivos 6.1 Arquivos 6.2 Diretórios 6.3 Implementação (6.3.1 a 6.3.6) 6.4 Exemplos 1 Armazenamento de longo prazo 1. Deve guardar grandes volumes de dados. 2. Informação armazenada

Leia mais

Manual técnico da Registadora SAM4S SPS-530. Versão: 1.0.1 Nº de actualizações: 1

Manual técnico da Registadora SAM4S SPS-530. Versão: 1.0.1 Nº de actualizações: 1 Manual Técnico da Registadora SAM4S SPS-530 Manual técnico da Registadora SAM4S SPS-530 Versão: 1.0.1 Nº de actualizações: 1 2 Índice 3 Configuração de dispositivos... 4 SAM4S Mux... 6 SAM4S Gaveta...

Leia mais

Sistemas Operativos I

Sistemas Operativos I Arquitectura de um Computador Maria João Viamonte / Luis Lino Ferreira Fevereiro de 2006 Sumário Arquitectura de um Computador Estrutura de I/O Estrutura de Armazenamento Hierarquia de Armazenamento Protecção

Leia mais

Gestor de Processos Núcleo do Sistema Operativo

Gestor de Processos Núcleo do Sistema Operativo Alínea do 1º teste 2015/16: Considere a linha: for (i=0;i

Leia mais

Programação. MEAer. Bertinho Andrade da Costa. Instituto Superior Técnico. Introdução ao Pré-Processador. 2011/2012 1º Semestre

Programação. MEAer. Bertinho Andrade da Costa. Instituto Superior Técnico. Introdução ao Pré-Processador. 2011/2012 1º Semestre Programação MEAer Bertinho Andrade da Costa 2011/2012 1º Semestre Instituto Superior Técnico Introdução ao Pré-Processador Programação 2011/2012 DEEC-IST Introdução ao Pré-Processador 1 Sumário Introdução

Leia mais

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica Introdução a Programação Ponteiros e Strings, Alocação Dinâmica Tópicos da Aula Hoje aprenderemos a relação entre ponteiros e strings Ponteiros para strings X Vetores de Caracteres Vetores de ponteiros

Leia mais

Manual do Gestor da Informação do Sistema

Manual do Gestor da Informação do Sistema Faculdade de Engenharia da Universidade do Porto Licenciatura Informática e Computação Laboratório de Informática Avançada Automatização de Horários Manual do Gestor da Informação do Sistema João Braga

Leia mais

INSTALAÇÃO UBUNTU NUM INSTANTE

INSTALAÇÃO UBUNTU NUM INSTANTE INSTALAÇÃO UBUNTU NUM INSTANTE Este é um manual ilustrado quick and dirty para quem quer instalar o Ubuntu na sua máquina o mais rápido possível, sem se perder com grandes detalhes. O objectivo é providenciar

Leia mais

INTRODUÇÃO À LINGUAGEM C++

INTRODUÇÃO À LINGUAGEM C++ INTRODUÇÃO À LINGUAGEM C++ 1 - VARIÁVEIS Variáveis espaço de memória reservado para armazenar tipos de dados, com um nome para referenciar seu conteúdo. Observações importantes Todas as variáveis devem

Leia mais

Capítulo 8. CICLOS. Tabela 8.1 Programa8a.f90.

Capítulo 8. CICLOS. Tabela 8.1 Programa8a.f90. Capítulo 8. CICLOS OBJETIVOS DO CAPÍTULO Conceito de ciclo Comandos do FORTRAN: DO END DO, EXIT 8.1 programa8a.f90 Para inicializar as atividades deste capítulo, deve-se executar: 1) Para acessar o programa

Leia mais

P r o g r a m a ç ã o d e C o m p u t a d o r e s 1 o S e m - 2 0 1 3 P r o f. A n d r é A m a r a n t e L u i z L A B 5 tag %2d while printf PE1:

P r o g r a m a ç ã o d e C o m p u t a d o r e s 1 o S e m - 2 0 1 3 P r o f. A n d r é A m a r a n t e L u i z L A B 5 tag %2d while printf PE1: Inteligência É a faculdade de criar objetos artificiais, especialmente ferramentas para fazer ferramentas. Henri Bergson. WHILE Além dos comandos if-else e switch, o controle de fluxo de um programa pode

Leia mais

CONCEITOS BÁSICOS DE UM SISTEMA OPERATIVO

CONCEITOS BÁSICOS DE UM SISTEMA OPERATIVO 4 CONCEITOS BÁSICOS DE UM SISTEMA OPERATIVO CONCEITOS BÁSICOS MS-DOS MICROSOFT DISK OPERATION SYSTEM INSTALAÇÃO E CONFIGURAÇÃO DE UM SISTEMA OPERATIVO LIGAÇÕES À INTERNET O que é um sistema operativo?

Leia mais

Manual do Teclado de Satisfação Online WebOpinião

Manual do Teclado de Satisfação Online WebOpinião Manual do Teclado de Satisfação Online WebOpinião Versão 1.2.3 27 de novembro de 2015 Departamento de Engenharia de Produto (DENP) SEAT Sistemas Eletrônicos de Atendimento 1. Introdução O Teclado de Satisfação

Leia mais

Estrutura Interna do KernelUNIX Sistema O. Estrutura Interna de Arquivos (1) Estrutura Seqüência. User application. Standard Unix libraries

Estrutura Interna do KernelUNIX Sistema O. Estrutura Interna de Arquivos (1) Estrutura Seqüência. User application. Standard Unix libraries Sistemas de Arquivos (Aula 23) Funções Profa. Gerência Sistema de um processos SO Patrícia D. CostaLPRM/DI/UFES de de de Proteção memória I/O Arquivos Necessidade 2 Sistemas Operacionais 2008/1 Grandes

Leia mais

Visão Artificial Para a Indústria. Manual do Utilizador

Visão Artificial Para a Indústria. Manual do Utilizador Visão Artificial Para a Indústria Manual do Utilizador Luis Fonseca Carvalho de Matos ( luis.matos@ua.pt ) Julho de 2007 Índice de conteúdos 1. Apresentação......1 1.Conceito de Funcionamento......1 2.

Leia mais

7. Gestão de ficheiros em X Window. 7.1. O Konqueror

7. Gestão de ficheiros em X Window. 7.1. O Konqueror 7. Gestão de ficheiros em X Window 7.1. O Konqueror 1 O Konqueror O ambiente gráfico KDE do Linux possuí um programa, denominado Konqueror (Figura 1.95), que além de ser um navegador Web, é também um gestor

Leia mais

Busca em Memória. Secundária

Busca em Memória. Secundária UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA Busca em Memória Secundária e Gomes da Costa yandre@din.uem.br 1 Busca de um item em uma massa de dados que não cabe na memória principal; Procura-se

Leia mais

Akropole Catequista. Todos os Ficheiros no Akropole Catequista trabalham com uma simples barra de edição, com 4 botões:

Akropole Catequista. Todos os Ficheiros no Akropole Catequista trabalham com uma simples barra de edição, com 4 botões: Akropole Catequista O Akropole Catequista em três tempos... Este texto é um pequeno manual de introdução ao Akropole Catequista. Umas das características deste programa é o facto deste não necessitar de

Leia mais

Algoritmos e Estruturas de Dados I 01/2013. Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo

Algoritmos e Estruturas de Dados I 01/2013. Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo Algoritmos e Estruturas de Dados I 01/2013 Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo Problema 1 Suponha que soma (+) e subtração (-) são as únicas operações disponíveis em

Leia mais

Módulo de registo de eventos. guia de utilização

Módulo de registo de eventos. guia de utilização Módulo de registo de eventos guia de utilização versão 2011.09 Setembro 2011 Ficha técnica Título Biblio.net registo de eventos : guia de utilização Autor António Manuel Freire Co-Autor Licínia Santos

Leia mais

1 Funções básicas de implementação de arquivos

1 Funções básicas de implementação de arquivos 1 Funções básicas de implementação de arquivos 1.1 Definindo registros Depois de um objeto do mundo real ter sido modelado, ou seja, após seus atributos importantes (e relevantes) terem sido identificados,

Leia mais

UNIDADE 2: Sistema Operativo em Ambiente Gráfico

UNIDADE 2: Sistema Operativo em Ambiente Gráfico UNIDADE 2: Sistema Operativo em Ambiente Gráfico Ambiente de trabalho Configurações Acessórios O Sistema Operativo (SO) é o conjunto de programas fundamentais que permitem que o computador funcione e comunique

Leia mais

FACENS Engenharia Mecatrônica Sistemas de Computação Professor Machado. Memória Armazenamento Sistema de Arquivos

FACENS Engenharia Mecatrônica Sistemas de Computação Professor Machado. Memória Armazenamento Sistema de Arquivos FACENS Engenharia Mecatrônica Sistemas de Computação Professor Machado Memória Armazenamento Sistema de Arquivos 1 Hierarquia de Memórias 2 Partes físicas associadas à memória Memória RAM Memória ROM Cache

Leia mais

Apontamentos do livro de AI Linux. 1.5 Modo texto e modo gráfico

Apontamentos do livro de AI Linux. 1.5 Modo texto e modo gráfico Apontamentos do livro de AI Linux 1.5 Modo texto e modo gráfico 1 Modo texto e modo gráfico O sistema operativo Linux possui duas formas de acesso: modo texto e modo gráfico No modo gráfico, o utilizador

Leia mais

Funções de um SO. Gerência de processos Gerência de memória Gerência de Arquivos Gerência de I/O Sistema de Proteção

Funções de um SO. Gerência de processos Gerência de memória Gerência de Arquivos Gerência de I/O Sistema de Proteção Sistemas de Arquivos Funções de um SO Gerência de processos Gerência de memória Gerência de Arquivos Gerência de I/O Sistema de Proteção 2 Sistemas Operacionais Necessidade de Armazenamento Grandes quantidades

Leia mais

Linguagem C. TGSI Lógica de Programação / Linguagem C Prof. Marcos Roberto

Linguagem C. TGSI Lógica de Programação / Linguagem C Prof. Marcos Roberto Linguagem C O C nasceu na década de 70. Seu inventor, Dennis Ritchie, implementou-o pela primeira vez usando um DEC PDP-11 rodando o sistema operacional UNIX. O C é derivado de uma outra linguagem: o B,

Leia mais

Base de dados I. Uma base de dados é um simples repositório de informação relacionado com um determinado assunto ou finalidade

Base de dados I. Uma base de dados é um simples repositório de informação relacionado com um determinado assunto ou finalidade Base de dados I O que é? Uma base de dados é um simples repositório de informação relacionado com um determinado assunto ou finalidade Para que serve? Serve para gerir vastos conjuntos de informação de

Leia mais

Gestor de Janelas Gnome

Gestor de Janelas Gnome 6 3 5 Gestor de Janelas Gnome Nesta secção será explicado o funcionamento de um dos ambientes gráficos disponíveis no seu Linux Caixa Mágica, o Gnome. Na figura 5.1 apresentamos o GDM, o sistema gráfico

Leia mais

Grupo I [4v] executaprograma();

Grupo I [4v] executaprograma(); Número: Nome: LEIC/LERC 2012/13-1º Exame de Sistemas Operativos 15/Janeiro/2013 Identifique todas as folhas. Responda no enunciado, apenas no espaço fornecido. Justifique todas as respostas. Duração: 2h30m

Leia mais

Laboratório de Hardware

Laboratório de Hardware Laboratório de Hardware Prof. Marcel Santos Responsável por implementar em software um recurso que não existe no hardware. O hardware oferece simplesmente um grande conjunto de bytes contíguos, e a tarefa

Leia mais

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia O Sistema Operacional que você usa é multitasking? Por multitasking, entende-se a capacidade do SO de ter mais de um processos em execução ao mesmo tempo. É claro que, num dado instante, o número de processos

Leia mais

XPontos. Manual de Instruções

XPontos. Manual de Instruções XPontos Manual de Instruções 2 XPontos LIGAR O EQUIPAMENTO Na parte inferior do equipamento, ligar o cabo de alimentação de acordo com a ilustração. COLOCAR O ROLO PARA IMPRESSÃO Pressionar o botão OPEN

Leia mais

1. Verificar se a Microsoft.NET Framework 2.0 está instalada. Se não estiver, efectuar o download a partir do link e instalar:

1. Verificar se a Microsoft.NET Framework 2.0 está instalada. Se não estiver, efectuar o download a partir do link e instalar: SigmaDoc INSTALAÇÃO/ACTUALIZAÇÃO Para efectuar a actualização, proceder do seguinte modo: 1. Verificar se a Microsoft.NET Framework 2.0 está instalada. Se não estiver, efectuar o download a partir do link

Leia mais

O Manual do ssc. Peter H. Grasch

O Manual do ssc. Peter H. Grasch Peter H. Grasch 2 Conteúdo 1 Introdução 6 2 Usar o ssc 7 2.1 Gerir os utilizadores.................................... 7 2.1.1 Adicionar um utilizador.............................. 8 2.1.1.1 Associar-se

Leia mais

Introdução aos Sistemas Informáticos

Introdução aos Sistemas Informáticos I 1. Veja o conteúdo do disco rígido abrindo O meu computador, mude de vistas e comente. 2. Se lhe for possível, mude a hora e a data do sistema através do Painel de Controlo para a meia noite do dia 1

Leia mais

Periféricos e Interfaces Ano lectivo 2003/2004 Docente: Ana Paula Costa. Aula Teórica 11

Periféricos e Interfaces Ano lectivo 2003/2004 Docente: Ana Paula Costa. Aula Teórica 11 Sumário: O disco rígido e a disquete estrutura física. Como os dados são armazenados fisicamente. Como o MS-DOS organiza o disco. O registo de boot. Aula Teórica 11 Leitura Recomendada: Capítulos 28 e

Leia mais

Acessos Convergentes. Manual de Configuração e Utilização

Acessos Convergentes. Manual de Configuração e Utilização Índice 1 Introdução... 4 1.1 Âmbito do Documento... 4 1.2 Acesso... 5 1.3 Autenticação... 5 2 Cliente... 6 2.1 Reencaminhamentos ou redireccionamentos... 6 2.1.1 Novo Plano de Redireccionamento... Error!

Leia mais

Boot Camp Manual de Instalação e Configuração

Boot Camp Manual de Instalação e Configuração Boot Camp Manual de Instalação e Configuração Índice 3 Introdução 4 Descrição geral da instalação 4 Passo 1: Verificar se existem actualizações 4 Passo 2: Preparar o computador Mac para o Windows 4 Passo

Leia mais

Programação: Tipos, Variáveis e Expressões

Programação: Tipos, Variáveis e Expressões Programação de Computadores I Aula 05 Programação: Tipos, Variáveis e Expressões José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/56 Valores Valor é uma entidade

Leia mais

Capítulo 2. VARIÁVEIS DO TIPO INTEIRO

Capítulo 2. VARIÁVEIS DO TIPO INTEIRO Capítulo 2. VARIÁVEIS DO TIPO INTEIRO OBJETIVOS DO CAPÍTULO Conceitos de: variáveis do tipo inteiro, atribuição, avisos e erros de compilação, erros de execução, comentários dentro do programa-fonte Operadores

Leia mais

GABARITO COMENTADO SISTEMAS OPERACIONAIS. PROF. Cláudio de C. Monteiro, Evanderson S. de Almeida, Vinícius de M. Rios

GABARITO COMENTADO SISTEMAS OPERACIONAIS. PROF. Cláudio de C. Monteiro, Evanderson S. de Almeida, Vinícius de M. Rios CURSO - TADS TURMA 2008.1 2 PERÍODO 3 MÓDULO AVALIAÇÃO MP2 DATA 02/10/2008 SISTEMAS OPERACIONAIS 2008/2 GABARITO COMENTADO SISTEMAS OPERACIONAIS PROF. Cláudio de C. Monteiro, Evanderson S. de Almeida,

Leia mais

fx-82ms fx-83ms fx-85ms fx-270ms fx-300ms fx-350ms

fx-82ms fx-83ms fx-85ms fx-270ms fx-300ms fx-350ms O uso da Calculadora Científica (Casio fx) fx-82ms fx-83ms fx-85ms fx-270ms fx-300ms fx-350ms Prof. Ms. Renato Francisco Merli 2013 1 Sumário 1. Antes de Começar... 2 2. Cálculos Básicos... 8 3. Cálculos

Leia mais

Gestor de ligações Manual do Utilizador

Gestor de ligações Manual do Utilizador Gestor de ligações Manual do Utilizador 1.0ª Edição PT 2010 Nokia. Todos os direitos reservados. Nokia, Nokia Connecting People e o logótipo Nokia Original Accessories são marcas comerciais ou marcas registadas

Leia mais

Apresentação do VisualA

Apresentação do VisualA Propriedade Intelectual: Distribuidor Exclusivo: M. B. Santos Soares, Lda. Cruzinfor Rua João Andersen, 90 1º Dtº Rua 5 de Outubro, 3 B - Paivas 4250-242 PORTO 2840 SEIXAL Tel.: 22.8329107 Tel.: 21.2249533

Leia mais

Curriculum DeGóis Guia de preenchimento do Curriculum Vitae (Informação mínima necessária)

Curriculum DeGóis Guia de preenchimento do Curriculum Vitae (Informação mínima necessária) Curriculum DeGóis Guia de preenchimento do Curriculum Vitae (Informação mínima necessária) http://curriculum.degois.pt Março de 2012 Versão 1.5 1 Introdução O objectivo deste guia é auxiliar o utilizador

Leia mais

Acessando o SVN. Soluções em Vendas Ninfa 2

Acessando o SVN. Soluções em Vendas Ninfa 2 Acessando o SVN Para acessar o SVN é necessário um código de usuário e senha, o código de usuário do SVN é o código de cadastro da sua representação na Ninfa, a senha no primeiro acesso é o mesmo código,

Leia mais

Tutorial :: Introdução ao VHDL em ambiente Design Works

Tutorial :: Introdução ao VHDL em ambiente Design Works Tutorial :: Introdução ao VHDL em ambiente Design Works Objectivos Familiarização com a linguagem VHDL Familiarização com a construção de modelos em VHDL utilizando o software DesignWorks. Trabalho a realizar

Leia mais

Nível da Arquitetura do Conjunto das Instruções

Nível da Arquitetura do Conjunto das Instruções Nível da Arquitetura do Conjunto das Instruções (Aula 13) Fluxo de Controle Fluxo Seqüencial de Controle e Desvios (1) Fluxo de Controle: É a seqüência na qual instruções são dinamicamente executadas Isto

Leia mais

Linux Caixa Mágica 14. Como Gravar um Live CD. http://www.caixamagica.pt. Julho 2009 Versão 1.1

Linux Caixa Mágica 14. Como Gravar um Live CD. http://www.caixamagica.pt. Julho 2009 Versão 1.1 Linux Caixa Mágica 14 Como Gravar um Live CD http://www.caixamagica.pt Julho 2009 Versão 1.1 Índice 1. Introdução...3 2. Gravar um Live CD em sistemas Linux...3 2.1. Verificação da Integridade da Imagem

Leia mais

GESTÃO DE INFORMAÇÃO PESSOAL OUTLOOK (1)

GESTÃO DE INFORMAÇÃO PESSOAL OUTLOOK (1) GESTÃO DE INFORMAÇÃO PESSOAL OUTLOOK (1) MICROSOFT OUTLOOK 2003 - OBJECTIVOS OBJECTIVOS: Enumerar as principais funcionalidades do Outlook; Demonstrar a utilização das ferramentas do correio electrónico;

Leia mais

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo nicolas.trigo@ifsertao-pe.edu.

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo nicolas.trigo@ifsertao-pe.edu. Programação Estruturada Linguagem C Fundamentos da Linguagem Prof. Luis Nícolas de Amorim Trigo nicolas.trigo@ifsertao-pe.edu.br Sumário Estrutura Básica Bibliotecas Básicas Tipos de Dados Básicos Variáveis/Declaração

Leia mais

1 - SISTEMA DE FICHEIROS NO WINDOWS - - - - - - - - - - - -3

1 - SISTEMA DE FICHEIROS NO WINDOWS - - - - - - - - - - - -3 ÍNDICE 1 - SISTEMA DE FICHEIROS NO WINDOWS - - - - - - - - - - - -3 1.1 FAT - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3 1.1.1 - Organização da FAT - - - - - - -

Leia mais

Actualização, Cópias de Segurança e Recuperação de Software

Actualização, Cópias de Segurança e Recuperação de Software Actualização, Cópias de Segurança e Recuperação de Software Manual do utilizador Copyright 2007 Hewlett-Packard Development Company, L.P. Windows é uma marca comercial registada da Microsoft Corporation

Leia mais

INF 1007 Programação II

INF 1007 Programação II INF 1007 Programação II Aula 05 Cadeias de Caracteres Edirlei Soares de Lima Caracteres Caracteres são representados através de códigos numéricos. Tabela de códigos: Define correspondência

Leia mais

DotNetNuke. Gestão de Conteúdos. Módulos - II. Inserção de conteúdos nos módulos. Módulo de Text/HTML. Módulo de Sre-Notícias. Módulo de Sre-Formação

DotNetNuke. Gestão de Conteúdos. Módulos - II. Inserção de conteúdos nos módulos. Módulo de Text/HTML. Módulo de Sre-Notícias. Módulo de Sre-Formação Gestão de Conteúdos DotNetNuke Módulos - II Inserção de conteúdos nos módulos Módulo de Text/HTML Módulo de Sre-Notícias Módulo de Sre-Formação Conteúdos dos módulos Na lição: Módulos-I já foi dito que

Leia mais

Facturação Guia do Utilizador

Facturação Guia do Utilizador Facturação Guia do Utilizador Facturação Como se utiliza 2 1 Como se utiliza Todas as opções do sistema estão acessíveis através do menu: ou do menu: O Menu caracteriza-se pelas seguintes funcionalidades:

Leia mais

SW DE E/S INDEPENDENTE DE DISPOSITIVO

SW DE E/S INDEPENDENTE DE DISPOSITIVO SOFTWARE AO NÍVEL DO USUÁRIO SOFTWARE INDEPENDENTE DE DISPOSITIVOS ACIONADORES DE DISPOSITIVOS (DRIVERS) TRATAMENTO DE INTERRUPÇÕES HARDWARE FUNÇÕES: INTERFACE UNIFORME PARA OS DRIVERS USO DE BUFFERS INFORMAÇÃO

Leia mais

MANUAL DE INSTRUÇÕES

MANUAL DE INSTRUÇÕES NA27 REGI PRO MANUAL DE INSTRUÇÕES Pode agora fazer medições contínuas de ruído, com registo simultâneo de áudio, com um Sonómetro NA27 da RION e um PC DEZEMBRO DE 2011 NA27REGIPRO-001 2011-Adj163-Instrucoes-V01-006-VCR.docx

Leia mais

Início Rápido. Nero BackItUp. Ahead Software AG

Início Rápido. Nero BackItUp. Ahead Software AG Início Rápido Nero BackItUp Ahead Software AG Informações sobre copyright e marcas comerciais O manual do utilizador Nero BackItUp e a totalidade do respectivo conteúdo estão protegidos por copyright e

Leia mais

Exercícios de Revisão Java Básico

Exercícios de Revisão Java Básico Exercícios de Revisão Java Básico (i) Programação básica (estruturada) 1) Faça um programa para calcular o valor das seguintes expressões: S 1 = 1 1 3 2 5 3 7 99... 4 50 S 2 = 21 50 22 49 23 48...250 1

Leia mais

Sistemas de Arquivos NTFS, FAT16, FAT32, EXT2 e EXT3

Sistemas de Arquivos NTFS, FAT16, FAT32, EXT2 e EXT3 Sistemas de Arquivos NTFS, FAT16, FAT32, EXT2 e EXT3 Os sistemas de arquivos é a parte do SO responsável pelo gerenciamento dos arquivos (estrutura, identificação, acesso, utilização, proteção e implementação).

Leia mais

1. SINTAXE DA LINGUAGEM ASSEMBLY

1. SINTAXE DA LINGUAGEM ASSEMBLY 1. SINTAXE DA LINGUAGEM ASSEMBLY Antes de se escrever em assembly, é conveniente construir um fluxograma do programa. Um fluxograma não faz referência à linguagem a utilizar, pelo que pode ser utilizado

Leia mais

Sistemas de Operação Sockets

Sistemas de Operação Sockets Sistemas de Operação Sockets O que é um socket? Uma interface de comunicação entre processos que podem ou não residir na mesma máquina, mas que não precisam estar relacionados. É usado normalmente para

Leia mais

Figura 1: Interface 3G Identech

Figura 1: Interface 3G Identech Sumário 1 INTRODUÇÃO...3 2 INSTALAÇÃO NO WINDOWS XP...5 3 INSTALAÇÃO NO WINDOWS VISTA...12 4 INSTALAÇÃO NO WINDOWS 7...18 5 CADASTRANDO OPERADORA...25 6 CONECTANDO NA INTERNET...27 7 SERVIÇO DE SMS...29

Leia mais

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Estruturas de Sistemas de Computação O sistema operacional precisa garantir a operação correta do sistema de computação. Operação

Leia mais

Passo 3: No diagrama de blocos com o menu de funções aberto (Figura anterior), abra a função express Signal Analysis e escolha Simulate signal.

Passo 3: No diagrama de blocos com o menu de funções aberto (Figura anterior), abra a função express Signal Analysis e escolha Simulate signal. TUTORIAL INTRODUÇÃO AO LABVIEW 8.2 Passo 1: Inicie o Labview. Você verá esta tela: Passo 2: Selecione blank VI (VI é a sigla de VIRTUAL INSTRUMENT). Fazendo isso você terá acesso a área de trabalho, a

Leia mais

PACWEB Módulo de Pesquisa MANUAL DO UTILIZADOR

PACWEB Módulo de Pesquisa MANUAL DO UTILIZADOR MANUAL DO UTILIZADOR Versão 1.3 ÍNDICE 1. INTRODUÇÃO 2 2. INSTALAÇÃO E CONFIGURAÇÃO 3 2.1 INSTALAÇÃO 3 Instalar o Pacweb 3 Alterar o Ficheiro Default.htm 3 Criar um Virtual Directory 3 2.2 CONFIGURAÇÃO

Leia mais

Construindo um Linux Parte 1 - Disk Boot Objetivo: Entender que o Linux é como um LEGO (Pode ser montado).

Construindo um Linux Parte 1 - Disk Boot Objetivo: Entender que o Linux é como um LEGO (Pode ser montado). Construindo um Linux Parte 1 - Disk Boot Objetivo: Entender que o Linux é como um LEGO (Pode ser montado). Os disquetes Linux são úteis em diversas situações, tais como: Testes de um novo kernel; Recuperação

Leia mais

Segurança e recuperação Manual do utilizador

Segurança e recuperação Manual do utilizador Segurança e recuperação Manual do utilizador Copyright 2007-2009 Hewlett-Packard Development Company, L.P. Microsoft é uma marca comercial registada da Microsoft Corporation nos E.U.A. As informações contidas

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais FATEC-PB Professor: Gustavo Wagner gugawag@gmail.com 1 Capítulo 6 Sistemas de Arquivos 6.1 Arquivos 6.2 Diretórios 6.3 Implementação do sistema de arquivos 6.4 Exemplos de sistemas

Leia mais

ARQUITECTURA DE COMPUTADORES CAPÍTULO II AULA X

ARQUITECTURA DE COMPUTADORES CAPÍTULO II AULA X ARQUITECTURA DE COMPUTADORES CAPÍTULO II AULA X Índice Traduzindo e iniciando uma aplicação Compiladores Assembladores Linkers Loaders DLLs Iniciando um programa em Java Após toda a matéria abordada nesta

Leia mais

Unix: Sistema de Arquivos. Geraldo Braz Junior

Unix: Sistema de Arquivos. Geraldo Braz Junior Unix: Sistema de Arquivos Geraldo Braz Junior 2 Arquivos Um arquivo é visto pelo SO apenas como uma seqüência de bytes: nenhuma distinção é feita entre arquivos ASCII, binários, etc.; Muitos programas

Leia mais

Instituto Superior Técnico Licenciatura em Engenharia Informática e de Computadores. Projecto de. Arquitectura de Computadores.

Instituto Superior Técnico Licenciatura em Engenharia Informática e de Computadores. Projecto de. Arquitectura de Computadores. Instituto Superior Técnico Licenciatura em Engenharia Informática e de Computadores Projecto de Arquitectura de Computadores Jogo dos Blocos (variante do Arkanoid) (Versão 1.0) 2008/2009 Índice 1 Objectivo...

Leia mais