Инструменты пользователя

Инструменты сайта


igor:programmirovanie_shkolnikam

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
igor:programmirovanie_shkolnikam [2018/03/28 15:21] – [Какие были компьютеры раньше и какие бывают сейчас] igorigor:programmirovanie_shkolnikam [2019/02/10 00:21] (текущий) – [Программная совместимость и архитектурные классы (аппаратные платформы) компьютеров] igor
Строка 41: Строка 41:
 Когда появился первый компьютер? \\ Когда появился первый компьютер? \\
 На этот вопрос нет однозначного ответа. Во-первых, чем глубже интересуешься техникой, тем больше ощущаешь, что мы плохо знаем даже историю 30-40-летней давности, не говоря уж про более давние времена. Во-вторых, "первый компьютер" не возник на пустом месте - он вырос из каких-то более старых устройств. Что из них можно считать компьютером, а что нет? \\ На этот вопрос нет однозначного ответа. Во-первых, чем глубже интересуешься техникой, тем больше ощущаешь, что мы плохо знаем даже историю 30-40-летней давности, не говоря уж про более давние времена. Во-вторых, "первый компьютер" не возник на пустом месте - он вырос из каких-то более старых устройств. Что из них можно считать компьютером, а что нет? \\
-=== До середины ХХ века === +Эта тема выделена в отдельную статью: [[igor:istoria|Нетрадиционный взгляд на историю вычислительной техники]]
-Начнем с того, что всевозможные вычислительные устройства типа счетов с нанизанными на проволоку костяшками были известны с глубокой древности, но компьютерами они не могут называться даже с очень большой натяжкой. \\ +
-Леонардо да Винчи около 1500 года предложил счетную машинку с колесами. В последующие века было создано множество моделей машин, которые содержали колеса с нанесенными на них цифрами и по сути были потомками машинки Леонардо да Винчи. В XVII веке немец В. Шиккард, француз Б. Паскаль, голландец Г. Лейбниц предложили свои образцы механических калькуляторов, способных выполнять арифметические действия с многоразрядными числами, но перспектив промышленного применения эти машины не имели. \\ +
-Сейчас я хочу подвести читателя к мысли, которая кажется очевидной для экономически грамотного человека, но ни в каких книгах и статьях по вычислительной технике мне не встречалась. Мысль такая: вычислительная техника не живет в каком-то своем, отдельном, замкнутом мирке - она существует в мире, населенном людьми. А людям свойственно совершать поступки, руководствуясь не хочуками-нехочуками, а __коммерческим интересом__. В истории человечества новая техника появлялась много раз, и каждый раз она появлялась там и тогда, где и когда совпадали два условия: у людей накапливался для этой техники значительный объем работы, и за эту работу они были готовы платить. Так в XIX веке пароходы и железные дороги появились потому, что лошади больше не справлялись с возросшим объемом торговых грузоперевозок. А в XX веке автомобили и самолеты появились потому, что уже пароходы и железные дороги не справлялись... Но мы сейчас говорим о XVII веке, когда люди ездили на лошадях, дрались на шпагах, мололи хлеб на водяных мельницах, а по морю ходили под парусами, и 90% населения голубого шарика были совершенно неграмотны. И замысловатые машинки с множеством прецизионных металлических деталей смотрелись как курьезы и могли заинтересовать только таких же чудаков, как их создатели. \\ +
-Только в 1820-м году Т. де Кальмар во Франции наладил промышленный выпуск машин, получивших название арифмометров. Позже арифмометры стали строиться и в других странах. В нешей стране новейшая модель "Феликс" производилась миллионными тиражами и продавалась года примерно до 1980-го. Ближайший родственник арифмометров - механический кассовый аппарат, изобретенный в 1875 г. В нашей стране такие аппараты использовались примерно до 90-х годов ХХ века, пока не были заменены электронными. Среди арифмометров были немногочисленные "умные" образцы, но большинство было попроще: они могли выполнять только сложение и вычитание и использовались преимущественно в бухгалтерии. \\ +
-В XVII веке была изобретена логарифмическая линейка - прибор, позволявший выполнять поначалу только умножение и деление, а чуть позже "научившийся" и многим другим действиям. У меня хранится логарифмическая линейка, на которой еще отец считал студенческие курсовики, и я ею даже изредка пользуюсь. Это обычная прямая линейка, а у отца была еще круглая, похожая на карманные часы - довольно редкий экземпляр даже для своего времени, но она у нас не сохранилась. \\ +
-Логарифмическая линейка подкупает простотой устройства, карманной переносимостью и мгновенной готовностью к действию. Это прибор универсальный, но на этом же принципе позже были созданы специализированные приборы типа авиационной штурманской линейки (такие приборы времен Великой Отечественной войны можно увидеть в музее "Золотые ворота" во Владимире). \\ +
-В 1846 г. петербургский учитель музыки Куммер изобрел счислительназванный впоследствии по фамилии автора. Счислитель Куммера представлял собой плоскую коробку величиной со школьный пенал, внутри которой имелись подвижные планки с нанесенными на них цифрами. В какой-то мере счислитель Куммера был родственником арифмометров, отличаясь от них тем, что вместо колес в нем были прямые планки. Такие приборы выпускались до второй половины XX века. \\ +
-Арифмометр, как и счетные линейки, как и более современная машина - электронный калькулятор (изобретенный в 1971 г.), может производить __одиночные__ арифметические действия по команде человека. Чтобы устройство могло претендовать на название "компьютер", оно должно обладать способностью автоматически выполнять __последовательность__ действий (арифметических или иных), обеспечивающую решение некоторой задачиодной (специализированный компьютер) или многих (универсальный компьютер). \\ +
-В 80-е годы XIX века американец Г. Холлерит (в старых книгах может встретиться написание фамилии Голлерит) изобрел табулятор. По большому счету это шкаф с множеством счетчиков (первоначально 40, у следующих образцов могло быть по-разному), каждый из которых может увеличивать свое значение на единицу при замыкании электрической цепи. Носителем информации для табулятора служили картонные перфокарты наподобие тех, которые раньше использовались в жаккардовых ткацких станках. Перфокарта была разделена на позиции (числом таким же, как число счетчиков в табуляторе), и в каждой позиции можно было пробить отверстие. Когда перфокарта вводилась в табулятор, каждый из его счетчиков либо сохранял прежнее значение, либо плюсовал единицу, если соответствующее отверстие пробито. \\ +
-Для чего была нужна такая машина? Табулятор был впервые применен в 1890-м году для обработки результатов переписи населения США. Сведения о каждом жителе страны записывались на перфокарту путем пробивки отверстий в нужных позициях перфокарты. Например для сведений об образовании могли отвести 4 позиции"неграмотный", "начальное", "среднее" или "высшее". По завершении переписи все перфокарты были пропущены через табулятор, и каждый из счетчиков показал количество перфокарт, в которых имелось отверстие в соответствующей позиции, т. е. можно было увидеть прямо в цифрах, сколько в стране людей неграмотных, сколько с начальным образованием и т. д. В последующие десятилетия табулятор был усовершенствован, "научился" новым действиям. Подобные устройства выпускались до середины XX века, а в 1986 году на студенческой практике мне довелось видеть немецкий трофейный табулятор постройки, кажется, 1937 года. \\ +
-Именно табуляторы были первой продукцией знаменитой американской фирмы IBM. Это были громоздкие, тяжелые (почти в тонну весом) агрегаты из нескольких тысяч деталей. При работе они издавали шум, напоминающий пулеметную стрельбу. \\ +
-Табулятор представляет собой просто набор счетчиков, хотя и собранных в общем корпусе, но действующих по отдельности и выполняющих одну простейшую операцию: увеличение на 1. Компьютером такая машина считаться не может. \\ +
-Вам, вероятно, знакомо слово тотализатор? В представлении советского/российского человека, читавшего романы английского писателя Дика Френсиса, это слово прочно ассоциируется с преступными играми на ипподроме. С играми, ради которых людей порой убивают... Но давайте разберемся, что представляет собой тотализатор с чисто технической точки зрения. А представляет он не что иное как гибрид табулятора и арифмометра, или несколько арифмометров в одном: каждый из них, кроме одного, суммирует вводимые в него числа, а один счетчик - последний - суммирует все, что введено в прибор. То есть мы для множества чисел (ставок разных игроков на разных лошадей) подсчитываем постатейные подытоги (ставку на каждую лошадь) и общий итог. Когда все ставки приняты, владелец тотализатора сопоставляет полученные итоги и вычисляет процент выигрыша, приходящийся на каждую ставку. Машина подобного типа существовала и вне ипподрома, называлась она счетно-аналитической машиной и использовалась в бухгалтерии для решения задачи аналитического учета. В СССР первые такие машины (импортные) появились в 1925 г., а десятью годами позже в Москве был открыт Первый государственный завод счетно-аналитических машин, на котором выпускались аппараты конструкции В. Н. Рязанкина, способные не только складывать, но и вычитать. \\ +
-Табуляторы и арифмометры представляют собой //цифровые// устройства: каждая величина ("переменная"), используемая при вычислении, имеет __конечный ряд__ допустимых значений и не может принимать значения в промежутках между соседними значениями из ряда. В отличие от них логарифмическая линейка - устройство //аналоговое//: хотя на ней и нанесены деления, каждая переменная может принимать __непрерывное__ множество значений от нуля до максимума. \\ +
-В 20-е-50-е годы XIX века над созданием счетных машин работал английский математик Ч. Бэббидж. Он поставил амбициозную задачу построить "аналитическую машину" (не путать с машинами Холлерита и Рязанкина), которая могла бы выполнять арифметические действия по программе. Он только еще приступил к изготовлению деталей для машины, а его помощница (и вероятно единственная единомышленница) Ада Лавлейс уже написала для этой машины первую программу... \\ +
-Машина Бэббиджа явно опережала свое время. В эпоху, когда еще в помине не было никакой электротехники, механическая вычислительная машина должна была стать сложнейшим техническим изделием из всех, какие только могло вообразить человечество! На порядок сложнее любых пароходов и железных дорог! Построить такое чудо своими силами нечего было и думать. Время от времени Бэббиджу удавалось выбить какое-то финансирование из бюджета, но его вечно не хватало. Да и не очень-то охотно ему давали, зная его непостоянный характер. Он занимался разными науками, начинал и бросал, и опять начинал и опять бросал... Прожил долгую, полную событий жизнь и так и не увидел своего детища в работе. Непохоже, чтобы его это сильно угнетало. Он предвидел, что его наработки пригодятся лет через 50. В действительности же его научное наследие оказалось по-настоящему востребовано только на рубеже 30-х-40-х годов XX века: в 1938-1941 годах немец К. Цузе построил машины Z1, Z2 и Z3, используя теоретические наработки Бэббиджа и Буля (о котором чуть ниже), но на новой конструктивно-технологической базе с использованием электромагнитных реле. Если уж ставить вопрос о первом компьютере, то машины Цузе как раз и претендуют на это звание. Несколькими годами позже в США построен компьютер "Марк I", при проектировании которого также использовано наследие Бэббиджа. \\ +
-Еще один персонаж, которого мы не должны забыть, - английский математик Джордж Буль. Никаких вычислительных устройств он не строил - он был чистым теоретиком. В 1847-1848 годах он опубликовал несколько научных трудов по логике, на основании которых сформировалось учение, названное в его честь: //булева алгебра//. В свое время булева алгебра осталась недооцененной, но через 100 лет, когда потребовались теоретические основы создания современных компьютеров, о ней вспомнили, а уж как вспомнили, так больше не забывали: современный компьютерный мир без нее немыслим, об ее пересмотре даже вопрос не ставится. \\ +
-На первых русских линкорах, проектировавшихся около 1910-го года, впервые в нашей истории был внедрен принцип центрального управления стрельбой орудий главного калибра. Вообще-то приборы управления стрельбой были предложены петербургским часовым мастером Н. Гейслером еще в 90-е годы XIX века, но эти приборы только передавали данные от командира к орудиям и не содержали каких-либо счетно-решающих элементов. По итогам русско-японской войны стало ясно, что система требует усовершенствования. В Англии были закуплены счетно-решающие приборы конструкции А. Поллена, но что эти приборы собой представляли? Информация крайне скудная. Можно не сомневаться, что устройством ввода данных в этот прибор служил оптический дальномер, установленный на корабле в соответствующей надстройке. Также мне удалось узнать, что устройством вывода служили циферблаты со стрелками, расположенные в орудийных башнях. Задача наводчика сводилась к тому, чтобы повернуть орудия до совмещения со стрелками выходных данных прибора. Это ввод и вывод, а что внутри прибора? Можно только догадываться. \\ +
-Представим себе валик, закрепленный в подшипниках с возможностью поворота вокруг своей оси. Если валик не трогать, то он сохраняет угол поворота, т. е. представляет собой //запоминающую ячейку//, имитирующую некоторую величину, участвующую в расчетах. Эту величину можно сразу же отоображать визуально, если снабдить валик стрелкой и шкалой. Если валик поворачивать с некоторой скоростью, то его угловое положение будет представлять интеграл скорости, и получаем простейший вычислительный элемент - интегратор. Представим, что на валик насажено колесико, но не круглое, а имеющее какую-то криволинейную форму, и к краю колесика прижимается рычаг. Угловое положение этого рычага однозначно связано с угловым положением вала, но связане не непосредственно, а по какой-то зависимости (возможно сложной), определяемой формой колесика - и получаем вычислительный элемент - функциональный преобразователь. Два валика, соединенные системой рычагов, представляют сумматор... \\ +
-Несколькими годами раньше российский инженер Алексей Крылов изобрел дифференциальный интегратор - механическую вычислительную машину, также основанную на валиках, колесиках и рычажках и решающую дифференциальные уравнения (применялась при проектировании кораблей). \\ +
-Примерно в то же самое время был построен эскадренный миноносец "Новик" - быстрейший корабль своего времени. Его главным оружием были не пушки, а торпеды, и для стрельбы ими петербургский филиал компании "Эриксон" (во времена СССР - объединение "Красная Заря") построил прибор центрального управления (ПУТС). Информации по этому прибору еще меньше. В англоязычных странах и соответственно в переводных с английского книгах эти приборы могут называться директорами торпедной стрельбы. \\ +
-В 30-е-40-е годы двадцатого века строились эскадренные миноносцы проекта 7 и 7У - внуки "Новика". На них уже было три прибора управления стрельбой: для орудий главного калибра, для зенитных орудий и для торпед. На смену устаревшим ненадежным ПУТС Эриксона пришли оригинальные отечественные приборы, созданные заводом "Электроприбор" N212, а на кораблях более поздней постройки - лидерах - ставились ПУТС итальянской фирмы "Галилео". Закупка приборов передового технического уровня за рубежом, с одной стороны, не дает отечественным ученым и инженерам расслабляться, а с другой стороны, обогащает их ценным опытом. Так что в целом это нормальная практика, только ею не следует злоупотреблять. И уж совершенно недопустимо навязывать инженерам бездумное "передирание" иностранных образцов вместо создания своих, более совершенных. \\ +
-Прибор управления артиллерийским зенитным огнем (ПУАЗО) можно увидеть как в Артиллерийском музее, так и в Военно-морском, но эти экспонаты дают представление только о внешнем виде прибора. А что там внутри? Развинчивать музейный экспонат нам, конечно, не позволят. Однако давайте сделаем небольшое умственное упражнение: прикинем, какой прибор сложнее - для стрельбы по кораблям или по самолетам? \\ +
-Бой "корабль против корабля" идет в плоскости. Для нашего корабля нам нужны двумерные координаты X<sub>1</sub> и Y<sub>1</sub>, скорость V<sub>1</sub> и курс K<sub>1</sub>, для противника - аналогичный набор параметров X<sub>2</sub>, Y<sub>2</sub>, V<sub>2</sub>, K<sub>2</sub>. Если же мы ведем бой "корабль против самолета", то нам никуда не деться от использования всех тех же самых переменных, но нам потребуется еще одна координата - высота самолета, которую к тому же нужно как-то вычислить. Кроме того, поскольку скорость самолета гораздо больше скорости корабля, наш прибор должен обладать достаточным //быстродействием//, иначе его показания не будут успевать за реальной обстановкой. Очевидно, что ПУАЗО будет сложнее, чем прибор для стрельбы по кораблям. \\ +
-Могут ли эти приборы считаться компьютерами? \\ +
-Американский моряк-подводник Дж. Инрайт в своей книге "Синано: потопление японского секретного суперавианосца" рассказывает об имевшемся на его лодке приборе управления торпедной стрельбой, и этот прибор он недвусмысленно называет компьютером. Но ведь Инрайт - моряк, а не специалист по вычислительной технике. Можем ли мы согласиться с его трактовкой? На этот вопрос мы опять-таки не сможем ответить, пока не определимся, что считать компьютером, а что нет. \\ +
-Чтобы прибор мог считаться компьютером, он должен обладать, как минимум, одной из двух способностей: (а) выполнять не одну какую-то математическую операцию, как например арифмометр, а расчеты с множеством действий, когда результат какого-то действия используется в последующих действиях, т. е. реализовать //алгоритм// (об алгоритмах поговорим чуть позже) и (б) решать задачу многократно для изменяющихся исходных данных. Прибор, о котором пишет Инрайт, обоим этим требованиям удовлетворяет... \\ +
-Еще один аргумент "ЗА": состояние устройств вывода описанных выше приборов неоднозначно зависит от входных данных на текущий момент: оно зависит также и от того, что было на входе раньше. Иными словами, эти приборы обладают //памятью//. Однако есть и агумент "ПРОТИВ": алгоритм, реализованный в этих приборах, целиком определяется их конструкцией и не может быть изменен, т. е. такие приборы не программируются. \\ +
-Я пишу о морских вычислительных приборах, поскольку с ними хоть как-то знаком. Свои вычислительные средства были и в авиации: штурманские приборы, бомбовые и стрелково-пушечные прицелы... Так получилось, что до середины XX века военная вычислительная техника развивалась бурно, а гражданская заметно от нее отставала. Сейчас мы подходим к такой ситуации, что от приборов, которым всего-то лет 50 или чуть больше, не осталось никаких следов. Ни одного сохранившегося экземпляра, ни чертежей, ни эксплуатационной документации... Археологам легче найти золотое украшение двухтысячелетней давности, чем железку, которой пользовались наши отцы! Авторы даже самых толковых книг по истории военных самолетов, кораблей, танков не любят писать о приборах: они сами недостаточно хорошо ориентируются в этих вопросах и того же ожидают от своих читателей. \\ +
-В 1936 году В. С. Лукьянов, основываясь на опыте уже упоминавшегося нами Крылова, создал гидравлический интегратор - специализированное устройство, решающее задачу интегрирования. Интегрирование (лат. накопление, объединение) - в простейшем случае нахождение интеграла от некоторой функции (чаще всего меняющейся от времени) - эта задача изучается в старших классах школы, но этим же термином называются и более сложные (университетского уровня) задачи - решение дифференциальных уравнений. В качестве рабочей субстанции использовалась вода. Она двигалась по стеклянным трубкам, наполняла сосуды, так что весь процесс решения задачи можно было наблюдать зрительно. В течение без малого двух десятилетий Лукьянов работал над усовершенствованием своих интеграторов, каждая следующая модель была сложнее предыдущей и соответственно могла решать более сложные задачи. Использовались эти устройства чуть ли не до 1980-х годов. \\ +
-Иногда считают, что Лукьянов был единственным автором вычислительных устройств, использующих воду, но это не так: в 1949 году У. Филлипс в Новой Зеландии в гаражных условиях, из подручных материалов, вплоть до обломков старых самолетов, построил водяной компьютер MONIAC. Это было едва ли не первое вычислительное устройство, построенное как учебно-демонстрационное пособие специально для моделирования экономических процессов. MONIAC неплохо себя проявил, после чего было построено несколько серийных образцов, один из которых работоспособен до сих пор. Он находится в Кембриджском университете и ежегодно демонстрируется студентам. \\  +
-Вы, вероятно, слышали про немецкую шифровальную машину "Энигма"? Может быть, видели один из фильмов с таким названием? Кстати, похожие машины были и у нас, но, благодаря отсутствию установленных фактов "взлома" шифра противником, наши машины остались практически неизвестны широкой публике, а история раскрытия англичанами и американцами шифра "Энигмы" сделала этой машине большой посмертный пиар. \\ +
-Можно ли считать "Энигму" компьютером? По-моему, нет. В лучшем случае она тянет на специализированный гаждет. Зато машина "Бомба", которую англичане построили для раскрытия шифра "Энигмы", к компьютерам приближается вплотную. Когда же вместо "Энигмы" немцы построили более хитрую машину "Лоренц", англичане ответили им своим "Колоссусом" (1943 г.). В создании "Бомбы" участвовал математик Алан Тьюринг. "Бомба" была __специализированным__ устройством, но, работая над ней, Тьюринг уже задумывался о том, что делать дальше, и выдвинул принципы построения __универсальных__ машин: (1) машина должна иметь множество одинаковых запоминающих ячеек, (2) любая математическая операция может быть выполнена с данными из любых ячеек, (3) чтобы указать машине, какие операции нужно выполнять и над какими данными, пишется //программа//, которая не "ввинчивается" в машину намертво, а помещается опять-таки в запоминающие ячейки, где она может быть быстро и легко заменена без ущерба для "железа". Как мы теперь видим, Тьюринг был не первый, кто додумался до этих принципов (за исключением того, что в машинах Цузе программа не хранилась в запоминающих ячейках, а читалась с перфоленты). Тьюринг был первым, кто заявил эти принципы вслух, и первым, кого услышали, в итоге получилось так, что он считается основоположников современной архитектуры компьютеров. В рамках принципов, выдвинутых Тьюрингом, были построены машины: в Англии - EDSAC (1949 г.), в США - ENIAC (1944 г.) и EDVAC (1949 г.), которые уже без всякой натяжки могут считаться настоящими компьютерами. Это история 40-х годов двадцатого века. \\ +
-**Первобытная эпоха** в компьютерном мире продолжалась до середины XX века и характеризовалась следующим: \\ +
-* Половина объема вычислений, производимых во всем мире с применением технических средств, приходилась на механические и электромеханические вычислительные устройства, выполняющие только одиночные операции под непрерывным управлением человека, а другая половина - на специализированные приборы, значительная часть которых работала по аналоговому принципу и программировалась только __конструктивно__, т. е. программа встраивалась в прибор намертво и ее невозможно было сменить без коренной переделки аппаратуры. \\ +
-* Не существовало ни общей теории построения вычислительных машин, ни каких-либо единых стандартов их конструирования: каждый автор создавал свое детище с нуля, был вынужден вычерчивать отдельно каждую деталь. Все это сильно замедляло работу. Движущей силой прогресса были одиночные гении-изобретатели, многие из которых остались непонятыми и непризнанными. Что же касается программирования, то его по сути не было, если не считать той самой первой программы, которую составила Ада Лавлейс. \\ +
-Появление программируемых цифровых компьютеров ознаменовало собой первую __смену исторических эпох__ (не путать с поколениями ЭВМ). \\ +
-=== 50-е-60-е годы ХХ века === +
-В годы Второй мировой войны и после нее наметился коренной пересмотр взглядов человечества на вычислительную технику. Развивалось кораблестроение, авиация, ракетная техника, энергетика (в т. ч. атомная). На повестке дня стояло освоение космоса. Стало ясно, что современные технические изделия невозможно создавать, полагаясь только на интуицию мастеров - нужны подробные и точные расчеты. Произошло именно то, о чем мы говорили в предыдущей главе: людям нужно было очень много считать, и это невозможно было делать бесплатно. Кто имел хороший компьютер, тот имел наше все, а кто компьютера не имел, был обречен оставаться лузером - не важно, просто человек, или завод, или целое государство. \\ +
-В нашей стране из-за потерь, причиненных войной, работы по созданию новой техники замедлились, но чуть позже, в 50-е годы, наши инженеры вступили в "компьютерную гонку" и достигли в ней впечатляющих результатов. Нам не нужно было догонять Америку - Америка догоняла нас. Я не буду перечислять все выдающиеся советские ЭВМ. Попробуйте погуглить "Урал", "Минск", "Раздан", "Наири"... В 1958 г. была создана ЭВМ М-100, которая стала "Новиком" среди компьютеров - одной из быстрейших в мире для своего времени, и навсегда осталась таковой среди ламповых ЭВМ. В этой машине, а отнюдь не в американском "Пентиуме" 1990-х годов, впервые были воплощены такие технические решения, как конвейерное выполнение операций и кэш-память ("сверхоперативная память" по терминологии того времени). В 1960-е годы было создано семейство быстродействующих электронно-счетных машин - БЭСМ. Новейшая машина этого семейства - БЭСМ-6 - в первые годы своего существования (1968-1970) также была быстрейшей в мире. БЭСМ-6 не создавалась для рекордных гонок - это была обычная серийная машина, было изготовлено свыше 300 штук. А вот другой пример: МИР - Машина Инженерных Расчетов. Это была простенькая машинка, на рекорды она на первый взгляд не претендовала, зато на ней был реализован интересный командный язык Алмир (АЛгоритмический язык для МИР), позволявший производить сложные математические и физические расчеты с минимумом трудозатрат на программирование. В этой машине были воплощены новые для того времени технические решения (некоторые из них были впоследствии забыты), позволявшие решать сложные численно-расчетные задачи практически с такой же скоростью, как на гораздо более мощных машинах. По сути, эта машина и язык Алмир стали бабушкой и дедушкой нынешнего "Матлаба". Эта машина занимала всего несколько квадратных метров в помещении, обслуживалась одним человеком и была, таким образом, едва ли не первым персональным компьютером. Это было в 60-е годы двадцатого века. \\ +
-К сожалению, такое счастливое положение дел плохо уживалось с социалистической плановой экономикой. Тогдашние руководители нашего государства, будучи людьми с довольно посредственным уровнем образования, косо смотрели на любую сложную технику, в том числе на вычислительную технику и программирование. В один прекрасный день нашлась умная голова, которая придумала использовать новейшие ЭВМ для прогнозирования экономического развития страны. И какие бы ни использовали методики прогнозирования, результаты получались неутешительные. Мы-то теперь видим, что безрадостные прогнозы сбылись, мы теперь даже можем понять глубинные причины этого... Но тогдашнее правительство и ЦК КПСС во главе с Политбюро ничего такого видеть-слышать не желали, и в итоге было принято преступное (на мой взгляд) решение о прекращении собственных разработок вычислительной техники и об использовании вместо них американских образцов. Это решение не было осуществлено полностью: страна нуждалась в собственных компьютерах военного назначения. А вот "на гражданке" место оригинальных русских машин заняли СМ-4 (американская PDP), болгарский ИЗОТ (американский VAX), ЕС ЭВМ (американские IBM). Новейшим представителем последнего семейства была ЕС-1060 - мне довелось иметь с ней дело во время обучения в институте. Эта машина занимала зал размером с 3 хороших трехкомнатных квартиры и потребляла электроэнергию, как троллейбус. По этим параметрам ЕС-1060 была близка к БЭСМ-6, но значительно уступала последней по боевым возможностям. К тому же эта машина была почти постоянно неисправна и работала буквально несколько часов в год. Другие "цельнотянутые из США" машины были ничуть не лучше. Но самое плохое было то, что к этим машинам было крайне скудное программное обеспечение, а то, что имелось, было низкого качества. \\ +
-Мы говорим в основном про цифровую вычислительную технику, однако давайте вспомним и аналоговую. В середине XX века она отказалась от валиков, колесиков и рычажков, перешла полностью на электрический, а затем на электронный принцип действия. В 50-е годы аналоговые и цифровые машины, варажаясь языком конного спорта, "шли ноздря в ноздрю": цифровые машины хотя и обещали более быстрое решение сложных задач, но сами были громоздки и дороги. Даже самая "простая" цифровая машина тех времен занимала порядочных размеров комнату (скорее зал) и потребляла очень много энергии. В нашей стране было построено семейство аналоговых машин МН ("модель нелинейная"): некоторые представители этого семейства были в настольном исполнении, размером как большой радиоприемник, и цена была такова, что позволяла выпускать эти машины в огромных количествах. Но ничто не могло помочь преодолеть главный недостаток аналоговых ЭВМ - их "умственную ограниченность". Аналоговая машина непригодна для решения народнохозяйственных задач, т. к. там нужно хранить множество показателей, причем хранить с абсолютной точностью. Операция сложения на аналоговой машине как-то получается, умножение ей уже дается с большим трудом, зато такая машина великолепно справляется с операциями дифференцирования и интегрирования. Поэтому аналоговые ЭВМ долго применялись для решения задач моделирования непрерывных процессов, таких как обтекание воздухом самолетного крыла или полет ракеты в околоземном пространстве. Решение таких задач на цифровых ЭМВ было поначалу сложно и дорого, главным образом из-за необходимости привлекать к работе программистов. Однако позже в области цифровых ЭВМ и их программирования имел место большой прогресс, и аналоговая техника стала терять рынок. К 1960-м годам доля аналоговых ЭВМ в общем объеме переработки информации стала уже ничтожно мала. Аналоговые машины еще строились, но во все меньших и меньших количествах. Строят их и сейчас, уже в единичных количествах, в основном в качестве лабораторных стендов для учебных заведений. \\ +
-**Эпоха древней компьютерной цивилизации** характеризуется тем, что программируемые цифровые вычислительные машины стали выпускаться на заводах серийно и начали вытеснять технику прежней эпохи, как электромеханическую, так и электронную аналоговую. Введенный мною термин "цивилизация" наверняка вызовет возражения у читателей, особенно у тех, кто интересуется "настоящей" историей. Я настаиваю на этом термине, потому что в рассматриваемую эпоху в СССР, США и Англии, а чуть позже и в других странах, сформировалась компьютерно-программная __промышленность__, движущей силой развития которой были уже не энтузиасты-одиночки, работавшие в гаражно-коленочных условиях, а инженерные коллективы, вооруженные научными теориями и имеющие серьезную финансовую поддержку. \\ +
-Для большинства ученых, инженеров и студентов вычислительная техника была все еще совершенно недоступна и неизвестна. Для тех счастливчиков, у кого на работе или в учебном заведении имелись какие-то ЭВМ, основным режимом работы был пакетный: задачи, решаемые в интересах множества пользователей, объединялись в пакет, который решался последовательно от начала к концу. Чтобы обеспечить работу ЭВМ без простоев, нужно было к моменту запуска иметь все надлежащие данные в готовности. Подготовку данных целесообразно было производить параллельно с подготовкой самой машины, т. е. на отдельном устройстве. Занимались этим специальные работники - операторы подготовки данных - на специальных рабочих местах, оснащенных устройствами подготовки данных. Основным носителем данных для ввода в ЭВМ была перфокарта. УПД на перфокартах (не путать с перфоратором - устройством вывода данных из ЭВМ на перфокарты) представляло собой электромеханический прибор с клавиатурой наподобие пишущей машинки. При нажатии клавиши на перфокарте пробивались определенные отверстия. При этом оператор не видел результатов нажатия. Во избежание ошибок по завершении пробивки каждой перфокарты (обычно она содержала одну строку исходного текста программы) оператор должен был ввести строку еще раз, при этом пробивка не производилась, а производилась только сверка нажатых клавиш с данными, пробитыми на перфокарте. Если обнаруживалось несовпадение, то перфокарта исправлению не подлежала и браковалась, и весь процесс приходилось повторять заново (и не факт что с успешным результатом). По окончании подготовки всех данных колоду перфокарт из лотка УПД переносили на считыватель, подключенный непосредственно к ЭВМ. Когда машина была готова, ее запускали. Результаты расчетов выводились на принтер и выкладывались в ящик, где пользователь мог их взять. С момента подачи заявки на вычисления до получения ответа могло пройти несколько дней. \\ +
-Технология подготовки данных на перфокартах была весьма затратна, и в 60-е годы XX века для замены перфокарт были предложены более прогрессивные носители данных: магнитные ленты (МЛ) и магнитные диски (МД). Соответственно были созданы устройства подготовки данных на магнитных лентах (УПДМЛ) и на магнитных дисках (УПДМД). Оператор, работавший на этих устройствах, видел каждый введенный знак на экране непосредственно после ввода и мог исправлять ошибки по мере их обнаружения, что позволило сократить трудоемкость работы и уменьшить нервную нагрузку на работников. \\ +
-По таким экономическим показателям, как объем, вес и стоимость носителя в пересчете на 1 байт информации, МД и МЛ были предпочтительны, тем более что они были многоразовые (в отличие от перфокарты, которая могла записываться только один раз). Было бы логично ожидать, что МЛ и МД быстро и полностью вытеснят перфокарты, но этого не произошло. С одной стороны, переоборудование ВЦ на новые носители требовало существенных капитальных затрат. С другой стороны, перфокарты представляли определенное удобство: внесение изменений в программу производилось путем изъятия, замены или вставки отдельных перфокарт, без переписывания всей программы. Аналогичная операция на МД или МЛ была сопряжена с определенными трудностями: на первоначальный текст приходилось писать //патчи// (англ. patch - лоскуток, заплатка, т. е. небольшой кусок текста, который нужно было наложить на определенное место изначального текста). Патчи записывались на МД или МЛ отдельно от основного текста, а операция их наложения была источником дополнительных ошибок. Технология наложения патчей применяется и сейчас, но только там, где это действительно необходимо. \\ +
-Электронные цифровые вычислительные машины //первого  поколения// (1950-х годов) строились на электронных лампах. Они (и лампы, и машины) были громоздки и нежны и потребляли очень много электроэнергии. Устанавливались они в специально оборудованных зданиях или помещениях - вычислительных центрах (ВЦ). Около 1960-го года на смену лампам пришли более компактные, надежные и энергоэкономичные транзисторы - так появились ЭВМ //второго поколения//. Наметилось разделение двух направлений в развитии вычислительной техники: с одной стороны, никто не отменял //"больших"// ЭВМ с новыми техническими возможностями, казавшимися немыслимыми всего несколько лет назад. С другой стороны, стало возможным строительство боле простых //малых ЭВМ//, более компактных и дешевых, которые можно было бы строить в больших количествах. Новая элементная база позволила сделать компьютер более прочным и "жизнестойким", и примерно к 70-м годам XX века наука и промышленность подошли к созданию компьютера, который можно было бы установить на корабль или самолет. В 1980-е годы многие навигационные задачи на флоте и в авиации решались с помощью компактных и надежных бортовых компьютеров. В обиход вошел термин "авионика" - электроника для авиации. Дальнейшее разделение направлений развития привело к созданию //микро-ЭВМ//, которые, при некоторой ограниченности интеллектуальных возможностей, могли бы работать прямо в заводских цехах, взаимодействуя с установленным там оборудованием. Так в 1960-е годы появились промышленные роботы и станки с числовым программным управлением (ЧПУ) - предки нынешних микроконтроллеров. Они стали предвестниками очередной смены исторических эпох. \\ +
-Еще одна черта древней эпохи: тогдашние ЭВМ были __вычислительными__ машинами в полном буквальном смысле, т. е.  решали задачи, связанные со сложными математическими и физическими расчетами, и по всем инженерным решениям были "заточены" под эти задачи. Однако в 1960-е годы люди начали задумываться об использовании ЭВМ для решения задач в области экономики и управления производством, а еще чуть позже - и для других задач, в которых вычисления играли второстепенную роль. \\ +
-Мы рассмотрели компьютеростроение древней эпохи, теперь коснемся программного искусства. Применительно к этой эпохе слово искусство мне представляется абсолютно оправданным, потому что программистов было мало, налаженной системы обучения не существовало, а для непрограммиста разработка программ представлялась чем-то совершенно запредельным. \\ +
-В программировании немало вопросов, которые трудно понять и еще труднее объяснять. Но кажется я нащупал подход, который приближает нас к пониманию. Вообразим, что программа - живое существо, которое обитает в некоторой внешней среде. Чтобы организм мог жить, он, очевидно, должен быть приспособлен к той среде, в которой живет, но невозможно представить такой организм, который мог бы жить в любых условиях и мог бы приспособиться к любому их изменению. \\ +
-//Прикладная программа// создается для решения какой-то жизненной, практической задачи. Применительно к эпохе, которую мы сейчас рассматриваем, - научной или инженерной, потому что других почти не было. Прикладная программа 1950-х годов предназначалась для конкретного компьютера и обитала в нем подобно раку-отшельнику в своей раковине: все, что надо, она вынуждена была делать своими вот этими клешнями, не надеясь на чью-либо помощь. Такой образ жизни не способствует быстрому умственному развитию: попросту говоря, прикладной программист был вынужден тратить много сил на всевозможные вспомогательные действия, прежде всего на ввод и вывод данных. Программы для микроконтроллеров - скетчи - и сейчас живут так. Но настоящие проблемы начинаются, когда старая "раковина" разваливается и "раку" приходится переселяться в новую. Это процесс непростой и небыстрый, и вообще не факт что с шансами на успех: при переносе программы со старого компьютера на новый что-то в программе наверняка потребуется переделать. Только что, в 40-е-50-е годы XX века, мы наблюдали переход от первобытности к цивилизации в компьютеростроении, а чуть позже, в 50-е-60-е годы, аналогичный процесс имел место в программировании. Люди пришли к пониманию, что вместо создания программ, с трудом приспосабливающихся к изменениям условий внешней среды, гораздо эффективнее будет создать для них искусственную среду обитания - "цивилизованную", более комфортную, чем "дикая природа". Такой средой стали //операционные системы// (ОС). Операционная система является принадлежностью конкретного компьютера и сама не решает никаких прикладных задач. ОС древнекомпьютерной эпохи может рассматриваться как подставка-подкладка под прикладную программу, которая позволяет нашей зверюшке жить, ни в чем не нуждаясь: если требуется какое-то типовое вспомогательное действие, то прикладному программисту не нужно программировать его самому - он программирует лишь //системный вызов//, все остальное операционная система сделает как надо. Теперь, если мы создаем новый, более совершенный компьютер на замену старому, нам нет необходимости переделывать все имеющееся программное обеспечение: достаточно сделать новую операционную систему, в которой наши прикладные программы будут жить с комфортом, не подозревая о том, что компьютер уже другой. \\ +
-=== 70-е-80-е годы ХХ века === +
-С появлением транзисторов стремление проектировщиков ЭВМ создать небольшое, недорогое и энергоэкономичное изделие не только не остановилось - наоборот, оно еще усилилось. В 1960-е годы была изобретена интегральная микросхема - устройство размером с транзистор (порядка 1 см), содержащее несколько десятков транзисторов и представляющее собой целый блок, реализующий некоторую операцию по обработке данных. В наше время уже никого не удивляют микросхемы с миллионами транзисторов. Так появились ЭВМ //третьего поколения//, к которому относятся и вся наша нынешняя вычислительная техника. Однако новое поколение само по себе не означало смены исторических эпох: прогресс в деле миниатюризации элементов ЭВМ был и раньше, и позже. Смену исторических эпох я увязываю не с микросхемами, а с внедрением в повседневную практику диалогового режима общения пользователей с ЭВМ: теперь пользователь мог не готовить все программы и данные заранее перед запуском машины, а вводить все в уже работающую машину и через короткое время (порядка секунд) получать от нее ответ. Операция подготовки данных стала не нужна. \\ +
-В 70-е годы XX века появились видеотерминалы, обеспечивавшие работу пользователя с ЭВМ в диалоговом режиме. Терминал (абонентский пункт) - оборудованное рабочее место пользователя, установленное, как правило, за пределами машинного зала, но соединенное с компьютером проводами типа телефонных или телеграфных. В принципе, абонентские пункты, которые можно было установить на значительном расстоянии от ЭВМ, были и раньше: в качестве терминалов использовали телетайпы и электрические пишущие машинки. Однако повсеместное внедрение терминалов сдерживалось двумя факторами. Во-первых, для работы ЭВМ с терминалами были нужны многопользовательские операционные системы разделения времени (ОСРВ) или системы виртуальных машин (СВМ): они имелись далеко не везде, да и качество "крякнутых" американских программ, и квалификация тогдашних сисадминов оставляли желать лучшего. Во-вторых, чтобы пользователи могли плодотворно работать в диалоговом режиме, необходима многочасовая непрерывная работа самой ЭВМ, что тоже удавалось не всегда. Так, например, в Ленинградском Электротехническом институте (ЛЭТИ) в 80-е годы XX века имелся вычислительный центр, оснащенный ЭВМ ЕС-1060, и к нему было подключено несколько терминальных классов, но они не могли по существу эксплуатироваться именно из-за постоянной неготовности ЭВМ. В результате практически до 1988 года студенческие курсовые проекты по программированию приходилось выполнять в пакетном режиме с использованием перфокарт. \\ +
-Принцип обслуживания множества пользователей (абонентов) одной машиной в диалоговом режиме жив и сегодня и носит название //мейнфрейм// (англ. mainframe). Этим же словом называется и сама машина. Близкое по смыслу слово - //сервер// - компьютер (или программа), смысл существования которого сводится к выполнению команд, поступающих с других компьютеров. Различие между этими понятиями довольно тонкое. Принцип мейнфрейма привлекателен прежде всего экономически: он позволяет сосредоточить финансы и людские силы на одном компьютере и тем самым придать последнему максимально богатые технические возможности, которые становятся доступны каждому из абонентов. Абонент подключается к мейнфрейму на коммерческих условиях и решает свои задачи, независимо от того чем занимаются другие абоненты. Мейнфрейм работает по принципу разделения времени. Для него не существует понятия перегрузки: сколько бы ни было пользователей, все они обязательно будут обслужены. Но раньше других получит свои результаты тот, кто пишет быстро работающие программы. А тот, кто пишет программы тяп-ляп, вынужден будет сидеть какое-то время перед пустым экраном, и это очень мудро. Сервер, как правило, обеспечивает централизованное хранение данных или выполнение каких-то операций с целью обеспечить совместную работу множества пользователей. Механизма разделения времени на сервере может не быть, но тогда, если вдруг один или несколько пользователей зададут серверу бОльший объем работы, чем он может выполнить, то сервер может "упасть", т. е. вообще перестать реагировать на запросы пользователей. \\ +
-Рабочее место, соединенное с мейнфреймом или сервером, называется //клиентом//. В современном компьютерном мире под этим словом чаще подразумевается не машина, а программа, образ действия которой состоит в том, чтобы не решать сложную задачу своими силами, а послать соответствующую команду на другой компьютер, и полученный от него ответ предъявить пользователю. Интернет-браузер, например, представляет собой не что иное как WEB-клиент. Вам может встретиться выражение //тонкий клиент// - это устройство (или опять-таки программа), полностью зависимое от мейнфрейма, не способное работать автономно. Видеотерминалы 70-х годов, как и телетайпы и пишущие машинки более ранней эпохи, - типичные тонкие клиенты. \\ +
-//Рабочая станция//, в отличие от клиента и сервера, - компьютер, выполняющий работу по команде пользователя, сидящего непосредственно за этим самым компьютером. Очевидно, что все наши настольные компьютеры и ноутбуки представляют собой рабочие станции. \\ +
-В предыдущей главе мы рассмотрели ЭВМ БЭСМ-6 как серийную машину, одну из быстрейших в мире в конце 1960-х годов. К сожалению, эта машина оказалась "лебединой песней" советского компьютерпрома. В 1970-е годы расстановка сил в мировой компьютерной гонке начала меняться: американец Сеймур Крей затеял амбициозный проект по созданию //суперкомпьютера//, который был назван по фамилии создателя. В течение нескольких десятилетий Крей построил несколько машин, каждая следующая была мощнее и совершеннее предыдущих. Надо, однако, оговориться, что машины Крея представляли собой "формулу 1" среди компьютеров и не претендовали на серийное производство. Насколько я понимаю, большого секрета из этих разработок никто не делал. Во всяком случае, сам факт существования этого проекта был известен в СССР. Но что могла наша страна противопоставить Крею? Все дело упиралось в идеологическую дилемму: либо мы продолжаем дальше чисто заводское, "конвейерное" производство рядовых ЭВМ, либо ищем в своей стране гения-индивидуала, который будет двигать дело вперед, используя свой ум и свои личные деловые качества. Примерно как в свое время И. В. Курчатов в атомной энергетике. Наше государство, как мы теперь знаем, пошло по первому пути. \\ +
-Однако было бы неправомерно говорить, что после БЭСМ-6 в нашей стране совсем не велись разработки машин сверхвысокой производительности. Были созданы //многопроцессорные вычислительные комплексы// "Эльбрус" и ПС-2000 - дедушки нынешних многоядерных "Пентиумов". \\ +
-Для чего нужны суперкомпьютеры? Уж точно не для студенческих курсовиков, и уж точно не для игр и офисных дел. Создание таких машин финансируется различными конторами (государственными, а в США и частными) для решения задач в их интересах. Военным супермашины нужны для расчета траекторий ракет и для "взлома" вражеских шифров, ученым-географам для прогнозирования погоды и поиска нефти и газа, ученым-биологам для анализа белков, инженерам - для расчета прочности сложных сооружений... На самом деле таких задач довольно много, я здесь упомянул лишь те, которые больше "бросаются в глаза". И давайте отметим, что суперкомпьютер, в отличие от серийных машин 1970-х годов, - машина чисто вычислительная, притом часто "заточенная" под какие-то специфические задачи. \\  +
-**Компьютерное средневековье** наступило около 1970 года, хотя значительная часть человечества жила в древности, а то и в первобытности, чуть ли не до 1990-го года. Характерные черты этого исторического периода: \\ +
-* ЭВМ появились во многих научно-исследовательских и учебных заведениях и на технологически развитых заводах, где они все чаще использовались для решения не свойственных им прежде задач, прежде всего в области экономики. \\ +
-* Диалоговый режим работы пользователей без многочасового ожидания, без перфокарт, а порой и без печати данных на бумагу, стал преобладающим. \\ +
-* Компьютер постепенно перестает быть чисто вычислительной машиной в том строгом смысле, как это понималось в древнюю эпоху: доля численных расчетов в общем объеме работы мирового компьютерного парка сокращается, а увеличивается объем работы с непривычной информацией, прежде всего символьной: хранение и обработка текстов, таблиц, баз данных; поиск, выборка, упорядочение... Все эти операции типичны для народно-хозяйственных задач (бухгалтерских и планово-экономических), а также для инженерных, таких как например патентные исследования. \\ +
-* Мы должны отметить, с одной стороны, дальнейший рост компьютерной промышленности, выполняющей государственные заказы (в том числе военные) и, с другой стороны, подключение к общему делу частных фирм, в т. ч. мелких, производящих компьютеры и особенно программы за свой счет и поставляющих их на открытый рынок. Примером такой компании является ныне всемирно известный "Микрософт", который начинался в 1975 г. с двух работников: Б. Гейтса и П. Аллена. Разумеется, в СССР таких частных фирм быть не могло, и это предопределило последующее отставание нашей страны от США. \\ +
-* Появляются достаточно надежные компьютеры, которые могут работать хоть сутками напролет без ухода и присмотра, причем в жестких условиях внешней среды. Такие компьютеры могут иметь ограниченные вычислительные возможности и при этом проворачивать значительные объемы работы, а минимизация обслуживающего персонала позволяет еще более повысить экономический эффект от их применения. \\ +
-На подводной лодке С-189, которая стоит сейчас в качестве музея в Санкт-Петербурге, можно увидеть специализированную цифровую машину "Клейстер-Н", датируемую концом 1970-х годов. По сути это калькулятор, предназначенный в основном для штурманских вычислений. По внешнему виду эта машина заметно отличается от следующего поколения калькуляторов, выпускавшихся в 1980-е годы: она довольно большая, размером почти как нынешний настольный системный блок, и очень тяжелая. Похожие устройства выпускались и для гражданского использования. Чуть позже, к середине 1980-х годов, появилось следующее поколение программируемых калькуляторов, о которых чуть ниже. \\ +
-В 70-е годы в нашей стране построена серия ракетных крейсеров проекта 1164 (в интернете чаще всего можно встретить "Москву" - бывшую "Славу"). На этих кораблях был установлен централизованный вычислительный комплекс, который у моряков получил название БИУС - боевая информационно-управляющая система. БИУС могла решать несколько десятков типовых задач: как по управлению кораблем, так и по наведению оружия. Круг задач, которые должны были решаться на этой машине, был четко оговорен к началу ее проектирования, поэтому создатели БИУС "заточили" свое изделие под эти задачи, трезво сознавая, что попытка приспособить машину для решения "неродных" задач может оказаться неудачной. Компьютер, проектируемый по такому принципу, называется //специализированным//. Для древней эпохи такие компьютеры были совершенно нехарактерны, а средневековье отмечено их появлением и развитием. С тех давних времен и до наших дней бортовые компьютеры на кораблях и самолетах - всегда специализированные, хотя в наше время они на 3/4 и более собираются из деталей от универсальных компьютеров. \\ +
-На берегу, на гражданской службе более типична несколько другая ситуация: круг задач, которые предстоит решать на компьютере, не определен как исчерпывающий список. Разработчик такого компьютера вынужден "пройти между Сциллой и Харибдой": сосредоточить максимум усилий на нужных задачах и в то же время обеспечить приспосабливаемость машины к решению новых задач, которые могут появиться в будущем. Такой компьютер называется //проблемно-ориентированным//. Малые ЭВМ серии СМ, которые строились в нашей стране в 70-е годы, как и их американские прототипы, относятся к проблемно-ориентированным: они могут решать много разных задач, однако есть такие задачи, которые им не под силу. \\ +
-В 1978 г. фирма Intel в США выпустила микропроцессор 8086, который поначалу был встречен специалистами прохладно, потому что казался чересчур переусложненным. Но на его основе фирма IBM построила персональный компьютер PC/XT, который, что называется, "получил хороший рынок". Выпуск таких процессоров и таких компьютеров давно прекращен, но современные настольные компьютеры и ноутбуки являются потомками PC/XT и Intel 8086 в четвертом или пятом поколении. \\ +
-Компьютеры IBM PC (и PC/XT - следующее поколение после PC) не были чем-то революционным. Да, у них была необычно большая для персональных машин емкость памяти, и был цветной монитор, но машины с такими особенностями были и раньше - просто до поры-до времени они были дороговаты. Но общую тенденцию к удешевлению техники никто не отменял, значит такой компьютер по такой цене рано или поздно должен был появиться. Он и появился - один из многих. Убойной фишкой был не сам компьютер, а его программное обеспечение. Основой его была операционная система MS DOS, которая представляла собой великолепный компромисс между функциональностью и сложностью. К тому же она была снабжена подробной и доходчивой документацией, и это не считая "художественных" книг, по которым можно было изучить ее принципы действия. Никогда в истории - ни до того, ни после - не было операционной системы, которая была бы так хорошо приспособлена для программирования. Прикладные программы для DOS разрабатывались множеством фирм в мире, но и любой грамотный пользователь мог подобрать подходящую для себя среду разработки и создавать программы по своим потребностям. Век DOS оказался недолог (начало разработки в 1981 г., массовое распространение - около 1988 г., начало заката - 1996 г., а последние компьютеры с DOS эксплуатировались примерно до 2002 г.) Ее боевые возможности не успевали за бурным развитием железа, но DOS успела дать мощный толчок развитию мирового программистского искусства и оказала огромное влияние на путь развития этого искусства на десятилетия вперед. \\ +
-В 1980-е годы в США уже имелись персональные компьютеры, по своим вычислительным возможностям близкие к нашим СМ и ЕС (а порой и превосходящие их), и продавались они по цене легкового автомобиля, т. е. были доступны представителям среднего класса. В других странах подобная техника не производилась, на поставки такой техники из США в СССР было наложено эмбарго, а советские разработки в этой области в то время уже существенно отставали от американских. Отставание в области "железа" могло бы быть не такой большой проблемой, если бы его компенсировать опережающим развитием программирования, но этого не произошло. Профессия программиста плохо вписывалась в социалистические принципы ведения хозяйства. Эти принципы требовали привлекать к работе большое количество людей с равной, и притом очень маленькой, зарплатой. Однако серьезное программирование - дело в значительной степени индивидуальное, мастерство на грани искусства. И давайте смотреть правде в глаза: любой высококлассный программист - человек со своими тараканами в голове... В капиталистических странах, при частнособственнической организации народного хозяйства эти тараканы никому не мешают, а в СССР программист всегда был белой вороной среди других специалистов. СССР уже много лет как прекратил существование, но советский менталитет в области компьютеров и программирования отнюдь не изжит, и последствия этого мы будем ощущать на своих шкурах еще долго. \\ +
-Компьютерное средневековье не началось в один день, и заканчивалось оно тоже постепенно. Если в США и других индустриально развитых странах предвестниками новой эпохи были "персоналки", то в СССР - программируемые калькуляторы - потомки "Клейстера-Н" и его сухопутных братьев, значительно уменьшившиеся в размерах и стоимости. Это довольно интересные для своего времени приборы: хотя и называют их калькуляторами, по сути это - простенькие персональные компьютеры, в умелых руках они могли проявить впечатляющие способности. И, в отличие от настоящих персоналок, цена такой машинки была раз в 100 меньше цены автомобиля: такая "игрушка" была по карману даже студенту, живущему на одну стипендию. Студентам технических специальностей при разработке курсовых проектов приходилось производить много сложных расчетов - больше, чем представителю какого-либо другого слоя общества! И программируемый калькулятор был в этом деле большим подспорьем (я бы сказал: бОльшим подспорьем, чем нынешние компьютеры для нынешней молодежи!). В отличие от больших машин, калькуляторы МК-52, МК-54, МК-62, МК-90 не были "слизнуты" с американских аналогов, а представляли собой полностью оригинальный отечественный продукт. \\ +
-Программируемые калькуляторы не следует рассматривать как суррогатные персональные компьютеры: это два совершенно разных класса приборов. Калькулятор предназначен только для сложных численных расчетов, стало быть его покупатель - человек, систематически занимающийся такими расчетами. Персональный компьютер, помимо чисто вычислительных, владеет операциями по обработке других типов данных (прежде всего символьных) и чаще всего используется для решения задач с несложными расчетами (бухгалтерия) или вообще не связанных с расчетами (подготовка текстовых документов), а в наше время 90% всех компьютеров, продаваемых и покупаемых в мире, используется чисто для развлечений. \\ +
-И кстати о развлечениях. Еще одно явление, характерное для позднего средневековья и предвещавшее очередную смену эпох, - это компьютерные игры. До 1970-го года ЭВМ использовались исключительно для дела, играть на компьютере было совершенно немыслимо. Однако общая тенденция к удешевлению компьютеров привела к тому, что сначала появились игровые программы, которые могли эксплуатироваться на различных компьютерах, а чуть позже - и специальные игровые компьютеры (игровые приставки, игровые консоли), ни для каких деловых задач не предназначенные. Первые игровые приставки не имели характерной для компьютеров архитектуры с процессором и памятью, но такие устройства не обеспечивали быстрой смены игры, поэтому их проектировщики пришли к мысли, что игровая приставка должна стать похожа на компьютер. От настоящего компьютера приставки отличались тем, что не имели монитора, а использовали в качестве устройства отображения информации обычный телевизор. А в качестве носителя программы - картриджи, не похожие ни на какие устройства для настоящих компьютеров, и магнитофонные кассеты, вставлявшиеся в обычный магнитофон. К 1980-му году в мире выпускалось уже несколько моделей игровых компьютеров, цена которых была в несколько раз меньше цены делового персонального компьютера. В нашей стране такая техника стала более-менее обычной только в последнем десятилетии XX века. \\ +
-В эпоху, когда не было нынешних сетевых технологий, приобрести программы (как деловые, так и игровые) было непросто. Их приходилось покупать на картриджах или вводить вручную из кодовых таблиц, публиковавшихся в журналах. Существовал и такой экзотический способ: специальные радиостанции время от времени передавали программы в эфир, чтобы их можно было записать на магнитофонные кассеты. В 1970-е годы появились гибкие мегнитные диски - дискеты. Первые дискеты имели диаметр 8 дюймов (203 мм) и помещались в конверт из специальной плотной бумаги. В конверте имелось отверстие для вала, приводящего дискету во вращение, и прорезь для магнитных головок, выполнявших чтение и запись данных. Дискеты 80-х годов имели почти такое же устройство, но меньший размер: 5<sup>1</sup>/<sub>4</sub> дюйма (133 мм), а еще более поздние - 3.5 дюйма. Эти дискеты уже имели твердый пластмассовый корпус, а прорезь для головок имела сдвижную металлическую крышку для защиты от пыли. Сейчас дискеты - уже антиквариат. Их основной недостаток: малейшие посторонние частицы, попадая на рабочую поверхность дискеты, приводили к невозможности прочитать записанные данные. \\ +
-Дискеты сразу же получили широкое распространение на персональных деловых компьютерах, а на игровых они применялись редко. \\ +
-Лишь около 1990 года вошли в обиход ныне хорошо нам знакомые CD-диски, которые первоначально предназначались только для записи музыки, но чуть позже их приспособили и для записи компьютерных файлов, в т. ч. программ. \\ +
-Программирование в средние века постепенно перестало быть искусством, стало больше похоже на обычную инженерную деятельность. Это обусловлено, во первых, появлением множества языков программирования, так что каждый, кто хотел стать программистом, мог выбрать язык на свой вкус и кошелек. С другой стороны, в США и Англии была создана система профессионального обучения программистов. В СССР такую систему тоже пытались создать, но идеологическая зашоренность мешала, так что качество подготовки программистов оставляло желать лучшего. \\ +
-Выше мы говорили о новых, нетипичных для древней эпохи прикладных задачах, а сейчас остановимся на операционных системах. В этой области имел место очень большой прогресс, который, однако, имел изнаночную сторону: операционные системы стали слишком сложны, их разработка стала чрезвычайно трудоемкой, а изучение их студентами-программистами и переучивание действующих программистов на новые ОС отнимало неоправданно много сил и времени. \\ +
-Рассматривая ОС средних веков, мы подходим к теме виртуализации. Само слово виртуализация очень сложно для объяснения. Выше мы уже употребили термин "системы виртуальных машин" - настала пора хоть немного разобраться, что это такое. Сформулируем так: виртуальная машина - это машина, которой нет, но функции ее выполняются. А по сути это программный инструмент в составе операционной системы, который придается в помощь каждой прикладной программе, чтобы обеспечить ей максимально комфортные условия для работы. (Мы, конечно, понимаем, что максимально комфортные условия нужны не столько программе, сколько программисту, который ее создает). В древнюю эпоху, когда программы на компьютере исполнялись одна за другой, такая проблема не стояла. Теперь люди столкнулись с задачей обеспечения "уживаемости" множества прикладных программ на одной __реальной__ машине. Виртуальная машина работает как оболочка или контейнер, изолирующая "свою" прикладную программу от всего внешнего мира, как программного, так и железячного. Системные вызовы прикладной программы воспринимаются виртуальной машиной и при необходимости передаются операционной системе, так что прикладная программа живет в виртуальной машине не как рак-отшельник в раковине, а как морская свинка в клетке, ни в чем не нуждаясь, никому не мешая и ничего не зная о том, что происходит за стенами клетки. \\ +
-Идея виртуальных машин позволяет решить проблему переносимости программ с компьютера на компьютер на новом уровне. Представим, что у нас имеется игровая программа, созданная когда-то раньше для эксплуатации на игровой приставке, а теперь мы хотим эксплуатировать ее на обычном компьютере. Теперь мы можем категорически отказаться от переделки самой программы: максимум, что нам грозит, - это написать новый "контейнер", эмулирующий (воспроизводящий) игровую приставку ("целевую платформу") на компьютере ("хост-платформе"). И это придется делать только если не найдем подходящий готовый. Правда, эта задача хорошо решается при условии, что обе "платформы" - и старая, и новая - снабжены хорошей документацией, а это в нашем мире, к сожалению, бывает не всегда. Так появилась идея создать СВМ - операционную систему, в которой прикладная программа обязательно помещается в "контейнер" и живет только в нем. Стало быть, все, что нужно для плодотворной работы прикладному программисту, - это справочник по тем услугам (сервисам), которые предоставляет контейнер, а программисту, пишущему контейнер, - справочники по системным вызовам обеих ОС. Но ведь контейнер обычно проще, чем большая прикладная программа или чем ОС, да и необходимость в его разработке возникает не так часто, поэтому программистов, разрабатывающих контейнеры, может быть немного, и основные людские силы можно сосредоточить на разработке прикладных программ, что мы и хотим. \\ +
-Такой подход к делу обещает определенное удобство, но мы должны понимать, что любое удобство в этом мире не бесплатно: СВМ требует определенного времени на выполнение своих обязанностей, поэтому множество прикладных программ в СВМ будет выполняться медленнее (иногда значительно медленнее), чем на реальной машине без СВМ. В древние века, когда машин было мало и их быстродействие оставляло желать лучшего, такие идеи не имели шансов на признание. В средние века они оказались востребованы, а в последующие десятилетия стали практически обязательными. \\ +
-Мы употребляем СВМ как нарицательный технический термин, но это слово (в такой же расшифровке) употреблялось и как собственное имя операционной системы, которая эксплуатировалась на уже знакомых нам машинах ЕС. Как и сами ЕС, и почти все программное обеспечение для них, СВМ не была оригинальной советской разработкой - была скопирована с американской VM. \\ +
-=== Последнее десятилетие XX века и начало XXI века === +
-В 1989 году эмбарго на поставку персональных компьютеров в СССР было отменено, и компьютеры IBM PC/AT (следующее поколение после PC/XT) стали знакомы многим в нашей стране. Этот год я считаю годом очередного перелома эпох: закончилось средневековье, наступило **новое время**. Оно характеризуется массовым внедрением в нашу жизнь персональных компьютеров. Такой компьютер занимал немного места, умеренно потреблял электроэнергию и, главное, мог работать сутки напролет без всякого ремонта и наладки. За сутки на таком компьютере можно было поднять такой объем работы, над которым весь вычислительный центр ЛЭТИ трудился бы год! И таким компьютером можно было оснастить рабочее место практически каждого ученого или инженера. Иными словами, доступ человека к компьютеру __перестал быть ресурсом__. Правда, покупка такого компьютера для домашнего пользования стала возможна лишь через несколько лет, году примерно в 1993-м. \\ +
-Уменьшение стоимости компьютеров и расширение их промышленного выпуска в разных странах (а не только в США, как раньше) привело к пересмотру взглядов на компьютерные игры. В один прекрасный момент люди перестали считать крамолой мысль о том, что игровой компьютер может быть технически совершеннее и дороже, чем деловой. Более того: фирмы, традиционно выпускавшие деловые компьютеры (хотя бы та же IBM -  International Business Machines - "международные машины для дела"), понемногу стали переориентироваться на игровые (или скажем более обобщенно: развлекательные) машины. Это касается как "железа", так и программного обеспечения. В нынешних магазинах мы чисто делового компьютера просто не найдем. Изучая технические особенности самых дорогих компьютеров, имеющихся на рынке, мы приходим к выводу, что это типично развлекательные компьютеры, что, в общем-то, недвусмысленно написано на их мо... пардон, на лицевых панелях. \\ +
-Бурный рост производства персональных компьютеров частными фирмами и перенос значительной части этого производства из США в страны юго-восточной Азии привел к постепенному самоустранению американского государства от компьютерных дел. Вслед за США вынуждены были пойти и другие, и постсоветская Россия не могла оставаться исключением. Однако в России так и не были созданы (и даже до настоящего времени) возможности для частного бизнеса, в результате наша компьютерно-программная промышленность, и без того уже изрядно пострадавшая от некомпетентных решений высшего государственного руководства, не выдержала конкуренции с американскими "друзьями" и была окончательно добита. \\ +
-Очередная смена исторических эпох произошла не одномоментно, а растянулась на период с 1995 по 2005 годы, зато она шла синхронно практически во всех странах мира. **Новейшая эпоха** в компьютерном мире характеризуется не одним, а множеством факторов: \\ +
-* Цена компьютеров снизилась до величины значительно меньше стоимости автомобиля. Современный школьник может носить в кармане смартфон, вычислительные возможности которого превосходят весь мировой парк компьютеров 1960-х годов, и собирать собственные компьютерные системы из запчастей, цена которых сравнима уже с ценой не автомобиля, а школьного завтрака. А в Англии уже ставится вопрос о том, чтобы простенькие микроконтроллеры раздавать школьникам бесплатно - лишь бы учились программированию. \\ +
-* Компьютеры стали переносными: в конце XX века уже никого не удивляли ноутбуки, а в XXI веке появились еще более легкие планшетные компьютеры, способные много часов работать от аккумуляторов без подключения к электросети. \\ +
-* Появились новые виды компьютерных услуг: интернет (в т. ч. мобильный) и GPS. \\ +
-* Было изобретено множество специализированных компьютеров и гаджетов, которые в начале 1990-х годов даже не были предметом мечты. Примеры: электронный музыкальный плеер и автомобильный видеорегистратор. \\ +
-* Компьютер освоил несвойственные ему до недавнего времени профессии: фотографию, видео, звукозапись и черчение. \\ +
-* Если в предыдущие исторические эпохи развивающаяся компьютерная промышленность только способствовала появлению новых предприятий и целых отраслей промышленности, то теперь компьютер, образно говоря, вышел убивать. В большинстве стран мира прекратил работу телеграф, исчезли сельские и районные телефонные компании, и на очереди - телефонные сети в небольших городах. Под вопросом существование почты. Прекращено производство электрофонов, магнитофонов, видеомагнитофонов, магнитных лент и виниловых пластинок. Практически свернуто производство чертежной бумаги, чертежных принадлежностей и инструментов, светокопировальной бумаги и аппаратуры для светового копирования чертежей, фотокинопленок и реактивов для их проявления. Уходит в прошлое профессия штурмана, как на море, так и в авиации. И это далеко не полный список "унесенных ветром". \\+
 === Современные компьютеры и подобные им устройства === === Современные компьютеры и подобные им устройства ===
-"Настоящий" **//компьютер//** характеризуется тем, что "общается" с человеком, получает от него команды и исходные данные для исполнения этих команд, а результаты выдает опять-таки человеку. Соответственно компьютер имеет устройства для "общения" с человеком - HID - Human Interface Devices - буквально: устройства сопряжения с человеком. Это экран (монитор), клавиатура и различные манипуляторы типа мыши или джойстика. \\ +"Настоящий" **//компьютер//** характеризуется тем, что "общается" с человеком, получает от него команды и исходные данные для исполнения этих команд, а результаты выдает опять-таки человеку. Соответственно компьютер имеет устройства для "общения" с человеком - HID - Human Interface Devices - буквально: устройства сопряжения с человеком. Это экран (монитор), клавиатураразличные манипуляторы типа мыши или джойстика, принтер... \\ 
-"Большой компьютер" - выражение, которое встречается в речи специалистов-компьютерщиков, а соответствующий строгий технический термин - компьютер общего назначения - КОН. Слово "большой" не следует воспринимать буквально. Оно не означает размеры, а происходит из пословицы: "большому кораблю - большое плавание". Так называют компьютер, предназначенный для решения широкого круга задач, в том числе сложных. В качестве "больших" используются достаточно сложные и мощные компьютеры, укомплектованные соответствующими процессорами и периферийными  +"Большой компьютер" - выражение, которое встречается в речи специалистов-компьютерщиков, а соответствующий строгий технический термин - компьютер общего назначения - КОН. Слово "большой" не следует воспринимать буквально. Оно не означает размеры, а происходит из пословицы: "большому кораблю - большое плавание". Так называют компьютер, предназначенный для решения широкого круга задач, в том числе сложных. В качестве "больших" используются достаточно мощные компьютеры, укомплектованные соответствующими процессорами и периферийными устройствами, оперативной памятью большого объема, а также внешней памятью для долговременного хранения множества программ. Соответственно цена такой машины может кусаться более или менее сильно. Именно к классу "больших" относятся наши настольные компьютеры, ноутбуки и планшеты, современные смартфоны, а также серверы, используемые профессионалами на предприятиях и в дата-центрах, и маленькие на вид одноплатные компьютеры типа Raspberry Pi, Orange Pi, Odroid и многие другие. \\
-устройствами, оперативной памятью большого объема, а также внешней памятью для долговременного хранения множества программ. Соответственно цена такой машины может кусаться более или менее сильно. Именно к классу "больших" относятся наши настольные компьютеры, ноутбуки и планшеты, современные смартфоны, а также серверы, используемые профессионалами на предприятиях и в дата-центрах, и маленькие на вид одноплатные компьютеры типа Raspberry Pi, Orange Pi, Odroid и многие другие. \\+
 **//Микроконтроллер (МК)//** похож на компьютер, но отличается тем, что соединен напрямую с какими-либо техническими устройствами и управляет ими без участия человека. Устройства ввода применительно к микроконтроллерам называются датчиками, устройства вывода - исполнительными механизмами. Микроконтроллер может вообще не иметь никаких органов управления для взаимодействия с человеком. \\ **//Микроконтроллер (МК)//** похож на компьютер, но отличается тем, что соединен напрямую с какими-либо техническими устройствами и управляет ими без участия человека. Устройства ввода применительно к микроконтроллерам называются датчиками, устройства вывода - исполнительными механизмами. Микроконтроллер может вообще не иметь никаких органов управления для взаимодействия с человеком. \\
 Ближайшие родственники микроконтроллеров - промышленные роботы и регуляторы, станки с ЧПУ, а также боевые, корабельные и авиационно-космические счетно-решающие приборы. С точки зрения программиста между ними вообще никакой разницы нет. Различие здесь конструктивное. Такие приборы обычно имеют массивный, прочный корпус (пластмассовый или металлический), защищающий хрупкую "начинку" от влаги, пыли и других нежелательных воздействий, а на входах и выходах - винтовые зажимы для присоединения достаточно толстых проводов и электронную "обвязку", обеспечивающую прямое подключение к соответствующим датчикам и механизмам, защищающую микроконтроллер от превышения допустимого тока и напряжения. Неудивительно, что качественный промышленный контроллер может стоить дороже домашне-офисного КОН, хотя значительно уступает ему по своим "умственным способностям". \\ Ближайшие родственники микроконтроллеров - промышленные роботы и регуляторы, станки с ЧПУ, а также боевые, корабельные и авиационно-космические счетно-решающие приборы. С точки зрения программиста между ними вообще никакой разницы нет. Различие здесь конструктивное. Такие приборы обычно имеют массивный, прочный корпус (пластмассовый или металлический), защищающий хрупкую "начинку" от влаги, пыли и других нежелательных воздействий, а на входах и выходах - винтовые зажимы для присоединения достаточно толстых проводов и электронную "обвязку", обеспечивающую прямое подключение к соответствующим датчикам и механизмам, защищающую микроконтроллер от превышения допустимого тока и напряжения. Неудивительно, что качественный промышленный контроллер может стоить дороже домашне-офисного КОН, хотя значительно уступает ему по своим "умственным способностям". \\
Строка 147: Строка 51:
 Граница между компьютерами и микроконтроллерами не очень четкая: некоторые микроконтроллеры имеют клавиатуры и экраны, а у некоторых компьютеров соответствующие устройства могут быть сильно упрощенными... Некоторые специалисты выделяют в отдельный класс специализированные компьютеры, и если принять такую трактовку, то место этому классу как раз между компьютерами и микроконтроллерами. \\ Граница между компьютерами и микроконтроллерами не очень четкая: некоторые микроконтроллеры имеют клавиатуры и экраны, а у некоторых компьютеров соответствующие устройства могут быть сильно упрощенными... Некоторые специалисты выделяют в отдельный класс специализированные компьютеры, и если принять такую трактовку, то место этому классу как раз между компьютерами и микроконтроллерами. \\
 Специализированные устройства ("**//гаджеты//**") содержат в себе компьютер (скорее микроконтроллер) и какие-то периферийные устройства "в одном флаконе" и предназначены для решения каких-то специфических задач. Примеры: телефонные аппараты, радиостанции, аудио- и видеоплееры, электронные книги ("читалки"), фотоаппараты, видеокамеры, автоматизированная бытовая техника... Граница между гаджетами и специализированными компьютерами опять-таки размыта. К какой из этих групп отнести, например, морской карт-плоттер? \\ Специализированные устройства ("**//гаджеты//**") содержат в себе компьютер (скорее микроконтроллер) и какие-то периферийные устройства "в одном флаконе" и предназначены для решения каких-то специфических задач. Примеры: телефонные аппараты, радиостанции, аудио- и видеоплееры, электронные книги ("читалки"), фотоаппараты, видеокамеры, автоматизированная бытовая техника... Граница между гаджетами и специализированными компьютерами опять-таки размыта. К какой из этих групп отнести, например, морской карт-плоттер? \\
-**//Программируемые логические контроллеры (ПЛК)//** - еще один класс приборов, которые вам могут встретиться "вживую" или в книгах и которые мы не должны забыть, говоря о компьютерах и микроконтроллерах. В промышленной автоматике ПЛК работают "плечом к плечу" с компьютерами, но сами они компьютерами не являются, поскольку не обладают памятью: состояние их выходов определяется состоянием входов __в данный момент__. Соответственно ПЛК не выполняют расчетов по сложным алгоритмам, в которых результат операции используется для последующих операций. К сожалению, здесь имеется путаница в терминологии: часто словом ПЛК называют промышленные регуляторы. \\ +**//Программируемые логические контроллеры (ПЛК)//** и **//программируемые логические интегральные схемы (ПЛИС)//** - еще один класс (или все-таки два класса?приборов, которые вам могут встретиться "вживую" или в книгах и которые мы не должны забыть, говоря о компьютерах и микроконтроллерах. В промышленной автоматике ПЛК работают "плечом к плечу" с компьютерами, но сами они компьютерами не являются, поскольку не обладают памятью: состояние их выходов определяется состоянием входов __в данный момент__. Соответственно ПЛК не выполняют расчетов по сложным алгоритмам, в которых результат операции используется для последующих операций. К сожалению, здесь имеется путаница в терминологии: часто словом ПЛК называют промышленные регуляторы. ПЛИС похожа ПЛК и в то же время на микроконтроллер, и может считаться чем-то средним между ними, но еще больше она похожа на набор запчастей для самостоятельной сборки микроконтроллера. Только собирать его приходится не болтами и пайкой, а //логически//. Процесс изготовления микроконтроллера на основе ПЛИС аналогичен программированию: на некотором языке составляется описание устройства, затем это описание компилируется на компьютере и "заливается" в ПЛИС. Чаще всего используется язык Verilog. \\ 
-**//Программируемые логические интегральные схемы (ПЛИС)//** - еще одна группа устройств, которые тоже иногда неправильно называют ПЛК. ПЛИС похожа ПЛК и в то же время на микроконтроллер, и может считаться чем-то средним между ними, но еще больше она похожа на набор запчастей для самостоятельной сборки микроконтроллера. Только собирать его приходится не болтами и пайкой, а //логически//. Процесс изготовления микроконтроллера на основе ПЛИС аналогичен программированию: на некотором языке составляется описание устройства, затем это описание компилируется на компьютере и "заливается" в ПЛИС. Чаще всего используется язык Verilog. \\ +Контроллеры на основе ПЛИС дороже обычных микроконтроллеров, для большинства обычных программистов это полнейшая terra incognita, зато ПЛИС могут решать некоторые специфические задачи намного быстрее обычных микроконтроллеров и поэтому имеют свою пусть небольшую, но устойчивую область применения. Одноплатный промышленный контроллер на ПЛИС по внешнему виду (даже с открытым корпусом) трудноотличим от обычного одноплатного МК. \\ 
-Контроллеры на основе ПЛИС дороже обычных микроконтроллеров, для большинства обычных программистов это полнейшая terra incognita, зато ПЛИС могут решать некоторые специфические задачи намного быстрее обычных микроконтроллеров и поэтому имеют свою пусть небольшую, но устойчивую область применения. Одноплатный промышленный контроллер на ПЛИС по внешнему виду трудноотличим от обычного одноплатного МК. \\ +
 Отдельную группу компьютероподобных устройств представляют **//калькуляторы//**. Настоящий калькулятор характеризуется тем, что может выполнять только одиночные действия. Но как быть с программируемыми калькуляторами? Программируемый калькулятор - по сути стопроцентный компьютер, так что давайте просто считать это название досадной неточностью в терминологии. \\ \\ Отдельную группу компьютероподобных устройств представляют **//калькуляторы//**. Настоящий калькулятор характеризуется тем, что может выполнять только одиночные действия. Но как быть с программируемыми калькуляторами? Программируемый калькулятор - по сути стопроцентный компьютер, так что давайте просто считать это название досадной неточностью в терминологии. \\ \\
 ===== Информация и ее представление в компьютере ===== ===== Информация и ее представление в компьютере =====
Строка 173: Строка 76:
 Есть 10 цифр, 26 общеупотребительных латинских букв (которые бывают заглавные и строчные) и знаки препинания: точка, вопросительный знак и др. - всего порядка сотни знаков, без которых нам не обойтись, независимо от того, в какой стране мы живем. У нас же, россиян, есть еще 33 буквы, которые опять-таки бывают заглавные и строчные. Если сложить все вместе, то одного байта будет достаточно. Однако если мы захотим одной ячейкой памяти представить все буквы всех языков мира, то 256 значений будет недостаточно - значит, нужна ячейка с бОльшим количеством бит. Это будет необходимо и для вычислений, если мы хотим работать с большими числами или представлять их с большой точностью. \\ \\ Есть 10 цифр, 26 общеупотребительных латинских букв (которые бывают заглавные и строчные) и знаки препинания: точка, вопросительный знак и др. - всего порядка сотни знаков, без которых нам не обойтись, независимо от того, в какой стране мы живем. У нас же, россиян, есть еще 33 буквы, которые опять-таки бывают заглавные и строчные. Если сложить все вместе, то одного байта будет достаточно. Однако если мы захотим одной ячейкой памяти представить все буквы всех языков мира, то 256 значений будет недостаточно - значит, нужна ячейка с бОльшим количеством бит. Это будет необходимо и для вычислений, если мы хотим работать с большими числами или представлять их с большой точностью. \\ \\
 ==== Как числа представляются в компьютере и как они записываются в программах ==== ==== Как числа представляются в компьютере и как они записываются в программах ====
-Выше мы рассмотрели байт, слово и двойное слово как запоминающие ячейки, построенные из нескольких элементарных запоминающих ячеек по 1 биту каждая. Размер ячейки в битах в разных книгах может называться длиной, объемом или емкостью - единства терминологии здесь, к сожалению, нет. В зависимости от длины ячейка может принимать то или иное множество состояний, и каждое состояние может трактоваться как число. Если каждый бит изобразить цифрой 0 или 1, то получается, что любое число в компьютере может быть представлено последовательностью //двоичных цифр// - нулей и единиц. Таким образом мы приходим к пониманию //двоичной системы счисления//. Эта система для нас непривычна ровно постольку, поскольку мы все с детства привыкли к десятичной системе счисления. Однако десятичная система была не везде и не всегда. В древности в Европе была в ходу //двенадцатиричная система//. Затем она была вытеснена десятичной системой, которую привезли из Индии арабы. Привезли вместе с привычными нам десятичными цифрами 0123456789, которые часто называют арабскими, хотя на самом деле они индийские. Произошло это очень давно, задолго до начала развития компьютерной техники, так что двенадцатиричная система оказалась совершенно забыта и заброшена, и все, что от нее осталось, - это слово "дюжина". Неудивительно, что для современного человека переход на другую систему счисления - психологический барьер... Но для нас, программистов 21-го века, этот барьер уже не имеет сколько-нибудь существенного значения. Вот для инженеров-электронщиков, проектирующих компьютерное "железо" - да... Я же сейчас нарушу +Выше мы рассмотрели байт, слово и двойное слово как запоминающие ячейки, построенные из нескольких элементарных запоминающих ячеек по 1 биту каждая. Размер ячейки в битах в разных книгах может называться длиной, объемом или емкостью - единства терминологии здесь, к сожалению, нет. В зависимости от длины ячейка может принимать то или иное множество состояний, и каждое состояние может трактоваться как число. Если каждый бит изобразить цифрой 0 или 1, то получается, что любое число в компьютере может быть представлено последовательностью //двоичных цифр// - нулей и единиц. Таким образом мы приходим к пониманию //двоичной системы счисления//. Эта система для нас непривычна ровно постольку, поскольку мы все с детства привыкли к десятичной системе счисления. Однако десятичная система была не везде и не всегда. В древности в Европе была в ходу //двенадцатиричная система//. Ее основанием было число "дюжина", которое было удобно тем, что делилось без остатка на два, на три и на четыре. Затем она была вытеснена десятичной системой, которую привезли из Индии арабы. Привезли вместе с привычными нам десятичными цифрами 0123456789, которые часто называют арабскими, хотя на самом деле они индийские. Эта система удобна для счета на пальцах, практиковавшегося в древней школе. Произошло это очень давно, задолго до начала развития компьютерной техники, так что двенадцатиричная система оказалась совершенно забыта и заброшена, и все, что от нее осталось, - это слово "дюжина". Неудивительно, что для современного человека переход на другую систему счисления - психологический барьер... Но для нас, программистов 21-го века, этот барьер уже не имеет сколько-нибудь существенного значения. Вот для инженеров-электронщиков, проектирующих компьютерное "железо" - да... Я же сейчас нарушу 
 общепринятый в компьютерной литературе подход и втравливать читателя в дебри двоичной арифметики не буду совсем. Лишь немного коснусь двоичной записи чисел. Поскольку каждая цифра в двоичной системе не может быть больше 1, то число 2 записывается как 10, 4 - как 100... У одного моего друга - профессионального компьютерщика - номер на двери квартиры записан как 11010, а вам я предлагаю самостоятельно вычислить, какие номера написаны на соседних квартирах, с учетом того что их хозяева - не профессиональные компьютерщики. \\ общепринятый в компьютерной литературе подход и втравливать читателя в дебри двоичной арифметики не буду совсем. Лишь немного коснусь двоичной записи чисел. Поскольку каждая цифра в двоичной системе не может быть больше 1, то число 2 записывается как 10, 4 - как 100... У одного моего друга - профессионального компьютерщика - номер на двери квартиры записан как 11010, а вам я предлагаю самостоятельно вычислить, какие номера написаны на соседних квартирах, с учетом того что их хозяева - не профессиональные компьютерщики. \\
 Недостаток двоичной системы в том, что запись чисел получается довольно длинной и поэтому трудно читаемой. Например, такое небольшое число как тысяча записывается вот так: 1111101000, а попробуйте записать миллион или миллиард. Поэтому были предложены //системы записи чисел//: восьмиричная и шестнадцатиричная. Это не самостоятельные системы счисления, а именно системы записи чисел, за которыми, в конечном счете, стоит двоичная система счисления. Весь ряд бит, изображающий число, делится на группы по 3 или 4 бита, и каждая группа изображается цифрой: восьмиричной или шестнадцатиричной соответственно. В качестве восьмиричных используют арабские (индийские!) цифры от 0 до 7. Соответственно тысяча в восьмиричной системе запишется как 1750. Для представления шестнадцатиричных цифр используют опять-таки индийские цифры 0...9, а недостающие цифры заменяют латинскими буквами A...F, так что тысяча запишется как 3E8. \\ Недостаток двоичной системы в том, что запись чисел получается довольно длинной и поэтому трудно читаемой. Например, такое небольшое число как тысяча записывается вот так: 1111101000, а попробуйте записать миллион или миллиард. Поэтому были предложены //системы записи чисел//: восьмиричная и шестнадцатиричная. Это не самостоятельные системы счисления, а именно системы записи чисел, за которыми, в конечном счете, стоит двоичная система счисления. Весь ряд бит, изображающий число, делится на группы по 3 или 4 бита, и каждая группа изображается цифрой: восьмиричной или шестнадцатиричной соответственно. В качестве восьмиричных используют арабские (индийские!) цифры от 0 до 7. Соответственно тысяча в восьмиричной системе запишется как 1750. Для представления шестнадцатиричных цифр используют опять-таки индийские цифры 0...9, а недостающие цифры заменяют латинскими буквами A...F, так что тысяча запишется как 3E8. \\
Строка 188: Строка 91:
 * Если нужно указать печатный знак, то указываем сам этот знак, заключая его в кавычки (одинарные или двойные - уточнить в документации на машину или систему программирования). \\ * Если нужно указать печатный знак, то указываем сам этот знак, заключая его в кавычки (одинарные или двойные - уточнить в документации на машину или систему программирования). \\
 * Неколичественные значения, которые мы не выбираем произвольно, а берем из каких-то справочных пособий, пишем строго так, как они записаны в соответствующих источниках. Например номера системных вызовов DOS/Windows/Linux - в шестнадцатиричной системе, однако еще более грамотно будет не писать коды, а присвоить им символические имена. \\ * Неколичественные значения, которые мы не выбираем произвольно, а берем из каких-то справочных пособий, пишем строго так, как они записаны в соответствующих источниках. Например номера системных вызовов DOS/Windows/Linux - в шестнадцатиричной системе, однако еще более грамотно будет не писать коды, а присвоить им символические имена. \\
-* В двоичной системе записывать только те значения, в которых важен каждый бит, например данные для записи в управляющие регистры устройств ввода-вывода. С учетом этого всего программа из предыдущего примера может быть записана так: \\+* В двоичной системе записывать только те значения, в которых важен каждый бит, например данные для записи в управляющие регистры устройств ввода-вывода. Хотя и здесь будут уместны символические имена. \\ 
 +С учетом сказанного программа из предыдущего примера может быть записана так: \\
 <code>mov  r0,0x31    ;номер системного вызова "вывод N знаков на устройство" <code>mov  r0,0x31    ;номер системного вызова "вывод N знаков на устройство"
 mov  r1,PRINTER ;устройство, в которое пишем mov  r1,PRINTER ;устройство, в которое пишем
Строка 199: Строка 103:
 А как быть, если нужны дробные числа? \\ А как быть, если нужны дробные числа? \\
 Вообще-то больше половины (а может быть 3/4 или даже больше) всех компьютеров, программ и программистов дробными числами не пользуются и живут при этом припеваючи (и даже прибыль получаючи!). Тем не менее... \\ Вообще-то больше половины (а может быть 3/4 или даже больше) всех компьютеров, программ и программистов дробными числами не пользуются и живут при этом припеваючи (и даже прибыль получаючи!). Тем не менее... \\
-Можно, например, трактовать значения байта как дробные числа в диапазоне от 0 (00000000) до 0.99619375 (11111111). Если же нужны числа с целой и дробной частью, то одним байтом здесь не обойдется. Можно, допустим, представить число как двойное слово: "старшее" слово - целая часть, "младшее" - дробная часть. Такое представление чисел называется //представление с фиксированной границей целой и дробной частей// или //представление с фиксированной точкой (запятой)//. Точка или запятая? - здесь, к сожалению, единства не будет, поскольку в русской литературе и в русской школе принято целую часть от дробной отделять запятой, а в англо-американской - точкой. Эта ситуация всем уже порядком надоела, поэтому программисты в разговоре между собой говорят просто "фиксированное представление чисел". Такое представление имеет ограниченное применение в области бухгалтерско-экономической (поскольку денежные суммы, как правило, содержат некоторое количество целых рублей, а суммы мельче копейки никто не считает) и в программировании обработки деталей на станках с ЧПУ. В физико-математических расчетах обычно применяется представление чисел с //плавающей// запятой (точкой). Слово "плавающая" здесь - антоним слова "фиксированая". Под такое число отводится ячейка не менее 32 бит, из которых большая часть (примерно три четверти от общего количества бит) отводятся под //мантиссу//, а остальные - под //порядок//. Мантисса трактуется как дробное число со знаком, ее абсолютное значение (модуль) всегда находится в диапазоне от 0.5 до 1, и это значение умножается на 2 в такой степени, каков порядок (он трактуется как целое число со знаком). Получается очень большой диапазон представляемых чисел и очень высокая точность. Например, если расстояния измерять в километрах, то максимальное значение будет 2<sup>127</sup> км - это расстояние до звезд, причем даже не самых близких к нам, а минимальное (2<sup>-128</sup> км) - гораздо меньше размера атома. Расстояние от Земли до Солнца можно представить с погрешностью около 1 км. Несмотря на это, в мощных процессорах предусмотрена возможность вычислений с числами двойной длины (64 бита и даже 80 бит). В повседневной жизни не каждому программисту это может хотя бы раз понадобиться, но в учебнике высшей математики такие задачи рассматриваются. Процессоры среднего класса (ARM Cortex) обходятся 32-битными числами с плавающей точкой, что соответствует их разрядности. \\+Можно, например, трактовать значения байта как дробные числа в диапазоне от 0 (00000000) до 0.99619375 (11111111). Если же нужны числа с целой и дробной частью, то одним байтом здесь не обойдется. Можно, допустим, представить число как двойное слово: "старшее" слово - целая часть, "младшее" - дробная часть. Такое представление чисел называется //представление с фиксированной границей целой и дробной частей// или //представление с фиксированной точкой (запятой)//. Точка или запятая? - здесь, к сожалению, единства не будет, поскольку в русской литературе и в русской школе принято целую часть от дробной отделять запятой, а в англо-американской - точкой. Эта ситуация всем уже порядком надоела, поэтому программисты в разговоре между собой говорят просто "фиксированное представление чисел". Такое представление имеет ограниченное применение в области бухгалтерско-экономической (поскольку денежные суммы, как правило, содержат некоторое количество целых рублей, а суммы мельче копейки никто не считает) и в программировании обработки деталей на станках с ЧПУ. В физико-математических расчетах обычно применяется представление чисел с //плавающей// запятой (точкой). Слово "плавающая" здесь - антоним слова "фиксированая". Под такое число отводится ячейка не менее 32 бит, из которых большая часть (примерно три четверти от общего количества бит) отводятся под //мантиссу//, а остальные - под //порядок//. Мантисса трактуется как дробное число со знаком, ее абсолютное значение (модуль) всегда находится в диапазоне от 0.5 до 1, и это значение умножается на 2 в такой степени, каков порядок (он трактуется как целое число со знаком). Получается очень большой диапазон представляемых чисел и очень высокая точность. Например, если расстояния измерять в километрах, то максимальное значение будет 2<sup>127</sup> км - это расстояние до звезд, причем даже не самых близких к нам, а минимальное (2<sup>-128</sup> км) - гораздо меньше размера атома. Расстояние от Земли до Солнца можно представить с погрешностью порядка 20 км, а расстояние между двумя точками на противоположных сторонах Земли - с погрешностью 1-2 м. Очевидно, для штурманских задач, как на море, так и в авиации, такая точность вполне приемлема. Несмотря на это, в мощных процессорах предусмотрена возможность вычислений с числами двойной длины (64 бита и даже 80 бит). В повседневной жизни не каждому программисту это может хотя бы раз понадобиться, но в учебнике высшей математики такие задачи рассматриваются. Процессоры среднего класса (ARM Cortex) обходятся 32-битными числами с плавающей точкой, что соответствует их разрядности. \\ 
 +Число с плавающей точкой в формате 32 бит в программах обозначается словом single, 64 бит - double ("двойное"), 80 бит - extended ("растянутое"). \\
 В математике иногда приходится оперировать иррациональными числами. Для представления такого числа необходим бесконечный ряд цифр, что в компьютерной технике совершенно нереально. Поэтому в обычном программировании приходится довольствоваться приближенным представлением чисел, которое мы только что обсудили. \\ \\ В математике иногда приходится оперировать иррациональными числами. Для представления такого числа необходим бесконечный ряд цифр, что в компьютерной технике совершенно нереально. Поэтому в обычном программировании приходится довольствоваться приближенным представлением чисел, которое мы только что обсудили. \\ \\
 ==== Как данные размещаются в памяти компьютера ==== ==== Как данные размещаются в памяти компьютера ====
Строка 266: Строка 171:
 Разрядность - важнейший архитектурный показатель процессора (и он же определяет разрядность машины в целом). Это "длина машинного слова", или количество бит, которое данный процессор может обрабатывать одной командой. Разрядность может принимать значения из ряда: 8, 16, 32 и 64. Очевидно, что чем больше разрядность, тем больше диапазон и точность представления числовых величин, с которыми наш процессор может работать, и тем больше данных он способен переработать за единицу времени. Заметим, что процессор, разрядность которого больше 8, обязательно имеет команды для обработки 8-битных величин, а 32-разрядный - также и для 16-битных, и т. д. \\ Разрядность - важнейший архитектурный показатель процессора (и он же определяет разрядность машины в целом). Это "длина машинного слова", или количество бит, которое данный процессор может обрабатывать одной командой. Разрядность может принимать значения из ряда: 8, 16, 32 и 64. Очевидно, что чем больше разрядность, тем больше диапазон и точность представления числовых величин, с которыми наш процессор может работать, и тем больше данных он способен переработать за единицу времени. Заметим, что процессор, разрядность которого больше 8, обязательно имеет команды для обработки 8-битных величин, а 32-разрядный - также и для 16-битных, и т. д. \\
 Я не случайно подчеркиваю, что разрядность - это __архитектурный__ параметр. Сейчас мы остановимся на двух __количественных__ параметрах: это тактовая частота процессора и количество ядер в нем. \\ Я не случайно подчеркиваю, что разрядность - это __архитектурный__ параметр. Сейчас мы остановимся на двух __количественных__ параметрах: это тактовая частота процессора и количество ядер в нем. \\
-Если процессор - сердце компьютера, то тактовая частота - его ритм сердцебиения. Она определяется тактовыми импульсами, которые вырабатываются тактовым генератором. Любое действие в процессоре занимает один или более тактов, поэтому тактовая частота косвенным образом показывает количество операций, которое процессор может выполнять в секунду. Для Ардуино - даже не косвенно, а почти прямо, а для других процессоров может быть по-разному. Например, процессор Cortex M3 производит сложение, вычитание и умножение за 1 такт, а для деления может потребоваться от 2 до 12 тактов. Поиск аналогичной информации в описаниях и руководствах по процессорам разных типов может оказаться весьма хлопотной работой: два процессора, выпущенные одной фирмой в один год и отличающиеся одной буквой в названии, могут иметь существенные отличия по времени выполнения команд. Поэтому программисту следует всегда держать в уме, что деление - самая долгая из арифметических операций. \\+Если процессор - сердце компьютера, то тактовая частота - его ритм сердцебиения. Она определяется тактовыми импульсами, которые вырабатываются тактовым генератором. Любое действие в процессоре занимает один или более тактов, поэтому тактовая частота косвенным образом показывает количество операций, которое процессор может выполнять в секунду. Для Ардуино - даже не косвенно, а почти прямо, а для других процессоров может быть по-разному. Например, процессор Cortex M3 производит сложение, вычитание и умножение за 1 такт, а для деления может потребоваться от 2 до 12 тактов. Поиск аналогичной информации в описаниях и руководствах по процессорам разных типов может оказаться весьма хлопотной работой: два процессора, выпущенные одной фирмой в один год и отличающиеся одной буквой в названии, могут иметь существенные отличия по времени выполнения команд. Поэтому программисту следует всегда держать в уме один простой факт: деление - самая долгая из арифметических операций, в самом лучшем случае оно занимает столько же времени, сколько и умножение, но никогда не быстрее. \\
 Каждый процессор, изготавливаемый на заводе и продающийся в магазинах, имеет максимально допустимую тактовую частоту, которая является его паспортным параметром, т. е. указывается в заводской документации. Именно ее и имеют в виду, когда говорят о производительности процессора. Превышать ее, вообще говоря, не следует. Попытка эксплуатировать процессор на более высокой частоте - //разгон процессора// - дает результат "фифти-фифти", т. е. может удаться, а может и нет - вплоть до полного выхода процессора из строя. Как правило, процессор при превышении тактовой частоты потребляет больше электроэнергии и сильно греется, так что усиленное охлаждение дает некоторый шанс на успех. \\ Каждый процессор, изготавливаемый на заводе и продающийся в магазинах, имеет максимально допустимую тактовую частоту, которая является его паспортным параметром, т. е. указывается в заводской документации. Именно ее и имеют в виду, когда говорят о производительности процессора. Превышать ее, вообще говоря, не следует. Попытка эксплуатировать процессор на более высокой частоте - //разгон процессора// - дает результат "фифти-фифти", т. е. может удаться, а может и нет - вплоть до полного выхода процессора из строя. Как правило, процессор при превышении тактовой частоты потребляет больше электроэнергии и сильно греется, так что усиленное охлаждение дает некоторый шанс на успех. \\
 Строительство многоядерных процессоров - прием, позволяющий увеличить скорость обработки данных без чрезмерного увеличения тактовой частоты (что сопряжено с определенными трудностями) и без увеличения количества процессоров в компьютере (что резко усложнит систему и уменьшит надежность). Простые процессоры имеют одно ядро. Когда мы говорим "многоядерный процессор", то подразумеваем, что он 32- или 64-разрядный (количество ядер может быть 2, 4, 8, 16 и т. д.) \\ Строительство многоядерных процессоров - прием, позволяющий увеличить скорость обработки данных без чрезмерного увеличения тактовой частоты (что сопряжено с определенными трудностями) и без увеличения количества процессоров в компьютере (что резко усложнит систему и уменьшит надежность). Простые процессоры имеют одно ядро. Когда мы говорим "многоядерный процессор", то подразумеваем, что он 32- или 64-разрядный (количество ядер может быть 2, 4, 8, 16 и т. д.) \\
Строка 321: Строка 226:
 Причиной несовместимости может быть любая мелочь. Но для совместимости необходимо, чтобы процессоры имели, как минимум, одну и ту же систему команд (командный язык). Командный язык непосредственно связан с разрядностью процессора. \\ Причиной несовместимости может быть любая мелочь. Но для совместимости необходимо, чтобы процессоры имели, как минимум, одну и ту же систему команд (командный язык). Командный язык непосредственно связан с разрядностью процессора. \\
 Существует много //архитектурных классов// компьютеров: два компьютера из разных классов категорически не будут иметь программной совместимости, а в пределах одного класса по крайней мере есть надежды на совместимость. Часто употребляется термин "аппаратная платформа". \\ Существует много //архитектурных классов// компьютеров: два компьютера из разных классов категорически не будут иметь программной совместимости, а в пределах одного класса по крайней мере есть надежды на совместимость. Часто употребляется термин "аппаратная платформа". \\
-Из множества архитектурных классов рассмотрим три самых перспективных для нас. \\+Из множества архитектурных классов рассмотрим несколько самых перспективных для нас. \\
 === AVR === === AVR ===
 Это "Alf & Vergard RISC" - "компьютер Альфа и Вергарда с сокращенной системой команд". В рамках этого класса фирма Atmel выпускает семейства 8-разрядных однокристалльных микроконтроллеров (ОКМК) ATtiny и ATmega (хотя по большому счету это одно большое семейство). Эти простые машинки - "Жигули" среди компьютеров. Они имеют 32 регистра общего назначения, оперативную память SRAM и долговременную память EEPROM для данных, flash-память для программы (гарвардская архитектура!) и "малый джентльменский набор" периферийных устройств для управления различным оборудованием. Значения емкости запоминающих устройств варьируются в широком диапазоне, за счет чего и получается //семейство// микроконтроллеров, программно-совместимых с точностью до некоторых нюансов. \\  Это "Alf & Vergard RISC" - "компьютер Альфа и Вергарда с сокращенной системой команд". В рамках этого класса фирма Atmel выпускает семейства 8-разрядных однокристалльных микроконтроллеров (ОКМК) ATtiny и ATmega (хотя по большому счету это одно большое семейство). Эти простые машинки - "Жигули" среди компьютеров. Они имеют 32 регистра общего назначения, оперативную память SRAM и долговременную память EEPROM для данных, flash-память для программы (гарвардская архитектура!) и "малый джентльменский набор" периферийных устройств для управления различным оборудованием. Значения емкости запоминающих устройств варьируются в широком диапазоне, за счет чего и получается //семейство// микроконтроллеров, программно-совместимых с точностью до некоторых нюансов. \\ 
Строка 329: Строка 234:
 Многие считают AVR идеальной "учебной партой" для начинающих программистов. Такой взгляд имеет место быть, однако есть и аргументы "против". Микроконтроллер, в отличие от "большого" компьютера, не работает сам по себе: к нему подключается какая-то периферия, и для программирования желательно (читаем: необходимо) понимание устройства и работы этой периферии. Если мы делаем какие-то игрушки-самоделки, то нужно разбираться в электротехнике (хотя бы на уровне закона Ома), понимать принцип работы светодиодов, электродвигателей (простых и шаговых)... Не обойтись и без некоторых навыков радиомонтажа. Программист промышленных контроллеров работает обычно не один, а в команде, и может себе позволить этого всего не знать или знать поверхностно, но в промышленности на такие машины часто возлагаются задачи, для решения которых нужен серьезный математический аппарат: дифференциальное и интегральное исчисление, векторная алгебра и аналитическая геометрия... Это наука не школьного, а скорее университетского уровня. \\ Многие считают AVR идеальной "учебной партой" для начинающих программистов. Такой взгляд имеет место быть, однако есть и аргументы "против". Микроконтроллер, в отличие от "большого" компьютера, не работает сам по себе: к нему подключается какая-то периферия, и для программирования желательно (читаем: необходимо) понимание устройства и работы этой периферии. Если мы делаем какие-то игрушки-самоделки, то нужно разбираться в электротехнике (хотя бы на уровне закона Ома), понимать принцип работы светодиодов, электродвигателей (простых и шаговых)... Не обойтись и без некоторых навыков радиомонтажа. Программист промышленных контроллеров работает обычно не один, а в команде, и может себе позволить этого всего не знать или знать поверхностно, но в промышленности на такие машины часто возлагаются задачи, для решения которых нужен серьезный математический аппарат: дифференциальное и интегральное исчисление, векторная алгебра и аналитическая геометрия... Это наука не школьного, а скорее университетского уровня. \\
 И еще. Микроконтроллеры часто вообще не имеют средств отображения информации (мониторов и т. д.), что может существенно затруднить поиск ошибок в программах (отладку программ). В общем, микроконтроллеры не так просты, какими хотят казаться. \\ И еще. Микроконтроллеры часто вообще не имеют средств отображения информации (мониторов и т. д.), что может существенно затруднить поиск ошибок в программах (отладку программ). В общем, микроконтроллеры не так просты, какими хотят казаться. \\
-На мой субъективный взгляд, важнейшая привлекательная черта маломощных микроконтроллеров - это их простота, позволяющая нам за сравнительно небольшое время разобраться во всем их устройстве, так сказать, "до дна" (что совершенно немыслимо для более сложных процессоров, например для AMD64). Кроме того, эти машинки не терпят упрощенческого, наплевательского подхода к программированию. Да, мигать светодиодом с помощью такого микроконтроллера можно научиться за полчаса, но более сложная программа, сделанная наспех, без должной подготовки, без тщательного изучения предмета, может просто "не пойти", тогда как более мощные машины это прощают. \\+На мой субъективный взгляд, важнейшая привлекательная черта маломощных микроконтроллеров - это их простота, позволяющая нам за сравнительно небольшое время разобраться во всем их устройстве, так сказать, "до дна" (что совершенно немыслимо для более сложных процессоров, например для AMD64). Кроме того, эти машинки не терпят упрощенческого, наплевательского подхода к программированию. Да, мигать светодиодом с помощью такого микроконтроллера можно научиться за полчаса, но более сложная программа, сделанная наспех, без должной подготовки, без тщательного изучения предмета, может просто "не пойти", тогда как более мощные машины это прощают. Самый же весомый аргумент "ЗА" AVR для начинающих программистов: по этим машинкам имеется множество книг, в том числе написанных именно как пособия для изучения с нуля. Причем многие книги доступны для скачивания в интернете. \\ 
 +=== PIC === 
 +Это Peripheral Interface Components - очень неудачное название микроконтроллеров от американский фирмы "Микрочип": название не только не дает представления о каких-либо особенностях изделий, но и дезинформирует нас о том, что вообще эти изделия собой представляют. Еще хуже то, что разных PICов очень много, и сколько-нибудь единого семейства они не образуют. PIC10 и PIC12 совсем примитивны и для нас едва ли интересны. PIC16 и PIC18 - вот самое то, что нам нужно: простые восьмиразрядные микроконтроллеры, по совокупности характеристик близкие к ATtiny, отличающиеся тем, что не имеют внутрипроцессорных регистров (да не очень-то они и нужны, поскольку имеется быстродействующая оперативная Storage-on-Chip). Кстати PIC18 имеют и EEPROM. Подобно ATtiny, эти микроконтроллеры не владеют операциями умножения и деления. \\ 
 +Если AVR сравнивать с "Жигулями", то PIC16 и PIC18 будут нашими "Запорожцами". Как учебная парта для первоклашек-промакашек пики едва ли не более удачны, чем AVR, но по ним мало толковых книг - почему-то все авторы предпочитают писать про AVR. \\ 
 +Микроконтроллеры PIC24 - шестнадцатиразрядные, а PIC32 - 32-разрядные. Они в нашем гараже займут место "Волг" и "Газелей". \\ 
 +=== MCS51 === 
 +Это самое старое семейство восьмиразрядных микроконтроллеров, выпускаемое несколькими фирмами в разных странах мира практически с 1980-го года и с тех пор не потерявшее популярности. Эти машинки будут нашими "Москвичами": по скорости и грузоподъемности они близки к "Жигулям" и "Волгам", но имеют несколько устаревшую архитектуру. В отличие от AVR и PIC, которые построены по принципу RISC, MCS51 имеют довольно сложную систему команд, близкую к тем, которые типичны для больших компьютеров. В частности, в "51-м семействе" имеется операция деления (ну и умножения, конечно, тоже). Если уместно говорить о скорости и грузоподъемности, то скажем так: эти машины отличаются тем, что хорошо ходят с "прицепом" - с внешней оперативной памятью, емкость которой несложно довести до 64Кбайт, и такую же величину может иметь флэш-память для программ. За много лет существования этого семейства написано немало книг, причем во всех рассматривается программирование только на языке ассемблера. Кого-то из моих читателей это может отпугнуть, я же, наоборот, рассматриваю это как преимущество. \\ 
 +Популяризация "51-го семейства" сдерживается тем, что для этих микроконтроллеров не выпускаются дешевые отладочные платы, подобные "Ардуинам", SEMам или Nucleo (или, по крайней мере, в сколько-нибудь широкой продаже я их не видел). \\
 === ARM Cortex === === ARM Cortex ===
 ARM расшифровывается как Advanced RISC Machine или как Acorn RISC Machine, т. е. тоже подразумевает компьютер с сокращенной системой команд, хотя, как и в предыдущем случае, "сокращенный" - скорее все-таки красивый лозунг, чем реальность. \\ ARM расшифровывается как Advanced RISC Machine или как Acorn RISC Machine, т. е. тоже подразумевает компьютер с сокращенной системой команд, хотя, как и в предыдущем случае, "сокращенный" - скорее все-таки красивый лозунг, чем реальность. \\
Строка 349: Строка 261:
 Архитектура этих процессоров представляет собой довольно замысловатое наслоение множества противоречивых технических решений, выработанных разными людьми в течение нескольких десятилетий. Разобраться в ней досконально - трудно даже для человека, систематически в течение многих лет работающего с такими процессорами. Однако неправильно было бы говорить, что начинающему программисту сюда вообще не следует соваться. Во-первых, такой компьютер чаще всего работает сам по себе, так что многие задачи можно решать, не зная никакой другой техники, кроме самого этого компьютера. Во-вторых, на таком компьютере всегда имеется операционная система: она берет на себя множество функций, которые на микроконтроллере пришлось бы осуществлять "своими вот этими руками". Например, если нужно вывести результат работы программы на экран, то программируется //системный вызов//, а чтобы то же самое вывести в файл, этот системный вызов нужно лишь слегка подправить. За системным вызовом стоит большая процедура, но большинство программистов ничего об этом не знает, и в этом нет ничего стыдного. \\ Архитектура этих процессоров представляет собой довольно замысловатое наслоение множества противоречивых технических решений, выработанных разными людьми в течение нескольких десятилетий. Разобраться в ней досконально - трудно даже для человека, систематически в течение многих лет работающего с такими процессорами. Однако неправильно было бы говорить, что начинающему программисту сюда вообще не следует соваться. Во-первых, такой компьютер чаще всего работает сам по себе, так что многие задачи можно решать, не зная никакой другой техники, кроме самого этого компьютера. Во-вторых, на таком компьютере всегда имеется операционная система: она берет на себя множество функций, которые на микроконтроллере пришлось бы осуществлять "своими вот этими руками". Например, если нужно вывести результат работы программы на экран, то программируется //системный вызов//, а чтобы то же самое вывести в файл, этот системный вызов нужно лишь слегка подправить. За системным вызовом стоит большая процедура, но большинство программистов ничего об этом не знает, и в этом нет ничего стыдного. \\
 Следующий аргумент "ЗА": на большом компьютере обычно имеется монитор, так что если в программе что-то идет не так (а поначалу ВСЕГДА что-нибудь не так), то можно, например, вывести на экран значение переменной, которая вызывает сомнения, и т. д. Таким образом, поиск неисправностей в программе значительно облегчается по сравнению с микроконтроллерами. \\ Следующий аргумент "ЗА": на большом компьютере обычно имеется монитор, так что если в программе что-то идет не так (а поначалу ВСЕГДА что-нибудь не так), то можно, например, вывести на экран значение переменной, которая вызывает сомнения, и т. д. Таким образом, поиск неисправностей в программе значительно облегчается по сравнению с микроконтроллерами. \\
-Кроме того, именно на "больших" компьютерах строятся почтовые и WEB-серверы, для которых создается огромное количество программ на специализированных языках (типа PHP, Java и Java-script) - это целый большой пласт в искусстве программирования. \\ \\+И еще один аргумент "ЗА", к которому следует прислушаться даже тем из вас, кто раз и навсегда решил связать свою жизнь с "мелкокаменной" техникой (микропроцессорами и микроконтроллерами). Разработка ПО для такой техники в наше время никогда не ведется на самой той машине, для которой программа предназначена: работа ведется на //инструментальной машине//, в роли которой практически всегда выступает компьютер AMD64. \\ 
 +Иными словами, мощный и сложный по своему внутреннему устройству компьютер представляет программисту целый ряд удобств, благодаря которым работа на нем едва ли не проще, чем на микроконтроллерах. \\ 
 +Кроме того, именно на "больших" компьютерах строятся почтовые и WEB-серверы, для которых создается огромное количество программ на специализированных языках (типа PHP, Java и Java-script) - это целый большой пласт в искусстве программирования. Не менее 3/4 всех программистов, работающих в мире, занято именно в этой отрасли, так что знакомство с такими компьютерами совершенно необходимо. \\ \\
 ==== Понятие ресурсов компьютера ==== ==== Понятие ресурсов компьютера ====
 **Ресурс** - это нечто, что все хотят, но на всех не хватает. Каждый человек хочет иметь такой компьютер, который мгновенно решал бы самую сложную задачу. Но такой компьютер будет чудовищно дорог. Компьютер, который мы покупаем за имеющиеся у нас деньги, неизбежно будет иметь ограниченные "умственные способности". Любая причина, которая их ограничивает, и есть ресурс. \\ **Ресурс** - это нечто, что все хотят, но на всех не хватает. Каждый человек хочет иметь такой компьютер, который мгновенно решал бы самую сложную задачу. Но такой компьютер будет чудовищно дорог. Компьютер, который мы покупаем за имеющиеся у нас деньги, неизбежно будет иметь ограниченные "умственные способности". Любая причина, которая их ограничивает, и есть ресурс. \\
Строка 442: Строка 356:
 Ядро ОС - это наш системный шеф-повар, который постоянно находится на своей "кухне" в полностью или почти невидимом для нас состоянии, владеет определенными профессиональными секретами, знает, где у него мясо и где картошка, где кастрюли и где плита, и выполняет наши заказы, которые мы ему передаем в виде //системных вызовов//. \\ Ядро ОС - это наш системный шеф-повар, который постоянно находится на своей "кухне" в полностью или почти невидимом для нас состоянии, владеет определенными профессиональными секретами, знает, где у него мясо и где картошка, где кастрюли и где плита, и выполняет наши заказы, которые мы ему передаем в виде //системных вызовов//. \\
 Оболочка - это наш системный официант, которому мы непосредственно отдаем "заказы" (команды). Название "оболочка" отражает тот факт, что пользователь не имеет дела непосредственно с ядром, а имеет дело с оболочкой, и ядро как бы скрыто от пользователя оболочкой. \\ Оболочка - это наш системный официант, которому мы непосредственно отдаем "заказы" (команды). Название "оболочка" отражает тот факт, что пользователь не имеет дела непосредственно с ядром, а имеет дело с оболочкой, и ядро как бы скрыто от пользователя оболочкой. \\
-Утилиты (англ. utilities - "полезняшки") - инструмент и принадлежности, которые не решают прикладных задач, но порой требуются для обслуживания компьютера: настройки и модернизации, поиска и устранения неисправностей, обзора обстановки и т. д. Подобно тому как грамотный автомобилист всегда возит с собой домкрат, насос, буксирный "галстук" и бензошланг, как на корабле обязательно есть шлюпки, спасательные круги, пластырь для заделки пробоин и куча всякого другого аварийно-спасательного имущества, так и грамотный компьютерщик имеет под рукой определенный набор утилит и при необходимости пользуется ими. \\+**//Утилиты//** (англ. utilities - "полезняшки") - инструмент и принадлежности, которые не решают прикладных задач, но порой требуются для обслуживания компьютера: настройки и модернизации, поиска и устранения неисправностей, обзора обстановки и т. д. Подобно тому как грамотный автомобилист всегда возит с собой домкрат, насос, буксирный "галстук" и бензошланг, как на корабле обязательно есть шлюпки, спасательные круги, пластырь для заделки пробоин и куча всякого другого аварийно-спасательного имущества, так и грамотный компьютерщик имеет под рукой определенный набор утилит и при необходимости пользуется ими. В наше время каждая операционная система комплектуется "джентльменским набором" утилит, число которых может составлять сотни. \\
 Операционная система - сложное программное изделие. На больших компьютерах она "съедает" определенную долю ресурсов компьютера, прежде всего место в памяти и часть времени работы процессора. Современные операционные системы чаще всего весьма "прожорливы" и могут работать только на мощных компьютерах. Если попытаться эксплуатировать такую систему на компьютере с недостаточными ресурсами, то она будет, как минимум, "тормозить", неизбежно заставляя тормозить и прикладные программы, а в худшем случае вообще не сможет работать. \\ Операционная система - сложное программное изделие. На больших компьютерах она "съедает" определенную долю ресурсов компьютера, прежде всего место в памяти и часть времени работы процессора. Современные операционные системы чаще всего весьма "прожорливы" и могут работать только на мощных компьютерах. Если попытаться эксплуатировать такую систему на компьютере с недостаточными ресурсами, то она будет, как минимум, "тормозить", неизбежно заставляя тормозить и прикладные программы, а в худшем случае вообще не сможет работать. \\
 На микроконтроллерах операционных систем чаще всего не бывает. В лучшем случае на микроконтроллере имеется **//загрузчик//** - небольшая программа, "зашитая" во flash-память и решающая только одну задачу из тех, которые выше упомянуты для операционной системы: установку прикладной программы. Микроконтроллер и его загрузчик строятся так, чтобы выполнять одну-единственную прикладную программу многократно в течение длительного времени (иногда - в течение всего срока службы микроконтроллера). Прикладная программа для микроконтроллера называется **//скетч//** (англ. sketch - рисунок, набросок). Скетч пишется так, как будто ему доступны все ресурсы машины, но и на помощь операционной системы, например при вводе-выводе данных на периферийные устройства, расссчитывать не приходится. \\ На микроконтроллерах операционных систем чаще всего не бывает. В лучшем случае на микроконтроллере имеется **//загрузчик//** - небольшая программа, "зашитая" во flash-память и решающая только одну задачу из тех, которые выше упомянуты для операционной системы: установку прикладной программы. Микроконтроллер и его загрузчик строятся так, чтобы выполнять одну-единственную прикладную программу многократно в течение длительного времени (иногда - в течение всего срока службы микроконтроллера). Прикладная программа для микроконтроллера называется **//скетч//** (англ. sketch - рисунок, набросок). Скетч пишется так, как будто ему доступны все ресурсы машины, но и на помощь операционной системы, например при вводе-выводе данных на периферийные устройства, расссчитывать не приходится. \\
igor/programmirovanie_shkolnikam.1522239705.txt.bz2 · Последнее изменение: 2018/03/28 15:21 — igor