как DOS выполняла несколько процессов одновременно?

DOS всегда приводится в качестве примера операционной системы С одной задачей. Однако, когда команда выдается через командную строку, управление переключается из оболочки в команду, а затем переключается обратно в оболочку, когда команда завершается.Таким образом, одновременно выполняются два процесса. Что-то не так в моем понимании ?

3 ответов


нет, они не выполняются одновременно.

COMMAND.COM имел резидентную часть, которая была в памяти все время, и переходную часть, которую можно было выбросить по желанию.

когда вы запускаете программу, она обычно загружается вместо переходной части, а затем запускается. Когда программа вышла, она сделала это, вызвав код в резидентной части, который затем перезагрузит переходную часть, если это необходимо, и продолжит.

тот факт, что некоторые из код остался резидентом никоим образом не означает, что он "работает". Аналогичным образом, обширные участки MS-DOS (ядро) постоянно оставались в памяти, но они не были "запущены", если их явно не вызывала программа без ядра.

вот тут были можно сказать, что вещи запускаются одновременно, у DOS было много программ TSR (terminate и stay resident), которые будут запускаться, подключаться к прерыванию или DOS каким-то образом, а затем выходить, но оставляя некоторую выделенную память (где его код бывший.)

затем, в ответ на определенные события, что код будет выполняться. Возможно, одним из известных был Borland Sidekick, который был менеджером личной информации, который мгновенно выскакивал с нажатием клавиши.


в то время как другой процесс запущен, процессор командной строки не работает: это приостановлено. Единственным средством "многозадачности", доступным в DOS, было "прекратить и остаться резидентом".


не имеет значения, используете ли вы DOS или Windows, Linux или BSD или что-то еще на этом процессоре, это все равно. В этот период времени у вас для целей настоящего обсуждения была одна исполнительная единица, одно ядро, выполняющее инструкции, в основном по порядку. Не имеет значения, носят ли эти инструкции имя DOS или Linux или windows. Только инструкции.

Так же, как сейчас, как тогда, когда программа windows решает завершить его пытается сделать это красиво с некоторым вкус звоню. Когда программа linux завершается, она пытается сделать это красиво с некоторым вкусом вызова выхода в систему. И когда программа dos завершается, она пытается сделать это красиво с некоторым вкусом вызова выхода в систему. В оболочке, командной строке и т. д. linux, windows, dos, эта оболочка, которая является самой программой, загружается и ветвится в загруженную вами программу, и ваша программа работает некоторое время и, как упоминалось, пытается вернуться к предыдущей программе красиво с некоторым вкусом выхода. Так же, как когда оболочка, которую вы запускали, хочет вернуться, когда она закончена, она пытается сделать это красиво.

Как и в linux или windows, легче увидеть тогда, вы не запускаете ничего "одновременно" или "параллельно" по одному потоку команд за раз. (сегодня у нас есть несколько блоков выполнения и / или ядер, которые предназначены для каждого делать что-то параллельно с чем-то управлять ими, поэтому сегодня вы можете сказать "параллельно") вы хотите переключить "задачи" или "потоки" или "процессы" вам нужно прерывание, которое переключается на другой код, обработчик прерываний, и этот обработчик может вернуться к той же программе, которая была прервана, или переключиться на другую. Вы можете поставить любое имя на нем, вы хотите это, как вы делаете вещи выглядят, как они работают одновременно. dos, linux, windows и т. д., Как правило, вы переключаетесь с одной "программы" или бит кода на другой. linux и windows имеют свои ядра и операционную систему, которая называется во время прерывания, и DOS была, что также (ОСН, что Дос жив вы касаетесь досовской каждые несколько дней скорее всего (бензонасос, банкомат и т. Д.), дос тоже до сих пор используются в разработку и тестирование материнских плат для x86/компьютеры, ничто не может конкурировать с ним в качестве встроенной для платформы x86, не имеет Свободы, что DOS должна делать то, что вы хотите, поэтому обновления BIOS до сих пор распространяется как DOS программа). Обработчики прерываний дадут временные срезы различным bios обработчики и обработчики dos. переключение задач/процессов/потоков не было разработано или запланировано как операционная система, такая как linux или windows, но оно было там, для каждой версии dos были правила, которым вы следовали, и вы могли переключать задачи (tsrs-популярный термин). Просто разговаривая с дискетой, жестким диском и т. д. Во всем процессе был задействован код, он не был похоронен в аппаратном обеспечении, много вещей происходило параллельно. не отличается от драйвера контроллера жесткого диска в чем-то более сложном как linux или windows. По крайней мере, один, может быть, некоторые, не microsoft dos клоны могут многозадачность.

короткий ответ, когда у вас есть функция bob (), которая вызывает функцию ted ().

int bob ( int something )
{
...some code
...more code
   ted();
...some code
...more code
}

Боб() все еще работает? Они идут параллельно? Нет, код bob() все еще там, где-то, ожидая кода ted (), чтобы закончить то, что он делал, и вернуться. Пока ted () не сбой, он вернется, и bob () может продолжать выполнять. Боб отстранен, пока Тед выполняет. Не сильно отличается от оболочки или командной строки в более сложной операционной системе. Где-то есть функция, которая загрузила вашу программу в память и вызвала ее, это может быть вилка или Клон командной строки, которую вы запускали, чтобы эта командная строка могла продолжаться "параллельно" или клон может продолжаться параллельно. но концепция та же.

отличие от тривиальной c-программы, подобной приведенной выше, заключается в том, что приведенный выше код можно считать будучи разрешенным во время компиляции, где загрузка и запуск программы-это определенно время выполнения, в основном самоизменяющийся код, программа изменяет память, а затем переходит к ней. Когда он возвращает этот код, очищает, разматывает и выходит сам или ждет другой команды в зависимости от дизайна. DOS была очень-очень простой, куча системных вызовов в сочетании с кучей вызовов BIOS и очень простая командная строка, которая могла загружать программы и выполнять небольшое количество других команд. Это не было правила вы не могли обойти (Windows-это DOS программа), если программа, которую вы запустили не хочу, чтобы вернуться (вы могли бы, по крайней мере, на момент запуска Linux из DoS через промежуточную DOS программа) ну это как то портит ваш вопрос, что происходит, когда программа завершается, и линукс не вернуться, он взял на себя система.