Как компьютер преобразовывает программный код в то, что мы в итоге видим на экране?

2601
3
0
3 октября
02:10
октябрь
2015

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

Компьютер - это очень сложно-устроенная система. Чтобы действительно понять "как", давайте лучше начнём разбираться не с компьютера, а с радиосвязи.

Один человек говорит что-то в микрофон (аналогия программы в компьютере), а другой человек слышит, что было сказано (аналогия картинки на экране). Как это работает?

Микрофон преобразует звуковые колебания (речь) в аналогичные колебания электрического тока. И вот с этого момента начинаем смотреть. Провод микрофона (в котором ток) соединён с электрической схемой (провода, катушки, транзисторы, вот это вот всё). Когда ток есть (что-то сказали в микрофон), электроны (из которых ток состоит) начинают приходить в транзистор. Когда они туда приходят, поведение транзистора меняется, он начинает пропускать ток по-другому. Можно сказать, что ток (от микрофона) управляет поведением транзистора. Что представляет из себя транзистор? Грубо говоря, это такая электрическая штука с тремя ножками (проводами). Он очень ценен тем, что при помощи него можно выполнять что-то вроде простейших арифметических действий. Что это значит? Допустим, на одну ножку мы подаём какой-то ток. Он свободно течёт с первой ножки на третью. А на вторую ножку мы подаём другой ток, который сам по себе не столько куда-то течёт, сколько управляет тем, насколько легко ток течёт из первой ножки в третью. Получается что-то вроде процесса умножения. Если мы "поддадим" тока на вторую ножку, ток с первой ножки в третью начнёт течь активнее. Если мы, уберём ток со второй ножки, ток с первой на третью, быть может, вообще не сможет течь. При этом, конечно, мы можем изменять не только ток на второй ножке, но и ток на первой. Если на первой ножке ничего нет, то и на третьей ножке ничего не окажется.

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

А теперь давайте представим радиопередатчик, который передаёт сигнал радиоприёмнику, а радиоприёмник не только преобразует его в звук, но ещё и как-то этот звук меняет. Радиоприёмник будет издавать звук, но другой. А если рядом поставить микрофон, передатчик и опять этот звук куда-нибудь отправить? Мы получили простейший пример (может быть, немного несуразный), когда "машина" разговаривает сама с собой.

Теперь давайте быстро разберём общую концепцию компьютера. Для простоты давайте придумаем упрощённый вариант компьютера.

У компьютера должна быть память. Как организована память? С помощью двоичного счёта. Это значит, что в каждой ячейке памяти хранится либо "одно", либо "другое". Обычно это обозначают цифрами 1 и 0. Если взять теперь много таких нулей/единиц, ими можно считать. Считать будем так: 0000 (0), 0001 (1), 0010 (2), 0011 (3), 0100 (4), 0101 (5), 0110 (6), 0111 (7) и т. д. Далее придумаем так: когда процессору нужно узнать, что там, в какой-то конкретной ячейке памяти (1 или 0) - он посылает туда электрический ток. Мы можем сделать такую электрическую схему ячейки памяти, что когда в ней 1, мы сохраняем небольшое количество тока в конденсаторе и когда от процессора приходит (в виде тока) вопрос "что в памяти", мы используем этот запасённый ток, отправляем его на транзистор и транзистор отправляет в ответ какой-то более-менее заметный ток. Если процессор этот ток получил, значит, в памяти была 1. А что если 0? Схема памяти устроена так, что в этом случае конденсатор пуст, тока нет, поэтому на транзистор ничего не приходит и поэтому процессор получает "ничего". Если так и вышло, значит, процессор знает, что в памяти 0. Процессор также может не только узнавать, что в памяти (читать), но и писать в память. Идея проста. Когда приходит комбинация нулей и единичек, они заряжают конденсаторы. Единица (наличие тока) конденсатор зарядила, ноль (нет тока) оставил конденсатор разряженным.

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

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

Это была одна команда... Далее процессор берёт число из следующего адреса. Для того, чтобы знать, откуда брать числа, которые являются программой, у процессора есть регистр, в котором он хранит текущий адрес команды. Каждый раз, как он берёт очередную команду, он прибавляет к этому регистру единичку (для этого опять существует целая схема, которая умеет складывать числа). Поэтому процессор каждый раз берёт число из следующих 64 конденсаторов памяти. Так он движется число за числом и делает что-то полезное. Например, следующим числом, будет число, которое означает "возьми из адреса (который, как обычно, будет указан далее) число и запиши его во второй регистр". Потом будет "возьми число (адрес указан далее) и запиши в третий регистр". Потом, например, "вычти из числа в первом регистре число второго регистра и результат запиши снова в первый регистр". Потом "если в первом регистре сейчас ноль, поменяй число в счётчике адреса на число, которое сейчас находится в третьем регистре" (есть и такая команда).

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

На этом примере мы увидели, как процессор проявляет признаки разума. Он оценивает ситуацию (равны ли числа) и, в зависимости от результата, начинает делать либо одно, либо другое.

Описанный пример - это крошечная часть того, что очень часто встречается в реальных программах. Я описал работу четырёх команд. В программах миллионы подобных комманд. "Возьми, сложи, проверь, сравни, запиши, прочти". Так из простейших элементов складывается разумное поведение.

Ну а как всё это вывести на экран? Это уже просто. Существует видеокарта. Это отдельная схема со своей собственной памятью. При этом, допустим, 60 раз в секунду, видеокарта "сканирует" свою память и поочерёдно, число за числом, записывает сигнал в видеовыход. Только она не выдаёт число по 64 проводам (как мы это делали раньше) а сперва преобразует число: чем больше это число, тем сильнее видеокарта подаёт ток. В итоге мы получаем, что сила тока соответствует величине числа. Этот провод идёт к монитору. Монитор же, поочерёдно, выводит этот сигнал точка за точкой. В мониторе есть красные, зелёные и синие точки (очень мелкие, может потребоваться лупа). Чем сильнее ток в этот момент, тем ярче зажигается точка.

То есть, операционная система (которая является очень сложной программой) содержит в себе программу, которая управляет рисованием на экране. Когда нужно что-то показать на экране, эта программа начинает записывать нужные числа в память видеокарты. А видеокарта превращает эти числа в сигнал для монитора и монитор это показывает (на самом деле, так было лет 10 назад, сейчас уже мониторы, по сути, тоже являются простеньким компьютером, который получает картинку в виде чисел, сам рисует разные меню настройки и пр., но это уже частности).

28
2
декабрь
2016

если процессор получает ответ 1 то продолжает операцию счисления  если 0 то результат счисления принимается для дальнейшей обработки программой

как то так 

-3
1
октябрь
2015

Хм... Для того, чтобы это объяснить, нужно рассказать всё от азов электротехники до основ цифровой логики и обработки сигнала в различных электронных устройствах.

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

-3
0
Если вы знаете ответ на этот вопрос и можете аргументированно его обосновать, не стесняйтесь высказаться
Ответить самому
Выбрать эксперта