| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2751 人关注过本帖
标题:想了解下程序间如何通讯
只看楼主 加入收藏
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用madfrogme在2012-7-30 18:47:40的发言:

可是VFS也是系统内核支持的一个subsystem啊


So what?
2012-07-30 18:49
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
回复 41楼 Devil_W
所以还是有关系的吧Σ(・□・;)

The quieter you become, the more you can hear
2012-07-30 18:53
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用madfrogme在2012-7-30 18:53:19的发言:

所以还是有关系的吧Σ(・□・;)


tell me , 什么关系?
2012-07-30 19:03
z767900438
Rank: 1
等 级:新手上路
帖 子:17
专家分:8
注 册:2012-7-25
收藏
得分:0 
这要涉及到进程中的通信问题
2012-07-30 19:30
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
回复 43楼 Devil_W
- -!
大神咄咄逼人啊
我要整理一下思路
是内核实现了virtual filesytem switch这个概念

于是就把底层的各种文件系统的代码从内核中分离了出来

所有的文件访问都是通过VFS来进行的,

内核为了追踪这些文件就要使用index node

而这些index node的获得又是通过底层的不同文件系统从disk中的inode里获得

以一个user space的程序中
nbytes = write (fd, buffer, length);
为例的话

这个write系统调用会被sys_write()处理,让 sys_write()来决定特定的文件系统用特定的方法来写入

然后sys_write()调用这个方法。

write() -----> sys_write() -----> 不同文件系统的写 方法 --------> 物理的硬盘

好吧!!

The quieter you become, the more you can hear
2012-07-30 19:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
Windows是使用NTFS文件系统的,这东西已被微软注册为知识产权产品,而且其详细定义属于商业秘密。后期版本的NTFS与Windows已成一体,之所以命名为NTFS,是指它是Windows NT以来的File System,从FAT和HPFS改进来的。

严格来说,VFS是一个中间层,不是文件系统本身。Linux之所以这样做,是因为它要支持各种各样不同环境下的文件系统,VFS即Virtual File System,是把具体的文件系统抽象出来做成一个接口,方面程序作系统调用的。也就是说,程序向操作系统发出调用一致的open()、read()、write()请求,VFS把它翻译为各个硬件上的实际文件系统指令去执行,得到结果后又统一返回。

Windows下也是同样的机制。Windows支持FAT、FAT32、NTFS等文件系统,它自己也把程序中的统一的文件读写请求转换给对应的文件系统来处理,但是这些东西都内嵌在Windows中,不用分离的,属于操作系统的一部分。事实上,诸如向显示卡和打印机输出等操作,在DOS时代也是要不同的驱动程序的,那个时候写程序甚至要针对这些不同的显示卡和打印机编写不同的代码,但后来Windows把驱动程序的管理部分也接管了,向用户提供虚拟设备概念,再也不用考虑驱动的差异了,这也是VxS的概念应用。这些东西,到应用程序之外,就交给操作系统管理,一般不用再理会的,我们只要按照操作系统的文档规定,发出正确的调用指令即可,即视为归操作系统负责,正如汇编中的INT 21h称之为DOS调用一样,是操作系统的功能。

[ 本帖最后由 TonyDeng 于 2012-7-30 20:28 编辑 ]

授人以渔,不授人以鱼。
2012-07-30 20:23
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:0 
看来目前我是没法理解了,但各位大大可以去研究研究Linux阿,那不是开源的嘛,


莫问前尘有愧,但求今生无悔
2012-07-30 21:28
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 47楼 pycansi
嗯。但是搞应用开发不用研究内核的实现机制。而且现在还是搞 windows 开发的多,他们也不需要研究 linux。
你要想研究 Linux 的内核也是可以的。对 linux 有些基本了解之后,花上一、两个月研究内核,就能有些整体上的认识。
2012-07-30 21:44
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 47楼 pycansi
如果你会 C++ 的话,其实你也可以这么理解。把 vfs 看成是一个基类,驱动可以看成是一个子类。
read write 之类的看成虚函数。操作系统只管调 vfs 的里的 read, write 就行了。至于到底多态了之后是调的那个驱动,系统也不关心。用户就更不用关心了。除非你的任务是去实现那个子类。
2012-07-30 21:48
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:0 
谢谢大大指点哈


莫问前尘有愧,但求今生无悔
2012-07-31 09:01
快速回复:想了解下程序间如何通讯
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034305 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved