- 主题:假设往 DOS 机器里面安装了 1MB 内存
那 MSDOS 和程序得到的是 1MB 内存呢,还是 1MB + 384KB?
640KB 到 1MB 这一段空间,无论如何都是映射到 BIOS 的存储的对吧。
如果安装了内存之后仍然不被用起来,岂不是很可惜。
换句话说,在真正的 8086 时代,是不是只能安装 640KB 内存,再多也用不上?
--
FROM 120.37.22.*
所以 8086 的时代,无论如何大家都不会安装超过 640KB 的内存是吧?多一个 KB 也不会?
【 在 BigCarrot 的大作中提到: 】
: 8086上,无论是硬件(20根地址线)还是软件(shifted segment + offset)都被限制在了
: 20位上,当然无法访问更多的内存了
--
FROM 120.37.22.*
我刚看了一下某电商平台上面的 pocket8086 电脑,安装了 640KB + 128KB 内存,使用的是 nec v30 处理器。
所以这里为啥要提供额外的 128KB 内存呢?
【 在 Madlee 的大作中提到: 】
: 硬件都不支持
--
FROM 110.84.122.*
这个是 pocket8086 特有的,还是古代 8086 就有的特性?
这怎么能算 UMB 呢?UMB 应该是 FFFF:0000 - FFFF:FFFF 才对啊。而且我记得这一段内存到了 286 才能被访问到。
原版 IBM PC 里面,D0000-EFFFF 这一段没有被使用吗?
【 在 BigCarrot 的大作中提到: 】
: - Upper Memory Blocks
: Pocket8086 installs 128KB of memory in the D0000-EFFFF address segment and uses bit2 of IO port 060H as its switch flag. When it is written to 0, UMB is turned on (default). When it is written to 1, the UMB is turned off.
--
修改:hgoldfish FROM 110.84.122.*
FROM 110.84.122.*
既然说的是 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.*
每家公司?也就是每个外设使用的内存地址都可能不一样?
比如我往里面装一块显卡、一块声卡、一块网卡、一块 MIDI 卡的话,它们冲突了怎么办?
原谅我问这么弱智的问题,因为我是从 P II 才开始用电脑的哈哈。我其实没正经用过 DOS.
【 在 BigCarrot 的大作中提到: 】
: 这部分就是留给外设和bios用的,每家公司只能声明自己使用的那部分,其他部分有没有人用没办法知道的
--
FROM 110.84.122.*
显卡才占用 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.*
像这种硬件与操作系统通信机制有没有啥书籍可以看的?
我最近觉得内存映射才是唯一正确的 API. 不止硬件与操作系统交互时应该使用内存映射,包括操作系统内核与用户程序的交互也应该使用内存映射。比如统一使用 mmap() 映射文件到内存,把 tcp 连接映射到无尽的内存地址段、信号量变成监测某个内存地址的内容等等
【 在 HighCloud 的大作中提到: 】
: cpu通过总线和外设交换数据,低速是io端口方式,高速是dma和内存映射。内存映射最快最直接,但是如你所说,地址有限,只能用dma模式。硬盘和网卡也是dma。1M内的高段内存一开始主要是给外设的bios用的,那32k是显卡bios的位置,不是交换数据用的。同样,网卡也需要bios,ide
: 才痰腷ios包含在系统bios之中,但scsi的bios是需要从高段内存里加载的。
--
FROM 110.84.122.*