программирование
January 7, 2023

О компьютерном железе.

Сегодня мы поговорим о том, из чего состоит компьютер и как он работает. Если вы хотите связать свою жизнь с IT сферой, то знать всё это вам необходимо.

Наверняка у многих сейчас возникли сомнения: "Алина, мы хотим заниматься практикой. Зачем нам что-то знать о компьютерном железе и так далее?"

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

Из чего же состоят компьютеры?

Первое это блок питания. Блок питания это то, что преобразует напряжение из нашей розетки, например 220 вольт в напряжение которое необходимо нашему компьютеру. Если взять системный блок, большой и громоздкий ящик, то, как правило блок питания находится внутри этого системного блока. Если же мы говорим про ноутбуки, то у ноутбуков блоки либо полностью снаружи, либо частично снаружи, частично внутри. Задача блока питания преобразовать напряжение и раскидать его внутри компьютера на внутренности: материнскую плату, видеокарту, SSD, либо HHD диск и так далее, в зависимости от того, что у нас внутри компьютера установлено.

Дальше у нас идёт материнская плата. Она служит базой для подключения всех элементов, всех блоков компьютера. К материнской плате подключается процессор, оперативная память, постоянная память, видеокарта и так далее. Материнская плата это база для подключения всех остальных блоков.

Перейдём к процессору. Процессор это мозг компьютера, та самая часть, которая отвечает за выполнение вычислительных операций. На самом деле все операции, которые делает компьютер, являются вычислительными операциями над числами. Но подождите минуточку, ведь если все операции которые делает компьютер это операции над числами, то как например с буквами работать? Мы пишем "Привет". Как компьютер может сохранить и обработать эту строку?

На самом деле всё очень просто. Каждому символу назначен уникальный цифровой код. Буква "П" условно привязана к цифровому коду 200, буква "Р" к 201, буква "И" к 202. Я это условно сейчас пишу, я не помню какие там конкретно цифровые коды, но это сейчас совершенно важно. Важно то, что каждому символу соответствует определённый числовой код. Это число, а с числом компьютер может замечательным образом оперировать.

С буквами думаю всё понятно. А как быть с картинками? Как сохранить изображение в компьютере в виде чисел? На самом деле картинки которые вы все привыкли видеть в компьютере являются растровыми, они хранятся в виде пикселей, отдельных точек.

Когда вы рассматриваете полное изображение, то все пиксели визуально сглаживаются и видна нормальная картинка. Теперь возьмите её и увеличите раз в 10, далее вы увидите её пиксели и поймёте о чём я говорю. У каждой точки есть свой цвет который задаётся числами. Есть много моделей задания цвета числами, но самой популярной является модель RGB, в ней абсолютно любой цвет представлен сочетанием трёх основных цветов: красным (red), зелёным (green) и синим (blue).

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

В модели RGB каждый цвет задаётся от 0 до 255. То есть ноль - этого цвета нет, а 255 - это максимальное значение конкретного цвета.

Если нам нужен красный цвет, то это 255 в красном канале и по нулям в других каналах. Если нам нужен чёрный цвет, то это по нулям во всех трёх каналах, ведь чёрный цвет это отсутствие любых цветов. Белый цвет противоположность чёрному, соответственно 255 во всех трёх каналах. То есть, 255 в красном канале, 255 в зелёном и 255 в синем. По максимум берём всех цветов и получаем белый цвет.

То есть, любая информация в конечном итоге в компьютере преобразуется в числа и компьютер оперирует уже с числами.

А как мы можем заставить электричество оперировать с числами и хранить информацию, как это может происходить?

Давайте представим, что у нас есть лампочка. Одна лампочка. Простейший электрический прибор.

Как мы можем при помощи лампочки хранить информацию? Лампочка что может делать? Она может либо гореть, либо не гореть. Мы можем либо включить её и она будет светиться, либо мы можем её не включать и она светиться не будет.

У лампочки есть два состояния и она может хранить информацию своим состоянием.

Если лампочка горит, то мы можем назвать это единичкой.

Если лампочка не горит, то мы можем назвать это ноликом.

Соответственно одна лампочка может хранить в себе одно число: ноль или единицу.

А если нам нужно сохранить число 2, можем ли мы сохранить число 2 при помощи одной лампочке при такой схеме? Нет. Но мы можем сохранить число 2 если мы возьмём вторую лампочку.

Теперь у нас есть две лампочки. Если 2 лампочки не горят, то это число ноль. Если горит вторая лампочка, а первая не горит, то это число 1. Если же нам нужно сохранить число 2, то первая лампочка горит, а вторая не горит. Это получается число 2. Если же нам нужно число 3, то обе лампочки горят. А если нам нужно сохранить число 4? Можем ли мы сохранить число 4? Конечно, нам нужно просто добавить ещё одну лампочку. Если у нас есть много лампочек, то мы можем сохранять длинные числа. В принципе вот так всё и работает. В современных процессорах находится огромное количество транзисторов (лампочек), десятки миллиардов, и каждый транзистор управляет течением тока в процессоре: ноликами и единичками.

Нолик - тока нет.

Единичка - ток есть.

По большому счёту вот так всё и работает и абсолютно никакой магии здесь нет.

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

В десятичной системе у нас есть числа 0,1,2,3,4,5 и так далее.

В двоичной же системе это будет 0, 1, 10, 11, 100, 101 и так далее.

В памяти компьютера, условно, буква "П" это будет 101, буква "И" - 110, буква "Р" - 111, это я условно конечно говорю. Любой элемент информации это просто напросто последовательность нулей и единиц. Вот и всё.

А как сохраняется эта информация в компьютере? Она сохраняется у нас либо на HHD (жёстких магнитных дисках), либо на SSD (твердотельных накопителях). HHD и SSD это постоянная память компьютера, то есть память, которая не стирается когда мы отключаем питание от компьютера.

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

SSD это более быстрый накопитель, потому что в нём нет магнитных дисков, там нечему вращаться, всё хранится в SSD, в специальных транзисторах которые могут сохранять своё состояние, хранить нолик, либо единичку даже без подключения внешнего питания. Это фишка SSD, соответственно SSD гораздо более быстрые, они в меньшей степени подвержены внешним воздействиям, таким как вибрация, удары и так далее. Но при этом SSD более дорогие, потому что их производство сложнее. Поэтому когда нам нужно хранить много данных и скорость не является главным приоритетом, то берём HHD. Когда же нам нужна максимальная скорость и объём данных не сильно большой, а если даже и большой, то берём несколько дисков. SSD это там где скорость, HDD это там где объём. Если у нас много денег, то всегда просто берём SSD и не паримся.

С блоком питания, с материнской платой, с процессорами разобрались.

Какая есть ещё память в компьютере? Мы поняли, что есть постоянная память - это HDD, либо SSD. Есть ещё оперативная память, она же RAM (Random Access Memory). Эта память оперативная, потому что она используется для хранения оперативных данных. У нас процессор чего-то вычисляет и где-то эти данные нужно оперативно хранить, потому что на HHD и SSD записывать и считывать долго по меркам скорости ПК, вот процессор и хранит такие данные в RAM. На самом деле есть ещё сверхоперативная память - это память совсем маленького объёма внутри самого процессора, то есть для процессора эти данные максимально быстрые, но понятно, что процессор это не хранилище данных, поэтому сверхоперативная память внутри процессора очень маленького объёма, но при этом она максимально быстрая. Оперативная память - это память большего объёма, но она медленнее чем сверхоперативная, соответственно максимальный объём памяти это уже жёсткий диск, но он из этой троицы и самый медленный.

Идём дальше. Видеокарта. Исходя из названия это что-то связанное с видео, собственно так и есть. Видеокарта предназначена для того, чтобы выводить на монитор картинку, или сейчас в современном мире она ещё отвечает за такие специализированные вычислительные задачи как майнинг, работа с нейросетями и так далее. Видеокарта бывает интегрированной, то есть встроенной либо в процессор, либо в материнскую плату, либо бывает дискретной, то есть как отдельное устройство подключаемое к материнской плате. Соответственно видеокарты для вычисления используются не очень часто, опять же там для отдельных задач, но в принципе сейчас можно арендовать сервер, в том числе и с видеокартой.

Давайте ещё раз вернёмся к ноликам и единицам, потому что тема максимально важная. У нас есть минимальный элемент информации нолик или единица. Это называется бит, ноль или один, одно число. Восемь бит называют байтом. Последовательность из восьми цифр, каждая цифра из которых ноль или единица - это называется байт. Восемь бит - это байт. При этом если мы возьмём восемь ноликов (00000000), то в десятичной системе это будет ноль соответственно, а если мы возьмём восемь единичек (11111111), то в десятичной системе это будет 255. Мы помним, что в RGB модели каждый канал, красный, зелёный или синий - это число от 0 до 255. Каждый канал это и есть 8 бит, то есть 1 байт. В модели RGB один байт хранит сколько у нас красного цвета, 1 байт хранит сколько у нас зелёного цвета и 1 байт хранит сколько у нас соответственно синего цвета. 3 байта это цвет каждого пикселя в картинке RGB модели.

Ещё тут важно отметить про 16-тиричную систему счисления. Звучит страшно, но на деле всё достаточно просто. В двоичной системе счисления у нас есть 2 цифры, 0 и 1, в нашей привычной десятичной системе у нас есть 10 чисел, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Почему 10? Потому что у нас пальцев 10, считать удобно. А в двоичной системе пальца как бы 2, лампочка либо горит, либо не горит, соответственно и двоичная система. В 16-тиричной системе счисления есть числа от 0 до 9, а дальше вместо 10,11,12,13,14,15 идёт A,B,C,D,E,F. В чём суть? Зачем используют такую 16-тиричную систему счисления? На самом деле просто лишь для удобства записи одного байта. То есть, один байт это 8 бит, последовательность из 8-ми нулей и единиц, а это очень длинно писать, читать, непонятно, сложно, а записывать один байт как-то удобненько хочется.

Если перевести 11111111 из двоичной в 16-тиричную, то получится FF. Это уже наглядно, просто и гораздо проще, чем последовательность из 8-ми нулей и единиц. Число 255 в десятичной системе счисления соответствует 11111111 в двоичной системе счисления и соответствует FF в 16-тиричной системе счисления. Число 10 в десятичной системе счисления соответствует букве A в 16-тиричной, число 11 в десятичной соответствует букве B в 16-тиричной, и так далее.

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

Классическая запись RGB цвета как раз использует 16-тиричную систему счисления. То есть, например FFFFFF это белый, соответственно 000000 это чёрный. FF0000 это красный, и так далее. Каждый цвет представляет собой один байт, а один байт удобно записывать двумя символами в 16-тиричной системе счисления. Соответственно FF это максимальное значение, а 00 это минимальное значение в красном канале. Поэтому модель RGB это классический пример использования 16-тиричной системы счисления. Также 16-тиричную систему счисления используют для адресации ячеек в оперативной памяти. В высокоуровневых языках программирования по типу Python люди с этим не работают, но если бы вы писали на каком-то относительно низкоуровневом языке программирования типо C, то в C вы напрямую работаете с памятью и соответственно вы в том числе работаете с указателем на конкретной ячейке в оперативной памяти, и у конкретных адресов в оперативной памяти есть запись в виде длинного 16-тиричного числа. Вы там тоже можете наблюдать использование 16-тиричной системы счисления. Но при этом я вот ещё раз отмечу, это очень важно, то, что 16-тиричная система счисления используется просто для удобства в записи и не более того. Потому что компьютеры не работают с 16-тиричной системой счисления, они работают с двоичной системой счисления, компьютер это электричество, а оно либо есть, либо его нет. Есть всего два состояния, ток есть, тока нет.

И ещё один важный момент. Последовательность ноликов и единичек работает по разному в зависимости от контекста, в зависимости от той программы которую мы запускаем. Если мы открываем документ word, то наша операционная система понимает, что он открывается в программе microsoft word. У нас запускается программа microsoft word и она уже знает как обрабатывать последовательность ноликов и единичек документа word. Если же у нас mp3 песня, то там свой механизм обработки этих ноликов и единичек. Если у нас jpeg картинка, то там своя последовательность обработки этих ноликов и единичек.

В разных программах, разные нолики и единички имеют разный контекст. Если мы попытаемся открыть документ word как mp3 файл, то у нас ничего не получится, потому что mp3 проигрыватель не поймёт наш документ word, эту последовательность ноликов и единичек он не сможет оценить по достоинству и не поймёт что с этим делать.

Соответственно, самое важное что из моего поста вам нужно у себя в голове сохранить. Во-первых всё на самом деле очень просто. Есть двоичная система счисления. Электричество либо есть, либо его нет. Есть ещё 16-тиричная форма записи, это сделано просто для удобства записи одного байта в виде двух символов, например FF вместо длинной последовательности из 11111111. И собственно говоря, процессоры просто управляют числами. В конечном итоге всё с чем компьютер в итоге это работает - это числа.