Взаимодействие устройств компьютера Работа процессора
Рассмотрим порядок, в котором обычно обмениваются информацией устройства компьютера во время выполнения программы. Пусть мы только-что придумали программу для перемножения двух чисел, одно из которых находится на дискете, а другое должно вводиться с клавиатуры. Вот алгоритм программы:
Ввести число с дискеты
Ввести число с клавиатуры
Перемножить эти числа
Показать результат на мониторе
Пусть мы придумали эту программу на языке VB и теперь хотим ее выполнить на компьютере. Для этого Visual Studio .NET должна уже быть установлена на жестком диске нашего компьютера. (Напомню, что для краткости я обозначаю Visual Studio .NET как VS.) Мы включаем компьютер, он несколько секунд готовится к работе, после чего мы нажимаем несколько клавиш. VS с жесткого диска через шину переписывается (загружается) в память. После этого VS дает нам понять, что готова принимать от нас программу, и мы эту программу на языке VB набираем на клавиатуре.
Все компьютеры могут выполнять программу только тогда, когда она находится в оперативной памяти.
В соответствии с этим требованием наша программа автоматически по мере ввода с клавиатуры отправляется в память и там запоминается. Примерно в это же время мы вставляем в дисковод дискету с одним из двух перемножаемых чисел. Как только вся программа введена, мы нажатием клавиши приказываем компьютеру ее выполнить. И вот что в общих чертах происходит дальше.
Программа компилируется. Допустим для простоты и для соответствия с алгоритмом, что в нашем случае после компиляции программа состоит из 4 команд на машинном языке, смысл которых соответствует алгоритму.
После этого программа на машинном языке выполняется. Начинается выполнение с того, что процессор приказывает памяти послать ему по шине первую команду программы. После того, как эта команда (ввод числа с дискеты) пришла в процессор, он «осознает» ее и отдает приказы устройствам компьютера на ее выполнение в соответствии с тем, как он ее осознал. В нашем случае он отдает приказ дисководу прочесть с дискеты число (пусть это было число 3) и направить его по шине в оперативную память, а оперативной памяти приказывает принять это число и запомнить. Как только число запомнилось, процессор считает команду выполненной и приказывает памяти послать ему вторую команду (которой оказался ввод числа с клавиатуры). Осознав ее, он приказывает компьютеру остановиться и ждать, когда человек введет с клавиатуры какое-нибудь число. Введенное число (пусть это будет -0.25), процессор тоже приказывает направить в память. После этого он принимает из памяти третью команду (умножение). Внутри процессора имеется арифметическое устройство – своеобразный автоматический карманный калькулятор, способный выполнять четыре действия арифметики. Процессор приказывает памяти послать ему по шине оба числа, перемножает их, после чего запоминает результат сам или отправляет его в память (предположим, он выбрал память). Наконец, он получает из памяти последнюю команду, согласно которой приказывает памяти же отправить результат (-0.75) на так называемую видеокарту, а той – принять результат и изобразить его на мониторе. На этом выполнение программы заканчивается, VS останавливается и ждет от человека ввода новой программы или исправления старой.
Итак, мы видим, что работа процессора состоит в том, чтобы считывать из памяти по порядку команды программы, осознавать их, после чего выполнять их самому или приказывать выполнить другим устройствам.
Работа оперативной памяти состоит в том, чтобы хранить программу во время ее выполнения, а также принимать от любых устройств, запоминать и отправлять в любые устройства любую информацию, с которой работает программа и которую укажет процессор. Такая информация, в отличие от программы, называется данными. В нашем случае данными являются числа 3 и -0.25 (это исходные данные решения задачи), а также ?0.75 (это данное является результатом). Программа – это предписание того, что нужно делать с исходными данными, чтобы получить результат, а данные - это информация, над которой производит действия программа и которая зачастую в программе не содержится. Так. в нашей программе нигде не заданы значения перемножаемых чисел. Оба они находятся совсем в другом месте – одно на дискете, другое – в голове человека.
Если программа предназначена для сложения 10000 чисел, записанных на дискете, то данными будут эти 10000 чисел. Если программа предназначена для подсчета количества слов в тексте рассказа, вводимого с клавиатуры, то данными будет этот текст. Если программа предназначена для распечатки на принтере изображения с экрана монитора, то данными будет изображение. Если программа предназначена для распознавания речи, вводимой в компьютер с микрофона, то данными будет звук. В подавляющем большинстве случаев данные во время их обработки хранятся в оперативной памяти.
Взаимодействие различных устройств компьютера можно уподобить взаимодействию нескольких заводов, стоящих вдоль скоростного шоссе (шины) и производящих друг для друга различную продукцию (информацию). При этом память – это не завод, а большой перевалочный склад. А на заводах собственных складов нет или они маленькие. Пусть сегодня один завод произвел для другого большое количество деталей, которое другой завод будет использовать в течение целого месяца. Целиком все детали этот второй завод сегодня забирать не будет, потому что ему складывать их некуда. Первому заводу их тоже негде хранить. Тогда первый завод везет все детали на перевалочный склад, откуда второй завод будет их понемножку забирать по мере надобности.