Програма. Програмата по своята същност е пасивна, тя не произвежда действие. Изпълнението на програмата поражда действие. То се нарича



Дата25.07.2016
Размер117.77 Kb.
1. Основни архитектурни принципи на изчислителните системи. Слоеста организация на изчислителните системи. Поколения изчислителни системи.
Основно предназначение на КС (компютърни/изчислителни системи) е способността им да изпълняват команди. Последователност от команди, описващи хода на решението на една задача, представлява програма. Програмата по своята същност е пасивна, тя не произвежда действие. Изпълнението на програмата поражда действие. То се нарича процес, т.е. процесът е изпълнението на самата програма. Обектът, който изпълнява програмата, се нарича процесор. Той може да бъде софтуер, а може да представлява електроника, реализираща командите. Днешните универсални КС (с универсален характер) са базирани на Фон-Нойманския модел на изчисление, който се изгражда върху теорията на машините на Тюринг. Характерно за този модел е, че той отразява последователната същност (натура) на обработките. Процесорът изпълнява последователно командите, постъпващи на входа му. Последователността на командите съответства на последователността от стъпките в решението на задачата. Поради този характер този модел се нарича процедурен. Освен този модел днес са разработени още три други модела. Дедуктивният модел се базира на предикатната логика на Хорн и принципът на решението на задачата е на база на дедуктивните съждения, т.е. на правене на изводи (умозаключения). При него се прилага наличие на факти, съвкупност от правила, налагащи взимане на решения. За първи път такава машина е изработена през 1986 г. и е известна като пето поколение компютърни системи (днес ние масово работим на четвърто поколение). Третият модел е т. нар. dataflow-модел – модел на изчисление, управляван от потока на данните, за разлика от Фон-Ноймановия модел, който е управляван от потока на командите. Този модел се прилага над обекти-процесорчета с универсално или специфично действие. Те са свързани помежду си по определен начин, но никога в пълен граф (обикновено са около 15 хиляди процесорчета).

Имаме поток от данни, който чрез т. нар. “И-схеми” (конюнкция), постъпва или не на входа в даден момент от времето, наречен такт. Процесорчетата получават в някакъв момент от времето данни, а в следващ момент произвеждат действие, свързано с даден алгоритъм, заложен у тях. Резултатът се подава в “И-схема” към някой друг процесор. По този начин чрез същността на данните и управлението на trigger-ите (спусъци) става управлението на потока на данните и схемите на управление от типа “отвори-затвори trigger”. Този подход е разработен в университета в Манчестър. Реализацията на този модел е известен като транспютърни архитектури. През март 1983 г. японците обявяват идеята си за разработването на КС от пето поколение. Този техен анонс амбицира всички правителства по света към отделяне на огромни финансови ресурси за догонване и изпреварване на японците. Заедно с това са създадени два други големи международни проекта – западноевропейският ESPRIT и източноевропейският на социалистическите страни. До 1993 г. е най-големият бум в развитието на идеи за компютърните архитектури. Това доведе до идеите за knowledge-based system, за изкуствения интелект, до разработването на т. нар. експертна система, разработването на методите за паралелно програмиране и паралелни алгоритми. Едно от основните приложения на КС е за пресмятане на инженерингови конструкции, конструкции на механиката. Три са основните приложения – информационна система, управление на производствените процеси, изчисление на инженерингови конструкции – свързано е с изчисление на системи уравнения (матрици с няколко хиляди реда). Именно тази потребност доведе до развитие на теорията на числените методи. През 1946-1948г. основен играч е фирмата IBM – International Business Machines Corporation. Тази фирма през 1947г. създава машина, базирана на Фон-Ноймановия модел, която успява да изчисли конструкциите на няколко язовирни стени и няколко моста, което до тогава не е било възможно. Това дало тласък на бизнеса и през 1948г. на изложение в Чикаго вече има много фирми. И днес резултатите, свързани с космическите изследвания и апаратура, са възможни на базата на числените методи и алгебрата, т.е. развитието на компютърната индустрия влече след себе си развитието на много други области. Именно затова в проекта за управление на нови поколения компютри едно от основните направления е паралелни алгоритми в числените методи. Второто е математическата лингвистика във връзка с потребността за общуване с компютъра на естествен разговорен език. През 1991 г. Япония създава компютър, който перфектно превежда от английски на японски език и обратно и с който може да се разговаря. Третото направление е развитието на дедуктивната логика, тъй като основното решение в новото поколение компютри се е търсело в моделирането на човешкия мозък от гледна точка на дедуктивните му разсъждения. Те намират резултат в езиците на логическото (Prolog) и функционалното (Lisp) програмиране, а през 1987 г. и в езиците за обектно-ориентирано програмиране като GLU, SMAUTALK, C++, VS, …). Именно развитието на паралелните числени методи е довело до появата на транспютърните системи като системи, предназначени за реализация на паралелни числени алгоритми. Тези алгоритми са описани от специални езици (например OCAM).

Последният модел архитектури са невронните мрежи (шесто поколение). Те представят един друг поглед върху модела на човешката мисъл/мозъчните процеси и получават развитие в т. нар. теория на перцептроните. Докато пето поколение има резултат като краен продукт чрез езици, машини, то шесто поколение е още абстракции. Опитите да се реализира все още са неуспешни. През 1993 г. японският проект по шесто поколение беше преустановен. Това преустановяване създаде в продължение на една година вакуум в световната научна среда и може би от комерсиален университетски интерес се заговори за шесто поколение.



Стандартен Фон-Нойманов модел: Универсалните съвременни компютри се изграждат върху Фон-Ноймановия модел, т.е последователната обработка. В този модел всяка задача се описва с определен набор базови команди, наречени примитивни. Тези команди образуват пълна система (всяка функция може да бъде представена чрез тях). Те се реализират пряко от електрически схеми, поради което се наричат машинни команди. За всеки набор от машинни команди има език, който да ги описва. Нека L1 = {α1, α2, α3, …} е един такъв език. Програмистите, разработвайки програмите в езиковата конструкция на този език, са забелязали, че в тялото на една програма или на няколко различни програми започват да се появяват едни и същи повтарящи се последователности от команди. Възникнала е идеята тези еднакви последователности да се третират като нова команда, т.е. да обозначим такива последователности с β 1, β 2, … Така възниква идеята за нов език L2 = L1∪{β 1*, β 2*, …} през 1951 г. След появата на тази идея производителите на компютри решават да реализират апаратно и самите обобщени команди. Тези години (1951-66 г.) са години на бум в езиците за програмиране (Algol, Cobol, Fortran, …). До 1980 г. стремежът на производителите е колкото се може по-крупни единици обработки (обобщени команди) да се реализират апаратно. Това са т. нар. CISC архитектури (Compressed Instruction Set Computers). През 1980-81 г. самата фирма IBM, а паралелно с нея и Станфордският университет, и лабораторията Лос Аламос, тръгва в опит на една нова концепция – т. нар. RISC архитектури (Reduced Instruction Set Computers). И до днес хората продължават да търсят все по-крупни порции, които да представляват една обобщена команда. Получава се една концепция за разработка на езици с обобщени команди – L3 = L2∪{γ1*, γ 2*, …}, ..., Ln = Ln-1∪{δ1*, δ 2*, …}. Езикът на примитивните команди е L1. Оказва се, че в практиката всеки програмист привиква към език от дадено ниво (например Li) и в неговата представа компютърът е нещото, което реализира точно тези негови команди. Т.е. в зависимост от квалификацията на потребителите на една компютърна система се използват езици от различни нива. Това довежда до идеята да се счита, че за всеки език Li съществува някаква абстрактна машина, която реализира командите му. Тази машина по-късно е наречена виртуална машина Вi. Така тази насока на концепцията показва, че една компютърна система може да се третира като съставена от множество виртуални машини В1, В2, ..., Вn, като всяка от тях има свой език за програмиране L1, L2, ..., Ln. И обратното – за всеки език Lj се счита, че съществува виртуална машина, която реализира командите му. Командите от един език Li от дадено ниво i могат да се реализират както апаратно, така и софтуерно. Всяка обобщена команда се описва чрез набор от команди от по-ниското ниво. С други думи командите се реализират или чрез тези от по-ниско ниво, или софтуерно.

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




Приложно ниво (V)

Компилация



Операционна система (IV)

Интерпретация



Асемблер (III)

Компилация



Традиционно машинно ниво (II)

Интерпретация



Микропрограмно ниво (I)

Реализацията винаги води до свеждане на една команда до набор от команди от по-ниско ниво, които я съставят – декомпозиция на команди. Това преобразуване на команди от езици от по-високо ниво към езици от по-ниско ниво става по два метода – компилация и интерпретация. Компилацията е преобразуване на програмата от дадено ниво еднократно предварително преди изпълнение на самата програма, а интерпретацията е преобразуване по време на изпълнение на програмата. Днес се използват еднакво добре и двата метода. Няма критерии, които да определят кой е по-добър – зависи от конкретния случай.



Първо поколение КС (1946-1956г.). Характеризира се с лампова технология на реализация на логиката на КС, водно охлаждане, отсъствие на средства за вход и изход, отсъствие на управляващ софтуер като ОС. Един език за програмиране – машинен. Технологията на работа се състояла в разпределяне на машинното време на часови зони и представяне на квантовото време на програмата в рамките на някакъв график. Когато настъпи моментът, програмистът застава пред пулта за управление и на ръка чрез бутоните набира двоичния код на командата, както и двоичното представяне на данните. Над всеки бутон има светещи лампи, показващи каква стойност е набрал. Това е бил основният процес. През 1951 г. се предлага наличието на второ ниво на езиците за програмиране, като основният замисъл тогава се състои в замяна на цифровия код на командите със символни имена (07 – събиране, сега sum). Предлагало се е наименованията на клетките в паметта да се заменят със символни имена. През 1951-52 г. се ражда първият език – Assembler. Днес всички езици се преобразуват до Assembler на съответната КС – оттам в машинен код. През 1953-60 г. за първи път се появява перфокартното устройство и пултовата пишеща машина, появява се и полупроводниковата технология, т.е. елементната база като транзистори, диоди, съпротивление. Тези три компонента са основните елементи в реализацията на двоичната логика. Водното охлаждане е сменено с въздушно и това се счита за второ поколение КС. За първи път се появява ролята на оператора на КС. Появяват се наченки на управляващ софтуер, наречен мониторна система (МС). МС е предшественик на днешните операционни системи (ОС). Тя е получавала команди, въвеждани през пулта за управление от оператора или като управляващи оператори в текста на програмата. Тези управляващи оператори са имали своя семантика и синтаксис и езикът, който е бил разработен за тях, се нарича Job Control Language (JCL). Чрез JCL програмистът е маркирал чрез начален оператор Job началото на своята програма, като така извиквал Assembler-а, който на входа получава текста на потребителската програма, а на изхода машинен код.

С
лед обработването на програмата Assembler следва текста на самата програма, маркер за край на текста, може да има обръщение за изпълнение, следва обръщение чрез execute – изпълни програмата, маркер за край на данните и т.н. Тази цялостна структура, която е оформил програмистът, е представлявала единицата работа, която той задава на КС. Тази единица се нарича задание – единица работа от гледна точка на този програмист. Така в онези години е възникнало това понятие и заедно с него се появяват други базови понятия – задача – единица работа от гледна точка на КС/ОС. Понятието задача (или task) се използва и днес. С разработването на концепцията за език от второ ниво Assembler се заражда концепцията за свойство и организация на КС. Появата на JCL поражда идеята за разработване на езици от по-високо ниво. Първият опит в това направление прави IBM чрез програмата си SortMerge. Това нещо е представлявало обръщение към контролния език за сортиране или обединяване на два или повече масива от данни, като следващите редове в някакви езикови конструкции са описвали условия за сортировка. Именно тези езикови конструкции пораждат идеята за ново ниво на езиците за програмиране – да се използва този подход и за други езикови конструкции. Появява се езикът FORTRAN. Чрез него се зараждат концепциите на алгоритмичните езици за програмиране. Днес той е най-широко използваният език за програмиране на статистиката и такива задачи. Той е най-бързо изпълняващият се език чрез транслирането му на машинен код. Нищо не се е променило досега. През 1962-72 г. се заражда Трето поколение КС. То се характеризира с няколко принципни съществени различия. Първо, развита е идеята на механизма за прекъсване. Второ, реализацията на двоичната логика се извършва върху интегрални схеми (ИС), т.е. върху една ИС вече имаме вградени хиляди милиони транзистори, диоди и т.н. Развиват се В/И устройства като магнитни ленти, барабани и дискове. В софтуерно отношение промените са следните: МС са развити до т. нар. изпълнителни системи. Те като концепция и организация са почти същите като днешните ОС. Появява се концепцията на система за управление на В/И (СУВИ) като набор от софтуерни модули в две категории – физическа система  ФСУВИ = PIOCS; логическа система  ЛСУВИ = LIOCS. Висшата система BIOS е съставена от PIOCS и LIOCS. Модулите на логическата система управляват и реализират обмен на данни между променливите в потребителската програма и буфери на основната памет. Физическата система управлява обмен на данни между външните устройства и буферите на основната памет. С реализацията на концепцията за СУВИ програмистът е освободен от грижите по управлението на В/И проблем. Т.е. едва от онзи момент, когато е искал да прочете нещо, е използвал read, а да изведе – write. Именно те се явяват обръщение към СУВИ. От гледна точка на нас програмистите се появява подпрограмата. Основен начин за въвеждане на текста на програмата (source code) или данни е т. нар. код от перфокарти. Организацията на работата е била следната – програмистът е написвал текста на своята програма върху специални бланки и ги е предавал на т.нар. звено за производство на перфокарти. Тези звена са представлявали зали с машинописни бюра, на които хората са набирали последователно всеки ред от бланката. Като резултат се появява една карта с размер на гъба за триене на дъска, които имат 80 колонки и 12 реда. Чрез специални машинни перфоратори са се получавали системи от правоъгълни пробивки. Тези пробивки се разпознавали от светодиоди в устройството, наречено вход от перфокарти, и се въвеждали в основната памет, кодирани в символен вид. Устройство – 40см широко, около метър високо, 6000-8000 перфокарти съдържа устройството, 2000 се събират в кутия, голяма колкото кутия за обувки. Четвърто поколение КС започва през 1972г. и досега сме в него. Започва с появата на големите ИС, с развитието на ОС, с изграждането на изчислителни мрежи, развитие на езиците от високо ниво, файлов достъп и бази данни. ISA-архитектурата (Instruction Set Architecture) се базира на входа на командите. Днешните ISA-архитектури имат петслоен модел. Пето ниво – езици за ООП. Тези езици се преобразуват в езици от по-ниско ниво чрез компилация. Преобразуват се в Assembler – разширен с някои команди от ОС. Нивото на ОС представлява езика Assembler заедно с някои команди за управление на памет на процесора/В/И. Командите се наричат привилегировани и се изпълняват от специални модули, т.е., когато процесорът се опитва да изпълни такава команда, проверява дали дадената команда е в даден режим и тогава я пуска. Тези привилегировани команди се изпълняват от модулите на ОС за организиране за конкурентна паралелна работа на много програми и достъпа им до едни и същи ресурси. Командите на PIOCS са такива команди. Т.е. в нашите потребителски програми, ако сме написали такава команда, процесорът няма да я изпълни. От нивото на ОС преобразуването става чрез интерпретация. От Assembler-но ниво преобразуването в машинен код става винаги чрез компилация. През 1972-73г. с развитието на микропрограмните технологии се оказва, че тогавашните машинни команди могат да се реализират чрез микропрограми толкова ефективно, колкото и хардуерната реализация, в резултат на което се оказва, че от 1972 г. насам КС са винаги с включено микропрограмно ниво. DEC-VAX11 дава възможност на ‘системния програмист’ сам да създава микропрограми и да ги кръщава с имената на самите машинни команди. По този начин програмистът може да подмени цялото множество от машинни команди със свои реализации. Характерно е, че микропрограмното ниво е съставено за управление на електронни схеми. Оказало се, че този подход за отваряне и затваряне на схеми позволява реализацията на една машинна команда. Във всеки процесор основният елемент е аритметико-логическото устройство (АЛУ), а сърцевината на това устройство е двоичният суматор. Днес всички машинни команди са команди между регистри. Регистърът е специално хранилище на информация вътре в процесора. Регистрите са свързани помежду си със свръхбързи линии, наречени шини, на принципа на пълен граф – всеки с всеки. Реализацията на този интерфейс е много скъпа, поради което производителите винаги търсят оптимум върху броя на регистрите (обикновено са до 30 регистъра). Те се делят на два класа – с общо предназначение (достъпни за програмиста); и специализирани. Към вторите има две основни групи – Memory Address Registry (MAR) и Memory Buffer Registry (MBR). Така е възможно в някои MAR да се занесе някаква стойност във време t0. Ако разгледаме основната памет (друго хранилище на информация извън процесора), тя се състои от клетки с еднакъв размер, номерирани последователно. Нека сме на клетка номер 100000. Ако в t0 занесем стойност на MARk, то в такт t0+1 или съдържанието на MBRk се копира в клетка MARk, или обратно. Посоката на копиране зависи от една ‘И-схема’  конюнкция – подаването на електрически сигнал е със значение на единица. Едно (1) в конюнкция с данните от клетката им дава посоката. По този начин тези два елемента се явяват trigger-и или ‘И-схеми’, или превключвателни схеми. Фактически чрез ‘отпушване’ и ‘запушване’ на един trigger се реализира обменът между два елемента. Нека A, B, C, ..., E са регистри в процесора. Към двоичния суматор, чрез който се реализират всички двоични операции, има два регистъра за вход и един за изход. Всеки регистър е свързан с левия или десния вход на суматора в шината чрез trigger. Всички възможни trigger-и са свързани към регистър на командитеInstruction Register Mechanism (IRM), който е дълъг, колкото на брой са регистрите. Ако даден trigger дава сигнал едно (1), значи регистърът, с който е свързан, е отпушен и съдържанието му ще попадне в някой от входовете на суматора. Ако в даден такт t1 се занесе стойност едно (1) в някой trigger, това означава отваряне на съответния trigger. В такта t1+1 – резултат. Микропрограма – от типа отвори-затвори превключвателни схеми.



База данных защищена авторским правом ©obuch.info 2016
отнасят до администрацията

    Начална страница