[讨论]关于VXD中的地址

2000年11月27日 09:29:00

发信人: wwwwww (困困), 信区: Programming
标 题: 关于VXD的问题
发信站: BBS 水木清华站 (Mon Feb 16 02:46:39 1998)

VXD相对于所有的应用程序都是全局的,
也就是说应用程序可以直接存取VXD中的
全局变量。这是经过证实的。
现在的疑问是:
1。所有的VXD都在同一线性地址空间里吗?
这个线性地址空间的长度最多是多少呢?
如果是4GB,那别的应用程序又怎么能看得见这些VXD呢?
如果看不见那是不可能实现前面所说的数据共享的。
2。VXD也有数据段,代码段吧?因为在写VXD时就有这些概念,
这样可以利于维护代码段的只读特性。想问的是:这些数据段,
和代码段也是在同一线性地址空间里了?



--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.8.130]
发信人: Cohen (Tommy), 信区: Programming
标 题: Re: 关于VXD的问题
发信站: BBS 水木清华站 (Mon Feb 16 15:19:08 1998)

【 在 wwwwww (困困) 的大作中提到: 】
VXD相对于所有的应用程序都是全局的,
也就是说应用程序可以直接存取VXD中的
全局变量。这是经过证实的。
现在的疑问是:
1。所有的VXD都在同一线性地址空间里吗?nbsp;
^^^^^^^^^^^^^^^^^^^^ 好象是这样的,从微软提供的资料看
VXD占用了2G以上的系统空间,而应用程序
空间在2G以下 ?nbsp;
这个线性地址空间的长度最多是多少呢?
如果是4GB,那别的应用程序又怎么能看得见这些VXD呢?
如果看不见那是不可能实现前面所说的数据共享的。
2。VXD也有数据段,代码段吧?因为在写VXD时就有这些概念,
这样可以利于维护代码段的只读特性。想问的是:这些数据段,
和代码段也是在同一线性地址空间里了?


--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.74.242]
发信人: suxm (笨笨), 信区: Programming
标 题: Re: 关于VXD的问题
发信站: BBS 水木清华站 (Mon Feb 16 16:40:32 1998)

【 在 wwwwww (困困) 的大作中提到: 】
VXD相对于所有的应用程序都是全局的,
也就是说应用程序可以直接存取VXD中的
全局变量。这是经过证实的。
~~~~~~~~
的确是这样的

现在的疑问是:
1。所有的VXD都在同一线性地址空间里吗?
~~~~~~~~~~~~~~~~~


这个线性地址空间的长度最多是多少呢?
~~~~~~~~~~~~~
2GB

如果是4GB,那别的应用程序又怎么能看得见这些VXD呢?
如果看不见那是不可能实现前面所说的数据共享的。

每一个应用程序的前2GB空间都有一份系统VXD的拷贝。
这些拷贝映射为同一内存RAM地址。
这样说来应用程序只能占用2GB-----4GB之间的地址空间了。


2。VXD也有数据段,代码段吧?因为在写VXD时就有这些概念,
~~~~~~~~~~~~~~~~
cs=ds=ss,在flat mode下请忘记段的概念,虽然CPU
仍在防护情况下使用着段

这样可以利于维护代码段的只读特性。想问的是:这些数据段,
和代码段也是在同一线性地址空间里了?
~~~~~~~~~~~~~~~~~
因为CS=DS=SS所以定在同一地址空间里
--
___________________
吃睡吃睡吃睡吃睡吃睡
___________________

※ 修改:·suxm 於 Feb 16 18:46:06 修改本文·[FROM: 166.111.8.153]
※ 修改:·suxm 於 Feb 16 18:52:16 修改本文·[FROM: 166.111.8.153]
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.146.241]
发信人: wwwwww (困困), 信区: Programming
标 题: Re: 关于VXD的问题
发信站: BBS 水木清华站 (Mon Feb 16 18:58:51 1998)

多谢大侠指点。
小弟还有一事不明:
如果32位应用程序与VXD在同一4GB的空间内,
那应用程序自然可以利用指针直接存取VXD中的全局变量。
不明白的是:那VXD可以利用指针直接存取应用程序中的
全局变量吗?如果可以的话,那岂不乱套了?-----如果
同时运行两份应用程序的拷贝,那VXD存取的是哪个应用程序
中的全局变量呢?


【 在 suxm (笨笨) 的大作中提到: 】
~~~~~~~~
的确是这样的
~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~
2GB
每一个应用程序的前2GB空间都有一份系统VXD的拷贝。
这些拷贝映射为同一内存RAM地址。
这样说来应用程序只能占用2GB-----4GB之间的地址空间了。
~~~~~~~~~~~~~~~~


cs=ds=ss,在flat mode下请忘记段的概念,虽然CPU
仍在防护情况下使用着段
~~~~~~~~~~~~~~~~~
因为CS=DS=SS所以定在同一地址空间里


--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.8.153]
发信人: wwj (红尘一笑), 信区: Programming
标 题: Re: 关于VXD的问题
发信站: BBS 水木清华站 (Tue Feb 17 08:49:02 1998)

【 在 wwwwww (困困) 的大作中提到: 】

Win95的Win32部分并不是以段管理为主的,它所有的虚地址及其保护特性
基本上都是用页管理来完成.

如果32位应用程序与VXD在同一4GB的空间内,
那应用程序自然可以利用指针直接存取VXD中的全局变量。

VXD所在的虚地址在每个VM中都是一样的.但从操作系统的角度说,这片区域应
该不让应用程序可以读写到.Win95设计上出于效率和某些方面的考虑,这些区
域可以从应用程序级读到,甚至某些地方还可以被应用程序写.

不明白的是:那VXD可以利用指针直接存取应用程序中的
全局变量吗?如果可以的话,那岂不乱套了?-----如果
同时运行两份应用程序的拷贝,那VXD存取的是哪个应用程序
中的全局变量呢?

从VXD的角度看来,低2G的空间是应用程序相关的.也就是说,当CPU运行
到VXD的某段代码时,VXD所看到的低2G的空间是这个VM印象,并不能指定是哪
个应用的;究竟是哪个应用,VXD应该进行ProcessID的判断.在原则上,操作系统
是能读写应用的数据的.

--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.8.123]
发信人: holly (holly), 信区: Programming
标 题: Re: 关于VXD的问题
发信站: BBS 水木清华站 (Tue Feb 17 11:20:06 1998)

【 在 wwj (红尘一笑) 的大作中提到: 】
Win95的Win32部分并不是以段管理为主的,它所有的虚地址及其保护特性
基本上都是用页管理来完成.
VXD所在的虚地址在每个VM中都是一样的.但从操作系统的角度说,这片区域应
该不让应用程序可以读写到.Win95设计上出于效率和某些方面的考虑,这些区
域可以从应用程序级读到,甚至某些地方还可以被应用程序写.

... No. Vxd Running on ring 0 and Apps running on Ring 3


从VXD的角度看来,低2G的空间是应用程序相关的.也就是说,当CPU运行
到VXD的某段代码时,VXD所看到的低2G的空间是这个VM印象,并不能指定是哪
个应用的;究竟是哪个应用,VXD应该进行ProcessID的判断.在原则上,操作系统
是能读写应用的数据的.


--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.120.26.243]
发信人: suxm (笨笨), 信区: Programming
标 题: Re: 关于VXD的问题
发信站: BBS 水木清华站 (Tue Feb 17 12:50:38 1998)


Memory allocated in a VxD is globally,and can be shared with
applications.Memory that an application allocates may be in a
process specific region of the memory map.In this case,the VxD
cannot access that memory unless the current memory context is
that of the process.



【 在 wwwwww (困困) 的大作中提到: 】
多谢大侠指点。
小弟还有一事不明:
如果32位应用程序与VXD在同一4GB的空间内,
那应用程序自然可以利用指针直接存取VXD中的全局变量。
不明白的是:那VXD可以利用指针直接存取应用程序中的
全局变量吗?如果可以的话,那岂不乱套了?-----如果
同时运行两份应用程序的拷贝,那VXD存取的是哪个应用程序
中的全局变量呢?


--
___________________
吃睡吃睡吃睡吃睡吃睡
___________________

※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.8.142]
发信人: suxm (笨笨), 信区: Programming
标 题: Re: 关于VXD的问题
发信站: BBS 水木清华站 (Tue Feb 17 12:51:55 1998)

No.Can.
See the examples of the win95 ddk.



【 在 holly (holly) 的大作中提到: 】
... No. Vxd Running on ring 0 and Apps running on Ring 3


--
___________________
吃睡吃睡吃睡吃睡吃睡
___________________

※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.8.142]
发信人: Dreammy (这个杀手不太冷), 信区: Programming
标 题: Re: 关于VXD的问题
发信站: BBS 水木清华站 (Tue Feb 24 09:01:42 1998)

【 在 wwwwww (困困) 的大作中提到: 】
多谢大侠指点。
小弟还有一事不明:
如果32位应用程序与VXD在同一4GB的空间内,
那应用程序自然可以利用指针直接存取VXD中的全局变量。
不明白的是:那VXD可以利用指针直接存取应用程序中的
全局变量吗?如果可以的话,那岂不乱套了?-----如果
同时运行两份应用程序的拷贝,那VXD存取的是哪个应用程序
中的全局变量呢?
实际上,在95和31中这个问题都可以提的,是个概念问题

在95中之所以叫做FLAT无非是因为所有WIN32应用的代码段
都是一样的,而在31下大家是同一个4GB的线性地址,所以
从这个角度讲,是一样的
在31中,全局页表和局部页表是相同的,那么RING0所
在内存区域是采用设置叶面属性的方法解决的
在95中
全局页表和局部页表是不同的,@而且各WIN32应用的
局部页表也不同 ,所以对不同进程,线性地址与物理
地址映射不同 , 大家在不同的线性空间里。

--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.6.26]



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=3162


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值