Chinaunix首页 | 论坛 | 博客
  • 博客访问: 164401
  • 博文数量: 22
  • 博客积分: 126
  • 博客等级: 入伍新兵
  • 技术积分: 459
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-26 21:14
文章分类
文章存档

2013年(22)

我的朋友

分类: LINUX

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()
  __do_fault()
   filemap_fault()
    page_cache_read()
     page = page_cache_alloc_cold(mapping);
     add_to_page_cache_lru()
     ext2_readpage()
      mpage_readpage()
       do_mpage_readpage()
        如果page对应的磁盘数据块都是连续的
        bio_add_page()整页读取
        否则将page转化为buffer page,按块逐个读
       mpage_bio_submit()
    wait_on_page_locked()   

如果mmap()的page对应的磁盘数据块都是连续的,可以把page加入到BIO中整页回写.
脏页回写的过程:
sync_inode()
 __writeback_single_inode()
  __sync_single_inode()
   do_writepages()
    ext2_writepages()
     mpage_writepages()
      write_cache_pages()
       __mpage_writepage()
        bio_add_page()
      mpage_bio_submit(WRITE, mpd.bio);

阅读(3101) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~