无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 3080|回复: 10
打印 上一主题 下一主题

iftitle checkrange的困惑

[复制链接]
跳转到指定楼层
1#
发表于 2012-10-19 10:26:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
20120619版grldr ,其内置菜单有以下内容

  1. ...
  2. ...
  3. set lst=4UD
  4. set Thmem2=093000
  5. # #0x93000相当于588MB
  6. ...
  7. ...
  8. configfile (ud)/AXPE/VBE/MENU.LST
复制代码
外置菜单(ud)/AXPE/VBE/MENU.LST的内容

  1. ...
  2. ...

  3. iftitle [ if "%lst%"=="4UD" && checkrange 0x%Thmem2%:-1 read 0x8298 ]                                 Windows 7 PE

  4. ...
  5. ...
复制代码
在2GBX1或1GBX2+512MBX2等低内存机器上都能显示该windows 7 PE菜单,反倒是在某些4GBx1或 4GBX2的计算机上此菜单不显示,问题在哪里?请大家分析下。

[ 本帖最后由 chiannet 于 2012-10-19 10:46 编辑 ]
2#
发表于 2012-10-19 11:03:22 | 只看该作者
0x8298 处的值代表什么?

它的含义是:从 1M 开始的连续内存块的大小。这个连续内存块很小,就不满足你的条件了,也就不会列出菜单了。

注意:它不代表总内存,也不代表最大内存块。而仅仅是从 1M 开始的这个连续内存块的大小。
回复

使用道具 举报

3#
 楼主| 发表于 2012-10-19 11:25:06 | 只看该作者

回复 #2 不点 的帖子

谢谢不点大提醒关于0x8298的功用。我以前一直错误地把它当做最大内存块来用,grub4dos-help-2012-05-21.chm read命令的说明有必要修正这个错误了。

从1M 开始的连续内存块的大小,为什么那些内存大的机器反而比老的机子小呢?

还有总内存的值位于何处?

[ 本帖最后由 chiannet 于 2012-10-19 11:28 编辑 ]
回复

使用道具 举报

4#
发表于 2012-10-19 11:27:43 | 只看该作者
你研究一下 displaymem 命令的输出结果吧。所有的内存块,都列在那里面了。

你的程序可以分析这个输出结果,抽取你需要的信息。
回复

使用道具 举报

5#
 楼主| 发表于 2012-10-19 11:29:47 | 只看该作者
grub4dos-help-2012-05-21.chm read命令的说明有必要修正了。
回复

使用道具 举报

6#
发表于 2012-10-19 12:06:59 | 只看该作者
0000:8298  4字节(即双字) 可用的扩展内存大小(以 KB 为单位)

这确实是错误的说法。它不是扩展内存的大小,而仅仅是 1M 处的连续内存块的大小,而且,这个值肯定小于 4G。

你发现了这个 bug,可以通知 sratlf 去纠正它。

补充,究竟是不是以 KB 为单位,也需要确认一下。请阅读源代码之后,确认究竟是什么单位。

[ 本帖最后由 不点 于 2012-10-19 12:12 编辑 ]
回复

使用道具 举报

7#
发表于 2012-10-19 12:32:38 | 只看该作者
是kb单位。后面的END:后的数值表示什么?

希望有个内存变量读取高位内存的大小。即开头显示的第三个数值。
也希望有个变量读取物理内存的大小。
回复

使用道具 举报

8#
发表于 2012-10-19 15:32:08 | 只看该作者
你先说说要物理内存的大小有什么用?

自己编个程序,调用 BIOS 的 int15/e820 功能,就可以获得各个内存块的大小。

至于说物理内存有多大,还真不容易判断出来。

内存碎块太多,而用户究竟需要其中的哪个值?或者哪几个组合起来的值,就不好说了,不同的人,需求也不同。


好了,我再补充一点个人的不成熟意见。

内存有多少?够用不够用?这本来是不该去管的事情。

当你执行 map 的时候,map 如果发现没有合适的内存块可用,它会出错的。

你的程序只需检测 map 给出的错误信息,便可给用户一个交代了,而根本就用不着费那牛劲去找最大的内存块。


最大内存块即使找着了,也不一定有多大用处。因为你还得考虑你要放多少个 IMG 到内存中。如果先前已经有 IMG 放在了其中,那么你再放一个就可能要失败了。你仍旧还是需要计算,仍旧是麻烦。而如果你把这些繁琐事都交给 map 去处理,它就会以失败信息的形式告诉你:内存不够用。




[ 本帖最后由 不点 于 2012-10-19 21:31 编辑 ]
回复

使用道具 举报

9#
发表于 2012-10-19 21:23:41 | 只看该作者

>>> 希望有个内存变量读取高位内存的大小。即开头显示的第三个数值。

这个是存在的。它是一个 64 位的值,在 0x82C0 处。单位也是 KB。这是从 4G 开始的那个连续内存块的大小。

sratlf 的文档中也公布了它,但是没有明确其含义。

回复

使用道具 举报

10#
发表于 2012-10-20 17:24:39 | 只看该作者
原帖由 不点 于 2012-10-19 15:32 发表
你先说说要物理内存的大小有什么用?

自己编个程序,调用 BIOS 的 int15/e820 功能,就可以获得各个内存块的大小。

至于说物理内存有多大,还真不容易判断出来。

内存碎块太多,而用户究竟需要其中的哪 ...



相关INT15程序文档有木有?怎么用的
回复

使用道具 举报

11#
发表于 2012-10-20 19:25:47 | 只看该作者
这当然有了。不过,你得用 google 去找。

找 int15/e820 就可以找到相关知识。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-14 19:45

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表