无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 6219|回复: 13
打印 上一主题 下一主题

[求助] 如何取得RAM size?

[复制链接]
1#
发表于 2017-12-15 21:15:05 | 显示全部楼层
grub4dos 屏幕顶部报告的 ram 只具有参考价值,不具有使用价值。报告的三个内存量是:

1、常规内存量,也即低端内存量,就是低于 1M 的可写内存的量。这个数据是准确的。

2、扩展内存量。就是高于 1M 、低于 4G 的那部分内存量。注意,它只报告从 1M 起始的那个连续可写内存块的大小。它不报告别的碎块。就是说,它报告的值,有可能低于扩展内存的总量。

3、高位内存量。也就是位于 4G 之上的那部分内存量。这个量通常也是准确的。这是因为,高于 4G 的内存块通常是一个连续的块,没有碎片。

displaymem 命令可以显示出 bios 所报告的内存块详细情况。

你如果会编程,你就可以自己利用 bios 来获知内存信息。你也可以直接分析 displaymem 的输出结果,计算出你想要的值。

鉴于现在电脑内存通常很大,因此,我觉得你不需要了解精确的内存布局信息。

如果高位内存不是 0,那么,用户的内存一定至少有 4G。如果高位内存超过2G,那么用户安装的内存应该有 8G 了。

如果高位内存是 0,则基本可以肯定,机器的内存条总容量不足 4G。

常规内存,扩展内存的第一个碎块,高位内存,这三个量都可以得到。它在内存某个地址处。你可以查阅 readme 文件,了解这些技术细节。置顶的教程也可以看看。


回复

使用道具 举报

2#
发表于 2017-12-16 09:43:35 | 显示全部楼层
如果高位内存是 0,那么,用户的内存通常是 2G 或更少。此时,你就可以给出提示信息,说 “对不起,您的内存看起来不多,不足4G,软件不能运行,请退出安装 。”

如果高位内存不是 0,那么用户内存肯定有 4G 了。其中有 3G 左右位于 4G 界线以内,而剩余的 1G 左右被 BIOS 安排在 4G 界线以上。这位于 4G 界线以上的部分,就是高位内存的值了。

可以这样粗略计算用户的内存量:

内存总量 = 高位内存量 + 4G - 不足 4G 的零头

举例:高位内存是 0.7G,那么,内存总量 = 0.7+4-不足4G的零头= 4G

再一例:高位内存是 4.7G,那么,内存总量 = 4.7+4-不足4G的零头= 8G

再一例:高位内存是 12.7G,那么,内存总量 = 12.7+4-不足4G的零头= 16G

再一例:高位内存是 29G,那么,内存总量 = 29+4-不足4G的零头= 32G

回复

使用道具 举报

3#
发表于 2017-12-16 14:21:27 | 显示全部楼层

假定你是想用 map 把 img 加载在内存,却不知道能否加载成功。你可以进行判断。map 执行成功时返回 true,失败时返回 false。我猜你已经知道一些 grub4dos 的脚本编程知识。当 map 失败时,你可以提示用户,内存不够,或内存碎片太多,导致 map --mem 命令失败。这样你根本就不需要了解用户究竟有多少内存。
回复

使用道具 举报

4#
发表于 2017-12-16 14:45:23 | 显示全部楼层
就算你精确知道内存总量有多少,对于 map --mem 来说,这也是没有用的信息。举例来说,假定精确的内存值是 2G,你想加载 1G 的 img,这看似应该能成功了,其实不然。有人报告联想的某个型号的电脑,最大的内存碎块是 500M 左右,根本无法容纳一个 1G 的 img。而我碰到的一台 Dell 电脑,它的扩展内存就是连续的。因此,如果是 Dell 电脑,则成功的可能性较大,而联想电脑则失败居多。

点评

本来之前还准备比较内存和映像大小,然后是否载入呢。但经过不点大的一般说明之后,已经放弃了  详情 回复 发表于 2017-12-18 18:15
回复

使用道具 举报

5#
发表于 2017-12-17 07:14:50 | 显示全部楼层
tools241 发表于 2017-12-17 03:59
大大是担心记忆体不足时跑不动某些ISO档?

本人PC的Ram原本只有4G( 目前已再加2G成为6G ), 想测试某大大 ...

您的记忆体有 4G,本来是够了。但是,您的主板安排的记忆体布局可能像这样:

位于 4G 界线以下的碎块共3G,比如,6 块,各 500M。
位于 4G 界线以上的是个连续块,大约 1G。

如此,没有一个碎块能够放得下 1.75G 的 ISO 档。

而当您的记忆体增加到 6G 后,位于 4G 界线以下的情况无变化,而位于 4G 界线以上的部分,增加了 2G,变成 3G,而且是连续的一整块。这就可以放得下 1.75G 的 ISO 档了。

回复

使用道具 举报

6#
发表于 2017-12-18 22:18:27 | 显示全部楼层
如果你想在载入 img 之前确定能否载入,你可以用一个 map 的假动作来测试能否载入。比如,像这样:

map     --mem=-预留扇区数      (md)+8      (rd)

等号右边是一个负数,预留扇区数就是你准备加载的那个 img 所占据的扇区数。此处扇区大小按 512 字节计算。

此处,map 命令并非建立虚拟盘,而是让 grub4dos 内置的 rd 设备指向内存虚拟盘所在的地址。而 rd 不是虚拟盘。

此命令如果成功执行,则你的 img 就能装入内存。此命令如果执行失败,则你的 img 就不能装入内存。

对于 4G 界线以内的情况,这个判断的可靠性很高。

对于带有 --top 的情况,我不知道行不行。你们可以试试看,如果有 bug,比如 rd 设备不能处理高位内存,那就让开发者修复 bug。

点评

多谢解答,有空了我研究研究。  详情 回复 发表于 2017-12-19 09:29
回复

使用道具 举报

7#
发表于 2017-12-19 10:36:28 | 显示全部楼层
新版中 map 的 --top 参数是用来控制是否启用 4G 界线以上的内存块的。如果没有 --top 参数,则不会使用高位内存块。如果带有 --top 参数,则会优先使用高位内存块。另外,新版搜索可用内存块总是从高向低搜索,而不再从低向高搜索。

就是说,如果带有 --top 参数,则新版在大多数情况下可能总是使用高位内存块,除非高位内存块已经被很多 img 占满了(或者高位内存块太小),才会搜索到 4G 界线以内的内存块。新版的搜索方式更合理。

有些软件不支持 img 位于 4G 界线以上的高位内存区。比如,winvblock 就不支持(但 firadisk 支持)。因此,如果使用 winvblock 就不应该使用 --top 参数(使用 --top 参数,进入 Windows 后 winvblock 无法正常驱动虚拟盘,你也就无法访问虚拟盘)。推论:如果你想使用很大的 img(比如 4G 或更大)来创建内存虚拟盘,你就不可能使用 winvblock,只能使用 firadisk。

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-3 18:23

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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