Управление выполнением программ



Вначале в компьютере могла работать только одна программа и она всегда располагалась с начала оперативной памяти – с нулевого адреса. При одновременном размещении нескольких программ в оперативной памяти адрес расположения программы в оперативной памяти может меняться от запуска к запуску. Также могут меняться адреса размещения данных, используемых программой, в том числе тех, которые читаются из внешних источников (или записываются туда). В такой ситуации невозможно оперировать с данными, используя их абсолютные адреса в оперативной памяти. Эта проблема решается за счет использования при программировании относительных адресов.

Пусть машинная программа оформлена как единый набор данных (программный код), который должен быть загружен в оперативную память компьютера и выполнен. Так как местоположение программы в оперативной памяти заранее неизвестно, то целесообразно представлять адрес байта внутри блока после размещения программы в виде суммы смещения байта относительно начала блока (или относительного адреса) и начального адреса размещения блока в оперативной памяти. Смещение в программном коде для данного байта после компиляции известно, а адрес размещения одинаков для всех байтов программы. Он определяется в момент размещения программы или данных в оперативной памяти компьютера. После этого нужная адресация обеспечивается технологией работы самого процессора. Все адреса в командах программы представляются в форме смещения относительно начала программы. При запуске программы фиксируется и запоминается в особом регистре начальный адрес размещения программы в памяти. При выполнении команды процессор прибавляет эту величину к адресу, указанному в команде.

Другая часть функций управления выполнением программ связана с выполнением подпрограмм. Подпрограммой принято считать самостоятельную часть программы, удовлетворяющую некоторым условиям. Выполнение каждого из них необязательно, однако в совокупности они представляют достаточную объяснительную силу:

¨ цель подпрограммы может быть достаточно компактно сформулирована (словесно или формально);

¨ подобная часть программы встречается в создаваемой программе или даже в нескольких программах неоднократно;

¨ объем данных, связывающих действие программы и подпрограммы, невелик: несколько значений для того, чтобы подпрограмма могла выполнить свою цель и несколько значений в качестве результата работы подпрограммы.

Выделение в программе подпрограмм имеет отчасти объективный, отчасти субъективный характер. Использование подпрограмм позволяет:

¨ структурировать большие программы, что значительно облегчает работу с текстами программ (поиск нужного места в программе, добавление и изменение фрагментов программы);

¨ создавать большие комплексы программ (методы восходящего и нисходящего программирования);

¨ локализовать ошибки в программах, так как можно тестировать каждую подпрограмму в отдельности;

¨ осуществлять коллективную работу над программами (разные подпрограммы могут делать разные программисты);

¨ создавать библиотеки подпрограмм для коммерческого и некоммерческого использования;

¨ составлять документацию на программы, включающую перечень и назначение подпрограмм.

С точки зрения использующих ее программ от подпрограммы требуется правильное выполнение возложенной на нее функции и хорошие эксплуатационные характеристики (скорость и объем ресурсов), а то, как подпрограмма устроена, роли не играет. Наличие определенной подпрограммы позволяет программисту вместо самостоятельного программирования какой-то части программы просто обратиться к услугам подходящей подпрограммы (если она существует), пусть даже она создана другим программистом.

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

В каждом работающем современном компьютере одновременно сосуществует множество программ, которые образуют несколько слоев, или уровней. На самом высшем уровне расположено ядро операционной системы. Ядро запускает в качестве своих подпрограмм программы, обеспечивающие различные режимы работы операционной системы. Те, в свою очередь, в качестве подпрограмм запускают служебные программы операционной системы. В том же ряду запускаются прикладные программы, которые могут вызывать другие программы.

Когда одна программа вызывает другую программу (подпрограмму), может потребоваться передать последней некоторую информацию, а затем получить обратно данные, являющиеся результатом ее работы. Эти данные называются параметрами подпрограммы (соответственно входными и выходными). Передача параметров производится тогда же, когда происходит передача управления подпрограмме и обратно. Каждая программа дополняется стандартными блоками в начале и конце подпрограммы, которые должны выполнять необходимые действия перед началом и после окончания работы программы. В частности, в них выделяется специальное место для параметров (буфер для обмена данными между программой и подпрограммой). В вызывающую программу вставляется стандартный блок, выполняющий все операции по обращению к подпрограмме, включая передачу и получение данных в буфере обмена в подпрограмме.

Для правильного функционирования каждой работающей подпрограммы (в том числе утилиты) необходимо задать некоторое окружение программы, состоящее из служебной информации. От запуска к запуску сама программа не меняется, а меняется ее окружение. При выполнении программы или подпрограммы процессор всегда считает ее окружение текущим. Если программа хочет вызвать подпрограмму, то необходимо сменить текущее окружение, а при завершении действия подпрограммы – восстановить его. Если подпрограмма, в свою очередь, вызовет третью программу, то мы будем иметь две программы, застывших в состоянии вызова, и два сохраненных окружения программ. Реально такая цепочка вызовов может быть достаточно длинной.

В частности, окружение программы должно содержать начальный адрес текущего размещения программы в памяти. (На самом деле программы состоят из трех сегментов: собственно программы (программного кода), сегмента данных и служебного сегмента, называемого стеком; поэтому окружение программы содержит три базовых адреса.). Процессор использует окружение текущей программы. Если одна программа хочет для выполнения какого-то действия обратиться к подпрограмме (говорят – вызвать подпрограмму), то этот вызов разбивается на ряд операций:

¨ текущая программа застывает на очередной команде и переходит в пассивное состояние;

¨ окружение текущей программы, включая значения всех регистров процессора, временно сохраняется в выделенном специально для этого участке памяти;

¨ в оперативной памяти отыскивается незанятый участок, достаточный для размещения подпрограммы, и она переписывается на этот участок;

¨ создается окружение подпрограммы, оно становится текущим для процессора, заполняются необходимыми данными регистры процессора;

¨ управление передается подпрограмме, для чего в адресный регистр просто записывается адрес первой команды программы (точнее, его смещение; базовый адрес заполняется на предыдущем этапе);

¨ когда подпрограмма заканчивает свою работу, восстанавливается окружение и значения регистров программы, вызвавшей данную подпрограмму;

¨ место подпрограммы в оперативной памяти освобождается, то есть считается впредь незанятым;

¨ первоначальная программа продолжает работать со следующей команды после той команды, на которой она остановилась.

Каждая операционная система характеризуется своими способами управления выполнением программ. Так в многопользовательской системе UNIX каждый экземпляр определенной программы, запущенной каким-то пользователем, называется процессом. Процесс проходит несколько стадий и характеризуется разными состояниями:

¨ порождение процесса заключается в подготовке операционной системы к выполнению программы;

¨ процесс находится в активном состоянии, если процессор непосредственно занят выполнением программы;

¨ процесс находится в состоянии ожидания, если программа еще не закончена и ожидает данных или ресурсов компьютера, а процессор занят выполнением другой программы;

¨ процесс находится в состоянии готовности, если все необходимое для работы программы есть, но процессор еще занят выполнением другой программы;

¨ окончанием процесса называется этап нормального или аварийного выполнения программы.

Все сведения о процессах размещены в единой таблице. Управление выполнением программ заключается в поддержке содержимого таблицы в соответствии с правилами перехода процессов из одного состояния в другое.

Управление памятью

В ситуации, когда на компьютере работает много программ, очень важно отслеживать, какие участки оперативной памяти используются той или иной программой. Эти данные все время меняются по мере возникновения и завершения процессов. Соответствующая функция операционной системы называется функцией управления памятью. Каждая операционная система умеет отличать занятые участки памяти от свободных. Для этого используются два способа. Первый способ заключается в разбиении всей оперативной памяти на блоки. В начале каждого блока размещается участок, содержащий информацию о занятости блока. При втором способе адреса и размеры блоков памяти, выделенных программе, сведены в таблицу.

При запуске новой программы или подпрограммы операционная система обращается к утилите управления памятью с запросом на выделение участка свободной памяти заданного размера. Утилита управления памятью отыскивает нужный участок и размещает там программу. Кроме того, иногда работающие программы требуют от операционной системы дополнительного выделения оперативной памяти для размещения так называемых динамических данных. Эта функция также возложена на утилиту управления памятью.

Дело в том, что размещение программ, подпрограмм и данных может быть статическим и динамическим. При статическом размещении выделение оперативной памяти для всех подпрограмм и всех данных происходит в момент запуска программы, и эта память считается занятой на все время работы программы. При динамическом размещении оперативная память для размещения подпрограммы или для размещения данных выделяется по мере необходимости (при обращении к подпрограмме или при запросе на выделение памяти для данных) и освобождается тогда, когда нужда в ней исчезает. Выделение и освобождение памяти – еще одна обязанность модуля управления памятью.

Память для данных выделяется и освобождается по специальным командам, адресованным операционной системе. Фактически это обращение к специальным утилитам операционной системы. В функцию управления памятью входит также защита занятых программами и данными участков оперативной памяти от ошибочного использования другими программами. Например, система MS DOS вообще не имела средств для предотвращения таких ситуаций, а в системе UNIX такие ситуации практически исключены.

Во всех наиболее известных операционных системах используется логическая модель оперативной памяти компьютера, которая называется виртуальной памятью. Виртуальной памятью называется память идеального компьютера, который операционная система конструирует для пользователей и работающих программ. Реально содержимое виртуальной памяти записано на внешнем носителе (винчестере). Виртуальная память разбита на блоки одинакового размера – страницы памяти. Настоящая оперативная память также разбивается на страницы того же размера. Так как реальная память меньше виртуальной, не все страницы виртуальной памяти могут одновременно размещаться в реальной памяти. В специальных системных таблицах содержится соответствие между номерами страниц оперативной памяти и номерами страниц виртуальной памяти, которые в них загружены.

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

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

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

Процедура сохранения и чтения виртуальных страниц называется своппингом (от англ swapping). В Windows размер виртуальной памяти составляет 232 байт (4 ггб). Всем работающим под Windows программам предоставляется пространство в виртуальной памяти. При этом каждая программа может адресоваться только в области, отведенной этой программе. Попытка извлечь или положить данные в виртуальную память за пределами своей области не будет выполнена. Таким образом осуществляется защита одних программ от возможного повреждения со стороны других программ. Исключение составляет ситуация, когда операционная система специально выделяет одну и ту же область для данных, используемых несколькими программами. Это делается для того, чтобы дать возможность обмениваться данными нескольким разными процессам.

Управление файловой системой

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

¨ создание, удаление, чтение в оперативную память, перезапись измененных данных;

¨ доступ к файлам по символьным именам;

¨ возможность доступа к файлам других пользователей;

¨ управление доступом к собственным файлам;

¨ восстановление файлов в случае повреждения.

Систему управления файлами составляет программное обеспечение для работы с файлами. Их применение позволяет прикладным программам переложить на операционную систему типовые операции с файлами. Можно выделить следующие задачи системы управления файлами:

¨ обеспечения всех вышеперечисленных типовых действий с файлами;

¨ гарантирование корректности данных, размещенных в файле;

¨ оптимизация временных характеристик работы с файлами;

¨ поддержка различных внешних носителей;

¨ исключение или минимизация потерь данных;

¨ обеспечение стандартного набора подпрограмм ввода-вывода;

¨ обеспечение коллективного использования файлов в многопользовательской системе.

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

Файловые системы различных операционных систем устроены принципиально одинаково. Все пространство внешней памяти разбито на диски файловой системы. Как правило, диск файловой системы соответствует физическому диску, но часто пространство одного физического диска разбивается на несколько логических дисков. Отдельный диск содержит список файлов и каталогов (в некоторых системах они называются директориями или папками). Это - верхний корневой уровень файловой системы. Каталоги верхнего уровня в свою очередь содержат файлы и каталоги второго уровня. Каталоги второго уровня содержат файлы и каталоги третьего уровня и т.д. В результате, чтобы точно идентифицировать файл, необходимо указать имя диска, последовательность имен всех вложенных каталогов, последний из которых содержит файл, а затем полное имя самого файла (которое обычно состоит из имени и расширения). Имеются отдельные особенности написания полного имени файлов и каталогов в разных операционных системах.

Каталог как физический набор данных также представляет собой файл, содержащий список входящих в него файлов и других каталогов. Для работы с каталогами и файлами операционной системе необходимо знать адреса их размещения на диске. Хотя файл с логической точки зрения представляет собой единый набор данных, физически он может размещаться на диске несколькими фрагментами. Для установления соответствия между именем файла и его физическим размещением во внешней памяти, используются специальные таблицы размещения файлов в памяти (FAT – File Allocation Table). С помощью этих таблиц операционная система по имени файла находит те диски внешней памяти и те сектора на дисках, в которых размещен файл.

Те модули файловой системы, которые имеют дело с физическими адресами файлов и обеспечивают непосредственную работу с файлами, называются базовой файловой системой. На этом уровне работа происходит с блоками данных определенного размера, не зависящими от содержания файла (обычно это 512б). Для чтения файла в память операционная программа выделяет буфер, размер которого равен стандартному размеру блока. Прикладная программа, читающая данные из файла, на самом деле читает данные из буфера, а перемещает нужные данные из файла в буфер система управления файлами. Аналогично, при записи в файл программа помещает данные в буфер, откуда они записываются в файл.

Существует несколько стратегий размещения файлов на внешнем носителе. При непрерывном размещении файлы размещаются один за другим в порядке создания. В этом случае каждый файл будет храниться одним фрагментом. Однако при изменении файла с увеличением размера файл придется перезаписывать на новое место. Другой альтернативой является задание максимального размера файла с запасом. Но тогда память на внешнем носителе будет расходоваться неэкономно.

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

Помимо задания таблиц, описывающих все файлы данного внешнего носителя, файловая система должна определять все свободные места на внешнем носителе. Это необходимо для того, чтобы можно было выделить свободное место для вновь образуемого файла. Существует несколько способов задания свободных блоков на диске. Можно хранить битовую строку для всех блоков диска, помечая единицами занятые блоки, а нулями – свободные. При другом подходе все свободное пространство описывается как один файл, задаваемый цепочками свободных блоков.

Таблицы FAT содержат по одной строке на каждый связный фрагмент файла. Все фрагменты одного файла содержат одно и то же имя файла. Ссылки от одного фрагмента к следующему обеспечивают сборку файла из различных фрагментов. Однако для пользователя все эти подробности остаются за кадром. Для него идентификация файла заканчивается тогда, когда операционная система находит имя файла в таблице FAT.

Файловая система должна обеспечивать доступ к одним и тем же файлам со стороны нескольких пользователей. Для этого в таблице FAT наряду с адресной информацией хранится информация о владельце данного файла и уровне его секретности. Используется широкий диапазон уровней доступа пользователей к файлам.

¨ пользователь не может прочесть содержимое каталога и поэтому не может узнать, какие файлы в нем содержатся;

¨ пользователь может узнать название файла и имя владельца и попросить владельца предоставить ему доступ к файлу;

¨ пользователь может запустить программу, но не может ее скопировать;

¨ пользователь может прочесть содержимое файла, но не может его изменить;

¨ пользователь может изменит файл, но толь добавив данные в его конец;

¨ пользователь может совершать любые операции с файлом, но не может изменять доступ к нему других пользователей;

¨ полный доступ.

В системе Windows 2000 используется файловая система NFTS, поддерживающая диски и файлы больших объемов, чем системы FAT16 и FAT32, используемые в Windows 98. Таблица NFTS позволяет лучшей безопасностью и большими возможностями восстановления данных в случае повреждения данных в файлах или повреждения FAT.

Управление прерываниями

Важным элементом управления процессом вычисления в компьютере являются прерывания. В частности, прерывание является средством обеспечения независимой параллельной работы различных устройств компьютера. С этой целью всегда, когда необходимо выполнить некоторую независимую операцию (например, ввод с клавиатуры), соответствующее устройство посылает процессору прерывание. По этому прерыванию процессор должен приостановить нормальный ход выполнения текущей программы и произвести некоторые промежуточные вспомогательные действия. Прерывание также возникает в случае появления ошибочных вычислений (например, в случае деления на ноль) или в случае сбоев при взаимодействии с устройствами компьютера.

Прежде, чем выполнить очередную команду, процессор проверяет, не поступило ли какое-то прерывание. Если поступило, то определяется номер прерывания. Затем процессор начинает выполнять стандартную программу обработки прерывания, соответствующую номеру полученного прерывания. Программа обработки прерывания прежде всего запоминает состояние регистров процессора и некоторых других параметров текущей программы, а затем выполняет действия, специфицированные прерыванием. В заключение программа обработки прерывания восстанавливает состояние регистров процессора и возвращается к выполнению текущей программы (если другое действие не предусмотрено программой обработки прерывания).

Прерывание работы процессора по запросу внешних устройств устраняет необходимость выполнения им неэффективных операций по систематической проверке готовности внешних устройств к обмену данными и снижает затраты времени на ожидание готовности периферийного устройства к обмену. Прерывания необходимы при обмене данными с большим числом асинхронно работающих внешних устройств. Запросы на прерывание бывают немаскируемыми и маскируемыми. Немаскируемые запросы реализуются аппаратно и поступают в процессор по специально выделенным для этого линиям шины управления. Немаскируемые запросы обладают наивысшим приоритетом. К ним относятся запросы от схем питания и аппаратуры контроля правильности передачи данных. Снижение уровня питания представляет опасность потери информации в ОЗУ. Наиболее надежные серверы для хранения информации содержат емкостные фильтры, которые при отключении электричества поддерживают уровень питания на время, достаточное для сохранения данных из ОЗУ. Схемы контроля питания подают запрос прерывания и совершают переход к подпрограмме аварийной перезаписи во внешнее ЗУ.

Маскируемые запросы поступают от внешних устройств и означают запросы на внеочередное выполнение каких-либо штатных действий, например, операций ввода-вывода. В блоке управления процессора есть разряд, содержащий флаг разрешения прерывания. Специальная машинная команда устанавливает этот флаг в такое состояние, которое запрещает прерывание. Другая команда разрешает прерывания. Момент появления запроса на прерывание не связан с выполнением основной программы. Процессор продолжает выполнять текущую команду основной программы. Он должен запомнить результат выполнения этой команды и номер команды возврата и приступить к выполнению прерывающей программы.

Операционная система MS DOS.

Дисковая операционная система (DOS) была разработана для IBM-подобных компьютеров. Часть операционной системы - базовая система ввода-вывода (BIOS) - встроена в компьютер и находится в постоянном запоминающем устройстве компьюте­ра. Ее назначение состоит в выполнении наиболее простых и универ­сальных услуг операционной системы, связанных с осуществлением ввода-вывода. Базовая система ввода-вывода содержит тест фун­кционирования компьютера, проверяющий работу памяти и устройств компьютера при включении его электропитания. Кроме того, базовая система ввода-вывода содержит программу вызова загрузчика операци­онной системы.

Загрузчик операционной системы — это очень короткая про­грамма, находящаяся на нулевой дорожке системного диска с операционной системой. Загружается та операционная система, загрузчик которой найден на системной дискете. На персональном компьютере это винчестер или флоппи-диск. Функция загрузчика DOS заключается в считывании в память основных модулей операционной системы и командного процессора DOS. После этого процесс загрузки завершается. Модули операционной системы представляют собой дополнение к базoвой системе ввода-вывода и реализуют часть основных услуги DOS, дополнительных к услугам BIOS.

Командный процессор DOS представляет собой файл с именем ”command.com”. Он обрабатывает текстовые команды, вводимые пользователем. Часть команд операционной системы, например Type, Dir или Сорy, командный процессор выполняет сам. Такие команды называются внутренними. Для выполнения остальных (внешних) команд пользователя командный процессор ищет на дисках утилиты с соответствующим именем и если находит, то загружает их в память и передает им управление. По окончании работы утилиты командный процессор удаляет ее из памяти и выводит сообщение о готовности к выполнению команд (приглашение DOS). Утилиты поставляются вместе с операционной системой в виде отдельных файлов. Эти программы выполняют действия обслуживающего характера, например форматирование дискет, проверку дисков и т.д.

Драйверы устройств это специальные программы, которые дополняют систему ввода-вывода DOS и обеспечивают обслуживание внешних устройств. Например, с помощью драйверов осуществляется работа с клавиатурой, монитором, принтером и т.д. Драйверы загружаются в память компьютера при загрузке операционной системы, их имена указываются в специальном файле с именем ”config.sys”. Такая схема позволяет добавлять новые устройства, не затрагивая системные файлы DOS.

В операционной системе MS DOS ряд функций по управлению запуском программ связан с конструктивными особенностями персональных компьютеров того времени. В них существовало ограничение на общий объем используемого адресного пространства оперативной памяти (640Кб). В поздних версиях можно было использовать дополнительную память (адреса от 640Кб до 1Мб). Специальные утилиты DOS позволяли разместить в этой дополнительной памяти служебные программы DOS и драйверы устройств и использовать их правильно. Прикладные программы размещались в основной памяти (адреса до 640Кб).

При этом MS DOS не поддерживает мультизадачный режим. Формально в каждый момент времени в оперативной памяти размещена и функционирует только одна прикладная программа. Однако для того, чтобы было возможно обрабатывать системные прерывания, был придуман особый механизм. Программы, обрабатывающие прерывания, размещаются в оперативной памяти, а адреса входов в них последовательно (согласно нумерации прерываний) помещаются в начальные байты оперативной памяти. Последовательность этих адресов называется вектором прерываний. По номеру прерывания выбирается адрес входа в соответствующую программу обработки прерывания Следует обратить внимание, что этот механизм заложен в конструкцию компьютера.

Данный механизм может использоваться для размещения в памяти других программ, которые маскируются под программы обработки прерывания, но фактически выполняют другие служебные функции. Такие программы называются резидентными. Чтобы запустить такую резидентную программу, надо выполнить программное прерывание с номером, соответствующим номеру входа в программу в векторе прерываний. Для того, чтобы защитить пространство, занятое резидентными программами, в DOS имеется специальный параметр, указывающий размер оперативной памяти, занятый резидентными программами.

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

Система MS DOS устарела и сейчас не используется в качестве операционной системы. Однако в те годы, когда она использовалась, было создано огромное количество программ, работающих под управлением этой системы. Поэтому во всех операционных системах существует режим, имитирующий работу системы MS DOS и позволяющий выполнять DOS-программы (говорят, что они эмулируют работу DOS). Поэтому необходимо иметь представление об этой операционной системе.


Дата добавления: 2018-10-26; просмотров: 378; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!