[讨论]关于VXD中的地址

    技术2022-05-11  62

     

    发信人: 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] 


    最新回复(0)