К вопросу о безусловном геноциде программистов.
Программисты всегда знают, как лучше. Они знают, как лучше, а другие не знают. Поэтому программисты делают, как лучше, а остальным приходится с этим жить.
Когда-то персональный компьютер был устроен так: в памяти хранилась программа, а процессор читал из памяти инструкции и выполнял их по мере поступления. Но память была дорогая, и программисты придумали загружать в память кусок программы и выполнять его, а остальную программу хранить на внешнем носителе. Это было круто и офигенно, но раньше в процессоре был просто счетчик команд, а теперь появилось еще несколько других счетчиков - откуда начинать кусок памяти, который подгружается и все такое.
А раз такое дело - то тут же и многозадачность уже сам бог велел. Мы же можем каждый раз подгружать в память и исполнять куски РАЗНЫХ программ. И тогда получится, что разные программы выполняются как бы одновременно. Но для того, чтобы мы подгружали и исполняли куски разных программ, нам нужны еще и другие счетчики - например, у каждой программы счетчик ее инструкций и адрес ее куска памяти. Этот набор данных назвали "контекст исполнения". На самом деле всё чуть сложнее, но я вам просто описываю процесс нагромождения всяких сопутствующих исполнениюю программы данных. Это придумали программисты, потому что они ЗНАЮТ КАК ЛУЧШЕ.
Ну ладно бы так. Вот у нас уже есть виртуальная память (когда программа может быть больше, чем памяти в вашем компьютере) и многозадачность (когда мы можем исполнять куски разных программ по очереди). Хочется придумать что-то еще.
И тогда светлая голова придумывать вот что: на самом деле, все программы внутри устроены одинаково. Потому что все они получаются в результате работы одних и тех же компиляторов (программ, превращающих текст на языке программирования высокого уровня в машинные команды). А раз так, то последовательность исполнения команд в программе в общем случае можно предсказать. И заранее подгрузить нужные данные. Разумеется, для этого надо бы несколько расширить и усложнить контекст исполнения.
Это как-то прошло мимо ушей обычных пользователей, но на самом деле была революция. Процессоры перестали быть истинно дискретными последовательными устройствами и получили возможность принимать решения. Даже я, получивший профильное высшее образование, очень долго считал предсказание переходов адской и неправильной технологией.
Теперь оказалось, что я таки был прав.
Выяснилось, что во всех процессорах за последние двадцать лет (да, не только в интеловских! ВО ВСЕХ! ПОТОМУ ЧТО ВСЕ ПИЗДЯТ У ИНТЕЛА!) предсказание переходов кривое. То есть, когда процессор думает, что дальше программа будет туда, куда он думает, подгружает данные, а программа потом идет не туда, то процессор откатывает назад. Возвращает контекст исполнения, который был. НО НЕ ВЕСЬ. Бывает три вида памяти: постоянная (диск), оперативная (это вот те самые: память 8 гигабайт) и кэш процессора. Разница в объеме и быстродействии. Постоянная самая большая и самая медленная. Оперативная - это та самая, из которой исполняет программу процессор. А кэш процессора - это небольшой кусок памяти в самом процессоре, очень быстрый, но маленький. И вот по результатам предсказания того, как дальше должна исполняться программа, процессор и загружал в свой кэш то, что ему надо. Но когда оказывалось, что предсказание не оправдалось, то процессор откатывал назад, но КЭШ НЕ ОСВОБОЖДАЛ. А там уже загруженный кусок памяти. К которому исполняемся далее программа имеет полный доступ. А там - ваши голые фоточки, милые мои. То есть, циферки, которые позволяют ушлым людям получить к этим фоточкам доступ.
Еще раз повторю: это ВСЕ ПРОЦЕССОРЫ С 2005 года. И Интел, и АМД, и вот это говно, которое в телефонах.
И как это исправить, честно говоря, не очень понятно.
Но если мы не хотим такого и дальше, то следовало бы хотя бы убить всех программистов. Которые УМНЫЕ.