- 主题:假设往 DOS 机器里面安装了 1MB 内存
你是说DOS,还是8086?
DOS 后来的版本有内存扩展方案,ems和xms,xms用的比较多
【 在 hgoldfish 的大作中提到: 】
: 那 MSDOS 和程序得到的是 1MB 内存呢,还是 1MB + 384KB?
: 640KB 到 1MB 这一段空间,无论如何都是映射到 BIOS 的存储的对吧。
: 如果安装了内存之后仍然不被用起来,岂不是很可惜。
: ...................
--
FROM 120.245.115.*
既然说的是 1MB + 384KB 内存,那肯定讨论的是 80286 以后的机器啊。远古的 8086 肯定访问不到 1MB 以后的内存。
像前面那个 pocket8086 的做法是把 BIOS 的那个 384KB 内存拿出一部分没用的地址段映射到额外的内存条上。
好奇这是 NEC V30 的功能,还是原版 Intel 8086 就有的功能。
【 在 longsword 的大作中提到: 】
: 你是说DOS,还是8086?
: DOS 后来的版本有内存扩展方案,ems和xms,xms用的比较多
--
FROM 47.243.39.*
这个 384 KB 内存里面哪部分被利用到,有没有明确的文档来说明?
我记得 MSDOS 的 HIMEM.SYS 有个功能是自动探测哪部分被使用了,但也留了参数让用户自己指定某些地址段是可以使用的。
【 在 BigCarrot 的大作中提到: 】
: 应该没有被用到吧,它既然要挑一段地址给自己用,肯定挑一段别人很少用到的地址
--
FROM 47.243.39.*
这部分就是留给外设和bios用的,每家公司只能声明自己使用的那部分,其他部分有没有人用没办法知道的
【 在 hgoldfish 的大作中提到: 】
: 这个 384 KB 内存里面哪部分被利用到,有没有明确的文档来说明?
: 我记得 MSDOS 的 HIMEM.SYS 有个功能是自动探测哪部分被使用了,但也留了参数让用户自己指定某些地址段是可以使用的。
--
FROM 104.133.9.*
每家公司?也就是每个外设使用的内存地址都可能不一样?
比如我往里面装一块显卡、一块声卡、一块网卡、一块 MIDI 卡的话,它们冲突了怎么办?
原谅我问这么弱智的问题,因为我是从 P II 才开始用电脑的哈哈。我其实没正经用过 DOS.
【 在 BigCarrot 的大作中提到: 】
: 这部分就是留给外设和bios用的,每家公司只能声明自己使用的那部分,其他部分有没有人用没办法知道的
--
FROM 110.84.122.*
ibm给常用的外设规定了io地址和内存地址,比如显卡占用c0000开始的32k。声卡和网卡也有对应的地址范围。
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 每家公司?也就是每个外设使用的内存地址都可能不一样?
:
: 比如我往里面装一块显卡、一块声卡、一块网卡、一块 MIDI 卡的话,它们冲突了怎么办?
:
--
FROM 117.136.89.*
【 在 hgoldfish 的大作中提到: 】
: 每家公司?也就是每个外设使用的内存地址都可能不一样?
对呀,你只能决定自己使用什么,不能决定别人使用什么
: 比如我往里面装一块显卡、一块声卡、一块网卡、一块 MIDI 卡的话,它们冲突了怎么办?
当年玩dos游戏,这就是最麻烦的地方,一般情况下外设提供多个选项,有冲突了就换一个
地址冲突的情况并不多,最常见的中断号的冲突,资源太有限了
为了解决这些冲突问题,才有了后来的plug and play,这样系统启动的时候能自动查找外设并分配资源
: 原谅我问这么弱智的问题,因为我是从 P II 才开始用电脑的哈哈。我其实没正经用过 DOS.
: ...................
--
FROM 104.133.9.*
显卡才占用 32KB? 这怎么够用啊?后面的 VGA 需要 640*480 个字节我算了一下是 300KB 来着。是不是得先写一部分,然后刷到显存里面再次写?当年 16 色的系统用起来很有质感。
像这种规定,有没有什么相关的文档?我去看一下还有没有其它细节?
【 在 HighCloud 的大作中提到: 】
: ibm给常用的外设规定了io地址和内存地址,比如显卡占用c0000开始的32k。声卡和网卡也有对应的地址范围。
--
FROM 110.84.122.*
那这些外设是使用什么方案提供多个选项的?启动 DOS 的时候先用驱动程序向外设发消息?一般是用什么方案发消息?当年通过 PCI 或者更古董的那个啥槽发消息有统一的接口吗?
读写某段内存地址就指向外设,这样的机制是由 CPU 提供的?8086 提供哪个机制来设置内存地址段?
【 在 BigCarrot 的大作中提到: 】
: 对呀,你只能决定自己使用什么,不能决定别人使用什么
: 当年玩dos游戏,这就是最麻烦的地方,一般情况下外设提供多个选项,有冲突了就换一个
: 地址冲突的情况并不多,最常见的中断号的冲突,资源太有限了
: ...................
--
FROM 110.84.122.*
最简单的方法就是在板卡上提供一个小开关
再详细的你也不要问我了,我也不懂
没有研究过外设
【 在 hgoldfish 的大作中提到: 】
: 那这些外设是使用什么方案提供多个选项的?启动 DOS 的时候先用驱动程序向外设发消息?一般是用什么方案发消息?当年通过 PCI 或者更古董的那个啥槽发消息有统一的接口吗?
: 读写某段内存地址就指向外设,这样的机制是由 CPU 提供的?8086 提供哪个机制来设置内存地址段?
这叫做MMIO, 通常由memory controller和IO controller来实现,cpu就当作普通的内存访问就行了(加上一些额外限制,比如non-cachable, non-speculate等)
早期x86上并不流行MMIO, 大概这就是外设导致的内存冲突的并不常见的原因
那时访问外设的主流方法是通过IN/OUT指令访问IO端口,IO端口的冲突也比较常见
--
FROM 104.133.9.*