Компьютер — это машина , которая может быть запрограммирована на автоматическое выполнение последовательностей арифметических или логических операций ( вычислений ). Современные цифровые электронные компьютеры могут выполнять общие наборы операций, известные как программы . Эти программы позволяют компьютерам выполнять широкий спектр задач. Термин « компьютерная система» может относиться к номинально полному компьютеру, который включает в себя аппаратное обеспечение , операционную систему , программное обеспечение и периферийное оборудование, необходимое и используемое для полной работы; или к группе компьютеров, которые связаны и функционируют вместе, например, к компьютерной сети или компьютерному кластеру .
Широкий спектр промышленных и потребительских товаров использует компьютеры в качестве систем управления , включая простые специализированные устройства, такие как микроволновые печи и пульты дистанционного управления , а также заводские устройства, такие как промышленные роботы . Компьютеры лежат в основе универсальных устройств, таких как персональные компьютеры , и мобильных устройств, таких как смартфоны . Компьютеры обеспечивают работу Интернета , который связывает миллиарды компьютеров и пользователей.
Ранние компьютеры предназначались только для вычислений. Простые ручные инструменты, такие как счеты, помогали людям выполнять вычисления с древних времен. В начале промышленной революции были построены некоторые механические устройства для автоматизации длительных, утомительных задач, таких как управление шаблонами для ткацких станков . Более сложные электрические машины выполняли специализированные аналоговые вычисления в начале 20-го века. Первые цифровые электронные вычислительные машины были разработаны во время Второй мировой войны , как электромеханические , так и с использованием термоионных клапанов . За первыми полупроводниковыми транзисторами в конце 1940-х годов последовали технологии кремниевых МОП-транзисторов ( МОП-транзисторов) и монолитных интегральных схем в конце 1950-х годов, что привело к революции микропроцессоров и микрокомпьютеров в 1970-х годах. С тех пор скорость, мощность и универсальность компьютеров значительно возросли, а количество транзисторов увеличивалось быстрыми темпами ( согласно закону Мура , их количество удваивалось каждые два года), что привело к цифровой революции в конце XX и начале XXI веков.
Традиционно современный компьютер состоит как минимум из одного элемента обработки , как правило, центрального процессора (ЦП) в виде микропроцессора , вместе с некоторым типом компьютерной памяти , как правило, полупроводниковых чипов памяти . Элемент обработки выполняет арифметические и логические операции, а блок последовательности и управления может изменять порядок операций в ответ на сохраненную информацию . Периферийные устройства включают устройства ввода ( клавиатуры , мыши , джойстики и т. д.), устройства вывода ( мониторы , принтеры и т. д.) и устройства ввода/вывода , которые выполняют обе функции (например, сенсорные экраны ). Периферийные устройства позволяют извлекать информацию из внешнего источника, а также позволяют сохранять и извлекать результаты операций.
Только в середине 20-го века слово приобрело современное определение; согласно Оксфордскому словарю английского языка , первое известное использование слова computer было в другом смысле, в книге 1613 года под названием The Yong Mans Gleanings английского писателя Ричарда Братвейта : «Я прочитал самый верный компьютер Times, и лучшего арифметика, который когда-либо дышал , и он сократил дни твои до короткого числа». Это использование термина относилось к человеку-компьютеру , человеку, который выполнял вычисления или расчеты . Слово продолжало иметь то же значение до середины 20-го века. Во второй половине этого периода женщин часто нанимали в качестве компьютеров, потому что им можно было платить меньше, чем их коллегам-мужчинам. [1] К 1943 году большинство людей-компьютеров были женщинами. [2]
Онлайн -словарь этимологии указывает первое засвидетельствованное использование слова computer в 1640-х годах, означающее «тот, кто вычисляет»; это «существительное-агент от compute (гл.)». Онлайн-словарь этимологии утверждает, что использование термина для обозначения « вычислительной машины» (любого типа) относится к 1897 году». Онлайн-словарь этимологии указывает, что «современное использование» термина для обозначения «программируемого цифрового электронного компьютера» датируется «1945 годом под этим названием; [в] теоретическом [смысле] с 1937 года, как машина Тьюринга ». [3] Название сохранилось, хотя современные компьютеры способны выполнять множество функций более высокого уровня.
Устройства использовались для помощи в вычислениях на протяжении тысяч лет, в основном с использованием взаимно-однозначного соответствия с пальцами . Самым ранним счетным устройством, скорее всего, была форма счетной палочки . Более поздние средства ведения записей по всему Плодородному полумесяцу включали в себя исчисления (глиняные сферы, конусы и т. д.), которые представляли собой подсчеты предметов, вероятно, скота или зерна, запечатанных в полые необожженные глиняные контейнеры. [a] [4] Использование счетных палочек является одним из примеров.
Абак изначально использовался для арифметических задач. Римский абак был разработан на основе устройств, которые использовались в Вавилонии еще в 2400 году до нашей эры. С тех пор было изобретено много других форм счетных досок или таблиц. В средневековой европейской счетной палате на стол клали клетчатую ткань, и маркеры перемещали по ней в соответствии с определенными правилами, как помощь в подсчете денежных сумм. [5]
Механизм Антикитеры считается самым ранним известным механическим аналоговым компьютером , согласно Дереку Дж. де Солла Прайсу . [6] Он был разработан для расчета астрономических положений. Он был обнаружен в 1901 году в затонувшем корабле Антикитеры у греческого острова Антикитера , между Китирой и Критом , и датируется примерно 100 годом до н. э . Устройства, сопоставимые по сложности с механизмом Антикитеры, не появлялись до четырнадцатого века. [7]
Многие механические средства для вычислений и измерений были построены для астрономических и навигационных целей. Планисфера была звездной картой, изобретенной Абу Райханом аль-Бируни в начале 11 века. [8] Астролябия была изобретена в эллинистическом мире либо в 1-м , либо во 2-м веке до н. э. и часто приписывается Гиппарху . Комбинация планисферы и диоптры , астролябия была фактически аналоговым компьютером, способным решать несколько различных видов задач в сферической астрономии . Астролябия, включающая в себя механический календарный компьютер [9] [10] и зубчатые колеса, была изобретена Аби Бакром из Исфахана , Персия , в 1235 году. [11] Абу Райхан аль-Бируни изобрел первую механическую лунно-солнечную календарную астролябию [12] , раннюю машину обработки знаний с фиксированным проводом [13] с зубчатой передачей и зубчатыми колесами, [14] около 1000 г. н.э.
Сектор — вычислительный инструмент, используемый для решения задач на пропорции, тригонометрию , умножение и деление, а также для различных функций, таких как извлечение квадратов и кубических корней, — был разработан в конце XVI века и нашел применение в артиллерийском деле, геодезии и навигации.
Планиметр представлял собой ручной прибор для вычисления площади замкнутой фигуры путем обведения ее с помощью механического соединения.
Логарифмическая линейка была изобретена около 1620–1630 годов английским священнослужителем Уильямом Отредом вскоре после публикации концепции логарифма . Это аналоговый компьютер с ручным управлением для выполнения умножения и деления. По мере развития логарифмической линейки добавлялись шкалы, обеспечивающие обратные величины, квадраты и квадратные корни, кубы и кубические корни, а также трансцендентные функции, такие как логарифмы и экспоненты, круговая и гиперболическая тригонометрия и другие функции . Логарифмические линейки со специальными шкалами до сих пор используются для быстрого выполнения рутинных вычислений, например, круговая логарифмическая линейка E6B, используемая для расчетов времени и расстояния на легких самолетах.
В 1770-х годах швейцарский часовщик Пьер Жаке-Дро построил механическую куклу ( автомат ), которая могла писать, держа в руках гусиное перо. Переключая количество и порядок ее внутренних колес, можно было получать разные буквы и, следовательно, разные сообщения. По сути, ее можно было механически «запрограммировать» на чтение инструкций. Вместе с двумя другими сложными машинами кукла находится в Музее искусства и истории в Невшателе , Швейцария , и до сих пор работает. [15]
В 1831–1835 годах математик и инженер Джованни Плана разработал машину Вечного календаря , которая с помощью системы шкивов и цилиндров могла предсказывать вечный календарь на каждый год с 0 г. н. э. (то есть 1 г. до н. э.) по 4000 г. н. э., отслеживая високосные годы и изменяющуюся продолжительность дня. Машина для прогнозирования приливов, изобретенная шотландским ученым сэром Уильямом Томсоном в 1872 году, была очень полезна для навигации на мелководье. Она использовала систему шкивов и проводов для автоматического расчета прогнозируемых уровней приливов на заданный период в определенном месте.
Дифференциальный анализатор , механический аналоговый компьютер, предназначенный для решения дифференциальных уравнений путем интегрирования , использовал колесно-дисковые механизмы для выполнения интегрирования. В 1876 году сэр Уильям Томсон уже обсуждал возможную конструкцию таких калькуляторов, но его останавливал ограниченный выходной крутящий момент интеграторов с шарами и дисками . [16] В дифференциальном анализаторе выход одного интегратора управлял входом следующего интегратора или графическим выходом. Усилитель крутящего момента был достижением, которое позволило этим машинам работать. Начиная с 1920-х годов Ванневар Буш и другие разработали механические дифференциальные анализаторы.
В 1890-х годах испанский инженер Леонардо Торрес Кеведо начал разрабатывать серию современных аналоговых машин , которые могли решать действительные и комплексные корни многочленов , [17] [18] [19] [20] которые были опубликованы в 1901 году Парижской академией наук . [21]
Чарльз Бэббидж , английский инженер-механик и полимат , создал концепцию программируемого компьютера. Его считают « отцом компьютера », [22] он концептуализировал и изобрёл первый механический компьютер в начале 19 века.
После работы над своей разностной машиной он объявил о своем изобретении в 1822 году в докладе Королевскому астрономическому обществу под названием «Заметка о применении машин для вычисления астрономических и математических таблиц». [23] Он также проектировал машину для помощи в навигационных расчетах, в 1833 году он понял, что возможна гораздо более общая конструкция — аналитическая машина . Ввод программ и данных должен был осуществляться в машину через перфокарты , метод, который использовался в то время для управления механическими ткацкими станками, такими как ткацкий станок Жаккарда . Для вывода машина должна была иметь принтер, криволинейный плоттер и звонок. Машина также могла бы набивать числа на карты для последующего считывания. Машина должна была включать арифметико-логическое устройство , поток управления в форме условного ветвления и циклов и интегрированную память , что делало ее первой конструкцией для универсального компьютера, который можно было бы описать в современных терминах как полный по Тьюрингу . [24] [25]
Машина опередила свое время примерно на столетие. Все детали для его машины приходилось изготавливать вручную — это было серьезной проблемой для устройства с тысячами деталей. В конце концов, проект был закрыт из-за решения британского правительства прекратить финансирование. Неспособность Бэббиджа завершить аналитическую машину можно объяснить главным образом политическими и финансовыми трудностями, а также его желанием разработать все более сложный компьютер и двигаться вперед быстрее, чем кто-либо другой мог за ним угнаться. Тем не менее, его сын Генри Бэббидж завершил упрощенную версию вычислительного блока аналитической машины ( мельницу ) в 1888 году. Он провел успешную демонстрацию ее использования в вычислительных таблицах в 1906 году.
В своей работе «Очерки об автоматике», опубликованной в 1914 году, Леонардо Торрес Кеведо написал краткую историю усилий Бэббиджа по созданию механической разностной машины и аналитической машины. В статье содержится проект машины, способной вычислять формулы типа , для последовательности наборов значений. Вся машина должна была управляться программой только для чтения , которая была полна положений для условного ветвления . Он также ввел идею арифметики с плавающей точкой . [26] [27] [28] В 1920 году, чтобы отпраздновать 100-летие изобретения арифмометра , Торрес представил в Париже электромеханический арифмометр, который позволял пользователю вводить арифметические задачи с помощью клавиатуры , а также вычислял и печатал результаты, [29] [30] [31] [32] демонстрируя осуществимость электромеханической аналитической машины. [33]
В первой половине 20-го века многие научные вычислительные потребности удовлетворялись все более сложными аналоговыми компьютерами, которые использовали прямую механическую или электрическую модель проблемы в качестве основы для вычислений . Однако они не были программируемыми и, как правило, не обладали универсальностью и точностью современных цифровых компьютеров. [34] Первым современным аналоговым компьютером была машина для прогнозирования приливов , изобретенная сэром Уильямом Томсоном (позже ставшим лордом Кельвином) в 1872 году. Дифференциальный анализатор , механический аналоговый компьютер, предназначенный для решения дифференциальных уравнений путем интегрирования с использованием колесно-дисковых механизмов, был концептуализирован в 1876 году Джеймсом Томсоном , старшим братом более известного сэра Уильяма Томсона. [16]
Искусство механических аналоговых вычислений достигло своего апогея с появлением дифференциального анализатора , созданного Х. Л. Хазеном и Ванневаром Бушем в Массачусетском технологическом институте в 1927 году. Он был создан на основе механических интеграторов Джеймса Томсона и усилителей крутящего момента, изобретенных Х. У. Ниманом. Было построено около дюжины таких устройств, прежде чем их устаревание стало очевидным. К 1950-м годам успех цифровых электронных компьютеров положил конец большинству аналоговых вычислительных машин, но аналоговые компьютеры продолжали использоваться в течение 1950-х годов в некоторых специализированных приложениях, таких как образование ( логарифмическая линейка ) и авиация ( системы управления ).
К 1938 году ВМС США разработали электромеханический аналоговый компьютер, достаточно маленький для использования на борту подводной лодки . Это был Torpedo Data Computer , который использовал тригонометрию для решения задачи стрельбы торпедой по движущейся цели. Во время Второй мировой войны аналогичные устройства разрабатывались и в других странах.
Ранние цифровые компьютеры были электромеханическими ; электрические переключатели управляли механическими реле для выполнения вычислений. Эти устройства имели низкую скорость работы и в конечном итоге были заменены гораздо более быстрыми полностью электрическими компьютерами, изначально использовавшими электронные лампы . Z2 , созданный немецким инженером Конрадом Цузе в 1939 году в Берлине , был одним из самых ранних примеров электромеханического релейного компьютера. [35]
В 1941 году Цузе продолжил свою более раннюю машину, выпустив Z3 , первый в мире работающий электромеханический программируемый полностью автоматический цифровой компьютер. [38] [39] Z3 был построен с 2000 реле , реализуя 22- битную длину слова , которая работала с тактовой частотой около 5–10 Гц . [40] Программный код поставлялся на перфорированной пленке , в то время как данные могли храниться в 64 словах памяти или подаваться с клавиатуры. В некоторых отношениях он был очень похож на современные машины, являясь пионером многочисленных достижений, таких как числа с плавающей точкой . Вместо более сложной в реализации десятичной системы (используемой в более ранней конструкции Чарльза Бэббиджа ), использование двоичной системы означало, что машины Цузе было проще в построении и потенциально более надежными, учитывая технологии, доступные в то время. [41] Z3 сам по себе не был универсальным компьютером, но мог быть расширен до Тьюринг-полного . [42] [43]
Следующий компьютер Цузе, Z4 , стал первым в мире коммерческим компьютером; после первоначальной задержки из-за Второй мировой войны, он был завершен в 1950 году и доставлен в ETH Zurich . [44] Компьютер был изготовлен собственной компанией Цузе, Zuse KG , которая была основана в 1941 году как первая компания с единственной целью разработки компьютеров в Берлине. [44]
Чисто электронные элементы схемы вскоре заменили свои механические и электромеханические эквиваленты, в то же время, когда цифровые вычисления заменили аналоговые. Инженер Томми Флауэрс , работавший на исследовательской станции почтового отделения в Лондоне в 1930-х годах, начал исследовать возможное использование электроники для телефонной станции . Экспериментальное оборудование, которое он построил в 1934 году, было введено в эксплуатацию пять лет спустя, преобразуя часть телефонной сети в электронную систему обработки данных, используя тысячи электронных ламп . [34] В США Джон Винсент Атанасов и Клиффорд Э. Берри из Университета штата Айова разработали и испытали компьютер Атанасова–Берри (ABC) в 1942 году, [45] первый «автоматический электронный цифровой компьютер». [46] Эта конструкция также была полностью электронной и использовала около 300 электронных ламп с конденсаторами, закрепленными в механически вращающемся барабане для памяти. [47]
Во время Второй мировой войны британские дешифровальщики в Блетчли-Парке добились ряда успехов в расшифровке немецких военных сообщений. Немецкая шифровальная машина Enigma была впервые атакована с помощью электромеханических бомб , которыми часто управляли женщины. [48] [49] Чтобы взломать более сложную немецкую машину Lorenz SZ 40/42 , использовавшуюся для высокоуровневой армейской связи, Макс Ньюман и его коллеги поручили Флауэрсу построить Colossus . [47] Он провел одиннадцать месяцев с начала февраля 1943 года, проектируя и строя первый Colossus. [50] После функционального испытания в декабре 1943 года Colossus был отправлен в Блетчли-Парк, куда он был доставлен 18 января 1944 года [51] и взломал свое первое сообщение 5 февраля. [47]
Colossus был первым в мире электронным цифровым программируемым компьютером. [34] Он использовал большое количество вентилей (вакуумных ламп). Он имел ввод с бумажной ленты и мог быть настроен для выполнения различных булевых логических операций с его данными, но он не был полным по Тьюрингу. Было построено девять Mk II Colossi (Mk I был преобразован в Mk II, что в общей сложности дало десять машин). Colossus Mark I содержал 1500 термоионных вентилей (трубок), но Mark II с 2400 вентилями был в пять раз быстрее и проще в эксплуатации, чем Mark I, что значительно ускоряло процесс декодирования. [52] [53]
ENIAC [54] (электронный числовой интегратор и компьютер) был первым электронным программируемым компьютером, построенным в США. Хотя ENIAC был похож на Colossus, он был намного быстрее, гибче и был полным по Тьюрингу. Как и в Colossus, «программа» на ENIAC определялась состояниями его соединительных кабелей и переключателей, что сильно отличалось от электронных машин с сохраненной программой , которые появились позже. После того, как программа была написана, ее нужно было механически установить в машину с помощью ручной переустановки разъемов и переключателей. Программистами ENIAC были шесть женщин, которых часто называли «девушками ENIAC». [55] [56]
Он сочетал в себе высокую скорость электроники с возможностью программирования для решения многих сложных задач. Он мог складывать или вычитать 5000 раз в секунду, в тысячу раз быстрее, чем любая другая машина. Он также имел модули для умножения, деления и извлечения квадратного корня. Высокоскоростная память была ограничена 20 словами (около 80 байт). Созданный под руководством Джона Мочли и Дж. Преспера Экерта в Университете Пенсильвании, ENIAC разрабатывался и конструировался с 1943 года до полной эксплуатации в конце 1945 года. Машина была огромной, весила 30 тонн, использовала 200 киловатт электроэнергии и содержала более 18 000 вакуумных ламп, 1500 реле и сотни тысяч резисторов, конденсаторов и индукторов. [57]
Принцип работы современного компьютера был предложен Аланом Тьюрингом в его основополагающей статье 1936 года [58] «О вычислимых числах » . Тьюринг предложил простое устройство, которое он назвал «Универсальной вычислительной машиной», и которое теперь известно как универсальная машина Тьюринга . Он доказал, что такая машина способна вычислять все, что вычислимо, выполняя инструкции (программу), сохраненные на ленте, что позволяет машине быть программируемой. Фундаментальная концепция дизайна Тьюринга — это сохраненная программа , где все инструкции для вычисления хранятся в памяти. Фон Нейман признал, что центральная концепция современного компьютера возникла благодаря этой статье. [59] Машины Тьюринга и по сей день являются центральным объектом изучения в теории вычислений . За исключением ограничений, налагаемых их конечными хранилищами памяти, современные компьютеры считаются полными по Тьюрингу , то есть они обладают способностью выполнения алгоритмов, эквивалентной универсальной машине Тьюринга.
Ранние вычислительные машины имели фиксированные программы. Изменение ее функции требовало перемонтажа и перестройки машины. [47] С предложением компьютера с хранимой программой это изменилось. Компьютер с хранимой программой по своей конструкции включает набор инструкций и может хранить в памяти набор инструкций ( программу ), которые детализируют вычисления . Теоретическая основа для компьютера с хранимой программой была изложена Аланом Тьюрингом в его статье 1936 года. В 1945 году Тьюринг присоединился к Национальной физической лаборатории и начал работу над разработкой электронного цифрового компьютера с хранимой программой. Его отчет 1945 года «Предлагаемый электронный калькулятор» был первой спецификацией для такого устройства. Джон фон Нейман из Университета Пенсильвании также распространил свой первый черновик отчета по EDVAC в 1945 году. [34]
Manchester Baby был первым в мире компьютером с хранимой программой . Он был построен в Университете Манчестера в Англии Фредериком К. Уильямсом , Томом Килберном и Джеффом Тутиллом и запустил свою первую программу 21 июня 1948 года. [60] Он был разработан как испытательный стенд для трубки Уильямса , первого цифрового запоминающего устройства с произвольным доступом . [61] Хотя в ретроспективе 1998 года компьютер был описан как «маленький и примитивный», он был первой рабочей машиной, содержащей все элементы, необходимые для современного электронного компьютера. [62] Как только Baby продемонстрировал осуществимость своей конструкции, в университете начался проект по его разработке в практически полезный компьютер, Manchester Mark 1 .
Mark 1, в свою очередь, быстро стал прототипом Ferranti Mark 1 , первого в мире коммерчески доступного компьютера общего назначения. [63] Созданный Ferranti , он был доставлен в Манчестерский университет в феврале 1951 года. По крайней мере семь из этих более поздних машин были доставлены между 1953 и 1957 годами, одна из них в лаборатории Shell в Амстердаме . [64] В октябре 1947 года директора британской кейтеринговой компании J. Lyons & Company решили принять активное участие в содействии коммерческой разработке компьютеров. Компьютер LEO I Лайонса , созданный по образцу кембриджского EDSAC 1949 года, вступил в эксплуатацию в апреле 1951 года [65] и выполнил первую в мире рутинную работу офисного компьютера .
Концепция полевого транзистора была предложена Юлиусом Эдгаром Лилиенфельдом в 1925 году. Джон Бардин и Уолтер Браттейн , работая под руководством Уильяма Шокли в Bell Labs , построили первый рабочий транзистор , точечный транзистор , в 1947 году, за которым в 1948 году последовал биполярный транзистор Шокли. [66] [67] С 1955 года транзисторы заменили электронные лампы в компьютерных конструкциях, что привело к появлению «второго поколения» компьютеров. По сравнению с электронными лампами транзисторы имеют много преимуществ: они меньше и требуют меньше энергии, чем электронные лампы, поэтому выделяют меньше тепла. Электронные транзисторы были намного надежнее электронных ламп и имели более длительный, неопределенный срок службы. Транзисторные компьютеры могли содержать десятки тысяч двоичных логических схем в относительно компактном пространстве. Однако ранние транзисторы с плоскими переходами были относительно громоздкими устройствами, которые было трудно изготавливать в условиях массового производства , что ограничивало их применение рядом специализированных приложений. [68]
В Университете Манчестера группа под руководством Тома Килберна спроектировала и построила машину, используя недавно разработанные транзисторы вместо ламп. [69] Их первый транзисторный компьютер и первый в мире был запущен в эксплуатацию к 1953 году , а вторая версия была завершена там же в апреле 1955 года. Однако машина использовала лампы для генерации тактовых сигналов частотой 125 кГц и в схеме для чтения и записи на ее магнитном барабане памяти , поэтому это был не первый полностью транзисторный компьютер. Это отличие принадлежит Harwell CADET 1955 года, [70] построенному электронным подразделением Исследовательского центра атомной энергии в Харвелле . [70] [71]
Полевой транзистор металл-оксид-кремний ( MOSFET), также известный как МОП-транзистор, был изобретен в Bell Labs между 1955 и 1960 годами [72] [73] [74] [75] [76] [77] и был первым по-настоящему компактным транзистором, который можно было миниатюризировать и производить массово для широкого спектра применений. [68] Благодаря своей высокой масштабируемости , [78] и гораздо более низкому энергопотреблению и более высокой плотности, чем у биполярных транзисторов, [79] МОП-транзистор сделал возможным создание интегральных схем высокой плотности . [80] [81] Помимо обработки данных, он также позволил практическое использование МОП-транзисторов в качестве элементов хранения ячеек памяти , что привело к разработке полупроводниковой МОП-памяти , которая заменила более раннюю память на магнитных сердечниках в компьютерах. МОП-транзистор привел к революции микрокомпьютеров , [82] и стал движущей силой компьютерной революции . [83] [84] МОП-транзистор является наиболее широко используемым транзистором в компьютерах, [85] [86] и является основным строительным блоком цифровой электроники . [87]
Следующий большой шаг вперед в вычислительной мощности произошел с появлением интегральной схемы (ИС). Идея интегральной схемы была впервые задумана ученым-радиолокатором, работавшим в Королевском радиолокационном учреждении Министерства обороны , Джеффри У. А. Даммером . Даммер представил первое публичное описание интегральной схемы на Симпозиуме по прогрессу в качественных электронных компонентах в Вашингтоне, округ Колумбия , 7 мая 1952 года. [88]
Первые работающие ИС были изобретены Джеком Килби в Texas Instruments и Робертом Нойсом в Fairchild Semiconductor . [89] Килби записал свои первоначальные идеи относительно интегральной схемы в июле 1958 года, успешно продемонстрировав первый работающий интегрированный пример 12 сентября 1958 года. [90] В своей патентной заявке от 6 февраля 1959 года Килби описал свое новое устройство как «корпус из полупроводникового материала... в котором все компоненты электронной схемы полностью интегрированы». [91] [92] Однако изобретение Килби было гибридной интегральной схемой (гибридной ИС), а не монолитным чипом интегральной схемы (ИС). [93] ИС Килби имела внешние проводные соединения, что затрудняло ее массовое производство. [94]
Нойс также придумал собственную идею интегральной схемы на полгода позже Килби. [95] Изобретение Нойса было первым настоящим монолитным чипом ИС. [96] [94] Его чип решил множество практических проблем, которые не решал чип Килби. Произведенный в Fairchild Semiconductor, он был сделан из кремния , тогда как чип Килби был сделан из германия . Монолитная ИС Нойса была изготовлена с использованием планарного процесса , разработанного его коллегой Жаном Эрни в начале 1959 года. В свою очередь, планарный процесс был основан на работе Карла Фроша и Линкольна Дерика по пассивации поверхности полупроводника диоксидом кремния. [97] [98] [99] [100] [101] [102]
Современные монолитные ИС в основном представляют собой интегральные схемы МОП ( металл-оксид-полупроводник ), построенные на основе МОП-транзисторов (МОП-транзисторов). [103] Самой ранней экспериментальной МОП-ИС, которая была изготовлена, была 16-транзисторная микросхема, созданная Фредом Хейманом и Стивеном Хофштейном в RCA в 1962 году . [104] Позднее General Microelectronics представила первую коммерческую МОП-ИС в 1964 году, [105] разработанную Робертом Норманом. [104] После разработки МОП-транзистора с самосовмещенным затвором (кремниевым затвором) Робертом Кервином, Дональдом Кляйном и Джоном Сарасе в Bell Labs в 1967 году, первая МОП-ИС с кремниевым затвором и самосовмещенными затворами была разработана Федерико Фаггином в Fairchild Semiconductor в 1968 году. [106] С тех пор МОП-транзистор стал наиболее важным компонентом устройства в современных ИС. [103]
Развитие интегральной схемы МОП привело к изобретению микропроцессора [ 107 ] [108] и возвестило о взрыве в коммерческом и личном использовании компьютеров. Хотя вопрос о том, какое именно устройство было первым микропроцессором, является спорным, отчасти из-за отсутствия согласия относительно точного определения термина «микропроцессор», в значительной степени бесспорно, что первым однокристальным микропроцессором был Intel 4004 [109], разработанный и реализованный Федерико Фаггином с его технологией МОП-ИС с кремниевым затвором [107] совместно с Тедом Хоффом , Масатоши Шимой и Стэнли Мазором в Intel . [b] [111] В начале 1970-х годов технология МОП-ИС позволила интегрировать более 10 000 транзисторов на одном кристалле. [81]
Системы на кристалле (SoC) — это полноценные компьютеры на микросхеме (или чипе) размером с монету. [112] Они могут иметь или не иметь интегрированную оперативную память и флэш-память . Если она не интегрирована, оперативная память обычно размещается непосредственно над (известно как «Пакет на корпусе ») или под (на противоположной стороне печатной платы ) SoC, а флэш-память обычно размещается прямо рядом с SoC. Это делается для повышения скорости передачи данных, поскольку сигналам данных не приходится проходить большие расстояния. Со времени ENIAC в 1945 году компьютеры значительно продвинулись вперед, причем современные SoC (например, Snapdragon 865) имеют размер монеты, а также в сотни тысяч раз мощнее ENIAC, интегрируя миллиарды транзисторов и потребляя всего несколько ватт энергии.
Первые мобильные компьютеры были тяжелыми и работали от сети. 50-фунтовый (23 кг) IBM 5100 был одним из первых примеров. Более поздние портативные компьютеры, такие как Osborne 1 и Compaq Portable , были значительно легче, но все еще нуждались в подключении к сети. Первые ноутбуки, такие как Grid Compass , устранили это требование, включив батареи, — и с продолжающейся миниатюризацией вычислительных ресурсов и достижениями в области портативных батарей, портативные компьютеры стали пользоваться популярностью в 2000-х годах. [113] Те же разработки позволили производителям интегрировать вычислительные ресурсы в сотовые мобильные телефоны к началу 2000-х годов.
Эти смартфоны и планшеты работают на различных операционных системах и недавно стали доминирующим вычислительным устройством на рынке. [114] Они работают на базе систем на кристалле (SoC), которые представляют собой полноценные компьютеры на микрочипе размером с монету. [112]
Компьютеры можно классифицировать различными способами, включая:
Термин « аппаратное обеспечение » охватывает все те части компьютера, которые являются осязаемыми физическими объектами. Схемы , компьютерные чипы, графические карты, звуковые карты, память (ОЗУ), материнская плата, дисплеи, блоки питания, кабели, клавиатуры, принтеры и устройства ввода типа «мышь» — все это аппаратное обеспечение.
Компьютер общего назначения состоит из четырех основных компонентов: арифметико-логического устройства (АЛУ), блока управления , памяти и устройств ввода и вывода (совместно называемых I/O). Эти части соединены между собой шинами , часто состоящими из групп проводов . Внутри каждой из этих частей находятся тысячи или триллионы небольших электрических цепей , которые можно включать и выключать с помощью электронного переключателя . Каждая цепь представляет собой бит (двоичную цифру) информации, так что когда цепь включена, она представляет собой «1», а когда выключена, она представляет собой «0» (в положительном логическом представлении). Цепи организованы в логические вентили, так что одна или несколько цепей могут управлять состоянием одной или нескольких других цепей.
Когда необработанные данные отправляются на компьютер с помощью устройств ввода, данные обрабатываются и отправляются на устройства вывода. Устройства ввода могут быть ручными или автоматизированными. Процесс обработки в основном регулируется центральным процессором. Вот некоторые примеры устройств ввода:
Средства, посредством которых компьютер выдает вывод, известны как устройства вывода. Вот некоторые примеры устройств вывода:
Блок управления (часто называемый системой управления или центральным контроллером) управляет различными компонентами компьютера; он считывает и интерпретирует (декодирует) инструкции программы, преобразуя их в сигналы управления, которые активируют другие части компьютера. [d] Системы управления в современных компьютерах могут изменять порядок выполнения некоторых инструкций для повышения производительности.
Ключевым компонентом, общим для всех процессоров, является счетчик программ , специальная ячейка памяти ( регистр ), которая отслеживает, из какой ячейки памяти должна быть считана следующая инструкция. [e]
Функция системы управления выглядит следующим образом — это упрощенное описание, и некоторые из этих шагов могут выполняться одновременно или в разном порядке в зависимости от типа ЦП:
Поскольку счетчик программ (концептуально) является просто еще одним набором ячеек памяти, его можно изменить с помощью вычислений, выполняемых в АЛУ. Добавление 100 к счетчику программ приведет к тому, что следующая инструкция будет считана с места, расположенного на 100 позиций дальше по программе. Инструкции, которые изменяют счетчик программ, часто называются «прыжками» и допускают циклы (инструкции, которые повторяются компьютером) и часто условное выполнение инструкций (оба примера потока управления ).
Последовательность операций, которую выполняет блок управления для обработки инструкции, сама по себе похожа на короткую компьютерную программу, и действительно, в некоторых более сложных конструкциях ЦП есть еще один, еще меньший компьютер, называемый микросеквенсором , который запускает программу микрокода , вызывающую все эти события.
Блок управления, АЛУ и регистры вместе известны как центральный процессор (ЦП). Ранние ЦП состояли из множества отдельных компонентов. С 1970-х годов ЦП обычно строились на основе одной интегральной схемы МОП, называемой микропроцессором .
ALU может выполнять два класса операций: арифметические и логические. [119] Набор арифметических операций, которые поддерживает конкретное ALU, может быть ограничен сложением и вычитанием или может включать умножение, деление, тригонометрические функции, такие как синус, косинус и т. д., и квадратные корни . Некоторые из них могут работать только с целыми числами ( integer ), в то время как другие используют плавающую точку для представления действительных чисел , хотя и с ограниченной точностью. Однако любой компьютер, который способен выполнять только самые простые операции, может быть запрограммирован на разбиение более сложных операций на простые шаги, которые он может выполнить. Следовательно, любой компьютер может быть запрограммирован на выполнение любой арифметической операции, хотя это займет больше времени, если его ALU напрямую не поддерживает эту операцию. ALU также может сравнивать числа и возвращать булевы значения истинности (истина или ложь) в зависимости от того, равно ли одно другому, больше или меньше его («64 больше 65?»). Логические операции включают в себя булеву логику : AND , OR , XOR и NOT . Они могут быть полезны для создания сложных условных операторов и обработки булевой логики .
Суперскалярные компьютеры могут содержать несколько АЛУ, что позволяет им обрабатывать несколько инструкций одновременно. [120] Графические процессоры и компьютеры с функциями SIMD и MIMD часто содержат АЛУ, которые могут выполнять арифметические операции с векторами и матрицами .
Память компьютера можно рассматривать как список ячеек, в которые можно помещать или считывать числа. Каждая ячейка имеет пронумерованный «адрес» и может хранить одно число. Компьютеру можно дать указание «поместить число 123 в ячейку с номером 1357» или «прибавить число, которое находится в ячейке 1357, к числу, которое находится в ячейке 2468, и поместить ответ в ячейку 1595». Информация, хранящаяся в памяти, может представлять собой практически все. Буквы, числа, даже компьютерные инструкции могут быть помещены в память с одинаковой легкостью. Поскольку процессор не различает различные типы информации, ответственность за придание значения тому, что память видит как не что иное, как ряд чисел, лежит на программном обеспечении.
Почти во всех современных компьютерах каждая ячейка памяти настроена на хранение двоичных чисел группами по восемь бит (называемых байтом ). Каждый байт способен представлять 256 различных чисел (2 8 = 256); либо от 0 до 255, либо от −128 до +127. Для хранения больших чисел могут использоваться несколько последовательных байтов (обычно два, четыре или восемь). Когда требуются отрицательные числа, они обычно хранятся в виде дополнительного кода. Возможны и другие варианты, но обычно они не встречаются за пределами специализированных приложений или исторических контекстов. Компьютер может хранить в памяти любую информацию, если ее можно представить в числовом виде. Современные компьютеры имеют миллиарды или даже триллионы байтов памяти.
Центральный процессор содержит специальный набор ячеек памяти, называемых регистрами , которые могут считываться и записываться гораздо быстрее, чем основная область памяти. Обычно имеется от двух до ста регистров в зависимости от типа центрального процессора. Регистры используются для наиболее часто используемых элементов данных, чтобы избежать необходимости доступа к основной памяти каждый раз, когда требуются данные. Поскольку данные постоянно обрабатываются, уменьшение необходимости доступа к основной памяти (которая часто медленная по сравнению с АЛУ и блоками управления) значительно увеличивает скорость компьютера.
Основная память компьютера бывает двух основных видов:
ОЗУ можно считывать и записывать в любое время по команде ЦП, но ПЗУ предварительно загружено данными и программным обеспечением, которые никогда не изменяются, поэтому ЦП может только считывать из него. ПЗУ обычно используется для хранения начальных инструкций по запуску компьютера. Как правило, содержимое ОЗУ стирается при отключении питания компьютера, но ПЗУ сохраняет свои данные неограниченно долго. В ПК ПЗУ содержит специализированную программу, называемую BIOS , которая управляет загрузкой операционной системы компьютера с жесткого диска в ОЗУ при каждом включении или сбросе компьютера. Во встроенных компьютерах , которые часто не имеют дисководов, все необходимое программное обеспечение может храниться в ПЗУ. Программное обеспечение, хранящееся в ПЗУ, часто называют прошивкой , потому что оно теоретически больше похоже на оборудование, чем на программное обеспечение. Флэш-память стирает различие между ПЗУ и ОЗУ, поскольку она сохраняет свои данные при выключении, но также является перезаписываемой. Однако она, как правило, намного медленнее обычных ПЗУ и ОЗУ, поэтому ее использование ограничено приложениями, где высокая скорость не нужна. [f]
В более сложных компьютерах может быть одна или несколько кэш-памятей RAM , которые медленнее регистров, но быстрее основной памяти. Обычно компьютеры с таким типом кэша спроектированы так, чтобы автоматически перемещать часто необходимые данные в кэш, часто без необходимости какого-либо вмешательства со стороны программиста.
Ввод-вывод — это средство, с помощью которого компьютер обменивается информацией с внешним миром. [122] Устройства, которые обеспечивают ввод или вывод в компьютер, называются периферийными устройствами . [123] На типичном персональном компьютере периферийные устройства включают устройства ввода, такие как клавиатура и мышь , и устройства вывода, такие как дисплей и принтер . Жесткие диски , дисководы и оптические дисководы служат как устройствами ввода, так и устройствами вывода. Компьютерные сети — это еще одна форма ввода-вывода. Устройства ввода-вывода часто сами по себе являются сложными компьютерами со своим собственным ЦП и памятью. Графический процессор может содержать пятьдесят или более крошечных компьютеров, которые выполняют вычисления, необходимые для отображения 3D-графики . [ требуется цитата ] Современные настольные компьютеры содержат множество меньших компьютеров, которые помогают основному ЦП выполнять ввод-вывод. Плоский экран дисплея эпохи 2016 года содержит собственную компьютерную схему.
В то время как компьютер можно рассматривать как выполняющий одну гигантскую программу, хранящуюся в его основной памяти, в некоторых системах необходимо создать видимость выполнения нескольких программ одновременно. Это достигается многозадачностью, т. е. быстрым переключением компьютера между выполнением каждой программы по очереди. [124] Одним из способов, с помощью которого это делается, является специальный сигнал, называемый прерыванием , который может периодически заставлять компьютер прекращать выполнение инструкций там, где он был, и делать что-то другое вместо этого. Запоминая, где он выполнялся до прерывания, компьютер может вернуться к этой задаче позже. Если несколько программ работают «одновременно», то генератор прерываний может вызывать несколько сотен прерываний в секунду, вызывая переключение программ каждый раз. Поскольку современные компьютеры обычно выполняют инструкции на несколько порядков быстрее, чем человеческое восприятие, может показаться, что одновременно работают многие программы, хотя в любой данный момент времени выполняется только одна. Этот метод многозадачности иногда называют «разделением времени», поскольку каждой программе поочередно выделяется «отрезок» времени. [125]
До эпохи недорогих компьютеров основным применением многозадачности было предоставление возможности многим людям совместно использовать один и тот же компьютер. Казалось бы, многозадачность заставит компьютер, переключающийся между несколькими программами, работать медленнее, прямо пропорционально количеству запущенных на нем программ, но большинство программ тратят большую часть времени на ожидание, пока медленные устройства ввода/вывода завершат свои задачи. Если программа ждет, когда пользователь щелкнет мышью или нажмет клавишу на клавиатуре, то она не будет тратить «временной отрезок», пока не произойдет событие , которого она ждет. Это освобождает время для выполнения других программ, так что многие программы могут быть запущены одновременно без неприемлемой потери скорости.
Некоторые компьютеры спроектированы так, чтобы распределять свою работу по нескольким ЦП в многопроцессорной конфигурации, технология, которая когда-то использовалась только в больших и мощных машинах, таких как суперкомпьютеры , мэйнфреймы и серверы . Многопроцессорные и многоядерные (несколько ЦП на одной интегральной схеме) персональные и ноутбуки теперь широко доступны и в результате все чаще используются на рынках нижнего ценового диапазона.
Суперкомпьютеры в частности часто имеют весьма уникальные архитектуры, которые значительно отличаются от базовой архитектуры хранимых программ и от компьютеров общего назначения. [g] Они часто имеют тысячи процессоров, настраиваемые высокоскоростные соединения и специализированное вычислительное оборудование. Такие конструкции, как правило, полезны только для специализированных задач из-за большого масштаба организации программы, необходимой для одновременного использования большинства доступных ресурсов. Суперкомпьютеры обычно находят применение в крупномасштабном моделировании , графическом рендеринге и криптографических приложениях, а также в других так называемых « смущающе параллельных » задачах.
Программное обеспечение относится к частям компьютера, которые не имеют материальной формы, таким как программы, данные, протоколы и т. д. Программное обеспечение — это часть компьютерной системы, которая состоит из закодированной информации или компьютерных инструкций, в отличие от физического оборудования , из которого построена система. Компьютерное программное обеспечение включает в себя компьютерные программы, библиотеки и связанные с ними неисполняемые данные , такие как онлайн-документация или цифровые носители . Его часто делят на системное программное обеспечение и прикладное программное обеспечение . Компьютерное оборудование и программное обеспечение требуют друг друга, и ни одно из них не может быть реалистично использовано само по себе. Когда программное обеспечение хранится в оборудовании, которое не может быть легко изменено, например, в BIOS ROM в IBM PC-совместимом компьютере, его иногда называют «прошивкой».
Существуют тысячи различных языков программирования — некоторые из них предназначены для общего назначения, другие полезны только для узкоспециализированных приложений.
Определяющей чертой современных компьютеров, которая отличает их от всех других машин, является то, что их можно программировать . То есть, компьютеру можно дать некоторый тип инструкций ( программу ), и он их обработает. Современные компьютеры, основанные на архитектуре фон Неймана, часто имеют машинный код в форме императивного языка программирования . С практической точки зрения компьютерная программа может состоять всего из нескольких инструкций или охватывать многие миллионы инструкций, как, например, программы для текстовых процессоров и веб-браузеров . Типичный современный компьютер может выполнять миллиарды инструкций в секунду ( гигафлопс ) и редко ошибается в течение многих лет работы. Большие компьютерные программы, состоящие из нескольких миллионов инструкций, могут занять у команд программистов годы написания, и из-за сложности задачи почти наверняка содержат ошибки.
Этот раздел применим к большинству распространенных компьютеров на базе ОЗУ .
В большинстве случаев компьютерные инструкции просты: сложить одно число с другим, переместить некоторые данные из одного места в другое, отправить сообщение на какое-то внешнее устройство и т. д. Эти инструкции считываются из памяти компьютера и обычно выполняются ( выполняются ) в том порядке, в котором они были даны. Однако обычно существуют специализированные инструкции, сообщающие компьютеру о необходимости перейти вперед или назад в какое-то другое место программы и продолжить выполнение оттуда. Они называются инструкциями «перехода» (или ветвлениями ). Кроме того, инструкции перехода могут выполняться условно, так что в зависимости от результата какого-то предыдущего вычисления или какого-то внешнего события могут использоваться различные последовательности инструкций. Многие компьютеры напрямую поддерживают подпрограммы , предоставляя тип перехода, который «запоминает» место, из которого он перешел, и другую инструкцию для возврата к инструкции, следующей за этой инструкцией перехода.
Выполнение программы можно сравнить с чтением книги. Хотя человек обычно читает каждое слово и строку последовательно, иногда он может вернуться к более раннему месту в тексте или пропустить разделы, которые не представляют интереса. Аналогично, компьютер может иногда возвращаться и повторять инструкции в каком-то разделе программы снова и снова, пока не будет выполнено какое-то внутреннее условие. Это называется потоком управления внутри программы, и это то, что позволяет компьютеру многократно выполнять задачи без вмешательства человека.
Для сравнения, человек, использующий карманный калькулятор, может выполнить базовую арифметическую операцию, например, сложение двух чисел, всего несколькими нажатиями кнопок. Но чтобы сложить все числа от 1 до 1000, потребуются тысячи нажатий кнопок и много времени, с почти наверняка сделанной ошибкой. С другой стороны, компьютер можно запрограммировать на это всего несколькими простыми инструкциями. Следующий пример написан на языке ассемблера MIPS :
begin: addi $8 , $0 , 0 # инициализируем сумму 0 addi $9 , $0 , 1 # устанавливаем первое число в add = 1 loop: slti $10 , $9 , 1000 # проверяем, меньше ли число 1000 beq $10 , $0 , finish # если нечетное число больше n, то выходим add $8 , $8 , $9 # обновляем сумму addi $9 , $9 , 1 # получаем следующее число j loop # повторяем процесс суммирования finish: add $2 , $8 , $0 # помещаем сумму в выходной регистр
После того, как вы дадите команду запустить эту программу, компьютер выполнит повторяющуюся задачу сложения без дальнейшего вмешательства человека. Он почти никогда не сделает ошибку, и современный ПК может выполнить задачу за долю секунды.
В большинстве компьютеров отдельные инструкции хранятся в виде машинного кода, причем каждой инструкции присваивается уникальный номер (ее код операции или сокращенно код операции ). Команда сложения двух чисел будет иметь один код операции; команда их умножения будет иметь другой код операции и так далее. Простейшие компьютеры способны выполнять любую из нескольких различных инструкций; более сложные компьютеры имеют несколько сотен на выбор, каждая из которых имеет уникальный числовой код. Поскольку память компьютера способна хранить числа, она также может хранить коды инструкций. Это приводит к важному факту, что целые программы (которые являются просто списками этих инструкций) могут быть представлены в виде списков чисел и сами могут обрабатываться внутри компьютера так же, как и числовые данные. Фундаментальная концепция хранения программ в памяти компьютера вместе с данными, с которыми они работают, является сутью архитектуры фон Неймана, или архитектуры хранимой программы. [127] [128] В некоторых случаях компьютер может хранить часть или всю свою программу в памяти, которая хранится отдельно от данных, с которыми он работает. Это называется архитектурой Гарварда в честь компьютера Harvard Mark I. Современные компьютеры фон Неймана демонстрируют некоторые черты архитектуры Гарварда в своих конструкциях, например, в кэшах ЦП .
Хотя можно писать компьютерные программы в виде длинных списков чисел ( машинный язык ) и хотя эта техника использовалась во многих ранних компьютерах, [h] на практике это чрезвычайно утомительно и потенциально подвержено ошибкам, особенно для сложных программ. Вместо этого каждой базовой инструкции можно дать короткое имя, указывающее на ее функцию и легко запоминающееся — мнемонику, такую как ADD, SUB, MULT или JUMP. Эти мнемоники в совокупности известны как язык ассемблера компьютера . Преобразование программ, написанных на языке ассемблера, в то, что компьютер может фактически понять (машинный язык), обычно выполняется компьютерной программой, называемой ассемблером.
Языки программирования предоставляют различные способы задания программ для запуска компьютеров. В отличие от естественных языков , языки программирования разработаны так, чтобы не допускать двусмысленности и быть краткими. Это чисто письменные языки, и их часто трудно читать вслух. Обычно они либо транслируются в машинный код компилятором или ассемблером перед запуском, либо транслируются непосредственно во время выполнения интерпретатором . Иногда программы выполняются гибридным методом двух методов.
Машинные языки и языки ассемблера, которые их представляют (совместно называемые языками программирования низкого уровня ), как правило, уникальны для конкретной архитектуры центрального процессора компьютера ( ЦП ). Например, ЦП архитектуры ARM (такой, как можно найти в смартфоне или портативной видеоигре ) не может понимать машинный язык ЦП x86 , который может быть в ПК . [i] Исторически было создано значительное количество других архитектур ЦП, которые нашли широкое применение, в частности, включая MOS Technology 6502 и 6510 в дополнение к Zilog Z80.
Хотя писать длинные программы на языке ассемблера значительно проще, чем на машинном языке, писать длинные программы на нем часто сложно и также подвержено ошибкам. Поэтому большинство практических программ пишутся на более абстрактных языках программирования высокого уровня , которые способны более удобно выражать потребности программиста (и тем самым помогают уменьшить ошибки программиста). Языки высокого уровня обычно «компилируются» в машинный язык (или иногда в язык ассемблера, а затем в машинный язык) с помощью другой компьютерной программы, называемой компилятором . [ j] Языки высокого уровня меньше связаны с работой целевого компьютера, чем язык ассемблера, и больше связаны с языком и структурой проблемы(задач), которые должна решить конечная программа. Поэтому часто можно использовать разные компиляторы для перевода одной и той же программы на языке высокого уровня на машинный язык многих различных типов компьютеров. Это часть средств, с помощью которых программное обеспечение, такое как видеоигры, может быть сделано доступным для различных компьютерных архитектур, таких как персональные компьютеры и различные игровые консоли .
Проектирование небольших программ относительно простое и включает анализ проблемы, сбор входных данных, использование программных конструкций в языках, разработку или использование установленных процедур и алгоритмов, предоставление данных для выходных устройств и решений проблемы по мере применимости. [129] По мере того, как проблемы становятся больше и сложнее, встречаются такие функции, как подпрограммы, модули, формальная документация и новые парадигмы, такие как объектно-ориентированное программирование. [130] Большие программы, включающие тысячи строк кода и более, требуют формальных программных методологий. [131] Задача разработки больших программных систем представляет собой значительную интеллектуальную проблему. [132] Производство программного обеспечения с приемлемо высокой надежностью в рамках предсказуемого графика и бюджета исторически было сложным; [133] академическая и профессиональная дисциплина программной инженерии концентрируется именно на этой проблеме. [134]
Ошибки в компьютерных программах называются « багами ». Они могут быть безвредными и не влиять на полезность программы или иметь лишь незначительные последствия. Однако в некоторых случаях они могут привести к « зависанию » программы или всей системы, становясь невосприимчивыми к вводу данных, такому как щелчки мыши или нажатия клавиш, к полному отказу или сбою . [135] В противном случае безвредные ошибки иногда могут быть использованы в злонамеренных целях недобросовестным пользователем, пишущим эксплойт , код, предназначенный для использования ошибки и нарушения правильной работы компьютера. Ошибки обычно не являются ошибкой компьютера. Поскольку компьютеры просто выполняют данные им инструкции, ошибки почти всегда являются результатом ошибки программиста или упущения, допущенного при проектировании программы. [k] Адмирал Грейс Хоппер , американский учёный-компьютерщик и разработчик первого компилятора , считается первой, кто использовал термин «баги» в вычислительной технике после того, как в сентябре 1947 года была обнаружена дохлая моль, закоротившая реле в компьютере Harvard Mark II. [136]
Компьютеры использовались для координации информации между несколькими локациями с 1950-х годов. Система SAGE армии США была первым крупномасштабным примером такой системы, которая привела к появлению ряда специализированных коммерческих систем, таких как Sabre . [137] В 1970-х годах компьютерные инженеры в научно-исследовательских институтах по всем Соединенным Штатам начали связывать свои компьютеры вместе с помощью телекоммуникационных технологий. Усилия финансировались ARPA (теперь DARPA ), и получившаяся компьютерная сеть была названа ARPANET . [138] Технологии, которые сделали возможным Arpanet, распространялись и развивались.
Со временем сеть распространилась за пределы академических и военных учреждений и стала известна как Интернет. Появление сетей включало переопределение природы и границ компьютера. Компьютерные операционные системы и приложения были модифицированы, чтобы включить возможность определять и получать доступ к ресурсам других компьютеров в сети, таким как периферийные устройства, сохраненная информация и тому подобное, как расширения ресурсов отдельного компьютера. Первоначально эти возможности были доступны в основном людям, работающим в высокотехнологичных средах, но в 1990-х годах распространение таких приложений, как электронная почта и Всемирная паутина , в сочетании с развитием дешевых, быстрых сетевых технологий, таких как Ethernet и ADSL, привело к тому, что компьютерные сети стали практически повсеместными. Фактически, количество компьютеров, объединенных в сеть, растет феноменально. Очень большая часть персональных компьютеров регулярно подключается к Интернету для общения и получения информации. «Беспроводные» сети, часто использующие сети мобильной связи, означают, что сети становятся все более повсеместными даже в мобильных вычислительных средах.
Компьютер не обязательно должен быть электронным , или иметь процессор , оперативную память или даже жесткий диск . В то время как популярное использование слова «компьютер» является синонимом персонального электронного компьютера, [l] типичное современное определение компьютера таково: « Устройство, которое вычисляет , особенно программируемая [обычно] электронная машина, которая выполняет высокоскоростные математические или логические операции или которая собирает, хранит, сопоставляет или иным образом обрабатывает информацию». [139] Согласно этому определению, любое устройство, которое обрабатывает информацию, квалифицируется как компьютер.
Ведутся активные исследования по созданию нетрадиционных компьютеров из многих перспективных новых типов технологий, таких как оптические компьютеры , ДНК-компьютеры , нейронные компьютеры и квантовые компьютеры . Большинство компьютеров универсальны и способны вычислять любую вычислимую функцию , и ограничены только объемом памяти и скоростью работы. Однако различные конструкции компьютеров могут давать совершенно разную производительность для конкретных задач; например, квантовые компьютеры потенциально могут очень быстро взломать некоторые современные алгоритмы шифрования (с помощью квантовой факторизации ).
Существует много типов компьютерных архитектур :
Из всех этих абстрактных машин квантовый компьютер является наиболее перспективным для революции в вычислениях. [140] Логические вентили являются общей абстракцией, которая может применяться к большинству из вышеперечисленных цифровых или аналоговых парадигм. Способность хранить и выполнять списки инструкций, называемых программами, делает компьютеры чрезвычайно универсальными, отличая их от калькуляторов . Тезис Чёрча-Тьюринга является математическим утверждением этой универсальности: любой компьютер с минимальными возможностями (будучи полным по Тьюрингу) , в принципе, способен выполнять те же задачи, что и любой другой компьютер. Следовательно, любой тип компьютера ( нетбук , суперкомпьютер , клеточный автомат и т. д.) способен выполнять те же вычислительные задачи, имея достаточно времени и емкости хранилища.
Компьютер будет решать проблемы именно так, как он запрограммирован, независимо от эффективности, альтернативных решений, возможных сокращений или возможных ошибок в коде. Компьютерные программы, которые обучаются и адаптируются, являются частью развивающейся области искусственного интеллекта и машинного обучения . Продукты на основе искусственного интеллекта обычно делятся на две основные категории: системы на основе правил и системы распознавания образов . Системы на основе правил пытаются представлять правила, используемые экспертами-людьми, и, как правило, дороги в разработке. Системы на основе образов используют данные о проблеме для выработки выводов. Примерами систем на основе образов являются распознавание голоса , распознавание шрифтов, перевод и развивающаяся область онлайн-маркетинга.
По мере того, как использование компьютеров распространяется в обществе, растет и число профессий, связанных с компьютерами.
Потребность компьютеров в совместной работе и обмене информацией породила потребность в создании множества организаций, клубов и обществ по стандартизации как формального, так и неформального характера.
Конрад Цузе получил полуофициальный титул "изобретателя современного компьютера"
[
кто?
]
.
фон Нейман ... решительно подчеркнул мне и, я уверен, другим, что фундаментальная концепция принадлежит Тьюрингу — в той мере, в какой ее не предвосхитили Бэббидж, Лавлейс и другие.Письмо Стэнли Франкеля Брайану Рэнделлу , 1972 г.
Относительная простота и низкое энергопотребление МОП-транзисторов способствовали сегодняшней микрокомпьютерной революции.
Это называется архитектурой хранимой программы или моделью хранимой программы, также известной как архитектура фон Неймана. Мы будем использовать эти термины взаимозаменяемо.
SAGE помог создать первую по-настоящему крупномасштабную коммерческую сеть в режиме реального времени: компьютеризированную систему бронирования авиабилетов SABRE.