Показать сообщение отдельно
Старый 08.04.2008, 19:38   #50
Messiah
Местный
 
Аватар для Messiah
 
Регистрация: 20.09.2007
Сообщений: 4,226
Вы сказали Спасибо: 1
Поблагодарили 6,561 раз(а) в 1,660 сообщениях
По умолчанию

Видимо рамки затронутой мною темы стали расширяться и начинают где то затрагивать не только хардвер, но и основы программирования. Тем не менее продолжим изыски, в рамках приведённой вчера строки кода по 100% загрузке проца. Отличительной особенностью x86 является набор команд, количество которых в старших моделях Pentium'ов достигает пятисот, что значительно превышает количество команд во всех остальных популярных процессорах вместе взятых! Само по себе число поддерживаемых команд ни о чем не говорит, напротив, даже вызывает сомнения в их элегантности. После употребления пива (применение его опционально, когда надо порассуждать) сделаем небольшой экскурс «внутрь» и вспомним, что процессор (за редкими исключениями) исполняет не программы, написанные на языке программирования, а некий «машинный код». Какой бы крутой не был проц, это всё равно набор транзисторов (хоть 2000, хоть 20000000) и не более того, поэтому командами для него являются последовательности байтов, находящихся в памяти. Иногда команда может быть равна одному байту, иногда она занимает несколько байт. Там же, в памяти находятся и данные. Они могут находиться в отдельной области, а могут и быть «перемешаны» с кодом. Различие между кодом и данными состоит в том, что данные — это то, над чем процессор производит какие-то операции. А код — это команды, которые ему сообщают, какую именно операцию он должен произвести. Для упрощения представим себе программу и ее данные в виде последовательности байтов некой конечной длины, располагающуюся непрерывно в общем массиве памяти. Например, есть массив памяти длиной в 1’000’000 байт, а программа (вместе с данными) — это байты с номерами от 1000 до 20’000. Для того чтобы исполнить команду, процессор должен прочитать ее из памяти. Для того чтобы произвести операцию над данными, процессор должен прочитать их из памяти и после произведения над ними действия, записать их обратно в обновленном виде. Команды и данные идентифицируются с их адресом, который, по сути, представляет собой порядковый номер ячейки памяти. Вот собственно на этом и всё. Если перечитать ещё и ещё раз изложенное, мысленно представить себе происходящие процессы, то можно самому смоделировать ситуацию, которая позволит загрузить процессор простым набором кода без всяких там ухищрений. Во вложении скомпилированная вчерашняя строка кода нулевого цикла, размер которой 24 кБ.!!! (в архиве 7 кБ.) И скриншот загрузки ею 2-х "яйцевого" проца. Первый слева 100, второй сачкует, общая загрузка 50. Не верите? Проверьте.
Изображения
Тип файла: jpg проц.jpg (61.2 Кб, 28 просмотров)
Вложения
Тип файла: rar proc.rar (7.5 Кб, 13 просмотров)
Messiah вне форума