作者jeunder ()
看板Programming
标题Re: [问题] dos为何要有记忆体配置的中断指令?
时间Wed Apr 11 02:17:49 2007
※ 引述《[email protected] (try or test)》之铭言:
: > 其实最直接的原因就是为了要空出来给 child process.
: DOS 没有 multi-process 或 multi-task 的概念.
我没说 dos 有 multi-process 或 multi-task 的概念.
dos 可以执行 single process, 并且还可以 create child process. (依此类推)
你在 dos command line 下输入的 command 就是由 command interpreter
这个 process 负责处理的.
如果你的 command 是要执行某个 program, 那麽 command interpreter
会将记忆体空出, 然後执行你指定的 program.
而这个 program 就是 command interpreter 的 child process.
以前记忆体不够用怎麽办? 把程式切成几个独立的子执行档 (child),
然後再由主执行档(parent)根据需求来决定要 load 哪个 child.
听说这在以前被称为 overlay, 当然不像现代 OS 的 swap-out 那麽先进罗.
: 是为了 TSR 或 driver , 如 RAM-Disk 等长驻於记忆体之用.
当然不是!
常驻方法1: int 21h / ah=31h (
http://www.ctyme.com/intr/rb-2723.htm )
常驻方法2: int 27h (
http://www.ctyme.com/intr/rb-4120.htm )
两种方法显然都只要在暂存器 dx 指定需要 keep 住的记忆体量就可以,
不需要用到原 po 说的 resize memory (int 21h / ah=4ah)
然後你说到 driver 如 ram-disk ... 等,
也不是用 system call 来配置本身的记忆体.
dos 本身有一套 device driver model.
一个 driver 需要保留的记忆体量, 是在当 dos 呼叫 driver 的 interrupt callback,
并且 command_code = driver_initialization 时, driver 会在一个 structure 里
的栏位填入需求记忆体量, 以便回传给 dos, 告知需求.
( Chapter 14 of
http://www.hadassah-col.ac.il/CS/Staff/Martin/micro_modern/masm/advdos.txt )
: 他的多工并行来自 Interrupt 及 DMA 等驱动动作.
多工并行? 那到底您说 dos 是不是 multi-task? multi-process?
: 通常在主记忆体的高低两端做分割使需要的程式可以常驻.
不懂! 为何要在高端与低端这两端做分割?
: > malloc 是语言的 library 做的, 通常是用 OS 的 allocate API 拿一大块,
: > 然後再由 library 自己管理.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.62.214.198
1F:推 cooller:要比dos的实务经验 有人能比jeunder强吗XD 140.112.18.5 04/11 11:55