Первые вычислительные машины были устроены таким образом, что единовременно могла работать только одна программа. Она загружалась всегда c начального адреса оперативной памяти, и интсрукции программы конструировались с учетом этого факта. Данные вводились с одного входного устройства (с перфокарт или с перфолент), а выводились на принтер. Поэтому особой нужды в специальной операционной системе не было.
С развитием вычислительных систем повышались быстродействие и объем оперативной памяти компьютеров, а также появились внешние магнитные носители (магнитные ленты и магнитные барабаны). Появилась возможность ввода текста с консоли управления ЭВМ. В связи с этим усложнились операции чтения информации в оперативную память и записи из оперативной памяти на внешние носители. Стало возможным сократить дорогостоящее время работы центрального процессора за счет сокращения простоев при загрузке новой программы: в оперативную память одновременно помещается несколько программ, и в то время, когда одна программа считывает данные или загружается сама, работает другая программа. Также использование нескольких устройств для установки магнитных лент и барабанов позволило не тратить время процессора при смене ленты. Однако эти новшества автоматически привели к серьезным техническим трудностям в старом программировании.
Первая связана с распределением памяти. Старые программы были рассчитаны на то, что они лежат в памяти, начиная с первой ее ячейки. При одновременном размещении нескольких программ в оперативной памяти месторасположение программы может изменяться от запуска к запуску. Также не определено местоположение данных, используемых программой, в том числе тех, которые читаются из внешних источников (или записываются туда). Это проблема разрешается за счет использования при программировании относительных адресов вместо абсолютных. Абсолютный адрес ячейки в блоке программы или в блоке данных равен сумме смещения ячейки относительно начала блока и адреса начала блока в оперативной памяти. Программы даже строиться стали по другому: все адреса в командах программы представлены в виде суммы фиксированных относительных адресов и смещения начала программы. Это смещение неизвестно в момент составления программы. Оно определяется только в момент размещения программы в оперативной памяти компьютера и может изменяться от запуска к запуску. Эта идея даже получила в современных компьютерах аппаратную поддержку: команды процессора включают учет смещения программы, которое хранится в одном из регистров процессора.
Вторая основная проблема тех времен – эффективное обеспечение процесса ввода-вывода. Дело в том, что процесс ввода-вывода кроме собственно процедуры ввода-вывода предполагает наличие многих других стандартных действий: определить номер устройства ввода или вывода, установить его наличие, если оно имеется – включено оно или нет, если включено – стоит на этом устройстве носитель информации (например, магнитная лента) или нет. Далее, если лента стоит – проверить, та ли это лента, если та – перемотать ее к тому месту, где начинаются нужные данные (поскольку на лентах большого объема размещались различные данные). И только после этого начинается непосредственный обмен данными оперативной памяти с внешним устройством. При этом надо еще отслеживать возможные повреждения на поверхности ленты или сбои при чтении информации с магнитной поверхности ленты. Каждая ошибка на этапе вввода или вывода должна обрабатываться определенным образом. И все это должен предусмотреть программист в своей программе.
8th Май 2011
|
Теги:
|