看板Programming
标 题Re: [问题] dos为何要有记忆体配置的中断指令?
发信站中央大学松涛风情资讯站 (Wed Apr 11 23:54:00 2007)
转信站ptt!ctu-reader!ctu-gate!news.nctu!news.ncu!news.csie.ncu!Evergreen
> ==>发信人: [email protected] (我不会C++), 信区: programming
> 换言之, I/O driver 或 kernel module 可以被当 Process 看待吗 ?
> 谢谢你的指教,and...容我在这边替我辩解:
> DOS没有mulit-process、Multi-task的能力,我想这是你我都有的观念。
> 但一个process (named A)可以load一段程式使之执行(named B)。
> 此时系统的状态是:B is running and A is suspended (因为DOS系统的限制).
原问者可能会有的一个疑点是除了 OS 与 driver 常驻的空间不该被使用者程式
覆盖外, 其余的记忆体从该程式开始的低位置到高端(一般都说是 640kB)整个都
可让使用者程式爱怎麽用就怎麽用, 干嘛还要一个多此一举的类似 malloc功能
的 system call.
实况是 command.com/command.exe 这个程式 (program A) 在置入外部执行程式
(program B)时会覆盖掉自己的一大部份, 是 B 覆盖了 command.com/exe (A)的
非常驻部份, 因此不能用 A is suspend 解释. (DOS 3.X 以上可以把 command.exe
常驻部份摆到近 1MB 的高端). 当使用者程式结束还回 DOS 时才又将 command.exe
的覆盖部份从系统磁片置入回来, 这个 CLI 这样设计是防止使用者乱抽换系统磁片
有关的. 因为这种 CLI 不完全常驻, 所以是 OS 的一部份, 但也不尽然是.
如果是个 Overlay program 要通知 OS 置入下一个片段的 overlay 时, 为了防止
透过 OS 置入另一个 overlay 时, 因 OS 分不清状况可能会覆盖掉每段 overlay
要共用的 common data area , 所以有需要通知 OS 保留该区的记忆体不要被覆盖.
可是, 通常 overlay 都将 common data area 摆在高位端, Overlay 程式的大小都
裁到小於高端, 不至於覆盖 common data area , 每段 overlay 都从同一低端摆起
就不用通知 OS 分割出来一块记忆区. 以前的 DOS 讲求精简, 不必要的不会做进去.
> 综合之前的讨论串,可以解释原发问者的问题:
> malloc可以防止:
> 1. process 跟 process 之间 及
> 2. process 跟 TSR、driver 之间的memory使用上的重叠。
> 不知还有哪些地方需要补充,指正,谢谢。
如果是 DOS , 不用 process 这个名词会更精确.
> : 这是有趣的问题 !
> : 另一个教书匠问题: 都嘛是程式, 都要被 CPU 执行, 干嘛取个不同的名词 ?
> 谈一些比较轻松的,最近一个IC designer,还跟我工作上有关系,
> 他在别公司写过一年的JAVA
> 说了经典名言:
> "硬体是我们作硬体的人架起来的,我之前写了一年的程式,...
> 写程式嘛有什麽难的....dirver还不是process的一种..."
> 我听了当场昏倒,心想:"做IC design,写过JAVA就了解程式设计,了解driver...."
> 这边先说个抱歉,我没有贬低JAVA的意思,J2EE在Enterprise上的应用也需要多年的
> 磨练才会有一定的功力,请勿因这段话鞭我。
> 只是发文到此觉得我们做的软体只因看不到活生生的实体,在台湾变的
> 爹不疼、娘不爱
> 抒发一下...
====
其实可能是相反, 软体一直是政府最受重视的, 很多政府外包案都是大把
大把的钱给软体业者, 也就是大家都知道的 "官商xx" , 做不出来都能减价部
份验收付钱. 做软体的通常比做硬体黑手的高学历, 也 "聪明的多" , 至少做
政府包案发生指鹿为马的本事可能是会更高.
软体落到今天的状况, 是因为再也没有硬体制造业黑手的可以骂可以怪了,
也就是 "原形毕露" 啦 ! 这不算是坏事, 能找到真正问题就能解了.
--
◎ Origin: 中央松涛站□bbs.csie.ncu.edu.tw From: 140.115.6.234