Последната актуализация на този раздел е от 2021 година.

 

§ 6.3  Особености в структурата на буферната памет

 

 

      Още в началото на настоящата шеста глава беше пояснена ролята и мястото на буферната памет в йерархията на запомнящата система, като посредник между две съседни нива, чиято задача е да “изглажда” конфликтите при обмена на данни между тях.

      За да изясним логическата структура на буферната памет в йерархията между процесорното ниво и основната памет следва да анализираме информационния поток, който подлежи на буфериране. Дори беглото му наблюдение ни води до естествения извод, че този поток всъщност се състои от два потока. Първият информационен поток това е потокът на машинните команди, които процесорът извлича непрекъснато и последователно от оперативната памет и изпълнява по силата на първичния организационен алгоритъм – този на командния цикъл. Това, с което можем да характеризираме този поток още сега е, че той е еднопосочен – той “тече” само в посока от паметта към процесора.

      Вторият информационен поток това е потокът на данните или още операндите на операциите, които заповядват съответните машинни команди. Данновият поток, за разлика от командния, е двупосочен. Последното е така защото, ако операндите се доставят в АЛУ от паметта, то получените при изпълнение на заповяданите върху тях операции резултати “пътуват” в обратната посока – от АЛУ към съответните клетки в паметта.

      Във връзка с предназначението си, а именно да повишат производителността на паметта, буферните запомнящи устройства се наричат още свръхоперативни (СОЗУ).

      Тези първи съображения трябва да ни помогнат в изясняването на структурата на буферната памет. Като за начало може да се изкаже предположението, че поради различието в двата информационни потока, то и буферирането им ще се реализира различно. Като имаме предвид главната задача на буферирането, а именно да съгласува високата скорост на процесора с ниската скорост на обмен на данни с паметта, следва да отбележим, че това е постижимо само в условията на известна асинхронност при работа на по-бързото устройство. За да изясним това си разбиране ще обърнем внимание най-напред на следния факт, а именно, че основната памет изпълнява единствено операциите четене и запис, които можем да считаме за еднакви по продължителност. В резултат на това можем да твърдим, че паметта осъществява обмен (или работи) с равномерен темп. Ако предположим в светлината на този факт, че процесорът изпълнява всяка машинна команда също за едно и също време (макар и значително по-малко), то излиза, че и двете страни на обмена (процесор и памет) работят всяка за себе си с равномерен темп. В тези условията на работа с равномерен темп и в двете страни, обменът на данни не е възможен без загуба (пропуск) на тактове от страна на по-бързото устройство. Неизбежната загуба на тактове е равносилна на снижена производителност на по-бързото устройство, тъй като обменът ще се диктува от темпа на по-бавното устройство. Този извод е направен и изяснен в книга [3], пункт 8.6. Дори и да се вмъкне посредник между двете устройства, той няма да бъде в състояние да се впише незабелязано в хода на процеса по обмен, тъй като не ще успее да намери време да подмени (да замести, да заиграе” вместо) по-бързото устройство.

      За да може буферната памет, да изпълни ролята си на посредник и с това да оправдае присъствието си в структурата на запомнящата система, е необходимо по-бързото устройство, т.е. процесорът, да работи с неравномерен темп (разбираме това от гледна точка на изпълняваните машинни команди). Само задържайки се за по-дълго време при изпълнението на дадена текуща машинна команда, процесорът може да даде шанс на посредника да го отмени в процеса на обмен с паметта. Или казано по друг начин, ако по-бързото устройство загуби равномерния си темп на работа, посредникът (буферът), установявайки този факт, може да се намеси като страна в процеса на обмен с паметта, изпълнявайки необходимата операция четене или запис. Можем да твърдим, че само в тези условия няма да се наложи принудително задържане на по-бързото устройство. В този план на мисли следва да кажем, че буферната памет има място и тя успешно играе своята роля благодарение именно на реалната асинхронност на процесите в процесора, въпреки многобройните съвременни подходи за тяхното разсредоточаване и паралелизация.

      Буферната памет може да се интерпретира, а оттам и да се структурира (в случай на проектиране), от различни гледни точки:

·         Например, освен в смисъла на информационните потоци, които ще обслужва, тя може да се интерпретира както от към страната на процесора, така и от към страната на паметта. От към страната на процесора имаме команди, данни, адреси, а от към паметта само адреси и данни;

·         Освен това буферната памет може да се интерпретира от гледна точка на операциите, в които ще встъпят съдържащите се в нея данни. Интерпретацията на буферната памет от към страната на процесора е по-сложна, тъй като последният е многофункционален, но интерпретацията от към страната на паметта е по-елементарна, тъй като става дума само за две възможни операции – четене и запис. Тук искаме да обърнем внимание на това, че за паметта четените или записваните данни нямат смисъла, който те имат за процесора. Казаното ни дава основание да разглеждаме данновия информационен поток например, който по-горе определихме като двупосочен, като поток съставен от два отделни еднопосочни, но противополжни потока. В този смисъл, в непосредствена близост до паметта могат да се изграждат еднопосочни буфери, които съдържат най-общо казано данни, очакващи записа си и прочетени данни, очакващи своето използване. Според тази интерпретация може да се говори просто за буфери за запис и за буфери за четене. Ясно е, че този тип буфери представляват просто опашки, т.е. тяхната логическа структура се определя от дисциплината наречена FIFO.

      Желанието за все по-фино “изглаждане” на обмена между отделните нива превърна подхода на буферизация в универсален организационен принцип на съвременните компютърни системи. Принципът на буферизация се прилага в пълна сила на процесорно ниво, в това число и на микропрограмно ниво, в структурите на интегралните схеми на RAM-паметта, а така също при управление на входно-изходната система и обмена на данни с външните устройства, в многопроцесорните системи и комплекси, в компютърните мрежи, при реализация на множество софтуерните проблеми и в много др. Във всяко конкретно място буферирането е съобразено с конкретното приложение, с конкретните данни и с конкретното протичане на обмена. Техническите решения се характеризират с голямо разнообразие, дължащо се още и на различните водещи за отделните конструктори критерии.

      В съвременни условия буферната памет, която посредничи между процесора и основната памет, се превърна в една изключително сложна йерархична структура, която е обект на невероятното конкуриране между водещите производители, на което сме свидетели. Това е така, защото точно тук са заложени голяма част от идеологическите концепции на проектантите на всеки процесор, целящи максимална производителност върху провеждания изчислителен процес. Практически в тази част на процесорната структура се реализират по един или друг начин следните идеи:

·         За изпреварващото извличане на данни и на машинни команди ;

·         За предварителен анализ на машинните команди ;

·         За “предсказване” на алгоритмичните преходите ;

·         За спекулативното изпълнение на машинните команди ;

·         За планирано изменение реда на изпълняващите се команди ;

·         За множеството FIFO-буфери (или още опашки) поемащи данновите потоци включително и на микрокомандно ниво.

      В подкрепа на изказаното твърдение към горе изброените трябва да добавим още:

·         Алгоритмите за управление на особените ситуации – принудително изпразване на опашките, стратегиите за избор и изхвърляне на блокове от кеш-паметите ;

·         Пак тук, в тази част, се реализират алгоритмите за конвейерно управление на изчислителния процес и алгоритмите за управление на суперскаларността и многофункционалното апаратно насищане, с помощта на което може да се реализира естествения паралелизъм на последователно запрограмираните операции ;

·         И не на последно място следва да споменем за едни от последните достижения – структурите с няколко процесорни ядра, които също следва да се обслужват от буферната памет ;

·         Нека не забравяме още средствата и алгоритмите за реализация на виртуалната памет, които имат пряко отношение към придвижването на информацията по всички нива на йерархичната запомняща система ;

·         Към изброеното по-горе ще добавим и допълнителните утежняващи обстоятелства, свързани с факта, че всичко ставащо по различните нива на буферната система, протича на фона на непрестанния поток от всевъзможни прекъсвания, от прекъсвания в контролни точки (при трасиране), от грешки поради лошо предсказани преходи и всички извънредни ситуации в работата на процесора, които той следва да успява да обработи.

      Освен казаното току що, в подкрепа на твърдението ни, че тази памет представлява сложна йерархична структура, ще добавим, че тя функционира като невидима за програмиста. Последното означава, че той не разполага със средства за нейното управление, т.е. той не може да й повлияе. Изпълнението на написаната от него програма протича по начин, който не може да бъде проследен. Управлението на движението на информацията и на процесите в тази част на структурата на процесорите (вижте фигура 6.1.1) е реализирано на апаратно ниво. Голяма част от самата структура на буферната памет, алгоритмите за цялостното й управление, както и структурата на отделните нейни елементи и алгоритмите за тяхното конкретно управление са слабо описани, нещо повече – те са в непрекъснато развитие и усъвършенстване, което прави нашата задача тук изключително тежка.

      Тъй като ние нямаме амбицията да разкриваме в подробности пълната логическа структура на буферната памет в конкретните съвременни процесори, ще се задоволим само със структурите на нейните основни елементи и алгоритмите за тяхното управление.

 

 

 

Следващият раздел е:

 

6.3.1.  Опашки и буфериране на машинни команди