免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1650 | 回复: 4
打印 上一主题 下一主题

[内核入门] sys_write() [复制链接]

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-10-27 16:32 |只看该作者 |倒序浏览
/*
* 目录也是文件,只不过目录存的是文件系统管理数据,文件存的是应用数据,对于ext2文件系统,file->f_op指向ext2_dir_operations或ext2_file_operations,从而通过write()实际上调用到的是generic_file_write()
*/




/*
* 核心操作在mapping->a_ops->prepare_write()
* 由prepare_write()准备好要写到文件的内容之后(这个过程比较复杂),执行commit_write(),这样等kflushd进程被调度时,就有机会将内容真正写到磁盘
*/


/*
* inode: 描述文件物理属性
* dentry:描述文件逻辑属性,比如通过ln建立链接的2个文件,它们在内存的dentry不同,但dentry成员所指向的inode一样
* file:     一个文件(dentry),可以同时被多个进程打开,或同一个进程打开多次,所以需要一个更上层的结构描述不同场合对同一文件的操作上下文
*
* inode结构有个有adress_space成员,用于存放相关的物理页面(文件缓存页面),以及相关的虚拟区间(mmap)
*/


/*
* 该函数中的page,可能是__grab_cache_page()新分配的页,还没有与磁盘上的真实block建立联系,而每一个联系需要用一个buffer_head结构描述,所以先create_empty_buffers()
* 如果bh是通过create_empty_buffers()刚分配的,BH_Mapped标记必定为0,从而调用get_block()分配真实的磁盘块,并建立映射
*
* 最后根据BH_uptodate标记,决定是否从磁盘读入块内容(BH_uptodate为0,表示以磁盘内容为准,BH_dirty,表示以缓存内容为准)
*/


/*
* page结构与它所描述的一个物理页面是分离的
* buffer_head结构与它所描述的一个块也是分离的
* 而物理页面与块之间的关系比较简单,就是包含关系,相应的在管理信息上,page结构中包含一个buffer_head链表,比如1个物理页面可以包含4个块,则链表长度为4
*/


/*
* 逻辑块与真实块的映射关系
*/




/*
* 到目前为止,主要还是悬在VFS和驱动层分析,那么再往底层一点,驱动到底又是怎么读写磁盘的呢?
* 参考:http://blog.csdn.net/farmwang/article/details/49999879
* 其实驱动就是用最基本的out、in汇编指令,将磁盘的操作从端口操作,组织成按块操作,内核又抽象出来VFS对磁盘按页操作,并且对于用户程序透明
* 而使用out、in指令操作磁盘的道理其实很简单了,相当于"填表",所谓的表即端口(查手册得到含义),到此好奇心还是很强烈的话,看磁盘控制器的实现去吧
*/


论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
2 [报告]
发表于 2016-10-28 14:29 |只看该作者
分析的很详细,这个必须赞!

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
3 [报告]
发表于 2016-10-28 16:13 |只看该作者
回复 2# nswcfd

谢谢,很多都是你教我的

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
4 [报告]
发表于 2016-10-31 09:50 |只看该作者
你太客气了,内核这么庞大,一个人想完全掌握的难度太大了,就得靠大家互相补充知识短板了。
比如说disk io这一块我基本就是不懂,看了你的帖子我也收获很大呀

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-29 06:20:00
5 [报告]
发表于 2017-01-09 14:59 |只看该作者
谢谢两位大侠!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP