2013年(22)
发布时间:2013-08-04 18:40:40
Q:SLAB为什么需要定时调用cache_reap()回收page?A:SLAB的每CPU array_cache中的对象可能关联到多个slab,在长时间的分配和释放后,可能出现比较极端的情况:array_cache借用了多个slab的对象,而slab除了被array_cache借用的对象外,其他对象都是空闲的,导致slab不能销毁,大量page被占用.定时的cache_reap()后,array_cache借.........【阅读全文】
发布时间:2013-08-04 18:37:24
Q:对文件mmap()后,执行ftruncate()将文件的长度置为0,再向映射后的地址写数据会怎么样?A:收到SIGBUS信号如果mmap()的page对应的磁盘数据块都是连续的,那么page无需转化为buffer page,可以整页读出page.缺页异常读入page过程:do_page_fault()handle_mm_fault()handle_pte_fault() do_linear_fault() .........【阅读全文】
发布时间:2013-08-04 18:35:55
1.如果buffer被置为脏buffer,那么page的脏页标志需要被置位,此时,page中其他buffer的DIRTY标志不受影响mark_buffer_dirty() if (!test_set_buffer_dirty(bh)) __set_page_dirty() TestSetPageDirty(page) radix_tree_tag_set(PAGECACHE_TAG_DIRTY) .........【阅读全文】
发布时间:2013-08-04 18:32:42
1.page读do_mpage_readpage() bio_add_page() //将page加入到bio时,page必须先被锁住,bio读操作执行的过程中page都是被锁住的 mpage_bio_submit() bio->bi_end_io = mpage_end_io_read;mpage_end_io_read() if (uptodate) { SetPageUptodate(p.........【阅读全文】
发布时间:2013-08-04 18:32:10
1.成功按页读取page,page的UPTODATE标志置位mpage_end_io_read() int uptodate = test_bit(BIO_UPTODATE, &bio->bi_flags); if (uptodate) { SetPageUptodate(page); } 2.异步读取buffer_head成功后,buffer_head的标志置位,如果buffer_head对应的page中所有的buffer_head都为UPT.........【阅读全文】