Вопрос родился при изучении ассемблера, который я начал постигать для последующего изучения высокоуровнего ЯП (пока не знаю, что конкретно : C#,Pyhton,Ruby). Хочу так сказать понять суть работы процесса для более глубокого понимания написанного мною на ассемблере.
Я знаю, что процессор выполняет математические действия: сложение, вычитание, умножение и деление. Но как оперируя двоичной системой он выполняет конкретное действие, что такое регистры, шина данных (Когда говорят о «битности» процессора, речь идет о ширине шины данных) - как это описать простыми словами ?
Как работает ALU , самое главное - принцип на пальцах... Что за кэш-память первого,второго уровня ?
Спасибо ! Изучил статьи с : Википедии, hi-news, Хабр
1. Процессор - это такой калькулятор на стероидах: он умеет только считать и пересылать данные, но делает это чудовищно быстро.
2. Про разрядность. Процессор работает с памятью. У каждой ячейки памяти свой адрес. В зависимости от вида процессора он может работать либо с 32 битными адресами, либо с 64 битными что указывает на максимальный размер памяти с которым он может работать. Для 32-х разрядного это 2^32 байт, для 64-х разрядного - 2^64 байт.
3. Регистры - это области памяти внутри процессора. Такая встроенная в процессор память. Очень маленького объема, но скорость доступа к ней наивысшая.
4. Кэш-память - это память встроенная в процессор. Большего объема чем регистры. Она нужна для сохранения часто встречающихся команд. Вместо того чтобы шарить в оперативке можно сразу достать нужный код из кэша. Это очень сильно убыстряет вычисления.
5. Существует определенный набор команд процессора. Это уникальные последовательности битов, которые хранятся в памяти. К большинству команд надо передавать параметры которые идут сразу за командой и они тоже представляют собой последовательность бит. Процессор читает команду за командой и сразу же выполняет их.
Самое простое.
Процессор это большой ящик с ячеками. В ячейках лежат спички.
ALU - это такой дядька. Он читает книгу, и в книге написано из какой ячейки в какую переложить сколько то спичек при определенных условиях.
Книга очень большая, дядька перекладывает спички очень быстро. Получается что мы не замечаем как он это делает, а видит только результат, который нас очень удивляет, т.к. мы не понимаем как дядька путем перекладывания каких-то там спичек может делать очень многое.
Дядька не простой, у него есть еще 2 глаза на отростках. Один отросток побольше другой поменьше. Этими отростками он (дядька) пытается быстро отследить и увидеть сколько спичек в группе ячеек, а еще пытается заглянуть вперед в книгу, и заранее понять смысл записанного в ней, т.о. дядька то оказался шивой с большим кол-вом рук и глаз :)
Отросток поменьше (кеш 1 уровня) может смотреть близко но очень быстро, раз в 10 быстрее чем отросток подлинее.
Длинный отросток помедленнее, и им он может смотреть дальше, но он работает помедленнее. Ну и обычные глаза, которые смотрят на текущие каракули в книге, они очень медленные.
Про битность:
Дядька то может одновременно перекладывать не 1, не 2, не 3 спички .. а может сразу взять 2^32-спичек (или 2^64) и куда то их деть, а может увеличить их в 2 раза или уменьшить в 2 раза)
Чем больше разрядность дадьки, тем больше спичек он может переварить.
Про регистры:
Я уже писал про ящик с ячейками. Так вот ящик это память (медленная), пока дотянется до туда. А у дядьки еще есть на груди кармашки, их немного, значительно меньше чем ячеек в ящике, зато он ближе, к ним проще дотянутся. Ну вот дядька и пытается все делать через кармашки, получается значительно быстрее.
Давайте сравним двух дядек. Восьмибитного , и 64-битного. Первый дядька может считать только до 255, получается чтобы считать дальше ему надо залезть в кармашек, и куда то спичку положить (отметить у себя).
А вот 64-битный дядька реше лазит в кармашки, он просто берет и делает. Т.е. он способен переварить за раз больше спичек (уже повторяюсь).
BotaniQ_Q: потому что 1 бит - это объем минимальной информации. Он может быть либо 1 либо 0. Нет другой такой величины информации, которая бы была меньше бита (нельзя сделать что-то с полутора состояниями). Отсюда любое число мы можем закодировать с помощью битов.
1 бите помещается 2 числа: 1 и 0
в 2 - 4: 0 - 00, 1 - 01, 2 - 10, 3 - 11
в 3 - 8
и т.д.
в N битах мы можем закодировать максимум 2^N чисел.
Биты обычно группируются в байты (по 8 бит в 1 байте). Так повелось на самом деле, что в байте - 8 бит, с таким же успехом можно договорится что байт это 16 бит.
А раньше были процессоры с 4 битами на байт.
Это не суть важно.
Важно то, что системная шина в процессоре выполняется кратно этому числу бит в байте.
т.е. 8,16,32,64.
конечно можно было сделать и 24 бит процессор, просто гораздо легче использовать одно схемотехническое решение два раза для 32 бит (2 * 16), чем городить 2 разных схемотехнических решения (16 + 8 бит). Оттуда и идет это удвоение.