A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Sistemas Operacionais Page Cache e Page Writeback Vinicius Faria Culmant Ramos Prof.: Vitor Santos Costa.

Apresentações semelhantes


Apresentação em tema: "Sistemas Operacionais Page Cache e Page Writeback Vinicius Faria Culmant Ramos Prof.: Vitor Santos Costa."— Transcrição da apresentação:

1 Sistemas Operacionais Page Cache e Page Writeback Vinicius Faria Culmant Ramos Prof.: Vitor Santos Costa

2 Introdução Page Cache é, fisicamente, uma página na RAM; Cada página corresponde a vários blocos no disco; O kernel busca informações primeiro no cache para depois buscar no disco.

3 Características Minimizar disk I/O -> Armazenar dados em memória que pode vir a ser utilizado; Acesso ao disco é muito mais lento do que acesso à memória; Páginas acessadas são muito prováveis de serem acessadas em um curto espaço de tempo. Page Cache x86 -> tamanho 4Kb

4 address_space SVR4 utilizava o Page Cache apenas para dados do filesystem; SVR4 Page Cache utilizado é equivalente ao file object (struct vnode); Linux armazena qualquer page-based object, incluindo diferentes tipos de arquivos e mapeamento de memória; Utiliza a estrutura address_space que identifica as páginas no Page Cache;

5 address_space linux/fs.h struct address_space { struct inode *host; /* owning inode */ struct radix_tree_root page_tree; /* radix tree of all pages */ spinlock_t tree_lock; /* page_tree lock */ unsigned int i_mmap_writable; /* VM_SHARED ma count */ struct prio_tree_root i_mmap; /* list of all mappings */ struct list_head i_mmap_nonlinear; /* VM_NONLINEAR ma list */ spinlock_t i_mmap_lock; /* i_mmap lock */ atomic_t truncate_count; /* truncate re count */ unsigned long nrpages; /* total number of pages */ pgoff_t writeback_index; /* writeback start offset */ struct address_space_operations *a_ops; /* operations table */ unsigned long flags; /* gfp_mask and error flags */ struct backing_dev_info *backing_dev_info; /* read-ahead information */ spinlock_t private_lock; /* private lock */ struct list_head private_list; /* private list */ struct address_space *assoc_mapping; /* associated buffers */ };

6 address_space i_nmap -> Árvore de prioridades de todos as mapas de memória, tanto compartilhado quanto privados; address_space está associado a algum objeto do kernel, geralmente é um inode ; *host pode ser NULL se o objeto associado não for um inode, por exemplo uma área de swap; a_ops aponta para a tabela de operações do address_space; Esta tabela está descrita na estrutura address_space_operations;

7 address_space struct address_space_operations { int (*writepage)(struct page *, struct writeback_control *); int (*readpage) (struct file *, struct page *); int (*sync_page) (struct page *); int (*writepages) (struct address_space *, struct writeback_control *); int (*set_page_dirty) (struct page *); int (*readpages) (struct file *, struct address_space *, struct list_head *, unsigned); int (*prepare_write) (struct file *, struct page *, unsigned, unsigned); int (*commit_write) (struct file *, struct page *, unsigned, unsigned); sector_t (*bmap)(struct address_space *, sector_t); int (*invalidatepage) (struct page *, unsigned long); int (*releasepage) (struct page *, int); int (*direct_IO) (int, struct kiocb *, const struct iovec *, loff_t, unsigned long); };

8 read_page() Um dos métodos mais importantes; Page = find_get_page(mapping, index); // Busca a página no page cache Se a página não estiver no cache: struct page *cached_page; int error; cached_page = page_cache_alloc_cold(mapping); if (!cached_page) /* error allocating memory */ error = add_to_page_cache_lru(cached_page, mapping, index, GFP_KERNEL); if (error) /* error adding page to page cache */ error = mapping->a_ops->readpage(file, page);

9 write_page() Um dos métodos mais importantes; Quando uma página é modificada sempre é chamada a função SetPageDirty(page); Para escrever, faz-se uma busca no cache pela página; Se não estiver, uma página é alocada e adicionada; prepare_write() é invocada para setar a requisição de escrita; Os dados são copiados da área do usuário para o Kernel buffer; Os dados são copiados para o disco com a função commit_write() ;

10 Obrigado!


Carregar ppt "Sistemas Operacionais Page Cache e Page Writeback Vinicius Faria Culmant Ramos Prof.: Vitor Santos Costa."

Apresentações semelhantes


Anúncios Google