- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux套接字与虚拟文件系统
引言???在Unix的世界里,万物皆文件,通过虚拟文件系统VFS,程序可以用标准的Unix系统调用对不同的文件系统,甚至不同介质上的文件系统进行读写操作。对于网络套接字socket也是如此,除了专属的Berkeley Sockets API,还支持一些标准的文件IO系统调用如read(v)、write(v)和close等。那么为什么socket也支持文件IO系统调用呢?在Linux上,这是通过套接口伪文件系统sockfs来实现的,因为sockfs实现了VFS中的4种主要对象:超级块super block、索引节点inode、目录项对象dentry和文件对象file,当执行文件IO系统调用时,VFS就将请求转发给sockfs,而sockfs就调用特定的协议实现,层次结构如下图:
???本文以linux 2.6.34实现为基础,本篇阐述初始化和Socket创建两部分的实现,下篇阐述Socket创建和销毁两部分的实现。初始化
???在内核引导时初始化网络子系统,进而调用sock_init,该函数主要步骤如下:创建inode缓存,注册和装载sockfs,定义在net/socket.c中。
1static?int?__init?sock_init(void)2{3????4????init_inodecache();5????register_filesystem(sock_fs_type);6????sock_mnt?=?kern_mount(sock_fs_type);7????8}
??????创建inode缓存???init_inodecache为socket_alloc对象创建SLAB缓存,名称为sock_inode_cachep,socket_alloc定义在include/net/sock.h中。
1struct?socket_alloc?{2????struct?socket?socket;3????struct?inode?vfs_inode;4};
???socket_alloc由socket和inode结构2部分组成,这样就方便了在套接字与inode对象间双向定位。???注册sockfs???调用VFS的函数register_filesystem实现注册,sock_fs_type定义在net/socket.c中。
1static?struct?file_system_type?sock_fs_type?=?{2????.name?=????????sockfs,3????.get_sb?=????sockfs_get_sb,4????.kill_sb?=????kill_anon_super,5};
???sock_fs_type包含了文件系统sockfs的名称、创建和销毁super block的函数,其中sockfs_get_sb实现在net/socket.c中。
1static?int?sockfs_get_sb(struct?file_system_type?*fs_type,int?flags,?const?char?*dev_name,?void?*data,struct?vfsmount?*mnt)2{3????return?get_sb_pseudo(fs_type,?socket:,?sockfs_ops,?SOCKFS_MAGIC,?mnt);4}
???它在kern_mount内被执行,通过调用get_sb_pseudo创建了一个super block(包含一个对应dentry及一个关联inode):操作对象为sockfs_ops,根目录名称为socket:,对应的根索引节点编号为1。???sockfs_ops定义在net/socket.c中。
1static?const?struct?super_operations?sockfs_ops?=?{2????.alloc_inode?=????sock_alloc_inode,3????.destroy_inode?=?sock_destroy_inode,4????.statfs?=????simple_statfs,5};
???sock_alloc_inode用于分配inode对象,将在socket创建过程中被调用;sock_destroy_inode用于释放inode对象,将在socket销毁过程中被调用;simple_statfs用于获取sockfs文件系统的状态信息。??????装载sockfs???由kern_mount函数实现装载一个伪文件系统(当然,它没有装载点),返回一个static vfsmount对象sock_mnt。???经过以上步骤后,所创建
您可能关注的文档
- 20150912新生军训服务说明书.docx
- 12医院财务内部控制制度.docx
- 2014-2015年标准合同模板目录.docx
- 2001-2013全国电子设计大赛元器件清单.docx
- 141124《基金业务外包服务指引》说明.docx
- 201560号应急演练文件.docx
- 2015国培项目现场实践成绩鉴定表.docx
- 2015学年第一学期政教处工作计划.docx
- 140630肉牛养殖项目环境影响报告表全本公示.doc
- 2015室内设计专升本设计任务书(主题酒店).doc
- 10《那一年,面包飘香》教案.docx
- 13 花钟 教学设计-2023-2024学年三年级下册语文统编版.docx
- 2024-2025学年中职学校心理健康教育与霸凌预防的设计.docx
- 2024-2025学年中职生反思与行动的反霸凌教学设计.docx
- 2023-2024学年人教版小学数学一年级上册5.docx
- 4.1.1 线段、射线、直线 教学设计 2024-2025学年北师大版七年级数学上册.docx
- 川教版(2024)三年级上册 2.2在线导航选路线 教案.docx
- Unit 8 Dolls (教学设计)-2024-2025学年译林版(三起)英语四年级上册.docx
- 高一上学期体育与健康人教版 “贪吃蛇”耐久跑 教案.docx
- 第1课时 亿以内数的认识(教学设计)-2024-2025学年四年级上册数学人教版.docx
文档评论(0)