DOS经常被用作单任务操作系统的例子。然而,当通过命令行发出命令时,控制从shell切换到命令,完成后又切换回shell。因此,存在两个同时执行的进程。请问我的理解有什么问题吗?
DOS经常被用作单任务操作系统的例子。然而,当通过命令行发出命令时,控制从shell切换到命令,完成后又切换回shell。因此,存在两个同时执行的进程。请问我的理解有什么问题吗?
COMMAND.COM
有一个常驻部分一直在内存中,并且有一个可以随时丢弃的短暂部分。当其他进程正在运行时,命令行处理器不会运行:它是被挂起的。在DOS中唯一可用的“多任务处理”设施是“终止并驻留”。
int bob ( int something )
{
...some code
...more code
ted();
...some code
...more code
}
is bob() still running? Are they running in parallel?
不是的,bob()代码仍然在那里等待ted()完成并返回。只要ted()不崩溃,它将返回并且bob()可以继续执行。bob被挂起,而ted执行。在更复杂的操作系统中,使用shell或命令行也没有太大的区别。在某个函数中,将程序加载到内存中并调用它,可能是您正在运行的命令行的fork或clone,以便该命令行可以“并行”运行,或者克隆可以并行运行。但是概念是相同的。
上述代码与一个简单的C程序的不同之处在于,可以将上述代码视为在编译时解析,而加载和运行程序肯定是在运行时进行的,基本上是自修改代码,程序修改内存,然后跳转到它。当它返回该代码时,清除,展开并退出自己或根据设计等待另一个命令。DOS非常简单,一堆系统调用结合一堆BIOS调用和一个非常简单的命令行,可以加载程序并执行少量其他命令。它没有任何规则,你无法绕过(Windows是一个DOS程序),如果启动的程序不想返回(至少在当时可以通过一个中间的dos程序从dos启动linux),那么它会有点混乱,您的问题是当程序完成时会发生什么,好吧,Linux没有返回,它接管了系统。