(.. покажи всичко ..) (.. свий&скрий всичко ..) .. to the bottom ..
За компютритѣ полиномиално
- 1. Преамбюл: общ раздѣл
- 2. О, мина̨ло бързозабравимо: 5-тѣ дупки на перфолентата
- 3. За компютритѣ полиномиално
- 4. Бродерия на тракащ принтер
- 5. ЕГН-то отвѫтрѣ
- 6. Дисковата памет на System/360
- 7. Виртуалната памет на компютритѣ
- 8. [Draft] Хуманната аритметика на компютър
- 9. Прѣпратки (references)
- 10. Коментари, въпроси и отговори (comments, Q&As)
►► 1. Преамбюл: общ раздѣл (.. покажи го преамбюлът ..) (.. разгъна̨то ..)
- Сега съм пенсионер.
- Всѣ̋ка от тѣзи бесѣди е независима от другитѣ и може да се чете отдѣлно.
▼▼ 1. Преамбюл: общ раздѣл (.. скрий го преамбюлът ..) (.. свий го ..) (.. разгъни го ..)
- ►► Прѣдговор на преамбюлът (.. покажи го прѣдговорът на преамбюлът ..)
-
▼▼
Прѣдговор на преамбюлът
(.. скрий го прѣдговорът на преамбюлът ..)
- Прѣз 2018 се пенсионирах, слѣд като придобих изискващитѣ се стаж и възраст за това.
- Пенсионирах се слѣд 40 години работа като компютърен програмист и софту̌ерен инженер.
- В сѫщност бѣ̋х много добър кодировчик.
- Много добрѣ съм се разбирал с компютритѣ.
- Влизал съм им под тенекиитѣ - при битоветѣ.
- Защото тѣ само от битове разбират.
- В тази публикация ще се помѫча̨ да събера̨ спомени от далечното мина̨ло.
- На дърти години човѣк се вдѣтинѣ̋ва.
- Натам съм се запѫтил и аз.
- Това тука ме връща към младежкитѣ ми години.
- Като взема̨т да ме налѣ̋гат и дѣтски спомени, ще стане крайно врѣме да спра̨ да пиша̨.
- Но ако по спомени захвана̨ нѣ̋коя тема, ще прослѣдя̨ и слѣдващото ӥ развитие.
- Тоест, това нѣ̋ма да сѫ само младежки спомени.
- А за занимавка и за гимнастика на умът, не искам да спирам да пиша̨ софту̌ер.
- Упражнявам се на JavaScript.
- Така че ще има много софту̌ер втъка̀н в тази публикация.
- There will be much software behind.
- .. скрий го прѣдговорът на преамбюлът .. (.. скрий го преамбюлът ..) (.. свий го ..) (.. разгъни го ..)
- ►► Всѣ̋ка бесѣда е независима от остана̨литѣ (.. покажи ..)
-
▼▼
Всѣ̋ка бесѣда е независима от остана̨литѣ
(.. скрий ..)
- Всѣ̋ка бесѣда е от този сборник с бесѣди е независима от остана̨литѣ
- и може да се чете отдѣлно.
- Всѣ̋ка една е прѣдизвикана от нѣ̋какъв мой далечен спомен.
- Обикновено се прослѣдява и развитието на проблемът прѣз слѣдващитѣ години.
- Всѣ̋ка от бесѣдитѣ е свързана по нѣ̋какъв начин с компютритѣ.
- Все пак в детайли не съм навлизал.
- От читателитѣ не се изискват знания в областта на компютритѣ или софту̌ерът.
- В нѣ̋кои от бесѣдитѣ е втъка̀н софту̌ер.
- Той демонстрира нѣщо.
- Написан е на JavaScript.
- Може да се тества.
- .. скрий я̨ независимостта на бесѣдитѣ .. (.. скрий го преамбюлът ..) (.. свий го ..) (.. разгъни го ..)
- ◄► Засега не всички планирани бесѣди сѫ завършени.
- Но всички планирани бесѣди си имат вече заглавия и се появяват в таблицата на съдържанието.
- ◄► (.. скрий го преамбюлът ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
►► 2. О, мина̨ло бързозабравимо: 5-тѣ дупки на перфолентата (.. покажи я̨ първата бесѣда ..) (.. разгъна̨то ..) .. към началото ..
- По споменитѣ ми от 9-ти клас.
- Срѣдно образование съм завършил с квалификация "изчислител-кодировчик".
- Кодирането на музиката - музикалнитѣ ноти - се учѣше едно врѣме в 3-то отдѣление.
- А много по-важното кодиране за компютритѣ май само експерти го зная̨т. ::2021-11-05 13:10::
▼▼ 2. О, мина̨ло бързозабравимо: 5-тѣ дупки на перфолентата (.. скрий я̨ първата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
::2021-11-05 13:10::- ►► Прѣдговор, който трѣ̋бва да се прочете първо (.. покажи го прѣдговорът на първата бесѣда ..)
-
▼▼ Прѣдговор, който трѣ̋бва да се прочете първо
(.. скрий го прѣдговорът на първата бесѣда ..)
- Мина̨лото бива мина̨ло незапомнено и мина̨ло бързозабравимо.
- Прогресът на човѣшкото общество се дължи само на напрѣдъкът на технологиитѣ.
- Революциитѣ не мога̨т да водя̨т до прогрес.
- Революциитѣ мога̨т да причиня̨т регрес в обществото, ако се прѣвърна̨т в спирачка на технологичното развитие.
- А иначе революциитѣ сѫ най-обикновени актове на насилие, каквито човѣчеството познава открай врѣме:
- братоубийства, грабежи, войни, масови убийства.
- До напрѣдък тѣ на водя̨т.
- Пенсионирал съм се слѣд 40 години стаж в компютърната индустрия - като компютърен програмист и софту̌ерен инженер.
- И този текст тука е посветен на далечната история на компютърната индустрия,
- далечната - отпрѣди аз да влѣ̋за̨ професионално в индустрията.
- Иска ми се да материализирам споменитѣ си:
- какво съм учил в девети клас в търновската гимназия прѣз 1969.
- Да, в девети клас учѣхме за машинното кодиране на Минск-2.
- Нѣ̋какви общи познания сѫ ни били прѣподавани в десети клас - схеми, алгоритми, кодировки, нотации.
- А в единадесети клас учихме езикът за програмиране от високо ниво Алгол-60.
- В дипломата ми за срѣдно образование има и нѣ̋каква професионална квалификация: изчислител-кодировчик.
- Нашата паралелка 'Д' завършвахме като изчислители-кодировчици.
- Други паралелки завършваха̨ като автомонтıори, електротехници, ..
- Най завиђахме на шофıоритѣ от 'Г'-паралелка - завършваха̨ гимназия с шофıорска книжка.
- Прѣз животът си никога не съм програмирал на Минск-2, нито за Минск-22 или Минск-32.
- Нито пък съм виђал компилатор от Алгол-60.
- Но програми на Алгол-60 съм писал.
- Вѣроятно единственитѣ входно-изходни устройства на "дрѣвнитѣ" компютри Минск-2 сѫ били вход и изход на петпѫтечкова перфолента, заимствана от телеграфът.
- Затова в двата раздѣла тука давам общи свѣдения за:
- Но да караме наред.
- Идеитѣ на Charles Babbage и Ada Lovelace от 19-ти вѣк сѫ изпрѣварващи - врѣмето на компютърната техника още не било дошло.
- Но доста технологични постижения от 19-ти вѣк и от първитѣ десетилѣтия на 20-ти вѣк сѫ допринесли за развитието на компютърнитѣ технологии:
- жакардовитѣ станове
- телеграфът
- холеритовата техника на IBM
- автоматичнитѣ телефонни централи
- и разбира се,
- радиотехниката.
- Напримѣр:
- Елементната база на съврѣменнитѣ компютри е тръгна̨ла от радиотехниката.
- Обаче първия̌т програмируем компютър на Konrad Zuse (1941) е бил построен с елементи на телефонията, на автоматичнитѣ телефонни централи.
- Първо прочетѣте за 7-битовата срѣда̀, 7-битовата срѣда̀, 7-битовата среда̀, 7-битовата среда̀, 7-bitovata sredà, 7-bitovata sredà, за 7-битовата бариера и за прѣодоляването ѝ в началото на 21-ви вѣк.
- Тука ще стане дума за петбитовата кодировка, стандартизирана за петпѫтечковитѣ перфоленти, използвани в телеграфията, но и в "дрѣвнитѣ" компютри Минск-2.
- .. скрий го прѣдговорът на първата бесѣда .. (.. скрий го мина̨лото незапомнено ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ►► Кодировката на петпѫтечковитѣ перфоленти (.. покажи я̨ ..) (.. разгъна̨то ..) .. към началото ..
-
▼▼ Кодировката на петпѫтечковитѣ перфоленти
(.. скрий я̨ ..)
(.. свий я̨ ..)
(.. разгъни я̨ ..)
- ►► Телеграфът (.. покажи ..)
-
▼▼ Телеграфът
(.. скрий го ..)
- В тесен смисъл телеграфията прѣдставлява дистанционно прѣдаване на електрически импулси.
- Важни сѫ съпѫтстващитѣ устройства.
- [A] Перфоратор с клавиатура
- Устройство с клавиатура, приличащо на пишеща машина, което вмѣсто да отпечатва буквитѣ, цифритѣ, точкитѣ и запетайкитѣ на хартия във вид, удобен за човѣк, дупчи кодоветѣ им на перфолента.
- [B] Пишеща машина без клавиатура
- Чете от перфолента кодоветѣ на букви, цифри, точки и запетайки, и ги отпечатва във вид, удобен за човѣк.
- [C] Четец на перфолента
- Чете кодове от перфолента и ги праща по телеграфна линия до отдалечено мѣ̋сто или пък ги подава на компютър - той да прави каквото иска с тѣ̋х.
- [D] Перфоратор без клавиатура
- Дупчи на перфолента или импулситѣ, получени по телеграфна линия от отдалечено мѣ̋сто, или кодоветѣ, получени от компютър.
- В самата телеграфия чрѣз устройство A телеграмата се отпечатва на перфолента,
която се подава на устройство C, за да бѫда̨т пратени кодоветѣ до дестинацията,
къдѣто устройство D дупчи полученитѣ сигнали на перфолента,
която се подава на устройство B, за да бѫде текстът отпечатан на хартия.
Така получената телеграма се врѫчва на получателя̌т. - Тази услуга, която пощитѣ прѣдоставяха̨, е от 19-ти вѣк.
- В началото на 21-ви вѣк телеграфията излѣзе от употрѣба, защото услугата "електронна поща" на интернет и услугата SMS на GSM-комуникациитѣ я̨ замѣстиха̨.
- Българскитѣ пощи спрѣ̋ха̨ да пращат телеграми прѣз 2005.
- Послѣдната телеграма в свѣтът е била пратена на 2013-07-14.
- Устройствата, обслужващи телеграфията, сѫ били използвани при първитѣ компютри, включително и при Минск-2, за които ще стане дума.
- Забѣлѣжка_1: Вѣроятно винѫги е имало хора, способни да чета̨т кодирани перфоленти и да записват на рѫка или да диктуват полученитѣ телеграми.
- Забѣлѣжка_2: Разбира се, телеграфията от послѣднитѣ десетилѣтия е използвала по-съврѣменни електронни устройства с памет.
- (.. скрий го телеграфът ..) (.. скрий я̨ кодировката на петпѫтечковитѣ перфоленти ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ►► Кодировката (.. покажи ..)
-
▼▼ Кодировката
(.. скрий я̨ ..)
Подредба на таблицата:
- Двата реда с десетични числа прѣдставят перфориранитѣ кодове в двѣ нотации: с младшия̌т бит отгоре (BigEndian) и с младшия̌т бит отдолу (LittleEndian).
- Таблицата може да се покаже с три подредби на колонитѣ:
- според горнитѣ битовѣ - тѣ сѫ най-значими: BigEndian
- според долнитѣ битовѣ - тѣ сѫ най-значими: LittleEndian
- според клавиатурата: QWERTY
0 2 8 4 29 25 16 10 1 21 28 12 3 13 24 20 18 22 11 5 26 30 9 17 23 14 15 19 6 7 27 31 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 0 8 2 4 23 19 1 10 16 21 7 6 24 22 3 5 9 13 26 20 11 15 18 17 29 14 30 25 12 28 27 31 NUL CR LF SP Q W E R T Y U I O P A S D F G H J K L Z X C V B N M ESC DEL NUL CR LF SP 0 1 2 3 4 5 6 7 8 9 - ' WRU ! & # BEL ( ) + / : = ? , . ESC DEL NUL CR LF SP Я В Е Р Т Ы У И О П А С Д Ф Г Х Й К Л З Ь Ц Ж Б Н М ESC DEL NUL CR LF SP 0 1 2 3 4 5 6 7 8 9 - ' WRU Э Ш Щ Ю ( ) + / : = ? , . ESC DEL - Има два регистъра:
- основен регистър - регистър на буквитѣ
- алтернативен регистър - регистър на формитѣ - цифри, скоби, запетаи, ..
- Има и два режима:
- латиница
- кирилица
- Само в странитѣ с писменост на кирилица сѫществува режим кирилица.
- Повечето страни се задоволяват само с режим латиница.
- Четиритѣ реда в таблицата сѫ както слѣдва:
- основен регистър - режим латиница
- алтернативен регистър - режим латиница
- основен регистър - режим кирилица
- алтернативен регистър - режим кирилица
- Контролнитѣ знаци NUL, LF, SP, CR, ESC, DEL се кодират еднакво в двата регистъра и двата режима.
- От основен към алтернативен регистър се прѣминава със ESC.
- А обратно от алтернативен към основен регистър се прѣминава със DEL.
- Макар кодировката да е 5-битова, двата регистъра - основен и алтернативен - позволяват 52 знака, освѣн 6-тѣ контролни знака.
- Ако сѫществува режим кирилица, то слѣд NUL се влиза в този режим, а слѣд DEL се прѣминава в режим латиница - основен регистър.
- NUL означава непродупчена перфолента.
- Ако режим кирилица не сѫществува, NUL не може да се срѣща вѫтрѣ в съобщение.
- Иначе, ако режим кирилица сѫществува, то това е началния̌т режим. Повечето телеграми не налагат прѣвключване към режим латиница, но ако се наложи, това става с DEL.
- (.. скрий я̨ петбитовата кодировката ..) (.. скрий го подраздѣлът ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ►► Перфоленти с повече от пет пѫтечки (.. покажи ..)
-
▼▼ Перфоленти с повече от пет пѫтечки
(.. скрий ..)
- Петпѫтечковата перфолента с кодировката, показана по-горѣ, опрѣдѣля петбитовата бариера.
Компютритѣ Минск-2, за които ще стане дума по-долу, сѫ били установени на тази бариера.
Аз не съм работил с компютри на петбитовата бариера, нито с петпѫтечкови перфоленти. - Когато аз започна̨х работа, перфолентитѣ, използвани от индустрията, бѣ̋ха̨ осемпѫтечкови, а компютритѣ бѣ̋ха̨ установени на седембитовата бариера, в 7-битова срѣда̀.
- Едно врѣме - в първитѣ мои години в индустрията -
перфолентитѣ се използваха̨, за да се заређат тестови програми, или - рѣ̋дко - при начално заређане (boot).
- [Q]Въпрос: А сега как се заређат тестови програми на полу-умрѣ̋л харду̌ер?
- [A]Отговор: Сега цѣлия̌т чип се изхвърля и се замѣня с нов.
- Едно врѣме любимата дрѣха на човѣк в течение на годинитѣ се сдобивала с кръпки.
- Сега човѣк си изхвърля скѫсаната дрѣха, колкото и да му е любима, и си купува нова.
- Това е технологичен прогрес.
- Новото производство е достатъчно евтино и не си струва старото да се ремонтира.
- Сега има реална възможност хартията да се изхвърли от информационнитѣ технологии.
- Пластика, имплантирани чипове - какво му трѣ̋бва на човѣк ..
- Даже любовни писма на хартия вече нѣ̋ма.
- Лично аз имам богат опит с перфокарти, а не толкова с перфоленти.
- Но перфокартитѣ сѫ извън обхватът на този разказ.
- (.. скрий ги 8-пѫтечковитѣ перфоленти ..) (.. скрий я̨ кодировката на петпѫтечковитѣ перфоленти ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- Петпѫтечковата перфолента с кодировката, показана по-горѣ, опрѣдѣля петбитовата бариера.
- ◄► (.. скрий я̨ кодировката на петпѫтечковитѣ перфоленти ..) (.. свий я̨ ..) (.. разгъни я̨ ..) (.. скрий го мина̨лото незапомнено ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ►► Компютритѣ Минск-2 - в далечното мина̨ло на съвѣтската индустрия (.. покажи ..) (.. разгъна̨то ..) .. към началото ..
-
▼▼ Компютритѣ Минск-2 - в далечното мина̨ло на съвѣтската индустрия
(.. скрий ..)
(.. свий ..)
(.. разгъни ..)
- ►► И какво все пак е стана̨ло с компютритѣ Минск-2 (.. покажи ..)
-
▼▼ И какво все пак е стана̨ло с компютритѣ Минск-2
(.. скрий ..)
- Прѣз сѫщата година, когато в девети клас съм учил кодирането на Минск-2, заводът в град Минск бил спрѣ̋л производството на тѣзи компютри.
- Слѣдващитѣ модели Минск-22 и Минск-32 донѣ̋къдѣ сѫ били програмно съвмѣстими с Минск-2.
- Нѣ̋колко компютъра Минск-32 сѫ били инсталирани и експлоатирани в България.
- При Минск-32 за приложно програмиране се използваше най-вече езикът COBOL.
- Освѣн в град Минск, развойни центрове за компютърна техника в бившия̌т Съвѣтски съюз имаше в още нѣ̋колко града. На първо мѣ̋сто в Москва и в Киев. Но България е била клиент на заводът в Минск.
- Както при всичко остана̨ло, и при компютритѣ съвѣтското производство отстѫпваше на западното - и по качество, и по цѣна, и по всичко.
- В срѣдата на 60-тѣ години в индустрията на Запад голѣ̋м успѣх е постигна̨ла фирмата IBM със своята System/360. Донѣ̋къдѣ била стана̨ла индустриален стандарт, с развит пазар не само за харду̌ер, но и за софту̌ер.
- Във връзка с това в Москва сѫ рѣшили да направя̨т "голѣ̋м скок".
- Издадена е била командата всички стари проекти да се канцелират и всички ресурси да се впрегна̨т в reverse-engineering на IBM System/360 под означението ЕС ЭВМ.
- Повече никакви странни модели със странни архитектури!
- Равняваме се по първитѣ. Крадем от първитѣ.
- Равняваме се по IBM. Крадем от IBM.
- Слѣд години почна̨хме да крадем и от фирмата DEC.
- В reverse-engineering-ът бѣ̋х добър.
- Та това е сложило край на компютритѣ от серията Минск.
- Специалиститѣ от град Минск и тамошния̌т завод успѣшно сѫ се прѣквалифицирали за IBM System/360, пардон за ЕС ЭВМ.
- Само да отбѣлѣжа̨, че независимата държава Бѣлорусия е наслѣдила от бившия̌т Съвѣтски съюз сравнително развита компютърна индустрия.
- По-развита от българската.
- (.. скрий го края̌т на Минск-2 ..) (.. скрий го подраздѣлът за компютритѣ Минск-2 ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ►► Отклонение: Из "дрѣвноститѣ" на българската компютърна индустрия (.. покажи ..)
-
▼▼ Отклонение: Из "дрѣвноститѣ" на българската компютърна индустрия
(.. скрий ..)
- Като студент в университетът и в първитѣ години на професионалната ми кариера съм работил на IBM System/360 (т.е. на ЕС ЭВМ). На изложеното в това отклонение не съм свидѣтел.
- Първо и Второ.
- Първо. В годинитѣ 1960-63 български учени в един екземпляр сѫ разработили компютър Витоша.
- Ето нѣ̋кои фрагментарни свѣдения за него.
- В машинната инструкция се указват адреситѣ не само на операндитѣ, но и на слѣдващата инструкция. Ето защо.
- Оперативната памет (RAMът) е бил[а] реализиран[а] на магнитен барабан.
- Докато централния̌т процесор изпълнява текущата инструкция, барабанът се е завъртѣ̋л и е подмина̨л мѣ̋стото на слѣдващата по разположение инструкция. Затова се налага в машинната команда да се укаже адресът на само на операндитѣ, но и на слѣдващата инструкция за изпълнение.
- Второ.
Прѣз годинитѣ 1967-1971 в софийския̌т ЗИТ (заводът за изчислителна техника) се произвеђали компютри с означение ЗИТ-151,
по лиценз за Facom-230–30 от японската фирма Facom.
- Нѣ̋кои новосъздадени териториални изчислителни центрове, наред със съвѣтскитѣ компютри модѣл Минск-32, били оборудвани и с компютри ЗИТ-151 (Facom).
- Kомпютритѣ ЗИТ-151 (Facom), както и компютритѣ Минск-32, нѣ̋мали дискова памет, т.е. външна енерго-независима (трайна) памет с бърз достѫп. Външната им памет е била на магнитни ленти, a оперативната им памет - на феромагнитни мрѣжички (core: connecting others reaching everyone).
- Производството на ЗИТ-151 е било спрѣ̋но, когато свыше е дошла височайша заповѣд всичкитѣ усилия на компютърнитѣ специалисти в пространството от Бранденбургската врата до Владивосток да се включа̨т в reverse-engineering (разбирай крадене) на продуктовата линия System/360 на фирмата IBM. Не само ЗИТ-151 е бил спрѣ̋н от производство, сѫщото е сполетѣ̋ло и Минск-32, както и ред други съвѣтски разработки.
- Забѣлѣжѣте, че българската компютърна индустрия (а вѣроятно и съвѣтската) е била подтикна̨та към кражби на интелектуална собственост едва с височайшата заповѣд да се слѣдва IBM System/360.
- Прѣз 80-тѣ в Чехословакия бѣ̋ха̨ разработили оригинална операционна система за IBM System/370. Дори фирмата IBM нѣ̋маше такава разработка. Да, като всѣки нов софту̌ер, чешката система бѣ доста бъгава, но другитѣ страни от СИВ можѣхме да помогнем в дебъгването. Нищо такова не стана̨. Чешката система бѣ изхвърлена.
- Неусѣтно стигна̨х до събития, на които съм свидѣтел.
- Общо наблюдение: Както и при всички остана̨ли продукти, компютритѣ западно производство по качество и надѣђност в пѫти надвишаваха̨ компютритѣ съвѣтско производство. Които пък от своя страна по качество и надѣђност надвишаваха̨ компютритѣ българско производство.
- (.. скрий ги дрѣвноститѣ на българската компютърна индустрия ..) (.. скрий го подраздѣлът за компютритѣ Минск-2 ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ►► Пак отклонение: бит и байт (.. покажи ..)
-
▼▼ Пак отклонение: бит и байт
(.. скрий ..)
- В паметта на компютритѣ има битове, много битове.
- Един бит има двѣ състояния.
- Това означава, че в един бит от паметта на компютърът се записва един бит информация.
- Битът е естествено понятие.
- Един бит има двѣ състояния. Тѣ физически мога̨т да имат различно изражение.
- Напримѣр на опрѣдѣлена позиция на перфолентата нѣ̋ма дупка или има дупка.
- Обаче е прието хората да означават двѣтѣ състояния на бит с цифритѣ 0 и 1.
- Най-често се използват не отдѣлни битове, а групи от сѫсѣдни битове, които прѣдставят нѣ̋какво число или код.
- Когато централния̌т процесор чете данни от оперативната памет (от RAMът) или записва там данни, винѫги чете или пише наведнѫж група от сѫсѣдни битове.
- Когато централния̌т процесор чете данни от оперативната памет (от RAMът) или записва там данни, той адресира мѣ̋стото.
- Адресът прѣдставлява число, което обикновено се интерпретира като двоично число без знак.
- Стѫпката на адреситѣ нѣ̋кога бѣше основна част от компютърната архитектура.
- Прѣз колко бита адресът на мѣ̋стото в оперативната памет се промѣня с единица:
- При Минск-2: прѣз 37 бита.
- При ЗИТ-151 (Facom-230): прѣз 10 бита.
- При ИЗОТ-310 (PDP-8): прѣз 12 бита.
- При съврѣменнитѣ компютри тази стѫпка е винѫги осем (8).
- Група от осем сѫсѣдни байта на общ адрес от паметта е била нарѣчена байт (byte).
- Тази архитектурна черта на съврѣменнитѣ компютри се нарича байтова организация.
- Тази мода се е установила вѣроятно заради доминирането на IBM System/360 в момент от мина̨лото.
- У нас понятието байт и компютри с байтова организация се появиха̨ с IBM System/360 и ЕС ЭВМ.
- Компютритѣ Витоша, Минск-2 и ЗИТ-151, за които стана̨ дума, нѣ̋мат байтова организация и понятието байт при тѣ̋х не се използва.
- ◄►
Отклонение_1: Относно мѣркитѣ за количество информация.
- Основната мѣ̋рка за количество информация, зададена от природата, е бит.
- Обикновено скоростта на интернет се мѣри в "Мегабитове на секунда" - MegaBits per second - Mbps.
- Мегабит - MegaBit - това сѫ (1024*1024=)1048576 бита.
- Не се използва байт, понеже отдѣлнитѣ битове от един байт мога̨т да пѫтуват по различни пѫтища из дебритѣ на интернет.
- Осем бита информация прѣдставляват един байт (byte).
- 1024 байта прѣдставляват един килобайт (kilobyte, Kb).
- 1024 килобайта прѣдставляват един мегабайт (megabyte, Mb, голѣ̋м байт).
- 1024 мегабайта прѣдставляват един гигабайт (gigabyte, Gb, гигантски байт).
- 1024 гигабайта прѣдставляват един терабайт (terabyte, Tb, звѣрски байт).
- Основната мѣ̋рка за количество информация, зададена от природата, е бит.
- ►► Отклонение_2: Да обясня̨ терминитѣ 16-битови, 32-битови или 64-битови компютри (.. покажи ..)
-
▼▼ Отклонение_2: Да обясня̨ терминитѣ 16-битови, 32-битови или 64-битови компютри
(.. скрий ..)
- И тъй, компютритѣ сѫ с байтова организация. В паметта им битоветѣ сѫ организирани в байтове.
- В един байт може да се запише число (двоично без знак) от 0 до 255.
- Ако адресът на байт от паметта се съдържаше само в един байт, то щѣше да е възможно да се адресират само 256 байта - твърдѣ малко за почти всѣ̋ко приложение.
- Ето защо за адреси се използват по-голѣми числа (двоични без знак), записани в нѣ̋колко сѫсѣдни байта.
- Ако адресът се съдържа в два сѫсѣдни байта, то компютърът ще може непосрѣдствено да адресира 65536 байта (с двоично беззнаково число међу 0 и 65535).
- Такъв компютър се означава като 16-битов.
- Ако адресът се съдържа в четири сѫсѣдни байта, то компютърът ще може непосрѣдствено да адресира 4294967296 байта или 4 GigaBytes (с двоично беззнаково число међу 0 и 4294967295).
- Такъв компютър се означава като 32-битов.
- Ако адресът се съдържа в осем сѫсѣдни байта, то компютърът ще може да има непосрѣдствен достѫп до адресно пространство с космически размѣри.
- Такъв компютър се означава като 64-битов.
- И тъй, компютърът е с байтова организация и използва за адреси беззнакови двоични числа, разположени в нѣ̋колко сѫсѣдни байта.
- Всѣки от тѣзи нѣ̋колко сѫсѣдни байта, заедно прѣдставляващи беззнаково двоично число, използвано за адрес, всѣки от тѣ̋х си има свой адрес.
- Но адреситѣ им сѫ сѫсѣдни числа. Най-малкото от тѣзи числа се използва за адрес на адресът.
- Адресът на адресът адресира адрес - затова е адрес на адресът. Но това си е адрес, значи е и адрес на байт. Е, този байт каква позиция има в числото, в беззнаковото двоично число, прѣдставляващо адресът?
- Ако това е младшия̌т байт - компютърът е LittleEndian.
- Ако това е старшия̌т байт - компютърът е BigEndian.
- Компютритѣ от серията ЕС ЭВМ (IBM System/360/370) сѫ BigEndian.
- Компютритѣ с архитектури PDP-11 (DEC), VAX (DEC), X86 (Intel) сѫ LittleEndian.
- Характеристиката LittleEndian/BigEndian има значение и при кодировкитѣ, когато различни компютри си обмѣнят кодове, понеже тя се отнася не само до адреситѣ, които сѫ двоични беззнакови числа, но и при всѣ̋какви числа.
- (.. скрий го отклонението за 16-32-64-битовитѣ компютри ..)
- (.. скрий го отклонението за бит и байт ..) (.. свий го ..) (.. разгъни го ..) (.. скрий го подраздѣлът за компютритѣ Минск-2 ..) (.. свий го ..) (.. разгъни го ..)
- ►► Нѣ̋кои свѣдения за компютритѣ Минск-2 (.. покажи ..)
-
▼▼ Нѣ̋кои свѣдения за компютритѣ Минск-2
(.. скрий ..)
- Наврѣмето знаѣх да пиша̨ машинни програми за Минск-2.
- Сега съм забравил. Цѣлта на този текст е да си припомня̨, каквото мога̨.
- Прѣз професионалната си кариера владѣѣх машинния̌т код на IBM/System/360/370, PDP-11 и VAX.
- Но това бѣше прѣз първата половина на професионалната ми кариера.
- Прѣз втората половина на професионалната ми кариера не ми се е налагало да слизам на това ниво.
- Минск-2 бѣше 37-битов компютър.
- Сѫсѣдни 37 бита от паметта образуваха̨ клѣтка (memory cell, ячейка памяти).
- Всѣ̋ка клѣтка си има адрес.
- Адресът прѣдставлява 12-битово двоично число без знак.
- Слѣдователно, адресът прѣдставлява число от 0 до 4095.
- При моделът Минск-22 адресът е 13-битово число от 0 до 8191.
- Слѣдователно, при Минск-2 максималния̌т и реалния̌т размѣр на оперативната памет е 4096 37-битови клѣтки, или общо (4096*37=) 151552 бита, което е 18944 съврѣменни байта, 18.5 килобайта.
- При моделът Минск-22 - двойно.
- Когато с такива адреси работѣха̨ хора - програмисти и кодировчици, един 12-битов адрес се прѣдставяше чрѣз 4-цифрово беззнаково число в осмична система от 0000 до 7777 (което значи от 0 до 4095 десетично).
- И тъй, размѣрът на оперативната памет при Минск-2 в съврѣменни мѣрки е 18 и половина килобайта.
- За сравнение:
- Когато завърших и постѫпих на работа, компютърът, с който си имах работа, имаше оперативната памет 128 килобайта. ЕС ЭВМ (IBM System/360).
- Едно врѣме 32-битовото адресно пространство на VAX (4 гигабайта) ни изглеђаше огромно.
- Личния̌т ми лаптоп, на който пиша̨ това, има 16 гигабайта оперативна памет.
- Друго компютърче, лично мое, пак с нѣ̋колко гигабайта памет, си го нося̨ в џобът и го ползвам като телефонче.
- Свидѣтел съм и на дрѣвнитѣ, и на модернитѣ врѣмена.
- Клѣтката, както писах, прѣдставлява 37 сѫсѣдни бита.
- Разбира се, такава клѣтка можѣше да съдържа 37-битово двоично число със или без знак.
- Компютърът можѣше да извършва операции с такива числа.
- Сѫщо така, една такава клѣтка можѣше да съдържа машинна команда за изпълнение.
- Когато с такива 37-битови числа или машинни команди работѣха̨ хора - програмисти и кодировчици,
една 37-битова клѣтка се прѣдставяше чрѣз 12-цифрово число в осмична система със знак отпрѣд.
- Напримѣр, +100001770200.
- Като двоично число (с фиксирана точка) това е числото 8590454912 в десетичен запис.
- Като машинна команда, тази 37-битова клѣтка инструктира компютърът:
- Да прочете в суматорът съдържанието на клѣтка на адрес 0177 осмично (десетично 127).
- Да прибави към него съдържанието на клѣтка на адрес 0200 осмично (десетично 128).
- Резултатът от суматорът (сумата на двѣтѣ числа) да запише обратно в паметта на адрес 0200 осмично (десетично 128).
- Общия̌т формат на машинната команда при Минск-2 е слѣдния̌т:
- Старшитѣ 7 бита сѫ кодът на операцията.
- Остават 30 бита.
- Слѣдващитѣ 6 бита задават индексния̌т регистър.
- Остават 24 бита.
- Слѣдват двата операнда, всѣки указан с 12-битов адрес.
- Всичкитѣ битове в клѣтката влѣ̋зоха̨ в употрѣба.
- Старшитѣ 7 бита сѫ кодът на операцията.
- Относно индексния̌т регистър.
- Обикновено централния̌т процесор на един компютър има на свое разположение близо до себе си, "на една рѫка разстояние", нѣ̋колко регистъра, съдържащи данни, нужни в текущия̌т момент или пък в непосрѣдственото бѫдеще.
- Броя̌т на тѣзи регистри не може да е много голѣ̋м, понеже програмиращитѣ на машинен език или на асемблер трѣ̋бва да държа̨т тѣзи регистри в човѣшката си памет.
- 16 е прилично число за този брой.
- Ако тѣ сѫ 16, такъв регистър се указва с число от 0 до 15.
- Диапазонът от 0 до 15 е миниатюрно адресно пространство за тѣзи регистри, извън адресното пространство на оперативната памет.
- Оперативната памет е "на един поглед разстояние", по-далече от регистритѣ.
- В компютърът Минск-2 практически има само един такъв регистър - суматорът. Той винѫги се указва неявно и не се нуђае от адрес.
- Той - суматорът - не може да служи за индексен регистър.
- В машинната команда на Минск-2 за адрес на клѣтка от оперативната памет (за адрес на операнд) се задѣлят 12 бита, а за номер на индексен регистър се задѣлят 6 бита.
- Възможнитѣ адреси на клѣтки от паметта осмично сѫ от 0000 до 7777, или десетично от 0 до 4095.
- В 6-тѣ бита, задѣлени за номерът на индексния̌т регистър, може да се запише осмично число от 00 до 77, или десетично от 0 до 63.
- В Минск-2 първитѣ 64 клѣтки от оперативната памет, клѣткитѣ с адреси от 00 до 77 осмично или 0 до 63 десетично, мога̨т да се използват като индексни регистри.
- Адресирането на тѣзи клѣтки с 12-битов адрес на операнд си остава възможно.
- В Минск-22 като индексни регистри мога̨т да се използват само първитѣ 16 клѣтки от паметта.
- За адресирането им сѫ достатъчни 4 бита: от 00 до 17 осмично или от 0 до 15 десетично.
- В Минск-22 за всѣки от двата операнда се взема един бит и се слага като старши бит на адресът на операндът.
- Така в Минск-22 адреситѣ на операндитѣ стават 13-битови, което позволява максимален размѣр на оперативната памет 8192 37-битови клѣтки.
- Как в Минск-2 се използва индексния̌т регистър.
- От неговитѣ 37 бита, само 24-тѣ бита, разположени на позиция на адрес на операнд, се използват.
- Остана̨литѣ битове трѣ̋бва да сѫ нули или се приемат за нули.
- Съдържанието на индексния̌т регистър се добавя към машинната команда.
- По този начин адреситѣ на двата операнда мога̨т да бѫда̨т модифицирани.
- Тази техника е необходима при програмиране на цикли.
- Помня̨, че в архитектурата IBM/System/360/370 (ЕС ЭВМ) да се укаже номер 0 (нула) за индексен или за базисен регистър означава да не се използва такъв регистър.
- Не помня̨ дали подобно правило имаше и при Минск-2.
- Заключение: Колко първобитно е било машинното програмиране за Минск-2.
- В девети клас никой не ни е учил към какъв интерфейс да се придържаме при извикване на подпрограма.
- Явно, при Минск-2 човѣк сам е трѣ̋бвало да си разработи такъв интерфейс.
- За сравнение, при IBM/System/360/370 (ЕС ЭВМ) и при всички слѣдващи компютърни архитектури, ако не знаеш този интерфейс, значи не владѣеш машинното програмиране.
- Изключително трудно е програмата да се направи relocatable.
- Слѣдващитѣ компютърни архитектури прѣдоставят такива възможности.
- Сега практически всѣки компилатор произвеђа позиционно-независим код (PIC: position-independent code).
- Истински стек (stack) нѣ̋маше и в архитектурата IBM/System/360/370 (ЕС ЭВМ).
- Не е оправдано в Минск-2 да очакваме улеснения за stack.
- Има ли смисъл изобщо да се говори за sharable-програми, понеже нѣ̋ма много нишки (threads), нѣ̋ма много процеси, нѣ̋ма много пoтрѣбители.
- Изключително трудно е програмата да се направи reentrant.
- В частност, изключително трудно е да се програмира рекурсия.
- Чудя̨ се дали за машинитѣ Минск е имало компилатор на Алгол.
- Защо в единадесети клас учихме Алгол?
- Експлоатацията на компютритѣ Минск-32 у нас се е основавала на Кобол.
- И послѣдно: нѣ̋мам прѣдстава каква дѫлбочина на софту̌ерът е била достигна̨та при Минск-2.
- (.. скрий ги свѣденията за компютритѣ Минск-2 ..) (.. скрий го подраздѣлът за компютритѣ Минск-2 ..) (.. свий го ..) (.. разгъни го ..)
- ◄► (.. скрий ги компютритѣ Минск-2 ..) (.. свий ги ..) (.. разгъни ги ..) (.. скрий го мина̨лото незапомнено ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
-
►► References: прѣпратки
(.. покажи ги ..)
-
▼▼ References: прѣпратки
(.. скрий ги ..)
(.. скрий го мина̨лото незапомнено ..)
(.. свий го ..)
(.. разгъни го ..)
- christotamarin.blogspot.com: 7-битовата срѣда̀
- christotamarin.blogspot.com: The JCUKEN keyboard layout
- christotamarin.blogspot.com: 7-битовата срѣда̀
- christotamarin.blogspot.com: The JCUKEN keyboard layout
- christotamarin.blogspot.com: 7-битовата среда̀
- christotamarin.blogspot.com: The JCUKEN keyboard layout
- christotamarin.blogspot.com: 7-битовата среда̀
- christotamarin.blogspot.com: The JCUKEN keyboard layout
- christotamarin.blogspot.com: 7-bitovata sredà
- christotamarin.blogspot.com: The JCUKEN keyboard layout
- christotamarin.blogspot.com: 7-bitovata sredà
- christotamarin.blogspot.com: The JCUKEN keyboard layout
- wikipedia: Baudot code#ITA2
- wikipedia: МТК-2
- wikipedia: Punched tape
- Виртуальный компьютерный музей: Серия ЭВМ «Минск»
- Виртуальный компьютерный музей: Электронная цифровая вычислительная машина Минск-2
- ◄► (.. скрий я̨ първата бесѣда ..) (.. свий я̨ ..) (.. посвий или поразгъни ..) (.. разгъни я̨ ..) .. към началото ..
►► 3. За компютритѣ полиномиално (.. покажи я̨ втората бесѣда ..) (.. разгъна̨то ..) .. към началото ..
- По споменитѣ ми от 11-ти клас, 1971..72.
- Иска ми се да си докажа̨, че сега не съм по-тѫп, отколкото съм бил тогава.
- Заглавието на тази бесѣда го сложих като заглавие на цѣлия̌т този сборник с бесѣди.
▼▼ 3. За компютритѣ полиномиално (.. скрий я̨ втората бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ►► Постановка на задачата (.. покажи го прѣдговорът на бесѣдата ..) (.. покажи го разгъна̨то ..)
-
▼▼
Постановка на задачата
(.. скрий го прѣдговорът на бесѣдата ..)
(.. свий го ..)
(.. разгъни го ..)
- ►► Срѣдношколски спомени (.. покажи ..)
-
▼▼
Срѣдношколски спомени
(.. скрий ..)
- Завършил съм гимназия (11-ти клас) прѣз 1972 със специалност "изчислител-кодировчик".
- Съученицитѣ ми от сѫсѣдната "Г" паралелка завършваха̨ като шофıори.
- В деня̨т на навършване на пълнолѣтив всѣки от тѣ̋х можѣше да отиде да си я̨ вземе шофıорската книжка.
- В 11-ти клас по прѣдмѣтът за компютърна подготовка (АСМ) изучавахме езикът за програмиране Algol-60.
- Компилатор от Algol-60 не съм виђал.
- Езикът се използваше за публикуване на алгоритми,
- което значи, че аз съм го използвал по прѣдназначение.
- В Algol-60 имаше странно прѣдаване на параметритѣ към подпрограмитѣ.
- А това бѣше трудно за реализация.
- Как да е. Макар езикът Algol-60 да не се използваше за реално програмиране, синтаксисът му е повлиял на много други компютърни езици (PL/I, Pascal, C, Java, JavaScript, ..).
- Написах програма на Algol-60 за намиране на реалнитѣ корени на полином с реални коефициенти.
- Учителя̌т ни по математика я̨ прати в нѣ̋какво списание и май я̨ публикуваха̨.
- Но тогава тя не бѣше тествана.
- (.. скрий ги срѣдношколскитѣ ми спомени ..) (.. скрий го прѣдговорът на втората бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- Завършил съм гимназия (11-ти клас) прѣз 1972 със специалност "изчислител-кодировчик".
- ►► Спомен от около 1980 (.. покажи ..)
-
▼▼
Спомен от около 1980
(.. скрий ..)
- Когато прѣз 1979 постѫпих на работа, по едно врѣме получих неограничен достѫп до компютър ЕС-1020 (равностоен с младши модел на IBM/360).
- Рѣших да не стоя̨ без работа, а да изтествам алгоритъмът на програмата за намирането на реалнитѣ корени на полином с реални коефициенти, която бѣ̋х написал като ученик в 11-ти клас на езикът Algol-60.
- Алгоритъмът го помнѣх.
- Написах програмата на езикът PL/I.
- Наложи се да симулирам рекурсията.
- Да, програмата работѣше.
- Но тестването ӥ бѣше повърхностно.
- Нѣ̋мах врѣме за повече.
- (.. скрий го споменът ми от около 1980 ..) (.. скрий го прѣдговорът на втората бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ►► Като пенсионер се връщам към споменитѣ си отпрѣди десетилѣтия (.. покажи ..)
-
▼▼
Като пенсионер се връщам към споменитѣ си отпрѣди десетилѣтия
(.. скрий ..)
- Дал ми сега Господ много врѣме.
- Мога̨ да се върна̨ към задачата за намирането на реалнитѣ корени на полином с реални коефициенти.
- Имам врѣме за обстойно тестване.
- Имам врѣме да разработя̨ и срѣда̀ за тестване.
- Технологиитѣ много напрѣдна̨ха̨.
- Мога̨ да пиша̨ на език като JavaScript и "програмата да се публикува за всенародно тестване".
- Не си поставям за цѣл да гоня̨ най-мощното и най-напрѣдничавото.
- Има вѣроятно срѣдства за чертане на графики, което би могло добрѣ да илюстрира бесѣдата.
- Но все пак, софту̌ерът, който ползвам, трѣ̋бва да ми е лесно достѫпен, да го има и на моето лаптопче, и на почти всѣ̋ко друго компютърче - лаптопче, таблетче или смартфонче.
- Като пенсионер нѣ̋мам програмистки достѫп до сървър.
- Затова - JavaScript.
- (.. скрий го пенсионерското ми ежедневие ..) (.. скрий го прѣдговорът на втората бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ◄►
Намирането на реалнитѣ корени на полином с реални коефициенти -
- това е задачата.
- ►► Задачата е математическа и алгоритъмът се основава на математиката (.. покажи ..)
-
▼▼
Задачата е математическа и алгоритъмът се основава на математиката
(.. скрий ..)
- Нѣ̋ма да изнасям урок по математика.
- Нищо нѣ̋ма и да доказвам тука.
- Софту̌ер се тества, не се доказва.
- Но нѣ̋кои нѣща - основанията за алгоритъмът - трѣ̋бва да се напиша̨т.
- Нека аргументът на полиномът, както обикновено, да означаваме с буквата x.
- Ако x0 е корен на полиномът (на многочлѣнът), тогава за стойност на аргументът x0
стойността на полиномът е нула (0).
Това е дефиниция на корен на полином. - Ако x0 е корен на полиномът (на многочлѣнът), тогава биномът (двучлѣнът) (x - x0) е дѣлител на полиномът.
- Коренът на полиномът си има своята кратност.
- Ако x0 е двукратен корен на полиномът, тогава (x - x0)2 е негов дѣлител.
- Ако x0 е трикратен корен на полиномът, тогава (x - x0)3 е негов дѣлител.
- Без ограничение на общността можем да считаме, че старшия̌т коефициент на полиномът е положителен.
- Ако е отрицателен, ще го умножим полиномът по -1 и ще получим полином с положителен старши коефициент и със сѫщитѣ корени.
- Полиномът е гладка непрѣкѫсна̨та функция.
- Щом старшия̌т коефициент на полиномът е положителен, то той клони към +∞, когато аргументът клони към +∞.
- Ако при нѣ̋каква стойност на аргументът x1 стойността на полиномът е отрицателна, то нѣ̋къде в интервалът от x1 до +∞ графиката му ще прѣсѣче абсцисната ос, тоест нѣ̋къде в интервалът от x1 до +∞ сѫществува поне един корен на полиномът.
- Щом старшия̌т коефициент на полиномът е положителен, когато аргументът клони към −∞,
полиномитѣ от нечетна степен клоня̨т към −∞, а
полиномитѣ от четна степен - към +∞.
- Ако при нѣ̋каква стойност на аргументът x1 стойността на полином от четна степен е отрицателна, то нѣ̋къде в интервалът от −∞ до x1 сѫществува поне един корен.
- Ако при нѣ̋каква стойност на аргументът x1 стойността на полином от нечетна степен е положителна, то нѣ̋къде в интервалът от −∞ до x1 сѫществува поне един корен.
- Ясно е, че полиномът се разглеђа като функция на аргументът си.
- И като функция той има производна.
- Производната на полином е пак полином, но с една степен по-ниска.
- Ако x0 е двукратен корен на полиномът, тогава x0 е корен и на производната.
- Ако x0 е трикратен корен на полиномът, тогава x0 е корен и на производната и на нейната производна (тоест на първата и на втората производна).
- Полиномът е гладка непрѣкѫсна̨та функция.
- Ако x0 е корен на производната, тогава при тази стойност на аргументът x0 самия̌т полином има или локален минимум, или локален максимум, или инфлексна точка.
- Ако x1 е най-малкия̌т корен на производната, тогава в отворения̌т интервал от −∞ до x1 сѫществува най-много един корен на полиномът.
- Ако x2 е най-голѣмия̌т корен на производната, тогава в отворения̌т интервал от x2 до +∞ сѫществува най-много един корен на полиномът.
- Ако x1 и x2 сѫ два послѣдователни корени на производната, тогава в отворения̌т интервал от x1 до x2 сѫществува най-много един корен на полиномът.
- (.. скрий ги математическитѣ основи на алгоритъмът ..) (.. скрий го прѣдговорът на втората бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ►► Самия̌т алгоритъм (.. покажи ..)
-
▼▼
Самия̌т алгоритъм е рекурсивен.
(.. скрий ..)
- Реалнитѣ корени на полиномът се намират, слѣд като сме намѣрили реалнитѣ корени на производната му.
- Производната на един полином пак е полином, но от по-ниска степен.
- Коренът на полином от първа степен се намира елементарно.
- Във всѣки един от интервалитѣ, опрѣдѣлени от коренитѣ на производната, може да има най-много един корен.
- Дали има или нѣ̋ма - това се опрѣдѣля от стойноститѣ на полиномът в краищата на интервалът.
- Ако бѫде опрѣдѣлено, че в интервалът има корен, интервалът се дѣли на два по-малки интервала, и се опрѣдѣля в кой от тѣ̋х е коренът.
- Ако интервалът, за който знаем, че съдържа корен, стане достатъчно малък, това значи, че сме го намѣрили коренът.
- Колко малък да стане интервалът?
Каквато точност на резултатът ни е нужна. - (.. скрий го алгоритъмът ..) (.. скрий го прѣдговорът на втората бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ►► Аналогичната задача в полето на комплекснитѣ числа (.. покажи ..)
-
▼▼
Аналогичната задача в полето на комплекснитѣ числа
(.. скрий ..)
- За обобщението в полето на комплекснитѣ числа може да се докаже слѣдното:
- Един полином от n-та степен с коефициенти от полето на комплекснитѣ числа има точно n корена в полето на комплекснитѣ числа, като всѣки корен се брои според кратността си.
- Както и при реалнитѣ числа,
- ако комплексното число x0 е корен на полиномът (на многочлѣнът), тогава биномът (двучлѣнът) (x - x0) е дѣлител на полиномът.
- ако комплексното число x0 е двукратен корен на полиномът, тогава (x - x0)2 е дѣлител на полиномът.
- Не съм се занимавал със задачата за намирането на коренитѣ на полином в полето на комплекснитѣ числа.
- И тази бесѣда нѣ̋ма нищо общо с комплекснитѣ числа.
- От теорията на комплекснитѣ числа се ползва само резултатът, че коренитѣ на полином от n-та степен сѫ точно n на брой.
- Ако се ограничим до полето на реалнитѣ числа, както правя̨ в тази бесѣда, то твърдението се изказва така:
- Един полином от n-та степен с реални коефициенти има най-много n реални корена, като всѣки корен се брои според кратността си.
- (.. скрий ги комплекснитѣ числа ..) (.. скрий го прѣдговорът на втората бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- За обобщението в полето на комплекснитѣ числа може да се докаже слѣдното:
- ◄► В бесѣдата сѫ включени и двѣ отклонения от темата.
- ◄► (.. скрий го прѣдговорът на втората бесѣда ..) (.. свий го ..) (.. разгъни го ..) (.. скрий я̨ втората бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ►► Полиноми с реални коефициенти (.. покажи го въведението за полиномитѣ ..) (.. покажи го разгъна̨то ..)
-
▼▼
Полиноми с реални коефициенти
(.. скрий го въведението за полиномитѣ ..)
(.. свий го ..)
(.. разгъни го ..)
- ◄► В този раздѣл се демонстрира и тества
въвеђането на полином.
- Този раздѣл е стѫпка към крайната цѣл - детайлно тестване на програмата за намиране на реалнитѣ корени на полином с реални коефициенти.
- ►► Що е то полином (.. покажи ..)
-
▼▼
Що е то полином
(.. скрий ..)
- Този подраздѣл нѣ̋ма да бѫде урок по математика, нито урок по алгебра.
- Цѣлта ми е само да се уточня̨т понятията и терминитѣ.
- Ако не помните от срѣдното училище какво е това полином, наричано още многочлѣн, откажѣте се.
- Ако не сте учили за комплексни числа, то за Вас всички числа сѫ реални и понятието полином с реални коефициенти означава просто полином.
- Полиномът е функция с един аргумент.
- Аргументът се означава с латинска буква, обикновено буквата x.
- В математическата литература е прието аргументитѣ да се означават с нѣ̋коя от послѣднитѣ букви на латинската азбука, а първитѣ букви се използват за коефициентитѣ, ако тѣ сѫщо сѫ промѣнливи.
- В тази бесѣда нѣ̋ма да става дума за полиноми с промѣнливи коефициенти.
- Един полином, наричан още многочлѣн, прѣдставлява сума (сбор) от едночлѣни.
- А пък един едночлѣн прѣдставлява
аргументът на нѣ̋каква степен, умножен по коефициент.
- Коефициентът е число, в случая̌т реално число.
- Степента е цѣ̋ло неотрицателно число.
- Ако тя е нула, едночлѣнът се нарича свободен члѣн.
- Едночлѣнитѣ (члѣноветѣ на многочлѣнът) с нулеви коефициенти обикновено не се пиша̨т.
- Но присѫтстват при избраното вѫтрешно прѣдставяне в компютърът.
- При прѣдставянето на полиномът (многочлѣнът), члѣноветѣ му (едночлѣнитѣ) обикновено се подређат по намаляване на степента си.
- Едночлѣнитѣ от една и сѫща степен се събират е едни члѣн.
- Свободния̌т члѣн - този с аргумент на нулева степен - е послѣден.
- Първия̌т члѣн с ненулев коефициент - този с най-високата степен на аргументът - е старши члѣн.
- Коефициентът му е старши коефициент на полиномът (на многочлѣнът).
- Степента му става степен на полиномът.
- (.. скрий що е то полином ..) (.. скрий го въведението за полиномитѣ ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
-
Буква за аргументът: - ►► Как да въвеђаме полином (.. покажи ги правилата ..)
-
▼▼
Как да въвеђаме полином
(.. скрий ги правилата ..)
- По-горѣ в този раздѣл, при въвеђането на полином с реални коефициенти, в сила сѫ слѣднитѣ правила и свободи:
- Шпации (интервали, space characters) сѫ допустими навсѣ̋къдѣ, освѣн вѫтрѣ в числата и међу двѣтѣ звѣздички ** на знакът за степенуване.
- Полиномът (многочлѣнът) се въвеђа като сума от едночлѣни.
- Може и да е съставен само от един члѣн.
- Не се изисква подредба на съставящитѣ едночлѣни по степен.
Програмата ще ги подреди. - Разрѣшава се въвеђане на нѣ̋колко едночлѣна от една и сѫща степен.
Програмата ще ги обедини, слѣд като сумира коефициентитѣ им. - Едночлѣнът започва с коефициентът си.
Коефициентът може да се пропусне, ако е равен на единица. - Слѣд коефициентът на едночлѣнът, се въвеђа буквата за аргументът.
- Тя може да се пропусне, ако степента на едночлѣнът е нула (т.е. ако това е свободен члѣн).
- Међу коефициентът и аргументът, ако и двѣтѣ присѫтстват, може да се сложи звѣздичка * като знак за умножение.
- Но звѣздичката може да се пропусне.
- Слѣд буквата за аргументът като цѣ̋ло число се пише степента на едночлѣнът.
- Степента може да се пропусне, ако е единица.
- Међу буквата за аргументът и степента, ако и двѣтѣ присѫтстват,
мога̨т да се сложа̨т двѣ звѣздички ** като знак за степенуване.
Но знакът за степенуване може да се изпусне.
- Примѣри за едночлѣни от нулева степен:
5*x**0 1024*x**0 3.14*x**0 2.56*x**0 -1*x**0 -100*x**0 5x**0 1024x**0 3.14x**0 2.56x**0 -1x**0 -100x**0 5x**0 1024x**0 3.14x**0 2.56x**0 -x**0 -100x**0 5*x0 1024*x0 3.14*x0 2.56*x0 -1*x0 -100*x0 5x0 1024x0 3.14x0 2.56x0 -1x0 -100x0 5x0 1024x0 3.14x0 2.56x0 -x0 -100x0 5 1024 3.14 2.56 -1 -100 - Примѣри за едночлѣни от първа степен:
1*x**1 1024*x**1 3.14*x**1 2.56*x**1 -1*x**1 -100*x**1 1x**1 1024x**1 3.14x**1 2.56x**1 -1x**1 -100x**1 x**1 1024x**1 3.14x**1 2.56x**1 -x**1 -100x**1 1*x1 1024*x1 3.14*x1 2.56*x1 -1*x1 -100*x1 1x1 1024x1 3.14x1 2.56x1 -1x1 -100x1 x1 1024x1 3.14x1 2.56x1 -x1 -100x1 1*x 1024*x 3.14*x 2.56*x -1*x -100*x 1x 1024x 3.14x 2.56x -1x -100x x 1024x 3.14x 2.56x -x -100x - Међу едночлѣнитѣ, съставящи въвеђания̌т полином, се слага само един знак + (плюс) или - (минус).
- Прѣд първия̌т едночлѣн може да се сложи знак - (минус).
- Примѣр:
1*x**2 - 2*x**1 - 3*x**1 + 6*x**0 -2*x**3 + 3*x**2 - 1*x**1 + 7 1*x**2 - 5*x**1 + 6*x**0 -2x3 + 3x2 - x + 7 x2 - 5x + 6 2x3 - 3x2 + x - 7 - Забѣлѣжѣте, че за цѣлитѣ на основната задача програмата ще осигури положителен старши коефициент на полиномът.
- Ако при въвеђането той е бил отрицателен, програмата ще умножи всички коефициенти по -1.
- Ако бѫде въведен полином от втора или от по-висока степен, ще се появи бутон
.
Слѣдващия̌т раздѣл е за умножението на полиноми.
Бутонът ще Ви прати там. - Страничен ефект. Жълтото поле горѣ - там, къдѣто се въвеђа полиномът,
може да се използва като прост калкулатор.
- Там могат да се събират и извађат числа.
- Програмата възприема всѣ̋ко въведено число като коефициент на едночлѣн от нулева степен и сумира тѣзи коефициенти.
- (.. скрий ги правилата ..) (.. скрий го въведението за полиномитѣ ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
-
►►
.. Покажи код на JavaScript ..
-
▼▼
Код на JavaScript
(.. скрий го кодът ..)
- Класът RealPolynom е разширение на Array.
Обект от класът RealPolynom е прѣди всичко Array, масив от числа.- Числата от масивът сѫ коефициентитѣ на полиномът.
- Броя̌т им е с единица по-голѣ̋м от степента на полиномът.
- Елементът [0] е старшия̌т коефициент - коефициентът прѣд най-високата степен.
- Послѣдния̌т елемент е коефициентът прѣд нулевата степен (свободния̌т члѣн)
- Всички нулеви коефициенти присѫтстват в масивът на мѣстата си, макар обикновено да не се показват.
-
class RealPolynom extends Array { argLetter = "x"; toString(raw) { var n = this.length; if(!n) { return ""; } if((n == 1) && !this[0]) { return "0"; } var t = ""; for(let j = 0; j < this.length; j++) { n--; if ( ! this[j] ) { continue; } if ( ( this[j] > 0 ) && j ) { t += "+" } t += this[j].toPrecision(10)*1; //.toString(); if (raw) { if ( n > 0 ) { t += this.argLetter; } if ( n > 1 ) { t += n; } } else { if ( n > 0 ) { t += "*<"+"b>"; t += this.argLetter; t += "<"+"/b>"; } if ( n > 1 ) { t += "<"+"sup>" t += n; t += "<"+"/sup>" } } } return t; } // toString doitRegular(positive) // Ensure non-zero/positive first coefficient { if (this.length == 1) { if(typeof(this[0]) != "number") { this.splice(0); } return; } if (this.length == 0) { return; } var m = 1; var t = 0; for(let j = 0; j < this.length; j++ ) { if(typeof(this[j]) != "number") { continue; } if ( t > 0 ) { } else if ( this[j] == 0 ) { continue; } else if(( this[j] < 0 ) && ((typeof(positive) != "boolean") || positive)) { m = -1; } else { } this[t] = this[j] * m; t++; } if ( t > 0 ) { this.splice(t); } } // doitRegular getDegree() // Returns -1 if not a regular RealPolynom { for(let j = 0; j < this.length; j++) { if(isNaN(this[j]) || (typeof(this[j]) != "number")) { return -1; } } if (this[0] == 0) { return -1; } return this.length - 1; } // getDegree }
- Методът toString() показва полиномът в обичаен вид.
Члѣноветѣ с нулев коефициент се изпускат.
Аргументът в нулева степен не се показва.
За да може кодът на този метод да се покаже тука, налага се html-таговетѣ да се декомпозират. - Методът getDegree() провѣрява дали всички елементи от масивът сѫ числа.
Ако не, връща -1.
Ако старшия̌т коефициент this[0] е нула, пак връща -1 като резултат.
Иначе дава степента на полиномът - броя̌т на числата без 1. - Методът doitRegular() осигурява старшия̌т коефициент да е положително число.
За тази цѣл може да бѫде намален броя̌т на числата.
За тази цѣл всички коефициенти може да бѫда̨т умножени по -1. - Програмитѣ, които приемат входът от екранът и прѣобразуват въведеното в обект от клас RealPolynom, не се показват.
- (.. скрий го кодът на JavaScript ..) (.. скрий го въведението за полиномитѣ ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- Класът RealPolynom е разширение на Array.
- ◄► Този раздѣл от бесѣдата може да се пропусне.
- Той е просто послѣдователна стѫпка към крайната цѣл.
- Всичко от този раздѣл се повтаря в слѣдващитѣ раздѣли.
- Освѣн калкулаторът за събиране и извађане - той работи само тука.
- ◄► (.. скрий го въведението за полиномитѣ ..) (.. свий го ..) (.. разгъни го ..) (.. скрий я̨ втората бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ◄► В този раздѣл се демонстрира и тества
въвеђането на полином.
- ►► Полиноми-множители (.. покажи го умножението на полиноми ..) (.. покажи го разгъна̨то ..)
-
▼▼
Полиноми-множители
(.. скрий го умножението на полиноми ..)
(.. свий го ..)
(.. разгъни го ..)
- ◄► Този раздѣл от бесѣдата може да се пропусне.
- Той е просто послѣдователна стѫпка към крайната цѣл.
- Всичко от този раздѣл се повтаря в слѣдващия̌т раздѣл.
- ►► Защо в темата се намѣсва умножение на полиноми? (.. покажи ..)
-
▼▼
Защо в темата се намѣсва умножение на полиноми?
(.. скрий ..)
- Този раздѣл е стѫпка към крайната цѣл - детайлно тестване на програмата за намиране на реалнитѣ корени на полином с реални коефициенти.
- Подготвяме полином, който да дадем на тази програма, че тя да му намѣри коренитѣ.
- Или трѣ̋бва прѣдварително да знаем кои сѫ тѫрсенитѣ корени, ..
- или за всѣки намѣрен от програмата корен трѣ̋бва да можем да провѣрим дали наистина е корен на полиномът.
- Намирането на реалнитѣ коренитѣ на зададен полином с реални коефициенти е в слѣдващия̌т раздѣл.
- В по-слѣдващия̌т раздѣл ще може да се провѣри дали намѣренитѣ корени наистина сѫ корени на полиномът.
- А в настоящия̌т раздѣл се показва как да подготвим полином за тестване, такъв че прѣдварително да му знаем коренитѣ.
- Нека буквата за аргументът да е x.
- Полиномът x-5 има еднократен реален корен 5.
- Полиномът x+2 има еднократен реален корен -2.
- Полиномът x има еднократен реален корен 0.
- Ако умножим тритѣ полинома (x-5)*(x+2)*x, произведението им x3-3x2-10x, което е полином от 3-та степен,ще има точно три реални корена 5, 0 и -2.
- Полиномът x има еднократен реален корен 0.
- Полиномът x2 има двукратен корен 0.
- Полиномът x3, който е полином от 3-та степен, има трикратен корен 0.
- Полиномът x-5 има еднократен реален корен 5.
- Произведението на послѣднитѣ два полинома x3*(x-5) е полином от 4-та степен x4-5x3, които има четири корена: веднѫж 5 и три пѫти 0.
- Полиномът от 2-ра степен x2+x+1 нѣ̋ма реални корени, понеже стойноститѣ му сѫ строго положителни.
- Това се виђа, ако се прѣдстави във видът (x+0.5)2+0.75.
- Разбира се, ако свободния̌т члѣн е по-голѣ̋м от 0.25, напримѣр 2, то полиномът x2+x+2 пак нѣ̋ма реални корени.
- Ако за множител се вземе полином от 2-ра или 4-та степен без реални корени, то липсата на реални корени трѣ̋бва да бѫде отчетена в резултатът.
- Един полином примѣрно от 6-та степен има най-много 6 реални корени.
Може да нѣ̋ма и нито един. - Един полином примѣрно от 7-ма степен има най-много 7 реални корени.
Има поне един. Полином от нечетна степен има поне един реален корен.
- Та така: в този раздѣл се демонстрира умножението на полиноми.
- Това ще се ползва, за да се получи полином, реалнитѣ корени на който сѫ извѣстни.
- Функционалността от този раздѣл е повторена в слѣдващия̌т раздѣл.
- Затова този раздѣл може да се пропусне.
- Все пак, получения̌т в този раздѣл полином може да бѫде прѣнесен в слѣдващия̌т раздѣл, за да се тества.
- (.. скрий я̨ тукашната цѣл на умножението на полиноми ..) (.. скрий го умножението на полиноми ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ◄► Ако въведете полином от нулева степен,
- тоест число - константа,
- програмата ще го прѣобразува във бином (полином от първа степен),
- коренът на който е въведеното число.
- Напримѣр, ако въведете 5, все едно че сте въвели x-5.
- Ако буквата за аргументът е x, разбира се.
-
Буква за аргументът: -
►►
.. Покажи кодът на JavaScript ..
-
▼▼
Код на JavaScript
(.. скрий го кодът ..)
-
class RealPolynom extends Array { doitRegular(positive) // Ensure non-zero/positive first coefficient { if (this.length == 1) { if(typeof(this[0]) != "number") { this.splice(0); } return; } if (this.length == 0) { return; } var m = 1; var t = 0; for(let j = 0; j < this.length; j++ ) { if(typeof(this[j]) != "number") { continue; } if ( t > 0 ) { } else if ( this[j] == 0 ) { continue; } else if(( this[j] < 0 ) && ((typeof(positive) != "boolean") || positive)) { m = -1; } else { } this[t] = this[j] * m; t++; } if ( t > 0 ) { this.splice(t); } } // doitRegular getDegree() // Returns -1 if not a regular RealPolynom { for(let j = 0; j < this.length; j++) { if(isNaN(this[j]) || (typeof(this[j]) != "number")) { return -1; } } if (this[0] == 0) { return -1; } return this.length - 1; } // getDegree
multiplyBy(a) { if (!(a instanceof RealPolynom)) { return; } this.doitRegular(); const gth = this.getDegree(); if ( gth < 0 ) { return; } a.doitRegular(); const ga = a.getDegree(); if ( ga < 0 ) { this.splice(0); return; } var th = new RealPolynom; for ( let i = 0; i < this.length; i++ ) { th[i] = this[i]; } for ( let i = 0; i <= (ga+gth); i++ ) { this[i] = 0; } for ( let i = 0; i <= gth; i++ ) { for(let j = 0; j <= ga; j++) { this[i+j] += (th[i]*a[j]); } } } // multiplyBy
} - Програмитѣ, които приемат входът от екранът и извеђат резултатът на екранът, не се показват.
- (.. скрий го кодът на JavaScript ..) (.. скрий го умножението на полиноми ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
-
- ◄► (.. скрий го умножението на полиноми ..) (.. свий го ..) (.. разгъни го ..) (.. скрий я̨ втората бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ◄► Този раздѣл от бесѣдата може да се пропусне.
- ►► Реалнитѣ корени на полином с реални коефициенти (.. покажи как се намират ..) (.. покажи разгъна̨то ..)
-
▼▼
Реалнитѣ корени на полином с реални коефициенти
(.. скрий ги ..)
(.. свий ги ..)
(.. разгъни ги ..)
- ◄► Това е основния̌т раздѣл на бесѣдата.
- Тука се демонстрира и тества програмата за намиране на реалнитѣ корени на полином с реални коефициенти.
- ►► За цѣлитѣ на тестването полиномът може да се въвеђа по множители (.. покажи ..)
-
▼▼
За цѣлитѣ на тестването полиномът може да се въвеђа по множители
(.. скрий ..)
- Подготвяме полином, който да дадем на тази програма, че тя да му намѣри коренитѣ.
- Или трѣ̋бва прѣдварително да знаем кои сѫ тѫрсенитѣ корени, ..
- или за всѣки намѣрен от програмата корен трѣ̋бва да можем да провѣрим дали наистина е корен на полиномът.
- Намирането на реалнитѣ коренитѣ на зададен полином с реални коефициенти е в този раздѣл.
- В слѣдващия̌т раздѣл ще може да се провѣри дали намѣрен корен наистина е корен на полиномът.
- За цѣлта полиномът и прѣсмѣтна̨титѣ в този раздѣл негови корени мога̨т да бѫда̨т прѣнесени в слѣдващия̌т раздѣл за провѣрка.
- А в настоящия̌т раздѣл да видим как да подготвим полином за тестване, такъв че прѣдварително да му знаем коренитѣ.
- Нека буквата за аргументът да е x.
- Полиномът x-5 има еднократен реален корен 5.
- Полиномът x+2 има еднократен реален корен -2.
- Полиномът x има еднократен реален корен 0.
- Ако умножим тритѣ полинома (x-5)*(x+2)*x, произведението им x3-3x2-10x, което е полином от 3-та степен,ще има точно три реални корена 5, 0 и -2.
- Полиномът x има еднократен реален корен 0.
- Полиномът x2 има двукратен корен 0.
- Полиномът x3, който е полином от 3-та степен, има трикратен корен 0.
- Полиномът x-5 има еднократен реален корен 5.
- Произведението на послѣднитѣ два полинома x3*(x-5) е полином от 4-та степен x4-5x3, които има четири корена: веднѫж 5 и три пѫти 0.
- Полиномът от 2-ра степен x2+x+1 нѣ̋ма реални корени, понеже стойноститѣ му сѫ строго положителни.
- Това се виђа, ако се прѣдстави във видът (x+0.5)2+0.75.
- Разбира се, ако свободния̌т члѣн е по-голѣ̋м от 0.25, напримѣр 2, то полиномът x2+x+2 пак нѣ̋ма реални корени.
- Ако за множител се вземе полином от 2-ра или 4-та степен без реални корени, то липсата на реални корени трѣ̋бва да бѫде отчетена в резултатът.
- Един полином примѣрно от 6-та степен има най-много 6 реални корени.
Може да нѣ̋ма и нито един. - Един полином примѣрно от 7-ма степен има най-много 7 реални корени.
Има поне един. Полином от нечетна степен има поне един реален корен.
- (.. скрий го въвеђането на полиномът по множители ..) (.. скрий ги коренитѣ на полином ..) (.. свий ги ..) (.. разгъни ги ..) .. към началото ..
- ◄► Разбира се, можете да въведетѣ цѣлия̌т полином като един множител.
- ◄► Ако въведете полином от нулева степен,
- тоест число - константа,
- програмата ще го прѣобразува във бином (полином от първа степен),
- коренът на който е въведеното число.
- Напримѣр, ако въведете 5, все едно че сте въвели x-5.
- Ако буквата за аргументът е x, разбира се.
-
Намиране на реалнитѣ корени на полином с реални коефициенти Epsylon: Буква за аргументът: -
►►
.. Покажи го кодът на програмата ..
-
▼▼
Кодът на програмата
(.. скрий го кодът ..)
- Главната програма е getRoots().
- Тя намира реалнитѣ корени на полиномът и ги връща в Array (масив), подредени по голѣмина.
- Ако полиномът нѣ̋ма реални корени, резултатът е празен масив.
- Алгоритъмът е рекурсивен. JavaScript поддържа рекурсия, както и повечето съврѣменни компютърни езици.
- Ако става дума за полином от първа степен, програмата веднага прѣсмѣ̋та коренът и завършва работата си.
- Иначе с помощта на методът getDerivative() се построява производната на полиномът.
- Производната е сѫщо полином, степента на който е по-ниска с единица.
- За тази производна рекурсивно се извиква главната програма е getRoots(),
- за да се намѣря̨т реалнитѣ корени на производната.
- Продължаваме алгоритъмът при условие, че реалнитѣ корени на производната сѫ намѣрени.
- Ако производната нѣ̋ма реални корени, то този полином има един реален корен,
- за намирането на който се извиква #getSingleRoot( -∞, +∞ ).
- Методът #getSingleRoot() намира единствен реален корен в зададен интервал, ако такъв корен има.
- Първо, този метод #getSingleRoot() се извиква за интервалът от -∞ до първия̌т реален корен на производната.
- Слѣд това методът #getSingleRoot() се извиква за всѣки интервал међу два послѣдователни реални корени на производната.
- И послѣдно, методът #getSingleRoot() се извиква за интервалът от послѣдния̌т реален корен на производната до +∞.
- Методът getDerivative() построява производната като обект от класът RealPolynomEquation, така че към този обект да може да се приложи getRoots().
- На методът #getSingleRoot() трѣ̋бва да му бѫде зададен интервал, за който да е ясно,
че в него има най-много един реален корен на полиномът.
- Ако в интервалът има реален корен, методът #getSingleRoot() го намира и го връща като число.
- Ако в интервалът нѣ̋ма реален корен, резултатът е NaN (Not a Number).
- Mетодът #getSingleRoot() разглеђа четири случая,
които тука сѫ изброени в ред обратен на този в кодът:
- Краен интервал међу двѣ числа.
- Интервал от -∞ до число.
- Интервал от число до +∞.
- Интервалът от -∞ до +∞.
- Методът #getSingleRoot() се извиква рекурсивно за подинтервали.
- Методът getValue(), който се използва тука, се демонстрира отдѣлно в слѣдващия̌т раздѣл.
- Слѣдва самия̌т код.
-
class RealPolynomEquation extends RealPolynom { static infinityPlus = "+\u221e"; static infinityMinus = "-\u221e"; static epsylon = 0.0001; level = 0; roots = null; derivative = null; parentEq = null;
getDerivative() { this.derivative = new RealPolynomEquation; this.derivative.parentEq = this; this.derivative.level = this.level; this.derivative.level++; var n = this.length; for(let j = 0; j < (this.length-1); j++ ) { n--; this.derivative[j] = this[j] * n; } return this.derivative; } // getDerivative
#isAlmostZero(z) { const ez = RealPolynomEquation.epsylon/2; if (ez < z) { return false; } if((-ez) < z) { return true; } return false; } // #isAlmostZero
#getSingleRoot(a,b) { console.log(this.level+":#getSingleRoot("+a+","+b+") called: "+this[0]+".."+(this.length-1)+".."+this[this.length-1]); if(isNaN(a) && isNaN(b)) { if(this[this.length-1] > 0) { return this.#getSingleRoot(RealPolynomEquation.infinityMinus,0); } if(this[this.length-1] < 0) { return this.#getSingleRoot(0,RealPolynomEquation.infinityPlus); } return 0; } var s = 1; // the step s /= this[0]; if (s < 0.001) { s = 0.001; } else if (s > 1000) { s = 1000; } else { } var c; if(isNaN(b)) { const vba = this.getValue(a); if (this.#isAlmostZero(vba)) { return a; } if ( vba > 0 ) { return NaN; } c = a; var vbc; while(true) { c += s; vbc = this.getValue(c); if(this.#isAlmostZero(vbc)) { return c; } if(vbc > 0) { return this.#getSingleRoot(a,c); } continue; } } const vb = this.getValue(b); if ( this.#isAlmostZero(vb) ) { return b; } if(!isNaN(a)) { } else if(this.length%2==0) // va is negative { if ( vb < 0 ) { return NaN; } c = b; var vac; while(true) { c -= s; vac = this.getValue(c); if(this.#isAlmostZero(vac)) { return c; } if(vac < 0) { return this.#getSingleRoot(c,b); } continue; } } else // va is positive { if ( vb > 0 ) { return NaN; } c = b; var vac; while(true) { c -= s; vac = this.getValue(c); if(this.#isAlmostZero(vac)) { return c; } if(vac > 0) { return this.#getSingleRoot(c,b); } continue; } } const va = this.getValue(a); if ( this.#isAlmostZero(va) ) { return a; } if(((va > 0) && (vb > 0)) || ((va < 0) && (vb < 0))) { return NaN; } const m = (a + b)/2; if(((a < b) && ((b - a) < RealPolynomEquation.epsylon)) || ((a > b) && ((a - b) < RealPolynomEquation.epsylon))) { return m; } const vm = this.getValue(m); if ( this.#isAlmostZero(vm) ) { return m; } if(((vm > 0) && (va < 0)) || ((vm < 0) && (va > 0))) { return this.#getSingleRoot(a,m); } return this.#getSingleRoot(m,b); } // #getSingleRootgetRoots() { this.roots = null; const d = this.getDegree(); if ( d < 1 ) { console.log(this.level+":getRoots() exits: "+this.roots.toString()); return this.roots; } console.log(this.level+":getRoots() called: "+this.toString(true)); this.roots = new Array; if ( d == 1 ) { this.roots[0] = -this[1]; this.roots[0] /= this[0]; console.log(this.level+":getRoots() exits: "+this.roots.toString()); return this.roots; } this.getDerivative(); console.log(this.level+":getRoots() is about to do a recursion: "+this.derivative.toString(true)); const dR = this.derivative.getRoots(); console.log(this.level+":getRoots() back from recursion: "+dR.toString()); var r; if ( dR.length == 0 ) { r = this.#getSingleRoot(RealPolynomEquation.infinityMinus,RealPolynomEquation.infinityPlus); if(!isNaN(r)) { this.roots[0] = r; } console.log(this.level+":getRoots() exits: "+this.roots.toString()); return this.roots; } r = this.#getSingleRoot(RealPolynomEquation.infinityMinus,dR[0]); if(!isNaN(r)) { this.roots[0] = r; } var j = this.roots.length; var i; for ( i = 1; i < dR.length; i++ ) { r = this.#getSingleRoot(dR[i-1],dR[i]); if(!isNaN(r)) { this.roots[j] = r; j++; } } r = this.#getSingleRoot(dR[dR.length-1],RealPolynomEquation.infinityPlus); if(!isNaN(r)) { this.roots[j] = r; } console.log(this.level+":getRoots() exits: "+this.roots.toString()); return this.roots; } // getRoots
} - Надѣ̋вам се на всички устройства резултатитѣ да сѫ поне сходни, ако не идентични.
- Прѣсмѣ̋танията се извършват не на web-server, а локално на Вашето устройство (смартфон, таблет, лаптоп, ..).
- Прѣсмѣ̋танията ги извършва интерпретаторът от JavaScript, който е вграден във Вашия̌т browser.
- Езикът JavaScript е стандартизиран.
- Интерпретаторът от JavaScript ползва стандартна аритметика с плаваща точка.
- Да, алгоритъмът ползва аритметика с плаваща точка.
- Това налага да се обръща внимание на закрѫглянията и приближенията.
- (.. скрий го кодът на програмата ..) (.. скрий ги коренитѣ на полином ..) (.. свий ги ..) (.. разгъни ги ..) .. към началото ..
- Главната програма е getRoots().
- ►► Точност на прѣсмѣ̋танията (.. покажи ..)
-
▼▼
Точност на прѣсмѣ̋танията
(.. скрий ..)
- Не съм се задѫлбочавал в точността на прѣсмѣ̋танията.
- Разчитам на стандартна аритметика с плаваща точка, каквато ползва стандартен интерпретатор от JavaScript.
- Не ползвам специални софту̌ерни библиотеки за математически изчисления.
- Програмата трѣ̋бва да може да работи на всѣ̋ко устройство.
- Все пак, въведен е параметър Epsylon със стойности 0.001, 0.0001, 0.00001 или 0.000001 по избор.
- Сигурно мога̨т да се намѣря̨т примѣри, при които тази програма грѣши.
- Моля̨ да бѫда̨ увѣдомяван, ако намѣрите такива примѣри.
- Аз ще прѣцѣня̨ дали си струва да се поправя програмата.
- (.. скрий я̨ точността на прѣсмѣ̋танията ..) (.. скрий ги коренитѣ на полином ..) (.. свий ги ..) (.. разгъни ги ..) .. към началото ..
- Не съм се задѫлбочавал в точността на прѣсмѣ̋танията.
- ◄► (.. скрий ги коренитѣ на полином ..) (.. свий ги ..) (.. разгъни ги ..) (.. скрий я̨ втората бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ◄► Това е основния̌т раздѣл на бесѣдата.
- ►► Прѣсмѣ̋тане на стойността на полиноми при зададена стойност на аргументът (.. покажи ..) (.. разгъна̨то ..)
-
▼▼
Прѣсмѣ̋тане на стойността на полиноми при зададена стойност на аргументът
(.. скрий ..)
(.. свий ..)
(.. разгъни ..)
- ◄► В този раздѣл именно това се прави:
- Компютърчето смѣ̋та стойността на зададен полином за зададена стойност на аргументът.
- И коефициентитѣ на полиномът, и стойността на аргументът, и получената стойност на полиномът сѫ реални числа.
- Непосрѣдствената цѣл е да може да се провѣри дали намѣрен в прѣдишния̌т раздѣл реален корен на полиномът наистина е корен.
- Непосрѣдствената цѣл е да може да се провѣри дали програмата от прѣдишния̌т раздѣл смѣ̋та вѣ̋рно.
- Ако дадено число наистина е корен на полиномът, то като се замѣсти аргументът с това число, стойността на полиномът трѣ̋бва да е нула.
- Това значи да е корен на полиномът.
- По-нататък, този раздѣл дава повод да се покаже как компютритѣ прѣсмѣ̋тат стойността на полином.
- Това е втората цѣл на бесѣдата, макар да е отклонение от основната цѣл.
- ◄► Първо задайте полиномът.
- Тука полиномът се въвеђа наведнѫж, а не по множители, както в прѣдишния̌т раздѣл.
- Но можете полиномът от прѣдишния̌т раздѣл заедно с намѣренитѣ корени да бѫда̨т прѣнесени в този раздѣл.
- Тука нѣ̋ма смисъл да въвеђате числа-константи.
Тѣ нѣ̋ма да бѫда̨т прѣобразувани в биноми.
- ◄► Послѣ задайте стойност на аргументът.
- Можете да изберете стойността на аргументът између числата, които в прѣдишния̌т раздѣл сѫ били намѣрени като корени на полиномът, ако сѫ били прѣнесени оттам тука.
- Можете и да въведете нѣ̋какво число за стойност на аргументът, слѣд което да натиснете бутонът (не този бутон тука, а оня по-долу при въведеното число).
-
Буква за аргументът: Въведи стойност на аргументът: Избери стойност на аргументът: - ►► Как да въвеђаме полином (.. покажи ги правилата ..)
-
▼▼
Как да въвеђаме полином
(.. скрий ги правилата ..)
- По-горѣ в този раздѣл, при въвеђането на полином с реални коефициенти, в сила сѫ слѣднитѣ правила и свободи:
- Шпации (интервали, space characters) сѫ допустими навсѣ̋къдѣ, освѣн вѫтрѣ в числата и међу двѣтѣ звѣздички ** на знакът за степенуване.
- Полиномът (многочлѣнът) се въвеђа като сума от едночлѣни.
- Може и да е съставен само от един члѣн.
- Не се изисква подредба на съставящитѣ едночлѣни по степен.
Програмата ще ги подреди. - Разрѣшава се въвеђане на нѣ̋колко едночлѣна от една и сѫща степен.
Програмата ще ги обедини, слѣд като сумира коефициентитѣ им. - Едночлѣнът започва с коефициентът си.
Коефициентът може да се пропусне, ако е равен на единица. - Слѣд коефициентът на едночлѣнът, се въвеђа буквата за аргументът.
- Тя може да се пропусне, ако степента на едночлѣнът е нула (т.е. ако това е свободен члѣн).
- Међу коефициентът и аргументът, ако и двѣтѣ присѫтстват, може да се сложи звѣздичка * като знак за умножение.
- Но звѣздичката може да се пропусне.
- Слѣд буквата за аргументът като цѣ̋ло число се пише степента на едночлѣнът.
- Степента може да се пропусне, ако е единица.
- Међу буквата за аргументът и степента, ако и двѣтѣ присѫтстват,
мога̨т да се сложа̨т двѣ звѣздички ** като знак за степенуване.
Но знакът за степенуване може да се изпусне.
- Примѣри за едночлѣни от нулева степен:
5*x**0 1024*x**0 3.14*x**0 2.56*x**0 -1*x**0 -100*x**0 5x**0 1024x**0 3.14x**0 2.56x**0 -1x**0 -100x**0 5x**0 1024x**0 3.14x**0 2.56x**0 -x**0 -100x**0 5*x0 1024*x0 3.14*x0 2.56*x0 -1*x0 -100*x0 5x0 1024x0 3.14x0 2.56x0 -1x0 -100x0 5x0 1024x0 3.14x0 2.56x0 -x0 -100x0 5 1024 3.14 2.56 -1 -100 - Примѣри за едночлѣни от първа степен:
1*x**1 1024*x**1 3.14*x**1 2.56*x**1 -1*x**1 -100*x**1 1x**1 1024x**1 3.14x**1 2.56x**1 -1x**1 -100x**1 x**1 1024x**1 3.14x**1 2.56x**1 -x**1 -100x**1 1*x1 1024*x1 3.14*x1 2.56*x1 -1*x1 -100*x1 1x1 1024x1 3.14x1 2.56x1 -1x1 -100x1 x1 1024x1 3.14x1 2.56x1 -x1 -100x1 1*x 1024*x 3.14*x 2.56*x -1*x -100*x 1x 1024x 3.14x 2.56x -1x -100x x 1024x 3.14x 2.56x -x -100x - Међу едночлѣнитѣ, съставящи въвеђания̌т полином, се слага само един знак + (плюс) или - (минус).
- Прѣд първия̌т едночлѣн може да се сложи знак - (минус).
- Примѣр:
1*x**2 - 2*x**1 - 3*x**1 + 6*x**0 -2*x**3 + 3*x**2 - 1*x**1 + 7 1*x**2 - 5*x**1 + 6*x**0 -2x3 + 3x2 - x + 7 x2 - 5x + 6 2x3 - 3x2 + x - 7 - В този раздѣл нѣ̋ма смисъл да се въвеђа полином от нулева степен, тоест константа.
- (.. скрий ги правилата ..) (.. скрий как се смѣ̋та полином ..) (.. свий ..) (.. разгъни ..) .. към началото ..
-
►►
.. Покажи коментар към кодът на JavaScript ..
class RealPolynom extends Array { getValue(x) { var v = 0; for(let j = 0; j < this.length; j++) { v *= x; v += this[j]; } return v; } // getValue }
-
▼▼
Кодът на JavaScript
(.. скрий го коментарът към кодът ..)
-
class RealPolynom extends Array { getValue(x) { var v = 0; for(let j = 0; j < this.length; j++) { v *= x; v += this[j]; } return v; } // getValue }
- Класът RealPolynom е разширение на Array.
Обект от класът RealPolynom е прѣди всичко Array, масив от числа.- Числата от масивът сѫ коефициентитѣ на полиномът.
- Броя̌т им е с единица по-голѣ̋м от степента на полиномът.
- Елементът [0] е старшия̌т коефициент - коефициентът прѣд най-високата степен.
- Послѣдния̌т елемент е коефициентът прѣд нулевата степен (свободния̌т члѣн)
- Всички нулеви коефициенти присѫтстват в масивът на мѣстата си, макар обикновено да не се показват.
- Тази програмка е на компютърния̌т език JavaScript.
- Тя би изглеђала по сѫщия̌т начин на Java, C, C++, C#, и по подобен начин на Алгол и PL/I.
- (.. скрий го коментарът към кодът на JavaScript ..) (.. скрий как се смѣ̋та полином ..) (.. свий ..) (.. разгъни ..) .. към началото ..
-
- ►► Бѣлѣжки по тукашния̌т алгоритъм (.. покажи ..)
-
▼▼
Бѣлѣжки по тукашния̌т алгоритъм
(.. скрий ..)
- Става дума за алгоритъмът за прѣсмѣ̋тане на стойността на полином за зададена стойност на аргументът.
- Съвѣт към кандидати за позиция на компютърен програмист.
- На интервюто за работа може да поискат от Вас да напишете малка програмка подобна на горѣ-показаната.
- Ако става дума за сѫщата задача и ако Вие кодирате нѣ̋какъв алгоритъм, при който се прѣсмѣ̋тат степенитѣ на аргументът, това може да основание да Ви отхвърля̨т.
- Слѣдва словесно описание на алгоритъмът за тѣзи, които не умѣя̨т да разчитат компютърен код.
- Коефициентитѣ на полиномът се наређат в масив по старшинство.
Пръв е старшия̌т коефициент, свободния̌т члѣн е послѣден. - Дори нѣ̋кой от коефициентитѣ да е нула - крѫгла нула, той заема мѣ̋стото си в масивът и алгоритъмът не може да го изпусне.
В частност, нулев свободен члѣн сѫщо заема мѣ̋стото си (послѣдното мѣ̋сто) в масивът. - Алгоритъмът започва с резултат 0 (нула).
- Алгоритъмът прѣминава послѣдователно прѣз всички коефициенти на полиномът, започвайки от старшия̌т и завършващи със свободния̌т члѣн.
- Поредния̌т коефициент се добавя към резултатът.
- Ако има слѣдващ коефициент, резултатът се умножава по зададената стойност на аргументът, прѣди да се прѣмине към слѣдващия̌т коефициент.
- Коефициентитѣ на полиномът се наређат в масив по старшинство.
- Примѣри.
- Полиномът e
1*x5 - 5*x4 + 6*x3 - 1*x2 + 5*x - 6
а стойността на аргументът x е 2 .
- Алгоритъмът слѣдва формулата:
(((((((((((0+1)*x)-5)*x)+6)*x)-1)*x)+5)*x)-6)
.
- Алгоритъмът слѣдва формулата:
- Полиномът e
1*x4 - 1
а стойността на аргументът x е 256 .
- Алгоритъмът слѣдва формулата:
(((((((((0+1)*x)+0)*x)+0)*x)+0)*x)-1)
.
- Алгоритъмът слѣдва формулата:
Аргумент Коефициенти Резултат 2 1 -5 6 -1 5 -6 0 1 1 2 2 -5 -3 2 -6 6 0 2 0 -1 -1 2 -2 5 3 2 6 -6 0 256 1 0 0 0 -1 0 1 1 256 256 0 256 256 65536 0 65536 256 16777216 0 16777216 256 4294967296 -1 4294967295 - Полиномът e
1*x5 - 5*x4 + 6*x3 - 1*x2 + 5*x - 6
а стойността на аргументът x е 2 .
- Числата сѫ в десетична позиционна бройна система.
Компютърът (в случая̌т интерпретаторът от JavaScript) така ги показва. - Послѣдното число 4294967295
- в 16-ичен запис е FFFFFFFF,
- в двоичен запис е 11111111111111111111111111111111 (32 цифри 1), а
- в 8-ичен запис е 37777777777.
- Това е прелюдия към слѣдващия̌т раздѣл, който е отклонение за позиционнитѣ бройни системи.
- (.. скрий ги бѣлѣжкитѣ по алгоритъмът ..) (.. скрий как се смѣ̋та полином ..) (.. свий ..) (.. разгъни ..) .. към началото ..
- ◄► (.. скрий как се смѣ̋та полином ..) (.. свий ..) (.. разгъни ..) (.. скрий я̨ втората бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ◄► В този раздѣл именно това се прави:
- ►► Отклонение_1: позиционни бройни системи (.. покажи го отклонението ..) (.. разгъна̨то ..)
-
▼▼
Отклонение_1: позиционни бройни системи
(.. скрий го отклонението ..)
(.. свий го ..)
(.. разгъни го ..)
- ►► В ежедневието се ползва десетична позиционна бройна система (.. покажи ..)
-
▼▼
В ежедневието се ползва десетична позиционна бройна система
(.. скрий ..)
- Десетичната позиционна бройна система е
в Европа отскоро: има-нѣ̋ма петстотин години.
- Сегашното младо поколѣние трудно може да си прѣдстави свѣтът без компютри и компютърчета. Старитѣ обаче помним онова врѣме.
- Но всички вече трудно можем да си прѣдставим какъв е бил свѣтът без десетичната позиционна бройна система.
- Толкова сме свикна̨ли с нея̨.
- В Западна Европа сѫ се ползвали римскитѣ цифри.
- Нѣ̋кога ги учѣхме в основното училище. Вѣроятно все още се уча̨т.
- Присѫтсваха̨ обикновено на табелитѣ на класнитѣ стаи: V а клас. Вѣроятно все още е така.
- Присѫтсваха̨ и в номерацията на партийни конгреси и на петилѣткитѣ.
- Сега, слава Богу, не пиша̨т "XLIX народно събрание" - само във wikipedia-та се мѫдри.
- Лично аз избѣ̋гвам употрѣбата на римскитѣ цифри и обикновено пиша̨ "49-тото народно събрание".
- У нас сѫ се ползвали
милетскитѣ цифри.
- До началото на 19-ти вѣк всѣки грамотен нашенец-християнин ги е знаѣл.
- Сега ги зная̨т само експерти, тренирани да разчитат стари текстове.
- В съврѣменна Гърция милетскитѣ цифри ги зная̨т.
- Там не употрѣбяват римскитѣ цифри.
- В случаитѣ, когато ние употрѣбяваме римскитѣ цифри, в Гърция ползват милетскитѣ.
- Според мене, милетскитѣ цифри сѫ по-добри от римскитѣ.
- Но и еднитѣ, и другитѣ нищо не струват прѣд десетичната позиционна бройна система.
- Десетичната позиционна бройна система опрѣдѣлено е съдѣйствала за развитието на технологиитѣ.
- С такова нѣщо не мога̨т да се похваля̨т нито римскитѣ цифри, нито милетскитѣ.
- (.. скрий го ежедневието ..) (.. скрий го отклонението за позиционнитѣ бройни системи ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- Десетичната позиционна бройна система е
в Европа отскоро: има-нѣ̋ма петстотин години.
- ►► Полиномитѣ и позиционнитѣ бройни системи (.. покажи ..)
-
▼▼
Полиномитѣ и позиционнитѣ бройни системи
(.. скрий ..)
- Записът на числата в позиционна бройна система има нѣщо общо с полиномитѣ.
- Това е и причината за появата на този раздѣл, в който се прави отклонение от основната тема на бесѣдата.
- При позиционна бройна система се фиксира цѣ̋ло число по-голѣ̋мо от единица за
основа на бройната система или накратко radix.
- В ежедневния̌т живот на хората radix-ът е 10 (десет).
- Вѫтрѣ в свѣтът на компютритѣ - тогава, когато на компютритѣ не им се налага да общуват с хора, radix-ът е 2 (двѣ).
- Записът на число в позиционна бройна система при фиксиран radix
прѣдставлява поредица (масив, array) от цифри.
- Цифритѣ сѫ коефициентитѣ на полиномът, а radix-ът е аргументът.
- За всѣ̋ко цѣ̋ло неотрицателно число, по-малко от radix-ът,
сѫществува цифра, стойността на която е това число.
- Цифритѣ сѫ толкова на брой, колкото е radix-ът.
- Ако radix-ът е 2, и цифритѣ сѫ 2: 0 и 1.
- Ако radix-ът е 10 (осем), и цифритѣ сѫ осем: 0, 1, 2, 3, 4, 5, 6, 7.
- Ако radix-ът е 10 (десет), и цифритѣ сѫ десет: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
- Ако radix-ът е 16 (шестнадесет), и цифритѣ сѫ шестнадесет.
Обикновено се ползват тѣзи: 0123456789ABCDEF. - Ако radix-ът е 36 (тридесет и шест), и цифритѣ сѫ толкова.
Обикновено се ползват тѣзи: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ.
- Нулата винѫги е цифра, при всѣки radix.
- При всѣ̋ка позиционна бройна система има нуђа от цифрата
0 (нула).
Както и от единица (1). - Изобрѣтяването на позиционния̌т запис на числата, вѣроятно дѣло на индийски математици, е тѣ̋сно свързано с изобрѣтяването на цифрата нула и на числото нула.
- Точно това е дало тласък на развитието и на математиката, и на технологиитѣ.
- Етимологията на думи като цифра или шифър ни води към арабското название на нулата, което значѣло "нищо".
- При всѣ̋ка позиционна бройна система има нуђа от цифрата
0 (нула).
- Цѣлта на нулата е да държи и да бѣлѣжи позицията си
- и като цифра в запис на число в позиционна бройна система,
- и като коефициент на полиномът.
- В позиционна нотация, нулата може да се изпусне, само ако прѣди нея̨ нѣ̋ма по-старши ненулев коефициент или по-старша ненулева цифра.
- Наличието на цифра нулата е основната разлика међу съврѣменното означение на числата от една страна, и римската или милетската система от друга страна.
- Непозиционни означения:
- Хиляда оки люта ракия. Sıcak rakı bin okkası. One Thousand oz of brendy.
- Полиномът x3.
- Позиционни означения:
- 1000 оки люта ракия. Sıcak rakı 1000 okkası. 1000 oz of brendy.
- В прѣдишнитѣ раздѣли вѫтрешно на JavaScript pолиномът x3 се прѣдставя като масив от числа така: [1 0 0 0].
- (.. скрий го полиномиалното при позиционнитѣ бройни системи ..) (.. скрий го отклонението за позиционнитѣ бройни системи ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- Записът на числата в позиционна бройна система има нѣщо общо с полиномитѣ.
- ►► Прѣз практиката ми на компютърен програмист съм си имал работа със .. (.. покажи ..)
-
▼▼
Прѣз практиката ми на компютърен програмист съм си имал работа ..
(.. скрий ..)
- прѣдимно с radix 10 - с десетичната позиционна бройна система.
- Човѣк съм, а компютритѣ отдавна сѫ се научили да общуват с хора в radix 10.
- Напримѣр, дотук при тази бесѣда - "за компютритѣ полиномиално", не ми се е налагало мислено да прѣвключвам към radix 2.
- Но пък в прѣдишната бесѣда - оная за дупкитѣ на перфолентата, това понѣ̋кога се налагаше.
- Без връзка с писането на разни бесѣди, прѣз практиката ми на компютърен програмист все пак ми се е налагало да минавам и на други в radix-и.
- Не може човѣк да разбира сърдцето и чувствата на компютърът, ако не владѣе вѫтрешния̌т му
radix - radix 2.
- В кръвта на компютритѣ е radix 2.
- Едно врѣме, когато бѣ̋х ученик и студент, имаше надѣђа, че в бѫдеще ще се появя̨т компютри с radix 3 в кръвта, и се упражнявахме не само на radix 2, но и на radix 3.
- Не се появиха̨ такива компютри.
Не съм имал досѣг с radix 3 в практиката си.
- Записът в radix 2 е твърдѣ неудобен за показ и възприятие.
Когато radix 2 се показва на човѣк или се очаква човѣк да го възприеме, винѫги се замѣства с «роднински» radix - radix 8 или radix 16.- При Минск-2 и PDP-11 - radix 8.
- При другитѣ компютърни архитектури - radix 16.
- Не бива да се забравя, че radix 8 и radix 16 не сѫ нищо друго освѣн сбит запис на radix 2.
- Едно врѣме при компютритѣ PDP-11 за кодиране на 6-знакови идентификатори в 32 бита
се ползваше radix 40 под означението Radix-50.
- Числото 40 (записано в radix 50) e 50 в radix 8 (5*8 е 40), а «кръвообращението» на PDP-11 се показваше в radix 8.
- Комуникациитѣ в слѣдващитѣ години използват разни други radix-и.
- Напримѣр, radix 64 се ползваше от програмитѣ uuencode и uudecode в Unix, а впослѣдстие и във e-mail-итѣ при прикрѣпенитѣ към тѣ̋х файлове.
- Само за забавление - just for fun, в слѣдващитѣ подраздѣли ще демонстрирам произволен
radix в диапазонът от 2 до 36.
- Горната граница на диапазонът е опрѣдѣлена от фактът, че разполагаме с 36 цифри: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ.
- (.. скрий с кои radix-и съм си имал работа ..) (.. скрий го отклонението за позиционнитѣ бройни системи ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- прѣдимно с radix 10 - с десетичната позиционна бройна система.
- ►► Прѣобразуване от друга позиционна бройна система към «нашата» (.. покажи ..)
-
▼▼
Прѣобразуване от друга позиционна бройна система към «нашата»
(.. скрий ..)
- Коя е «нашата» позиционна бройна система?
Кой е «нашия̌т» radix?- «Нашия̌т» radix е този, в който се извършват аритметичнитѣ дѣйствия: събиране, умножение, дѣление на цѣли числа.
- «Нашия̌т» radix е този, в който се извършват прѣсмѣ̋танията.
- За нас хората «нашия̌т» е radix 10.
- За интерпретаторът на JavaScript «свой» сѫщо така е radix 10.
- Този интерпретатор е програма, която работи на компютърът, а не е самия̌т компютър.
- Програма на езикът JavaScript се изпълнява от интепретаторът, а не от самия̌т компютър.
- Компютритѣ на съвсѣм ниско ниво имат radix 2 за «свой».
- Програми, които да се изпълняват непосрѣдствено на самия̌т компютър, се пиша̨т на езици като C, C++ или асемблер.
- Това, разбира се, е условно написано.
- Важното е, че в този раздѣл ще се имат прѣд вид смѣтки само в radix 10.
- Аритметика в radix различен от 10 нѣ̋ма да се обсѫђа.
- В този подраздѣл задачата ще е тази: число, прѣдставено в друг radix,
да се конвертира в «нашия̌т» radix 10.
- Ако числото е прѣдставено в друг radix, за «нас» то не е число, защото не можем да смѣ̋таме с него.
- За «нас» то е просто низ от нѣ̋какви цифри.
- Задачата ще е да го прѣвърнем в число в «нашия̌т» radix 10.
- Алгоритъмът ще е сѫщия̌т, който бѣ приложен в раздѣлът за прѣсмѣ̋тане на стойността на полином.
- Примѣр. Число нѣ̋какво е прѣдставено в radix 16 във видът FFFF, като цифрата F е 15.
- Започваме с нулев резултат. Резултатът е 0.
- Към резултатът добавяме стойността на старшата цифра. 0+15. Резултатът е 15.
- Умножаваме резултатът по radixът. 15*16. Резултатът е 240.
- Към резултатът добавяме стойността на слѣдващата цифра. 240+15. Резултатът е 255.
- Умножаваме резултатът по radixът. 255*16. Резултатът е 4080.
- Към резултатът добавяме стойността на слѣдващата цифра. 4080+15. Резултатът е 4095.
- Умножаваме резултатът по radixът. 4095*16. Резултатът е 65520.
- Към резултатът добавяме стойността на послѣдната цифра. 65520+15. Резултатът е 65536.
- Тука ще можете да изберете radix в диапазонът от 2 до 36.
- Слѣд това ще можете да въведете число в избрания̌т radix.
- И като натиснете бутонът Go!, програмата на JavaScript ще прѣдстави Вашето число в «нашия̌т» radix 10.
-
Radix: - Полученото като резултат число, записано в «нашия̌т» radix 10 (в десетичната позиционна бройна система, използвана в ежедневието), ще бѫде прѣнесено автоматично в слѣдващия̌т подраздѣл, където то ще може да бѫде прѣобразувано друг radix, трети radix.
- Впрочем, това е начинът за конвертиране от един radix в друг, като и двата radix-а сѫ различни от «нашия̌т»: първо в «нашия̌т», послѣ в другия̌т.
-
.. Покажи го кодът на програмката за конвертиране към «нашия̌т» radix ..
-
Кодът на програмката за конвертиране към «нашия̌т» radix
(.. скрий го кодът ..)
-
function convertFromRadix(radix, digits) { var res = 0; var v; var d; var dig = digits; while(dig != "") { res *= radix; d = dig.slice(0,1); dig = dig.slice(1); v = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".search(d); if(v > 0) { res += v; } } return res; }
- Такива програмки се пиша̨т не на JavaScript, а на C или на асемблер.
- JavaScript има вградени срѣдства за такова конвертиране.
-
- (.. скрий го прѣобразуването от друга позиционна бройна система ..) (.. скрий го отклонението за позиционнитѣ бройни системи ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- Коя е «нашата» позиционна бройна система?
- ►► Прѣобразуване от «нашата» позиционна бройна система към друга (.. покажи ..)
-
▼▼
Прѣобразуване от «нашата» позиционна бройна система към друга
(.. скрий ..)
- Коя е «нашата» позиционна бройна система?
Кой е «нашия̌т» radix?- «Нашия̌т» radix е този, в който се извършват аритметичнитѣ дѣйствия: събиране, умножение, дѣление на цѣли числа.
- «Нашия̌т» radix е този, в който се извършват прѣсмѣ̋танията.
- За нас хората «нашия̌т» е radix 10.
- За интерпретаторът на JavaScript «свой» сѫщо така е radix 10.
- Този интерпретатор е програма, която работи на компютърът, а не е самия̌т компютър.
- Програма на езикът JavaScript се изпълнява от интепретаторът, а не от самия̌т компютър.
- Компютритѣ на съвсѣм ниско ниво имат radix 2 за «свой».
- Програми, които да се изпълняват непосрѣдствено на самия̌т компютър, се пиша̨т на езици като C, C++ или асемблер.
- Това, разбира се, е условно написано.
- В този подраздѣл задачата ще е тази: число,
прѣдставено в добрѣ познатия̌т ни «наш» radix 10,
да се прѣобразува в друг зададен radix.
- Резултатът тука ще бѫде низ от цифри в другия̌т radix.
- Алгоритъмът се основава на аритметичната операция дѣление на цѣли числа.
- Тази операция дава двѣ числа като резултат: частното и остатъкът.
- Компютърът на ниско ниво извършва цѣлочисленото дѣление точно така: едноврѣменно намира частното и остатъкът.
- Ако се програмира на език от високо ниво, задача на езиковия̌т процесор (компилатор или интерпретатор) е да не кара операцията на ниско ниво да се извършва два пѫти.
- Описание на алгоритъмът за рѣшаване на задачата.
- Цифритѣ се опрѣдѣля̨т послѣдователно една по една, от младшата към старшата, от послѣдната към първата.
- На всѣ̋ка стѫпка от алгоритъмът се извършва цѣлочислено дѣление, при което дѣлител е radix-ът.
- Остатъкът е поредната цифра.
- Слѣдващата стѫпка продължава с частното.
- Илюстрация на алгоритъмът по стѫпки.
- За цѣлитѣ на илюстрацията да се поставим на мѣ̋стото на компютърът, за който «свой» е radix 2 (или кой да е друг radix, различен от 10.
- Задачата ще бѫде да намѣрим десетичнитѣ цифри, цифритѣ в radix 10.
- Да вземем произволно число. Съвсѣм произволно. От нѣмай къдѣ записът му тука на екранът ще бъде десетичен.
- 265302.
- 1-ва стѫпка. Дѣлим 265302 на 10. Остатъкът е 2. Това е послѣдната цифра. Продължаваме с частното 26530.
- 2-ра стѫпка. Дѣлим 26530 на 10. Остатъкът е 0. Това е поредната цифра. Слагаме я̨ отпрѣд. Резултат дотук: 02. Продължаваме с частното 2653.
- 3-та стѫпка. Дѣлим 2653 на 10. Остатъкът е 3. Това е поредната цифра. Слагаме я̨ отпрѣд. Резултат дотук: 302. Продължаваме с частното 265.
- 4-та стѫпка. Дѣлим 265 на 10. Остатъкът е 5. Това е поредната цифра. Слагаме я̨ отпрѣд. Резултат дотук: 5302. Продължаваме с частното 26.
- 5-та стѫпка. Дѣлим 26 на 10. Остатъкът е 6. Това е поредната цифра. Слагаме я̨ отпрѣд. Резултат дотук: 65302. Продължаваме с частното 2.
- 6-та стѫпка. Дѣлим 2 на 10. Остатъкът е 2. Това е поредната цифра. Слагаме я̨ отпрѣд. Резултат дотук: 265302. Частното е 0. Слѣдователно, това е послѣдната стѫпка.
- Първо въведѣте цѣ̋ло положително число в привичния̌т за човѣк десетичен запис (в «нашия̌т» radix 10).
- Послѣ изберѣте друг radix в диапазонът от 2 до 36.
- Програмата ще Ви покаже прѣдставянето на Вашето число в избрания̌т radix.
-
Radix: -
.. Покажи го кодът на програмката за конвертиране към друг radix ..
-
Кодът на програмката за конвертиране към radix, различен от «нашия̌т»
(.. скрий го кодът ..)
-
function integerDivision(a,b) { if((typeof(a) == "number") && (0 <= a) && ((a >> 0) == a) && (typeof(b) == "number") && (0 < b) && ((b >> 0) == b)) { return {"q":((a/b) >> 0),"r":(a%b)} } return {"q":"-","r":""} }
function convertToRadix(radix, number) { if((typeof(radix) != "number") || (radix > 36) || (radix < 2) || ((radix >> 0) != radix) || (typeof(number) != "number") || (number < 0) || ((number >> 0) != number)) { return ""; } if (number == 0) { return "0"; } var div; var res = ""; var num = number; while(num != 0) { div = integerDivision(num,radix); if (div["q"] == "-") { return ""; } res = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".slice(div["r"]).slice(0,1) + res; num = div["q"]; } return res; } - Такива програмки се пиша̨т не на JavaScript, а на C или на асемблер.
- JavaScript има вградени срѣдства за такова конвертиране.
-
- (.. скрий го прѣобразуването към друга позиционна бройна система ..) (.. скрий го отклонението за позиционнитѣ бройни системи ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- Коя е «нашата» позиционна бройна система?
- ►► Прѣобразуване међу «роднински» позиционни бройни системи (.. покажи ..)
-
▼▼
Прѣобразуване међу «роднински» позиционни бройни системи
(.. скрий ..)
- «Роднински» сѫ radix-и,
които сѫ степени на един и сѫщ radix - първа степен, втора степен, трета степен, ..
- Напримѣр, radix-итѣ 8 и 16 сѫ «роднински»,
понеже 8 и 16 сѫ степени (трета и четвърта) на 2.
- В сѫщност, тѣзи три radix-а 2, 8 и 16 сѫ «роднински».
- Друг примѣр. «Роднински» сѫ radix-итѣ 10, 100 и 1000.
- Напримѣр, radix-итѣ 8 и 16 сѫ «роднински»,
понеже 8 и 16 сѫ степени (трета и четвърта) на 2.
- Конвертирането међу «роднински» radix-и ..
- не се извършва по алгоритмитѣ от прѣдишнитѣ два подраздѣла,
- дори когато нѣ̋кой от «роднински» radix-и е «нашия̌т».
- Защото има по-лесен начин.
- Защото два «роднински» radix-а не сѫ много различни един от друг.
- Конвертирането међу «роднински» radix-и ..
- се извършва чрѣз групиране, декомпозиране и прѣгрупиране на цифритѣ.
- Да разгледаме radix-ът 100.
- Той е «роднина» на «нашия̌т» radix 10.
- Radix 100 има нуђа от 100 цифри.
- Нека тѣзи 100 цифри да сѫ слѣднитѣ:
{00},{01},{02},{03},{04},{05},{06},{07},{08},{09}, {10},{11},{12},{13},{14},{15},{16},{17},{18},{19}, {20},{21},{22},{23},{24},{25},{26},{27},{28},{29}, . . {80},{81},{82},{83},{84},{85},{86},{87},{88},{89}, {90},{91},{92},{93},{94},{95},{96},{97},{98},{99}.
- Всѣ̋ка от тѣзи 100 «цифри» си я̨ мислѣте като цѣ̋лостен йероглиф със съотвѣтната стойност.
- При конвертирането от radix 10 към radix 100 цифритѣ по radix 10 се групират по двѣ (по двѣ, защото 100 е втора степен на 10) от дѣ̋сно на лѣ̋во (в общия̌т случай от точката в двѣтѣ посоки).
- Всѣ̋ка групичка от двѣ цифри в radix 10 се кодира в една от 100-тѣ «цифри» по radix 100.
- 2024 => {20}{24}.
- Да разгледаме radix-ът 1000.
- Той е «роднина» на radix-итѣ 10 и 100.
- Radix 1000 има нуђа от 1000 цифри.
- Нека тѣзи 1000 цифри да сѫ слѣднитѣ:
{000},{001},{002},{003},{004},{005},{006},{007},{008},{009}, {010},{011},{012},{013},{014},{015},{016},{017},{018},{019}, {020},{021},{022},{023},{024},{025},{026},{027},{028},{029}, . . {980},{981},{982},{983},{984},{985},{986},{987},{988},{989}, {990},{991},{992},{993},{994},{995},{996},{997},{998},{999}.
- Всѣ̋ка от тѣзи 1000 «цифри» си я̨ мислѣте като цѣ̋лостен йероглиф със съотвѣтната стойност.
- Нека задачата да е слѣдната: Число, което в radix 100 се прѣдставя във видът {20}{24}, да се прѣдстави в «роднинския̌т» radix 1000.
- Де-композираме цифритѣ по radix 100 към цифри по radix 10:
- {20}{24} => 2024.
- Групираме ги по три (по три, защото 1000 е трета степен на 10).
- 2024 => 002 024.
- Всѣ̋ка групичка от три цифри в radix 10 се кодира в една от 1000-та «цифри» по radix 1000.
- 002 024 => {002}{024}.
- Да се върнем на компютърчетата, че тѣхен е бѫдещия̌т интелект.
- Като оставим настрани «нашия̌т» radix 10,
компютърнитѣ програмисти и кодировчици най-често си имат работа с три «роднински» radix-a:
2, 8 и 16.
- При radix 2, двоичината позиционна система, която компютритѣ имат за «своя»,
сѫ нужни двѣ (2) цифри, 0 и 1.
- Една двоична цифра се нарича бит.
- Това е най-малкото количество информация.
- Мѣ̋рката за количество информация е бит.
- При radix 8 сѫ нужни 8 (осем) цифри.
- Ето ги тѣзи 8 (осем) цифри, заедно с де-композицията им на битове:
0: 000, 1: 001, 2: 010, 3: 011, 4: 100, 5: 101, 6: 110, 7: 111.
- Напримѣр, записът 377 в radix 8 означава 11111111 - един байт свѣтна̨ти битове.
- Ето ги тѣзи 8 (осем) цифри, заедно с де-композицията им на битове:
- При radix 16 сѫ нужни 16 цифри.
- Ето ги тѣзи 16 цифри, заедно с де-композицията им на битове:
0: 0000, 1: 0001, 2: 0010, 3: 0011, 4: 0100, 5: 0101, 6: 0110, 7: 0111, 8: 1000, 9: 1001, A: 1010, B: 1011, C: 1100, D: 1101, E: 1110, F: 1111.
- Напримѣр, един байт свѣтна̨ти битове в radix 16 се прѣдставя така: FF.
- А пък байт, в който само старшия̌т бит е свѣтна̨т, в radix 16 се прѣдставя така: 80.
- Ето ги тѣзи 16 цифри, заедно с де-композицията им на битове:
- При radix 2, двоичината позиционна система, която компютритѣ имат за «своя»,
сѫ нужни двѣ (2) цифри, 0 и 1.
- Нека задачата да ни е слѣдната.
Число, имащо видът 3750 в radix 8, да се прѣдстави в «роднинския̌т» radix 16.- Осмичнитѣ цифри ги де-композираме на битове - всѣ̋ка на три бита:
011 111 101 000
. - Групираме битоветѣ по четири:
0111 1110 1000
. - Всѣ̋ка групичка от четири бита прѣдставяме с една цифра в radix 16:
7E8
.
- Осмичнитѣ цифри ги де-композираме на битове - всѣ̋ка на три бита:
- Да отбѣлѣжа̨, че за компютърчето играта с битове е по-лесна от аритметичнитѣ операции събиране, умножение и дѣление.
- То и за човѣк е така, ако е свикна̨л да жонглира с битчета.
- (.. скрий го прѣобразуването међу роднински позиционни бройни системи ..) (.. скрий го отклонението за позиционнитѣ бройни системи ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- «Роднински» сѫ radix-и,
които сѫ степени на един и сѫщ radix - първа степен, втора степен, трета степен, ..
- ►► Нѣщо като заключение на първото отклонение (.. покажи ..)
-
▼▼
Нѣщо като заключение на първото отклонение
(.. скрий ..)
- Основната тема на бесѣдата бѣше намирането на реалнитѣ корени на полином с реални коефициенти.
- В това отклонение се отплѣсна̨х по вѫтрешното прѣдставяне на даннитѣ в компютритѣ.
- Изложението не е на техническо ниво. То е на публицистично ниво.
- Цѣлта е само читателитѣ да добия̨т нѣ̋каква прѣдстава.
- Цѣлта е обща прѣдстава прѣди всичко и прѣдстава за алгоритмитѣ.
- Имплементацията на алгоритмитѣ срѣща ограниченията на компютърната срѣда и тѣ не винѫги работя̨т.
- Но не съм си поставял за цѣл имплементация на аритметика с по-висока точност.
- Съвсѣм не всичко бѣ споменато.
- Струва си да се отбѣлѣжи, че както всичко, свързано с компютритѣ, се доразвива и подобрява, така става с разнитѣ формати и кодировки.
- Редица стари формати, с които съм работил прѣз 80-тѣ, сега сѫ забравени.
- Напримѣр, пакетиранитѣ десетични числа и машинната аритметика с тѣ̋х.
- Имаше ги в IBM/System360, а послѣ и във VAX.
- Или пък десетичнитѣ числа с плаваща точка.
- Имаше ги пак в IBM/System360, къдѣто нѣмаше двоични числа с плаваща точка.
- Не знам тази странност да е била повторена в друга компютърна архитектура.
- Напримѣр, пакетиранитѣ десетични числа и машинната аритметика с тѣ̋х.
- При рѣшаването на задачата за намирането на реалнитѣ корени на полином с реални коефициенти се ползва аритметика с плаваща точка.
- Едно врѣме аритметиката с плаваща точка бѣше един от аспектитѣ в програмирането, който бѣше най-трудно прѣносим међу различнитѣ компютърни архитектури.
- Сѫщо така, почти невъзможно бѣше да се прѣнасят като данни числа с плаваща точка в машинно прѣдставяне.
- Сега вече има стандарт за аритметика с плаваща точка.
- (.. скрий го заключението ..) (.. скрий го отклонението за позиционнитѣ бройни системи ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ◄► (.. скрий го отклонението за позиционнитѣ бройни системи ..) (.. свий го ..) (.. разгъни го ..) (.. скрий я̨ втората бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ►► Отклонение_2: циклично броене, пръстени на остатъцитѣ (.. покажи го отклонението ..) (.. разгъна̨то ..)
-
▼▼
Отклонение_2: циклично броене, пръстени на остатъцитѣ
(.. скрий го отклонението ..)
(.. свий го ..)
(.. разгъни го ..)
- ►► Нѣщо като прѣдговор на второто отклонение (.. покажи ..)
-
▼▼
Нѣщо като прѣдговор на второто отклонение
(.. скрий ..)
- Основната тема на бесѣдата бѣше намирането на реалнитѣ корени на полином с реални коефициенти.
- При това "полето на дѣйствие" е полето на реалнитѣ числа.
- Но това бѣше в математическата задача за намирането на реалнитѣ корени на полином с реални коефициенти.
- В първото отклонение се отплѣсна̨х по вѫтрешното прѣдставяне на даннитѣ в компютритѣ.
- Там, в първото отклонение, вече напусна̨хме полето на реалнитѣ числа.
- Всичко в компютритѣ се моделира и се прѣдставя с цѣли числа.
- Аналогови компютри и дори хибридни аналогово-цифрови компютри аз не съм виђал.
- Всичко минава на цифровизация и дори вече си е цифрово (дигитално) - телефонни разговори, телевизия, звукозаписи.
- Дигиталното е по-надѣђно, по-стабилно и по-лесно се управлява.
- Аналоговото може да резонира със заобикалящия̌т ни реален аналогов свѣ̋т.
- Изградили сме си виртуален дигитален (цифров) свѣ̋т.
- Това бѣше още в първото отклонение.
- Трѣ̋бва да го прочетете прѣди второто отклонение.
- И сега идва второто отклонение.
- Ще се раздѣлим с прѣдставата за безкрайност.
- Ще замѣним безкрайността с цикличност.
- В нашитѣ човѣшки прѣдстави и усѣщания нѣ̋ма безкрайност.
- Всичко, до което се докасваме или което можем да погледнем, е отсам безкрайността.
- Не знаем къдѣ е тя, безкрайността.
- Лесно можем да си прѣдставим, че половината на нищото - на нулата - е точно равна на цѣ̋лото нищо (на цѣ̋лата нула).
- Но трудно можем да си прѣдставим, че половината на безкрайността е точно равна на цѣ̋лата безкрайност.
- Или че цѣ̋лата безкрайност е равна на половината си.
- Затова ще се раздѣлим с прѣдставата за безкрайност.
- Изложението не е на техническо ниво. То е на публицистично ниво.
- Едната цѣл е читателитѣ да добия̨т нѣ̋каква прѣдстава за цикличността в компютритѣ.
- В този смисъл това е продължение на първото отклонение от бесѣдата.
- От друга страна, подготвям обстойна публикация за разнитѣ календари и за разнитѣ календарни елементи.
- А там има много примѣри на циклично броене.
- (.. скрий го прѣдговорът на второто отклонение ..) (.. скрий го второто отклонение ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- Основната тема на бесѣдата бѣше намирането на реалнитѣ корени на полином с реални коефициенти.
- ►► Цикличното броене в ежедневието (.. покажи ..)
-
▼▼
Цикличното броене в ежедневието
(.. скрий ..)
- Седмицата.
- Понедѣлник, вторник, срѣ̋да, четвъртък, петък, сѫбота, недѣля .. и пак понѣделник.
- И така повече от три хиляди години.
- Без прѣкѫсване, без приплъзгване, без грѣшки.
- Мѣсецитѣ.
- Януари, февруари, март, април, май, юни, юли, август, септември, октомври, ноември, декември .. и пак януари.
- И така повече от двѣ хиляди години.
- Циферблатът на часовницитѣ.
- Един часът, два часът, три часът, .., шест часът, .., девет часът, десет часът, единадесет часът, дванадесет часът, и пак един часът.
- И така откакто го има стария̌т часовник.
- Г-жа Петрова, начална учителка.
- Води първолаци, води второкласници, води третокласници, води четвъртокласници, и пак при първолацитѣ.
- И така до пенсия.
- Е, да:
- Първолацитѣ не сѫ сѫщитѣ, както прѣди четири годинин - други сѫ.
- Един часът днес по пладнѣ не е като един часът нощес, а пък утрѣ в един часът кой знае какво ще стане.
- Прѣз тазгодишния̌т януари бѣ̋х с цѣ̋ла година по-стар, отколкото бѣ̋х прѣз мина̨логодишния̌т януари.
- Този понѣдѣлник сериалът по телевизията свърши, и другия̌т понедѣлник ще почва друг сериал.
- Обаче:
- Все първолаци, дѣчица малки.
- Часовникът все един часът показва.
- И на стѣнния̌т календар пише все "януари".
- И слѣд този понѣдѣлник пак вторник ще дойде.
- (.. скрий го цикличното броене в ежедневието ..) (.. скрий го второто отклонение ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- Седмицата.
- ►► Цикличното броене в математиката (.. покажи ..)
-
▼▼
Цикличното броене в математиката
(.. скрий ..)
- В прѣдишното отклонение бѣше написано, че появата на понятиетието за нула - изобрѣтяването на числото нула и на цифрата нула,
което се е случило сравнително наскоро, е дало тласък на развитието на математиката и на технологиитѣ.
- Ако часовниковитѣ циферблати не слѣдваха̌ стара традиция, означенията върху тѣ̋х щѣ̋ха̨ да сѫ от 0 до 11.
- С терминитѣ "поле" и "пръстен" се означават двѣ алгебрични структури, на които в математиката се дават опрѣдѣления.
- Елементитѣ им мога̨т да бѫда̨т наричани числа.
- И в двѣтѣ тѣзи структури сѫ възможни обичайнитѣ аритметични операции събиране, извађане и умножение.
- Има си нула, която не промѣня числото, към което е добавена.
- Има си и единица, която не промѣня числото, с което е умножена.
- Всѣ̋ко поле в частност е и пръстен, но не всѣки пръстен е поле.
- Един пръстен, за да бѫде поле, трѣ̋бва винѫги в него да е възможна операцията дѣление на число, което е различно от нула.
- Напримѣр.
- Числата 5 и 2 сѫ елементи поне на три полета: на полето на комплекснитѣ числа, на полето на реалнитѣ числа и на полето на рационалнитѣ числа.
- Ако числата 5 и 2 ги разглеђаме като елементи на поле, то можем да раздѣлим 5 на 2 и ще се получи число от сѫщото поле: числото 2.5 (двѣ и половина).
- Числата 5 и 2 сѫ елементи и на пръстенът на цѣлитѣ числа.
- Ако числата 5 и 2 ги разглеђаме като елементи на пръстенът на цѣлитѣ числа, то при операцията "5 дѣлено на 2" ще се получа̨т двѣ числа (двѣ числа от този пръстен): частно 2 и остатък 1.
- Число 2.5 (двѣ и половина) в този пръстен нѣ̋ма.
- Да забравим за полетата. Продължаваме само с пръстенитѣ.
От нѣ̋каква гледна точка, продължаваме с цѣлитѣ числа.- При дѣление на двѣ числа от един пръстен (при ненулев дѣлител, разбира се) може да не се намѣри едно число от този пръстен като резултат.
- Но ще се намѣря̨т двѣ числа: частно и остатък.
- Да си припомним, че цѣлта на това второ отклонение е да се раздѣлим с прѣдставата за безкрайност
и да я̨ замѣним с прѣдстава за цикличност.
- Като имаме на разположение нулата и позиционното прѣдставяне на числата.
- Обикновено в десетичната позиционна бройна система.
- Да се ограничим до послѣднитѣ двѣ десетични цифри, до послѣднитѣ два десетични разряда.
- Ако за двѣ цѣли положителни числа съвпадат послѣднитѣ двѣ цифри - единицитѣ и десетицитѣ - в десетичното им прѣдставяне, нека да смѣ̋таме, че тѣзи двѣ числа сѫ идентични.
- Така се получава пръстен, съдържащ точно 100 елемента - точно 100 "числа", нарѣчен "пръстен на остатъцитѣ по модул 100" и означаван така: Z100.
- Числата от този пръстен обикновено се означават така: 0, 1, 2, .., 98, 99.
- В този пръстен 12+12 е равно на 24. Ама 92+12 е равно на 4, защото 104 е идентично на 4
- В този пръстен 0-6 е равно на 94. Елементът 94 може да бѫде означен и така: -6.
- С други думи, нѣ̋маме никакъв проблем част от числата в пръстенът на остатъцитѣ да ги смѣ̋таме за отрицателни.
- Възможно е и всичкитѣ ненулеви елементи на този пръстен да ги смѣ̋таме за отрицателни.
- Отклонение за почивка. Да не си помислите, че дѣцата от 2-ри клас се уча̨т да смѣ̋тат в пръстенът Z100. Макар това донѣ̋къдѣ да е вѣ̋рно. Край на почивката.
- За всѣ̋ко цѣ̋ло число n по-голѣ̋мо от 1 сѫществува пръстен на остатъцитѣ по модул n с означение
Zn.
- Пръстенът Zn съдържа точно n числа: от 0 до n-1.
- Отклонение към физиката.
- Нѣ̋кои физични явления имат абсолютно начало и е естествено това начало да бѫде отбѣлѣ̋звано с цифрата 0 (нула).
- Напримѣр, абсолютната нула при температурата (минус 253 градуса по Целзий). По-ниска температура нѣ̋ма.
- Хората не винѫги сѫ осъзнавали сѫществуването на абсолютната температурна нула.
- И досега се използват температурни ска̀ли, къдѣто нулата не е в абсолютното начало,
а на нѣ̋кое друго условно прието мѣ̋сто:
- При ска̀лата на Целзий нулата е на точката на замръзване на водата.
- При ска̀лата на Fahrenheit нулата е най-ниската температура, измѣрена в Данциг (Гданск) прѣз зимата на 1708-1709.
- Врѣмето сѫщо има абсолютно начало - голѣмия̌т взрив, но това абсолютно начало е абсолютно недостижимо.
- Затова при отчитане на врѣмето винѫги се налага да слагаме нѣ̋къдѣ условна нула.
- Я̀ при рођението на Иисуса Христа.
- Я̀ при създаването на свѣтът според Библията.
- Я̀ от основаването на градът Рим.
- Я̀ в други точки от врѣмето.
- Край на отклонението към физиката.
- Да въведем абсолютно отброяване на днитѣ (на денонощията) от нѣ̋какво условно начало.
- За нулев ден ще обявя̨ 16-ти април 1916. 27499
- Избран е за по-лесни смѣтки.
- Това е първата недѣля слѣд въвеђането на григорианския̌т календар в България.
- Ще го нарѣка̨ този ден ДТВ: дѣ̋до тръгва на война.
- Абсолютно броене на днитѣ от ДТВ.
- Малко от днитѣ сѫ добри за България. Много малко.
- На ден 882 от ДТВ е пробивът на Добро поле.
- На ден 3287 от ДТВ терористи взривяват храм в центърът на София и убиват около 200 души.
- На ден 10373 от ДТВ България попада в лапитѣ на Сталин.
- На ден 26706 от ДТВ стотина хиляди мюсюлмани български грађани сѫ изгонени от страната.
- На ден 29514 от ДТВ - един от малкото хубави дни - БСП загуби властта - отстѫпи я̨ за около 8 години.
- На ден 30553 - най-хубавия̌т ден за България от ДТВ насам - Европейския̌т съюз рѣши да приеме България за члѣн.
- Ние хората не сме компютри и не отчитаме днитѣ така.
- В ежедневието си в много случаи отчитаме днитѣ циклично.
- Делим числото - броя̌т на днитѣ от ДТВ - на 7 и броим циклично. Прилагаме Z7: пръстенът на остатъцитѣ по модул 7.
- Имаме си имена за елементитѣ на този пръстен:
{0} недѣля, {1} понедѣлник, {2} вторник, {3} срѣ̋да, {4} четвъртък, {5} петък, {6} сѫбота. - Пробивът на Добро поле е бил в недѣля. [882 дѣлено на 7: частно 126 и остатък 0]
- Голѣмия̌т атентатът в софийски храм е бил в четвъртък. [3287 дѣлено на 7: частно 469 и остатък 4]
- България попада в лапитѣ на Сталин в сѫбота. [10373 дѣлено на 7: частно 1481 и остатък 6]
- Тодор Живков я̨ държа онази си рѣч в понедѣлник. [26706 дѣлено на 7: частно 3815 и остатък 1]
- Бѣше вторник, когато БСП отстѫпи властта за около 8 години. [29514 дѣлено на 7: частно 4216 и остатък 2]
- Рѣшението за приемането на България в Евросъюзът бѣ взето в петък. [30553 дѣлено на 7: частно 4364 и остатък 5]
- Да въведем абсолютно отброяване на часоветѣ от нѣ̋какво условно начало.
- Нека това условно начало е настѫпването на новата 2024 година.
- В час номер 15 (часовниковата стрѣлка сочи 3 на циферблатът) слушах на запис виенския̌т новогодишен концерт. [15 дѣлено на 12: частно 1 и остатък 3]
- В час номер 156 (часовниковата стрѣлка сочи 12) януарската ми пенсия е постѫпила по смѣтката ми. [156 дѣлено на 12: частно 13 и остатък 0]
- В час номер 906 (часовниковата стрѣлка сочи 6) февруарската ми пенсия е постѫпила по смѣтката ми. [906 дѣлено на 12: частно 75 и остатък 6]
- В час номер 1602 (часовниковата стрѣлка сочи 6) мартенската ми пенсия постѫпи по смѣтката ми. [1602 дѣлено на 12: частно 133 и остатък 6]
- В час номер 2167: часовниковата стрѣлка сочѣше 7 - мръдна̨х я̨ да сочи 8 заради лѣ̋тното часово врѣме. [2167 дѣлено на 12: частно 180 и остатък 7]
- Свикна̨ли сме да отчитаме часоветѣ циклично - в пръстен по модул 12.
- (.. скрий го цикличното броене в математиката ..) (.. скрий го второто отклонение ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- В прѣдишното отклонение бѣше написано, че появата на понятиетието за нула - изобрѣтяването на числото нула и на цифрата нула,
което се е случило сравнително наскоро, е дало тласък на развитието на математиката и на технологиитѣ.
- ►► Цикличното броене в компютритѣ (.. покажи ..)
-
▼▼
Цикличното броене в компютритѣ
(.. скрий ..)
- Ако числата се прѣдставят в radix 10 (десетична позиционна бройна система, r = 10)
и се ограничим до осем разряда (осем цифри, n = 8), ще можем да получим смѣ̋тане
в пръстенът на остатъцитѣ по модул 100000000. Сто милиона - десет на осма -
r на степен n -
това е мощността на пръстенът, толкова елемента той съдържа.
- Тѣзи сто милиона на брой числа сѫ от 0 (00000000) до 99999999.
- Послѣдното или "най-високото" число е 99999999.
- Ако към него добавим 1 ще получим 0 (00000000) и 1 прѣнос. Ето как:
- Добавяме единица към младшия̌т разряд. В него има 9. Става 10, тоест 0 (нула) и 1 (единица) прѣнос към старшия̌т разряд (едно на ум).
- Тази единица, която е прѣнос от младшия̌т разряд, я̨ добавяме към слѣдващия̌т разряд. В него има пак 9. Става 10, тоест 0 (нула) и 1 (единица) прѣнос към старшия̌т разряд (пак едно на ум).
- .. И така нататък. На всѣ̋ка позиция се получава 0 (нула) и 1 (единица) прѣнос.
- Към старшия̌т наличен разряд добавяме единицата, която е прѣнос от прѣдишния̌т разряд. Получава се пак 0 (нула) и единица прѣнос, който нѣ̋ма вече какво да го правим.
- Резултатът е 0 (00000000).
- Тази смѣтка бѣ направена в пръстенът Z100000000.
- Да се запитаме: щом в този пръстен 99999999+1 = 0, нима елементът 99999999 не е -1.
- Да, така е. В пръстенът Z100000000 99999999 е идентично с -1. Както и -1 е идентично с 99999999.
- Вѫтрешно в реалнитѣ компютри числата се прѣдставят в radix 2, двоично.
- Една двоична цифра се нарича бит.
- Един бит може да има стойност или 0 (нула) или 1 (единица).
- Нѣ̋кога имаше компютри с най-различна разрядност.
- Сегашнитѣ сѫ 64-битови или 32-битови.
- Да означим разрядността с n - radix-ът си е 2.
- Съотвѣтния̌т пръстен се означава така: Z2**n (пръстен Ζ с мощност 2 на степен n).
- Трудно е човѣк да съсрѣдоточи вниманието си върху 32 бита, а за 64 - да не говорим.
- Пръстенитѣ Z2**64 и Z2**32 нѣ̋ма как да ги използвам за илюстрация.
- Затова ще приема 8 бита, макар 8-битови компютри да нѣ̋ма отдавна.
- Пръстенът Z256 е с мощност 256 (двѣ на осма).
- Той съдържа 256 елемента - 256 числа.
- Тѣзи 256 числа, наредени по "височина", сѫ:
- Десетично от 0 до 255.
- Двоично от 0 (00000000) до 11111111.
- Осмично от 0 до 377.
- Шестнадесетично от 0 (00) до FF.
- Нѣ̋ма комбинация от 8 бита, която да не е прѣброена и да не е включена в тѣзи 256 елемента или 256 числа.
- Послѣдното или "най-високото" число е 11111111.
- Ако към него добавим 1 ще получим 0 (00000000) и 1 прѣнос. Ето как:
- Добавяме единица към младшия̌т разряд. В него има 1. Става 10, тоест 0 (нула) и 1 (единица) прѣнос към старшия̌т разряд (едно на ум).
- Тази единица, която е прѣнос от младшия̌т разряд, я̨ добавяме към слѣдващия̌т разряд. В него има пак 1. Става 10, тоест 0 (нула) и 1 (единица) прѣнос към старшия̌т разряд (пак едно на ум).
- .. И така нататък. На всѣ̋ка позиция се получава 0 (нула) и 1 (единица) прѣнос.
- .. Както по-горѣ при radix 10, така и сега при radix 2.
- Към старшия̌т наличен разряд добавяме единицата, която е прѣнос от прѣдишния̌т разряд. Получава се пак 0 (нула) и единица прѣнос, който нѣ̋ма вече какво да го правим.
- Резултатът е 0 (00000000).
- Тази смѣтка бѣ направена в пръстенът Z256.
- Да се запитаме: щом в този пръстен 11111111+1 = 0, нима елементът 11111111 не е -1.
- Да, така е. В пръстенът Z256
- 11111111 (десетично 255) е идентично с -1. Както и -1 е идентично с 11111111.
- 11111110 (десетично 254) е идентично с -10 (десетично -2).
- 11111100 (десетично 252) е идентично с -100 (десетично -4).
- 11111000 (десетично 248) е идентично с -1000 (десетично -8).
- 11110000 (десетично 240) е идентично с -10000 (десетично -16).
- 11100000 (десетично 224) е идентично с -10000 (десетично -32).
- 11000000 (десетично 192) е идентично с -1000000 (десетично -64).
- 10000000 (десетично 128) е идентично с -10000000 (десетично -128).
- Разбира се, нулата 00000000 е идентична с -0 (минус нула), както във всѣки пръстен.
- А щом десетичното 255 (двочно 11111111) е идентично с -1, като умножин това равенство с -1, дали е вѣ̋рно, че в този пръстен 1 (единицата, 00000001) е идентична с -255 (десетично)?
- Да, разбира се.
- И тъй, набѣлѣ̋зани сѫ три възможни интерпретации на елементитѣ (на числата) от пръстенът Z256.
- Имайте прѣд вид реалния̌т общ случай: пръстенът е Z2**32 или Z2**64.
- Аритметичнитѣ дѣйствия събиране, извађане, умножение и дѣление сѫ дефинирани в пръстенът независимо от интерпретацията на елементитѣ му.
- Забѣлѣжка. При дѣлението дѣлителя̌т не бива да е нула, а резултатитѣ сѫ два: остатък и частно.
- Тритѣ интерпретации сѫ слѣднитѣ:
- Адресна интерпретация. В езицитѣ С&C++ се означава unsigned int или само unsigned.
- Числата сѫ наредени по височина от най-ниското (нулата, 00000000) до най-високото (11111111, десетично 255).
- Елементитѣ 01111111 (десетично 127) и 10000000 (десетично 128) сѫ просто два сѫсѣдни адреса.
- Интерпретация със знак. В езицитѣ С&C++ може да се ползва се означава signed int или само int (integer).
- Нулата 00000000 е в разположена в срѣда̀та међу положителнитѣ и отрицателнитѣ числа.
- Елементитѣ от 00000001 (десетично 1) до 01111111 (десетично 127), 127 на брой, както сѫ си наредени по височина, се интерпретират като положителни числа от 1 до 127.
- Елементитѣ от 11111111 (десетично 255) до 10000000 (десетично 128), 128 на брой, се интерпретират като отрицателни числа от -1 до -128.
- Третата възможна интерпретация не се ползва.
- Всички числа освѣн нулата - 255 на брой - се интерпретират като отрицателни:
- от 11111111 (-1) до 00000001 (минус 255 десетично).
- Адресна интерпретация. В езицитѣ С&C++ се означава unsigned int или само unsigned.
- Каква е интерпретацията - дали е адресна (беззнакова, unsigned) или е знакова, има значение в три момента:
- Първо. Как да се показват елементитѣ на пръстенът в човѣшки вид.
- Второ. Как да се интерпретират сравненията међу елементитѣ на пръстенът.
- При знакова интерпретация 11111111 е -1 и е по-малко от нулата 0.
- При адресна интерпретация 11111111 е 255 десетично и е по-голѣ̋мо от нулата 0.
- На ниско ниво има различни операции за сравнение: едната се ползва при адресна интерпретация (кое е по-високо и кое е по-ниско), а другата се ползва при знакова интерпретация (кое е по-голѣ̋мо и кое е по-малко).
- В езицитѣ от високо ниво (напримѣр С&C++) сравненията се означават еднакво, но за всѣ̋ко число трѣ̋бва да се знае в какъв вид сравнения участва (unsigned или signed).
- Трето. Кога да се маркира особена ситуация.
- При знакова интерпретация, ако към 01111111 (127 десетично) добавим единица, ще се получи прѣпълване (integer overflow), тъй като резултатът минава в диапазонът на отрицателнитѣ числа.
- Сѫщата операция над сѫщитѣ елементи на пръстенът, но при адресна интерпретация, не бива да се маркира като особена ситуация.
- При адресна интерпретация особени ситуации възникват в други случаи.
- Напримѣр, особена ситуация от такъв тип е stack overflow.
- (.. скрий го цикличното броене в компютритѣ ..) (.. скрий го второто отклонение ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- Ако числата се прѣдставят в radix 10 (десетична позиционна бройна система, r = 10)
и се ограничим до осем разряда (осем цифри, n = 8), ще можем да получим смѣ̋тане
в пръстенът на остатъцитѣ по модул 100000000. Сто милиона - десет на осма -
r на степен n -
това е мощността на пръстенът, толкова елемента той съдържа.
- ◄► (.. скрий го отклонението за цикличното броене ..) (.. свий го ..) (.. разгъни го ..) (.. скрий я̨ втората бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ◄► (.. скрий я̨ втората бесѣда ..) (.. свий я̨ ..) (.. посвий или поразгъни ..) (.. разгъни я̨ ..) .. към началото ..
►► 4. Бродерия на тракащ принтер (.. покажи я̨ третата бесѣда ..) (.. разгъна̨то ..) .. към началото ..
- Аз като студент по бакалавърска програма в математическия̌т факултет.
- По спомени от лѣ̋тото на 1977 - на стаж в Търново. ::2023-06-13 18:09::
▼▼ 4. Спомени от лѣ̋тото на 1977: Бродерия на тракащ принтер (.. скрий я̨ третата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
::2023-06-13 18:09::- ►► Аз като студент по бакалавърска програма в математическия̌т факултет (.. покажи ..) (.. разгъна̨то ..) (.. скрий я̨ третата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
-
▼▼
Аз като студент по бакалавърска програма в математическия̌т факултет
(.. скрий ..)
(.. свий ..)
(.. разгъни ..)
- ►► Реформитѣ на Благовѣст Сендов в математическия̌т факултет на софийския̌т университет (.. покажи ги ..)
-
▼▼
Когато бѣ̋х студент, Благовѣст Сендов бѣше ректор на университетът.
(.. скрий ..)
- Но прѣди това е бил декан на математическия̌т факултет. И като такъв е направил слѣднитѣ реформи или поне е съдѣйствал за тѣ̋х:
- По примѣрът на цивилизования̌т свѣ̋т висшето образование по математика в софийския̌т университет е стана̨ло двустепенно:
бакалавърска и магистърска степен.
- Конспиративното име на бакалавърската степен бѣше "блок_А", а на магистърската степен - "блок_B".
- Имаше и "блок_C" - аспирантура. Завършваше се с кандидатска степен. Сега това се приравнява на докторска степен.
- Не познавам никого, който да си е остана̨л само с "блок_А" и бакалавърска степен. Но вѣроятно е имало такива. Тѣ получаваха̨ диплома за висше образование по математика. И можѣха̨ да работя̨т като компютърни програмисти в изчислителнитѣ центрове.
- Почти всички колеги, които завършваха̨ бакалавърска степен по математика с конспиративно име "блок_А", продължаваха̨ образованието си или в "блок_B" за магистърска степен, или в "блок_D", къдѣто получаваха̨ педагогическа квалификация за учители по математика.
- Аз съм завършил и с двѣтѣ квалификации - магистър по математика и учител по математика.
- Но прѣз цѣ̋лата си професионална кариера съм работил само като компютърен програмист и софту̌ерен инженер.
- Английския̌т език - задължителен за бакалавритѣ по математика.
- Срѣдното образование включваше и обучение по западен език - френски, нѣмски или английски, но зрѣлостницитѣ не го усвоявахме този език.
- Естествено бѣше обучението по западен език да продължи и във висшето учебно заведение.
- Във факултетът по математика на софийския̌т университет задължителен бѣше английския̌т език.
- Прѣз семестритѣ не учѣхме нито английски, нито друг западен език.
- За нас се организираха̨ интензивни лѣтни курсове: прѣз лѣ̋тото слѣд първи курс (1975) и прѣз лѣ̋тото слѣд втори курс (1976).
- Интензивни курсове - всѣки ден по шест часа английски.
- Имаше отдѣлни групи за начинаещи като мене и за напрѣдна̨ли (които сѫ учили английски като срѣдношколци).
- Аз си остана̨х с гимназиалното ниво по френски език и трѣ̋бваше да започна̨ да уча̨ английски език.
- За мене това бѣше добър късмет.
- Отклонение за руския̌т език. Разчиташе се, че от 5-ти до 9-ти клас учащитѣ се сѫ го усвоили руския̌т език. Винѫги ни се е налагало да ползваме учебна литература на руски език и не сме имали проблеми нито аз, нито колегитѣ. Не може цѣ̋лата специализирана литература да се прѣвеђа и издава на български. Край на отклонението за руския̌т език.
- Интеграция на Факултетът по математика към Софийския̌т университет и на
Институтът по математика към БАН във Единен център по математика.
- Не мога̨ да формулирам какво значение имаше това за мене. Но за нѣ̋кои мои колеги това бѣше важно.
- Сега в България всички уча̨т английски от дѣтската градина, във висшето образование сѫ отдѣлени магистърска и бакалавърска степен не само в математиката.
- Но интеграцията међу софийския̌т университет и БАН едва ли е устоѣ̋ла на врѣмето.
- (.. скрий ги реформитѣ на Благовѣст Сендов ..) (.. скрий ги споменитѣ ми от 1975..76..77 ..) (.. свий ги ..) (.. разгъни ги ..) .. към началото ..
- ►► Не съм ходил на лѣтни студентски бригади. (.. покажи ..)
-
▼▼
Не съм ходил на лѣтни студентски бригади.
(.. скрий ..)
- Есеннитѣ студентски бригади не сѫ ми се размина̨ли.
- Ямболската консервена фабрика.
- Разни села из Сѣверозападна България.
- Но на лѣтни студентски бригади не съм ходил.
- Слѣд първи и втори курс студентитѣ от математическия̌т факултет на софийския̌т университет посѣщавахме интензивни курсове по английски и бѣ̋хме освободени от лѣтни бригади.
- Слѣд трети курс прѣз лѣ̋тото трѣ̋бваше да изкараме нѣ̋какъв стаж.
- Вѣроятно така е било и в другитѣ факултети и вузове - стаж вмѣсто бригада слѣд трети курс.
- Като ученик в търновската гимназия съм ходил и на лѣтни, и на есенни бригади.
- Помня̨, че когато се уби Гунди, бѣ̋х на бригада в еленския̌т балкан за бране на малини.
- Помня̨ и една есенна бригада в Рѣсен, в прѣдприятието за производство на сѣмена.
- Динитѣ там ги пускаха̨ в една машина да ги мачка и да отдѣля сѣмкитѣ.
- Ядѣ̋хме дини на корем, но сѣмкитѣ трѣ̋бваше да ги плюем и да ги прѣдаваме.
- А бе сега кой я̨ прибира селско-стопанската реколта?
- Пълно е с малини на пазарът. Кой се боде и ги бере тѣзи малини?
- (.. скрий защо не съм ходил на лѣтни бригади ..) (.. скрий ги споменитѣ ми от 1975..76..77 ..) (.. свий ги ..) (.. разгъни ги ..) .. към началото ..
- Есеннитѣ студентски бригади не сѫ ми се размина̨ли.
- ►► Подготовката ми за бѫдещата ми трудова дѣйност. (.. покажи ..)
-
▼▼
Подготовката ми за бѫдещата ми трудова дѣйност.
(.. скрий ..)
- Дипломирал съм магистър по математика със специалност "реален и функционалем анализ" и с допълнителна квалификация за учител по математика.
- Но прѣз цѣ̋лата си професионална кариера съм работил само като компютърен програмист и софту̌ерен инженер.
- Не трѣ̋бва да си мислите, че двугодишното ми обучение по магистърската програма е било за мене безполезно.
- Напротив.
- Бих прѣпорѫчал на всички, които имат тази възможност, да не остават с бакалавърска степен, а да си изкарат и диплома за магистър.
- Първо. Дипломата за магистърска степен е цѣнна. С нея̨ университетът увѣрява бѫдещитѣ Ви работодатели, че Вие имате умѣнията да оглавите проект.
- Вѣроятно, това е вѣ̋рно не само в областта на математиката и в компютърната индустрия, а и в други области.
- Думата "магистър" може да се прѣведе като "майстор".
- Второ. Обучение по магистърската програма на мене ми я̨ разшири общата култура.
- А за работата в компютърнара индустрия така и така е нужно постоянно човѣк да се учи на нови нѣща.
- Защото това е нова бързо развиваща се област.
- Лично аз се бѣ̋х задѫлбочил в математическата логика и основитѣ на математиката.
- Трето. Маловажно, но конкретно. Започна̨х работа на 1979-10-01 с начална заплата 120 лева.
- Ако си бѣ̋х остана̨л с бакалавърска степен, стартовата ми заплата щѣше да е 105 лева.
- Но наистина, повечето от техническитѣ умѣния, които ми бѣ̋ха̨ нужни, за да започна̨ работа в компютърната индустрия,
ги бѣ̋х усвоил прѣз обучението ми по бакалавърската програма.
- На първо мѣ̋сто, фундаментални курсове по алгебра, включително линейна алгебра.
- На второ мѣ̋сто, фундаментални курсове по ACM.
- Първа и втора част съотвѣтно в първи и втори курс.
- Съкращението ACM имаше двѣ разшифровки:
- На български: Автоматични Смѣтачни Машини.
- На английски: Automatical Computing Machines.
- И на трето мѣ̋сто, курсове по числени методи и по изслѣдване на операциитѣ (оптимиране).
- И всичко това с практически упражнения.
- Наред с фундаменталнитѣ въпроси, в курсът по ACM се усвояваха̨ и слѣднитѣ технически умѣния:
- JCL (Job Control Language) за DOS/360.
- Езицитѣ от този тип сега сѫ много по-развити и се наричат shell scripts.
- Езикът за програмиране PL/1.
- Той стана̨ "родния̌т ми език за програмиране".
- Прѣз първитѣ години на професионалната си кариера работѣх на него.
- На втория̌т национален конкурс по програмиране прѣз 1986, къдѣто спечелих голѣ̋мата награда, се състезавах на PL/1.
- Езикът за програмиране Fortran.
- Като студент го бѣ̋х усвоил добрѣ.
- Повечето практически упражнения ги правѣхме на Fortran.
- В професионалната си кариера обаче не съм ползвал Fortran.
- JCL (Job Control Language) за DOS/360.
- Отклонение. АСМ или ЕИМ?
- На професионален жаргон думата компютри никога не е била смѣсвана с думата калкулатори.
- На професионален жаргон винѫги се е употрѣбявала и думата машини, но само със значението компютри.
- И тритѣ тѣзи думи калкулатори, компютри и машини сѫ се употрѣбявали, откакто се помня̨.
- Абревиатуритѣ (съкращенията) АСМ и ЕИМ сѫ елементи на канцеларския̌т езиков стил и не се употрѣбяваха̨ в устната рѣч.
- АСМ: Автоматични Смѣтачни Машини.
- ACM: Automatical Computing Machines.
- ЕИМ: Електронни Изчислителни Машини.
- ЭВМ: Электронные Вычислительные Машины.
- Абревиатурата АСМ по-точно изразява сѫщността на компютритѣ като автоматични машини, за разлика от калкулаторитѣ.
- Но навсѣ̋къдѣ извън факултетът по математика грађанственост доби съкращението ЕИМ, което точно съотвѣтстваше на руското ЭВМ.
- Макар че абревиатуритѣ ЕИМ (ЭВМ) сѫ неточни, понеже електроннитѣ калкулатори сѫ сѫщо така електронни изчислителни машини, но не сѫ компютри.
- Отклонение в отклонението.
- Машината, която Џон Атанасов, професор по физика в университетът в Айова, е започна̨л да конструира, е била замислена като електронна изчислителна машина, но не като програмируем компютър.
- Автоматичната смѣтачна машина, която нѣмецът Конрад Цузе е конструирал, не е била електронна, но е била истински програмируем компютър.
- Край на отклоненията.
- (.. скрий я̨ подготовката ми като студент по бакалавърската програма ..) (.. скрий ги споменитѣ ми от 1975..76..77 ..) (.. свий ги ..) (.. разгъни ги ..) .. към началото ..
- ◄► (.. скрий ги споменитѣ ми от 1975..76..77 ..) (.. свий ги ..) (.. разгъни ги ..) (.. скрий я̨ третата бесѣда по споменитѣ ми от 1977 ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ►► На стаж в Търново (.. покажи ..) (.. скрий я̨ третата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
-
▼▼ На стаж в Търново
(.. скрий ..)
- Като студенти по бакалавърска програма слѣд трети курс трѣ̋бваше да изкараме нѣ̋какъв производствен стаж.
- Аз и още един колега карахме стажът си в търновския̌т териториален изчислителен център.
- Лѣ̋тото на 1977.
- Колегитѣ от териториалния̌т изчислителен център бѣ̋ха̨ така добри да ни разрѣшават да гледаме и да пипаме, без да ни дават задачи.
- Никак не ни ограничаваха̨, но и никак не разчитаха̨ на нас при развойнитѣ си и производственитѣ си задачи.
- Териториалния̌т изчислителен център бѣше оборудван с машина ЕС ЭВМ, младши модел, българско или съвѣтско производство.
- По онова врѣме не ме интересуваха̨ по-точни технически данни и нѣ̋ма как да помня̨.
- (.. скрий ги споменитѣ ми за стажът в Търново ..) (.. скрий я̨ третата бесѣда по споменитѣ ми от 1977 ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ►► Бродерия на тракащ принтер (.. покажи ..) (.. разгъна̨то ..) (.. скрий я̨ третата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
-
▼▼ Бродерия на тракащ принтер
(.. скрий ..)
(.. свий ..)
(.. разгъни ..)
- ►► Като си нѣ̋мах друга работа, рѣших да избродирам картинка на принтер.. (.. покажи ..)
-
▼▼
Прѣз лѣ̋тото на 1977,
(.. скрий ..)
- докато бѣ̋х на стаж в търновския̌т териториален изчислителен център,
- като си нѣ̋мах друга работа,
рѣших да избродирам картинка на принтер.
- По онова врѣме се разпространяваха̨ подобни бродерии.
По-извѣстнитѣ бѣ̋ха̨:- "Изплѣзил ми се е Айнщайн"
- "Маймуна в дѫлбок размисъл се почесва зад ухото"
- Календар за текущата година
- Хората си ги разпечатваха̨ и си ги лѣпѣ̋ха̨ по стѣнитѣ.
- Вѣроятно и в търновския̌т териториален изчислителен център е имало такива.
- Използваше се достѫпната печатна база с цѣл забавление.
- Такива избродирани за тракащ принтер картинки трѣ̋бваше да се гледат отдалече.
- Избрах си да избродирам слѣдната подходяща grayscale картинка:
- Бѣ̋х я̨ намѣрил в Търново в нѣ̋какво списание.
- (.. скрий го рѣшението ми да бродирам на принтер ..) (.. скрий я̨ бродерията на принтер ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ►► Принтери: тракащи, стържещи, рѫмжащи.. (.. покажи ..)
-
▼▼
Принтери: тракащи, стържещи, рѫмжащи..
(.. скрий ..)
- Съврѣменнитѣ принтери сѫ лазерни.
- Тѣ произвеђат цѣ̋ла страница наведнѫж.
- При работа рѫмжа̨т приглушено или съвсѣм тихо.
- Лазернитѣ принтери замѣстват нѣ̋когашнитѣ плотери при производството на чертежи.
- Сѣврѣменнитѣ цвѣтни лазерни принтери мога̨т да произвеђат картинки с фотографско качество.
- Да бродирам картинка на принтер се налагаше, само защото тогава - прѣз 70-тѣ, нѣ̋маше лазерни принтери.
- Друг вид принтери сѫ игленитѣ.
- При тѣ̋х пишеща глава се движи по хартията и с удари от иглички отпечатва знацитѣ.
- При движение на иглената глава по хартията се чува стържене.
- Миниатюрнитѣ иглички в печатащата глава мога̨т да изрисуват практически всѣ̋ка буква и всѣки йероглиф.
- Но картинка, произведена с такъв принтер, нѣ̋ма да има фотографско качество - тя винѫги ще изглеђа като бродерия.
- Сега стържещи принтерчета в миниатюрни размѣри се използват за печат на разни разписки и касови бѣлѣжки.
- Стигна̨хме и до линейнитѣ принтери (line printers), дѣто тракат.
- Вече нѣ̋ма такива - измѣстени сѫ от тихо рѫмжащитѣ лазерни принтери, които прѣвъзхођат линейнитѣ тракащи принтери и по бързина, и по качество.
- Прѣз 70-тѣ и 80-тѣ, повечето компютри у нас бѣ̋ха̨ оборудвани с линейни принтери полско производство.
- Такъв имаше и в търновския̌т териториален изчислителен център, къдѣто прѣз лѣ̋тото на 1977 карах стаж.
- Барабанът на тракащ линеен принтер удря хартията и с един удар отпечатва цѣ̋л ред.
- Но прѣди да удари, на всѣ̋ка позиция се установява релефната фигурка на съотвѣтната буква или цифра.
- С помощта на електрониката и фината механика.
- Такива релефни фигурки имаше по върховетѣ на лостчетата на старитѣ пишещи машини (typewriters), като при тѣ̋х тѣзи лостчета се задвижваха̨ с клавиши.
- Доколкото си спомням, линейнитѣ принтери имаха̨ по 132 знака на ред.
- Може да е имало и по-широки принтери.
- Имаше специална хартия за линейни принтери.
- Произвеђаше се с нѣ̋колко стандартни ширини.
- Обикновено една страница от такава хартия събираше 66 реда, отпечатани на линеен принтер.
- Принтерът можѣше да се програмира да удря на един и сѫщ ред повече от веднѫж, отпечатвайки различни текстове.
- Напримѣр, с втори и трети удар нѣ̋коя дума можѣше да се удебели (bold face).
- Но много удари на едно мѣ̋сто можѣха̨ да скѫсат хартията.
- Докато един стържещ иглен принтер би могъл да се настрои така, че игличкитѣ му да мога̨т да отпечатват огромно множество знаци (фирмени емблеми, китайски йероглифи), за линейнитѣ принтери това бѣше невъзможно.
- Един линеен принтер разполагаше с ограничен набор от знаци - около 90, тоест по около 90 релефни фигурки за буква или цифра на всѣ̋ка от 132-тѣ позиции на един ред.
- Латинското A и кирилското А се отпечатваха̨ с една и сѫща фигурка, разбира се.
- Да не говорим, че тѣ и се кодираха еднакво в ДКОИ/EBCDIC.
- (.. скрий ги видоветѣ принтери ..) (.. скрий я̨ бродерията на принтер ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- Съврѣменнитѣ принтери сѫ лазерни.
- ►► Перфокарти втора употрѣба (.. покажи ..)
-
▼▼
Перфокарти втора употрѣба - такива използвах..
(.. скрий ..)
- По врѣмето, когато бѣ̋х на стаж в търновския̌т териториален изчислителен център - става дума за 1977,
нѣ̋маше друг начин да се вкара нѣщо в компютърът освѣн от перфокарти.
- Става дума за компютър ЕС ЭВМ, аналог на младши модел на IBM/360.
- Тъй че както програмата ми, която да накара тракащия̌т принтер да бродира, така и даннитѣ за самата бродерия
трѣ̋бваше да се въведа̨т в компютърът от перфокарти, слѣд като програмата и даннитѣ се надупча̨т на перфокарти.
- Фирмата IBM е имала развита технология с перфокарти - некомпютърна технология - още от края̌т на 19-ти вѣк.
- Холеритова техника се е наричала. У нас не е бивала внедрявана.
- Аз работѣх с перфокарти в началото на трудовата си дѣйност.
- Бѣ̋х свикна̨л и да ги разчитам.
- Спомням си, че понѣ̋кога казвах: перфокарти мога̨ да чета̨, но магнитни ленти - не.
- От днешна гледна точка, тогавашната практика - и с перфокартитѣ, и с принтеритѣ - бѣше неоправдано прахосване на хартия.
- Обаче нѣ̋маше друг начин да се вкара нѣщо в компютърът освѣн от перфокарти.
- Не можѣше просто от клавиатурата.
- Нѣ̋маше и начин компютърът да покаже нѣщо на човѣк, освѣн излѣ̋зло на принтерът.
- Онѣзи компютри нѣ̋маха̨ достѫп до екрани.
- Рѣших да не натоварвам допълнително колегитѣ от търновския̌т териториален изчислителен център с прѣразход на ресурси.
A перфокартитѣ бѣ̋ха̨ производствен ресурс.- Рѣших за цѣлитѣ на бродерията да използвам перфокарти втора употрѣба.
- Не съм виђал нѣ̋кой друг нѣ̋кога да е ползвал перфокарти втора употрѣба.
- Както JCL/360 (the job control language, тогавашния̌т shell),
така и езицитѣ за програмиране (COBOL, Fortran, PL/1)
често изискваха кѫси редове от програмата,
и слѣдователно - перфокарти с малко перфориран текст.- Напримѣр, цѣ̋ла перфокарта бѣше нужна за означаване на "край на данни" (end-of-data), която имаше перфорация "/*" само в първитѣ двѣ позиции.
- Перфокартата имаше 80 позиции.
- Прѣрових хартиенитѣ отпадъци и намѣрих в достатъчно количество перфокарти с перфорация само в първитѣ 20 позиции.
- Използвах ги, за да перфорирам на тѣ̋х даннитѣ от бродерията.
- Използвах срѣднитѣ 50 позиции на всѣ̋ка перфокарта.
- Послѣднитѣ позиции на перфокартата не бѣ̋ха̨ надѣђни:
четецът на перфокарти (reader-ът) често се запъваше на послѣднитѣ позиции,
може би перфорационнитѣ машини не правѣха̨ добри дупки в края̌т на перфокартата.
- wikipedia: Computer programming in the punched card era
- (.. скрий ги перфокартитѣ ..) (.. скрий я̨ бродерията на принтер ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- По врѣмето, когато бѣ̋х на стаж в търновския̌т териториален изчислителен център - става дума за 1977,
нѣ̋маше друг начин да се вкара нѣщо в компютърът освѣн от перфокарти.
- ►► Пиксели на тракащ принтер (.. покажи ..)
-
▼▼
Пиксели на тракащ принтер
(.. скрий ..)
- В съврѣменни термини, форматът на бродерията нѣ̋ма как да е бил друг освѣн bitmap.
- Тази картинка тука е 129 пиксела на ширина и 185 пиксела на височина.
Това дава прѣдстава за съотношението.
Картинката, която аз избродирах за тракащ принтер,
бѣше около 100 пиксела на ширина и около 144 на височина. - Тъй като една страница на тракащ принтер бѣше 66 реда,
двѣ страници - 132 пиксела на височина, то
избродираната картинка захапваше трета страница. - Остатъкът от третата страница го запълних с календар.
- Картинката е greyscale. Затова я̨ избрах - защото не бѣше цвѣтна.
- Дълбочината ѝ (depth) сега е трудно да я̨ опрѣдѣля̨.
- Тя бѣше повече от два бита.
- Принтерът удряше два пѫти на един ред,
- като при всѣки удар във всѣки пиксел
- можѣше да има нѣ̋кой от знацитѣ "*.Ж/\#", а може би и други.
- Самото бродиране бѣше пипкава работа - само за мене.
- Доосъвършенстването на картинката бѣше още по-пипкава работа.
- То вече бѣше част от дебъгването на програмата.
- Нѣ̋ма да Ви занимавам повече с пипкави работи.
- (.. скрий ги пикселитѣ ..) (.. скрий я̨ бродерията на принтер ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ◄► (.. скрий я̨ бродерията на принтер ..) (.. свий я̨ ..) (.. разгъни я̨ ..) (.. скрий я̨ третата бесѣда по споменитѣ ми от 1977 ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ►► Програмата или по-точно програмитѣ, а бе софту̌ерът (.. покажи ..) (.. разгъна̨то ..) (.. скрий я̨ третата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
-
▼▼ Програмата или по-точно програмитѣ, а бе софту̌ерът
(.. скрий ..)
(.. свий ..)
(.. разгъни ..)
- ►► Опции за дистрибуция - как програмата се разпространяваше (.. покажи ги ..)
-
▼▼
Опции за дистрибуция - как програмата се разпространяваше
(.. скрий ги ..)
- Задачата, с която се бѣ̋х заел по врѣме на стажът ми в търновския̌т териториален изчислителен център прѣз лѣ̋тото на 1977, бѣше развойна задача, задача за производство на софту̌ер, it was a software development task.
- По замисъл срѣдствата за прѣнос и обмѣн на данни и софту̌ер при компютритѣ ЕС ЭВМ бѣ̋ха̨ перфокартитѣ и магнитнитѣ ленти.
- Обаче в практиката перфокартитѣ се използваха̨ само за първичен вход на данни и програми.
- Оборудването, нужно за използването на перфокартитѣ при прѣнос и обмѣн на данни и софту̌ер, макар и налично, бѣше занемарено и не функционираше.
- Не съм го виђал да работи нито в Търново, нито в София.
- Разбира се, тестето перфокарти, изготвено в Търново за първичен вход, можѣх да си го взема̨ в София, но не можѣх да дам копие на другиго.
- Остават магнитнитѣ ленти като единствен носител за прѣнос и обмѣн на данни и софту̌ер в онѣзи условия.
- Обаче в практиката перфокартитѣ се използваха̨ само за първичен вход на данни и програми.
- Какво да се запише на магнитна лента с цѣл дистрибуция (разпространение) на софту̌ерния̌т продукт?
- Сѫществуват три опции:
- картинката във вид подходящ за принтер,
- програмата като обектен модул, или
- програмата в изходен код на PL/1.
- Kартинката във вид подходящ за принтер.
- Съврѣменния̌т аналог е файл за картинка във формат bitmap (.bmp).
- Тогава подобен файл би се получил, ако
програмата, която отпечатва бродираната картинка на тракащ принтер,
или "генерираната програма", както ще бѫде нарѣчена тя по-долу,
се пусне, слѣд като изходът ѝ се прѣнасочи
от принтерът към магнитен носител. - Магнитна лента, съдържаща такъв файл, можѣше да се занесе в друг изчислителен център с машина ЕС ЭВМ и тракащ принтер към нея̨ и там да се разпечата, примѣрно с програмата DITTO.
- Доколкото в картинката бѣше включен и календар, този начин на разпространение не покриваше цѣ̋лата функционалност.
- Нова дистрибуция би била нужна за всѣ̋ка нова година.
- Програмата като обектен модул.
- Това бѣше "легитимния̌т вариант" за дистрибуция, ако не искате да разпространявате изходния̌т код на програмата.
- Програмата, която отпечатва бродираната картинка на тракащ принтер,
или "генерираната програма", както ще бѫде нарѣчена тя по-долу,
е програма на езикът за програмиране PL/1. - Компилаторът от PL/1 обработва тази програма и резултатът от работата му е машинен код във формат обектен модул за DOS/360.
- Този обектен модул може да се запише на магнитма лента и да се занесе в друг изчислителен център с машина ЕС ЭВМ и тракащ принтер към нея̨.
- Там този обектен модул се подава на програмата LNKEDT (Linkage Editor),
и LNKEDT произвеђа готовата за изпълнение програма,
която ще отпечата картинката, като се пусне. - Готовата за изпълнение програма, прѣди да отпечата картинката, трѣ̋бва да прочете от входът си годината за календарът.
- Забѣлѣжѣте, че на мѣстото, къдѣто програмата е получена чрѣз дистрибуция по този вариант, не е задължително да има инсталиран компилатор от езикът PL/1.
- Програмата в изходен код на PL/1
- Програмата, която отпечатва бродираната картинка на тракащ принтер,
или "генерираната програма", както ще бѫде нарѣчена тя по-долу,
е програма на езикът за програмиране PL/1. - Тя е получена като резултат - като изход - от изпълнението на
"генериращата програма", за която ще стане дума по-долу. - Прѣди да се пусне "генериращата програма" изходът ѝ трѣ̋бва да се прѣнасочи към магнитен носител (понеже устройствата за punch на перфокарти никъдѣ не функционираха̨).
- Ако този носител е магнитна лента, то тя може да се отнесе в друг изчислителен център с машина ЕС ЭВМ с тракащ принтер и с компилатор от PL/1.
- Програмата, която отпечатва бродираната картинка на тракащ принтер,
- (.. скрий ги опциитѣ за дистрибуция ..) (.. скрий го софту̌ерът за бродерията ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ►► Частитѣ на програмата (.. покажи ги ..)
-
▼▼
Частитѣ на програмата
(.. скрий ги ..)
- Задачата, с която се бѣ̋х заел по врѣме на стажът ми в търновския̌т териториален изчислителен център прѣз лѣ̋тото на 1977, бѣше развойна задача, задача за производство на софту̌ер, it was a software development task.
- Дѣйноститѣ по тази задача бѣ̋ха̨ от два типа: бродиране и програмиране.
- И в двата случая резултатитѣ сѫ тестета перфокарти.
- Пет тестета, всѣ̋ко в един екземпляр.
- Калѐ-тестѐ: тесте перфокарти с програмата за календарът.
- Тази програма извеђа календар за зададена година.
- Обикновен календар по мѣсеци и дни в седмицата.
- Тука нѣ̋ма да се спирам на нея̨.
- Подготвям друга публикация по календарнитѣ въпроси.
- Това тесте трѣ̋бва да стане част от "генерираната програма".
- Пѝксел-тестѐ: съдържа самата "бродерия" на картинката.
- Най-голѣ̋мото тесте.
- За него изполвах перфокарти втора употрѣба,
- само срѣднитѣ им позиции.
- То трѣ̋бва да влѣзе в "генерираната програма" във фо̀рмата на текстови литерали (константи).
- Прѝнтер-тестѐ: тесте перфокарти с печатащата програма.
- Тя трѣ̋бва първо да изведе на принтерът картинката, слѣд което да пусне и подпрограмата за календарът.
- Това е началната част на "генерираната програма", прѣди текстовитѣ литерали (пѝксел-тестѐто) и прѣди програмата за календарът.
- Ра̀птор-тестѐ: Генера̀[п]торът, "генериращата програма".
- Това е първата програма, която трѣ̋бва да се компилира и да се изпълни.
- Прѣди да се пусне тя за изпълнение, изходът ѝ трѣ̋бва да се прѣнасочи към магнитен носител,
- зашото на изходът ѝ ще се получи "генерираната програма",
която от своя страна- или веднага ще се компилира и ще се изпълни, за да разпечата картинката и календарът,
- или веднага ще се компилира, като получения̌т обектен модул се използва за дистрибуция,
- или пък самата "генерираната програма" ще се използва за дистрибуция.
- "Генериращата програма" (генераторът), като се пусне,
- първо изчита прѝнтер-тестѐто и го извеђа на изходът си,
- послѣ чете срѣднитѣ позиции на пѝксел-тестѐто и прѣобразува прочетенитѣ данни в програмни литерали, които праща към изходът си като част от "генерираната програма",
- и накрая̌ изчита калѐ-тестѐто и го извеђа на изходът си.
- На изходът на генераторът се получава "генерираната програма" на езикът PL/1.
- Виртуално тестѐ JCL: Това не е тесте, а набор от перфокарти.
- Тѣзи перфокарти съдържат команди на езикът JCL.
- Разполагат се правилно около и међу горнитѣ четири тестета.
- С такава перфокарта:
- Mоже да се пусне компилаторът от PL/1.
- Току-що компилираната опрограма може да се свърже (via LNKEDT) и да се пусне.
- Може входът и изходът на програма, прѣди пускането ѝ, да се прѣнасоча̨т.
- Може да се означи края̌т на тесте перфокарти,
- Може да се означи края̌т на заданието към компютърът.
- Благодаря̨ на компютър не се казва.
- Калѐ-тестѐ: тесте перфокарти с програмата за календарът.
- (.. скрий ги частитѣ на програмата ..) (.. скрий го софту̌ерът за бродерията ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ◄► (.. скрий го софту̌ерът за бродерията ..) (.. свий го ..) (.. разгъни го ..) (.. скрий я̨ третата бесѣда по споменитѣ ми от 1977 ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ◄► (.. скрий я̨ третата бесѣда за бродерията на принтер по споменитѣ ми от 1977 ..) (.. свий я̨ ..) (.. посвий или поразгъни ..) (.. разгъни я̨ съвсѣм ..) .. към началото ..
►► 5. ЕГН-то отвѫтрѣ (.. покажи я̨ четвъртата бесѣда ..) (.. разгъна̨то ..) .. към началото ..
- Ако Ви интересува как е съставено ЕГН-то и в частност как се прѣсмѣ̋та контролната цифра. ::2021-10-30 11:13::
▼▼ 5. ЕГН-то отвѫтрѣ (.. скрий я̨ четвъртата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
::2021-10-30 11:13::- ►► ЕГН-то отвън (.. покажи ..)
-
▼▼ ЕГН-то отвън
(.. скрий го прѣдговорът на четвъртата бесѣда ..)
- Когато прѣз годинитѣ 1993..98 работѣх в Банксервиз, знаѣх алгоритъмът за опрѣдѣляне на контролната цифра на ЕГН-то. Моя бѣше програмата, която я̨ провѣряваше. Сѫщия̌т алгоритъм се използваше и за контролната цифра на още два тогавашни банкови идентификатора.
- Сега на стари години цѣлта ми е да си припомня̨ този алгоритъм.
- Отклонение: Единния̌т грађански номер (ЕГН) е въведен прѣз 1977.
- Знаете ли как изглеђаше точната идентификация на човѣкът-поданик прѣди 1977?
- Ето така изглеђаше:
- Жител на еди-кой си окрѫг и на еди-коя си община.
- [Жител на еди-кое си населено мѣ̋сто.]
- Забѣлѣжѣте: жител, не просто живущ или прѣбиваващ.
- Име, презиме, фамилия.
- Дата на рађане.
- Том и страница - отбѣлѣ̋звани в тогавашнитѣ паспорти.
- ЕГН-то бѣ въведено заради компютърнитѣ технологии.
- В САЩ ролята на ЕГН-то изпълнява SSN (Social Securuty Number) - номерът за социално осигуряване.
- Има правило от теорията за базитѣ данни, че
- в идентификаторитѣ на обектитѣ не бива да се кодират други характеристики на тѣзи обекти.
- ЕГН-то не спазва това правило.
- В него сѫ кодирани: датата на рађане, полът - мѫжки или женски, и - едва сега научавам това - окрѫгът.
- Google ме насочи към програма с автор Георги Чорбаџийски.
- Ето го изходния̌т код на тази програма.
- Ето я̨ в дѣйствие.
- Програмата на Георги Чорбаџийски е написана на php, което означава, че тя се изпълнява на web-сървър.
- Аз си нѣ̋мам мѣ̋сто на web-сървър, настоящия̌т мой текст е на blogspot.com, но това е само склад за текстове и картинки. Нѣ̋мам право да пиша̨ програми, които да се изпълняват на blogspot.com.
- Имам право обаче вѫтрѣ в настоящия̌т текст да вмъкна̨ програма, която да се изпълни на Вашето устройство, на Вашия̌т лаптоп или на Вашия̌т смартфон.
- Такава програма трѣ̋бва да бѫде написана на JavaScript.
- Интерпретатор на JavaScript е вграден във всѣки съврѣменен browser, и на Вашето устройство със сигурност има browser, чрѣз който Вие ровите в мрѣжата internet.
- И тъй, занимавката ми е да прѣпиша̨ от php на JavaScript тази част от програмата на Георги Чорбаџийски, която прави анализ на ЕГН-то.
- Програмата на Георги Чорбаџийски има и друга част - генерация на ЕГН-та, тя сѫщо би могла да се прѣпише от php на JavaScript, но ще си спѣстя̨ тази тривиалност.
- .. скрий го ЕГН-то отвън .. (.. скрий я̨ бесѣдата за ЕГН-то отвѫтрѣ ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ►► Изходен код на програмата за изчисляване на контролната цифра (.. покажи ..)
-
▼▼ Изчисляването на контролната цифра в source на JavaScript
(.. скрий ..)
- Изчисляването на контролната цифра по модул 11.
Приема низ от цифри. Връща цифра или празно при невалидни данни. - .. скрий я̨ функцията на JavaScript .. (.. скрий я̨ бесѣдата за ЕГН-то отвѫтрѣ ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- Изчисляването на контролната цифра по модул 11.
-
►► Програмата за изчисляване на контролната цифра в дѣйствие
(.. покажи ..)
-
▼▼ Програмата за изчисляване на контролната цифра в дѣйствие
(.. скрий ..)
Въведете нѣ̋колко цифри, напримѣр първитѣ девет цифри на ЕГН:
Като натиснете , ще получите контролната цифра. -
►► Анализ на въведено ЕГН
(.. покажи ..)
-
▼▼ Анализ на въведено ЕГН
(.. скрий ..)
Въведете десеттѣ цифри на ЕГН-то:
- ◄► (.. скрий я̨ четвъртата бесѣда за ЕГН-то ..) (.. свий я̨ ..) (.. посвий или поразгъни ..) (.. разгъни я̨ ..) .. към началото ..
►► 6. Дисковата памет на System/360 (.. покажи я̨ петата бесѣда ..) (.. разгъна̨то ..) .. към началото ..
- Как развитието на харду̌ерът кара софту̌ериститѣ да забравя̨т старитѣ проблеми и да се захвана̨т с нови.
▼▼ 6. Дисковата памет на System/360 (.. скрий я̨ петата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ►► Нѣщо като прѣдговор, нѣщо като въведение (.. покажи го ..) (.. разгъна̨то ..)
-
▼▼
Нѣщо като прѣдговор, нѣщо като въведение
(.. скрий го ..)
(.. свий го ..)
(.. разгъни го ..)
- ►► Шапка на тояга (.. покажи ..)
-
▼▼
Шапка на тояга. Доживѣ̋х.
(.. скрий ..)
- Прѣз 2018 се пенсионирах, слѣд като придобих изикващитѣ се стаж и възраст за това.
- Пенсионирах се слѣд 40 години работа като компютърен програмист и софту̌ерен инженер.
- В сѫщност бѣ̋х много добър кодировчик.
- Много добрѣ съм се разбирал с компютритѣ.
- Влизал съм им под тенекиитѣ - при битоветѣ.
- Защото тѣ само от битове разбират.
- С компютри съм се занимавал от 70-тѣ:
- като ученик в началото на 70-тѣ;
- като студент в срѣда̀та на 70-тѣ; и
- професионално от края̌т на 70-тѣ.
- Едва ли има друга технологична област с толкова много промѣни.
- Ако кажа̨, че прѣз 70-тѣ или 80-тѣ съм можѣл да прѣдскажа̨ бѫдещето, ще излъжа̨.
- (.. скрий това, че дочаках пенсия ..) (.. скрий го въведението към петата бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ►► Какво го нѣ̋ма днес при компютритѣ. И добрѣ че го нѣ̋ма. (.. покажи ..)
-
▼▼
Какво го нѣ̋ма днес при компютритѣ - това ще е тази пета бесѣда.
(.. скрий ..)
- Нѣ̋ма бездискови компютри.
- Нѣ̋ма канални програми.
- Нѣ̋ма потрѣбителско форматиране на дисковитѣ писти.
- Нѣ̋ма значение геометрията на дисковетѣ.
- Нѣ̋ма намѣстване на файловетѣ върху дискът от потрѣбителя̌т.
- Нѣ̋ма сподѣлени цилиндри.
- Нѣ̋ма осигурен от харду̌ерът асоциативен достѫп до дискът.
- Нѣ̋ма си прѣдстава системния̌т софту̌ер за вѫтрешната структура на файловетѣ.
- Нѣ̋ма магнитни глави отдѣлно от дисковетѣ.
- То и истински дискове нѣ̋ма вече.
- SSD-тата дискове ли сѫ?
- Върша̨т работа като дискове. Минават за дискове.
- (.. скрий какво го нѣ̋ма днес ..) (.. скрий го въведението към петата бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ◄► (.. скрий я̨ петата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ►► Бездискови компютри (.. покажи ги ..)
-
▼▼
Бездискови компютри
(.. скрий ги ..)
- Срѣдношколски спомени.
- Завършил съм гимназия (11-ти клас) прѣз 1972 със специалност "изчислител-кодировчик".
- В 9-ти клас за компютритѣ Минск-2 се учѣхме да кодираме на машинен език.
- Сега това го правя̨т програми, нарѣчени асемблери.
- В дѣйствителност, учебната програма бѣше остарѣ̋ла.
- Тогава вече никой не е пишѣл компютърни програми на машинен език.
- Все пак, тѣзи упражнения бѣ̋ха̨ полезни за мене.
- В гимназията не бѣ̋х чувал за дискови устройства.
- Компютритѣ Минск-2 и Минск-22 нѣ̋маха̨ дискови устройства.
- Тѣ май нѣ̋маха̨ никакви магнитни устройства.
- Повече за компютритѣ Минск-2 - в първата бесѣда.
- Прѣз 70-тѣ в България се появиха̨ териториални изчислителни центрове.
- В нѣ̋кои имаше компютри Минск-32, които имаха̨ магнитни ленти, но не и дискове.
- Водиха̨ ни на екскурзия в София и ни показаха̨ компютър FACOM - с магнитни ленти, без дискове.
- Магнитнитѣ ленти впечатляващо се въртѣ̋ха̨.
- Прѣз 80-тѣ колеги от варненско прѣдприятие ми разказаха̨.
- Имали стар оригинален компютър IBM/System-360. Но без дискове.
- Знаѣх, че първитѣ модели на IBM/System-360 нѣ̋мат дискове.
- Работѣл стабилно и безотказно. Вършѣл им работа.
- Не искали да го замѣнят с нов модел, който нѣ̋ма как да бѫде друг освѣн от некачественото производство отсам желѣ̋зната завѣса.
- Докато бѣ̋х в казармата, съм пропусна̨л двѣ важни събития:
- оттеглянето на Brigitte Bardot, и
- появата на компютърнитѣ дискове.
- Като студент и като професионалист не съм работил на бездискови компютри.
- Разни терминални устройства може вѫтрешно да сѫ приличали на компютър.
- Обаче устройство, което не прѣдлага програмистки достѫп, за мене не е компютър.
- Забѣлѣжка_1. Съврѣменнитѣ смартфони сѫ компютри. Тѣ имат диск (макар и SSD). Прѣдлагат и програмистки достѫп за този, който знае как.
- Забѣлѣжка_2. Най-разнообразни устройства мога̨т да съдържат вграден (embedded) софту̌ер. Компютри се използват за създаването му и вѣроятно за самото вграђане.
- Споменатитѣ компютри - Минск-2, Минск-32, Facom-230–30 (ЗИТ-151), нѣ̋мат магнитно-дискови устройства.
- Нѣ̋мат енерго-независима външна памет с прѣ̋к достѫп.
- Били сѫ в експлоатация у нас прѣз 60-тѣ и 70-тѣ.
- Вече нѣ̋ма такива компютри. Слава Богу!
- (.. скрий ги бездисковитѣ компютри ..) (.. скрий я̨ петата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- Срѣдношколски спомени.
- ►► Канали (периферни процесори) и канални програми (.. покажи ги ..)
-
▼▼
Канали (периферни процесори) и канални програми
(.. скрий ги ..)
- Дисковетѣ сѫ дошли у нас със системата IBM/360 (ЕС ЭВМ).
- Забѣлѣжка_1. В прѣдния̌т раздѣл на тази бесѣда стана̨ дума, че ..
- сѫ сѫществували младши модели на IBM/360 без дискове.
- Прѣдполагам, че когато сѫ планирали системата ЕС ЭВМ, не сѫ съзнавали голѣ̋мото значение и изключителната важност на дисковетѣ.
- "Социалистическа" България извадила късмет.
- Заводът за дискове го построили в Стара Загора.
- И този завод нѣ̋колко послѣдователни години бѣше монополист в производството на магнитно-дискови устройства в пространството от Бранденбургската врата до Владивосток.
- И реализираше голѣми печалби като монополист.
- Докато другитѣ страни от СИВ (СЭВ, Comecon) не се усѣтиха̨.
- Към края̌т на 80-тѣ монополът бѣше загубен.
- Забѣлѣжка_2. В
първата бесѣда
стана̨ дума за ..
- компютърът Витоша, изработен в един екземпляр от български учени и инженери.
- Оперативната му памет (RAMът му) е бил[а] реализиран[а] на магнитен барабан.
- Да, вѣрно е, че магнитния̌т барабан (drum) е вид диск
(диск с много глави и само един цилиндър),
но в компютърът Витоша този барабан (или диск) се е ползвал като оперативна памет, а не като трайна външна памет. - Пък и тогава - прѣз 70-тѣ, бѣ̋х чувал за фамозния̌т компютър Витоша, но прѣдстава си нѣ̋мах за строежът му.
- Забѣлѣжка_1. В прѣдния̌т раздѣл на тази бесѣда стана̨ дума, че ..
- Сега чиповетѣ "централен процесор" сѫ евтино масово производство
и се влагат в най-различни издѣлия.
- Във всѣки смартфон има един-два.
- Във всѣки автомобил има десетина.
- Тогава обаче централния̌т процесор на IBM/System-360 заемаше шкаф.
- Централния̌т процесор бѣше смѣ̋тан за скѫпа част от оборудването.
- Част, която трѣ̋бва да се щади. И да се разтоварва.
- В сѫсѣдство със шкафът на централния̌т процесор на IBM/System-360 бѣ̋ха̨ разположени перифернитѣ процесори.
- В "научната" литература тѣ се наричаха̨ "периферни процесори".
- Но в дикументацията на IBM се наричаха̨ канали (channels).
- Знаѣхме ги като канали.
- Сигурно е имало различни конфигурации на каналитѣ, но аз съм виђал само една:
- Три канала: 2, 1 и 0.
- Към 2-ри канал се включваха̨ магнитно-лентовитѣ устройства.
- Към 1-ви канал се включваха̨ магнитно-дисковитѣ устройства.
- А нулев канал бѣше прѣдназначен за бавната периферия: конзола, принтер, четец на перфокарти (reader) и пънч (punch).
- Оборудването за пънчът бѣше налично и значи заплатено.
- Но работещ пънч не съм виђал.
- Във Варна, къдѣто прѣз 80-тѣ все още експлоатирани стар оригинален бездисков модел на IBM/System-360, за което стана̨ дума в прѣдишния̌т раздѣл, пънчът си работѣл безотказно.
- При бездискова система имаше по-малко възможности да се елиминира необходимостта от пънч.
- И тъй, става дума за управлението на периферията на IBM/System-360, за входно-изходнитѣ (Input/Output, I/O) операции.
- Това е работа на каналитѣ (на перифернитѣ процесори).
- Особеното в архитектурата на IBM/System-360 е, че каналитѣ сѫ процесори и изпълняват програми.
- Каналнитѣ програми сѫ на машинния̌т език на каналитѣ,
който е много различен от машинния̌т език на централния̌т процесор.
- Тѣ се състоя̨т от 8-байтови команди.
- Една такава команда се наричаше CCW (Channel Command Word, ЦеЦеВѐ).
- При писане на канални програми от потрѣбител мнемоничността е минимална.
- Появата на адресната прѣадресация (на виртуалната памет) във IBM/System-370 (виж слѣдващата бесѣда) направи писането на канални програми от потрѣбител невъзможно.
- Чрѣз канална програма може да се разглоби входен запис или да се сглоби изходен запис.
- Примѣр. Нека на входът имаме записи по 80 байта (перфокарти) за всѣки човѣк от прѣдприятието.
- Първитѣ пет байта - служебен номер.
- Слѣдващитѣ десет байта - ЕГН.
- Слѣдващитѣ тридесет байта - име, прѣзиме, фамилия.
- До края̌т на перфокартата - други данни: отдѣл. адрес, и т. н.
- Интересуват ни само служебния̌т номер и полето "име, прѣзиме, фамилия".
- Чрѣз канална програма каналът може да бѫде инструктиран да пропуска даннитѣ, които не сѫ от интерес - да не се заема оперативна памет за тѣ̋х.
- Чрѣз канална програма каналът може да бѫде инструктиран даннитѣ, които сѫ от интерес, да бѫда̨т разположени в паметта в указан ред, а не непрѣмѣнно както сѫ във входния̌т поток.
- Чрѣз канална програма може да се осѫществи асоциативен достѫп до дискът.
- На това е посветен отдѣлен раздѣл на тази бесѣда.
- Свързано е и с потрѣбителското форматиране на дисковитѣ писти, на което сѫщо е посветен отдѣлен раздѣл.
- И тогава, и сега
елементарнитѣ операции с перифернитѣ (входно-изходнитѣ) устройства
се извършват с посрѣдничество на харду̌ерни устройства, нарѣчени контролери.
- Контролерът знае особеноститѣ на съотвѣтното периферно устройство.
- Контролерът е настроен и към харду̌ернитѣ интерфейси на съотвѣтния̌т компютър.
- При компютритѣ от системата IBM/360 (както и при IBM/370), всѣки контролер бѣше свързан с нѣ̋кой канал (с нѣ̋кой периферен процесор).
- При всички по-модерни компютри контролеритѣ сѫ свързани с централния̌т процесор, а повечето от тѣ̋х имат достѫп и до оперативната памет (до RAMът).
- Нѣ̋ма вече канали (периферни процесори).
- Нѣ̋ма вече и канални програми. Слава Богу!
- Съврѣменнитѣ процесори сѫ толкова бързи, че нѣ̋ма защо да се щадя̨т и да се разтоварват.
- И ако трѣ̋бват повече от един, слагат се толкова, колкото е нужно.
- Защо тѣзи процесори трѣ̋бва да имат толкова различни архитектури и различни машинни езици?
- Сега сѫществуват обособени части на системния̌т софту̌ер, нарѣчени
драйвери (drivers).
- Всѣ̋ко периферно харду̌ерно устройство (drive) си върви в комплект с drivers (драйвери) за всѣ̋ка компютърна архитектура и платформа.
- Драйверът, който е софту̌ер, се разбира с контролерът, който е харду̌ер.
- Драйверът подава команди на контролерът, който знае как да накара устройството да изпълни командата.
- Драйверът получава отчет от контролерът за изпълнението на задачата.
- Драйверът получава отчет от контролерът за текущото състояние на устройството.
- Тогава на нивото на сегашнитѣ драйвери имаше системен софту̌ер, нарѣчен методи на достѫп (access method).
- Каналнитѣ програми бѣ̋ха̨ части от методитѣ на достѫп.
- Имахме си работа с три метода на достѫп:
- послѣдователен (sequential),
- прѣ̋к (direct), и
- индексно-послѣдователен (indexed sequential, ISAM).
- (.. скрий ги каналнитѣ програми ..) (.. скрий я̨ петата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- Дисковетѣ сѫ дошли у нас със системата IBM/360 (ЕС ЭВМ).
- ►► Потрѣбителското форматиране (.. покажи го ..) (.. разгъна̨то ..)
-
▼▼
Потрѣбителското форматиране
(.. скрий го ..)
(.. свий го ..)
(.. разгъни го ..)
- Потрѣбителското форматиране на дисковитѣ писти съм го срѣщал само в системитѣ IBM/360 и IBM/370.
- Да, на потрѣбителитѣ им се налагаше да форматират дискети, но тогава се прилагаше фабрично форматиране, стандартно форматиране.
- При форматиране на дискета потрѣбителя̌т не указваше как тя да бѫде форматирана.
- За да се разбере проблемът с форматирането на дисковитѣ писти,
(.. покажи ..)
(.. покажи ..) първо трѣ̋бва да имаме прѣдстава за магнитнитѣ ленти. - За да се разбере проблемът с форматирането на дисковитѣ писти,
(.. скрий ..)
първо трѣ̋бва да имаме прѣдстава за магнитнитѣ ленти. (.. скрий ..)- Понеже една неформатирана писта на магнитен диск е като магнитна лента. Е да, доста по-кѫса.
- Човѣк може да види и даже да прочете запис върху перфолента или перфокарта.
Човѣк може да види баркод или QR-код.
Но не и магнитен запис. Човѣк нѣ̋ма сѣтива за това. - Стандартнитѣ магнитни ленти от 70-тѣ и 80-тѣ бѣ̋ха девет-пистови (девет-пѫтечкови, 9 tracks).
- Това, което се виђаше като магнитна глава на устройството, в дѣйствителност бѣше букетче от девет глави за запис и четене.
- Отклонение_1. Осем плюс едно е девет.
- Или броя̌т на пиститѣ при стандартнитѣ магнитни ленти бѣше девет, защото в индустрията вече бѣше установено понятието байт като редица от осем бита.
- Или понятието байт като редица от осем бита е възникна̨ло заради установилия̌т се деветпистов стандарт при магнитнитѣ ленти.
- Как да е. Връзка има.
- При най-простия̌т метод на запис (NRZ, 800bpi), можете да си прѣдставяте магнитната лента като девет-пѫтечкова перфолента.
- На всѣ̋ка позиция - 0 или 1 - има или нѣ̋ма дупка.
- На всѣки ред - девет позиции, девет бита.
- Деветия̌т бит е за контрол по нечетност (odd parity).
- Ако на редът, който е съставен от девет бита, нѣ̋ма нито една дупка - нито една единица, то на този ред нищо не е записано.
- Защото дори байт, съставен от осем нулеви бита, се записва с единица в пѫтечката за контрол по нечетност.
- Броя̌т на единицитѣ (на дупкитѣ) на един ред трѣ̋бва да е нечетен.
- Редоветѣ, къдѣто има нѣщо записано, трѣ̋бва да сѫ групирани в записи (records).
- Понѣ̋кога вмѣсто запис (record) се казваше блок (block).
- Имаше ограничения за дължината на един запис.
- Устройството се сърдѣше, ако записът е по-кѫс от 18 байта.
- Не се приемаха̨ и твърдѣ дълги записи, защото лентата може много да се разпъне на такова мѣ̋сто при скоростта на четене.
- Устройството не може да си почива вѫтрѣ в един запис (вѫтрѣ в един блок).
- Освѣн това, на самия̌т край на блокът има един или два контролни байта.
- Устройството си почива међу записитѣ (међу блоковетѣ).
- За цѣлта међу записитѣ се оставя празнина (gap), достатъчно дълга, така че да даде възможност на устройството да спре међу два записа и да може слѣд това да ускори до скорост за четене прѣди достигане на слѣдващия̌т блок.
- Отклонение_2. Чист спирт за почистване на магнитнитѣ глави.
- Главитѣ на магнитно-дисковитѣ устройства сѫщо се замърсяваха̨, но почистването им изискваше специална квалификация и се правѣше при редовна харду̌ерна профилактика.
- А да чистя̨ главитѣ на магнитно-лентовитѣ устройства се е налагало и на мене.
- Чист спирт винѫги бѣше на разположение за цѣлта в нѣ̋кой шкаф или чекмеџе - знаѣше се къдѣ, заедно с чисто парцалче.
- Имаше едно българо-съвѣтско прѣдприятие на софийската улица Александър Стамболийски.
- Там дошъл на работа ново-назначен директор - прямо из Москвы или прямо из Минска - не знаю точно.
- И първата му работа била да провѣри как се съхранява чистия̌т спирт, нужен за почистване на магнитнитѣ глави.
- Наложило се да му обясняват, че никой в България нѣ̋ма да пие чист спирт при наличието на толкова много спиртни напитки.
- Ролкитѣ с магнитни ленти се произвеђаха̨ в три стандарни дължини: 600ft, 1200ft и 2400ft.
- Най-голѣмитѣ ролки не се събираха̨ в дамска чанта.
- Архив на пълен 20-мегабайтов дисков пакет IBM/2314 (ЕС-5061) не се събираше на по-малка ролка.
- Но можѣше да се сложи втора ролка.
- Началото и края̌т на лентата се маркират със свѣтло-отразителни станиолчета, които датчикът на устройството засича.
- Слѣд станиолчето в края̌т на лентата трѣ̋бва да има мѣ̋сто за още нѣ̋колко записа (до шест), за да завърши файлът нормално.
- Магнитната лента е с послѣдователен достѫп. Строго послѣдователен.
- Не може да се зададе команда "прѣвърти 100 ft (фута) и почни да четеш (или да пишеш) оттам!"
- Нѣ̋ма жалон за 100 ft (фута).
- Обаче може да се зададе команда "пропусни 100 записа (100 блока) и почни да четеш (или да пишеш) оттам!"
- Устройството не може да пропусне 100 записа, без послѣдователно да ги прочете.
- Да ги пропусне - значи прочетенитѣ данни да не се пращат към оперативната памет.
- Наред с обикновенитѣ записи, имаше и специален особен запис върху магнитната лента, нарѣчен TM (tape mark).
- Устройството изпълняваше такива команди:
- Вземи от този адрес на физическата памет толкова послѣдователни байта и ги запиши върху лентата на текущата позиция.
- Запиши TM върху лентата на текущата позиция.
- Пропускай всички записи върху лентата, докато стигнеш TM.
- Пропускай записи върху лентата, докато стигнеш TM, но най-много толкова записа.
- Прочети от текущата позиция запис, докладвай дали е TM, и ако не е, докладвай дължината му, а даннитѣ запиши по този адрес на физическата памет.
- Мило устройство, знам, че току-що си прочело TM. Върни се, моля̨, една стѫпка назад, така че слѣдващия̌т запис да покрие tape-mark-ерът.
- Rewind! Прѣвърти лентата и я̨ позиционирай в началото, на началното станиолче.
- И това сѫ всички команди, които устройството изпълнява.
- При всѣ̋ка команда, ако устройството засѣче крайното станиолче, то е длъжно да докладва, че лентата е на привършване.
- На първо приближение може да се приеме, че файлът върху магнитна лента
прѣдставлява редицата от записи међу два tape-mark-ера.
- Два послѣдователни tape-mark-ера (без други записи међу тѣ̋х - празен файл) означава, че по-нататък на лентата нѣ̋ма нищо записано.
- (.. скрий ги магнитнитѣ ленти ..) (.. скрий го потрѣбителското форматиране ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- И тъй, магнитната лента е със строго послѣдователен достѫп и без прѣдварително форматиране.
- При всѣ̋ка операция за запис върху лентата мѣ̋стото на записът "се форматира" наново.
- Магнитно-дисковитѣ устройства прѣдоставят прѣ̋к достѫп до всѣки запис върху дискът.
- За цѣлта записитѣ трѣ̋бва прѣдварително да сѫ създадени.
- Създаването на записитѣ върху дисковата писта се нарича форматиране на пистата.
- Слѣд това, по врѣме на нормалната експлоатация, даннитѣ вѫтрѣ в създаденитѣ при форматирането записи се прѣзаписват.
- Разбира се, при форматиране на пистата, всичко, което е било записано на нея̨ прѣди това, безвъзвратно се губи.
- При системитѣ IBM/360 и IBM/370 всѣ̋ка дискова писта може да се форматира отдѣлно от другитѣ писти,
и то по указан от потрѣбителя̌т начин.
- Форматирането на една писта не засѣ̋га другитѣ писти.
- Различнитѣ писти мога̨т да имат различно форматиране.
- Различнитѣ писти мога̨т да имат различно форматиране, извършено по различно врѣме.
- Различнитѣ писти мога̨т да имат различно форматиране, заявено от различни потрѣбители.
- Потрѣбителскитѣ заявки за форматиране се указваха̨ чрѣз JCL (Job Control Language).
- При старитѣ дискови пакети се виђаше процѣпът, прѣз който се прокрадва свѣтлината, която устройството засича.
- Този процѣп маркира началото и края̌т на всѣ̋ка писта.
- Процѣпът е един за цѣлия̌т дисков пакет.
- Пистата прѣдставлява окрѫжност. Тя започва и свършва на мѣ̋стото, маркирано от процѣпът.
- Това е фабрична маркировка.
- Форматирането си има работа с вѫтрешността на пистата.
- Къдѣ тя почва и къдѣ свършва - това е фабрично опрѣдѣлено.
- И тъй, във вѫтрешността на дисковата писта има записи (records) или блокове (blocks).
- Колко записа и колко байта да е един запис - както е указано в заявката за форматиране на пистата.
- Един запис върху дискът се състои от три части - жалон, индекс и данни.
- Међу тѣзи части има празнини.
- Цѣлта им е да дада̨т врѣме на "електрониката" да рѣши дали записът е от интерес в дадения̌т момент.
- Жалонът. Съдържанието му е слѣдното:
- номерът на цилиндърът (при IBM-2311 и IBM-2314: число от 0 до 199),
- номерът на дисковата повърхност (surface) или номерът на пистата вѫтрѣ в цилиндърът (при IBM-2314: число от 0 до 19), и
- номерът на записът (на блокът) върху пистата.
- Горнитѣ три числа съставляват дисковия̌т адрес на блокът (на записът).
- Освѣн дисковия̌т адрес, в жалонът е указана дължината на индексът и дължината на даннитѣ.
- Ако дължината на индексът е нула, индекс нѣ̋ма.
- Дължината на даннитѣ не може да е нула - данни винѫги има.
- Индексът.
Даннитѣ от него се ползват при асоциативния̌т достѫп и при индексно-послѣдователнитѣ файлове.
- Има си специален раздѣл за това.
- Ако пистата не е част от индексно-послѣдователен файл, в блокът нѣ̋ма индекс.
- Даннитѣ. Дължината на блокът с данни се задава при форматиране.
- Блоковетѣ данни върху една писта обикновено сѫ еднакво дълги.
- Защото нѣ̋ма лесен начин да се укаже друго.
- Ако магнитно-дисковото устройство получи команда ..
- за позициониране (за четене или за писане) на опрѣдѣлен дисков адрес,
- съставен от номер на цилиндър, номер на повърхност и номер на блок,
- устройството първо позиционира (с придвижване)
- гребенът с магнитнитѣ глави на указания̌т цилиндър
- и веднага идентифицира указаната писта.
- Но не чака да мине физическия̌т свѣтлинен маркер за началото на пистата.
- Веднага чете всѣки срѣщна̨т жалон и сравнява дисковия̌т адрес.
- Ако е този, който е указан в командата,
- значи устройството е на точното мѣ̋сто за четене или за писане.
- Забѣлѣжка_1: При асоциативния̌т достѫп вмѣсто дисков адрес в командата се дава тѫрсен индекс и устройството по подобен начин сравнява индекси, а не адреси.
- Забѣлѣжка_2: Ако жалон с тѫрсения̌т адрес не се намѣри върху идентифицираната писта, има възможност при форматиране да е било прѣцѣнено, че съотвѣтната част от пистата е поврѣдена и записът да е бил прѣнасочен към резервна писта. Там - на резервната писта, жалонът съдържа оригиналния̌т дисков адрес.
- Как да е.
- Отдавна нѣ̋ма потрѣбителското форматиране. Слава Богу!
- Него го имаше само в системитѣ IBM/360 и IBM/370.
- При всички други компютри дисковитѣ писти се форматират еднакво и това не може да бѫде промѣнено от потрѣбителя̌т.
- Винѫги без индекс и в блокове по 512 байта (по половин килобайт).
- За всѣки тип диск броя̌т на блоковетѣ върху една писта е фиксиран и се знае.
- (.. скрий го потрѣбителското форматиране ..) (.. свий го ..) (.. разгъни го ..) (.. скрий я̨ петата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- Потрѣбителското форматиране на дисковитѣ писти съм го срѣщал само в системитѣ IBM/360 и IBM/370.
- ►► Геометрията на дискът (.. покажи я̨ геометрията ..)
-
▼▼
Геометрията на дискът
(.. скрий я̨ геометрията ..)
- Стана̨ дума, че освѣн в системитѣ IBM/360 и IBM/370,
- при другитѣ компютри всички писти на един диск съдържат
- един и сѫщ брой блокове (записи), всѣки по половин килобайт.
- Този брой е фиксиран и се знае за всѣки тип диск.
- Напримѣр, дисковетѣ от тип IBM-2314 (ЕС-5061),
когато работя̨т с компютър PDP-11 (СМ-4),- имат по 10 (десет) блока на всѣ̋ка писта,
- по половин килобайт (512 байта) всѣки.
- 200 цилиндъра,
- по 20 писти на цилиндър: 4000 писти общо,
- по 10 блока на писта: 40000 блока общо,
- по половин килобайт на блок: 20000 килобайта, почти 20 мегабайта.
- Ако знаем броя̌т на цилиндритѣ (в примѣрът 200),
- броя̌т на пиститѣ на един цилиндър (броя̌т на дисковитѣ повърхности, в примѣрът 20),
- и броя̌т на блоковетѣ върху една писта (в примѣрът 10),
- значи знаем геометрията на дискът.
- В условията на примѣрът, ако знаем адресът на блок върху дискът
- разположен на цилиндър номер CylNo (число от 0 до 199),
- повърхност номер SurfNo (число от 0 до 19), и запис номер RecNo (число от 0 до 9),
- то по формулата ( ( ( CylNo * 20 ) + SurfNo ) * 10 ) + RecNo
- ще получим число от 0 до 39999.
- Това число се нарича номер на дисков блок.
- Именно то се ползва вече за адресиране на дисковата памет.
- И обратно, пак в условията на примѣрът, ако знаем
- номерът на дисков блок - число от 0 до 39999, което ще означим BlockNo,
- като раздѣлим BlockNo на броя̌т на блоковетѣ на писта (10),
- ще получим остатък RecNo (число от 0 до 9) и частно TrackNo.
- Слѣд това, като раздѣлим TrackNo на броя̌т на дисковитѣ повърхности (20),
- ще получим остатък SurfNo (число от 0 до 19) и частно CylNo - номерът на цилиндърът.
- В условията на примѣрът, като изключим дисковия̌т драйвер,
остана̨лата част от софту̌ерът на PDP-11
не се интересува от геометрията на дискът и от горнитѣ двѣ смѣтки. - Дисковия̌т драйвер на PDP-11, който е софту̌ерен компонент,
му се налага да знае геометрията на дискът
и да може да прави тѣзи двѣ смѣтки,- защото харду̌ерът е взет от IBM/System-360 и
дисковия̌т контролер, който е харду̌ерен компонент,
не знае как сѫ форматирани пиститѣ. - Вижте прѣдишния̌т раздѣл за форматирането.
- защото харду̌ерът е взет от IBM/System-360 и
- Обаче ако харду̌ерния̌т компонент "дисков контролер"
е проектиран така, че да знае геометрията на дискът, то на никой софту̌ерен компонент не му трѣ̋бва да я̨ знае.
- Софту̌ерът трѣ̋бва да знае общия̌т брой на дисковитѣ блокове, които по размѣр сѫ стандартни.
- Софту̌ерът работи само с номера на дискови блокове, които сѫ числа в плътен диапазон от нула нагорѣ.
- Софту̌ерът не се интересува вече от геометрията на дискът. Слава Богу!
- А пък при устройствата от тип SSD геометрията на дискът вече нѣ̋ма никакъв смисъл.
- (.. скрий я̨ геометрията на дискът ..) (.. скрий я̨ петата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- Стана̨ дума, че освѣн в системитѣ IBM/360 и IBM/370,
- ►► Разположението на файловетѣ върху дискът - задача на потрѣбителя̌т (.. покажи го ..) (.. разгъна̨то ..)
-
▼▼
Разположението на файловетѣ върху дискът - задача на потрѣбителя̌т
(.. скрий го ..)
(.. свий го ..)
(.. разгъни го ..)
- При IBM/System-360 една писта винѫги се назначава на един файл цѣ̋лата.
- Не е възможно част от една писта да принадлѣжи към един файл, а друга част от сѫщата писта - към друг файл.
- Пистата е най-малката единица - най-малката част от дискът - която може да бѫде назначена към файл.
- От друга страна, един файл може да заема нѣ̋колко писти.
- Даже много писти.
- И тѣзи писти може да не сѫ сѫсѣдни.
- Нѣщо повече: един файл може да заема писти от нѣ̋колко диска.
- Такова нѣщо май нѣ̋ма в съврѣменнитѣ файлови системи -
- от какъв зор един файл ще захапва и друга файлова система.
- Един диск от гледна точка на файловото си съдържание се наричаше том (volume).
- Той си имаше таблица на съдържанието VTOC (volume table of contents).
- Само една на том - една на диск - само една "директория".
- Тя донѣ̋къдѣ е прѣдшественик на сетнешнитѣ директории.
- Всѣки файл на дискът бѣше прѣдставен в таблицата VTOC.
- Идентифицира се с името си - до 44 байта без опрѣдѣлена структура.
- Кои дискови писти файлът заема и в какъв ред.
- Има ли файлът продължение на друг диск и дали това тука е продължение.
- И още данни за файлът - за вѫтрешната му структура,
- на което е посветен слѣдващ раздѣл.
- С томове и файлове се оперираше на езикът JCL (Job Control Language).
- Ако е нужен достѫп до сѫществуващ файл, указва се името на файлът и съдържащия̋т го том, и системния̌т софту̌ер го намира.
- Обаче когато се създава нов файл, системата DOS/360 не можѣше сама да го сложи нѣ̋къдѣ.
- При създаване на нов файл под DOS/360 потрѣбителя̌т трѣ̋бваше явно да укаже на кои писти файлът да бѫде разположен.
- Слава Богу! Такова нѣщо вече нѣ̋ма.
При всички нови системи системния̌т софту̌ер сам намира къдѣ да разположи нов файл. - Да забравим за системитѣ IBM/360 и IBM/370.
- Там потрѣбителя̌т на файлът, към който файл е назначена дискова писта, отговаря за форматирането ӥ - на колко блока по колко байта пистата да се раздѣли.
- В по-новитѣ компютърни системи нѣ̋ма такова нѣщо като потрѣбителско форматиране.
- В по-новитѣ компютърни системи всѣ̋ка писта е била подложена на стандартно форматиране -
- фиксиран брой блокове по половин килобайт (512 байта).
- В по-новитѣ компютърни системи на файловетѣ се назначават отдѣлни блокове,
- а не непрѣмѣнно цѣли писти.
- Геометрията на дискът вече нѣ̋ма значение.
- Има начин - има механизъм, по който за всѣки файл да се укаже кои дискови блокове той заема и в какъв ред.
- Това описание на разпрѣдѣлението на дисковитѣ блокове по файлове се съдържа в специален файл - най-важния̌т файл на дискът, нарѣчен индексен файл.
- Блоковетѣ се идентифицират или все едно се адресират с номерата си (BlockNo).
- Номерът на блокът (или все едно адресът му) е число в плътен интервал от нула нагорѣ.
- В нѣ̋кои дискови файлови системи се разпрѣдѣлят не стандартни блокчета по половин килобайт (512 байта), а групички ор сѫсѣдни блокчета (1024 байта, 2048 байта, 4096 байта).
- Понѣ̋кога това е съгласуването със системата на виртуалната памет (вижте шестата бесѣда).
- Отклонение.
Общо описание на дискова файлова система
(.. покажи го отклонението ..)
(.. покажи ..) с автоматично поблоково назначаване на дисковото пространство. - Отклонение.
Общо описание на дискова файлова система
(.. скрий го отклонението ..)
с автоматично поблоково назначаване на дисковото пространство. (.. скрий ..)- wiki/List_of_file_systems Не става дума за IBM/360 или IBM/370.
- В основата е индексния̌т файл - най-важния̌т файл върху дискът.
- Има и други файлове - важни части на файловата система:
- битмап на свободнитѣ елементи от индексния̌т файл,
- файл, съставен от свободнитѣ блокове на дискът,
- файл, съставен от поврѣденитѣ дискови блокове,
- изпълним код на операционната система, и
- главна директория.
- Обръщението към всѣки от горѣспоменатитѣ файлове е по номер, а не по нѣ̋какво име.
- Тоест, всѣки от горѣспоменатитѣ файлове си има фиксиран номер - нѣ̋какво малко число.
- Създаването на файловата система - създаването на тѣзи основни файлове - се нарича инициализация, а не форматиране.
- Форматирането е стандартно, фабрично и не е проблем на софту̌ерът.
- Индексния̌т файл се състои от плътно разположени елементи (entries)
с еднаква фиксирана дължина.
- Тѣзи елементи се номерират с послѣдователни числа от нула нагорѣ.
- Достѫпът до елемент на индексния̌т файл е по номер.
- Достѫпът до елемент на индексния̌т файл е бърз - мѣ̋стото му се изчислява лесно.
- Един елемент на индексния̌т файл:
- може да бѫде свободен, или
- може да съдържа описание на файл, или
- може да съдържа продължение на описанието на файл.
- Послѣдователнитѣ битове от битмап-файлът съотвѣтстват на послѣдователнитѣ елементи на индексния̌т файл.
- Съотвѣтния̌т бит показва дали елементът на индексния̌т файл е свободен.
- Когато един елемент на индексния̌т файл
съдържа описание на файл, тогава:
- Номерът на този елемент се ползва като номер на файл.
- Не само за горѣ-споменатитѣ "важни" файлове, но и за всѣки файл.
- Описанието на един файл,
съдържащо се в елемент от индексния̌т файл, се състои от слѣднитѣ части:
- Неформална част. Напримѣр име и разширение.
- Не е от интерес в този контекст.
- Затова тази информация е неформална.
- Типът на файлът. Важно.
- Обикновен файл (създаден от потрѣбител).
- Директория (directory, folder).
- "Важен" файл између горѣспоменатитѣ, поддържан от файловата система и скрит от потрѣбителитѣ.
- Спецификация на правата за достѫп. Важно.
- Кой има право на достѫп до файлът.
- И какъв вид достѫп му се разрѣшава.
- Датировки. Timestamps. Важно.
- Врѣмето на създаване на файлът.
- Врѣмето на послѣдното му измѣнение.
- Разположението на файлът върху дискът. Най-важното.
- На кои дискови блокове е разположен файлът.
- Послѣдователно се описват всички фрагменти на файлът.
- Пореден фрагмент от толкова дискови блока, започващ от този дисков блок.
- Ако файлът е силно фрагментиран, описанието му трѣ̋бва да продължи в друг елемент на индексния̌т файл.
- Ако елемент на индексния̌т файл съдържа продължение на описанието на файл, номерът му не се ползва като номер на файл.
- Неформална част. Напримѣр име и разширение.
- Самия̌т индексен файл като "важен" файл си има фиксиран номер (нула или едно) и чрѣз своя̌т си елемент с този номер сам описва разположението си.
- На фиксирано мѣ̋сто в началото на всѣки елемент от индексния̌т файл
има число, нарѣчено послѣдователен контролен номер.
- Всѣки пѫт, когато този елемент бива назначаван да съдържа описанието на нѣ̋кой файл, това число - послѣдователния̌т контролен номер, се увеличава с единица.
- Към самия̌т файл, чието описание се съдържа в елементът, се обръщаме не просто чрѣз номерът на елементът, а чрѣз двойка номера: номерът на елементът и послѣдователния̌т контролен номер.
- Така се прави, за да се обезсиля̨т обръщения към стари вече изтрити файлове, които сѫ ползвали за описанието си сѫщия̌т елемент от индексния̌т файл.
- Свободнитѣ дискови блокове се оформят като отдѣлен "важен" файл.
- "Разположението" му се описва чрѣз индексния̌т файл, подобно на всѣки друг файл.
- Само файловата система има достѫп до него, и то по номерът му.
- Ако нѣ̋кой обикновен файл бѫде изтрит от потрѣбителя̌т, неговитѣ блокове се добавят към този файл.
- Този файл бива прѣтѫрсван от разни програми за възстановяване на изтрити данни.
- Поврѣденитѣ (лошитѣ) дискови блокове се оформят като друг отдѣлен "важен" файл.
- "Разположението" му се описва чрѣз индексния̌т файл, подобно на всѣки друг файл.
- Само файловата система има достѫп до него, и то по номерът му.
- Изпълнимия̌т код на операционната система ..
- обикновено се оформя като "важен" файл.
- Но това не е задължително за самата файлова система.
- При начално заређане (boot) първия̌т софту̌ер е с минимални умѣния.
- За не го караме да се рови по директории, оформяме това, което трѣ̋бва да се прочете при начално заређане от дискът в оперативната памет, като файл с малък фиксиран номер.
- Просто за улеснение.
- Главната директория (master directory) е втория̌т по "важност" файл
слѣд индексния̌т файл.
- От "важнитѣ" файлове, само той се виђа от потрѣбителитѣ.
- Другитѣ "важни" файлове сѫ изключително за "служебно ползване".
- Макар да е "важен" файл, достѫпен по фиксиран малък номер, главната директория се виђа от потрѣбителитѣ, защото е директория (directory, folder).
- Файловетѣ, които потрѣбителитѣ виђат и с които тѣ оперират, биват
- обикновени файлове (ordinary files), и
- директории (directories, folders).
- Другитѣ типове (напримѣр линковетѣ) за простота ги пропускам.
- И директориитѣ, и обикновенитѣ файлове сѫ все файлове и си имат описание в нѣ̋кой елемент на индексния̌т файл.
- Номерът на този елемент служи за номер на файлът.
- Двойката числа номерът на елементът от индексния̌т файл и послѣдователния̌т контролен номер служа̨т за прѣпратка (за обръщение) към файлът.
- Това важи за всѣки файл: обикновен файл, директория или пък "важен" файл.
- Файловата система обикновено не обръща внимание на вѫтрешното съдържание на
обикновенитѣ файлове.
- С обикновенитѣ файлове се занимава потрѣбителския̌т софту̌ер.
- Обаче директориитѣ се поддържат от файловата система.
- Файловата система знае вѫтрешната структура на директориитѣ.
- А тази структура е слѣдната:
- [точка като име на файл], прѣпратка към самата директория, която си е файл
- [двѣ точки като име на файл], прѣпратка към директорията на по-горно йерархично ниво
- име на файл, прѣпратка към файлът
- име на друг файл, прѣпратка към файлът
- и така нататък за много файлове.
- Първитѣ два реда се слагат за удобство при обхођане на йерархията от директории.
- За името на файлът може да има нѣ̋какви ограничения, може и да нѣ̋ма.
- Прѣпратката към файлът прѣдставлява двойката числа номерът на елементът от индексния̌т файл и послѣдователния̌т контролен номер.
- Директориитѣ създават йерархична структура на файловата система.
- Потрѣбителитѣ имат прѣдстава за нея̨.
- Един потрѣбител или създава нов обикновен файл, или създава нова директория.
- Каквото и да създава, потрѣбителя̌т трѣ̋бва да го сложи в нѣ̋коя сѫществуваща директория.
- Потрѣбителя̌т не може да създава файлове извън сѫществуващитѣ директории.
- (.. скрий го отклонението ..)
- (.. скрий го разпрѣдѣлянето на дисковото пространство ..) (.. свий го ..) (.. разгъни го ..) (.. скрий я̨ петата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- При IBM/System-360 една писта винѫги се назначава на един файл цѣ̋лата.
- ►► Сподѣлени цилиндри (.. покажи ги ..)
-
▼▼
Сподѣлени цилиндри
(.. скрий ги ..)
- Дисковата памет на System/360: това е заглавието на тази пета бесѣда.
- При това положение не би било редно да подмина̨ такава техника като сподѣленитѣ цилиндри (shared cylinders).
- Ако при нѣ̋коя обработка участват два файла, напримѣр входен и изходен, и двата на един и сѫщ диск, при онова бѣдно буфериране заради онази оскѫдица на оперативна памет, бѣше възможно обработката да се бави заради движението на дисковитѣ магнитни глави међу цилиндритѣ, както и да се причини върхово натоварване на механизмитѣ на дисковото устройство.
- В такива случаи се налагаше да се прилага техниката сподѣлени цилиндри.
- Както бе казано в прѣдишния̌т раздѣл, потрѣбителя̌т (програмистът, технологът на обработката) трѣ̋бва да указва къдѣ по дискът да се разполагат файловетѣ.
- При техниката сподѣлени цилиндри долнитѣ писти на нѣ̋колко послѣдователни цилиндъра се назначават на единия̌т файл, а горнитѣ писти - на другия̌т.
- Така се намалява движението на гребенът с магнитнитѣ глави.
- Обработката може да мине нѣ̋колко пѫти по-бързо, без трѣ̋сък и вибрации.
- Отдавна вече дисковото пространство се разпрѣдѣля автоматично.
Геометрията на дискът отдавна нѣ̋ма значение.
Оскѫдицата на оперативна памет е прѣодолѣ̋на.
Осигурява се подходящо буфериране на операциитѣ за вход и изход.
Нѣ̋ма вече нуђа от техниката със сподѣленитѣ цилиндри. Слава Богу! - (.. скрий ги сподѣленитѣ цилиндри ..) (.. скрий я̨ петата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ►► Асоциативен достѫп до дискът (.. покажи го ..) (.. разгъна̨то ..)
-
▼▼
Асоциативен достѫп до дискът
(.. скрий го ..)
(.. свий го ..)
(.. разгъни го ..)
- Дисковата памет на System/360: това е заглавието на тази пета бесѣда.
- При това положение не би било редно да подмина̨
- индексно-послѣдователнитѣ файлове и
- индексно-послѣдователния̌т метод на достѫп (ISAM: indexed-sequential access method).
- Съвсѣм нормално е компютритѣ да прѣдлагат и да осѫществяват асоциативен достѫп.
- Напримѣр, да се намѣря̨т даннитѣ за човѣк със зададено ЕГН.
- Или да се намѣри файл на дискът със зададено име.
- Но това се осѫществява от софту̌ерът.
- При индексно-послѣдователния̌т метод на достѫп обаче
асоциативния̌т достѫп е подпомогна̨т от харду̌ерът.
- При системитѣ IBM/360 и IBM/370 дисковитѣ писти се форматират според изискванията на потрѣбителя̌т.
- Пиститѣ на индексно-послѣдователния̌т файл, който ще съдържа данни за хора и който ще има ЕГН-то за ключ, ще бѫда̨т форматирани така, че међу жалонът и блокът с данни да има индекс с дължина 10 байта.
- Записитѣ в индексно-послѣдователния̌т файл сѫ сортирани (подредени) по ключ, в случая̌т по ЕГН.
- Устройството може да получи команда "тѫрси на тази писта запис с това съдържание на индексът".
- Устройството ще докладва "индекс с това съдържание току-що мина̨ под моята глава".
- И ще получи нова команда "прочети блокът с данни, който слѣдва".
- Колкото и бързо да се върти дискът, комуникацията устройство-контролер-канал е по-бърза.
- Когато блокът с данни стигне четящата глава на устройството, то вече ще знае, че трѣ̋бва да ги прочете даннитѣ.
- Ще знае, че даннитѣ за човѣкът със зададеното ЕГН сѫ намѣрени.
- Може и друго да се случи.
- Устройството може да докладва "индекс със съдържание, по-голѣ̋мо от тѫрсеното, прѣмина̨ под моята глава".
- Тогава каналът и каналната му програма ще си направя̨т изводът, че на тази писта такъв запис нѣ̋ма.
- Към един индексно-послѣдователен файл е възможен и
послѣдователен достѫп.
- Програмата ще получи послѣдователно един слѣд друг всички записи от файлът (напримѣр за всички хора, за които има данни във файлът), и то сортирани по ключ (подредени по ЕГН).
- Все едно, че програмата чете сортиран файл от магнитна лента.
- Обикновено, един индексно-послѣдователен файл се пълни
при послѣдователен достѫп.
- Индексно-послѣдователния̌т файл трѣ̋бва прѣдварително да е създаден на дискът с нужното форматиране.
- Записитѣ прѣдварително се подготвят като послѣдователен файл на магнитна лента.
- Сортирани! Подредени по ключ.
- Ако записитѣ, които ще запълня̨т индексно-послѣдователния̌т файл, не сѫ прѣдварително сортирани, резултатът може да е отчайващ.
- Слѣд първоначалното запълване на индексно-послѣдователния̌т файл, новопостѫпващитѣ записи си намират мѣ̋стото в подредбата по ключ, но свалят ефективността - и заемат повече мѣ̋сто, и се намират по-трудно.
- Затова от врѣме на врѣме един индексно-послѣдователен файл трѣ̋бва да се прѣсъздава.
- Има и други случаи, когато при системитѣ IBM/360 и IBM/370 се прѣдоставя
асоциативен достѫп до дискът.
- Дали в тѣзи случаи се ползва специална подкрѣпа от харду̌ерът, както при индексно-послѣдователнитѣ файлове, не зная̨.
- Първия̌т такъв случай е самата таблица на съдържанието на дискът, VTOC (Volume Table Of Contents).
- Системата намира сѫществуващ дисков файл по зададено име на файлът, прѣравяйки VTOC-ът.
- Втория̌т такъв случай (.. покажи го ..) сѫ така нарѣченитѣ библиотеки (libraries).
- Втория̌т такъв случай
сѫ така нарѣченитѣ библиотеки (libraries).
(.. скрий ги библиотекитѣ ..)
- Имаше програма библиотекар (librarian), която поддържаше дискови файлове с библиотечна структура - библиотеки.
- Една библиотека съдържа модули, на които можем да гледаме като на по-малки файлчета.
- Чрѣз библиотекаря̌т, един модул от библиотека можѣше да бѫде намѣрен по неговото име.
- Името на модула не можѣше да е по-дълго от 8 байта.
- На потрѣбителитѣ се даваше само CLI-достѫп до библиотекитѣ - чрѣз езикът JCL (Job Control Language).
- Системни програми - компилатори, асемблер, текстов редактор, LinkageEditor, Loader и други, ползваха̨ API-та към библиотекаря̌т - можѣха̨ да го извикват вѫтрешно, но това не бѣше документирано.
- Из разни книги съм срѣщал да се обсѫђа библиотечен метод на достѫп, но не и във фирмената документация.
- Може би защото във фирмената документация понятието метод на достѫп означаваше канални програми, а библиотекаря̌т може да не е ползвал такива.
- В системата DOS/360 сѫществуваха̨ три вида библиотеки:
- SLB: source code library: библиотека от изходни програмни кодове.
- Такава библиотека имаше раздѣли с еднобуквени означения.
- При тѫрсене на даден модул трѣ̋бваше да се укаже раздѣлът.
- Напримѣр, раздѣл 'A' бѣше прѣдназначен за асемблерски програми (за макродефиниции).
- А пък раздѣл 'P' - за програмки на PL/I.
- Библиотекаря̌т не провѣряваше синтаксисът на текстоветѣ като програмен код.
- Можѣше да се слагат произволни текстове, стига да не ги подавате на асемблер или на компилатор.
- Напримѣр, можѣте да отворите раздѣл 'L' и там като модули да слагате текстове на любовни писма.
- Самата операционна система DOS/360 се разпространяваше в source code във вид на SLB, съдържащо макродефиниции.
- RLB: relocatable library: библиотека от обектни модули.
- Резултатът от асемблер или компилатор се нарича обектен модул и обикновено се записва в RLB.
- Именно заради тази практика при IBM/360 резултатитѣ от работата на такива езикови процесори и досега се наричат модули (или обектни модули).
- Функционалността на нѣкогашнитѣ RLB-та и досега се пази едно към едно във файлове, наричани статични библиотеки.
- В системата Windows статичнитѣ библиотеки имат разширение на името ".LIB", а в Unix - ".a".
- Защо relocatable? Защото съдържащитѣ се програми на машинен език, резултат от работата на нѣ̋кой езиков процесор, не сѫ обвързани с мѣ̋сто в оперативната памет, къдѣто да бѫда̨т заредени и изпълнени.
- Макар и на машинен език, тѣзи програмки все още не сѫ изпълними.
- LinkageEditor-ът е програма, която от прѣдварително асемблирани или компилирани обектни модули (relocatables) ще създаде готова за изпълнение програма във формат core-image.
- И в помощ на LinkageEditor-ът, библиотекаря̌т може да намѣри модул в RLB-то не само по име, но и по друг "външен символ".
- Когато обектен модул (а relocatable) се пъха в RLB (в статична библиотека), библиотекаря̌т го индексира не само по името на модулът, но и по всѣки друг символ, отбѣлѣ̋зан като "външен" (external) от езиковия̌т процесор.
- Забѣлѣжка. Съврѣменния̌т термин "статична библиотека" отразява фактът, че вече има подобни библиотеки с разширена функционалност, наричани "динамични библиотеки" (DLLs) или (в Unix) "shared objects" (.so).
- CLB: core-image library: библиотека от изпълними програми.
- В системата DOS/360 един модул от CLB не подлѣжи на слѣдваща обработка.
- Той може само да бѫде зареден в паметта и изпълнен.
- Обикновено такъв модул е маркиран с адрес от паметта, къдѣто той трѣ̋бва да бѫде зареден, за да може да се изпълни правилно.
- Имаше изпълними модули, маркирани като само-прѣмѣстващи се (relocatable).
- Такава програма в началото провѣрява къдѣ е заредена и сама настройва мѣстата от своя̌т код, които сѫ позиционно зависими.
- SLB: source code library: библиотека от изходни програмни кодове.
- (.. скрий ги библиотекитѣ ..) (.. скрий го асоциативния̌т достѫп ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- Използването на индексно-послѣдователнитѣ файлове и
индексно-послѣдователния̌т метод на достѫп може да е било умѣстно при
пакетния̌т режим на работа (batch processing).
- Но тѣ никак не сѫ подходящи за реалната работа на един съврѣменен сървър.
- Сегашнитѣ разнообразни изисквания се покриват от йерархичната файлова система и най-вече от базитѣ данни.
- Само софту̌ер може да посрѣщне разнообразието в съврѣменната дѣйствителност.
- Слава Богу! Харду̌ерът вече не се мѣси при прѣдоставянето на асоциативен достѫп.
- (.. скрий го асоциативния̌т достѫп ..) (.. свий го ..) (.. разгъни го ..) (.. скрий я̨ петата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ►► Системния̌т софту̌ер се мѣси във вѫтрешната структура на файловетѣ (.. покажи ..) (.. разгъна̨то ..)
-
▼▼
Системния̌т софту̌ер се мѣси във вѫтрешната структура на файловетѣ
(.. скрий ..)
(.. свий ..)
(.. разгъни ..)
- Системния̌т софту̌ер се е чувствал длъжен да прави това, за да улеснява потрѣбителитѣ.
- Не е съзнавал, че това не му влиза в работата.
- Магнитната лента вече е отпадна̨ла като носител на потрѣбителски данни.
(.. покажи ..) А нѣ̋кога това бѣше основен носител. (.. покажи ги магнитнитѣ ленти ..) - Магнитната лента вече е отпадна̨ка като носител на потрѣбителски данни.
А нѣ̋кога това бѣше основен носител. (.. скрий ..) (.. скрий ги магнитнитѣ ленти ..)- Системния̌т софту̌ер се е чувствал задължен да маркира файловетѣ, разположени на магнитна лента,
- да слага в началото и в края̌т на всѣки файл етикети.
- В етикетитѣ на файлът системата записва:
- името на файлът,
- версия и дата,
- поредност на този файл в поредицата файлове на този том (на тази ролка),
- дали това е само фрагмент от файлът,
- колко други фрагменти на този файл върху други ролки сѫществуват,
- това послѣдния̌т фрагмент на файлът ли е или файлът има продължение на друга ролка,
- дали записитѣ сѫ с фиксирана или с променлива дължина,
- колко е дължината - фиксирамата или максималната - на един физически запис,
- колко е дължината на един логически запис,
- колко общо записа има в сегментът или във файлът.
- Както заради пакетната обработка при машинитѣ IBM/360/370,
така и заради магнитнитѣ ленти като основен носител на потрѣбителски данни,
така и заради установилата се коболистка традиция,- системния̌т софту̌ер маркираше мета-данни за файловетѣ
- както при лентитѣ, така и при дисковетѣ.
- Пакетната обработка остана̨ в мина̨лото.
Компютритѣ вече работя̨т в реално врѣме. (.. покажи какво донесе системата Unix ..)
(.. покажи ..) Дойде и системата Unix. - Пакетната обработка остана̨ в мина̨лото.
Компютритѣ вече работя̨т в реално врѣме.
Дойде и системата Unix. (.. скрий какво донесе тя ..) (.. скрий ..)- Системата Unix е много-потрѣбителска (multi-user).
- Основната ӥ грижа трѣ̋бва да е правилното разпрѣдѣление на ресурситѣ међу потрѣбителитѣ.
- Магнитната лента е недѣлим ресурс. Не се сподѣля међу потрѣбителитѣ.
- Системата я̨ назначава на потрѣбител цѣ̋лата
- и не се интересува какво потрѣбителя̌т ще прави с лентата.
- Системата Unix не поддържа файлове на магнитна лента.
- Цѣ̋лото лентово устройство се разглеђа като файл.
- Софту̌ерът, който по коболистка традиция чете и пише етикети и файлове от и на магнитна лента, е изцѣ̋ло потрѣбителски.
- От друга страна, коболистката традиция е възникна̨ла в "бездисково врѣме".
- А пък системата Unix прѣдполага диск,
- прѣдполага външно запомнящо устройство с прѣ̋к бърз достѫп и за сподѣлено ползване от всички потрѣбители.
- Системата Unix поддържа файлова система на диск, и разпрѣдѣля дисковитѣ ресурси въз основа на файловетѣ.
- Системата Unix трѣ̋бва да идентифицира и локализира файл в йерархичната файлова система по файлова спецификация (име на файл).
- Системата Unix трѣ̋бва да провѣри дали този потрѣбител има право на достѫп до този файл.
- Тя може да откаже достѫп до файлът.
- Но ако тя разрѣши искания̌т достѫп, какво потрѣбителя̌т ще прави вѫтрѣ във файлът - това си е работа на потрѣбителя̌т - системата Unix не му се мѣси.
- Системата Unix рѣшава въпросът за компетенциитѣ в слоеветѣ на софту̌ерът.
- Нѣ̋ма си вече прѣдстава системния̌т софту̌ер за вѫтрешната структура на файловетѣ.
- Слава Богу!
- (.. скрий го оттеглянето на системния̌т софту̌ер ..) (.. свий го ..) (.. разгъни го ..) (.. скрий я̨ петата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ►► Магнитнитѣ глави вече сѫ си част от дисковетѣ (.. покажи ги дисковетѣ Winchester ..)
-
IBM-2311
- Спира се дисковото устройство и се чака дисковия̌т пакет да спре да се върти.
- Нѣ̋ма спирачки, спира бавно.
- Нѣ̋къдѣ наблизо, обикновено върху устройството, стои празната кутия на дисковия̌т пакет, състояща се от дъно и капак с рѫкохватка.
- Със силната (дѣ̋сната) рѫка се взема капак за рѫкохватката.
- С другата рѫка се отваря горната врата на устройството.
- Дисковия̌т пакет с помощта на своя̌т капак с въртеливо движение се прихваща и извађа се от устройството.
- С другата рѫка се затваря горната врата на устройството.
- Слага се върху дъното, дъното щраква и се прикрѣпя за пакетът отдолу.
- Дисковия̌т пакет се прибира за съхранение в шкаф.
- Другия̌т дисков пакет, който трѣ̋бва да се монтира, се вади от шкафът.
- Със силната си рѫка го хващаме здраво за рѫкохватката на капакът му.
- Занасяме го до устройството.
- С другата рѫка откопчаваме дъното от пакетът и го слагаме върху устройството.
- Със сѫщата слаба рѫка отваряме горната врата на устройството.
- Със силната си рѫка поставяме дисковия̌т пакет върху шпинделът на устройството
- и с въртеливо движение закрепваме пакетът към шпинделът и освобођаваме капакът на пакетът.
- Със слабата рѫка затваряме горната врата на устройството.
- Силната рѫка държи празния̌т капак и го поставя върху дъното.
- С коя да е рѫка се пуска дискът да се завърти.
- Може да мине минута, докато ускори до нужната скорост.
- Щом това стане, гребенът с главитѣ влизат на нулев цилинддър и устройството минава в готовност.
- Устройствата ЕС-5063 (IBM-2314), с които сѫщо съм разботил, външно изглеђаха̨ по сѫщия̌т начин.
- Обаче дисковия̌т пакет имаше 11 плочи (вмѣсто 6) и тежѣше повече.
- И плътността на магнитния̌т запис бѣ удвоена.
- В резултат, IBM-2314 събираше четири пѫти повече информация, отколкото IBM-2311.
- Устройството на картинката е музеен експонат.
- На мѣ̋стото, къдѣто е надписът с техническитѣ данни, стоѣше празната кутия на монтирания̌т дисков пакет.
- Такива устройства се произвеђаха̨ в Стара Загора, а дискови пакети - в Пазарџик.
-
▼▼
Магнитнитѣ глави вече сѫ си част от дисковетѣ
(.. скрий ги дисковетѣ Winchester ..)
- Нѣ̋кога се е считало, че магнитнитѣ глави и механизмът за придвижването им међу цилиндритѣ
сѫ много по-скѫпи от магнитнитѣ носители.
- Магнитния̌т носител е метална плоча с магнитно покритие от двѣтѣ страни.
-
(..Вижте IBM-2311 на картинка ..) (.. прочетѣте за него ..) - Плочитѣ обикновено се оформяха̨ в пакети (disk packs).
- Пакет от шест плочи (IBM-2311) имаше десет повърхности и съотвѣтно десет писти на цилиндър.
- Пакет от единадесет плочи (IBM-2314) имаше двадесет повърхности и двадесет писти на цилиндър.
- Външнитѣ повърхности в пакетът не се ползваха̨.
- Дисковетѣ и дисковитѣ пакетитѣ бѣ̋ха̨ смѣнни.
- Тѣ се монтираха̨ в устройството от човѣк-оператор.
- Механизмът, въртящ дисковетѣ, магнитнтѣ глави и механизмът за придвижването им бѣ̋ха̨ част от устройството (част от драйвът, disk drive).
- Едно дисково устройство бѣше голѣ̋мо колкото автоматична пералня или автоматична миялна.
- По нѣ̋кое врѣме имаше флопи-дискове или дискети - пластмаса с магнитно покритие.
- Тѣ̋х не ги считам за истински дискове, понеже не прѣдоставяха̨ достатъчно бърз достѫп.
- Основния̌т експлоатационен проблем бѣше замърсяването.
- При смѣнни носители, прахът поврѣђаше и магнитнитѣ глави, и носителитѣ.
- Друг експлоатационен проблем бѣше настройката на главитѣ към стандарт за магнитен запис.
- Обикновено ги оставяха̨ ненастроени.
- В резултат, за всѣки дисков пакет трѣ̋бваше да се знае кое от устройствата може да го чете.
- Операционната система OS/360 изискваше настройка на главитѣ към стандартът.
- DOS/360 не поставяше такова изискване.
- Технологиитѣ напрѣдна̨ха̨: миниатюризация, масово производство, поевтиняване.
- Магнитнитѣ глави и механизмът за придвижването им међу цилиндритѣ не се смѣ̋тат вече за много по-скѫпи от магнитнитѣ носители.
- Огромната вмѣстимост при новитѣ технологии намаляват необходимостта от смѣ̋на на носителитѣ.
- Всичко вече се оформя като едно едно устройство - глави и магнитна повърхност, капсулирани и изолирани от външната срѣда̀.
- За първитѣ такива модели се използваше названието Winchester.
- При тѣ̋х задвижването бѣше все още външно.
- При съврѣменнитѣ HDD (hard disk drives) абсолютно всичко е капсулирано и изолирано -
и въртенето на дискът, и постѫпателното движение на гребенът с главитѣ. - (.. Илюстрация: един терабайт HDD Toshiba, USB, 2.5 инча ..)
- Магнитнитѣ глави сѫ фабрично капсулирани в едно дисково устройство заедно с магнитната повърхност.
- Слава Богу!
- (.. скрий ги дисковетѣ Winchester ..) (.. скрий я̨ петата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- Нѣ̋кога се е считало, че магнитнитѣ глави и механизмът за придвижването им међу цилиндритѣ
сѫ много по-скѫпи от магнитнитѣ носители.
- ►► Нѣщо като заключение (.. покажи го заключението на бесѣдата ..) (.. разгъна̨то ..)
-
▼▼
Нѣщо като заключение
(.. скрий го заключението на бесѣдата ..)
(.. свий го ..)
(.. разгъни го ..)
- ►► А нѣ̋кога System/360 бѣше за примѣр .. (.. покажи ..)
-
▼▼
А нѣ̋кога System/360 бѣше за примѣр ..
(.. скрий ..)
- Нѣ̋кога от Москва е дошла команда всички проекти да се канцелират и
цѣ̋лата инженерна мисъл в пространството от Бранденбургската врата до Владивосток
да се впрѣгне във reverse-engineering на IBM System/360.
- За да се издаде такава команда от Москва, трѣ̋бва System/360 на IBM да е била вече стана̨ла за примѣр в цѣлия̌т остана̨л свѣ̋т.
- Официално се казваше, че разработваме ЕС ЭВМ (Единая Система Электронных Вычислительных Машин).
- Професионалната ми история като компютърџия започна̨ от System/360.
- Не претендирам за точност при историческитѣ справки.
- Не знам в кой компютър сѫ били приложени магнитни дискове за пръв пѫт.
- Но до мене дисковетѣ достигна̨ха̨ на бордът на System/360.
- Освѣн дисковетѣ, какво друго трайно е остана̨ло от System/360?
- На първо мѣ̋сто, софту̌ерния̌т бизнес. Компютърната програма като индустриален продукт.
- Слѣд това, нѣщо незначително: понятието байт. Никой вече не смѣе да изневѣри на тази тогавашна мода.
- Понятията обектен модул и библиотека от обектни модули.
- Тука попадат и LinkageEditor-ът, асемблерът, компилаторитѣ ..
- Компилаторът от FORTRAN бѣ впечатляващ с бързината си.
- Съжалѣ̋вахме я̨ машината, като я̨ гледахме как се мѫчи да компилира COBOL.
- И защо не се сѣщам за друго? Трайно остана̨ло от System/360?
По много причини.- Забравил съм много нѣща вѣроятно.
- Наистина прогресът в технологиитѣ е огромен.
- Той е изхвърлил и обезсмислил много нѣща.
- В тази бесѣда, посветена на дисковетѣ на System/360,
- Ви занимавах най-вече с това, което го имаше нѣ̋кога там,
- а сега вече - Слава Богу! - го нѣ̋ма.
- Сѣщам се за нѣ̋кои нѣща, несвързани с дисковетѣ, които ги имаше в System/360, а сега вече ги нѣ̋ма.
- Десетични числа с плаваща точка. Това е необяснима странност на System/360.
- Разни други странни формати и кодировки.
- EBCDIC вмѣсто ASCII.
- Пакетирани десетични числа и машинна аритметика с такива числа.
- Записи с промѣнлива дължина с прѣдшестващ брояч.
Това може да е полезно, но е изоставено.
- (.. скрий кога System/360 бѣше за примѣр ..) (.. скрий го заключението на бесѣдата ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- Нѣ̋кога от Москва е дошла команда всички проекти да се канцелират и
цѣ̋лата инженерна мисъл в пространството от Бранденбургската врата до Владивосток
да се впрѣгне във reverse-engineering на IBM System/360.
- ►► Езикът COBOL стъпкан в прахта от езикът C (.. покажи ..)
-
▼▼
Езикът COBOL стъпкан в прахта от езикът C
(.. скрий ..)
- На какво се дължи зашеметяващия̌т успѣх на техническото развитие?
На това, че не се обръщаше внимание на тѣснитѣ мѣста (bottle-necks: ботълнеци),
а на важнитѣ нѣща, които извеђат технологията на нови равнища, на нови висоти.- Не на машинна десетична аритматика.
- Не на харду̌ерно подпомагане на асоциативния̌т достѫп до дискът.
- Не на сложни машинни инструкции, които така се опитват да въвлѣка̨т харду̌ерът в ботълнецитѣ.
- Не - ботълнецитѣ сѫ си софту̌ерен проблем.
- Да на екстремната миниатюризация.
- Да на екстремно голѣ̋мата компютърна памет.
- Да на екстремното бързодѣйствие.
- Да на екстремно ниската енергозависимост.
- Прѣди повече от 40 години съм почна̨л на компютър със 120 килобайта оперативна памет и със седем-мегабайтови дискове.
- Сега се наслађавам:
- на 16 гигабайта оперативна памет (140000 пѫти повече)
- и на терабайтов диск (25000 пѫти повече),
- и то с размѣрът на кутия шоколадови бонбони, а не в зала с климатик, противопожарна инсталация и повдигна̨т под.
- Само се наслађавам. Защото заслуга нѣ̋мам. Само се възползвам.
- А кой има заслуга?
- Кой го движи прогресът?
- Има за какво да им завиђат смо̀танитѣ злобни лѣви поcepковци "всех стран".
- Компютърна архитектура от тип RISC (Reduced Instruction Set Computers).
- Не е важно, че харду̌ерът на централния̌т процесор смѣ̋та само двоично, а не десетично.
- Важното е да смѣ̋та екстремно бързо.
- Софту̌ерът лесно ще прѣвърне числата от десетични в двоични, а послѣ обратно в десетични.
- Ако десетичната аритметика бѣше реализирана в "харду̌ерът", едва ли щѣше да е по-различно.
- Не е важно, че централния̌т процесор не приема инструкция "прѣмѣсти оттук там двѣста байта".
- Важното е инструкцията "прѣмѣсти оттук там един байт" да се изпълнява екстремно бързо.
- Пък софту̌ерът ще я̨ задава тази инструкция двѣста пѫти.
- Архитектурата RISC бѣ навѣяна от езикът C и от системата Unix.
- За ужас на коболиститѣ.
- Не е важно, че харду̌ерът на централния̌т процесор смѣ̋та само двоично, а не десетично.
- Коболистът може да цѣни техниката "логически и физически записи"
и да се радва на прѣдоставенитѣ от системата улеснения в тази връзка.
- А пък програмистът на C се подхилква на това.
- Че това сѫ елементарни нѣща.
- Родния̌т ми език за програмиране бѣше PL/I.
- Той бѣше нѣщо като обединение на тритѣ езика ALGOL-60, FORTRAN-IV и COBOL,
- но без "извращенията", каквито всѣки от тѣ̋х си имаше.
- Езикът C, системата Unix и обектно-ориентираното програмиране стъпкаха̨ и PL/I.
- Завърших професионалната си кариера като програмист на C и C++.
- Сега като пенсионер се упражнявам на JavaScript.
- (.. скрий я̨ побѣдата на езикът C ..) (.. скрий го заключението на бесѣдата ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- На какво се дължи зашеметяващия̌т успѣх на техническото развитие?
- ►► Дискът е душата на компютърът (.. покажи ..)
-
▼▼
Дискът е душата на компютърът
(.. скрий ..)
- Макар че жабитѣ и рибитѣ сѫ все гръбначни животни като нас, аз не съм способен да им назначавам индивидуалност.
- Хората назначават индивидуалност на кучетата и коткитѣ.
- Даже душа им назначават!
- Лично аз с пуделитѣ имам спомени!
- За мене тѣ сѫ личности с индивидуалност и душа.
- Има ли компютърът индивидуалност и душа?
- Стана̨ дума, че нѣ̋кога имаше бездискови компютри.
- Тѣ сѫ като рибитѣ и жабитѣ.
- Без индивидуалност и без душа.
- Докато ползвам даден компютър, аз пълня̨ дискът му със спомени.
- Дискът му придава на компютърът индивидуалност.
- Да не се изсилвам да казвам, че компютърът имал душа.
- Знам му карантиитѣ - това е машина.
- Битове. Много много битове, ама все битове.
- Каква душа.
- На нов компютър се радвам.
- Може да се погрижа̨ да прѣхвърля̨ споменитѣ си от стария̌т на новия̌т диск.
- За стария̌т компютър нѣ̋ма да плача̨.
- А при смъртта на два пудела и аз, и Тамара плакахме.
- (.. скрий я̨ душата на компютърът ..) (.. скрий го заключението на бесѣдата ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ◄► (.. скрий я̨ петата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ◄► (.. скрий я̨ петата бесѣда за дисковетѣ на IBM/360 ..) (.. свий я̨ ..) (.. посвий или поразгъни ..) (.. разгъни я̨ ..) .. към началото ..
►► 7. Виртуалната памет на компютритѣ (.. покажи я̨ шестата бесѣда ..) (.. разгъна̨то ..) .. към началото ..
- Виртуалната памет на компютритѣ се осѫществява чрѣз автоматична динамична прѣадресация.
- Можете ли да си прѣдставите компютър без динамична прѣадресация?
- Съврѣменнитѣ компютри не мога̨т без нея̨.
▼▼ 7. Виртуалната памет на компютритѣ (.. скрий я̨ шестата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ◄► Не знам при кой компютър се е появила виртуалната памет за пръв пѫт.
- Не претендирам за точност при историческитѣ справки.
- Писах, че до мене дисковетѣ достигна̨ха̨ на бордът на System/360.
- Сега пиша̨, че до мене виртуалната памет достигна̨ на бордът на System/370.
- Нѣщо повече.
- Самата дума "виртуално" до мене сѫщо така дойде със System/370.
- Когато ставаше дума за виртуални адреси и виртуална памет.
- Сега вече има виртуална реалност, виртуален свѣ̋т, виртуални приятели, виртуална любов.
- Но това вече е съвсѣм друго.
- А можѣха̨ нѣ̋кога вмѣсто думата "виртуална" (virtual) да употрѣбя̨т думата "симулирана" (simulated).
- ►► Нѣщо като увод (.. покажи го ..) (.. разгъна̨то ..)
-
▼▼
Нѣщо като увод
(.. скрий го ..)
(.. свий го ..)
(.. разгъни го ..)
- ►► Машинни инструкции, операнди и адреситѣ им (.. покажи ги ..)
-
▼▼
Машинни инструкции, операнди и адреситѣ им
(.. скрий ги ..)
- Централния̌т процесор (CPU: Central Processing Unit) е мозъкът на компютърът -
това, дѣто смѣ̋та, мисли и взема рѣшения.
- От човѣшка гледна точка, той изпълнява програма.
- Самия̌т той обаче не знае за нея̨, за програмата си.
- Централния̌т процесор (CPU-то) във всѣки момент изпълнява нѣ̋каква инструкция, машинна инструкция.
- Съсрѣдоточил е вниманието си на нея̨, на текущата инструкция.
- Докато я̨ изпълнява текущата инструкция, вече е забравил прѣдишната и си нѣ̋ма прѣдстава коя ще е слѣдващата.
- А инструкцията идва от оперативната памет на компютърът.
- Оперативната памет на компютърът (RAM-ът: Random Access Memory, main memory) е извън CPU-то.
- За да получи инструкцията си за изпълнение, CPU-то издава заявка до RAM-ът:
- Прати ми съдържанието на толкова байта, както си ги запомнил, започвайки от този адрес.
- Колко толкова? Два, четири, осем най-много.
- RAM-ът взема от посочения̌т адрес поредица от битове (нѣ̋колко байта) и ги праща на CPU-то.
- А пък CPU-то ги интерпретира и ги изпълнява като машинна инструкция.
- Вѫтрѣ в себе си CPU-то поддържа специален регистър, нарѣчен PC (Program Counter).
- Чрѣз PC-регистърът CPU-то знае от кой адрес на RAM-ът да вземе инструкцията си.
- Когато CPU-то иска от RAM-ът слѣдваща инструкция за изпълнение, CPU-то използва съсдържанието на PC-регистърът за адрес към RAM-ът и веднага CPU-то увеличава PC-регистърът да бѫде готов за по-слѣдващата инструкция.
- Вѫтрѣ в себе си CPU-то поддържа нѣ̋колко регистъра, за които ще стане дума по-долу.
- PC-регистърът е един от тѣ̋х.
- Повечето регистри сѫ с общо прѣдназначение (General Purpose Registers).
- При нѣ̋кои компютри CPU-то взема съдържанието на PC-регистърът и на регистритѣ с общо прѣдназначение по един и сѫщ начин.
- При други компютри (напримѣр при IBM/360/370) CPU-то взема съдържанието на PC-регистърът по специален начин, със специална инструкция.
- Практически при всички компютри има специални машинни инструкции за установяване на ново съдържание на PC-регистърът.
- Това сѫ инструкциитѣ за безусловен или условен прѣход (branching, jumping).
- Тѣ промѣнят адресът на слѣдващата машинна инструкция.
- Вѫтрѣ в себе си CPU-то поддържа регистри.
- Това сѫ елементчета памет. Памет на една рѫка разстояние до CPU-то.
- RAM-ът е памет на един поглед разстояние,
- а дискът е необятна памет отвѫд хоризонтът.
- Повечето от тѣзи регистри сѫ с общо прѣдназначение.
- CPU-то не знае прѣдназначението им. Програмата знае.
- CPU-то се обръща към такъв регистър, само ако това е указано в изпълняваната машинна инструкция.
- Нѣ̋кои от регистритѣ сѫ със специално прѣдназначение.
- Такъв е PC-регистърът, за който стана̨ дума.
- CPU-то знае прѣдназначението му и го използва според прѣдназначението му.
- В съврѣменнитѣ компютри (но не и във IBM/360/370) има и друг регистър със специално прѣдназначение - SP (Stack Pointer).
- Темата за stack-ът и за heap-ът може би заслужава бесѣда от тукашната поредица бесѣди.
- Такава обаче не се прѣдвиђа.
- Дори установени термини на български нѣ̋ма.
- Пък и това не е загубило актуалността си - на тѣзи, които се уча̨т да програмират на C или C++, stack-ът и heap-ът трѣ̋бва да им бѫда̨т обяснени.
- А аз не пиша̨ учебник.
- Регистритѣ на CPU-то най-често съдържат адрес.
- Най-често в тѣ̋х се съхраняват адреси на мѣста от RAM-ът, с които CPU-то или по-точно програмата работи.
- Двата регистъра със специално прѣдназначение, за които стана̨ дума - PC-регистърът и SP-регистърът, съдържат именно адреси.
- Регистритѣ на CPU-то с общо прѣдназначение, които не съдържат адреси, ако програмата ги ползва,
тя ги ползват като акумулатори, напримѣр суматори.
- Акумулаторитѣ съдържат данни, които сѫ резултат от изчисления и подлѣжа̨т на скорошна обработка.
- Това сѫ елементчета памет. Памет на една рѫка разстояние до CPU-то.
- Даннитѣ, с които CPU-то борави при изпълнението на машинна инструкция, се наричат операнди на инструкцията.
- Един операнд:
- или се съдържа в самата инструкция,
- или се съдържа в нѣ̋кой регистър,
- или се съдържа в RAM-ът по нѣ̋кой адрес.
- Ако операндът се съдържа в RAM-ът, то адресът му:
- или се съдържа в самата инструкция,
- или се съдържа в нѣ̋кой регистър,
- или се съдържа в RAM-ът по нѣ̋кой адрес.
- Това послѣдното рѣ̋дко се срѣща, но се срѣща.
- По-голѣ̋ма дѫлбочина на косвено адресиране не се срѣща.
- Един операнд:
- И тъй, основната връзка на CPU-то (на централния̌т процесор)
със свѣтът извън него е връзката му с RAM-ът.
- Основното в тази връзка е адресът на мѣ̋сто в RAM-ът.
- CPU-то задава този адрес.
- CPU-то или иска да получи от RAM-ът съдържанието на този адрес, какво е запомнено там,
- или иска от RAM-ът по указания̌т адрес да бѫда̨т записани (и запомнени) нѣ̋какви данни (поредица от битове), които CPU-то сѫщо задава.
- Друга връзка на CPU-то (на централния̌т процесор) със свѣтът извън него
е системата на прѣкѫсвания.
- Основното прѣдназначение на механизмът на прѣкѫсванията е
CPU-то да бѫде увѣдомено за настѫпило измѣнение във външния̌т свѣ̋т.
- Завършила е операция за вход или за изход, натисна̨л съм клавиш, мръдна̨л съм мишката, барна̨л съм touch-screen-ът.
- Трудно ми е да го опиша̨ механизмът на прѣкѫсванията обобщено.
- Пък е и извън темата на бесѣдата.
- Основното прѣдназначение на механизмът на прѣкѫсванията е
CPU-то да бѫде увѣдомено за настѫпило измѣнение във външния̌т свѣ̋т.
- При компютърна архитектура, която позволява много-потрѣбителска (multi-user) работа,
CPU-то има най-малко два режима на работа: системен режим (kernel mode) и потрѣбителски режим (user mode).
- В потрѣбителския̌т режим (user mode) машиннитѣ инструкции, които мога̨т да повлияя̨т на другитѣ потрѣбители, сѫ забранени.
- Това сѫщо е извън темата на бесѣдата и силно зависи от конкретната компютърна архитектура.
- (.. скрий ги машиннитѣ инструкции ..) (.. скрий го уводът към швстата бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- Централния̌т процесор (CPU: Central Processing Unit) е мозъкът на компютърът -
това, дѣто смѣ̋та, мисли и взема рѣшения.
- ►► Адреси, адресно пространство, адресация (.. покажи ..)
-
▼▼
Адреси, адресно пространство, адресация
(.. скрий ..)
- И тъй, CPU-то (централния̌т процесор) на компютърът генерира и извеђа към външния̌т свѣ̋т адреси,
които сѫ част от два вида заявки:
- Заявка за четене:
- CPU-то иска да получи даннитѣ, записани на този адрес,
като прѣдполага, че това е адрес на мѣ̋сто от RAM-ът.
- CPU-то иска да получи даннитѣ, записани на този адрес,
- Или заявка за писане:
- CPU-то иска по този адрес да се запиша̨т и запомня̨т
нѣ̋какви данни, които CPU-то прѣдоставя заедно с адресът,
като пак прѣдполага, че адресът е на мѣ̋сто от RAM-ът.
- CPU-то иска по този адрес да се запиша̨т и запомня̨т
- Заявка за четене:
- Напримѣр, когато CPU-то иска да получи слѣдваща машинна инструкция за изпълнение, CPU-то издава заявка за четене по адрес, взет от PC-регистърът.
- При съврѣменнитѣ компютри адресът е адрес на байт - на поредица от 8 бита, нарѣчена байт.
- Не винѫги е било така.
- Но системата IBM/360 въведе тази мода и оттогава това е стандарт в индустрията.
- Ако към един адрес прибавим единица, ще се получи адресът на слѣдващия̌т байт.
- Заявката за четене или за писане по адрес, която CPU-то издава към външния̌т свѣ̋т,
може да има обхват с различна ширина:
- един байт (8 бита),
- два байта (16 бита),
- четири байта (32 бита - най-често), или
- осем байта (64 бита)
- Ако заявката е за два байта, обикновено адресът е четен (послѣдния̌т бит от адресът е 0).
- Ако заявката е за четири байта, обикновено адресът се дѣли на 4 (послѣднитѣ два бита от адресът сѫ 00).
- Харду̌ерът може да се сърди, ако не е така, а може и да не се сърди.
- CPU-то не може да издава заявки с произволна ширина.
- Не може 100 или 200 байта.
- CPU-то трѣ̋бва да издаде заявки байт по байт, а не наведнѫж.
- Не може само 5 бита.
- CPU-то трѣ̋бва да издаде заявка за цѣлия̌т 8-битов байт, а послѣ да си отдѣли интересуващитѣ го битове.
- Не може 100 или 200 байта.
- Най-често адресът прѣдставлява редица от 32 бита, интерпретирана като 32-битово двоично цѣ̋ло число без знак.
- Но има и други случаи.
- При други компютри адресът може да е 16-битово двоично число без знак.
- При IBM/360/370 адресът е 24-битово двоично число без знак.
- При други компютри адресът може да е 64-битово двоично число.
- Адреситѣ съставляват адресно пространство (address space).
- То се състои от всички възможни адреси.
- Отсега ще го нарѣка̨ физическо адресно пространство (physical address space), макар засега да не е ясно за какво е думата физическо.
- Ако адресът е 32-битов, то всички адреси на брой сѫ 4294967296.
- Това число е в десетичен запис и прѣдставлява 2 на степен 32.
- Толкова различни байта може да се адресират с 32-битови адреси.
- Може да се каже, че обемът на адресното пространство при 32-битови адреси е 4 гигабайта.
- При друга разрядност на адресът (16-битов, 24-битов, 64-битов) обемът на адресното пространство може да се прѣсмѣтне по сѫщата формула - числото 2 на тази степен.
- Най-ниския̌т (най-малкия̌т) адрес е съставен само от нулеви битове (двоични нули).
- Най-високия̌т адрес е съставен само от двоични единици.
- Стойността на адрес нѣ̋ма смисъл да се прѣдставя десетично.
- Прѣдставя се в шестнадесетичен или в осмичен запис и обикновено се запълват всички разряди.
- Напримѣр, най-високия̌т 32-битов адрес шестнадесетично се прѣдставя така: FFFFFFFF.
- А пък най-ниския̌т, разбира се е 0 (нула) или 00000000.
- CPU-то се обръща по адрес към външния̌т свѣ̋т -
CPU-то адресира физическо адресно пространство -
- или за да получи слѣдващата машинна инструкция, която CPU-то трѣ̋бва да изпълни,
- тогава това е заявка за четене,
- или в изпълнение на машинна инструкция,
- тогава това може да е заявка за четене или за писане според машинната инструкция.
- или за да получи слѣдващата машинна инструкция, която CPU-то трѣ̋бва да изпълни,
- (.. скрий ги адреситѣ и адресацията ..) (.. скрий го уводът към швстата бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- И тъй, CPU-то (централния̌т процесор) на компютърът генерира и извеђа към външния̌т свѣ̋т адреси,
които сѫ част от два вида заявки:
- ►► Оперативна памет и физическо адресно пространство (.. покажи ..)
-
▼▼
Оперативна памет и физическо адресно пространство
(.. скрий ..)
- Когато CPU-то издава към външния̌т свѣ̋т - към физическото адресно пространство - заявка за четене или за писане, кой му отговаря?
- Кой я̨ изпълнява заявката?
- Кой е разположен във физическото адресно пространство?
- Най-често това е RAM-ът, оперативната памет.
- RAM-ът - това е памет (memory).
- Записва (запомня) подадени данни на мѣ̋сто, опрѣдѣлено чрѣз адресация, опрѣдѣлено от зададен физически адрес.
- Подава обратно даннитѣ, които сѫ били записани (запомени) на мѣ̋сто, опрѣдѣлено чрѣз адресация.
- RAM-ът е пасивно устройство.
- Изпълнява заявки и не проявява инициатива.
- Чии заявки изпълнява пасивното устройство RAM?
- На първо мѣ̋сто на CPU-то (на централния̌т процесор).
- В RAM-ът е записана неговата програма и CPU-то си я̨ чете програмата от RAM-ът.
- Пак към RAM-ът се обръща CPU-то и във връзка с операндитѣ на изпълняваната от него инструкция, освѣн когато операндът е в регистър.
- Но не само на CPU-то.
- Заявки към RAM-ът идват и откъм дисковия̌т контролер.
- По-общо казано, заявки към RAM-ът идват и откъм системата за вход/изход (I/O).
- Даннитѣ, които дискът или лентата записват на магнитната си повърхност, с посрѣдничеството на контролерът идват от RAM-ът, като контролерът използва сѫщата физическа адресация, както CPU-то.
- CPU-то ги е сложило на това мѣ̋сто в RAM-ът, прѣди да се стартира операцията за запис върху магнитен носител.
- И сѫщо така, даннитѣ, които дискът или лентата чета̨т от магнитната си повърхност, с посрѣдничеството на контролерът биват пращани към RAM-ът.
- CPU-то, при стартиране на операцията за четене от магнитен носител, е казало на контролерът къдѣ точно в RAM-ът - на кой физически адрес - да бѫда̨т записани тѣзи данни.
- Послѣ CPU-то ще си ги намѣри там.
- По-общо казано, заявки към RAM-ът идват и откъм системата за вход/изход (I/O).
- Напримѣр, от контролерът на дисплея̌т (на екранът).
- Дисплея̌т на моя̌т лаптоп (пиксели 1920 на 1080) изисква поне 8-мегабайтово мѣ̋сто в паметта.
- А реално вѣроятно доста повече.
- Цѣ̋лата RAM-памет на лаптопът ми е 16 гигабайта, което е 2000 пѫти повече от 8 мегабайта.
- За сравнение: прѣз 1979 започна̨х работа на компютър IBM/360 (ЕС ЭВМ) с RAM 120 килобайта.
- CPU-то подготвя в тази област от RAM-ът даннитѣ, включително картинкитѣ, които дисплея̌т трѣ̋бва да ми покаже.
- Областитѣ от RAM-ът, които служа̨т на CPU-то за обмѣн на данни с контролеритѣ на периферията, се наричат буфери.
- И CPU-то, и контролеритѣ се обръщат към буферитѣ чрѣз физическа адресация на RAM-ът.
- Контролеритѣ на периферията научават физическитѣ адреси на буферитѣ от CPU-то, от командата за стартиране на входно-изходната (I/O) операция.
- На първо мѣ̋сто на CPU-то (на централния̌т процесор).
- Най-много мѣ̋сто във физическото адресно пространство заема RAM-ът.
- Обаче RAM-ът не заема всичкото физическо адресно пространство.
- Може компютърът да е оборудван с по-малко RAM, отколкото физическото адресно пространство позволява.
- Може сегменти от RAM-ът да сѫ били отстранени заради поврѣда.
- А може и част от физическото адресно пространство да е била задѣлена от компютърната архитектура за контролеритѣ на периферията.
- Какъв е резултатът, слѣд като CPU-то издаде заявка за четене или писане по физически адрес към външния̌т свѣ̋т?
- Заявката ще бѫде изпълнена без проблеми.
- CPU-то може да бѫде увѣдомено, че адресът не е достѫпен заради защита по ключ.
- CPU-то може да бѫде увѣдомено, че адресът не е достѫпен, защото липсва.
- CPU-то може само̀ да се усѣти, че адресът липсва, ако отговорът на заявката закъснява.
- (.. скрий го физическото адресно пространство ..) (.. скрий го уводът към швстата бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ►► Много-потрѣбителска работа на компютърът (.. покажи ..)
-
▼▼
Много-потрѣбителска работа на компютърът
(.. скрий ..)
- Тази шеста бесѣда е за виртуалната памет. Напрѣдваме натам стѫпка по стѫпка.
- Прѣдишната пета бесѣда бѣше за дисковетѣ.
- Там стана̨ дума, че операционната система Unix не може без дискове.
- В дѣйствителност, всички съврѣменни компютри имат дискове и затова всички съврѣменни операционни системи разчитат на дискова памет.
- Всички съврѣменни компютри имат и виртуална памет.
- Съврѣменнитѣ операционни системи я̨ използват виртуалната памет, за да организират много-потрѣбителската работа (multi-user) на компютърът, и то до степента компютърът да може да се ползва като сървър - без формално заложено ограничение за едноврѣменно обслужванитѣ потрѣбители.
- Нататък в настоящия̌т подраздѣл ще се опитам да покажа̨ как е организирана много-потрѣбителската работа
в IBM/System-360 без виртуална памет.
- Какво значи да се организира много-потрѣбителска работа?
- Да е възможно компютърът да има много (поне повече от един) потрѣбители едноврѣменно,
- като системата чрѣз харду̌ерът и чрѣз системния̌т софту̌ер не позволява един потрѣбител неволно (чрѣз грѣшка в потрѣбителската програма) или умишлено да наруши работата на другитѣ потрѣбители или на компютърната система като цѣ̋ло.
- И тъй, в IBM/System-360 ..
- Наличната оперативна памет е раздѣлена на блокове (наричани още страници) по 2 килобайта (2048 байта).
- На всѣки такъв блок се назначава 4-битов ключ за защита.
- 4-битов ключ: това значи число от 0 до 15.
- Централния̌т процесор (CPU-то) сѫщо има своя текуща стойност на този 4-битов ключ.
- CPU-то го ползва своя̌т текущ 4-битов ключ при адресирането на оперативната памет (RAM-ът) по какъвто и да е повод.
- Когато CPU-то стартира канална програма, дава съотвѣтния̌т 4-битов ключ за ползване от каналът (от периферния̌т процесор) при изпълнението на тази канална програма.
- Всѣ̋ка заявка за достѫп до физически адрес
(а такава заявка може да идва от CPU-то или от нѣ̋кой канал)
трѣ̋бва да бѫде придружена от 4-битов ключ за достѫп. - Ако ключът за достѫп е нула, достѫпът се разрѣшава.
- Ако ключът за достѫп не е нула, достѫпът се разрѣшава,
само ако ключът за достѫп съвпада с ключът на защита на 2K-блокът, в който попада адресът. - Когато се изпълнява потрѣбителска програма, CPU-то работи в потрѣбителски режим.
- В потрѣбителски режим на CPU-то му е забранено да изпълнява привилигировани инструкции.
- В частност, на CPU-то в потрѣбителски режим му е забранено да промѣня своя̌т 4-битов ключ за достѫп, да промѣня 4-битовитѣ ключове за защита на блоковетѣ RAM, както и да стартира канални програми.
- Горното означава, че архитектурата на IBM/System-360 (без виртуална памет) позволява едноврѣменно обслужване на 15 потрѣбителя най-много.
- Имаше версия на операционната система - OS/360-MVT,
която автоматично разкрояваше наличната оперативна памет на потрѣбителски раздѣли (partitions)
според постѫпващитѣ задания в потокът за пакетна обработка (batch processing).
- Аз не съм имал досѣг с такава система.
- При системитѣ OS/360-MFT и DOS/360 наличната за ползване оперативна памет биваше разкроявана
на потрѣбителски раздѣли (partitions) от човѣк.
- Най-много 15 раздѣла, всѣки с ключ за защита от 1 до 15.
- Системата OS/360-MFT сама избираше кога да пусне дадено потрѣбителско задание и в кой от наличнитѣ раздѣли на паметта да го пусне.
- При системата DOS/360 човѣк указваше това (програмист, технолог, оператор).
- (.. скрий я̨ много-потрѣбителската работа ..) (.. скрий го уводът към швстата бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ►► Обектни модули, секции, сегменти (.. покажи ги ..)
-
▼▼
Обектни модули, секции, сегменти
(.. скрий ги ..)
- В този подраздѣл ще се помѫча̨ да покажа̨ как едно врѣме без виртуална памет се строѣ̋ха̨
голѣми програми за изпълнение от компютър.
- Толкова голѣми, че не се събират в наличната оперативна памет.
- Повечето от тѣзи нѣща все още сѫ валидни.
- Дори новитѣ технологии да ги скриват.
- Тука става дума само за програми, които сѫ създадени или построени да работя̨т непосрѣдствено на компютърът,
- а не за програми, които докато се изпълняват, се интерпретират от други програми.
- Не става дума за програми, написани на Java, JavaScript, Python, Perl, PHP и други подобни.
- Не става дума за програми, написани на разни shell-script-ове.
- Програмата се пише на части, нарѣчени изходни модули (source modules).
- Програмата може да се пише от колектив програмисти
- и различнитѣ изходни модули може да сѫ написани от различни програмисти.
- Но дори да е само един програмистът, естествено е програмата да се пише на части.
- Различнитѣ изходни модули може да сѫ написани на различни езици за програмиране.
- По принцип, на асемблер.
- Реално, на COBOL, FORTRAN, PL/I, Pascal, C или C++.
- Все още в употрѣба: C и C++.
- Всѣки изходен модул се обработва - компилира се или се асемблира - от асемблер или от компилатор,
и се получава обектен модул (object module).
- За обектни модули (object modules) ставаше дума и в прѣдната бесѣда.
- При всѣ̋ко пускане на асемблерът или на компилаторът се получава един обектен модул.
- Oбектния̌т модул има двоичен формат, нечетлив за хора.
- Едно врѣме за всѣ̋ка компютърна платформа сѫществуваше специфичен формат на обектнитѣ модули.
- Напримѣр, при IBM/System-360 обектнитѣ модули имаха̨ формат удобен за пънч, макар че отдавна тѣ не се пънчваха̨, а се записваха̨ на магнитен носител (диск или лента).
- Сега има нѣ̋какви стандартни общи формати за обектни модули. (.. Напримѣр, COFF .. или .. ELF ..)
- Един обектен модул съдържа машинни инструкции и данни,
- като даннитѣ мога̨т да бѫда̨т инициализирани (с обявени начални стойности) или не.
- Ако даннитѣ не сѫ инициализирани, тѣ не заемат мѣ̋сто в самия̌т обектен модул, но той пак назначава мѣ̋сто за тѣзи данни в оперативната памет по врѣме на изпълнение на програмата.
- Паметта за врѣмето на изпълнение на програмата можем да я̨ нарѣчем обектна памет.
- И тъй, един обектен модул назначава и пълни парчета от обектната памет.
- Когато ги пълни, пълни ги с машинни инструкции или инициализиращи данни.
- Но да не забравяме, че обектния̌т модул по начало е разултат от работата на компилаторът или асемблерът.
- Как обектния̌т модул допринася за обектната памет - компилаторът или асемблерът сѫ опрѣдѣлили това.
- Парчетата, с които обектния̌т модул допринася за обектната памет, се наричат програмни секции.
- Едно врѣме при IBM/System-360 вмѣсто програмни секции се казваше контролни секции.
- Обектната памет - оперативната памет, назначена за изпълняваната програма - се дѣли на програмни секции.
- Ако обектния̌т модул е резултат от работата на асемблерът, то асемблерът е слѣдвал точно указанията на програмистът как да се разкрои модулът на секции.
- Ако обектния̌т модул е резултат от работата на компилатор, компилаторът сам може да рѣши да отдѣли машиннитѣ инструкции, инициализиранитѣ данни и неинициализиранитѣ данни в различни секции.
- Но и в този случай програмистът трѣ̋бва да може да укаже специфика в оформянето на програмнитѣ секции.
- Има двѣ програми, които умѣя̨т да боравя̨т с обектни модули:
- програма-библиотекар (librarian), наричана в системата Unix архивар (ar), и
- линкер (Linker или LinkageEditor), наричан още свързващ редактор.
- Библиотекаря̌т (архиваря̌т) поддържа
- библиотеки от обектни модули, наричани още статични библиотеки.
- Като файлове в IBM/System-360 библиотекитѣ от обектни модули се наричаха̨
RLB-та,
в системата Unix файловетѣ със статични библиотеки имат разширение на името .a, а във Windows - .lib. - Един обектен модул е резултат от работата на асемблерът или на компилаторът.
- Той може да си остане отдѣлен файл (с разширение .o в Unix или .obj във Windows),
- но може с помощта на библиотекаря̌т да се пъхне в нѣ̋коя статична библиотека.
- Библиотекаря̌т и форматът на статичнитѣ библиотеки сѫ проектирани така, че да служа̨т на линкерът.
- Библиотекаря̌т не може да раздѣли обектен модул на съдържащитѣ се в модулът програмни секции - това го може линкерът.
- Линкерът - сам или с вѫтрешна невидима помощ от библиотекаря̌т, трѣ̋бва да може:
- Да извлѣче от статична библиотека обектен модул по името на модулът.
- Да извлѣче от статична библиотека този обектен модул, съдържащ се в нея̨, който дефинира даден външен символ.
- Външнитѣ символи най-често сѫ имена на подпрограми (функции), но може и да сѫ означения на блокове с данни.
- Линкерът е една от най-важнитѣ програми.
- Резултатът (изходът) от едно пускане на линкерът е изпълнима програма - executable.
- Забѣлѣжка в аванс. В новитѣ системи със виртуална памет резултатът от линкерът може да бѫде или executable, или динамична библиотека. Но засега ще забравим за това.
- Паметта на executable-ът се дѣли на сегменти (segments).
- По своя инициатива - ако не му е указано от програмистът, линкерът нѣ̋ма да направи повече от един сегмент.
- Забѣлѣжка в аванс. По своя инициатива линкерът нѣ̋ма да направи динамична библиотека.
- Забѣлѣжка в аванс. Динамичната библиотека е сегмент за общо ползване.
Но засега ще забравим за това.
- Резултатът (изходът) от едно пускане на линкерът е изпълнима програма - executable.
- Ако executable-ът (изпълнимата програма) се вмѣства в наличната оперативна памет,
- то нѣ̋ма смисъл executable-ът да се дѣли на сегменти - достатъчен е един сегмент.
- В този случай програмистът не мисли и за програмни секции.
- За всѣки изходен модул компилаторът ще създаде обектен модул с най-много три програмни секции: за машинни инструкции, за инициализирани данни и за неинициализирани данни.
- Дали тя съдържа машинни инструкции, инициализирани данни или неинициализирани данни - това е свойство на програмната секция.
- Компилаторът дава едно и сѫщо подразбиращо се име на програмнитѣ секции, щом програмистът не се е намѣсил.
- Послѣ линкерът ще сглоби секцията с това подразбиращо се име, като събере (конкатенира) приноситѣ към тази секция от различнитѣ обектни модули.
- Така в получения̌т единствен сегмент има само една програмна секция, съдържаща машинни инструкции, и името ӥ се подразбира.
- По подобен начин се третират и секциитѣ с данни, но тѣ не се събират, а се прѣпокриват.
- От различнитѣ изходни модули прѣз различнитѣ обектни модули се обръщаме към общи данни - това е смисълът на прѣпокриването.
- Когато такава програма се пуска за изпълнение, единствения̌т ӥ сегмент се заређа в оперативната памет и управлението на CPU-то се прѣдава на указана входна точка.
- Смисълът на този подраздѣл обаче е да обясня̨ как се строя̨т голѣми програми
- такива, които не се побират в наличната оперативна памет.
- Програмистът проектира и разкроява голѣ̋мата програма на сегменти.
- Всѣки сегмент се заређа в оперативната памет отдѣлно.
- Не е възможно всички сегменти да се заредя̨т едноврѣменно, защото програмата е голѣ̋ма.
- Един от сегментитѣ е базов - root segment.
- Той се заређа, когато програмата се пусне да се изпълнява, и той заређа другитѣ сегменти.
- Нѣкои от сегментитѣ се прѣпокриват - тѣ се заређат на един и сѫщ адрес (на едно и сѫщо мѣ̋сто) и не мога̨т да сѫ заредени едноврѣменно.
- Никой от другитѣ сегменти не прѣпокрива базовия̌т сегмент.
- Може да има нѣ̋колко групи от взаимно прѣпокриващи се сегменти.
- Програмистът указва на линкерът:
- от колко сегмента да бѫде построен executable-ът,
- кой е базовия̌т сегмент и кои сѫ групитѣ прѣпокриващи се сегменти,
- от кои обектни модули и програмни секции да се състои всѣки сегмент.
- Линкерът включва в базовия̌т сегмент подпрограмки за замѣстване на един сегмент с друг по врѣме на изпълнение.
- Дори да идват от един и сѫщ обектен модул, различнитѣ програмни секции мога̨т да отида̨т в различни сегменти.
- Програмистът проектира и разкроява една голѣ̋ма програма на сегменти, така че замѣстванията на един сегмент с друг да се случват максимално рѣ̋дко.
- При недобро разпрѣдѣление на програмнитѣ секции и обектнитѣ модули по сегментитѣ, производителността на програмата може да падне драстично.
- (.. скрий ги секциитѣ и сегментитѣ ..) (.. скрий го уводът към швстата бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- В този подраздѣл ще се помѫча̨ да покажа̨ как едно врѣме без виртуална памет се строѣ̋ха̨
голѣми програми за изпълнение от компютър.
- ◄► (.. скрий го уводът ..) (.. свий го ..) (.. разгъни го ..) (.. скрий я̨ шестата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ►► Нѣщо по срѣдата (.. покажи го ..) (.. разгъна̨то ..)
-
▼▼
Нѣщо по срѣдата
(.. скрий го ..)
(.. свий го ..)
(.. разгъни го ..)
- ◄► За да разберете това нѣщо по срѣдата, трѣ̋бва да сте прочели нѣщото като увод.
- ►► Динамичната прѣадресация (.. покажи ..)
-
▼▼
Динамичната прѣадресация
(.. скрий ..)
- Това, което се слага по срѣдата међу CPU-то (централния̌т процесор) и външния̌т за него свѣ̋т, е MMU-то.
(.. Повече за MMU-тата можете да прочетете тука ..)- Външния̌т свѣ̋т за CPU-то се състои от физическата оперативна памет и от периферията.
- MMU-то стои на изходът от CPU-то към външния̌т свѣ̋т.
- Всѣки адрес, който CPU-то генерира и праща към външния̌т свѣ̋т в заявки за четене или за писане, минава прѣз MMU-то.
- Когато MMU-то не работи (не е включено, изключено е), адреситѣ минават прѣз MMU-то без промѣ̋на.
- Може да се смѣ̋та, че когато MMU-то е изключено, адреситѣ не минават прѣз него.
- Когато обаче MMU-то работи (включено е), то промѣня адреситѣ и пуска към външния̌т свѣ̋т други адреси.
- MMU-то извършва динамична прѣадресация
- Адреситѣ, които важа̨т във външния̌т свѣ̋т, се наричат физически адреси.
- Тѣ образуват физическо адресно пространство.
- Адреситѣ, които CPU-то генерира и които стигат само до MMU-то, се наричат виртуални адреси.
- Тѣ образуват виртуално адресно пространство.
- MMU-то извършва динамична прѣадресация:
прѣобразува виртуалнитѣ адреси във физически. - CPU-то може да включва и да изключва MMU-то,
но само когато CPU-то е в системен (привилегирован) режим (kernel mode, privileged mode),
не и в потрѣбителски режим (user mode).
- Битоветѣ на виртуалния̌т адрес се дѣля̨т на двѣ групи - младши и старши.
- Старшитѣ битове опрѣдѣлят "сѫдбата" на виртуалния̌т адрес.
При "щастливо" стечение на обстоятелствата,
тѣ опрѣдѣлят базовия̌т физически адрес,
към който се добавят младшитѣ битове,
за да се получи физическия̌т адрес.
- Старшитѣ битове опрѣдѣлят "сѫдбата" на виртуалния̌т адрес.
- Виртуалнитѣ адреси със съвпадащи старши битове образуват виртуална страница (virtual page).
- Виртуалнитѣ адреси от една виртуална страница обикновено имат една и сѫща "сѫдба". (Изключение: PDP-11)
- Колко на брой сѫ младшитѣ битове на виртуалния̌т адрес?
- Колко е голѣ̋ма една виртуална страница?
- Тѣзи два въпроса, разбира се, сѫ свързани:
броя̌т на младшитѣ битове на адресът опрѣдѣля размѣрът на една виртуална страница. - Зависи от архитектурата на компютърът и от моделът на MMU-то.
- При нѣ̋кои MMU-та броя̌т на младшитѣ битове на адресът е част от настройката на това устройство, и то работи според текущата си настройка.
- При IBM/System-370 ..
- броя̌т на младшитѣ битове e 11, и съотвѣтно една виртуална страница е 2048 байта (2 килобайта, 2К байта, 2 на степен 11 байта).
- Спомнѣте си, че в IBM/360/370 толкова е и размѣрът на блокът памет с общ 4-битов ключ за защита.
- Адресът в системата IBM/370 е 24-битов.
- Младшитѣ 11 бита на виртуалния̌т адрес дават адресът вѫтрѣ във виртуалната страница, а старшитѣ 13 бита опрѣдѣлят коя е самата виртуална страница.
- При VAX броя̌т на младшитѣ битове e 9, и съотвѣтно една виртуална страница е 512 байта (2 на степен 9 байта, половин килобайт).
- При по-новитѣ компютърни архитектури, с модерна организация на дисковата памет, размѣрът на виртуалната страница е съгласуван с размѣрът на дисковитѣ блокове в разпрѣдѣлението на дисковото пространство по файлове..
- (.. покажи ..) MMU-то на PDP-11 не е показателно за другитѣ компютри, но този случай е обозрим. (.. покажи подробности за MMU-то на PDP-11 там ..)
-
MMU-то на PDP-11 не е показателно за другитѣ компютри, но този случай е обозрим.
(.. покажи подробности за MMU-то на PDP-11 там ..)
(.. скрий го PDP-11 ..)
- PDP-11 е 16-битов компютър, и виртуалния̌т адрес е 16-битов.
- Броя̌т на младшитѣ битове във виртуалния̌т адрес е 13, а на старшитѣ - 3.
- Това означава, че:
- една виртуална страница е 8 К (2 на степен 13) байта,
- виртуалното адресно пространство е 64 К (2 на степен 16) байта, и
- виртуалното адресно пространство съдържа 8 (осем на брой: 2 на степен 3) виртуални страници.
- За да извършва динамичната прѣадресация, MMU-то на PDP-11 ползва таблица с осем реда - таблица на виртуалнитѣ страници, по един ред за всѣ̋ка виртуална страница.
- В дѣйствителност, MMU-то на PDP-11 има достѫп до двѣ такива таблици: една за системния̌т режим (kernel mode) на CPU-то, и друга за потрѣбителския̌т режим (user mode).
- С други думи, във всѣки момент има двѣ виртуални адресни пространства - едно за "kernel mode" и друго за "user mode".
- С прѣвключването от "kernel mode" във "user mode", CPU-то смѣня видимото за него виртуално адресно пространство.
- А колко е голѣ̋мо физическото адресно пространство при компютритѣ PDP-11?
- Младшитѣ модели нѣ̋мат MMU и физическото адресно пространство е сѫщото като виртуалното.
- Младшитѣ модели на PDP-11 сѫ едно-потрѣбителски компютри.
- При срѣднитѣ модели физическитѣ адреси сѫ 18-битови и размѣрът на физическото адресно пространство е 256 К байта (2 на степен 18 байта).
- При старшитѣ модели физическитѣ адреси сѫ 22-битови и размѣрът на физическото адресно пространство е 4 М байта (4 мегабайта, 2 на степен 22 байта).
- При всички модели горнитѣ 8 К байта от физическото адресно пространство сѫ задѣлени за входно-изходната страница.
- Остана̨лата част на физическото адресно пространство е свободна за разполагане на физическа оперативна памет там.
- При срѣднитѣ модели 248 К байта е максималния̌т размѣр на наличната физическа оперативна памет.
- Характерно за архитектурата на PDP-11 е това, че размѣрът на физическото адресно пространство (то е 18-битово или по-голѣ̋мо) надвишава размѣрът на виртуалното адресно пространство.
- При PDP-11, MMU-то (динамичната прѣадресация) дава на CPU-то възможност да гледа по цѣ̋лото физическо адресно пространство, като прѣнастройва и промѣня виртуалното адресно пространство.
- Виртуалната страница е доста голѣ̋ма по размѣр - 8 K байта.
- А пък наличната физическа оперативна памет при PDP-11 е цѣ̀нен ресурс,
- при положение, че срѣднитѣ и старшитѣ модели се рекламират като много-потрѣбителски компютри.
- Физическата оперативна памет се разпрѣдѣля за ползване по̀ на дребно - на парчета по 128 байта.
- Едно такова парче се опрѣдѣля от съвпадащи старши битове на физическия̌т адрес, слѣд като отрѣжем младшитѣ 7 бита.
- Една виртуална страница (8 К байта) може да съдържа 64 на брой 128-байтови парчета.
- Колко точно такива парчета сѫ назначени за виртуалната страница - това може да се укаже със 6 бита.
- Схема на 16-битов виртулен адрес при PDP-11:
P P P L L L L L L Λ Λ Λ Λ Λ Λ Λ ................. Λ Λ Λ Λ Λ Λ Λ => 7 най-младши бита ..... L L L L L L ............. => 6 срѣдно младши бита P P P ......................... => 3 старши бита
- P: тритѣ старши бита опрѣдѣлят една от 8-тѣ виртуални страници на виртуалното адресно пространство.
- Λ: 7-тѣ най-младши бита се запазват без промѣ̋на във физическия̌т адрес слѣд динамичната прѣадресация.
- L: 6-тѣ срѣдни бита опрѣдѣлят 128-байтовото парче от физическата памет. Ако такова парче не е назначено, адресът е невалиден.
- L: тѣзи 6 бита, разглеђани като двоично число без знак, се прибавят към базовото число от специалния̌т регистър PAR за съотвѣтната виртуална страница.
- Схема на 18- или 22-битов физически адрес при PDP-11:
b b b b B B B B B B B B B B B Λ Λ Λ Λ Λ Λ Λ ............................. Λ Λ Λ Λ Λ Λ Λ => 7 най-младши бита b b b b B B B B B B B B B B B ............. => 11 или 15 старши бита
- Λ: 7-тѣ най-младши бита сѫ копирани от виртуалния̌т адрес.
- bB: старшитѣ битове на физическия̌т адрес се получават, като към базовото число от специалния̌т регистър PAP се прибави 6-битовото число LLLLLL от виртулния̌т адрес.
- И тъй, MMU-то на PDP-11 във всѣки момент прѣдоставя двѣ виртуални адресни пространства:
- едно за системен режим (kernel mode) и друго за потрѣбителски режим (user mode).
- Всѣ̋ко от двѣтѣ виртуални адресни пространства се състои от осем виртуални страници.
- За всѣ̋ка виртуална страница във MMU-то има по два специална регистъра:
- PAR (Page Address Register). Съдържа старшитѣ битове на физическия̌т адрес на началото на страницата, слѣд като младшитѣ седем бита сѫ отсѣчени.
- PDR (Page Descriptor Register). Описва виртуалната страница.
- CPU-то казва на MMU-то дали достѫпът до виртуалната страница изобщо е разрѣшен.
- CPU-то казва на MMU-то дали във виртуалната страница е разрѣшено писане (е разрѣшена промѣ̋на).
- CPU-то казва на MMU-то колко 128-байтови парчета физическа памет сѫ задѣлени за виртуалната страница.
- CPU-то казва на MMU-то дали тѣзи 128-байтови парчета физическа памет сѫ разположени в началото или в края̌т на виртуалната страница.
Удобно е виртуална страница, използвана за стек (stack), да започва от края̌т на адресния̌т диапазон. - MMU-то казва на CPU-то дали виртуалната страница е била промѣняна.
- Освѣн това, има нѣ̋колко специални регистъра общо за MMU-то, така че:
- CPU-то да може да го пуска MMU-то и да го спира,
- MMU-то да може да каже на CPU-то защо виртуален адрес е невалиден и как да се излѣзе от ситуацията.
- Резюме́: Какво позволява MMU-то на PDP-11? За какво се ползва то?
- Физическото адресно пространство да е по-голѣ̋мо от виртуалното адресно пространство, което е ограничено до 64 K байта.
- Изолиране на потрѣбителитѣ един от друг.
- Базовия̌т сегмент и стекът може да започват от едни и сѫщи виртуални адреси за кой да е потрѣбител.
- Слѣд динамичната прѣадресация полученитѣ физически адреси ще сѫ различни за различнитѣ потрѣбители.
- Един конкретен потрѣбител изобщо не може да виђа физическата памет извън показаното в неговото виртуално адресно пространство.
- В рамкитѣ на обслужването на един потрѣбител.
- На един потрѣбител при нуђа може да му бѫде задѣлена физическа оперативна памет,
повече отколкото той може в даден момент да виђа прѣз виртуалното си адресно пространство.
- Виртуалното адресно пространство е 64 К байта.
- А може да има и 100 K байта налична физическа оперативна памет, свободна за разпрѣдѣление.
- MMU-то на PDP-11 позволява прѣзаређане на виртуални страници, така че в различни моменти една виртуална страница да гледа към различни сегменти на физическата оперативна памет.
- На един потрѣбител при нуђа може да му бѫде задѣлена физическа оперативна памет,
повече отколкото той може в даден момент да виђа прѣз виртуалното си адресно пространство.
- Обслужване на повече потрѣбители, отколкото наличната физическа оперативна памет без MMU би позволила.
- Физическа оперативна памет е цѣ̀нен ресурс, подлежащ на разпрѣдѣление међу потрѣбителитѣ съобразно тѣхнитѣ нуђи и приоритети.
- Парче физическа оперативна памет, обикновено с размѣр на виртуална страница, което е назначено на потрѣбител в състояние на очакване на нѣщо или на потрѣбител с нисък приоритет, може да бѫде записано на дискът в специален файл (swap file), без този "ощетен" потрѣбител да "съзнава" какво става, и мѣ̋стото във физическата оперативна памет да се даде на друг потрѣбител.
- В моментът, когато "ощетения̌т" потрѣбител отново се "събуди" за работа, неговото виртуално адресно пространство се заређа в MMU-то, но онова парче памет, което е било записано на дискът в специалния̌т файл, не се връща във физическата памет.
- Виртуалния̌т адрес, който сочи към него, ще бѫде невалиден.
- Може да не се случа̨т обръщения към тази невалидна виртуална страница, която отдавна е била изгонена от физическата оперативна памет на дискът. Тя ще си остане на дискът.
- Но ако има обръщение към нея̨, MMU-то ще рапортува невалиден адрес,
а операционната система ще се сѣти какво да направи.
- Потрѣбителя̌т ще мине в състояние на очакване.
- Ще му бѫде задѣлена нужната физическа оперативна памет.
- На това ново мѣ̋сто ще бѫде прочетена от дискът исканата виртуална страница.
- Виртуалната таблица ще бѫде промѣнена, така че тази виртуална страница да гледа към това ново мѣ̋сто.
- Потрѣбителя̌т ще мине в състояние на готовност.
- Ако настане момент този потрѣбител пак да отстѫпи назад и да даде прѣдимство на други, и ако при това физическа оперативна памет, задѣлена за тази виртуална страница, трѣ̋бва пак да бѫде освободена за други нуђи, операционната система ще провѣри дали тази виртуална страница е била промѣняна, докато е прѣбивавала във физическата оперативна памет.
- Ако не е била, парчето физическа памет просто се освобођава.
- Но ако е била промѣняна, парчето физическа памет се освобођава, едва слѣд като записът върху дискът се опрѣсни.
- (.. скрий го PDP-11 ..) (.. скрий го PDP-11 ..)
- (.. скрий я̨ динамичната прѣадресация ..) (.. скрий го това по срѣдата на швстата бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- Това, което се слага по срѣдата међу CPU-то (централния̌т процесор) и външния̌т за него свѣ̋т, е MMU-то.
- ►► Общо виртуално адресно пространство за цѣ̋лата система (.. покажи ..)
-
▼▼
Общо виртуално адресно пространство за цѣ̋лата система
(.. скрий ..)
- В прѣдишния̌т подраздѣл навлѣ̋зох в нѣ̋кои подробности за MMU-то на PDP-11.
- Но първото MMU, което ми е попадало, е това за IBM/System-370.
- Тука най-напрѣд ще ги сравня̨ накратко.
- MMU-то на PDP-11 изобразява малко виртуално адресно пространство върху по-голѣ̋мо физическо адресно пространство.
- При IBM/370 физическото адресно пространство реално е по-малко от виртуалното.
- MMU-то на PDP-11, както и всички по-нови MMU-та, прѣдоставят отдѣлни виртуални адресни пространства за различнитѣ режими на CPU-то - системния̌т и потрѣбителския̌т (kernel-user mode).
- MMU-то на IBM/370 прѣдоставя само едно виртуално адресно пространство.
- MMU-то на IBM/System-370 е трѣ̋бвало да поддържа защитата по 4-битов ключ, наслѣдена от IBM/System-360.
- MMU-то на PDP-11 позволява разрѣшения̌т диапазон на адреситѣ в една виртуална страница да е по-малък от самата виртуална страница.
Физическата памет се разпрѣдѣля на парчета по 128 байта. - При IBM/360/370 паметта се разпрѣдѣля само по цѣли страници, 2 K байта всѣ̋ка.
- При PDP-11, MMU-то е част от архитектурата на компютърът от самото начало.
- При IBM/360/370, MMU-то идва като късно допълнение на вече установила се сѫществуваща архитектура.
- Затова, при въвеђането на разширената архитектура IBM/370, първата работа на разработчицитѣ на системния̌т софту̌ер е да се пусне натрупания̌т за IBM/360 софту̌ер, системен и приложен, и то с минимални промѣни.
- Усилията сѫ били насочени към виртуализация.
- Физическата оперативна памет е да кажем 512 K байта (половин мегабайт).
Модели на IBM/370 с памет повече от един мегабайт май не сѫ пускали. - Във дисков файл (page file) се моделира виртуална памет да кажем два мегабайта.
То и дисковото пространство е кът.
Максималния̌т размѣр е 16 M байта. - Старата система - тази, която е работила години наред на IBM/System-360 и която не подозира за такива нѣща като MMU, динамична прѣадресация и виртуални адреси, се пуска да работи при памет два мегабайта.
- Само дѣто тази памет е виртуална.
- Цѣ̋лата виртуална памет я̨ има на дискът.
- Виртуалнитѣ страници, които се ползват в моментът, сѫ заредени във физическата оперативна памет, и MMU-то динамично прѣобразува виртуалнитѣ адреси в реални физически адреси.
- В нѣ̋какъв момент се случва обръщение към виртуална страница, която не е заредена във физическата оперативна памет,
- MMU-то ще съобщи за това събитие на CPU-то чрѣз прѣкѫсване.
- В случая̌т на IBM/370 това прѣкѫсване ще бѫде прихвана̨то и обработено от ново-написания̌т системен софту̌ер.
- MMU-тата на IBM/370 и на PDP-11 сѫ истински MMU-та,
- Едно истинско MMU ще помогне на системния̌т софту̌ер да рѣши коя виртуална страница између зареденитѣ в паметта да бѫде изгонена оттам, за да се освободи мѣ̋сто за ново-поисканата виртуална страница.
- Ще бѫде изгонена тази, към която не е имало обръщение най-отдавна.
- MMU-то ще каже дали тази страница е била промѣняна по врѣме на прѣстоя̌т си във физическата оперативна памет.
- Ако е била промѣняна, нейния̌т запис върху дискът ще се опрѣсни.
- Слѣд това исканата виртуална страница - тази, която е прѣдизвикала прѣкѫсването, ще бѫде заредена от дискът на освободеното мѣ̋сто във физическата оперативна памет, и изпълнението ще продължи от мѣ̋стото на прѣкѫсване.
- Прѣкѫсна̨тата програма нѣ̋ма да забѣлѣжи прѣкѫсването.
- Ново-написания̌т системен софту̌ер трѣ̋бва да прихваща и други нѣща от старата система.
- Командитѣ за работа с 4-битовитѣ ключове за защита трѣ̋бва да бѫда̨т прихващани.
- Тѣзи ключове важа̨т за виртуалнитѣ страници, сѫществуващи само като копие в дисковия̌т файл.
- Командитѣ за старт на вход-изход и прѣкѫсванията откъм системата за вход-изход трѣ̋бва да бѫда̨т прихващани,
- защото буферитѣ за вход-изход трѣбва да остана̨т във физическата оперативна памет.
- Още нѣщо. Тѣзи буфери имат различни виртуални и физически адреси, а системата за вход-изход трѣ̋бва да знае само физическитѣ адреси.
- Физическата оперативна памет е да кажем 512 K байта (половин мегабайт).
- Освѣн IBM/370, не зная̨ друг случай, когато при виртуална памет и "истинско" MMU
да се поддържа общо виртуално адресно пространство за цѣ̋лата система.
- При IBM/370 това се е наложило, за да може бързо да се пусне сѫществуващ и познат на потрѣбителитѣ софту̌ер на модел с модифицирана архитектура.
- (.. скрий го общото виртуално адресно пространство ..) (.. скрий го това по срѣдата на швстата бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ►► Всѣки потрѣбител с отдѣлно виртуално адресно пространство (.. покажи ..)
-
▼▼
Всѣки потрѣбител с отдѣлно виртуално адресно пространство
(.. скрий ..)
- В прѣдишния̌т подраздѣл показах кое е било най-малкото, което разработчицитѣ на системния̌т софту̌ер на IBM/System/360/370 е трѣ̋бвало да направя̨т, за да използват новия̌т харду̌ер - MMU-то.
- Осигурили сѫ голѣ̋мо виртуално адресно пространство.
- На първо врѣме - едно за цѣ̋лата система.
- Слѣдващата стѫпка е да се осигури отдѣлно виртуално пространство за всѣки потрѣбител.
- Освѣн при IBM/370, при другитѣ системи с "истинско" MMU това е било първата стѫпка.
- Върху специален дисков файл системата моделира нѣ̋колко виртуални адресни пространства - по едно за потрѣбител.
- Всѣ̋ка виртуална страница, записана в специалния̌т файл, се идентифицира не само с виртуалния̌т си адрес, но и с идентификаторът на потрѣбителя̌т.
- Всѣки потрѣбител получава свое виртуално адресно пространство.
- Но, разбира се, не с максималния̌т размѣр (16 M байта при IBM/370), а само толкова, колкото му е нужно.
- Старото ограничение - 15 - за броя̌т на едноврѣменно обслужванитѣ потрѣбители, наложено от 4-битовия̌т ключ за защита при IBM/360, отпада.
- Специалния̌т дисков файл може да съдържа страницитѣ на повече от 15 виртуални адресни пространства.
- Потрѣбителитѣ сѫ изолирани един от друг - всѣки виђа само своето виртуално адресно пространство.
- Във всѣ̋ка архитектура MMU-то си има особености.
- Обобщение на особеноститѣ при IBM/370.
- Отдѣлно виртуално адресно пространство за всѣки потрѣбител е втора стѫпка при IBM/370, докато при другитѣ е първа стѫпка и се подразбира.
- MMU-то при IBM/370 трѣ̋бва да се съобразява с 4-битовия̌т ключ за защита, наслѣден от IBM/370.
- Развитието на системния̌т софту̌ер при IBM/370 е вървѣ̋ло в двѣ посоки:
- Старитѣ операционни системи, които потрѣбителитѣ добрѣ познават от IBM/360, се модифицират така, че всѣки потрѣбител в терминитѣ на старата система да получи свое виртуално адресно пространство.
- Разработена е нова операционна система VM/370, която може да обслужва много потрѣбители.
- Разбира се, програми мога̨т да се изпълняват непосрѣдствено на операционната система VM/370.
- VM е съкращение на Virtual Machines.
- Системата VM/370 може да играе ролята на домакин, като потрѣбителитѣ ӥ сѫ ӥ гости.
- Като домакин тя може да прѣдостави на всѣки свой гост отдѣлна виртуална машина - отдѣлен виртуален компютър.
- Архитектурата на прѣдоставената на гостът виртуална машина - IBM/360 или IBM/370, както и конфигурацията, е по избор.
- Системата VM/370 като домакин симулира за гостът избраната от него виртуална машина.
- За домакинът VM/370 един гост е един потрѣбител.
- Но гостът може да пусне на своята си виртуална машина каквато си иска опрационна система - стара (DOS/360, OS/MFT, OS/MVT) или нова (т.е. модифицирана стара).
- стара, дълго врѣме експлоатирана на IBM/360, или
- нова, за IBM/370 - с едно виртуално адресно пространство или с нѣ̋колко такива.
- Така на своята си виртуална машина гостът може да обслужва свои потрѣбители.
- Накратко, новата операционна система VM/370 прѣдоставя на всѣки свой потрѣбител, когото аз тука наричам гост, не само и не толкова отдѣлно виртуално адресно пространство, а отдѣлна виртуална машина.
- Основна грижа на разработчицитѣ на системния̌т софту̌ер за IBM/370 е била да не налагат промѣни в потрѣбителския̌т софту̌ер, който е бил дълго врѣме в експлоатация на IBM/360.
- (.. скрий ги отдѣлнитѣ виртуални адресни пространства ..) (.. скрий го това по срѣдата на швстата бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ►► Потрѣбители, сесии, процеси и нишки (.. покажи ..)
-
▼▼
Потрѣбители, сесии, процеси и нишки
(.. скрий ..)
- Едно врѣме - при IBM/System/360/370, при пакетната обработка и прѣди системата Unix - тѣзи понятия не бѣ̋ха̨ добрѣ опрѣдѣлени.
- В прѣдишнитѣ раздѣли и подраздѣли на тази бесѣда употрѣбявах нѣ̋какво недобрѣ дефинирано понятие потрѣбител.
- При пакетната обработка (batch procesisng) точната дума бѣше job, но не мога̨ да намѣря̨ подходяща българска дума за job.
- Нѣ̋кога думата job я̨ прѣвеђахме на български и на руски с думата задание.
- Думата задание не се вписва добрѣ в контекстът на настоящата бесѣда.
- Затова досега пишѣх потрѣбител.
- Но настана̨ врѣме понятията да се уточня̨т.
- Уточнението дойде със системата Unix.
- Да напомня̨, че виртуална памет без дискова памет нѣма.
- На виртуалната памет е посветена настоящата бесѣда, а на дисковата памет - прѣдишната.
- В прѣдишната бесѣда май бѣ̋х написал, че без дисковата памет и системата Unix я̨ нѣ̋ма.
- Потрѣбителитѣ (users).
- Описанието на потрѣбителитѣ се намира в "зорко охраняван" файл на системния̌т диск.
- В нашитѣ модерни врѣмена описанието на потрѣбителитѣ може да се намира в нѣ̋кой облак тъмен.
- Това значи да се намира на диск на нѣ̋кой сървър, разположен в нѣ̋коя точка от глобусът или от космосът.
- Сървърът е мощен компютър.
- Облачността на глобалната мрѣжа се състои от сървъри, които мѣня̨т локацията си като стратегически ядрени ракети.
- В настоящата си бесѣда облачността ще я̨ игнорирам.
- Все пак, аз пиша̨ прѣдимно за мина̨лото.
- Един потрѣбител се идентифицира с името си (username).
- Потрѣбителя̌т си има и парола.
- Потрѣбителя̌т е собственик на нѣ̋кои файлове на дискът, и към тѣ̋х той има пълен достѫп.
- Към други файлове един потрѣбител може да има ограничен достѫп, или пък може да нѣ̋ма никакъв достѫп.
- Този важен аспект - достѫпът на потрѣбителитѣ до дисковитѣ файлове, нѣ̋ма отношение към виртуалната памет.
- Може би трѣ̋бваше да бѫде разгледан в прѣдишната бесѣда.
- Как да е. За достѫът на потрѣбителитѣ до дисковитѣ файлове - толкова.
- Описанието на потрѣбителитѣ се намира в "зорко охраняван" файл на системния̌т диск.
- Сесиитѣ.
- Потрѣбителя̌т отваря и затваря сесии.
- Отварянето на сесия се нарича LogIn или SignIn,
- а затварянето - LogOut или SignOut.
- От гледна точка на потрѣбителя̌т в рамкитѣ на сесията той изпълнява програми - потрѣбителски програми, приложни програми, приложения, applications.
- Напримѣр аз сега като пенсионер на лаптопът си най-често изпълнявам двѣ приложения - брау̌зерът (the internet browser), с който ровя̨ из интернет, и редакторът, с който въвеђам текстоветѣ на html.
- Процеситѣ.
- За изпълнението на всѣ̋ка компютърна програма (включително на всѣ̋ко приложение), операционната система пуска процес.
- Един процес може да пуска други процеси.
- В повечето случаи, самата операционна система работи като взаимодѣйстващи си процеси.
- Един процес може сам да си завърши (to terminate).
- Може и привилегирован процес да го терминира (to be terminated).
- Понятието процес е най-важното във връзка с MMU-тата. тоест в контекстът на настоящата бесѣда.
- Процесът е това нѣщо, което има свое отдѣлно виртуално адресно пространство.
- Процеситѣ, работещи едноврѣменно, се конкурират един друг за ресурситѣ на компютърът.
- Обаче процеситѣ сѫ изолирани един от друг в оперативната памет.
- Когато CPU-то прѣвключва от един процес на друг, CPU-то прѣвключва от едно виртуално адресно пространство на друго.
- Всѣ̋ка сесия се прѣдставя със своя̌т базов процес.
- Когато потрѣбителя̌т отвори сесия, за нея̨ се пуска процес - базов процес за сесията.
- За изпълнението на разни приложения в рамкитѣ на сесията, този базов процес пуска други процеси.
- Игнорирайки детайли, базовия̌т процес на сесия можете да си го мислите като интерпретатор на команди или като manager на екранът.
- Нишкитѣ (threads).
(.. advanced topic .. за напрѣдна̨ли ..)
- Думата нишка идва като съкращение на изразът нишка на изпълнение (execution thread).
- Нишкитѣ сѫ тѣзи, които се конкурират за "вниманието" на CPU-то.
- Понѣ̋кога сложни програми се нуђая̨т от нѣ̋колко нишки, които се изпълняват едноврѣменно на CPU-то.
- Ако двѣ нишки сѫ част от един и сѫщ процес, то тѣ работя̨т в едно и сѫщо виртуално адресно пространство.
- Процесът може да си го мислите като нишка, но не каква да е, а нишка със собствено виртуално адресно пространство.
- Един процес може да пусне друг процес - друг отдѣлен процес с отдѣлно виртуално адресно пространство.
- Но сѫщо така, един процес може да пусне друга нишка във своето виртуално адресно пространство.
- Новата нишка ще е част от процесът, който я̨ е пусна̨л.
- Тя сѫщо така може да пусне друга нишка в сѫщото виртуално адресно пространство, тоест друга нишка към сѫщия̌т процес.
- Нишкитѣ, принадлѣжащи към един и сѫщ процес, не сѫ изолирани една от друга, понеже ползват общо виртуално адресно пространство.
- Забѣлѣжка. Коректното взаимодѣйствие међу нишкитѣ в един процес изисква специални умѣния у програмистът.
- Владѣенето на multi-threading-ът (много-нишковото програмиране) слѣдва изрично да се обяви в CV-то.
- Ако работата изисква multi-threading, това умѣние се провѣрява на интервютата за работа.
- Disclaimer. Разпрѣдѣлението на работата върху много компютри, разположени близо или далеч един от друг, е отвѫд прѣдмѣтът на бесѣдата.
- (.. скрий ги процеситѣ и нишкитѣ ..) (.. скрий го това по срѣдата на швстата бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- Едно врѣме - при IBM/System/360/370, при пакетната обработка и прѣди системата Unix - тѣзи понятия не бѣ̋ха̨ добрѣ опрѣдѣлени.
- ◄► (.. скрий го това по срѣдата ..) (.. свий го ..) (.. разгъни го ..) (.. скрий я̨ шестата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ►► Нѣщо като заключение (.. покажи го заключението ..) (.. разгъна̨то ..)
-
▼▼
Нѣщо като заключение
(.. скрий го ..)
(.. свий го ..)
(.. разгъни го ..)
- ◄► Като заключение: За какво служи виртуалната памет.
- ►► Физическото адресно пространство да е по-голѣ̋мо от виртуалното (.. покажи ..)
-
▼▼
Физическото адресно пространство да е по-голѣ̋мо от виртуалното
(.. скрий ..)
- Такъв е случая̌т при 16-битовитѣ компютри.
- При тѣ̋х виртуалното адресно пространство е твърдѣ малко - само 64 К байта.
- Динамичната прѣадресация към физически адреси може да предостави достѫп до оперативна памет с по-голѣ̋м размѣр.
- В тази бесѣда вече бѣ разгледано MMU-то на PDP-11.
- Тука трѣ̋бва да спомена̨ Intel 8086/8088 - процесоритѣ, използвани в първитѣ персонални компютри на IBM.
- За разлика от PDP-11, MMU-то при 8086/8088 не си поставя други цѣли освѣн разширението на физическото адресно пространство.
- Много-потрѣбителска работа не се осигурява.
- (.. скрий го голѣ̋мото физическо адресно пространство ..) (.. скрий го заключението към швстата бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ►► Голѣ̋мо виртуално адресно пространство (.. покажи ..)
-
▼▼
Голѣ̋мо виртуално адресно пространство
(.. скрий ..)
- Обърнѣте внимание на двѣ ключови думи: голѣ̋мо и виртуално.
- Голѣ̋мото адресно пространство е виртуално.
- Да, то може да е виртуална памет с огромен размѣр.
- Може да събере данни за обработка, много повече от прѣди.
- Прѣди динамичната прѣадресация и MMU-тата толкова данни не можѣха̨ да се побера̨т в оперативната памет.
- Програмистът трѣ̋бваше да се погрижи да ги организира даннитѣ в дисков файл.
- Сега на програмистът ще му е по-лесно. Ще разположи даннитѣ във виртуалната памет и тѣ "наглед" постоянно ще сѫ му под рѫка.
- Обаче това е само улеснение за програмитѣ и за програмиститѣ.
- Природата не може да бѫде излъгана.
- Системния̌т софту̌ер с помощта на MMU-то ще моделира голѣ̋мата виртуална памет върху дискът.
- Ще го прави скрито от програмистът, който нѣ̋ма да има грижата.
- Виртуално адресно пространство е голѣ̋мо.
- Да, то може да е виртуална памет с огромен размѣр.
- Програмата може да е толкова голѣ̋ма, че прѣди динамичната прѣадресация и MMU-тата да не е можѣла да се побере в оперативната памет.
- Програмиститѣ сѫ раздѣляли голѣмитѣ програми на припокриващи се сегменти.
- Върнѣте се да прочетете този подраздѣл.
- Сега програмата вѣроятно ще се събере в голѣ̋мата виртуална памет и програмистът нѣ̋ма да има грижата да я̨ сегментира.
- Обаче това е само улеснение за програмиститѣ.
- Природата не може да бѫде излъгана.
- Системния̌т софту̌ер с помощта на MMU-то ще моделира голѣ̋мата виртуална памет върху дискът.
- Вмѣсто прѣзаређане на програмни сегменти, опрѣдѣлени от програмистът, ще се случва автоматично прѣзаређане на виртуални сраници.
- Всѣки процес си има свое виртуално адресно пространство, и то е виртуално.
- Процесът работи не с реални физически адреси, а с виртуални адреси, които подлѣжа̨т на автоматично динамично прѣобразуване в реални физически адреси от MMU-то.
- Прѣди, без динамична прѣадресация, линкерът трѣ̋бва да настрои произвеђаната от него изпълнима програма (executable) към адресът на раздѣлът в оперативната памет, в който раздѣл executable-ът ще се пусне да се изпълнява.
- Сега, линкерът може да настрои произвеђания̌т от него executable към уговорен фиксиран адрес (обикновено над мѣ̋стото, задѣлено за stack).
- Този прѣдварително уговорен адрес е виртуален.
- Той е адрес във виртуалното адресно пространство за този процес.
- На какъв физически адрес отговаря - за това не трѣ̋бва да се грижим.
- Това ще стане ясно едва при пускане на програмата.
- При различни пускания на програмата физическия̌т адрес може да е различен.
- Фиксиран е виртуалния̌т адрес.
- (.. скрий го голѣ̋мото виртуално адресно пространство ..) (.. скрий го заключението към швстата бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ►► Изолация на процеситѣ един от друг (.. покажи ..)
-
▼▼
Изолация на процеситѣ един от друг
(.. скрий ..)
- Всѣки процес работи във свое виртуално адресно пространство и така е изолиран от другитѣ процеси.
- Бъгава или злонамѣрена потрѣбителска програма не може да пише из паметта на другитѣ процеси или на операционната система, защото нѣ̋ма достѫп.
- Процесът виђа само това, което му се показва в неговото виртуално адресно пространство.
- Към всѣ̋ка страница от виртуалното адресно пространство на процесът достѫпът може да е разрѣшен, да е напълно забранен, или да е само за четене.
- Процесът нѣ̋ма възможност да наврѣди на другитѣ.
- Да не може да се наврѣди на другитѣ - това е основното в много-потрѣбителската работа на компютърът.
- (.. скрий я̨ изолацията на процеситѣ ..) (.. скрий го заключението към швстата бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- Всѣки процес работи във свое виртуално адресно пространство и така е изолиран от другитѣ процеси.
- ►► Динамични библиотеки (.. покажи ги ..)
-
▼▼
Динамични библиотеки
(.. скрий ги ..)
- Върнѣте се да прочетете този подраздѣл.
- Динамични библиотеки. Цѣлия̌т израз е библиотеки с динамично свързване.
- DLLs: Dynamically Linked Libraries.
- Наричани още: shared objects, shared libraries или раздѣляеми библиотеки.
- За функционалността на DLL-итѣ допринася не само динамичната прѣадресация (MMU-тата), но и възможността, която съврѣменнитѣ компютърни архитектури прѣдоставят, компилаторитѣ да генерират само позиционно независим код (PIC: position independent code).
- Една динамична библиотека и един executable си приличат много.
- Резултат сѫ от работата на линкерът.
- Съдържат или код (машинни инструкции - код, изпълним от CPU-то), или данни.
- Мога̨т да се заређат в оперативната памет за изпълнение.
- Обаче от executable може да се стартира процес, а от динамична библиотека не може.
- Един executable обявява на операционната система от коя входна точка да се стартира процесът.
- Една динамична библиотека нѣ̋ма специална входна точка.
- Обръщенията към съдържащитѣ се в нея̨ подпрограми и данни трѣ̋бва да дойда̨т от други програми, а не от операционната система.
- Тѣзи обръщения се свързват и настройват по врѣме на заређането на динамичната библиотека във виртуалното адресно пространство на процесът.
- Когато една динамична библиотека се заређа във виртуалното адресно пространство на процес, нуђаещ се от нея̨, намира ӥ се там мѣ̋сто.
- Ако сѫщата динамична библиотека се зареди във виртуалното адресно пространство на друг процес, тя може да бѫде намѣстена на друг виртуален адрес.
- Двата процеса използват едно и сѫщо копие на динамичната библиотека във физическата оперативна памет.
- Затова е важно подпрограмитѣ от динамичната библиотека да сѫ в позиционно независим код.
- (.. скрий ги динамичнитѣ библиотеки ..) (.. скрий го заключението към швстата бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ►► Виртуални машини (.. покажи ..)
-
▼▼
Виртуални машини
(.. скрий ..)
- Думата виртуален означава симулиран или моделиран, а виртуализация - симулация или моделиране.
- А думата машина означава компютър, разбира се.
- За системата VM/370, която прѣдоставя гостуващи виртуални машини с архитектура, подобна на архитектурата на компютърът-домакин, стана̨ дума тука.
- Идеята за виртуализация на оперативната памет - идеята за виртуална памет, се прѣнася към цѣлия̌т компютър - към цѣ̋лата машина.
- Появява се идеята за виртуална машина.
- На пръв поглед - отсам хоризонтът, трѣ̋бва да се спомена̨т
виртуалнитѣ машини, които симулират-моделират реални машини.
- Реална машина - означава машина, сѫществуваща в харду̌ерно изпълнение.
- Слѣд системата VM/370, вече има много приложен софту̌ер за виртуални машини.
- Има даже софту̌ер, който симулира машина със съвсѣм друга архитектура.
- Напримѣр, виртуална машина с архитектура VAX, работеща на машина-домакин, която не е VAX.
- Виртуалнитѣ машини имат широко приложение
- както за тестване на програми, когато цѣлевия̌т харду̌ер не е наличен,
- така и за мултиплициране, когато един нов мощен модел идва да замѣни стари машини в нѣ̋колко обработки.
- А оттатък хоризонтът, на слѣдващо ниво на абстракция, сѫ
виртуалнитѣ машини, сѫществуващи изцѣ̋ло като софту̌ерна идея, без връзка в никакъв харду̌ер.
(.. Това излиза от темата на настоящата бесѣда ..)
- На първо мѣ̋сто слѣдва да се спомене виртуалната машина на езикът Java - JVM: Java Virtual Machine.
- Тя изпълнява програми на езикът Java.
- Програмитѣ на езикът Java се изпълняват на такава машина.
- За всѣки от езицитѣ за програмиране, които не се компилират, а се интерпретират, може да се изгради съотвѣтна идея за виртуална машина.
- Освѣн Java, такива езици сѫ PERL, Python, PHP, LISP и други.
- На първо мѣ̋сто слѣдва да се спомене виртуалната машина на езикът Java - JVM: Java Virtual Machine.
- (.. скрий ги виртуалнитѣ машини ..) (.. скрий го заключението към шестата бесѣда ..) (.. свий го ..) (.. разгъни го ..) .. към началото ..
- ◄► (.. скрий го заключението ..) (.. свий го ..) (.. разгъни го ..) (.. скрий я̨ шестата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
- ◄► (.. скрий я̨ шестата бесѣда за динамичната прѣадресация ..) (.. свий я̨ ..) (.. посвий или поразгъни ..) (.. разгъни я̨ ..) .. към началото ..
►► 8. [Draft] Хуманната аритметика на компютър (.. покажи я̨ седмата бесѣда ..) (.. разгъна̨то ..) .. към началото ..
- Колкото по̀ остарѣ̋вам, толкова по̀ се вдѣтинѣ̋вам.
- С това ще се упражнявам на JavaScript.
- Ще уча̨ компютърът на сѫщата аритметика, както дѣцата в началното училище.
- May appear in the future: Не е написано още. Я̀ доживѣя̨ да го напиша̨, я̀ не.
▼▼ 8. [Draft] Хуманната аритметика на компютър (.. скрий я̨ седмата бесѣда ..) (.. свий я̨ ..) (.. разгъни я̨ ..) .. към началото ..
-
In development: Не е написано още.
- ◄►
- ◄►
- ◄► (.. скрий я̨ седмата бесѣда за хуманната аритметика ..) (.. свий я̨ ..) (.. посвий или поразгъни ..) (.. разгъни я̨ ..) .. към началото ..
►► 9. Прѣпратки (references) (.. покажи ги ..) .. към началото ..
▼▼ 9. Прѣпратки (references) (.. скрий ги ..)
- christotamarin.blog: Житейска програма
- christotamarin.blog: XT Keyboard Layouts Reference: Клавиатури с разширена кирилица
- christotamarin.blog: Virtual Keyboard and some other tools
- christotamarin.blog: Принципи на моитѣ възгледи за мина̨лото
►► 10. Коментари, въпроси и отговори (comments, Q&As) (.. покажи ги коментаритѣ ..) (.. разгъна̨ти ..) .. към началото ..
▼▼ 10. Коментари, въпроси и отговори (comments, Q&As) (.. скрий ги ..) (.. свий ги ..) (.. разгъни ги ..) .. към началото ..
Ако има въпрос или коментар, на който трѣ̋бва да отговоря̨, ще прѣпиша̨ въпросът или коментарът тука и ще отговоря̨ тука.
- ►► ::christo.tamarin, 2023-04-13 20:34:: The history of IT at a glance (.. покажи тука ..) (.. разгъна̨то ..) (.. покажи във facebook: .. там .. или там ..) .. към началото ..
-
▼▼
::christo.tamarin, 2023-04-13 20:34:: The history of IT at a glance
(.. скрий ..)
(.. свий ..)
(.. разгъни ..)
(.. покажи във facebook: ..
там .. или
там ..)
.. към началото ..
- ◄► Историята на информационнитѣ технологии накратко Този текст не е завършен. Я̀ го завърша̨, я̀ не.
- ►► Програмисти (.. покажи ..)
-
▼▼
Програмисти
(.. скрий ..)
- Смѣ̋та се, че първата програмистка е била Ада Лъвлейс (Ada Lovelace), дъщеря на поетът Байрон и сътрудничка на Чарлз Бабиџ (Charles Babbage).
- Обаче прѣз животът си изпълнение на своя програма тя не е виђала, понеже компютърът на Чарлз Бабиџ не е влѣ̋зъл в дѣйствие.
- Реално първитѣ на свѣтът програмисти сѫ настройчицитѣ на жакардовитѣ тъкачни станове.
- ►► Бази данни (.. покажи ..)
-
▼▼
Бази данни
(.. скрий ..)
- Архиви и библиотеки сѫ първитѣ бази данни.
- Слѣдващия̌т сѫществен момент в развитието е холеритовата техника на фирмата IBM от края̌т на 19-ти и прѣз 20-ти вѣк.
- Бази данни в компютърната ера.
- Първо ще спомена̨ базитѣ данни по йерархичния̌т или по мрѣжовия̌т модел.
- Коболиститѣ (програмиститѣ на COBOL) бѣ̋ха̨ наложили езикът CODASYL.
- Нѣ̋ма май такива нѣща вече.
- Сега всѣ̋ка файлова система може да се смѣ̋та за йерархична база данни.
- Наложи се релационния̌т модел на базитѣ данни и езикът SQL.
- ►► Калкулатори (.. покажи ..)
-
▼▼
Калкулатори
(.. скрий ..)
- Смѣтала̀.
- Едно врѣме във всѣ̋ка класна стая в началното училище (в отдѣленията) имаше голѣ̋мо смѣтало,
- а всѣки второкласник имаше малко смѣтало като учебно пособие.
- Имаше и уроци за работа с такива смѣтала̀.
- Въпрѣки това българското образование се проваляше при усвояването на умѣнията за работа със смѣталата.
- Магазинеритѣ в България смѣ̋таха̨ с химически молив върху амбалажна хартия.
- Амбалажната хартия, с която магазинерът ще ти увие буцата сирене, обикновено съдържаше смѣтката на прѣдишния̌т клиент.
- Не така бѣше в Русия.
- Когато прѣз 80-тѣ ходѣх в командировка в Москва, тамошнитѣ магазинери работѣха̨ срѫчно със смѣтала̀.
- Логаритмична линийка и логаритмични таблици.
- Едно врѣме в гимназиитѣ се учѣхме да смѣ̋таме с логаритмична линийка и логаритмични таблици.
- Тогава това бѣше необходимо за инженерното дѣло.
- На срѣдношколскитѣ олимпиади по математика и физика разрѣшаваха̨ да си носим логаритмични линийки.
- Сега всичко това е out-of-date, остарѣ̋ло, измѣстено от компютритѣ и електроннитѣ калкулатори.
- Механични калкулатори.
- При такъв калкулатор се натискат клавиши и се върти рѫчка.
- Често сѫ снабдени и със звънчета.
- В много филми за старото американско врѣме може да се види, че във всѣки американски магазин или бар има такъв калкулатор като касов апарат.
- Баща ми бѣше счетоводител и имаше на разположение такъв калкулатор.
- Едно завъртане на рѫчката напрѣд - събиране.
- Завъртане назад - извађане.
- Пет завъртания напрѣд - умножаване на пет.
- Имаше брояч на завъртанията.
- Ако искаш да умножиш по пет, но си се засилил и си завъртѣ̋л рѫчката шест пѫти, завърташ веднѫж назад.
- Имаше и начин за извършване на дѣление, но в нашето село никой не знаѣше как става това.
- Електро-механични калкулатори.
- За разлика от чисто механичнитѣ, тѣзи си нѣ̋мат рѫчка, а само клавиши.
- Имат си и електромоторче[та] за въртене на регистритѣ.
- Изполвал съм такъв - нѣмско производство. Много удобен бѣше за работа.
- Електронни калкулатори.
- Тука има вече българска слѣда, даже двѣ такива слѣди.
- Иначе в областта на ΙΤ друга българска слѣда има само при компютърнитѣ вируси.
- Но за тѣ̋х изобщо нѣ̋ма да пиша̨, че ме е срам.
- Първата българска слѣда не е съвсѣм българска, ама все пак.
- На Џон Атанасов баща му още като дѣте роднини го отвели в Щатитѣ.
- Там той се изучил за инженер и се оженил за американка от ирландски произход, учителка по математика.
- А самия̌т Џон бил професор по физика в щатския̌т университет на Айова.
- По врѣме на WW2 той рѣшил да създаде калкулатор за насочване на артилерийския̌т огън, изграден върху материалната база на радиотехниката, т.е. електронен калкулатор.
- Нарѣчен бил ABC - Atanassoff-Berry Computer (Berry бил сътрудник на Atanassoff).
- Войната свършила и работата по калкулаторът била зарѣ̋зана, прѣди той да бѫде завършен.
- Прѣз слѣдващитѣ години във връзка със сѫдебен спор за патенти адвокатитѣ на едната страна по дѣлото изровили информация за ABC.
- Тази информация достигна̨ла до Благовѣст Сендов, слѣд което на случая̌т била придадена гласност и в България, и в свѣтът.
- При ABC за пръв пѫт електроника била използвана за IT.
- Но все пак, това ABC не е било компютър, защото ABC не е бил програмируем.
- ABC е бил калкулатор със специално прѣдназначение.
- Втората българска слѣда в електроннитѣ калкулатори.
- Прохођащата българска електроника прѣз 60-тѣ била на свѣтовно ниво при настолнитѣ електронни калкулатори.
- Построени били заводи в София и Силистра.
- Марката ЕЛКА стана̨ла нарицателно за електронен калкулатор в българския̌т език.
- Разбира се, българската електроника бързо изостана̨ла, защото не можѣла да слѣдва прогресът към калкулаторитѣ џобен формат.
- Тука има вече българска слѣда, даже двѣ такива слѣди.
- (.. скрий ги смѣталата и калкулаторитѣ ..)
- Смѣтала̀.
- ►► Електроника (.. покажи ..)
-
▼▼
Електроника
(.. скрий ..)
- Електрониката е слѣдваща фаза в развитието на радиотехниката, приложение на радио-техниката не само в радиото.
- Радио-техниката (електрониката) се обособила от електро-техниката слѣд изобрѣтяването на електронната лампа (1904).
- Технологичния̌т прогрес е замѣнил електроннитѣ лампи с транзистори (слѣд 1954), основани на полу-проводници (силиций, германий, ..).
- За разлика от електроннитѣ лампи, при полу-проводницитѣ имало мегдан за миниатюризация.
- Появили се интегрални схеми - LSI (Large Scale Integration), послѣ X-LSI (Extra-Large Scale Integration), послѣ XX-LSI, ..
- Сега нано-технологии и XXXX..XX-LSI.
- ►► Компютри (.. покажи ..)
-
▼▼
Компютри
(.. скрий ..)
- Конрад Цузе.
- Конрад Цузе.
- ◄► (.. скрий го коментарът ..) (.. свий го ..) (.. разгъни го ..) (.. скрий ги коментаритѣ ..) (.. свий ги ..) (.. разгъни ги ..) .. към началото ..
- ►► ::author.unknown, 2023-10-25 09:45:: Историческа справка за нашето поколѣние (.. покажи я̨ тука ..) (.. покажи я̨ във facebook: .. Нѣжна е нощта .. България ..) .. към началото ..
-
▼▼
::author.unknown, 2023-10-25 09:45:: Историческа справка за нашето поколѣние
(.. скрий я̨ ..)
(.. покажи я̨ във facebook: ..
Нѣжна е нощта ..
България ..)
.. към началото ..
- Има хора, които сѫ родени прѣз 50-тѣ и 60-тѣ години.
Отгледани сѫ прѣз 60-тѣ години.
Учили сѫ прѣз 70-тѣ години.
Тѣ сѫ се женили прѣз 80-тѣ години.
Работили сѫ прѣз 80-тѣ и 90-тѣ,
много работя̨т и днес ... - Тѣ си промѣниха̨ мирогледът прѣз 90-тѣ.
«Виђаха̨ свѣтлината» прѣз 2000-та.
Бѣ̋ха̨ изненадани прѣз 2010.
И неотказали се прѣз 2020! - Прѣживѣли почти
седем различни десетилѣтия...
два различни вѣка...
двѣ различни хилядолѣтия... - От телефон на дълги разстояния до видео-разговори навсѣ̋къдѣ по свѣтът,
от филмови ленти и slide-show-та до Youtube,
от винилови плочи до online-музика,
от рѫкописни писма до email, WhatsApp и социални мрѣжи.
От слушане на мачове по радиото, гледане на черно-бѣ̋ла телевизия и след това телевизия с висока раздѣлителна способност.
Тѣ ходѣха̨ във видеотеката, а сега гледат Netflix.
Знаѣха̨ как да отпечатат фотокарта,
имаха̨ първитѣ компютри, перфокарти, флопи дискове,
а сега имат гигабайти и терабайти на мобилни телефони или iPad.
Прѣз цѣ̋лото си дѣтство тѣ нося̨т кѫси панталони, слѣд това дълги панталони, оксфордки, бермуди или мини поли, макси поли, клинове, харем и др.
Обуваха̨ филцове, караха̨ ролери, триколки и велосипеди, мотопеди, бензинови или дизелови коли, а сега карат хибриди или 100% електрически скутери, велосипеди, скутери и коли.
Те избѣгна̨ха̨ дѣтски паралич, менингит, едра шарка, грип H1N1 и западнонилска треска. - Да! Такива хора сѫ мина̨ли прѣз много, но какъв прѣкрасен и интересен живот имат!
- Това поколѣние спокойно може да се нарече «бивши пенсионери»,
които сѫ родени в онзи свѣ̋т на 50-тѣ и 60-тѣ години,
имали сѫ аналогово дѣтство
и дигитален живот на зрѣ̋ла възраст.
Тѣ сѫ един вид «Абракадабра». В буквалния̌т смисъл на думата. - Това поколѣние е живѣ̋ло и прѣживѣ̋ло повече от всѣ̋ко друго в историята на човѣчеството във всѣ̋ко измѣрение на животът.
- Именно това поколѣние се адаптира към всѣ̋какви промѣни!
- 👏 Аплодисменти 👏!
За всички прѣдставители на особеното поколѣние,
което бѣше и си остава уникално, независмо от всичко!
Здраве, Радост, Късмет, Доброта и Щастие!💛🍀💜 - ◄►
::christo.tamarin, 2023-10-25 11:05::
два различни вѣка...
Кое е нашето хилядолѣтие?
двѣ различни хилядолѣтия...- Дали това, прѣз което европейцитѣ сѫ открили Америка?
- Или това, прѣз което американцитѣ ще заселя̨т Луната?
- (.. скрий я̨ историческата справка за нашето поколѣние ..) (.. скрий ги коментаритѣ ..) (.. свий ги ..) (.. разгъни ги ..) .. към началото ..
- Има хора, които сѫ родени прѣз 50-тѣ и 60-тѣ години.
- ►► ::christo.tamarin, 2024-04-01 15:34:: Не е била Brigitte Bardot (.. покажи го коментарът ..) .. към началото ..
-
▼▼
::author.unknown, 2023-10-25 09:45:: Не е била Brigitte Bardot
(.. скрий го коментарът ..)
.. към началото ..
- В третата си бесѣда разказах как прѣз лѣ̋тото на 1977, докато карах стаж в Търново, избродирах картинка за тракащ принтер.
- Искаше ми се Brigitte Bardot да е позирала на художникът.
- Но се оказа, че това нѣ̋ма как да е възможно.
- Литографията е рисувана около 1935 от съвѣтския̌т художник Е.А.Кибрик.
- (.. скрий го коментарът ..) (.. скрий ги коментаритѣ ..) (.. свий ги ..) (.. разгъни ги ..) .. към началото ..
- ◄► (.. скрий ги коментаритѣ ..) (.. свий ги ..) (.. разгъни ги ..) .. към началото ..
(.. покажи всичко ..) (.. свиј&скриј всичко ..) .. to the bottom ..
За компјутрите полиномиално
- 1. Преамбјул: общ раздел
- 2. О, мина̨ло бързозабравимо: 5-те дупки на перфолентата
- 3. За компјутрите полиномиално
- 4. Бродерија на тракащ принтер
- 5. ЕГН-то отвѫтре
- 6. Дисковата памет на System/360
- 7. Виртуалната памет на компјутрите
- 8. [Draft] Хуманната аритметика на компјутър
- 9. Препратки (references)
- 10. Коментари, въпроси и отговори (comments, Q&As)
►► 1. Преамбјул: общ раздел (.. покажи го преамбјулът ..) (.. разгъна̨то ..)
- Сега съм пенсионер.
- Все̋ка от тези беседи е независима от другите и може да се чете отделно.
▼▼ 1. Преамбјул: общ раздел (.. скриј го преамбјулът ..) (.. свиј го ..) (.. разгъни го ..)
- ►► Предговор на преамбјулът (.. покажи го предговорът на преамбјулът ..)
-
▼▼
Предговор на преамбјулът
(.. скриј го предговорът на преамбјулът ..)
- През 2018 се пенсионирах, след като придобих изискващите се стаж и възраст за това.
- Пенсионирах се след 40 години работа като компјутърен програмист и софту̌ерен инженер.
- В сѫщност бе̋х много добър кодировчик.
- Много добре съм се разбирал с компјутрите.
- Влизал съм им под тенекиите - при битовете.
- Защото те само от битове разбират.
- В тази публикација ще се помѫча̨ да събера̨ спомени от далечното мина̨ло.
- На дърти години човек се вдетине̋ва.
- Натам съм се запѫтил и аз.
- Това тука ме връща към младежките ми години.
- Като взема̨т да ме нале̋гат и детски спомени, ще стане крајно време да спра̨ да пиша̨.
- Но ако по спомени захвана̨ не̋која тема, ще проследја̨ и следващото ӥ развитие.
- Тоест, това не̋ма да сѫ само младежки спомени.
- А за занимавка и за гимнастика на умът, не искам да спирам да пиша̨ софту̌ер.
- Упражнјавам се на JavaScript.
- Така че ще има много софту̌ер втъка̀н в тази публикација.
- There will be much software behind.
- .. скриј го предговорът на преамбјулът .. (.. скриј го преамбјулът ..) (.. свиј го ..) (.. разгъни го ..)
- ►► Все̋ка беседа е независима от остана̨лите (.. покажи ..)
-
▼▼
Все̋ка беседа е независима от остана̨лите
(.. скриј ..)
- Все̋ка беседа е от този сборник с беседи е независима от остана̨лите
- и може да се чете отделно.
- Все̋ка една е предизвикана от не̋какъв мој далечен спомен.
- Обикновено се проследјава и развитието на проблемът през следващите години.
- Все̋ка от беседите е свързана по не̋какъв начин с компјутрите.
- Все пак в детајли не съм навлизал.
- От читателите не се изискват знанија в областта на компјутрите или софту̌ерът.
- В не̋кои от беседите е втъка̀н софту̌ер.
- Тој демонстрира нещо.
- Написан е на JavaScript.
- Може да се тества.
- .. скриј ја̨ независимостта на беседите .. (.. скриј го преамбјулът ..) (.. свиј го ..) (.. разгъни го ..)
- ◄► Засега не всички планирани беседи сѫ завършени.
- Но всички планирани беседи си имат вече заглавија и се појавјават в таблицата на съдържанието.
- ◄► (.. скриј го преамбјулът ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
►► 2. О, мина̨ло бързозабравимо: 5-те дупки на перфолентата (.. покажи ја̨ първата беседа ..) (.. разгъна̨то ..) .. към началото ..
- По спомените ми от 9-ти клас.
- Средно образование съм завършил с квалификација "изчислител-кодировчик".
- Кодирането на музиката - музикалните ноти - се учеше едно време в 3-то отделение.
- А много по-важното кодиране за компјутрите мај само експерти го знаја̨т. ::2021-11-05 13:10::
▼▼ 2. О, мина̨ло бързозабравимо: 5-те дупки на перфолентата (.. скриј ја̨ първата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
::2021-11-05 13:10::- ►► Предговор, којто тре̋бва да се прочете първо (.. покажи го предговорът на първата беседа ..)
-
▼▼ Предговор, којто тре̋бва да се прочете първо
(.. скриј го предговорът на първата беседа ..)
- Мина̨лото бива мина̨ло незапомнено и мина̨ло бързозабравимо.
- Прогресът на човешкото общество се дължи само на напредъкът на технологиите.
- Револјуциите не мога̨т да водја̨т до прогрес.
- Револјуциите мога̨т да причинја̨т регрес в обществото, ако се превърна̨т в спирачка на технологичното развитие.
- А иначе револјуциите сѫ нај-обикновени актове на насилие, каквито човечеството познава открај време:
- братоубијства, грабежи, војни, масови убијства.
- До напредък те на водја̨т.
- Пенсионирал съм се след 40 години стаж в компјутърната индустрија - като компјутърен програмист и софту̌ерен инженер.
- И този текст тука е посветен на далечната историја на компјутърната индустрија,
- далечната - отпреди аз да вле̋за̨ професионално в индустријата.
- Иска ми се да материализирам спомените си:
- какво съм учил в девети клас в търновската гимназија през 1969.
- Да, в девети клас учехме за машинното кодиране на Минск-2.
- Не̋какви общи познанија сѫ ни били преподавани в десети клас - схеми, алгоритми, кодировки, нотации.
- А в единадесети клас учихме езикът за програмиране от високо ниво Алгол-60.
- В дипломата ми за средно образование има и не̋каква професионална квалификација: изчислител-кодировчик.
- Нашата паралелка 'Д' завършвахме като изчислители-кодировчици.
- Други паралелки завършваха̨ като автомонтјори, електротехници, ..
- Нај завиђахме на шофјорите от 'Г'-паралелка - завършваха̨ гимназија с шофјорска книжка.
- През животът си никога не съм програмирал на Минск-2, нито за Минск-22 или Минск-32.
- Нито пък съм виђал компилатор от Алгол-60.
- Но програми на Алгол-60 съм писал.
- Веројатно единствените входно-изходни устројства на "древните" компјутри Минск-2 сѫ били вход и изход на петпѫтечкова перфолента, заимствана от телеграфът.
- Затова в двата раздела тука давам общи сведенија за:
- Но да караме наред.
- Идеите на Charles Babbage и Ada Lovelace от 19-ти век сѫ изпреварващи - времето на компјутърната техника още не било дошло.
- Но доста технологични постиженија от 19-ти век и от първите десетилетија на 20-ти век сѫ допринесли за развитието на компјутърните технологии:
- жакардовите станове
- телеграфът
- холеритовата техника на IBM
- автоматичните телефонни централи
- и разбира се,
- радиотехниката.
- Например:
- Елементната база на съвременните компјутри е тръгна̨ла от радиотехниката.
- Обаче първијът програмируем компјутър на Konrad Zuse (1941) е бил построен с елементи на телефонијата, на автоматичните телефонни централи.
- Първо прочетете за 7-битовата среда̀, 7-битовата среда̀, 7-битовата среда̀, 7-битовата среда̀, 7-bitovata sredà, 7-bitovata sredà, за 7-битовата бариера и за преодолјаването ѝ в началото на 21-ви век.
- Тука ще стане дума за петбитовата кодировка, стандартизирана за петпѫтечковите перфоленти, използвани в телеграфијата, но и в "древните" компјутри Минск-2.
- .. скриј го предговорът на първата беседа .. (.. скриј го мина̨лото незапомнено ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ►► Кодировката на петпѫтечковите перфоленти (.. покажи ја̨ ..) (.. разгъна̨то ..) .. към началото ..
-
▼▼ Кодировката на петпѫтечковите перфоленти
(.. скриј ја̨ ..)
(.. свиј ја̨ ..)
(.. разгъни ја̨ ..)
- ►► Телеграфът (.. покажи ..)
-
▼▼ Телеграфът
(.. скриј го ..)
- В тесен смисъл телеграфијата представлјава дистанционно предаване на електрически импулси.
- Важни сѫ съпѫтстващите устројства.
- [A] Перфоратор с клавиатура
- Устројство с клавиатура, приличащо на пишеща машина, което вместо да отпечатва буквите, цифрите, точките и запетајките на хартија във вид, удобен за човек, дупчи кодовете им на перфолента.
- [B] Пишеща машина без клавиатура
- Чете от перфолента кодовете на букви, цифри, точки и запетајки, и ги отпечатва във вид, удобен за човек.
- [C] Четец на перфолента
- Чете кодове от перфолента и ги праща по телеграфна линија до отдалечено ме̋сто или пък ги подава на компјутър - тој да прави каквото иска с те̋х.
- [D] Перфоратор без клавиатура
- Дупчи на перфолента или импулсите, получени по телеграфна линија от отдалечено ме̋сто, или кодовете, получени от компјутър.
- В самата телеграфија чрез устројство A телеграмата се отпечатва на перфолента,
којато се подава на устројство C, за да бѫда̨т пратени кодовете до дестинацијата,
където устројство D дупчи получените сигнали на перфолента,
којато се подава на устројство B, за да бѫде текстът отпечатан на хартија.
Така получената телеграма се врѫчва на получателјът. - Тази услуга, којато пощите предоставјаха̨, е от 19-ти век.
- В началото на 21-ви век телеграфијата излезе от употреба, защото услугата "електронна поща" на интернет и услугата SMS на GSM-комуникациите ја̨ заместиха̨.
- Българските пощи спре̋ха̨ да пращат телеграми през 2005.
- Последната телеграма в светът е била пратена на 2013-07-14.
- Устројствата, обслужващи телеграфијата, сѫ били използвани при първите компјутри, вклјучително и при Минск-2, за които ще стане дума.
- Забележка_1: Веројатно винѫги е имало хора, способни да чета̨т кодирани перфоленти и да записват на рѫка или да диктуват получените телеграми.
- Забележка_2: Разбира се, телеграфијата от последните десетилетија е използвала по-съвременни електронни устројства с памет.
- (.. скриј го телеграфът ..) (.. скриј ја̨ кодировката на петпѫтечковите перфоленти ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ►► Кодировката (.. покажи ..)
-
▼▼ Кодировката
(.. скриј ја̨ ..)
Подредба на таблицата:
- Двата реда с десетични числа представјат перфорираните кодове в две нотации: с младшијът бит отгоре (BigEndian) и с младшијът бит отдолу (LittleEndian).
- Таблицата може да се покаже с три подредби на колоните:
- според горните битове - те сѫ нај-значими: BigEndian
- според долните битове - те сѫ нај-значими: LittleEndian
- според клавиатурата: QWERTY
0 2 8 4 29 25 16 10 1 21 28 12 3 13 24 20 18 22 11 5 26 30 9 17 23 14 15 19 6 7 27 31 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 0 8 2 4 23 19 1 10 16 21 7 6 24 22 3 5 9 13 26 20 11 15 18 17 29 14 30 25 12 28 27 31 NUL CR LF SP Q W E R T Y U I O P A S D F G H J K L Z X C V B N M ESC DEL NUL CR LF SP 0 1 2 3 4 5 6 7 8 9 - ' WRU ! & # BEL ( ) + / : = ? , . ESC DEL NUL CR LF SP Ја В Е Р Т Ы У И О П А С Д Ф Г Х Ј К Л З Ь Ц Ж Б Н М ESC DEL NUL CR LF SP 0 1 2 3 4 5 6 7 8 9 - ' WRU Э Ш Щ Ју ( ) + / : = ? , . ESC DEL - Има два регистъра:
- основен регистър - регистър на буквите
- алтернативен регистър - регистър на формите - цифри, скоби, запетаи, ..
- Има и два режима:
- латиница
- кирилица
- Само в страните с писменост на кирилица сѫществува режим кирилица.
- Повечето страни се задоволјават само с режим латиница.
- Четирите реда в таблицата сѫ както следва:
- основен регистър - режим латиница
- алтернативен регистър - режим латиница
- основен регистър - режим кирилица
- алтернативен регистър - режим кирилица
- Контролните знаци NUL, LF, SP, CR, ESC, DEL се кодират еднакво в двата регистъра и двата режима.
- От основен към алтернативен регистър се преминава със ESC.
- А обратно от алтернативен към основен регистър се преминава със DEL.
- Макар кодировката да е 5-битова, двата регистъра - основен и алтернативен - позволјават 52 знака, освен 6-те контролни знака.
- Ако сѫществува режим кирилица, то след NUL се влиза в този режим, а след DEL се преминава в режим латиница - основен регистър.
- NUL означава непродупчена перфолента.
- Ако режим кирилица не сѫществува, NUL не може да се среща вѫтре в съобщение.
- Иначе, ако режим кирилица сѫществува, то това е началнијът режим. Повечето телеграми не налагат превклјучване към режим латиница, но ако се наложи, това става с DEL.
- (.. скриј ја̨ петбитовата кодировката ..) (.. скриј го подразделът ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ►► Перфоленти с повече от пет пѫтечки (.. покажи ..)
-
▼▼ Перфоленти с повече от пет пѫтечки
(.. скриј ..)
- Петпѫтечковата перфолента с кодировката, показана по-горе, определја петбитовата бариера.
Компјутрите Минск-2, за които ще стане дума по-долу, сѫ били установени на тази бариера.
Аз не съм работил с компјутри на петбитовата бариера, нито с петпѫтечкови перфоленти. - Когато аз започна̨х работа, перфолентите, използвани от индустријата, бе̋ха̨ осемпѫтечкови, а компјутрите бе̋ха̨ установени на седембитовата бариера, в 7-битова среда̀.
- Едно време - в първите мои години в индустријата -
перфолентите се използваха̨, за да се заређат тестови програми, или - ре̋дко - при начално заређане (boot).
- [Q]Въпрос: А сега как се заређат тестови програми на полу-умре̋л харду̌ер?
- [A]Отговор: Сега целијът чип се изхвърлја и се заменја с нов.
- Едно време лјубимата дреха на човек в течение на годините се сдобивала с кръпки.
- Сега човек си изхвърлја скѫсаната дреха, колкото и да му е лјубима, и си купува нова.
- Това е технологичен прогрес.
- Новото производство е достатъчно евтино и не си струва старото да се ремонтира.
- Сега има реална възможност хартијата да се изхвърли от информационните технологии.
- Пластика, имплантирани чипове - какво му тре̋бва на човек ..
- Даже лјубовни писма на хартија вече не̋ма.
- Лично аз имам богат опит с перфокарти, а не толкова с перфоленти.
- Но перфокартите сѫ извън обхватът на този разказ.
- (.. скриј ги 8-пѫтечковите перфоленти ..) (.. скриј ја̨ кодировката на петпѫтечковите перфоленти ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- Петпѫтечковата перфолента с кодировката, показана по-горе, определја петбитовата бариера.
- ◄► (.. скриј ја̨ кодировката на петпѫтечковите перфоленти ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) (.. скриј го мина̨лото незапомнено ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ►► Компјутрите Минск-2 - в далечното мина̨ло на съветската индустрија (.. покажи ..) (.. разгъна̨то ..) .. към началото ..
-
▼▼ Компјутрите Минск-2 - в далечното мина̨ло на съветската индустрија
(.. скриј ..)
(.. свиј ..)
(.. разгъни ..)
- ►► И какво все пак е стана̨ло с компјутрите Минск-2 (.. покажи ..)
-
▼▼ И какво все пак е стана̨ло с компјутрите Минск-2
(.. скриј ..)
- През сѫщата година, когато в девети клас съм учил кодирането на Минск-2, заводът в град Минск бил спре̋л производството на тези компјутри.
- Следващите модели Минск-22 и Минск-32 доне̋къде сѫ били програмно съвместими с Минск-2.
- Не̋колко компјутъра Минск-32 сѫ били инсталирани и експлоатирани в Българија.
- При Минск-32 за приложно програмиране се използваше нај-вече езикът COBOL.
- Освен в град Минск, развојни центрове за компјутърна техника в бившијът Съветски съјуз имаше в още не̋колко града. На първо ме̋сто в Москва и в Киев. Но Българија е била клиент на заводът в Минск.
- Както при всичко остана̨ло, и при компјутрите съветското производство отстѫпваше на западното - и по качество, и по цена, и по всичко.
- В средата на 60-те години в индустријата на Запад голе̋м успех е постигна̨ла фирмата IBM със својата System/360. Доне̋къде била стана̨ла индустриален стандарт, с развит пазар не само за харду̌ер, но и за софту̌ер.
- Във връзка с това в Москва сѫ решили да направја̨т "голе̋м скок".
- Издадена е била командата всички стари проекти да се канцелират и всички ресурси да се впрегна̨т в reverse-engineering на IBM System/360 под означението ЕС ЭВМ.
- Повече никакви странни модели със странни архитектури!
- Равнјаваме се по първите. Крадем от първите.
- Равнјаваме се по IBM. Крадем от IBM.
- След години почна̨хме да крадем и от фирмата DEC.
- В reverse-engineering-ът бе̋х добър.
- Та това е сложило крај на компјутрите от серијата Минск.
- Специалистите от град Минск и тамошнијът завод успешно сѫ се преквалифицирали за IBM System/360, пардон за ЕС ЭВМ.
- Само да отбележа̨, че независимата държава Белорусија е наследила от бившијът Съветски съјуз сравнително развита компјутърна индустрија.
- По-развита от българската.
- (.. скриј го крајът на Минск-2 ..) (.. скриј го подразделът за компјутрите Минск-2 ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ►► Отклонение: Из "древностите" на българската компјутърна индустрија (.. покажи ..)
-
▼▼ Отклонение: Из "древностите" на българската компјутърна индустрија
(.. скриј ..)
- Като студент в университетът и в първите години на професионалната ми кариера съм работил на IBM System/360 (т.е. на ЕС ЭВМ). На изложеното в това отклонение не съм свидетел.
- Първо и Второ.
- Първо. В годините 1960-63 български учени в един екземплјар сѫ разработили компјутър Витоша.
- Ето не̋кои фрагментарни сведенија за него.
- В машинната инструкција се указват адресите не само на операндите, но и на следващата инструкција. Ето защо.
- Оперативната памет (RAMът) е бил[а] реализиран[а] на магнитен барабан.
- Докато централнијът процесор изпълнјава текущата инструкција, барабанът се е завърте̋л и е подмина̨л ме̋стото на следващата по разположение инструкција. Затова се налага в машинната команда да се укаже адресът на само на операндите, но и на следващата инструкција за изпълнение.
- Второ.
През годините 1967-1971 в софијскијът ЗИТ (заводът за изчислителна техника) се произвеђали компјутри с означение ЗИТ-151,
по лиценз за Facom-230–30 от јапонската фирма Facom.
- Не̋кои новосъздадени териториални изчислителни центрове, наред със съветските компјутри модел Минск-32, били оборудвани и с компјутри ЗИТ-151 (Facom).
- Kомпјутрите ЗИТ-151 (Facom), както и компјутрите Минск-32, не̋мали дискова памет, т.е. външна енерго-независима (трајна) памет с бърз достѫп. Външната им памет е била на магнитни ленти, a оперативната им памет - на феромагнитни мрежички (core: connecting others reaching everyone).
- Производството на ЗИТ-151 е било спре̋но, когато свыше е дошла височајша заповед всичките усилија на компјутърните специалисти в пространството от Бранденбургската врата до Владивосток да се вклјуча̨т в reverse-engineering (разбирај крадене) на продуктовата линија System/360 на фирмата IBM. Не само ЗИТ-151 е бил спре̋н от производство, сѫщото е сполете̋ло и Минск-32, както и ред други съветски разработки.
- Забележете, че българската компјутърна индустрија (а веројатно и съветската) е била подтикна̨та към кражби на интелектуална собственост едва с височајшата заповед да се следва IBM System/360.
- През 80-те в Чехословакија бе̋ха̨ разработили оригинална операционна система за IBM System/370. Дори фирмата IBM не̋маше такава разработка. Да, като всеки нов софту̌ер, чешката система бе доста бъгава, но другите страни от СИВ можехме да помогнем в дебъгването. Нищо такова не стана̨. Чешката система бе изхвърлена.
- Неусетно стигна̨х до събитија, на които съм свидетел.
- Общо наблјудение: Както и при всички остана̨ли продукти, компјутрите западно производство по качество и надеђност в пѫти надвишаваха̨ компјутрите съветско производство. Които пък от своја страна по качество и надеђност надвишаваха̨ компјутрите българско производство.
- (.. скриј ги древностите на българската компјутърна индустрија ..) (.. скриј го подразделът за компјутрите Минск-2 ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ►► Пак отклонение: бит и бајт (.. покажи ..)
-
▼▼ Пак отклонение: бит и бајт
(.. скриј ..)
- В паметта на компјутрите има битове, много битове.
- Един бит има две състојанија.
- Това означава, че в един бит от паметта на компјутърът се записва един бит информација.
- Битът е естествено понјатие.
- Един бит има две състојанија. Те физически мога̨т да имат различно изражение.
- Например на определена позиција на перфолентата не̋ма дупка или има дупка.
- Обаче е прието хората да означават двете състојанија на бит с цифрите 0 и 1.
- Нај-често се използват не отделни битове, а групи от сѫседни битове, които представјат не̋какво число или код.
- Когато централнијът процесор чете данни от оперативната памет (от RAMът) или записва там данни, винѫги чете или пише наведнѫж група от сѫседни битове.
- Когато централнијът процесор чете данни от оперативната памет (от RAMът) или записва там данни, тој адресира ме̋стото.
- Адресът представлјава число, което обикновено се интерпретира като двоично число без знак.
- Стѫпката на адресите не̋кога беше основна част от компјутърната архитектура.
- През колко бита адресът на ме̋стото в оперативната памет се променја с единица:
- При Минск-2: през 37 бита.
- При ЗИТ-151 (Facom-230): през 10 бита.
- При ИЗОТ-310 (PDP-8): през 12 бита.
- При съвременните компјутри тази стѫпка е винѫги осем (8).
- Група от осем сѫседни бајта на общ адрес от паметта е била наречена бајт (byte).
- Тази архитектурна черта на съвременните компјутри се нарича бајтова организација.
- Тази мода се е установила веројатно заради доминирането на IBM System/360 в момент от мина̨лото.
- У нас понјатието бајт и компјутри с бајтова организација се појавиха̨ с IBM System/360 и ЕС ЭВМ.
- Компјутрите Витоша, Минск-2 и ЗИТ-151, за които стана̨ дума, не̋мат бајтова организација и понјатието бајт при те̋х не се използва.
- ◄►
Отклонение_1: Относно мерките за количество информација.
- Основната ме̋рка за количество информација, зададена от природата, е бит.
- Обикновено скоростта на интернет се мери в "Мегабитове на секунда" - MegaBits per second - Mbps.
- Мегабит - MegaBit - това сѫ (1024*1024=)1048576 бита.
- Не се използва бајт, понеже отделните битове от един бајт мога̨т да пѫтуват по различни пѫтища из дебрите на интернет.
- Осем бита информација представлјават един бајт (byte).
- 1024 бајта представлјават един килобајт (kilobyte, Kb).
- 1024 килобајта представлјават един мегабајт (megabyte, Mb, голе̋м бајт).
- 1024 мегабајта представлјават един гигабајт (gigabyte, Gb, гигантски бајт).
- 1024 гигабајта представлјават един терабајт (terabyte, Tb, зверски бајт).
- Основната ме̋рка за количество информација, зададена от природата, е бит.
- ►► Отклонение_2: Да објаснја̨ термините 16-битови, 32-битови или 64-битови компјутри (.. покажи ..)
-
▼▼ Отклонение_2: Да објаснја̨ термините 16-битови, 32-битови или 64-битови компјутри
(.. скриј ..)
- И тъј, компјутрите сѫ с бајтова организација. В паметта им битовете сѫ организирани в бајтове.
- В един бајт може да се запише число (двоично без знак) от 0 до 255.
- Ако адресът на бајт от паметта се съдържаше само в един бајт, то щеше да е възможно да се адресират само 256 бајта - твърде малко за почти все̋ко приложение.
- Ето защо за адреси се използват по-големи числа (двоични без знак), записани в не̋колко сѫседни бајта.
- Ако адресът се съдържа в два сѫседни бајта, то компјутърът ще може непосредствено да адресира 65536 бајта (с двоично беззнаково число међу 0 и 65535).
- Такъв компјутър се означава като 16-битов.
- Ако адресът се съдържа в четири сѫседни бајта, то компјутърът ще може непосредствено да адресира 4294967296 бајта или 4 GigaBytes (с двоично беззнаково число међу 0 и 4294967295).
- Такъв компјутър се означава като 32-битов.
- Ако адресът се съдържа в осем сѫседни бајта, то компјутърът ще може да има непосредствен достѫп до адресно пространство с космически размери.
- Такъв компјутър се означава като 64-битов.
- И тъј, компјутърът е с бајтова организација и използва за адреси беззнакови двоични числа, разположени в не̋колко сѫседни бајта.
- Всеки от тези не̋колко сѫседни бајта, заедно представлјаващи беззнаково двоично число, използвано за адрес, всеки от те̋х си има свој адрес.
- Но адресите им сѫ сѫседни числа. Нај-малкото от тези числа се използва за адрес на адресът.
- Адресът на адресът адресира адрес - затова е адрес на адресът. Но това си е адрес, значи е и адрес на бајт. Е, този бајт каква позиција има в числото, в беззнаковото двоично число, представлјаващо адресът?
- Ако това е младшијът бајт - компјутърът е LittleEndian.
- Ако това е старшијът бајт - компјутърът е BigEndian.
- Компјутрите от серијата ЕС ЭВМ (IBM System/360/370) сѫ BigEndian.
- Компјутрите с архитектури PDP-11 (DEC), VAX (DEC), X86 (Intel) сѫ LittleEndian.
- Характеристиката LittleEndian/BigEndian има значение и при кодировките, когато различни компјутри си обменјат кодове, понеже тја се отнасја не само до адресите, които сѫ двоични беззнакови числа, но и при все̋какви числа.
- (.. скриј го отклонението за 16-32-64-битовите компјутри ..)
- (.. скриј го отклонението за бит и бајт ..) (.. свиј го ..) (.. разгъни го ..) (.. скриј го подразделът за компјутрите Минск-2 ..) (.. свиј го ..) (.. разгъни го ..)
- ►► Не̋кои сведенија за компјутрите Минск-2 (.. покажи ..)
-
▼▼ Не̋кои сведенија за компјутрите Минск-2
(.. скриј ..)
- Навремето знаех да пиша̨ машинни програми за Минск-2.
- Сега съм забравил. Целта на този текст е да си припомнја̨, каквото мога̨.
- През професионалната си кариера владеех машиннијът код на IBM/System/360/370, PDP-11 и VAX.
- Но това беше през първата половина на професионалната ми кариера.
- През втората половина на професионалната ми кариера не ми се е налагало да слизам на това ниво.
- Минск-2 беше 37-битов компјутър.
- Сѫседни 37 бита от паметта образуваха̨ клетка (memory cell, ячейка памяти).
- Все̋ка клетка си има адрес.
- Адресът представлјава 12-битово двоично число без знак.
- Следователно, адресът представлјава число от 0 до 4095.
- При моделът Минск-22 адресът е 13-битово число от 0 до 8191.
- Следователно, при Минск-2 максималнијът и реалнијът размер на оперативната памет е 4096 37-битови клетки, или общо (4096*37=) 151552 бита, което е 18944 съвременни бајта, 18.5 килобајта.
- При моделът Минск-22 - двојно.
- Когато с такива адреси работеха̨ хора - програмисти и кодировчици, един 12-битов адрес се представјаше чрез 4-цифрово беззнаково число в осмична система от 0000 до 7777 (което значи от 0 до 4095 десетично).
- И тъј, размерът на оперативната памет при Минск-2 в съвременни мерки е 18 и половина килобајта.
- За сравнение:
- Когато завърших и постѫпих на работа, компјутърът, с којто си имах работа, имаше оперативната памет 128 килобајта. ЕС ЭВМ (IBM System/360).
- Едно време 32-битовото адресно пространство на VAX (4 гигабајта) ни изглеђаше огромно.
- Личнијът ми лаптоп, на којто пиша̨ това, има 16 гигабајта оперативна памет.
- Друго компјутърче, лично мое, пак с не̋колко гигабајта памет, си го носја̨ в џобът и го ползвам като телефонче.
- Свидетел съм и на древните, и на модерните времена.
- Клетката, както писах, представлјава 37 сѫседни бита.
- Разбира се, такава клетка можеше да съдържа 37-битово двоично число със или без знак.
- Компјутърът можеше да извършва операции с такива числа.
- Сѫщо така, една такава клетка можеше да съдържа машинна команда за изпълнение.
- Когато с такива 37-битови числа или машинни команди работеха̨ хора - програмисти и кодировчици,
една 37-битова клетка се представјаше чрез 12-цифрово число в осмична система със знак отпред.
- Например, +100001770200.
- Като двоично число (с фиксирана точка) това е числото 8590454912 в десетичен запис.
- Като машинна команда, тази 37-битова клетка инструктира компјутърът:
- Да прочете в суматорът съдържанието на клетка на адрес 0177 осмично (десетично 127).
- Да прибави към него съдържанието на клетка на адрес 0200 осмично (десетично 128).
- Резултатът от суматорът (сумата на двете числа) да запише обратно в паметта на адрес 0200 осмично (десетично 128).
- Общијът формат на машинната команда при Минск-2 е следнијът:
- Старшите 7 бита сѫ кодът на операцијата.
- Остават 30 бита.
- Следващите 6 бита задават индекснијът регистър.
- Остават 24 бита.
- Следват двата операнда, всеки указан с 12-битов адрес.
- Всичките битове в клетката вле̋зоха̨ в употреба.
- Старшите 7 бита сѫ кодът на операцијата.
- Относно индекснијът регистър.
- Обикновено централнијът процесор на един компјутър има на свое разположение близо до себе си, "на една рѫка разстојание", не̋колко регистъра, съдържащи данни, нужни в текущијът момент или пък в непосредственото бѫдеще.
- Бројът на тези регистри не може да е много голе̋м, понеже програмиращите на машинен език или на асемблер тре̋бва да държа̨т тези регистри в човешката си памет.
- 16 е прилично число за този број.
- Ако те сѫ 16, такъв регистър се указва с число от 0 до 15.
- Диапазонът от 0 до 15 е миниатјурно адресно пространство за тези регистри, извън адресното пространство на оперативната памет.
- Оперативната памет е "на един поглед разстојание", по-далече от регистрите.
- В компјутърът Минск-2 практически има само един такъв регистър - суматорът. Тој винѫги се указва нејавно и не се нуђае от адрес.
- Тој - суматорът - не може да служи за индексен регистър.
- В машинната команда на Минск-2 за адрес на клетка от оперативната памет (за адрес на операнд) се заделјат 12 бита, а за номер на индексен регистър се заделјат 6 бита.
- Възможните адреси на клетки от паметта осмично сѫ от 0000 до 7777, или десетично от 0 до 4095.
- В 6-те бита, заделени за номерът на индекснијът регистър, може да се запише осмично число от 00 до 77, или десетично от 0 до 63.
- В Минск-2 първите 64 клетки от оперативната памет, клетките с адреси от 00 до 77 осмично или 0 до 63 десетично, мога̨т да се използват като индексни регистри.
- Адресирането на тези клетки с 12-битов адрес на операнд си остава възможно.
- В Минск-22 като индексни регистри мога̨т да се използват само първите 16 клетки от паметта.
- За адресирането им сѫ достатъчни 4 бита: от 00 до 17 осмично или от 0 до 15 десетично.
- В Минск-22 за всеки от двата операнда се взема един бит и се слага като старши бит на адресът на операндът.
- Така в Минск-22 адресите на операндите стават 13-битови, което позволјава максимален размер на оперативната памет 8192 37-битови клетки.
- Как в Минск-2 се използва индекснијът регистър.
- От неговите 37 бита, само 24-те бита, разположени на позиција на адрес на операнд, се използват.
- Остана̨лите битове тре̋бва да сѫ нули или се приемат за нули.
- Съдържанието на индекснијът регистър се добавја към машинната команда.
- По този начин адресите на двата операнда мога̨т да бѫда̨т модифицирани.
- Тази техника е необходима при програмиране на цикли.
- Помнја̨, че в архитектурата IBM/System/360/370 (ЕС ЭВМ) да се укаже номер 0 (нула) за индексен или за базисен регистър означава да не се използва такъв регистър.
- Не помнја̨ дали подобно правило имаше и при Минск-2.
- Заклјучение: Колко първобитно е било машинното програмиране за Минск-2.
- В девети клас никој не ни е учил към какъв интерфејс да се придържаме при извикване на подпрограма.
- Јавно, при Минск-2 човек сам е тре̋бвало да си разработи такъв интерфејс.
- За сравнение, при IBM/System/360/370 (ЕС ЭВМ) и при всички следващи компјутърни архитектури, ако не знаеш този интерфејс, значи не владееш машинното програмиране.
- Изклјучително трудно е програмата да се направи relocatable.
- Следващите компјутърни архитектури предоставјат такива възможности.
- Сега практически всеки компилатор произвеђа позиционно-независим код (PIC: position-independent code).
- Истински стек (stack) не̋маше и в архитектурата IBM/System/360/370 (ЕС ЭВМ).
- Не е оправдано в Минск-2 да очакваме улесненија за stack.
- Има ли смисъл изобщо да се говори за sharable-програми, понеже не̋ма много нишки (threads), не̋ма много процеси, не̋ма много пoтребители.
- Изклјучително трудно е програмата да се направи reentrant.
- В частност, изклјучително трудно е да се програмира рекурсија.
- Чудја̨ се дали за машините Минск е имало компилатор на Алгол.
- Защо в единадесети клас учихме Алгол?
- Експлоатацијата на компјутрите Минск-32 у нас се е основавала на Кобол.
- И последно: не̋мам представа каква дѫлбочина на софту̌ерът е била достигна̨та при Минск-2.
- (.. скриј ги сведенијата за компјутрите Минск-2 ..) (.. скриј го подразделът за компјутрите Минск-2 ..) (.. свиј го ..) (.. разгъни го ..)
- ◄► (.. скриј ги компјутрите Минск-2 ..) (.. свиј ги ..) (.. разгъни ги ..) (.. скриј го мина̨лото незапомнено ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
-
►► References: препратки
(.. покажи ги ..)
-
▼▼ References: препратки
(.. скриј ги ..)
(.. скриј го мина̨лото незапомнено ..)
(.. свиј го ..)
(.. разгъни го ..)
- christotamarin.blogspot.com: 7-битовата среда̀
- christotamarin.blogspot.com: The JCUKEN keyboard layout
- christotamarin.blogspot.com: 7-битовата среда̀
- christotamarin.blogspot.com: The JCUKEN keyboard layout
- christotamarin.blogspot.com: 7-битовата среда̀
- christotamarin.blogspot.com: The JCUKEN keyboard layout
- christotamarin.blogspot.com: 7-битовата среда̀
- christotamarin.blogspot.com: The JCUKEN keyboard layout
- christotamarin.blogspot.com: 7-bitovata sredà
- christotamarin.blogspot.com: The JCUKEN keyboard layout
- christotamarin.blogspot.com: 7-bitovata sredà
- christotamarin.blogspot.com: The JCUKEN keyboard layout
- wikipedia: Baudot code#ITA2
- wikipedia: МТК-2
- wikipedia: Punched tape
- Виртуальный компьютерный музей: Серия ЭВМ «Минск»
- Виртуальный компьютерный музей: Электронная цифровая вычислительная машина Минск-2
- ◄► (.. скриј ја̨ първата беседа ..) (.. свиј ја̨ ..) (.. посвиј или поразгъни ..) (.. разгъни ја̨ ..) .. към началото ..
►► 3. За компјутрите полиномиално (.. покажи ја̨ втората беседа ..) (.. разгъна̨то ..) .. към началото ..
- По спомените ми от 11-ти клас, 1971..72.
- Иска ми се да си докажа̨, че сега не съм по-тѫп, отколкото съм бил тогава.
- Заглавието на тази беседа го сложих като заглавие на целијът този сборник с беседи.
▼▼ 3. За компјутрите полиномиално (.. скриј ја̨ втората беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ►► Постановка на задачата (.. покажи го предговорът на беседата ..) (.. покажи го разгъна̨то ..)
-
▼▼
Постановка на задачата
(.. скриј го предговорът на беседата ..)
(.. свиј го ..)
(.. разгъни го ..)
- ►► Средношколски спомени (.. покажи ..)
-
▼▼
Средношколски спомени
(.. скриј ..)
- Завършил съм гимназија (11-ти клас) през 1972 със специалност "изчислител-кодировчик".
- Съучениците ми от сѫседната "Г" паралелка завършваха̨ като шофјори.
- В денја̨т на навършване на пълнолетив всеки от те̋х можеше да отиде да си ја̨ вземе шофјорската книжка.
- В 11-ти клас по предметът за компјутърна подготовка (АСМ) изучавахме езикът за програмиране Algol-60.
- Компилатор от Algol-60 не съм виђал.
- Езикът се използваше за публикуване на алгоритми,
- което значи, че аз съм го използвал по предназначение.
- В Algol-60 имаше странно предаване на параметрите към подпрограмите.
- А това беше трудно за реализација.
- Как да е. Макар езикът Algol-60 да не се използваше за реално програмиране, синтаксисът му е повлијал на много други компјутърни езици (PL/I, Pascal, C, Java, JavaScript, ..).
- Написах програма на Algol-60 за намиране на реалните корени на полином с реални коефициенти.
- Учителјът ни по математика ја̨ прати в не̋какво списание и мај ја̨ публикуваха̨.
- Но тогава тја не беше тествана.
- (.. скриј ги средношколските ми спомени ..) (.. скриј го предговорът на втората беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- Завършил съм гимназија (11-ти клас) през 1972 със специалност "изчислител-кодировчик".
- ►► Спомен от около 1980 (.. покажи ..)
-
▼▼
Спомен от около 1980
(.. скриј ..)
- Когато през 1979 постѫпих на работа, по едно време получих неограничен достѫп до компјутър ЕС-1020 (равностоен с младши модел на IBM/360).
- Реших да не стоја̨ без работа, а да изтествам алгоритъмът на програмата за намирането на реалните корени на полином с реални коефициенти, којато бе̋х написал като ученик в 11-ти клас на езикът Algol-60.
- Алгоритъмът го помнех.
- Написах програмата на езикът PL/I.
- Наложи се да симулирам рекурсијата.
- Да, програмата работеше.
- Но тестването ӥ беше повърхностно.
- Не̋мах време за повече.
- (.. скриј го споменът ми от около 1980 ..) (.. скриј го предговорът на втората беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ►► Като пенсионер се връщам към спомените си отпреди десетилетија (.. покажи ..)
-
▼▼
Като пенсионер се връщам към спомените си отпреди десетилетија
(.. скриј ..)
- Дал ми сега Господ много време.
- Мога̨ да се върна̨ към задачата за намирането на реалните корени на полином с реални коефициенти.
- Имам време за обстојно тестване.
- Имам време да разработја̨ и среда̀ за тестване.
- Технологиите много напредна̨ха̨.
- Мога̨ да пиша̨ на език като JavaScript и "програмата да се публикува за всенародно тестване".
- Не си поставјам за цел да гонја̨ нај-мощното и нај-напредничавото.
- Има веројатно средства за чертане на графики, което би могло добре да илјустрира беседата.
- Но все пак, софту̌ерът, којто ползвам, тре̋бва да ми е лесно достѫпен, да го има и на моето лаптопче, и на почти все̋ко друго компјутърче - лаптопче, таблетче или смартфонче.
- Като пенсионер не̋мам програмистки достѫп до сървър.
- Затова - JavaScript.
- (.. скриј го пенсионерското ми ежедневие ..) (.. скриј го предговорът на втората беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ◄►
Намирането на реалните корени на полином с реални коефициенти -
- това е задачата.
- ►► Задачата е математическа и алгоритъмът се основава на математиката (.. покажи ..)
-
▼▼
Задачата е математическа и алгоритъмът се основава на математиката
(.. скриј ..)
- Не̋ма да изнасјам урок по математика.
- Нищо не̋ма и да доказвам тука.
- Софту̌ер се тества, не се доказва.
- Но не̋кои неща - основанијата за алгоритъмът - тре̋бва да се напиша̨т.
- Нека аргументът на полиномът, както обикновено, да означаваме с буквата x.
- Ако x0 е корен на полиномът (на многочленът), тогава за стојност на аргументът x0
стојността на полиномът е нула (0).
Това е дефиниција на корен на полином. - Ако x0 е корен на полиномът (на многочленът), тогава биномът (двучленът) (x - x0) е делител на полиномът.
- Коренът на полиномът си има својата кратност.
- Ако x0 е двукратен корен на полиномът, тогава (x - x0)2 е негов делител.
- Ако x0 е трикратен корен на полиномът, тогава (x - x0)3 е негов делител.
- Без ограничение на общността можем да считаме, че старшијът коефициент на полиномът е положителен.
- Ако е отрицателен, ще го умножим полиномът по -1 и ще получим полином с положителен старши коефициент и със сѫщите корени.
- Полиномът е гладка непрекѫсна̨та функција.
- Щом старшијът коефициент на полиномът е положителен, то тој клони към +∞, когато аргументът клони към +∞.
- Ако при не̋каква стојност на аргументът x1 стојността на полиномът е отрицателна, то не̋къде в интервалът от x1 до +∞ графиката му ще пресече абсцисната ос, тоест не̋къде в интервалът от x1 до +∞ сѫществува поне един корен на полиномът.
- Щом старшијът коефициент на полиномът е положителен, когато аргументът клони към −∞,
полиномите от нечетна степен клонја̨т към −∞, а
полиномите от четна степен - към +∞.
- Ако при не̋каква стојност на аргументът x1 стојността на полином от четна степен е отрицателна, то не̋къде в интервалът от −∞ до x1 сѫществува поне един корен.
- Ако при не̋каква стојност на аргументът x1 стојността на полином от нечетна степен е положителна, то не̋къде в интервалът от −∞ до x1 сѫществува поне един корен.
- Јасно е, че полиномът се разглеђа като функција на аргументът си.
- И като функција тој има производна.
- Производната на полином е пак полином, но с една степен по-ниска.
- Ако x0 е двукратен корен на полиномът, тогава x0 е корен и на производната.
- Ако x0 е трикратен корен на полиномът, тогава x0 е корен и на производната и на нејната производна (тоест на първата и на втората производна).
- Полиномът е гладка непрекѫсна̨та функција.
- Ако x0 е корен на производната, тогава при тази стојност на аргументът x0 самијът полином има или локален минимум, или локален максимум, или инфлексна точка.
- Ако x1 е нај-малкијът корен на производната, тогава в отворенијът интервал от −∞ до x1 сѫществува нај-много един корен на полиномът.
- Ако x2 е нај-големијът корен на производната, тогава в отворенијът интервал от x2 до +∞ сѫществува нај-много един корен на полиномът.
- Ако x1 и x2 сѫ два последователни корени на производната, тогава в отворенијът интервал от x1 до x2 сѫществува нај-много един корен на полиномът.
- (.. скриј ги математическите основи на алгоритъмът ..) (.. скриј го предговорът на втората беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ►► Самијът алгоритъм (.. покажи ..)
-
▼▼
Самијът алгоритъм е рекурсивен.
(.. скриј ..)
- Реалните корени на полиномът се намират, след като сме намерили реалните корени на производната му.
- Производната на един полином пак е полином, но от по-ниска степен.
- Коренът на полином от първа степен се намира елементарно.
- Във всеки един от интервалите, определени от корените на производната, може да има нај-много един корен.
- Дали има или не̋ма - това се определја от стојностите на полиномът в краищата на интервалът.
- Ако бѫде определено, че в интервалът има корен, интервалът се дели на два по-малки интервала, и се определја в кој от те̋х е коренът.
- Ако интервалът, за којто знаем, че съдържа корен, стане достатъчно малък, това значи, че сме го намерили коренът.
- Колко малък да стане интервалът?
Каквато точност на резултатът ни е нужна. - (.. скриј го алгоритъмът ..) (.. скриј го предговорът на втората беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ►► Аналогичната задача в полето на комплексните числа (.. покажи ..)
-
▼▼
Аналогичната задача в полето на комплексните числа
(.. скриј ..)
- За обобщението в полето на комплексните числа може да се докаже следното:
- Един полином от n-та степен с коефициенти от полето на комплексните числа има точно n корена в полето на комплексните числа, като всеки корен се брои според кратността си.
- Както и при реалните числа,
- ако комплексното число x0 е корен на полиномът (на многочленът), тогава биномът (двучленът) (x - x0) е делител на полиномът.
- ако комплексното число x0 е двукратен корен на полиномът, тогава (x - x0)2 е делител на полиномът.
- Не съм се занимавал със задачата за намирането на корените на полином в полето на комплексните числа.
- И тази беседа не̋ма нищо общо с комплексните числа.
- От теоријата на комплексните числа се ползва само резултатът, че корените на полином от n-та степен сѫ точно n на број.
- Ако се ограничим до полето на реалните числа, както правја̨ в тази беседа, то твърдението се изказва така:
- Един полином от n-та степен с реални коефициенти има нај-много n реални корена, като всеки корен се брои според кратността си.
- (.. скриј ги комплексните числа ..) (.. скриј го предговорът на втората беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- За обобщението в полето на комплексните числа може да се докаже следното:
- ◄► В беседата сѫ вклјучени и две отклоненија от темата.
- ◄► (.. скриј го предговорът на втората беседа ..) (.. свиј го ..) (.. разгъни го ..) (.. скриј ја̨ втората беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ►► Полиноми с реални коефициенти (.. покажи го въведението за полиномите ..) (.. покажи го разгъна̨то ..)
-
▼▼
Полиноми с реални коефициенти
(.. скриј го въведението за полиномите ..)
(.. свиј го ..)
(.. разгъни го ..)
- ◄► В този раздел се демонстрира и тества
въвеђането на полином.
- Този раздел е стѫпка към крајната цел - детајлно тестване на програмата за намиране на реалните корени на полином с реални коефициенти.
- ►► Що е то полином (.. покажи ..)
-
▼▼
Що е то полином
(.. скриј ..)
- Този подраздел не̋ма да бѫде урок по математика, нито урок по алгебра.
- Целта ми е само да се уточнја̨т понјатијата и термините.
- Ако не помните от средното училище какво е това полином, наричано още многочлен, откажете се.
- Ако не сте учили за комплексни числа, то за Вас всички числа сѫ реални и понјатието полином с реални коефициенти означава просто полином.
- Полиномът е функција с един аргумент.
- Аргументът се означава с латинска буква, обикновено буквата x.
- В математическата литература е прието аргументите да се означават с не̋која от последните букви на латинската азбука, а първите букви се използват за коефициентите, ако те сѫщо сѫ променливи.
- В тази беседа не̋ма да става дума за полиноми с променливи коефициенти.
- Един полином, наричан още многочлен, представлјава сума (сбор) от едночлени.
- А пък един едночлен представлјава
аргументът на не̋каква степен, умножен по коефициент.
- Коефициентът е число, в случајът реално число.
- Степента е це̋ло неотрицателно число.
- Ако тја е нула, едночленът се нарича свободен член.
- Едночлените (членовете на многочленът) с нулеви коефициенти обикновено не се пиша̨т.
- Но присѫтстват при избраното вѫтрешно представјане в компјутърът.
- При представјането на полиномът (многочленът), членовете му (едночлените) обикновено се подређат по намалјаване на степента си.
- Едночлените от една и сѫща степен се събират е едни член.
- Свободнијът член - този с аргумент на нулева степен - е последен.
- Първијът член с ненулев коефициент - този с нај-високата степен на аргументът - е старши член.
- Коефициентът му е старши коефициент на полиномът (на многочленът).
- Степента му става степен на полиномът.
- (.. скриј що е то полином ..) (.. скриј го въведението за полиномите ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
-
Буква за аргументът: - ►► Как да въвеђаме полином (.. покажи ги правилата ..)
-
▼▼
Как да въвеђаме полином
(.. скриј ги правилата ..)
- По-горе в този раздел, при въвеђането на полином с реални коефициенти, в сила сѫ следните правила и свободи:
- Шпации (интервали, space characters) сѫ допустими навсе̋къде, освен вѫтре в числата и међу двете звездички ** на знакът за степенуване.
- Полиномът (многочленът) се въвеђа като сума от едночлени.
- Може и да е съставен само от един член.
- Не се изисква подредба на съставјащите едночлени по степен.
Програмата ще ги подреди. - Разрешава се въвеђане на не̋колко едночлена от една и сѫща степен.
Програмата ще ги обедини, след като сумира коефициентите им. - Едночленът започва с коефициентът си.
Коефициентът може да се пропусне, ако е равен на единица. - След коефициентът на едночленът, се въвеђа буквата за аргументът.
- Тја може да се пропусне, ако степента на едночленът е нула (т.е. ако това е свободен член).
- Међу коефициентът и аргументът, ако и двете присѫтстват, може да се сложи звездичка * като знак за умножение.
- Но звездичката може да се пропусне.
- След буквата за аргументът като це̋ло число се пише степента на едночленът.
- Степента може да се пропусне, ако е единица.
- Међу буквата за аргументът и степента, ако и двете присѫтстват,
мога̨т да се сложа̨т две звездички ** като знак за степенуване.
Но знакът за степенуване може да се изпусне.
- Примери за едночлени от нулева степен:
5*x**0 1024*x**0 3.14*x**0 2.56*x**0 -1*x**0 -100*x**0 5x**0 1024x**0 3.14x**0 2.56x**0 -1x**0 -100x**0 5x**0 1024x**0 3.14x**0 2.56x**0 -x**0 -100x**0 5*x0 1024*x0 3.14*x0 2.56*x0 -1*x0 -100*x0 5x0 1024x0 3.14x0 2.56x0 -1x0 -100x0 5x0 1024x0 3.14x0 2.56x0 -x0 -100x0 5 1024 3.14 2.56 -1 -100 - Примери за едночлени от първа степен:
1*x**1 1024*x**1 3.14*x**1 2.56*x**1 -1*x**1 -100*x**1 1x**1 1024x**1 3.14x**1 2.56x**1 -1x**1 -100x**1 x**1 1024x**1 3.14x**1 2.56x**1 -x**1 -100x**1 1*x1 1024*x1 3.14*x1 2.56*x1 -1*x1 -100*x1 1x1 1024x1 3.14x1 2.56x1 -1x1 -100x1 x1 1024x1 3.14x1 2.56x1 -x1 -100x1 1*x 1024*x 3.14*x 2.56*x -1*x -100*x 1x 1024x 3.14x 2.56x -1x -100x x 1024x 3.14x 2.56x -x -100x - Међу едночлените, съставјащи въвеђанијът полином, се слага само един знак + (плјус) или - (минус).
- Пред първијът едночлен може да се сложи знак - (минус).
- Пример:
1*x**2 - 2*x**1 - 3*x**1 + 6*x**0 -2*x**3 + 3*x**2 - 1*x**1 + 7 1*x**2 - 5*x**1 + 6*x**0 -2x3 + 3x2 - x + 7 x2 - 5x + 6 2x3 - 3x2 + x - 7 - Забележете, че за целите на основната задача програмата ще осигури положителен старши коефициент на полиномът.
- Ако при въвеђането тој е бил отрицателен, програмата ще умножи всички коефициенти по -1.
- Ако бѫде въведен полином от втора или от по-висока степен, ще се појави бутон
.
Следващијът раздел е за умножението на полиноми.
Бутонът ще Ви прати там. - Страничен ефект. Жълтото поле горе - там, където се въвеђа полиномът,
може да се използва като прост калкулатор.
- Там могат да се събират и извађат числа.
- Програмата възприема все̋ко въведено число като коефициент на едночлен от нулева степен и сумира тези коефициенти.
- (.. скриј ги правилата ..) (.. скриј го въведението за полиномите ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
-
►►
.. Покажи код на JavaScript ..
-
▼▼
Код на JavaScript
(.. скриј го кодът ..)
- Класът RealPolynom е разширение на Array.
Обект от класът RealPolynom е преди всичко Array, масив от числа.- Числата от масивът сѫ коефициентите на полиномът.
- Бројът им е с единица по-голе̋м от степента на полиномът.
- Елементът [0] е старшијът коефициент - коефициентът пред нај-високата степен.
- Последнијът елемент е коефициентът пред нулевата степен (свободнијът член)
- Всички нулеви коефициенти присѫтстват в масивът на местата си, макар обикновено да не се показват.
-
class RealPolynom extends Array { argLetter = "x"; toString(raw) { var n = this.length; if(!n) { return ""; } if((n == 1) && !this[0]) { return "0"; } var t = ""; for(let j = 0; j < this.length; j++) { n--; if ( ! this[j] ) { continue; } if ( ( this[j] > 0 ) && j ) { t += "+" } t += this[j].toPrecision(10)*1; //.toString(); if (raw) { if ( n > 0 ) { t += this.argLetter; } if ( n > 1 ) { t += n; } } else { if ( n > 0 ) { t += "*<"+"b>"; t += this.argLetter; t += "<"+"/b>"; } if ( n > 1 ) { t += "<"+"sup>" t += n; t += "<"+"/sup>" } } } return t; } // toString doitRegular(positive) // Ensure non-zero/positive first coefficient { if (this.length == 1) { if(typeof(this[0]) != "number") { this.splice(0); } return; } if (this.length == 0) { return; } var m = 1; var t = 0; for(let j = 0; j < this.length; j++ ) { if(typeof(this[j]) != "number") { continue; } if ( t > 0 ) { } else if ( this[j] == 0 ) { continue; } else if(( this[j] < 0 ) && ((typeof(positive) != "boolean") || positive)) { m = -1; } else { } this[t] = this[j] * m; t++; } if ( t > 0 ) { this.splice(t); } } // doitRegular getDegree() // Returns -1 if not a regular RealPolynom { for(let j = 0; j < this.length; j++) { if(isNaN(this[j]) || (typeof(this[j]) != "number")) { return -1; } } if (this[0] == 0) { return -1; } return this.length - 1; } // getDegree }
- Методът toString() показва полиномът в обичаен вид.
Членовете с нулев коефициент се изпускат.
Аргументът в нулева степен не се показва.
За да може кодът на този метод да се покаже тука, налага се html-таговете да се декомпозират. - Методът getDegree() проверјава дали всички елементи от масивът сѫ числа.
Ако не, връща -1.
Ако старшијът коефициент this[0] е нула, пак връща -1 като резултат.
Иначе дава степента на полиномът - бројът на числата без 1. - Методът doitRegular() осигурјава старшијът коефициент да е положително число.
За тази цел може да бѫде намален бројът на числата.
За тази цел всички коефициенти може да бѫда̨т умножени по -1. - Програмите, които приемат входът от екранът и преобразуват въведеното в обект от клас RealPolynom, не се показват.
- (.. скриј го кодът на JavaScript ..) (.. скриј го въведението за полиномите ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- Класът RealPolynom е разширение на Array.
- ◄► Този раздел от беседата може да се пропусне.
- Тој е просто последователна стѫпка към крајната цел.
- Всичко от този раздел се повтарја в следващите раздели.
- Освен калкулаторът за събиране и извађане - тој работи само тука.
- ◄► (.. скриј го въведението за полиномите ..) (.. свиј го ..) (.. разгъни го ..) (.. скриј ја̨ втората беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ◄► В този раздел се демонстрира и тества
въвеђането на полином.
- ►► Полиноми-множители (.. покажи го умножението на полиноми ..) (.. покажи го разгъна̨то ..)
-
▼▼
Полиноми-множители
(.. скриј го умножението на полиноми ..)
(.. свиј го ..)
(.. разгъни го ..)
- ◄► Този раздел от беседата може да се пропусне.
- Тој е просто последователна стѫпка към крајната цел.
- Всичко от този раздел се повтарја в следващијът раздел.
- ►► Защо в темата се намесва умножение на полиноми? (.. покажи ..)
-
▼▼
Защо в темата се намесва умножение на полиноми?
(.. скриј ..)
- Този раздел е стѫпка към крајната цел - детајлно тестване на програмата за намиране на реалните корени на полином с реални коефициенти.
- Подготвјаме полином, којто да дадем на тази програма, че тја да му намери корените.
- Или тре̋бва предварително да знаем кои сѫ тѫрсените корени, ..
- или за всеки намерен от програмата корен тре̋бва да можем да проверим дали наистина е корен на полиномът.
- Намирането на реалните корените на зададен полином с реални коефициенти е в следващијът раздел.
- В по-следващијът раздел ще може да се провери дали намерените корени наистина сѫ корени на полиномът.
- А в настојащијът раздел се показва как да подготвим полином за тестване, такъв че предварително да му знаем корените.
- Нека буквата за аргументът да е x.
- Полиномът x-5 има еднократен реален корен 5.
- Полиномът x+2 има еднократен реален корен -2.
- Полиномът x има еднократен реален корен 0.
- Ако умножим трите полинома (x-5)*(x+2)*x, произведението им x3-3x2-10x, което е полином от 3-та степен,ще има точно три реални корена 5, 0 и -2.
- Полиномът x има еднократен реален корен 0.
- Полиномът x2 има двукратен корен 0.
- Полиномът x3, којто е полином от 3-та степен, има трикратен корен 0.
- Полиномът x-5 има еднократен реален корен 5.
- Произведението на последните два полинома x3*(x-5) е полином от 4-та степен x4-5x3, които има четири корена: веднѫж 5 и три пѫти 0.
- Полиномът от 2-ра степен x2+x+1 не̋ма реални корени, понеже стојностите му сѫ строго положителни.
- Това се виђа, ако се представи във видът (x+0.5)2+0.75.
- Разбира се, ако свободнијът член е по-голе̋м от 0.25, например 2, то полиномът x2+x+2 пак не̋ма реални корени.
- Ако за множител се вземе полином от 2-ра или 4-та степен без реални корени, то липсата на реални корени тре̋бва да бѫде отчетена в резултатът.
- Един полином примерно от 6-та степен има нај-много 6 реални корени.
Може да не̋ма и нито един. - Един полином примерно от 7-ма степен има нај-много 7 реални корени.
Има поне един. Полином от нечетна степен има поне един реален корен.
- Та така: в този раздел се демонстрира умножението на полиноми.
- Това ще се ползва, за да се получи полином, реалните корени на којто сѫ известни.
- Функционалността от този раздел е повторена в следващијът раздел.
- Затова този раздел може да се пропусне.
- Все пак, полученијът в този раздел полином може да бѫде пренесен в следващијът раздел, за да се тества.
- (.. скриј ја̨ тукашната цел на умножението на полиноми ..) (.. скриј го умножението на полиноми ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ◄► Ако въведете полином от нулева степен,
- тоест число - константа,
- програмата ще го преобразува във бином (полином от първа степен),
- коренът на којто е въведеното число.
- Например, ако въведете 5, все едно че сте въвели x-5.
- Ако буквата за аргументът е x, разбира се.
-
Буква за аргументът: -
►►
.. Покажи кодът на JavaScript ..
-
▼▼
Код на JavaScript
(.. скриј го кодът ..)
-
class RealPolynom extends Array { doitRegular(positive) // Ensure non-zero/positive first coefficient { if (this.length == 1) { if(typeof(this[0]) != "number") { this.splice(0); } return; } if (this.length == 0) { return; } var m = 1; var t = 0; for(let j = 0; j < this.length; j++ ) { if(typeof(this[j]) != "number") { continue; } if ( t > 0 ) { } else if ( this[j] == 0 ) { continue; } else if(( this[j] < 0 ) && ((typeof(positive) != "boolean") || positive)) { m = -1; } else { } this[t] = this[j] * m; t++; } if ( t > 0 ) { this.splice(t); } } // doitRegular getDegree() // Returns -1 if not a regular RealPolynom { for(let j = 0; j < this.length; j++) { if(isNaN(this[j]) || (typeof(this[j]) != "number")) { return -1; } } if (this[0] == 0) { return -1; } return this.length - 1; } // getDegree
multiplyBy(a) { if (!(a instanceof RealPolynom)) { return; } this.doitRegular(); const gth = this.getDegree(); if ( gth < 0 ) { return; } a.doitRegular(); const ga = a.getDegree(); if ( ga < 0 ) { this.splice(0); return; } var th = new RealPolynom; for ( let i = 0; i < this.length; i++ ) { th[i] = this[i]; } for ( let i = 0; i <= (ga+gth); i++ ) { this[i] = 0; } for ( let i = 0; i <= gth; i++ ) { for(let j = 0; j <= ga; j++) { this[i+j] += (th[i]*a[j]); } } } // multiplyBy
} - Програмите, които приемат входът от екранът и извеђат резултатът на екранът, не се показват.
- (.. скриј го кодът на JavaScript ..) (.. скриј го умножението на полиноми ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
-
- ◄► (.. скриј го умножението на полиноми ..) (.. свиј го ..) (.. разгъни го ..) (.. скриј ја̨ втората беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ◄► Този раздел от беседата може да се пропусне.
- ►► Реалните корени на полином с реални коефициенти (.. покажи как се намират ..) (.. покажи разгъна̨то ..)
-
▼▼
Реалните корени на полином с реални коефициенти
(.. скриј ги ..)
(.. свиј ги ..)
(.. разгъни ги ..)
- ◄► Това е основнијът раздел на беседата.
- Тука се демонстрира и тества програмата за намиране на реалните корени на полином с реални коефициенти.
- ►► За целите на тестването полиномът може да се въвеђа по множители (.. покажи ..)
-
▼▼
За целите на тестването полиномът може да се въвеђа по множители
(.. скриј ..)
- Подготвјаме полином, којто да дадем на тази програма, че тја да му намери корените.
- Или тре̋бва предварително да знаем кои сѫ тѫрсените корени, ..
- или за всеки намерен от програмата корен тре̋бва да можем да проверим дали наистина е корен на полиномът.
- Намирането на реалните корените на зададен полином с реални коефициенти е в този раздел.
- В следващијът раздел ще може да се провери дали намерен корен наистина е корен на полиномът.
- За целта полиномът и пресметна̨тите в този раздел негови корени мога̨т да бѫда̨т пренесени в следващијът раздел за проверка.
- А в настојащијът раздел да видим как да подготвим полином за тестване, такъв че предварително да му знаем корените.
- Нека буквата за аргументът да е x.
- Полиномът x-5 има еднократен реален корен 5.
- Полиномът x+2 има еднократен реален корен -2.
- Полиномът x има еднократен реален корен 0.
- Ако умножим трите полинома (x-5)*(x+2)*x, произведението им x3-3x2-10x, което е полином от 3-та степен,ще има точно три реални корена 5, 0 и -2.
- Полиномът x има еднократен реален корен 0.
- Полиномът x2 има двукратен корен 0.
- Полиномът x3, којто е полином от 3-та степен, има трикратен корен 0.
- Полиномът x-5 има еднократен реален корен 5.
- Произведението на последните два полинома x3*(x-5) е полином от 4-та степен x4-5x3, които има четири корена: веднѫж 5 и три пѫти 0.
- Полиномът от 2-ра степен x2+x+1 не̋ма реални корени, понеже стојностите му сѫ строго положителни.
- Това се виђа, ако се представи във видът (x+0.5)2+0.75.
- Разбира се, ако свободнијът член е по-голе̋м от 0.25, например 2, то полиномът x2+x+2 пак не̋ма реални корени.
- Ако за множител се вземе полином от 2-ра или 4-та степен без реални корени, то липсата на реални корени тре̋бва да бѫде отчетена в резултатът.
- Един полином примерно от 6-та степен има нај-много 6 реални корени.
Може да не̋ма и нито един. - Един полином примерно от 7-ма степен има нај-много 7 реални корени.
Има поне един. Полином от нечетна степен има поне един реален корен.
- (.. скриј го въвеђането на полиномът по множители ..) (.. скриј ги корените на полином ..) (.. свиј ги ..) (.. разгъни ги ..) .. към началото ..
- ◄► Разбира се, можете да въведете целијът полином като един множител.
- ◄► Ако въведете полином от нулева степен,
- тоест число - константа,
- програмата ще го преобразува във бином (полином от първа степен),
- коренът на којто е въведеното число.
- Например, ако въведете 5, все едно че сте въвели x-5.
- Ако буквата за аргументът е x, разбира се.
-
Намиране на реалните корени на полином с реални коефициенти Epsylon: Буква за аргументът: -
►►
.. Покажи го кодът на програмата ..
-
▼▼
Кодът на програмата
(.. скриј го кодът ..)
- Главната програма е getRoots().
- Тја намира реалните корени на полиномът и ги връща в Array (масив), подредени по големина.
- Ако полиномът не̋ма реални корени, резултатът е празен масив.
- Алгоритъмът е рекурсивен. JavaScript поддържа рекурсија, както и повечето съвременни компјутърни езици.
- Ако става дума за полином от първа степен, програмата веднага пресме̋та коренът и завършва работата си.
- Иначе с помощта на методът getDerivative() се постројава производната на полиномът.
- Производната е сѫщо полином, степента на којто е по-ниска с единица.
- За тази производна рекурсивно се извиква главната програма е getRoots(),
- за да се намерја̨т реалните корени на производната.
- Продължаваме алгоритъмът при условие, че реалните корени на производната сѫ намерени.
- Ако производната не̋ма реални корени, то този полином има един реален корен,
- за намирането на којто се извиква #getSingleRoot( -∞, +∞ ).
- Методът #getSingleRoot() намира единствен реален корен в зададен интервал, ако такъв корен има.
- Първо, този метод #getSingleRoot() се извиква за интервалът от -∞ до първијът реален корен на производната.
- След това методът #getSingleRoot() се извиква за всеки интервал међу два последователни реални корени на производната.
- И последно, методът #getSingleRoot() се извиква за интервалът от последнијът реален корен на производната до +∞.
- Методът getDerivative() постројава производната като обект от класът RealPolynomEquation, така че към този обект да може да се приложи getRoots().
- На методът #getSingleRoot() тре̋бва да му бѫде зададен интервал, за којто да е јасно,
че в него има нај-много един реален корен на полиномът.
- Ако в интервалът има реален корен, методът #getSingleRoot() го намира и го връща като число.
- Ако в интервалът не̋ма реален корен, резултатът е NaN (Not a Number).
- Mетодът #getSingleRoot() разглеђа четири случаја,
които тука сѫ изброени в ред обратен на този в кодът:
- Краен интервал међу две числа.
- Интервал от -∞ до число.
- Интервал от число до +∞.
- Интервалът от -∞ до +∞.
- Методът #getSingleRoot() се извиква рекурсивно за подинтервали.
- Методът getValue(), којто се използва тука, се демонстрира отделно в следващијът раздел.
- Следва самијът код.
-
class RealPolynomEquation extends RealPolynom { static infinityPlus = "+\u221e"; static infinityMinus = "-\u221e"; static epsylon = 0.0001; level = 0; roots = null; derivative = null; parentEq = null;
getDerivative() { this.derivative = new RealPolynomEquation; this.derivative.parentEq = this; this.derivative.level = this.level; this.derivative.level++; var n = this.length; for(let j = 0; j < (this.length-1); j++ ) { n--; this.derivative[j] = this[j] * n; } return this.derivative; } // getDerivative
#isAlmostZero(z) { const ez = RealPolynomEquation.epsylon/2; if (ez < z) { return false; } if((-ez) < z) { return true; } return false; } // #isAlmostZero
#getSingleRoot(a,b) { console.log(this.level+":#getSingleRoot("+a+","+b+") called: "+this[0]+".."+(this.length-1)+".."+this[this.length-1]); if(isNaN(a) && isNaN(b)) { if(this[this.length-1] > 0) { return this.#getSingleRoot(RealPolynomEquation.infinityMinus,0); } if(this[this.length-1] < 0) { return this.#getSingleRoot(0,RealPolynomEquation.infinityPlus); } return 0; } var s = 1; // the step s /= this[0]; if (s < 0.001) { s = 0.001; } else if (s > 1000) { s = 1000; } else { } var c; if(isNaN(b)) { const vba = this.getValue(a); if (this.#isAlmostZero(vba)) { return a; } if ( vba > 0 ) { return NaN; } c = a; var vbc; while(true) { c += s; vbc = this.getValue(c); if(this.#isAlmostZero(vbc)) { return c; } if(vbc > 0) { return this.#getSingleRoot(a,c); } continue; } } const vb = this.getValue(b); if ( this.#isAlmostZero(vb) ) { return b; } if(!isNaN(a)) { } else if(this.length%2==0) // va is negative { if ( vb < 0 ) { return NaN; } c = b; var vac; while(true) { c -= s; vac = this.getValue(c); if(this.#isAlmostZero(vac)) { return c; } if(vac < 0) { return this.#getSingleRoot(c,b); } continue; } } else // va is positive { if ( vb > 0 ) { return NaN; } c = b; var vac; while(true) { c -= s; vac = this.getValue(c); if(this.#isAlmostZero(vac)) { return c; } if(vac > 0) { return this.#getSingleRoot(c,b); } continue; } } const va = this.getValue(a); if ( this.#isAlmostZero(va) ) { return a; } if(((va > 0) && (vb > 0)) || ((va < 0) && (vb < 0))) { return NaN; } const m = (a + b)/2; if(((a < b) && ((b - a) < RealPolynomEquation.epsylon)) || ((a > b) && ((a - b) < RealPolynomEquation.epsylon))) { return m; } const vm = this.getValue(m); if ( this.#isAlmostZero(vm) ) { return m; } if(((vm > 0) && (va < 0)) || ((vm < 0) && (va > 0))) { return this.#getSingleRoot(a,m); } return this.#getSingleRoot(m,b); } // #getSingleRootgetRoots() { this.roots = null; const d = this.getDegree(); if ( d < 1 ) { console.log(this.level+":getRoots() exits: "+this.roots.toString()); return this.roots; } console.log(this.level+":getRoots() called: "+this.toString(true)); this.roots = new Array; if ( d == 1 ) { this.roots[0] = -this[1]; this.roots[0] /= this[0]; console.log(this.level+":getRoots() exits: "+this.roots.toString()); return this.roots; } this.getDerivative(); console.log(this.level+":getRoots() is about to do a recursion: "+this.derivative.toString(true)); const dR = this.derivative.getRoots(); console.log(this.level+":getRoots() back from recursion: "+dR.toString()); var r; if ( dR.length == 0 ) { r = this.#getSingleRoot(RealPolynomEquation.infinityMinus,RealPolynomEquation.infinityPlus); if(!isNaN(r)) { this.roots[0] = r; } console.log(this.level+":getRoots() exits: "+this.roots.toString()); return this.roots; } r = this.#getSingleRoot(RealPolynomEquation.infinityMinus,dR[0]); if(!isNaN(r)) { this.roots[0] = r; } var j = this.roots.length; var i; for ( i = 1; i < dR.length; i++ ) { r = this.#getSingleRoot(dR[i-1],dR[i]); if(!isNaN(r)) { this.roots[j] = r; j++; } } r = this.#getSingleRoot(dR[dR.length-1],RealPolynomEquation.infinityPlus); if(!isNaN(r)) { this.roots[j] = r; } console.log(this.level+":getRoots() exits: "+this.roots.toString()); return this.roots; } // getRoots
} - Наде̋вам се на всички устројства резултатите да сѫ поне сходни, ако не идентични.
- Пресме̋танијата се извършват не на web-server, а локално на Вашето устројство (смартфон, таблет, лаптоп, ..).
- Пресме̋танијата ги извършва интерпретаторът от JavaScript, којто е вграден във Вашијът browser.
- Езикът JavaScript е стандартизиран.
- Интерпретаторът от JavaScript ползва стандартна аритметика с плаваща точка.
- Да, алгоритъмът ползва аритметика с плаваща точка.
- Това налага да се обръща внимание на закрѫглјанијата и приближенијата.
- (.. скриј го кодът на програмата ..) (.. скриј ги корените на полином ..) (.. свиј ги ..) (.. разгъни ги ..) .. към началото ..
- Главната програма е getRoots().
- ►► Точност на пресме̋танијата (.. покажи ..)
-
▼▼
Точност на пресме̋танијата
(.. скриј ..)
- Не съм се задѫлбочавал в точността на пресме̋танијата.
- Разчитам на стандартна аритметика с плаваща точка, каквато ползва стандартен интерпретатор от JavaScript.
- Не ползвам специални софту̌ерни библиотеки за математически изчисленија.
- Програмата тре̋бва да може да работи на все̋ко устројство.
- Все пак, въведен е параметър Epsylon със стојности 0.001, 0.0001, 0.00001 или 0.000001 по избор.
- Сигурно мога̨т да се намерја̨т примери, при които тази програма греши.
- Молја̨ да бѫда̨ уведомјаван, ако намерите такива примери.
- Аз ще преценја̨ дали си струва да се поправја програмата.
- (.. скриј ја̨ точността на пресме̋танијата ..) (.. скриј ги корените на полином ..) (.. свиј ги ..) (.. разгъни ги ..) .. към началото ..
- Не съм се задѫлбочавал в точността на пресме̋танијата.
- ◄► (.. скриј ги корените на полином ..) (.. свиј ги ..) (.. разгъни ги ..) (.. скриј ја̨ втората беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ◄► Това е основнијът раздел на беседата.
- ►► Пресме̋тане на стојността на полиноми при зададена стојност на аргументът (.. покажи ..) (.. разгъна̨то ..)
-
▼▼
Пресме̋тане на стојността на полиноми при зададена стојност на аргументът
(.. скриј ..)
(.. свиј ..)
(.. разгъни ..)
- ◄► В този раздел именно това се прави:
- Компјутърчето сме̋та стојността на зададен полином за зададена стојност на аргументът.
- И коефициентите на полиномът, и стојността на аргументът, и получената стојност на полиномът сѫ реални числа.
- Непосредствената цел е да може да се провери дали намерен в предишнијът раздел реален корен на полиномът наистина е корен.
- Непосредствената цел е да може да се провери дали програмата от предишнијът раздел сме̋та ве̋рно.
- Ако дадено число наистина е корен на полиномът, то като се замести аргументът с това число, стојността на полиномът тре̋бва да е нула.
- Това значи да е корен на полиномът.
- По-нататък, този раздел дава повод да се покаже как компјутрите пресме̋тат стојността на полином.
- Това е втората цел на беседата, макар да е отклонение от основната цел.
- ◄► Първо задајте полиномът.
- Тука полиномът се въвеђа наведнѫж, а не по множители, както в предишнијът раздел.
- Но можете полиномът от предишнијът раздел заедно с намерените корени да бѫда̨т пренесени в този раздел.
- Тука не̋ма смисъл да въвеђате числа-константи.
Те не̋ма да бѫда̨т преобразувани в биноми.
- ◄► После задајте стојност на аргументът.
- Можете да изберете стојността на аргументът између числата, които в предишнијът раздел сѫ били намерени като корени на полиномът, ако сѫ били пренесени оттам тука.
- Можете и да въведете не̋какво число за стојност на аргументът, след което да натиснете бутонът (не този бутон тука, а онја по-долу при въведеното число).
-
Буква за аргументът: Въведи стојност на аргументът: Избери стојност на аргументът: - ►► Как да въвеђаме полином (.. покажи ги правилата ..)
-
▼▼
Как да въвеђаме полином
(.. скриј ги правилата ..)
- По-горе в този раздел, при въвеђането на полином с реални коефициенти, в сила сѫ следните правила и свободи:
- Шпации (интервали, space characters) сѫ допустими навсе̋къде, освен вѫтре в числата и међу двете звездички ** на знакът за степенуване.
- Полиномът (многочленът) се въвеђа като сума от едночлени.
- Може и да е съставен само от един член.
- Не се изисква подредба на съставјащите едночлени по степен.
Програмата ще ги подреди. - Разрешава се въвеђане на не̋колко едночлена от една и сѫща степен.
Програмата ще ги обедини, след като сумира коефициентите им. - Едночленът започва с коефициентът си.
Коефициентът може да се пропусне, ако е равен на единица. - След коефициентът на едночленът, се въвеђа буквата за аргументът.
- Тја може да се пропусне, ако степента на едночленът е нула (т.е. ако това е свободен член).
- Међу коефициентът и аргументът, ако и двете присѫтстват, може да се сложи звездичка * като знак за умножение.
- Но звездичката може да се пропусне.
- След буквата за аргументът като це̋ло число се пише степента на едночленът.
- Степента може да се пропусне, ако е единица.
- Међу буквата за аргументът и степента, ако и двете присѫтстват,
мога̨т да се сложа̨т две звездички ** като знак за степенуване.
Но знакът за степенуване може да се изпусне.
- Примери за едночлени от нулева степен:
5*x**0 1024*x**0 3.14*x**0 2.56*x**0 -1*x**0 -100*x**0 5x**0 1024x**0 3.14x**0 2.56x**0 -1x**0 -100x**0 5x**0 1024x**0 3.14x**0 2.56x**0 -x**0 -100x**0 5*x0 1024*x0 3.14*x0 2.56*x0 -1*x0 -100*x0 5x0 1024x0 3.14x0 2.56x0 -1x0 -100x0 5x0 1024x0 3.14x0 2.56x0 -x0 -100x0 5 1024 3.14 2.56 -1 -100 - Примери за едночлени от първа степен:
1*x**1 1024*x**1 3.14*x**1 2.56*x**1 -1*x**1 -100*x**1 1x**1 1024x**1 3.14x**1 2.56x**1 -1x**1 -100x**1 x**1 1024x**1 3.14x**1 2.56x**1 -x**1 -100x**1 1*x1 1024*x1 3.14*x1 2.56*x1 -1*x1 -100*x1 1x1 1024x1 3.14x1 2.56x1 -1x1 -100x1 x1 1024x1 3.14x1 2.56x1 -x1 -100x1 1*x 1024*x 3.14*x 2.56*x -1*x -100*x 1x 1024x 3.14x 2.56x -1x -100x x 1024x 3.14x 2.56x -x -100x - Међу едночлените, съставјащи въвеђанијът полином, се слага само един знак + (плјус) или - (минус).
- Пред първијът едночлен може да се сложи знак - (минус).
- Пример:
1*x**2 - 2*x**1 - 3*x**1 + 6*x**0 -2*x**3 + 3*x**2 - 1*x**1 + 7 1*x**2 - 5*x**1 + 6*x**0 -2x3 + 3x2 - x + 7 x2 - 5x + 6 2x3 - 3x2 + x - 7 - В този раздел не̋ма смисъл да се въвеђа полином от нулева степен, тоест константа.
- (.. скриј ги правилата ..) (.. скриј как се сме̋та полином ..) (.. свиј ..) (.. разгъни ..) .. към началото ..
-
►►
.. Покажи коментар към кодът на JavaScript ..
class RealPolynom extends Array { getValue(x) { var v = 0; for(let j = 0; j < this.length; j++) { v *= x; v += this[j]; } return v; } // getValue }
-
▼▼
Кодът на JavaScript
(.. скриј го коментарът към кодът ..)
-
class RealPolynom extends Array { getValue(x) { var v = 0; for(let j = 0; j < this.length; j++) { v *= x; v += this[j]; } return v; } // getValue }
- Класът RealPolynom е разширение на Array.
Обект от класът RealPolynom е преди всичко Array, масив от числа.- Числата от масивът сѫ коефициентите на полиномът.
- Бројът им е с единица по-голе̋м от степента на полиномът.
- Елементът [0] е старшијът коефициент - коефициентът пред нај-високата степен.
- Последнијът елемент е коефициентът пред нулевата степен (свободнијът член)
- Всички нулеви коефициенти присѫтстват в масивът на местата си, макар обикновено да не се показват.
- Тази програмка е на компјутърнијът език JavaScript.
- Тја би изглеђала по сѫщијът начин на Java, C, C++, C#, и по подобен начин на Алгол и PL/I.
- (.. скриј го коментарът към кодът на JavaScript ..) (.. скриј как се сме̋та полином ..) (.. свиј ..) (.. разгъни ..) .. към началото ..
-
- ►► Бележки по тукашнијът алгоритъм (.. покажи ..)
-
▼▼
Бележки по тукашнијът алгоритъм
(.. скриј ..)
- Става дума за алгоритъмът за пресме̋тане на стојността на полином за зададена стојност на аргументът.
- Съвет към кандидати за позиција на компјутърен програмист.
- На интервјуто за работа може да поискат от Вас да напишете малка програмка подобна на горе-показаната.
- Ако става дума за сѫщата задача и ако Вие кодирате не̋какъв алгоритъм, при којто се пресме̋тат степените на аргументът, това може да основание да Ви отхвърлја̨т.
- Следва словесно описание на алгоритъмът за тези, които не умеја̨т да разчитат компјутърен код.
- Коефициентите на полиномът се наређат в масив по старшинство.
Пръв е старшијът коефициент, свободнијът член е последен. - Дори не̋кој от коефициентите да е нула - крѫгла нула, тој заема ме̋стото си в масивът и алгоритъмът не може да го изпусне.
В частност, нулев свободен член сѫщо заема ме̋стото си (последното ме̋сто) в масивът. - Алгоритъмът започва с резултат 0 (нула).
- Алгоритъмът преминава последователно през всички коефициенти на полиномът, започвајки от старшијът и завършващи със свободнијът член.
- Пореднијът коефициент се добавја към резултатът.
- Ако има следващ коефициент, резултатът се умножава по зададената стојност на аргументът, преди да се премине към следващијът коефициент.
- Коефициентите на полиномът се наређат в масив по старшинство.
- Примери.
- Полиномът e
1*x5 - 5*x4 + 6*x3 - 1*x2 + 5*x - 6
а стојността на аргументът x е 2 .
- Алгоритъмът следва формулата:
(((((((((((0+1)*x)-5)*x)+6)*x)-1)*x)+5)*x)-6)
.
- Алгоритъмът следва формулата:
- Полиномът e
1*x4 - 1
а стојността на аргументът x е 256 .
- Алгоритъмът следва формулата:
(((((((((0+1)*x)+0)*x)+0)*x)+0)*x)-1)
.
- Алгоритъмът следва формулата:
Аргумент Коефициенти Резултат 2 1 -5 6 -1 5 -6 0 1 1 2 2 -5 -3 2 -6 6 0 2 0 -1 -1 2 -2 5 3 2 6 -6 0 256 1 0 0 0 -1 0 1 1 256 256 0 256 256 65536 0 65536 256 16777216 0 16777216 256 4294967296 -1 4294967295 - Полиномът e
1*x5 - 5*x4 + 6*x3 - 1*x2 + 5*x - 6
а стојността на аргументът x е 2 .
- Числата сѫ в десетична позиционна бројна система.
Компјутърът (в случајът интерпретаторът от JavaScript) така ги показва. - Последното число 4294967295
- в 16-ичен запис е FFFFFFFF,
- в двоичен запис е 11111111111111111111111111111111 (32 цифри 1), а
- в 8-ичен запис е 37777777777.
- Това е прелјудија към следващијът раздел, којто е отклонение за позиционните бројни системи.
- (.. скриј ги бележките по алгоритъмът ..) (.. скриј как се сме̋та полином ..) (.. свиј ..) (.. разгъни ..) .. към началото ..
- ◄► (.. скриј как се сме̋та полином ..) (.. свиј ..) (.. разгъни ..) (.. скриј ја̨ втората беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ◄► В този раздел именно това се прави:
- ►► Отклонение_1: позиционни бројни системи (.. покажи го отклонението ..) (.. разгъна̨то ..)
-
▼▼
Отклонение_1: позиционни бројни системи
(.. скриј го отклонението ..)
(.. свиј го ..)
(.. разгъни го ..)
- ►► В ежедневието се ползва десетична позиционна бројна система (.. покажи ..)
-
▼▼
В ежедневието се ползва десетична позиционна бројна система
(.. скриј ..)
- Десетичната позиционна бројна система е
в Европа отскоро: има-не̋ма петстотин години.
- Сегашното младо поколение трудно може да си представи светът без компјутри и компјутърчета. Старите обаче помним онова време.
- Но всички вече трудно можем да си представим какъв е бил светът без десетичната позиционна бројна система.
- Толкова сме свикна̨ли с неја̨.
- В Западна Европа сѫ се ползвали римските цифри.
- Не̋кога ги учехме в основното училище. Веројатно все още се уча̨т.
- Присѫтсваха̨ обикновено на табелите на класните стаи: V а клас. Веројатно все още е така.
- Присѫтсваха̨ и в номерацијата на партијни конгреси и на петилетките.
- Сега, слава Богу, не пиша̨т "XLIX народно събрание" - само във wikipedia-та се мѫдри.
- Лично аз избе̋гвам употребата на римските цифри и обикновено пиша̨ "49-тото народно събрание".
- У нас сѫ се ползвали
милетските цифри.
- До началото на 19-ти век всеки грамотен нашенец-христијанин ги е знаел.
- Сега ги знаја̨т само експерти, тренирани да разчитат стари текстове.
- В съвременна Гърција милетските цифри ги знаја̨т.
- Там не употребјават римските цифри.
- В случаите, когато ние употребјаваме римските цифри, в Гърција ползват милетските.
- Според мене, милетските цифри сѫ по-добри от римските.
- Но и едните, и другите нищо не струват пред десетичната позиционна бројна система.
- Десетичната позиционна бројна система определено е съдејствала за развитието на технологиите.
- С такова нещо не мога̨т да се похвалја̨т нито римските цифри, нито милетските.
- (.. скриј го ежедневието ..) (.. скриј го отклонението за позиционните бројни системи ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- Десетичната позиционна бројна система е
в Европа отскоро: има-не̋ма петстотин години.
- ►► Полиномите и позиционните бројни системи (.. покажи ..)
-
▼▼
Полиномите и позиционните бројни системи
(.. скриј ..)
- Записът на числата в позиционна бројна система има нещо общо с полиномите.
- Това е и причината за појавата на този раздел, в којто се прави отклонение от основната тема на беседата.
- При позиционна бројна система се фиксира це̋ло число по-голе̋мо от единица за
основа на бројната система или накратко radix.
- В ежедневнијът живот на хората radix-ът е 10 (десет).
- Вѫтре в светът на компјутрите - тогава, когато на компјутрите не им се налага да общуват с хора, radix-ът е 2 (две).
- Записът на число в позиционна бројна система при фиксиран radix
представлјава поредица (масив, array) от цифри.
- Цифрите сѫ коефициентите на полиномът, а radix-ът е аргументът.
- За все̋ко це̋ло неотрицателно число, по-малко от radix-ът,
сѫществува цифра, стојността на којато е това число.
- Цифрите сѫ толкова на број, колкото е radix-ът.
- Ако radix-ът е 2, и цифрите сѫ 2: 0 и 1.
- Ако radix-ът е 10 (осем), и цифрите сѫ осем: 0, 1, 2, 3, 4, 5, 6, 7.
- Ако radix-ът е 10 (десет), и цифрите сѫ десет: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
- Ако radix-ът е 16 (шестнадесет), и цифрите сѫ шестнадесет.
Обикновено се ползват тези: 0123456789ABCDEF. - Ако radix-ът е 36 (тридесет и шест), и цифрите сѫ толкова.
Обикновено се ползват тези: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ.
- Нулата винѫги е цифра, при всеки radix.
- При все̋ка позиционна бројна система има нуђа от цифрата
0 (нула).
Както и от единица (1). - Изобретјаването на позиционнијът запис на числата, веројатно дело на индијски математици, е те̋сно свързано с изобретјаването на цифрата нула и на числото нула.
- Точно това е дало тласък на развитието и на математиката, и на технологиите.
- Етимологијата на думи като цифра или шифър ни води към арабското название на нулата, което значело "нищо".
- При все̋ка позиционна бројна система има нуђа от цифрата
0 (нула).
- Целта на нулата е да държи и да бележи позицијата си
- и като цифра в запис на число в позиционна бројна система,
- и като коефициент на полиномът.
- В позиционна нотација, нулата може да се изпусне, само ако преди неја̨ не̋ма по-старши ненулев коефициент или по-старша ненулева цифра.
- Наличието на цифра нулата е основната разлика међу съвременното означение на числата от една страна, и римската или милетската система от друга страна.
- Непозиционни означенија:
- Хилјада оки лјута ракија. Sıcak rakı bin okkası. One Thousand oz of brendy.
- Полиномът x3.
- Позиционни означенија:
- 1000 оки лјута ракија. Sıcak rakı 1000 okkası. 1000 oz of brendy.
- В предишните раздели вѫтрешно на JavaScript pолиномът x3 се представја като масив от числа така: [1 0 0 0].
- (.. скриј го полиномиалното при позиционните бројни системи ..) (.. скриј го отклонението за позиционните бројни системи ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- Записът на числата в позиционна бројна система има нещо общо с полиномите.
- ►► През практиката ми на компјутърен програмист съм си имал работа със .. (.. покажи ..)
-
▼▼
През практиката ми на компјутърен програмист съм си имал работа ..
(.. скриј ..)
- предимно с radix 10 - с десетичната позиционна бројна система.
- Човек съм, а компјутрите отдавна сѫ се научили да общуват с хора в radix 10.
- Например, дотук при тази беседа - "за компјутрите полиномиално", не ми се е налагало мислено да превклјучвам към radix 2.
- Но пък в предишната беседа - онаја за дупките на перфолентата, това поне̋кога се налагаше.
- Без връзка с писането на разни беседи, през практиката ми на компјутърен програмист все пак ми се е налагало да минавам и на други в radix-и.
- Не може човек да разбира сърдцето и чувствата на компјутърът, ако не владее вѫтрешнијът му
radix - radix 2.
- В кръвта на компјутрите е radix 2.
- Едно време, когато бе̋х ученик и студент, имаше надеђа, че в бѫдеще ще се појавја̨т компјутри с radix 3 в кръвта, и се упражнјавахме не само на radix 2, но и на radix 3.
- Не се појавиха̨ такива компјутри.
Не съм имал досег с radix 3 в практиката си.
- Записът в radix 2 е твърде неудобен за показ и възпријатие.
Когато radix 2 се показва на човек или се очаква човек да го възприеме, винѫги се замества с «роднински» radix - radix 8 или radix 16.- При Минск-2 и PDP-11 - radix 8.
- При другите компјутърни архитектури - radix 16.
- Не бива да се забравја, че radix 8 и radix 16 не сѫ нищо друго освен сбит запис на radix 2.
- Едно време при компјутрите PDP-11 за кодиране на 6-знакови идентификатори в 32 бита
се ползваше radix 40 под означението Radix-50.
- Числото 40 (записано в radix 50) e 50 в radix 8 (5*8 е 40), а «кръвообращението» на PDP-11 се показваше в radix 8.
- Комуникациите в следващите години използват разни други radix-и.
- Например, radix 64 се ползваше от програмите uuencode и uudecode в Unix, а впоследстие и във e-mail-ите при прикрепените към те̋х фајлове.
- Само за забавление - just for fun, в следващите подраздели ще демонстрирам произволен
radix в диапазонът от 2 до 36.
- Горната граница на диапазонът е определена от фактът, че разполагаме с 36 цифри: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ.
- (.. скриј с кои radix-и съм си имал работа ..) (.. скриј го отклонението за позиционните бројни системи ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- предимно с radix 10 - с десетичната позиционна бројна система.
- ►► Преобразуване от друга позиционна бројна система към «нашата» (.. покажи ..)
-
▼▼
Преобразуване от друга позиционна бројна система към «нашата»
(.. скриј ..)
- Која е «нашата» позиционна бројна система?
Кој е «нашијът» radix?- «Нашијът» radix е този, в којто се извършват аритметичните дејствија: събиране, умножение, деление на цели числа.
- «Нашијът» radix е този, в којто се извършват пресме̋танијата.
- За нас хората «нашијът» е radix 10.
- За интерпретаторът на JavaScript «свој» сѫщо така е radix 10.
- Този интерпретатор е програма, којато работи на компјутърът, а не е самијът компјутър.
- Програма на езикът JavaScript се изпълнјава от интепретаторът, а не от самијът компјутър.
- Компјутрите на съвсем ниско ниво имат radix 2 за «свој».
- Програми, които да се изпълнјават непосредствено на самијът компјутър, се пиша̨т на езици като C, C++ или асемблер.
- Това, разбира се, е условно написано.
- Важното е, че в този раздел ще се имат пред вид сметки само в radix 10.
- Аритметика в radix различен от 10 не̋ма да се обсѫђа.
- В този подраздел задачата ще е тази: число, представено в друг radix,
да се конвертира в «нашијът» radix 10.
- Ако числото е представено в друг radix, за «нас» то не е число, защото не можем да сме̋таме с него.
- За «нас» то е просто низ от не̋какви цифри.
- Задачата ще е да го превърнем в число в «нашијът» radix 10.
- Алгоритъмът ще е сѫщијът, којто бе приложен в разделът за пресме̋тане на стојността на полином.
- Пример. Число не̋какво е представено в radix 16 във видът FFFF, като цифрата F е 15.
- Започваме с нулев резултат. Резултатът е 0.
- Към резултатът добавјаме стојността на старшата цифра. 0+15. Резултатът е 15.
- Умножаваме резултатът по radixът. 15*16. Резултатът е 240.
- Към резултатът добавјаме стојността на следващата цифра. 240+15. Резултатът е 255.
- Умножаваме резултатът по radixът. 255*16. Резултатът е 4080.
- Към резултатът добавјаме стојността на следващата цифра. 4080+15. Резултатът е 4095.
- Умножаваме резултатът по radixът. 4095*16. Резултатът е 65520.
- Към резултатът добавјаме стојността на последната цифра. 65520+15. Резултатът е 65536.
- Тука ще можете да изберете radix в диапазонът от 2 до 36.
- След това ще можете да въведете число в избранијът radix.
- И като натиснете бутонът Go!, програмата на JavaScript ще представи Вашето число в «нашијът» radix 10.
-
Radix: - Полученото като резултат число, записано в «нашијът» radix 10 (в десетичната позиционна бројна система, използвана в ежедневието), ще бѫде пренесено автоматично в следващијът подраздел, където то ще може да бѫде преобразувано друг radix, трети radix.
- Впрочем, това е начинът за конвертиране от един radix в друг, като и двата radix-а сѫ различни от «нашијът»: първо в «нашијът», после в другијът.
-
.. Покажи го кодът на програмката за конвертиране към «нашијът» radix ..
-
Кодът на програмката за конвертиране към «нашијът» radix
(.. скриј го кодът ..)
-
function convertFromRadix(radix, digits) { var res = 0; var v; var d; var dig = digits; while(dig != "") { res *= radix; d = dig.slice(0,1); dig = dig.slice(1); v = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".search(d); if(v > 0) { res += v; } } return res; }
- Такива програмки се пиша̨т не на JavaScript, а на C или на асемблер.
- JavaScript има вградени средства за такова конвертиране.
-
- (.. скриј го преобразуването от друга позиционна бројна система ..) (.. скриј го отклонението за позиционните бројни системи ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- Која е «нашата» позиционна бројна система?
- ►► Преобразуване от «нашата» позиционна бројна система към друга (.. покажи ..)
-
▼▼
Преобразуване от «нашата» позиционна бројна система към друга
(.. скриј ..)
- Која е «нашата» позиционна бројна система?
Кој е «нашијът» radix?- «Нашијът» radix е този, в којто се извършват аритметичните дејствија: събиране, умножение, деление на цели числа.
- «Нашијът» radix е този, в којто се извършват пресме̋танијата.
- За нас хората «нашијът» е radix 10.
- За интерпретаторът на JavaScript «свој» сѫщо така е radix 10.
- Този интерпретатор е програма, којато работи на компјутърът, а не е самијът компјутър.
- Програма на езикът JavaScript се изпълнјава от интепретаторът, а не от самијът компјутър.
- Компјутрите на съвсем ниско ниво имат radix 2 за «свој».
- Програми, които да се изпълнјават непосредствено на самијът компјутър, се пиша̨т на езици като C, C++ или асемблер.
- Това, разбира се, е условно написано.
- В този подраздел задачата ще е тази: число,
представено в добре познатијът ни «наш» radix 10,
да се преобразува в друг зададен radix.
- Резултатът тука ще бѫде низ от цифри в другијът radix.
- Алгоритъмът се основава на аритметичната операција деление на цели числа.
- Тази операција дава две числа като резултат: частното и остатъкът.
- Компјутърът на ниско ниво извършва целочисленото деление точно така: едновременно намира частното и остатъкът.
- Ако се програмира на език от високо ниво, задача на езиковијът процесор (компилатор или интерпретатор) е да не кара операцијата на ниско ниво да се извършва два пѫти.
- Описание на алгоритъмът за решаване на задачата.
- Цифрите се определја̨т последователно една по една, от младшата към старшата, от последната към първата.
- На все̋ка стѫпка от алгоритъмът се извършва целочислено деление, при което делител е radix-ът.
- Остатъкът е поредната цифра.
- Следващата стѫпка продължава с частното.
- Илјустрација на алгоритъмът по стѫпки.
- За целите на илјустрацијата да се поставим на ме̋стото на компјутърът, за којто «свој» е radix 2 (или кој да е друг radix, различен от 10.
- Задачата ще бѫде да намерим десетичните цифри, цифрите в radix 10.
- Да вземем произволно число. Съвсем произволно. От немај къде записът му тука на екранът ще бъде десетичен.
- 265302.
- 1-ва стѫпка. Делим 265302 на 10. Остатъкът е 2. Това е последната цифра. Продължаваме с частното 26530.
- 2-ра стѫпка. Делим 26530 на 10. Остатъкът е 0. Това е поредната цифра. Слагаме ја̨ отпред. Резултат дотук: 02. Продължаваме с частното 2653.
- 3-та стѫпка. Делим 2653 на 10. Остатъкът е 3. Това е поредната цифра. Слагаме ја̨ отпред. Резултат дотук: 302. Продължаваме с частното 265.
- 4-та стѫпка. Делим 265 на 10. Остатъкът е 5. Това е поредната цифра. Слагаме ја̨ отпред. Резултат дотук: 5302. Продължаваме с частното 26.
- 5-та стѫпка. Делим 26 на 10. Остатъкът е 6. Това е поредната цифра. Слагаме ја̨ отпред. Резултат дотук: 65302. Продължаваме с частното 2.
- 6-та стѫпка. Делим 2 на 10. Остатъкът е 2. Това е поредната цифра. Слагаме ја̨ отпред. Резултат дотук: 265302. Частното е 0. Следователно, това е последната стѫпка.
- Първо въведете це̋ло положително число в привичнијът за човек десетичен запис (в «нашијът» radix 10).
- После изберете друг radix в диапазонът от 2 до 36.
- Програмата ще Ви покаже представјането на Вашето число в избранијът radix.
-
Radix: -
.. Покажи го кодът на програмката за конвертиране към друг radix ..
-
Кодът на програмката за конвертиране към radix, различен от «нашијът»
(.. скриј го кодът ..)
-
function integerDivision(a,b) { if((typeof(a) == "number") && (0 <= a) && ((a >> 0) == a) && (typeof(b) == "number") && (0 < b) && ((b >> 0) == b)) { return {"q":((a/b) >> 0),"r":(a%b)} } return {"q":"-","r":""} }
function convertToRadix(radix, number) { if((typeof(radix) != "number") || (radix > 36) || (radix < 2) || ((radix >> 0) != radix) || (typeof(number) != "number") || (number < 0) || ((number >> 0) != number)) { return ""; } if (number == 0) { return "0"; } var div; var res = ""; var num = number; while(num != 0) { div = integerDivision(num,radix); if (div["q"] == "-") { return ""; } res = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".slice(div["r"]).slice(0,1) + res; num = div["q"]; } return res; } - Такива програмки се пиша̨т не на JavaScript, а на C или на асемблер.
- JavaScript има вградени средства за такова конвертиране.
-
- (.. скриј го преобразуването към друга позиционна бројна система ..) (.. скриј го отклонението за позиционните бројни системи ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- Која е «нашата» позиционна бројна система?
- ►► Преобразуване међу «роднински» позиционни бројни системи (.. покажи ..)
-
▼▼
Преобразуване међу «роднински» позиционни бројни системи
(.. скриј ..)
- «Роднински» сѫ radix-и,
които сѫ степени на един и сѫщ radix - първа степен, втора степен, трета степен, ..
- Например, radix-ите 8 и 16 сѫ «роднински»,
понеже 8 и 16 сѫ степени (трета и четвърта) на 2.
- В сѫщност, тези три radix-а 2, 8 и 16 сѫ «роднински».
- Друг пример. «Роднински» сѫ radix-ите 10, 100 и 1000.
- Например, radix-ите 8 и 16 сѫ «роднински»,
понеже 8 и 16 сѫ степени (трета и четвърта) на 2.
- Конвертирането међу «роднински» radix-и ..
- не се извършва по алгоритмите от предишните два подраздела,
- дори когато не̋кој от «роднински» radix-и е «нашијът».
- Защото има по-лесен начин.
- Защото два «роднински» radix-а не сѫ много различни един от друг.
- Конвертирането међу «роднински» radix-и ..
- се извършва чрез групиране, декомпозиране и прегрупиране на цифрите.
- Да разгледаме radix-ът 100.
- Тој е «роднина» на «нашијът» radix 10.
- Radix 100 има нуђа от 100 цифри.
- Нека тези 100 цифри да сѫ следните:
{00},{01},{02},{03},{04},{05},{06},{07},{08},{09}, {10},{11},{12},{13},{14},{15},{16},{17},{18},{19}, {20},{21},{22},{23},{24},{25},{26},{27},{28},{29}, . . {80},{81},{82},{83},{84},{85},{86},{87},{88},{89}, {90},{91},{92},{93},{94},{95},{96},{97},{98},{99}.
- Все̋ка от тези 100 «цифри» си ја̨ мислете като це̋лостен јероглиф със съответната стојност.
- При конвертирането от radix 10 към radix 100 цифрите по radix 10 се групират по две (по две, защото 100 е втора степен на 10) от де̋сно на ле̋во (в общијът случај от точката в двете посоки).
- Все̋ка групичка от две цифри в radix 10 се кодира в една от 100-те «цифри» по radix 100.
- 2024 => {20}{24}.
- Да разгледаме radix-ът 1000.
- Тој е «роднина» на radix-ите 10 и 100.
- Radix 1000 има нуђа от 1000 цифри.
- Нека тези 1000 цифри да сѫ следните:
{000},{001},{002},{003},{004},{005},{006},{007},{008},{009}, {010},{011},{012},{013},{014},{015},{016},{017},{018},{019}, {020},{021},{022},{023},{024},{025},{026},{027},{028},{029}, . . {980},{981},{982},{983},{984},{985},{986},{987},{988},{989}, {990},{991},{992},{993},{994},{995},{996},{997},{998},{999}.
- Все̋ка от тези 1000 «цифри» си ја̨ мислете като це̋лостен јероглиф със съответната стојност.
- Нека задачата да е следната: Число, което в radix 100 се представја във видът {20}{24}, да се представи в «роднинскијът» radix 1000.
- Де-композираме цифрите по radix 100 към цифри по radix 10:
- {20}{24} => 2024.
- Групираме ги по три (по три, защото 1000 е трета степен на 10).
- 2024 => 002 024.
- Все̋ка групичка от три цифри в radix 10 се кодира в една от 1000-та «цифри» по radix 1000.
- 002 024 => {002}{024}.
- Да се върнем на компјутърчетата, че техен е бѫдещијът интелект.
- Като оставим настрани «нашијът» radix 10,
компјутърните програмисти и кодировчици нај-често си имат работа с три «роднински» radix-a:
2, 8 и 16.
- При radix 2, двоичината позиционна система, којато компјутрите имат за «своја»,
сѫ нужни две (2) цифри, 0 и 1.
- Една двоична цифра се нарича бит.
- Това е нај-малкото количество информација.
- Ме̋рката за количество информација е бит.
- При radix 8 сѫ нужни 8 (осем) цифри.
- Ето ги тези 8 (осем) цифри, заедно с де-композицијата им на битове:
0: 000, 1: 001, 2: 010, 3: 011, 4: 100, 5: 101, 6: 110, 7: 111.
- Например, записът 377 в radix 8 означава 11111111 - един бајт светна̨ти битове.
- Ето ги тези 8 (осем) цифри, заедно с де-композицијата им на битове:
- При radix 16 сѫ нужни 16 цифри.
- Ето ги тези 16 цифри, заедно с де-композицијата им на битове:
0: 0000, 1: 0001, 2: 0010, 3: 0011, 4: 0100, 5: 0101, 6: 0110, 7: 0111, 8: 1000, 9: 1001, A: 1010, B: 1011, C: 1100, D: 1101, E: 1110, F: 1111.
- Например, един бајт светна̨ти битове в radix 16 се представја така: FF.
- А пък бајт, в којто само старшијът бит е светна̨т, в radix 16 се представја така: 80.
- Ето ги тези 16 цифри, заедно с де-композицијата им на битове:
- При radix 2, двоичината позиционна система, којато компјутрите имат за «своја»,
сѫ нужни две (2) цифри, 0 и 1.
- Нека задачата да ни е следната.
Число, имащо видът 3750 в radix 8, да се представи в «роднинскијът» radix 16.- Осмичните цифри ги де-композираме на битове - все̋ка на три бита:
011 111 101 000
. - Групираме битовете по четири:
0111 1110 1000
. - Все̋ка групичка от четири бита представјаме с една цифра в radix 16:
7E8
.
- Осмичните цифри ги де-композираме на битове - все̋ка на три бита:
- Да отбележа̨, че за компјутърчето играта с битове е по-лесна от аритметичните операции събиране, умножение и деление.
- То и за човек е така, ако е свикна̨л да жонглира с битчета.
- (.. скриј го преобразуването међу роднински позиционни бројни системи ..) (.. скриј го отклонението за позиционните бројни системи ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- «Роднински» сѫ radix-и,
които сѫ степени на един и сѫщ radix - първа степен, втора степен, трета степен, ..
- ►► Нещо като заклјучение на първото отклонение (.. покажи ..)
-
▼▼
Нещо като заклјучение на първото отклонение
(.. скриј ..)
- Основната тема на беседата беше намирането на реалните корени на полином с реални коефициенти.
- В това отклонение се отплесна̨х по вѫтрешното представјане на данните в компјутрите.
- Изложението не е на техническо ниво. То е на публицистично ниво.
- Целта е само читателите да добија̨т не̋каква представа.
- Целта е обща представа преди всичко и представа за алгоритмите.
- Имплементацијата на алгоритмите среща ограниченијата на компјутърната среда и те не винѫги работја̨т.
- Но не съм си поставјал за цел имплементација на аритметика с по-висока точност.
- Съвсем не всичко бе споменато.
- Струва си да се отбележи, че както всичко, свързано с компјутрите, се доразвива и подобрјава, така става с разните формати и кодировки.
- Редица стари формати, с които съм работил през 80-те, сега сѫ забравени.
- Например, пакетираните десетични числа и машинната аритметика с те̋х.
- Имаше ги в IBM/System360, а после и във VAX.
- Или пък десетичните числа с плаваща точка.
- Имаше ги пак в IBM/System360, където немаше двоични числа с плаваща точка.
- Не знам тази странност да е била повторена в друга компјутърна архитектура.
- Например, пакетираните десетични числа и машинната аритметика с те̋х.
- При решаването на задачата за намирането на реалните корени на полином с реални коефициенти се ползва аритметика с плаваща точка.
- Едно време аритметиката с плаваща точка беше един от аспектите в програмирането, којто беше нај-трудно преносим међу различните компјутърни архитектури.
- Сѫщо така, почти невъзможно беше да се пренасјат като данни числа с плаваща точка в машинно представјане.
- Сега вече има стандарт за аритметика с плаваща точка.
- (.. скриј го заклјучението ..) (.. скриј го отклонението за позиционните бројни системи ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ◄► (.. скриј го отклонението за позиционните бројни системи ..) (.. свиј го ..) (.. разгъни го ..) (.. скриј ја̨ втората беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ►► Отклонение_2: циклично броене, пръстени на остатъците (.. покажи го отклонението ..) (.. разгъна̨то ..)
-
▼▼
Отклонение_2: циклично броене, пръстени на остатъците
(.. скриј го отклонението ..)
(.. свиј го ..)
(.. разгъни го ..)
- ►► Нещо като предговор на второто отклонение (.. покажи ..)
-
▼▼
Нещо като предговор на второто отклонение
(.. скриј ..)
- Основната тема на беседата беше намирането на реалните корени на полином с реални коефициенти.
- При това "полето на дејствие" е полето на реалните числа.
- Но това беше в математическата задача за намирането на реалните корени на полином с реални коефициенти.
- В първото отклонение се отплесна̨х по вѫтрешното представјане на данните в компјутрите.
- Там, в първото отклонение, вече напусна̨хме полето на реалните числа.
- Всичко в компјутрите се моделира и се представја с цели числа.
- Аналогови компјутри и дори хибридни аналогово-цифрови компјутри аз не съм виђал.
- Всичко минава на цифровизација и дори вече си е цифрово (дигитално) - телефонни разговори, телевизија, звукозаписи.
- Дигиталното е по-надеђно, по-стабилно и по-лесно се управлјава.
- Аналоговото може да резонира със заобикалјащијът ни реален аналогов све̋т.
- Изградили сме си виртуален дигитален (цифров) све̋т.
- Това беше още в първото отклонение.
- Тре̋бва да го прочетете преди второто отклонение.
- И сега идва второто отклонение.
- Ще се разделим с представата за безкрајност.
- Ще заменим безкрајността с цикличност.
- В нашите човешки представи и усещанија не̋ма безкрајност.
- Всичко, до което се докасваме или което можем да погледнем, е отсам безкрајността.
- Не знаем къде е тја, безкрајността.
- Лесно можем да си представим, че половината на нищото - на нулата - е точно равна на це̋лото нищо (на це̋лата нула).
- Но трудно можем да си представим, че половината на безкрајността е точно равна на це̋лата безкрајност.
- Или че це̋лата безкрајност е равна на половината си.
- Затова ще се разделим с представата за безкрајност.
- Изложението не е на техническо ниво. То е на публицистично ниво.
- Едната цел е читателите да добија̨т не̋каква представа за цикличността в компјутрите.
- В този смисъл това е продължение на първото отклонение от беседата.
- От друга страна, подготвјам обстојна публикација за разните календари и за разните календарни елементи.
- А там има много примери на циклично броене.
- (.. скриј го предговорът на второто отклонение ..) (.. скриј го второто отклонение ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- Основната тема на беседата беше намирането на реалните корени на полином с реални коефициенти.
- ►► Цикличното броене в ежедневието (.. покажи ..)
-
▼▼
Цикличното броене в ежедневието
(.. скриј ..)
- Седмицата.
- Понеделник, вторник, сре̋да, четвъртък, петък, сѫбота, неделја .. и пак понеделник.
- И така повече от три хилјади години.
- Без прекѫсване, без приплъзгване, без грешки.
- Месеците.
- Јануари, февруари, март, април, мај, јуни, јули, август, септември, октомври, ноември, декември .. и пак јануари.
- И така повече от две хилјади години.
- Циферблатът на часовниците.
- Един часът, два часът, три часът, .., шест часът, .., девет часът, десет часът, единадесет часът, дванадесет часът, и пак един часът.
- И така откакто го има старијът часовник.
- Г-жа Петрова, начална учителка.
- Води първолаци, води второкласници, води третокласници, води четвъртокласници, и пак при първолаците.
- И така до пенсија.
- Е, да:
- Първолаците не сѫ сѫщите, както преди четири годинин - други сѫ.
- Един часът днес по пладне не е като един часът нощес, а пък утре в един часът кој знае какво ще стане.
- През тазгодишнијът јануари бе̋х с це̋ла година по-стар, отколкото бе̋х през мина̨логодишнијът јануари.
- Този понеделник сериалът по телевизијата свърши, и другијът понеделник ще почва друг сериал.
- Обаче:
- Все първолаци, дечица малки.
- Часовникът все един часът показва.
- И на стеннијът календар пише все "јануари".
- И след този понеделник пак вторник ще дојде.
- (.. скриј го цикличното броене в ежедневието ..) (.. скриј го второто отклонение ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- Седмицата.
- ►► Цикличното броене в математиката (.. покажи ..)
-
▼▼
Цикличното броене в математиката
(.. скриј ..)
- В предишното отклонение беше написано, че појавата на понјатиетието за нула - изобретјаването на числото нула и на цифрата нула,
което се е случило сравнително наскоро, е дало тласък на развитието на математиката и на технологиите.
- Ако часовниковите циферблати не следваха̌ стара традиција, означенијата върху те̋х ще̋ха̨ да сѫ от 0 до 11.
- С термините "поле" и "пръстен" се означават две алгебрични структури, на които в математиката се дават определенија.
- Елементите им мога̨т да бѫда̨т наричани числа.
- И в двете тези структури сѫ възможни обичајните аритметични операции събиране, извађане и умножение.
- Има си нула, којато не променја числото, към което е добавена.
- Има си и единица, којато не променја числото, с което е умножена.
- Все̋ко поле в частност е и пръстен, но не всеки пръстен е поле.
- Един пръстен, за да бѫде поле, тре̋бва винѫги в него да е възможна операцијата деление на число, което е различно от нула.
- Например.
- Числата 5 и 2 сѫ елементи поне на три полета: на полето на комплексните числа, на полето на реалните числа и на полето на рационалните числа.
- Ако числата 5 и 2 ги разглеђаме като елементи на поле, то можем да разделим 5 на 2 и ще се получи число от сѫщото поле: числото 2.5 (две и половина).
- Числата 5 и 2 сѫ елементи и на пръстенът на целите числа.
- Ако числата 5 и 2 ги разглеђаме като елементи на пръстенът на целите числа, то при операцијата "5 делено на 2" ще се получа̨т две числа (две числа от този пръстен): частно 2 и остатък 1.
- Число 2.5 (две и половина) в този пръстен не̋ма.
- Да забравим за полетата. Продължаваме само с пръстените.
От не̋каква гледна точка, продължаваме с целите числа.- При деление на две числа от един пръстен (при ненулев делител, разбира се) може да не се намери едно число от този пръстен като резултат.
- Но ще се намерја̨т две числа: частно и остатък.
- Да си припомним, че целта на това второ отклонение е да се разделим с представата за безкрајност
и да ја̨ заменим с представа за цикличност.
- Като имаме на разположение нулата и позиционното представјане на числата.
- Обикновено в десетичната позиционна бројна система.
- Да се ограничим до последните две десетични цифри, до последните два десетични разрјада.
- Ако за две цели положителни числа съвпадат последните две цифри - единиците и десетиците - в десетичното им представјане, нека да сме̋таме, че тези две числа сѫ идентични.
- Така се получава пръстен, съдържащ точно 100 елемента - точно 100 "числа", наречен "пръстен на остатъците по модул 100" и означаван така: Z100.
- Числата от този пръстен обикновено се означават така: 0, 1, 2, .., 98, 99.
- В този пръстен 12+12 е равно на 24. Ама 92+12 е равно на 4, защото 104 е идентично на 4
- В този пръстен 0-6 е равно на 94. Елементът 94 може да бѫде означен и така: -6.
- С други думи, не̋маме никакъв проблем част от числата в пръстенът на остатъците да ги сме̋таме за отрицателни.
- Възможно е и всичките ненулеви елементи на този пръстен да ги сме̋таме за отрицателни.
- Отклонение за почивка. Да не си помислите, че децата от 2-ри клас се уча̨т да сме̋тат в пръстенът Z100. Макар това доне̋къде да е ве̋рно. Крај на почивката.
- За все̋ко це̋ло число n по-голе̋мо от 1 сѫществува пръстен на остатъците по модул n с означение
Zn.
- Пръстенът Zn съдържа точно n числа: от 0 до n-1.
- Отклонение към физиката.
- Не̋кои физични јавленија имат абсолјутно начало и е естествено това начало да бѫде отбеле̋звано с цифрата 0 (нула).
- Например, абсолјутната нула при температурата (минус 253 градуса по Целзиј). По-ниска температура не̋ма.
- Хората не винѫги сѫ осъзнавали сѫществуването на абсолјутната температурна нула.
- И досега се използват температурни ска̀ли, където нулата не е в абсолјутното начало,
а на не̋кое друго условно прието ме̋сто:
- При ска̀лата на Целзиј нулата е на точката на замръзване на водата.
- При ска̀лата на Fahrenheit нулата е нај-ниската температура, измерена в Данциг (Гданск) през зимата на 1708-1709.
- Времето сѫщо има абсолјутно начало - големијът взрив, но това абсолјутно начало е абсолјутно недостижимо.
- Затова при отчитане на времето винѫги се налага да слагаме не̋къде условна нула.
- Ја̀ при рођението на Иисуса Христа.
- Ја̀ при създаването на светът според Библијата.
- Ја̀ от основаването на градът Рим.
- Ја̀ в други точки от времето.
- Крај на отклонението към физиката.
- Да въведем абсолјутно отбројаване на дните (на денонощијата) от не̋какво условно начало.
- За нулев ден ще објавја̨ 16-ти април 1916. 27499
- Избран е за по-лесни сметки.
- Това е първата неделја след въвеђането на григорианскијът календар в Българија.
- Ще го нарека̨ този ден ДТВ: де̋до тръгва на војна.
- Абсолјутно броене на дните от ДТВ.
- Малко от дните сѫ добри за Българија. Много малко.
- На ден 882 от ДТВ е пробивът на Добро поле.
- На ден 3287 от ДТВ терористи взривјават храм в центърът на Софија и убиват около 200 души.
- На ден 10373 от ДТВ Българија попада в лапите на Сталин.
- На ден 26706 от ДТВ стотина хилјади мјусјулмани български грађани сѫ изгонени от страната.
- На ден 29514 от ДТВ - един от малкото хубави дни - БСП загуби властта - отстѫпи ја̨ за около 8 години.
- На ден 30553 - нај-хубавијът ден за Българија от ДТВ насам - Европејскијът съјуз реши да приеме Българија за член.
- Ние хората не сме компјутри и не отчитаме дните така.
- В ежедневието си в много случаи отчитаме дните циклично.
- Делим числото - бројът на дните от ДТВ - на 7 и броим циклично. Прилагаме Z7: пръстенът на остатъците по модул 7.
- Имаме си имена за елементите на този пръстен:
{0} неделја, {1} понеделник, {2} вторник, {3} сре̋да, {4} четвъртък, {5} петък, {6} сѫбота. - Пробивът на Добро поле е бил в неделја. [882 делено на 7: частно 126 и остатък 0]
- Големијът атентатът в софијски храм е бил в четвъртък. [3287 делено на 7: частно 469 и остатък 4]
- Българија попада в лапите на Сталин в сѫбота. [10373 делено на 7: частно 1481 и остатък 6]
- Тодор Живков ја̨ държа онази си реч в понеделник. [26706 делено на 7: частно 3815 и остатък 1]
- Беше вторник, когато БСП отстѫпи властта за около 8 години. [29514 делено на 7: частно 4216 и остатък 2]
- Решението за приемането на Българија в Евросъјузът бе взето в петък. [30553 делено на 7: частно 4364 и остатък 5]
- Да въведем абсолјутно отбројаване на часовете от не̋какво условно начало.
- Нека това условно начало е настѫпването на новата 2024 година.
- В час номер 15 (часовниковата стрелка сочи 3 на циферблатът) слушах на запис виенскијът новогодишен концерт. [15 делено на 12: частно 1 и остатък 3]
- В час номер 156 (часовниковата стрелка сочи 12) јануарската ми пенсија е постѫпила по сметката ми. [156 делено на 12: частно 13 и остатък 0]
- В час номер 906 (часовниковата стрелка сочи 6) февруарската ми пенсија е постѫпила по сметката ми. [906 делено на 12: частно 75 и остатък 6]
- В час номер 1602 (часовниковата стрелка сочи 6) мартенската ми пенсија постѫпи по сметката ми. [1602 делено на 12: частно 133 и остатък 6]
- В час номер 2167: часовниковата стрелка сочеше 7 - мръдна̨х ја̨ да сочи 8 заради ле̋тното часово време. [2167 делено на 12: частно 180 и остатък 7]
- Свикна̨ли сме да отчитаме часовете циклично - в пръстен по модул 12.
- (.. скриј го цикличното броене в математиката ..) (.. скриј го второто отклонение ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- В предишното отклонение беше написано, че појавата на понјатиетието за нула - изобретјаването на числото нула и на цифрата нула,
което се е случило сравнително наскоро, е дало тласък на развитието на математиката и на технологиите.
- ►► Цикличното броене в компјутрите (.. покажи ..)
-
▼▼
Цикличното броене в компјутрите
(.. скриј ..)
- Ако числата се представјат в radix 10 (десетична позиционна бројна система, r = 10)
и се ограничим до осем разрјада (осем цифри, n = 8), ще можем да получим сме̋тане
в пръстенът на остатъците по модул 100000000. Сто милиона - десет на осма -
r на степен n -
това е мощността на пръстенът, толкова елемента тој съдържа.
- Тези сто милиона на број числа сѫ от 0 (00000000) до 99999999.
- Последното или "нај-високото" число е 99999999.
- Ако към него добавим 1 ще получим 0 (00000000) и 1 пренос. Ето как:
- Добавјаме единица към младшијът разрјад. В него има 9. Става 10, тоест 0 (нула) и 1 (единица) пренос към старшијът разрјад (едно на ум).
- Тази единица, којато е пренос от младшијът разрјад, ја̨ добавјаме към следващијът разрјад. В него има пак 9. Става 10, тоест 0 (нула) и 1 (единица) пренос към старшијът разрјад (пак едно на ум).
- .. И така нататък. На все̋ка позиција се получава 0 (нула) и 1 (единица) пренос.
- Към старшијът наличен разрјад добавјаме единицата, којато е пренос от предишнијът разрјад. Получава се пак 0 (нула) и единица пренос, којто не̋ма вече какво да го правим.
- Резултатът е 0 (00000000).
- Тази сметка бе направена в пръстенът Z100000000.
- Да се запитаме: щом в този пръстен 99999999+1 = 0, нима елементът 99999999 не е -1.
- Да, така е. В пръстенът Z100000000 99999999 е идентично с -1. Както и -1 е идентично с 99999999.
- Вѫтрешно в реалните компјутри числата се представјат в radix 2, двоично.
- Една двоична цифра се нарича бит.
- Един бит може да има стојност или 0 (нула) или 1 (единица).
- Не̋кога имаше компјутри с нај-различна разрјадност.
- Сегашните сѫ 64-битови или 32-битови.
- Да означим разрјадността с n - radix-ът си е 2.
- Съответнијът пръстен се означава така: Z2**n (пръстен Ζ с мощност 2 на степен n).
- Трудно е човек да съсредоточи вниманието си върху 32 бита, а за 64 - да не говорим.
- Пръстените Z2**64 и Z2**32 не̋ма как да ги използвам за илјустрација.
- Затова ще приема 8 бита, макар 8-битови компјутри да не̋ма отдавна.
- Пръстенът Z256 е с мощност 256 (две на осма).
- Тој съдържа 256 елемента - 256 числа.
- Тези 256 числа, наредени по "височина", сѫ:
- Десетично от 0 до 255.
- Двоично от 0 (00000000) до 11111111.
- Осмично от 0 до 377.
- Шестнадесетично от 0 (00) до FF.
- Не̋ма комбинација от 8 бита, којато да не е преброена и да не е вклјучена в тези 256 елемента или 256 числа.
- Последното или "нај-високото" число е 11111111.
- Ако към него добавим 1 ще получим 0 (00000000) и 1 пренос. Ето как:
- Добавјаме единица към младшијът разрјад. В него има 1. Става 10, тоест 0 (нула) и 1 (единица) пренос към старшијът разрјад (едно на ум).
- Тази единица, којато е пренос от младшијът разрјад, ја̨ добавјаме към следващијът разрјад. В него има пак 1. Става 10, тоест 0 (нула) и 1 (единица) пренос към старшијът разрјад (пак едно на ум).
- .. И така нататък. На все̋ка позиција се получава 0 (нула) и 1 (единица) пренос.
- .. Както по-горе при radix 10, така и сега при radix 2.
- Към старшијът наличен разрјад добавјаме единицата, којато е пренос от предишнијът разрјад. Получава се пак 0 (нула) и единица пренос, којто не̋ма вече какво да го правим.
- Резултатът е 0 (00000000).
- Тази сметка бе направена в пръстенът Z256.
- Да се запитаме: щом в този пръстен 11111111+1 = 0, нима елементът 11111111 не е -1.
- Да, така е. В пръстенът Z256
- 11111111 (десетично 255) е идентично с -1. Както и -1 е идентично с 11111111.
- 11111110 (десетично 254) е идентично с -10 (десетично -2).
- 11111100 (десетично 252) е идентично с -100 (десетично -4).
- 11111000 (десетично 248) е идентично с -1000 (десетично -8).
- 11110000 (десетично 240) е идентично с -10000 (десетично -16).
- 11100000 (десетично 224) е идентично с -10000 (десетично -32).
- 11000000 (десетично 192) е идентично с -1000000 (десетично -64).
- 10000000 (десетично 128) е идентично с -10000000 (десетично -128).
- Разбира се, нулата 00000000 е идентична с -0 (минус нула), както във всеки пръстен.
- А щом десетичното 255 (двочно 11111111) е идентично с -1, като умножин това равенство с -1, дали е ве̋рно, че в този пръстен 1 (единицата, 00000001) е идентична с -255 (десетично)?
- Да, разбира се.
- И тъј, набеле̋зани сѫ три възможни интерпретации на елементите (на числата) от пръстенът Z256.
- Имајте пред вид реалнијът общ случај: пръстенът е Z2**32 или Z2**64.
- Аритметичните дејствија събиране, извађане, умножение и деление сѫ дефинирани в пръстенът независимо от интерпретацијата на елементите му.
- Забележка. При делението делителјът не бива да е нула, а резултатите сѫ два: остатък и частно.
- Трите интерпретации сѫ следните:
- Адресна интерпретација. В езиците С&C++ се означава unsigned int или само unsigned.
- Числата сѫ наредени по височина от нај-ниското (нулата, 00000000) до нај-високото (11111111, десетично 255).
- Елементите 01111111 (десетично 127) и 10000000 (десетично 128) сѫ просто два сѫседни адреса.
- Интерпретација със знак. В езиците С&C++ може да се ползва се означава signed int или само int (integer).
- Нулата 00000000 е в разположена в среда̀та међу положителните и отрицателните числа.
- Елементите от 00000001 (десетично 1) до 01111111 (десетично 127), 127 на број, както сѫ си наредени по височина, се интерпретират като положителни числа от 1 до 127.
- Елементите от 11111111 (десетично 255) до 10000000 (десетично 128), 128 на број, се интерпретират като отрицателни числа от -1 до -128.
- Третата възможна интерпретација не се ползва.
- Всички числа освен нулата - 255 на број - се интерпретират като отрицателни:
- от 11111111 (-1) до 00000001 (минус 255 десетично).
- Адресна интерпретација. В езиците С&C++ се означава unsigned int или само unsigned.
- Каква е интерпретацијата - дали е адресна (беззнакова, unsigned) или е знакова, има значение в три момента:
- Първо. Как да се показват елементите на пръстенът в човешки вид.
- Второ. Как да се интерпретират сравненијата међу елементите на пръстенът.
- При знакова интерпретација 11111111 е -1 и е по-малко от нулата 0.
- При адресна интерпретација 11111111 е 255 десетично и е по-голе̋мо от нулата 0.
- На ниско ниво има различни операции за сравнение: едната се ползва при адресна интерпретација (кое е по-високо и кое е по-ниско), а другата се ползва при знакова интерпретација (кое е по-голе̋мо и кое е по-малко).
- В езиците от високо ниво (например С&C++) сравненијата се означават еднакво, но за все̋ко число тре̋бва да се знае в какъв вид сравненија участва (unsigned или signed).
- Трето. Кога да се маркира особена ситуација.
- При знакова интерпретација, ако към 01111111 (127 десетично) добавим единица, ще се получи препълване (integer overflow), тъј като резултатът минава в диапазонът на отрицателните числа.
- Сѫщата операција над сѫщите елементи на пръстенът, но при адресна интерпретација, не бива да се маркира като особена ситуација.
- При адресна интерпретација особени ситуации възникват в други случаи.
- Например, особена ситуација от такъв тип е stack overflow.
- (.. скриј го цикличното броене в компјутрите ..) (.. скриј го второто отклонение ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- Ако числата се представјат в radix 10 (десетична позиционна бројна система, r = 10)
и се ограничим до осем разрјада (осем цифри, n = 8), ще можем да получим сме̋тане
в пръстенът на остатъците по модул 100000000. Сто милиона - десет на осма -
r на степен n -
това е мощността на пръстенът, толкова елемента тој съдържа.
- ◄► (.. скриј го отклонението за цикличното броене ..) (.. свиј го ..) (.. разгъни го ..) (.. скриј ја̨ втората беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ◄► (.. скриј ја̨ втората беседа ..) (.. свиј ја̨ ..) (.. посвиј или поразгъни ..) (.. разгъни ја̨ ..) .. към началото ..
►► 4. Бродерија на тракащ принтер (.. покажи ја̨ третата беседа ..) (.. разгъна̨то ..) .. към началото ..
- Аз като студент по бакалавърска програма в математическијът факултет.
- По спомени от ле̋тото на 1977 - на стаж в Търново. ::2023-06-13 18:09::
▼▼ 4. Спомени от ле̋тото на 1977: Бродерија на тракащ принтер (.. скриј ја̨ третата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
::2023-06-13 18:09::- ►► Аз като студент по бакалавърска програма в математическијът факултет (.. покажи ..) (.. разгъна̨то ..) (.. скриј ја̨ третата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
-
▼▼
Аз като студент по бакалавърска програма в математическијът факултет
(.. скриј ..)
(.. свиј ..)
(.. разгъни ..)
- ►► Реформите на Благовест Сендов в математическијът факултет на софијскијът университет (.. покажи ги ..)
-
▼▼
Когато бе̋х студент, Благовест Сендов беше ректор на университетът.
(.. скриј ..)
- Но преди това е бил декан на математическијът факултет. И като такъв е направил следните реформи или поне е съдејствал за те̋х:
- По примерът на цивилизованијът све̋т висшето образование по математика в софијскијът университет е стана̨ло двустепенно:
бакалавърска и магистърска степен.
- Конспиративното име на бакалавърската степен беше "блок_А", а на магистърската степен - "блок_B".
- Имаше и "блок_C" - аспирантура. Завършваше се с кандидатска степен. Сега това се приравнјава на докторска степен.
- Не познавам никого, којто да си е остана̨л само с "блок_А" и бакалавърска степен. Но веројатно е имало такива. Те получаваха̨ диплома за висше образование по математика. И можеха̨ да работја̨т като компјутърни програмисти в изчислителните центрове.
- Почти всички колеги, които завършваха̨ бакалавърска степен по математика с конспиративно име "блок_А", продължаваха̨ образованието си или в "блок_B" за магистърска степен, или в "блок_D", където получаваха̨ педагогическа квалификација за учители по математика.
- Аз съм завършил и с двете квалификации - магистър по математика и учител по математика.
- Но през це̋лата си професионална кариера съм работил само като компјутърен програмист и софту̌ерен инженер.
- Англијскијът език - задължителен за бакалаврите по математика.
- Средното образование вклјучваше и обучение по западен език - френски, немски или англијски, но зрелостниците не го усвојавахме този език.
- Естествено беше обучението по западен език да продължи и във висшето учебно заведение.
- Във факултетът по математика на софијскијът университет задължителен беше англијскијът език.
- През семестрите не учехме нито англијски, нито друг западен език.
- За нас се организираха̨ интензивни летни курсове: през ле̋тото след първи курс (1975) и през ле̋тото след втори курс (1976).
- Интензивни курсове - всеки ден по шест часа англијски.
- Имаше отделни групи за начинаещи като мене и за напредна̨ли (които сѫ учили англијски като средношколци).
- Аз си остана̨х с гимназиалното ниво по френски език и тре̋бваше да започна̨ да уча̨ англијски език.
- За мене това беше добър късмет.
- Отклонение за рускијът език. Разчиташе се, че от 5-ти до 9-ти клас учащите се сѫ го усвоили рускијът език. Винѫги ни се е налагало да ползваме учебна литература на руски език и не сме имали проблеми нито аз, нито колегите. Не може це̋лата специализирана литература да се превеђа и издава на български. Крај на отклонението за рускијът език.
- Интеграција на Факултетът по математика към Софијскијът университет и на
Институтът по математика към БАН във Единен център по математика.
- Не мога̨ да формулирам какво значение имаше това за мене. Но за не̋кои мои колеги това беше важно.
- Сега в Българија всички уча̨т англијски от детската градина, във висшето образование сѫ отделени магистърска и бакалавърска степен не само в математиката.
- Но интеграцијата међу софијскијът университет и БАН едва ли е устое̋ла на времето.
- (.. скриј ги реформите на Благовест Сендов ..) (.. скриј ги спомените ми от 1975..76..77 ..) (.. свиј ги ..) (.. разгъни ги ..) .. към началото ..
- ►► Не съм ходил на летни студентски бригади. (.. покажи ..)
-
▼▼
Не съм ходил на летни студентски бригади.
(.. скриј ..)
- Есенните студентски бригади не сѫ ми се размина̨ли.
- Јамболската консервена фабрика.
- Разни села из Северозападна Българија.
- Но на летни студентски бригади не съм ходил.
- След първи и втори курс студентите от математическијът факултет на софијскијът университет посещавахме интензивни курсове по англијски и бе̋хме освободени от летни бригади.
- След трети курс през ле̋тото тре̋бваше да изкараме не̋какъв стаж.
- Веројатно така е било и в другите факултети и вузове - стаж вместо бригада след трети курс.
- Като ученик в търновската гимназија съм ходил и на летни, и на есенни бригади.
- Помнја̨, че когато се уби Гунди, бе̋х на бригада в еленскијът балкан за бране на малини.
- Помнја̨ и една есенна бригада в Ресен, в предпријатието за производство на семена.
- Дините там ги пускаха̨ в една машина да ги мачка и да отделја семките.
- Јаде̋хме дини на корем, но семките тре̋бваше да ги плјуем и да ги предаваме.
- А бе сега кој ја̨ прибира селско-стопанската реколта?
- Пълно е с малини на пазарът. Кој се боде и ги бере тези малини?
- (.. скриј защо не съм ходил на летни бригади ..) (.. скриј ги спомените ми от 1975..76..77 ..) (.. свиј ги ..) (.. разгъни ги ..) .. към началото ..
- Есенните студентски бригади не сѫ ми се размина̨ли.
- ►► Подготовката ми за бѫдещата ми трудова дејност. (.. покажи ..)
-
▼▼
Подготовката ми за бѫдещата ми трудова дејност.
(.. скриј ..)
- Дипломирал съм магистър по математика със специалност "реален и функционалем анализ" и с допълнителна квалификација за учител по математика.
- Но през це̋лата си професионална кариера съм работил само като компјутърен програмист и софту̌ерен инженер.
- Не тре̋бва да си мислите, че двугодишното ми обучение по магистърската програма е било за мене безполезно.
- Напротив.
- Бих препорѫчал на всички, които имат тази възможност, да не остават с бакалавърска степен, а да си изкарат и диплома за магистър.
- Първо. Дипломата за магистърска степен е ценна. С неја̨ университетът уверјава бѫдещите Ви работодатели, че Вие имате уменијата да оглавите проект.
- Веројатно, това е ве̋рно не само в областта на математиката и в компјутърната индустрија, а и в други области.
- Думата "магистър" може да се преведе като "мајстор".
- Второ. Обучение по магистърската програма на мене ми ја̨ разшири общата култура.
- А за работата в компјутърнара индустрија така и така е нужно постојанно човек да се учи на нови неща.
- Защото това е нова бързо развиваща се област.
- Лично аз се бе̋х задѫлбочил в математическата логика и основите на математиката.
- Трето. Маловажно, но конкретно. Започна̨х работа на 1979-10-01 с начална заплата 120 лева.
- Ако си бе̋х остана̨л с бакалавърска степен, стартовата ми заплата щеше да е 105 лева.
- Но наистина, повечето от техническите уменија, които ми бе̋ха̨ нужни, за да започна̨ работа в компјутърната индустрија,
ги бе̋х усвоил през обучението ми по бакалавърската програма.
- На първо ме̋сто, фундаментални курсове по алгебра, вклјучително линејна алгебра.
- На второ ме̋сто, фундаментални курсове по ACM.
- Първа и втора част съответно в първи и втори курс.
- Съкращението ACM имаше две разшифровки:
- На български: Автоматични Сметачни Машини.
- На англијски: Automatical Computing Machines.
- И на трето ме̋сто, курсове по числени методи и по изследване на операциите (оптимиране).
- И всичко това с практически упражненија.
- Наред с фундаменталните въпроси, в курсът по ACM се усвојаваха̨ и следните технически уменија:
- JCL (Job Control Language) за DOS/360.
- Езиците от този тип сега сѫ много по-развити и се наричат shell scripts.
- Езикът за програмиране PL/1.
- Тој стана̨ "роднијът ми език за програмиране".
- През първите години на професионалната си кариера работех на него.
- На вторијът национален конкурс по програмиране през 1986, където спечелих голе̋мата награда, се състезавах на PL/1.
- Езикът за програмиране Fortran.
- Като студент го бе̋х усвоил добре.
- Повечето практически упражненија ги правехме на Fortran.
- В професионалната си кариера обаче не съм ползвал Fortran.
- JCL (Job Control Language) за DOS/360.
- Отклонение. АСМ или ЕИМ?
- На професионален жаргон думата компјутри никога не е била смесвана с думата калкулатори.
- На професионален жаргон винѫги се е употребјавала и думата машини, но само със значението компјутри.
- И трите тези думи калкулатори, компјутри и машини сѫ се употребјавали, откакто се помнја̨.
- Абревиатурите (съкращенијата) АСМ и ЕИМ сѫ елементи на канцеларскијът езиков стил и не се употребјаваха̨ в устната реч.
- АСМ: Автоматични Сметачни Машини.
- ACM: Automatical Computing Machines.
- ЕИМ: Електронни Изчислителни Машини.
- ЭВМ: Электронные Вычислительные Машины.
- Абревиатурата АСМ по-точно изразјава сѫщността на компјутрите като автоматични машини, за разлика от калкулаторите.
- Но навсе̋къде извън факултетът по математика грађанственост доби съкращението ЕИМ, което точно съответстваше на руското ЭВМ.
- Макар че абревиатурите ЕИМ (ЭВМ) сѫ неточни, понеже електронните калкулатори сѫ сѫщо така електронни изчислителни машини, но не сѫ компјутри.
- Отклонение в отклонението.
- Машината, којато Џон Атанасов, професор по физика в университетът в Ајова, е започна̨л да конструира, е била замислена като електронна изчислителна машина, но не като програмируем компјутър.
- Автоматичната сметачна машина, којато немецът Конрад Цузе е конструирал, не е била електронна, но е била истински програмируем компјутър.
- Крај на отклоненијата.
- (.. скриј ја̨ подготовката ми като студент по бакалавърската програма ..) (.. скриј ги спомените ми от 1975..76..77 ..) (.. свиј ги ..) (.. разгъни ги ..) .. към началото ..
- ◄► (.. скриј ги спомените ми от 1975..76..77 ..) (.. свиј ги ..) (.. разгъни ги ..) (.. скриј ја̨ третата беседа по спомените ми от 1977 ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ►► На стаж в Търново (.. покажи ..) (.. скриј ја̨ третата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
-
▼▼ На стаж в Търново
(.. скриј ..)
- Като студенти по бакалавърска програма след трети курс тре̋бваше да изкараме не̋какъв производствен стаж.
- Аз и още един колега карахме стажът си в търновскијът териториален изчислителен център.
- Ле̋тото на 1977.
- Колегите от териториалнијът изчислителен център бе̋ха̨ така добри да ни разрешават да гледаме и да пипаме, без да ни дават задачи.
- Никак не ни ограничаваха̨, но и никак не разчитаха̨ на нас при развојните си и производствените си задачи.
- Териториалнијът изчислителен център беше оборудван с машина ЕС ЭВМ, младши модел, българско или съветско производство.
- По онова време не ме интересуваха̨ по-точни технически данни и не̋ма как да помнја̨.
- (.. скриј ги спомените ми за стажът в Търново ..) (.. скриј ја̨ третата беседа по спомените ми от 1977 ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ►► Бродерија на тракащ принтер (.. покажи ..) (.. разгъна̨то ..) (.. скриј ја̨ третата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
-
▼▼ Бродерија на тракащ принтер
(.. скриј ..)
(.. свиј ..)
(.. разгъни ..)
- ►► Като си не̋мах друга работа, реших да избродирам картинка на принтер.. (.. покажи ..)
-
▼▼
През ле̋тото на 1977,
(.. скриј ..)
- докато бе̋х на стаж в търновскијът териториален изчислителен център,
- като си не̋мах друга работа,
реших да избродирам картинка на принтер.
- По онова време се разпространјаваха̨ подобни бродерии.
По-известните бе̋ха̨:- "Изплезил ми се е Ајнщајн"
- "Мајмуна в дѫлбок размисъл се почесва зад ухото"
- Календар за текущата година
- Хората си ги разпечатваха̨ и си ги лепе̋ха̨ по стените.
- Веројатно и в търновскијът териториален изчислителен център е имало такива.
- Използваше се достѫпната печатна база с цел забавление.
- Такива избродирани за тракащ принтер картинки тре̋бваше да се гледат отдалече.
- Избрах си да избродирам следната подходјаща grayscale картинка:
- Бе̋х ја̨ намерил в Търново в не̋какво списание.
- (.. скриј го решението ми да бродирам на принтер ..) (.. скриј ја̨ бродеријата на принтер ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ►► Принтери: тракащи, стържещи, рѫмжащи.. (.. покажи ..)
-
▼▼
Принтери: тракащи, стържещи, рѫмжащи..
(.. скриј ..)
- Съвременните принтери сѫ лазерни.
- Те произвеђат це̋ла страница наведнѫж.
- При работа рѫмжа̨т приглушено или съвсем тихо.
- Лазерните принтери заместват не̋когашните плотери при производството на чертежи.
- Севременните цветни лазерни принтери мога̨т да произвеђат картинки с фотографско качество.
- Да бродирам картинка на принтер се налагаше, само защото тогава - през 70-те, не̋маше лазерни принтери.
- Друг вид принтери сѫ иглените.
- При те̋х пишеща глава се движи по хартијата и с удари от иглички отпечатва знаците.
- При движение на иглената глава по хартијата се чува стържене.
- Миниатјурните иглички в печатащата глава мога̨т да изрисуват практически все̋ка буква и всеки јероглиф.
- Но картинка, произведена с такъв принтер, не̋ма да има фотографско качество - тја винѫги ще изглеђа като бродерија.
- Сега стържещи принтерчета в миниатјурни размери се използват за печат на разни разписки и касови бележки.
- Стигна̨хме и до линејните принтери (line printers), дето тракат.
- Вече не̋ма такива - изместени сѫ от тихо рѫмжащите лазерни принтери, които превъзхођат линејните тракащи принтери и по бързина, и по качество.
- През 70-те и 80-те, повечето компјутри у нас бе̋ха̨ оборудвани с линејни принтери полско производство.
- Такъв имаше и в търновскијът териториален изчислителен център, където през ле̋тото на 1977 карах стаж.
- Барабанът на тракащ линеен принтер удрја хартијата и с един удар отпечатва це̋л ред.
- Но преди да удари, на все̋ка позиција се установјава релефната фигурка на съответната буква или цифра.
- С помощта на електрониката и фината механика.
- Такива релефни фигурки имаше по върховете на лостчетата на старите пишещи машини (typewriters), като при те̋х тези лостчета се задвижваха̨ с клавиши.
- Доколкото си спомнјам, линејните принтери имаха̨ по 132 знака на ред.
- Може да е имало и по-широки принтери.
- Имаше специална хартија за линејни принтери.
- Произвеђаше се с не̋колко стандартни ширини.
- Обикновено една страница от такава хартија събираше 66 реда, отпечатани на линеен принтер.
- Принтерът можеше да се програмира да удрја на един и сѫщ ред повече от веднѫж, отпечатвајки различни текстове.
- Например, с втори и трети удар не̋која дума можеше да се удебели (bold face).
- Но много удари на едно ме̋сто можеха̨ да скѫсат хартијата.
- Докато един стържещ иглен принтер би могъл да се настрои така, че игличките му да мога̨т да отпечатват огромно множество знаци (фирмени емблеми, китајски јероглифи), за линејните принтери това беше невъзможно.
- Един линеен принтер разполагаше с ограничен набор от знаци - около 90, тоест по около 90 релефни фигурки за буква или цифра на все̋ка от 132-те позиции на един ред.
- Латинското A и кирилското А се отпечатваха̨ с една и сѫща фигурка, разбира се.
- Да не говорим, че те и се кодираха еднакво в ДКОИ/EBCDIC.
- (.. скриј ги видовете принтери ..) (.. скриј ја̨ бродеријата на принтер ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- Съвременните принтери сѫ лазерни.
- ►► Перфокарти втора употреба (.. покажи ..)
-
▼▼
Перфокарти втора употреба - такива използвах..
(.. скриј ..)
- По времето, когато бе̋х на стаж в търновскијът териториален изчислителен център - става дума за 1977,
не̋маше друг начин да се вкара нещо в компјутърът освен от перфокарти.
- Става дума за компјутър ЕС ЭВМ, аналог на младши модел на IBM/360.
- Тъј че както програмата ми, којато да накара тракащијът принтер да бродира, така и данните за самата бродерија
тре̋бваше да се въведа̨т в компјутърът от перфокарти, след като програмата и данните се надупча̨т на перфокарти.
- Фирмата IBM е имала развита технологија с перфокарти - некомпјутърна технологија - още от крајът на 19-ти век.
- Холеритова техника се е наричала. У нас не е бивала внедрјавана.
- Аз работех с перфокарти в началото на трудовата си дејност.
- Бе̋х свикна̨л и да ги разчитам.
- Спомнјам си, че поне̋кога казвах: перфокарти мога̨ да чета̨, но магнитни ленти - не.
- От днешна гледна точка, тогавашната практика - и с перфокартите, и с принтерите - беше неоправдано прахосване на хартија.
- Обаче не̋маше друг начин да се вкара нещо в компјутърът освен от перфокарти.
- Не можеше просто от клавиатурата.
- Не̋маше и начин компјутърът да покаже нещо на човек, освен изле̋зло на принтерът.
- Онези компјутри не̋маха̨ достѫп до екрани.
- Реших да не натоварвам допълнително колегите от търновскијът териториален изчислителен център с преразход на ресурси.
A перфокартите бе̋ха̨ производствен ресурс.- Реших за целите на бродеријата да използвам перфокарти втора употреба.
- Не съм виђал не̋кој друг не̋кога да е ползвал перфокарти втора употреба.
- Както JCL/360 (the job control language, тогавашнијът shell),
така и езиците за програмиране (COBOL, Fortran, PL/1)
често изискваха кѫси редове от програмата,
и следователно - перфокарти с малко перфориран текст.- Например, це̋ла перфокарта беше нужна за означаване на "крај на данни" (end-of-data), којато имаше перфорација "/*" само в първите две позиции.
- Перфокартата имаше 80 позиции.
- Прерових хартиените отпадъци и намерих в достатъчно количество перфокарти с перфорација само в първите 20 позиции.
- Използвах ги, за да перфорирам на те̋х данните от бродеријата.
- Използвах средните 50 позиции на все̋ка перфокарта.
- Последните позиции на перфокартата не бе̋ха̨ надеђни:
четецът на перфокарти (reader-ът) често се запъваше на последните позиции,
може би перфорационните машини не правеха̨ добри дупки в крајът на перфокартата.
- wikipedia: Computer programming in the punched card era
- (.. скриј ги перфокартите ..) (.. скриј ја̨ бродеријата на принтер ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- По времето, когато бе̋х на стаж в търновскијът териториален изчислителен център - става дума за 1977,
не̋маше друг начин да се вкара нещо в компјутърът освен от перфокарти.
- ►► Пиксели на тракащ принтер (.. покажи ..)
-
▼▼
Пиксели на тракащ принтер
(.. скриј ..)
- В съвременни термини, форматът на бродеријата не̋ма как да е бил друг освен bitmap.
- Тази картинка тука е 129 пиксела на ширина и 185 пиксела на височина.
Това дава представа за съотношението.
Картинката, којато аз избродирах за тракащ принтер,
беше около 100 пиксела на ширина и около 144 на височина. - Тъј като една страница на тракащ принтер беше 66 реда,
две страници - 132 пиксела на височина, то
избродираната картинка захапваше трета страница. - Остатъкът от третата страница го запълних с календар.
- Картинката е greyscale. Затова ја̨ избрах - защото не беше цветна.
- Дълбочината ѝ (depth) сега е трудно да ја̨ определја̨.
- Тја беше повече от два бита.
- Принтерът удрјаше два пѫти на един ред,
- като при всеки удар във всеки пиксел
- можеше да има не̋кој от знаците "*.Ж/\#", а може би и други.
- Самото бродиране беше пипкава работа - само за мене.
- Доосъвършенстването на картинката беше още по-пипкава работа.
- То вече беше част от дебъгването на програмата.
- Не̋ма да Ви занимавам повече с пипкави работи.
- (.. скриј ги пикселите ..) (.. скриј ја̨ бродеријата на принтер ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ◄► (.. скриј ја̨ бродеријата на принтер ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) (.. скриј ја̨ третата беседа по спомените ми от 1977 ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ►► Програмата или по-точно програмите, а бе софту̌ерът (.. покажи ..) (.. разгъна̨то ..) (.. скриј ја̨ третата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
-
▼▼ Програмата или по-точно програмите, а бе софту̌ерът
(.. скриј ..)
(.. свиј ..)
(.. разгъни ..)
- ►► Опции за дистрибуција - как програмата се разпространјаваше (.. покажи ги ..)
-
▼▼
Опции за дистрибуција - как програмата се разпространјаваше
(.. скриј ги ..)
- Задачата, с којато се бе̋х заел по време на стажът ми в търновскијът териториален изчислителен център през ле̋тото на 1977, беше развојна задача, задача за производство на софту̌ер, it was a software development task.
- По замисъл средствата за пренос и обмен на данни и софту̌ер при компјутрите ЕС ЭВМ бе̋ха̨ перфокартите и магнитните ленти.
- Обаче в практиката перфокартите се използваха̨ само за първичен вход на данни и програми.
- Оборудването, нужно за използването на перфокартите при пренос и обмен на данни и софту̌ер, макар и налично, беше занемарено и не функционираше.
- Не съм го виђал да работи нито в Търново, нито в Софија.
- Разбира се, тестето перфокарти, изготвено в Търново за първичен вход, можех да си го взема̨ в Софија, но не можех да дам копие на другиго.
- Остават магнитните ленти като единствен носител за пренос и обмен на данни и софту̌ер в онези условија.
- Обаче в практиката перфокартите се използваха̨ само за първичен вход на данни и програми.
- Какво да се запише на магнитна лента с цел дистрибуција (разпространение) на софту̌ернијът продукт?
- Сѫществуват три опции:
- картинката във вид подходјащ за принтер,
- програмата като обектен модул, или
- програмата в изходен код на PL/1.
- Kартинката във вид подходјащ за принтер.
- Съвременнијът аналог е фајл за картинка във формат bitmap (.bmp).
- Тогава подобен фајл би се получил, ако
програмата, којато отпечатва бродираната картинка на тракащ принтер,
или "генерираната програма", както ще бѫде наречена тја по-долу,
се пусне, след като изходът ѝ се пренасочи
от принтерът към магнитен носител. - Магнитна лента, съдържаща такъв фајл, можеше да се занесе в друг изчислителен център с машина ЕС ЭВМ и тракащ принтер към неја̨ и там да се разпечата, примерно с програмата DITTO.
- Доколкото в картинката беше вклјучен и календар, този начин на разпространение не покриваше це̋лата функционалност.
- Нова дистрибуција би била нужна за все̋ка нова година.
- Програмата като обектен модул.
- Това беше "легитимнијът вариант" за дистрибуција, ако не искате да разпространјавате изходнијът код на програмата.
- Програмата, којато отпечатва бродираната картинка на тракащ принтер,
или "генерираната програма", както ще бѫде наречена тја по-долу,
е програма на езикът за програмиране PL/1. - Компилаторът от PL/1 обработва тази програма и резултатът от работата му е машинен код във формат обектен модул за DOS/360.
- Този обектен модул може да се запише на магнитма лента и да се занесе в друг изчислителен център с машина ЕС ЭВМ и тракащ принтер към неја̨.
- Там този обектен модул се подава на програмата LNKEDT (Linkage Editor),
и LNKEDT произвеђа готовата за изпълнение програма,
којато ще отпечата картинката, като се пусне. - Готовата за изпълнение програма, преди да отпечата картинката, тре̋бва да прочете от входът си годината за календарът.
- Забележете, че на местото, където програмата е получена чрез дистрибуција по този вариант, не е задължително да има инсталиран компилатор от езикът PL/1.
- Програмата в изходен код на PL/1
- Програмата, којато отпечатва бродираната картинка на тракащ принтер,
или "генерираната програма", както ще бѫде наречена тја по-долу,
е програма на езикът за програмиране PL/1. - Тја е получена като резултат - като изход - от изпълнението на
"генериращата програма", за којато ще стане дума по-долу. - Преди да се пусне "генериращата програма" изходът ѝ тре̋бва да се пренасочи към магнитен носител (понеже устројствата за punch на перфокарти никъде не функционираха̨).
- Ако този носител е магнитна лента, то тја може да се отнесе в друг изчислителен център с машина ЕС ЭВМ с тракащ принтер и с компилатор от PL/1.
- Програмата, којато отпечатва бродираната картинка на тракащ принтер,
- (.. скриј ги опциите за дистрибуција ..) (.. скриј го софту̌ерът за бродеријата ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ►► Частите на програмата (.. покажи ги ..)
-
▼▼
Частите на програмата
(.. скриј ги ..)
- Задачата, с којато се бе̋х заел по време на стажът ми в търновскијът териториален изчислителен център през ле̋тото на 1977, беше развојна задача, задача за производство на софту̌ер, it was a software development task.
- Дејностите по тази задача бе̋ха̨ от два типа: бродиране и програмиране.
- И в двата случаја резултатите сѫ тестета перфокарти.
- Пет тестета, все̋ко в един екземплјар.
- Калѐ-тестѐ: тесте перфокарти с програмата за календарът.
- Тази програма извеђа календар за зададена година.
- Обикновен календар по месеци и дни в седмицата.
- Тука не̋ма да се спирам на неја̨.
- Подготвјам друга публикација по календарните въпроси.
- Това тесте тре̋бва да стане част от "генерираната програма".
- Пѝксел-тестѐ: съдържа самата "бродерија" на картинката.
- Нај-голе̋мото тесте.
- За него изполвах перфокарти втора употреба,
- само средните им позиции.
- То тре̋бва да влезе в "генерираната програма" във фо̀рмата на текстови литерали (константи).
- Прѝнтер-тестѐ: тесте перфокарти с печатащата програма.
- Тја тре̋бва първо да изведе на принтерът картинката, след което да пусне и подпрограмата за календарът.
- Това е началната част на "генерираната програма", преди текстовите литерали (пѝксел-тестѐто) и преди програмата за календарът.
- Ра̀птор-тестѐ: Генера̀[п]торът, "генериращата програма".
- Това е първата програма, којато тре̋бва да се компилира и да се изпълни.
- Преди да се пусне тја за изпълнение, изходът ѝ тре̋бва да се пренасочи към магнитен носител,
- зашото на изходът ѝ ще се получи "генерираната програма",
којато от своја страна- или веднага ще се компилира и ще се изпълни, за да разпечата картинката и календарът,
- или веднага ще се компилира, като полученијът обектен модул се използва за дистрибуција,
- или пък самата "генерираната програма" ще се използва за дистрибуција.
- "Генериращата програма" (генераторът), като се пусне,
- първо изчита прѝнтер-тестѐто и го извеђа на изходът си,
- после чете средните позиции на пѝксел-тестѐто и преобразува прочетените данни в програмни литерали, които праща към изходът си като част от "генерираната програма",
- и накраја̌ изчита калѐ-тестѐто и го извеђа на изходът си.
- На изходът на генераторът се получава "генерираната програма" на езикът PL/1.
- Виртуално тестѐ JCL: Това не е тесте, а набор от перфокарти.
- Тези перфокарти съдържат команди на езикът JCL.
- Разполагат се правилно около и међу горните четири тестета.
- С такава перфокарта:
- Mоже да се пусне компилаторът от PL/1.
- Току-що компилираната опрограма може да се свърже (via LNKEDT) и да се пусне.
- Може входът и изходът на програма, преди пускането ѝ, да се пренасоча̨т.
- Може да се означи крајът на тесте перфокарти,
- Може да се означи крајът на заданието към компјутърът.
- Благодарја̨ на компјутър не се казва.
- Калѐ-тестѐ: тесте перфокарти с програмата за календарът.
- (.. скриј ги частите на програмата ..) (.. скриј го софту̌ерът за бродеријата ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ◄► (.. скриј го софту̌ерът за бродеријата ..) (.. свиј го ..) (.. разгъни го ..) (.. скриј ја̨ третата беседа по спомените ми от 1977 ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ◄► (.. скриј ја̨ третата беседа за бродеријата на принтер по спомените ми от 1977 ..) (.. свиј ја̨ ..) (.. посвиј или поразгъни ..) (.. разгъни ја̨ съвсем ..) .. към началото ..
►► 5. ЕГН-то отвѫтре (.. покажи ја̨ четвъртата беседа ..) (.. разгъна̨то ..) .. към началото ..
- Ако Ви интересува как е съставено ЕГН-то и в частност как се пресме̋та контролната цифра. ::2021-10-30 11:13::
▼▼ 5. ЕГН-то отвѫтре (.. скриј ја̨ четвъртата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
::2021-10-30 11:13::- ►► ЕГН-то отвън (.. покажи ..)
-
▼▼ ЕГН-то отвън
(.. скриј го предговорът на четвъртата беседа ..)
- Когато през годините 1993..98 работех в Банксервиз, знаех алгоритъмът за определјане на контролната цифра на ЕГН-то. Моја беше програмата, којато ја̨ проверјаваше. Сѫщијът алгоритъм се използваше и за контролната цифра на още два тогавашни банкови идентификатора.
- Сега на стари години целта ми е да си припомнја̨ този алгоритъм.
- Отклонение: Единнијът грађански номер (ЕГН) е въведен през 1977.
- Знаете ли как изглеђаше точната идентификација на човекът-поданик преди 1977?
- Ето така изглеђаше:
- Жител на еди-кој си окрѫг и на еди-која си община.
- [Жител на еди-кое си населено ме̋сто.]
- Забележете: жител, не просто живущ или пребиваващ.
- Име, презиме, фамилија.
- Дата на рађане.
- Том и страница - отбеле̋звани в тогавашните паспорти.
- ЕГН-то бе въведено заради компјутърните технологии.
- В САЩ ролјата на ЕГН-то изпълнјава SSN (Social Securuty Number) - номерът за социално осигурјаване.
- Има правило от теоријата за базите данни, че
- в идентификаторите на обектите не бива да се кодират други характеристики на тези обекти.
- ЕГН-то не спазва това правило.
- В него сѫ кодирани: датата на рађане, полът - мѫжки или женски, и - едва сега научавам това - окрѫгът.
- Google ме насочи към програма с автор Георги Чорбаџијски.
- Ето го изходнијът код на тази програма.
- Ето ја̨ в дејствие.
- Програмата на Георги Чорбаџијски е написана на php, което означава, че тја се изпълнјава на web-сървър.
- Аз си не̋мам ме̋сто на web-сървър, настојащијът мој текст е на blogspot.com, но това е само склад за текстове и картинки. Не̋мам право да пиша̨ програми, които да се изпълнјават на blogspot.com.
- Имам право обаче вѫтре в настојащијът текст да вмъкна̨ програма, којато да се изпълни на Вашето устројство, на Вашијът лаптоп или на Вашијът смартфон.
- Такава програма тре̋бва да бѫде написана на JavaScript.
- Интерпретатор на JavaScript е вграден във всеки съвременен browser, и на Вашето устројство със сигурност има browser, чрез којто Вие ровите в мрежата internet.
- И тъј, занимавката ми е да препиша̨ от php на JavaScript тази част от програмата на Георги Чорбаџијски, којато прави анализ на ЕГН-то.
- Програмата на Георги Чорбаџијски има и друга част - генерација на ЕГН-та, тја сѫщо би могла да се препише от php на JavaScript, но ще си спестја̨ тази тривиалност.
- .. скриј го ЕГН-то отвън .. (.. скриј ја̨ беседата за ЕГН-то отвѫтре ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ►► Изходен код на програмата за изчислјаване на контролната цифра (.. покажи ..)
-
▼▼ Изчислјаването на контролната цифра в source на JavaScript
(.. скриј ..)
- Изчислјаването на контролната цифра по модул 11.
Приема низ от цифри. Връща цифра или празно при невалидни данни.function mod11check(digits) // изчислява контролна цифра по модул 11 { const digitWeights = [2,4,8,5,10,9,7,3,6]; if( digits.match(/^[0-9]+$/) != null ) { let d = digits.split(""); let s = 0; let i = 0; for(let j = 0; j < d.length; j++) { s += d[j] * digitWeights[i]; i++; i %= digitWeights.length; } s %= 11; if (s == 10) { s = 0; } return s; } else { return ""; // грѣшни входни данни: приемат се само цифри } }
- .. скриј ја̨ функцијата на JavaScript .. (.. скриј ја̨ беседата за ЕГН-то отвѫтре ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- Изчислјаването на контролната цифра по модул 11.
-
►► Програмата за изчислјаване на контролната цифра в дејствие
(.. покажи ..)
-
▼▼ Програмата за изчислјаване на контролната цифра в дејствие
(.. скриј ..)
Въведете не̋колко цифри, например първите девет цифри на ЕГН:
Като натиснете , ще получите контролната цифра. -
►► Анализ на въведено ЕГН
(.. покажи ..)
-
▼▼ Анализ на въведено ЕГН
(.. скриј ..)
Въведете десетте цифри на ЕГН-то:
- ◄► (.. скриј ја̨ четвъртата беседа за ЕГН-то ..) (.. свиј ја̨ ..) (.. посвиј или поразгъни ..) (.. разгъни ја̨ ..) .. към началото ..
►► 6. Дисковата памет на System/360 (.. покажи ја̨ петата беседа ..) (.. разгъна̨то ..) .. към началото ..
- Как развитието на харду̌ерът кара софту̌еристите да забравја̨т старите проблеми и да се захвана̨т с нови.
▼▼ 6. Дисковата памет на System/360 (.. скриј ја̨ петата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ►► Нещо като предговор, нещо като въведение (.. покажи го ..) (.. разгъна̨то ..)
-
▼▼
Нещо като предговор, нещо като въведение
(.. скриј го ..)
(.. свиј го ..)
(.. разгъни го ..)
- ►► Шапка на тојага (.. покажи ..)
-
▼▼
Шапка на тојага. Доживе̋х.
(.. скриј ..)
- През 2018 се пенсионирах, след като придобих изикващите се стаж и възраст за това.
- Пенсионирах се след 40 години работа като компјутърен програмист и софту̌ерен инженер.
- В сѫщност бе̋х много добър кодировчик.
- Много добре съм се разбирал с компјутрите.
- Влизал съм им под тенекиите - при битовете.
- Защото те само от битове разбират.
- С компјутри съм се занимавал от 70-те:
- като ученик в началото на 70-те;
- като студент в среда̀та на 70-те; и
- професионално от крајът на 70-те.
- Едва ли има друга технологична област с толкова много промени.
- Ако кажа̨, че през 70-те или 80-те съм можел да предскажа̨ бѫдещето, ще излъжа̨.
- (.. скриј това, че дочаках пенсија ..) (.. скриј го въведението към петата беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ►► Какво го не̋ма днес при компјутрите. И добре че го не̋ма. (.. покажи ..)
-
▼▼
Какво го не̋ма днес при компјутрите - това ще е тази пета беседа.
(.. скриј ..)
- Не̋ма бездискови компјутри.
- Не̋ма канални програми.
- Не̋ма потребителско форматиране на дисковите писти.
- Не̋ма значение геометријата на дисковете.
- Не̋ма наместване на фајловете върху дискът от потребителјът.
- Не̋ма споделени цилиндри.
- Не̋ма осигурен от харду̌ерът асоциативен достѫп до дискът.
- Не̋ма си представа системнијът софту̌ер за вѫтрешната структура на фајловете.
- Не̋ма магнитни глави отделно от дисковете.
- То и истински дискове не̋ма вече.
- SSD-тата дискове ли сѫ?
- Върша̨т работа като дискове. Минават за дискове.
- (.. скриј какво го не̋ма днес ..) (.. скриј го въведението към петата беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ◄► (.. скриј ја̨ петата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ►► Бездискови компјутри (.. покажи ги ..)
-
▼▼
Бездискови компјутри
(.. скриј ги ..)
- Средношколски спомени.
- Завършил съм гимназија (11-ти клас) през 1972 със специалност "изчислител-кодировчик".
- В 9-ти клас за компјутрите Минск-2 се учехме да кодираме на машинен език.
- Сега това го правја̨т програми, наречени асемблери.
- В дејствителност, учебната програма беше остаре̋ла.
- Тогава вече никој не е пишел компјутърни програми на машинен език.
- Все пак, тези упражненија бе̋ха̨ полезни за мене.
- В гимназијата не бе̋х чувал за дискови устројства.
- Компјутрите Минск-2 и Минск-22 не̋маха̨ дискови устројства.
- Те мај не̋маха̨ никакви магнитни устројства.
- Повече за компјутрите Минск-2 - в първата беседа.
- През 70-те в Българија се појавиха̨ териториални изчислителни центрове.
- В не̋кои имаше компјутри Минск-32, които имаха̨ магнитни ленти, но не и дискове.
- Водиха̨ ни на екскурзија в Софија и ни показаха̨ компјутър FACOM - с магнитни ленти, без дискове.
- Магнитните ленти впечатлјаващо се върте̋ха̨.
- През 80-те колеги от варненско предпријатие ми разказаха̨.
- Имали стар оригинален компјутър IBM/System-360. Но без дискове.
- Знаех, че първите модели на IBM/System-360 не̋мат дискове.
- Работел стабилно и безотказно. Вършел им работа.
- Не искали да го заменјат с нов модел, којто не̋ма как да бѫде друг освен от некачественото производство отсам желе̋зната завеса.
- Докато бе̋х в казармата, съм пропусна̨л две важни събитија:
- оттеглјането на Brigitte Bardot, и
- појавата на компјутърните дискове.
- Като студент и като професионалист не съм работил на бездискови компјутри.
- Разни терминални устројства може вѫтрешно да сѫ приличали на компјутър.
- Обаче устројство, което не предлага програмистки достѫп, за мене не е компјутър.
- Забележка_1. Съвременните смартфони сѫ компјутри. Те имат диск (макар и SSD). Предлагат и програмистки достѫп за този, којто знае как.
- Забележка_2. Нај-разнообразни устројства мога̨т да съдържат вграден (embedded) софту̌ер. Компјутри се използват за създаването му и веројатно за самото вграђане.
- Споменатите компјутри - Минск-2, Минск-32, Facom-230–30 (ЗИТ-151), не̋мат магнитно-дискови устројства.
- Не̋мат енерго-независима външна памет с пре̋к достѫп.
- Били сѫ в експлоатација у нас през 60-те и 70-те.
- Вече не̋ма такива компјутри. Слава Богу!
- (.. скриј ги бездисковите компјутри ..) (.. скриј ја̨ петата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- Средношколски спомени.
- ►► Канали (периферни процесори) и канални програми (.. покажи ги ..)
-
▼▼
Канали (периферни процесори) и канални програми
(.. скриј ги ..)
- Дисковете сѫ дошли у нас със системата IBM/360 (ЕС ЭВМ).
- Забележка_1. В преднијът раздел на тази беседа стана̨ дума, че ..
- сѫ сѫществували младши модели на IBM/360 без дискове.
- Предполагам, че когато сѫ планирали системата ЕС ЭВМ, не сѫ съзнавали голе̋мото значение и изклјучителната важност на дисковете.
- "Социалистическа" Българија извадила късмет.
- Заводът за дискове го построили в Стара Загора.
- И този завод не̋колко последователни години беше монополист в производството на магнитно-дискови устројства в пространството от Бранденбургската врата до Владивосток.
- И реализираше големи печалби като монополист.
- Докато другите страни от СИВ (СЭВ, Comecon) не се усетиха̨.
- Към крајът на 80-те монополът беше загубен.
- Забележка_2. В
първата беседа
стана̨ дума за ..
- компјутърът Витоша, изработен в един екземплјар от български учени и инженери.
- Оперативната му памет (RAMът му) е бил[а] реализиран[а] на магнитен барабан.
- Да, верно е, че магнитнијът барабан (drum) е вид диск
(диск с много глави и само един цилиндър),
но в компјутърът Витоша този барабан (или диск) се е ползвал като оперативна памет, а не като трајна външна памет. - Пък и тогава - през 70-те, бе̋х чувал за фамознијът компјутър Витоша, но представа си не̋мах за строежът му.
- Забележка_1. В преднијът раздел на тази беседа стана̨ дума, че ..
- Сега чиповете "централен процесор" сѫ евтино масово производство
и се влагат в нај-различни изделија.
- Във всеки смартфон има един-два.
- Във всеки автомобил има десетина.
- Тогава обаче централнијът процесор на IBM/System-360 заемаше шкаф.
- Централнијът процесор беше сме̋тан за скѫпа част от оборудването.
- Част, којато тре̋бва да се щади. И да се разтоварва.
- В сѫседство със шкафът на централнијът процесор на IBM/System-360 бе̋ха̨ разположени периферните процесори.
- В "научната" литература те се наричаха̨ "периферни процесори".
- Но в дикументацијата на IBM се наричаха̨ канали (channels).
- Знаехме ги като канали.
- Сигурно е имало различни конфигурации на каналите, но аз съм виђал само една:
- Три канала: 2, 1 и 0.
- Към 2-ри канал се вклјучваха̨ магнитно-лентовите устројства.
- Към 1-ви канал се вклјучваха̨ магнитно-дисковите устројства.
- А нулев канал беше предназначен за бавната периферија: конзола, принтер, четец на перфокарти (reader) и пънч (punch).
- Оборудването за пънчът беше налично и значи заплатено.
- Но работещ пънч не съм виђал.
- Във Варна, където през 80-те все още експлоатирани стар оригинален бездисков модел на IBM/System-360, за което стана̨ дума в предишнијът раздел, пънчът си работел безотказно.
- При бездискова система имаше по-малко възможности да се елиминира необходимостта от пънч.
- И тъј, става дума за управлението на периферијата на IBM/System-360, за входно-изходните (Input/Output, I/O) операции.
- Това е работа на каналите (на периферните процесори).
- Особеното в архитектурата на IBM/System-360 е, че каналите сѫ процесори и изпълнјават програми.
- Каналните програми сѫ на машиннијът език на каналите,
којто е много различен от машиннијът език на централнијът процесор.
- Те се състоја̨т от 8-бајтови команди.
- Една такава команда се наричаше CCW (Channel Command Word, ЦеЦеВѐ).
- При писане на канални програми от потребител мнемоничността е минимална.
- Појавата на адресната преадресација (на виртуалната памет) във IBM/System-370 (виж следващата беседа) направи писането на канални програми от потребител невъзможно.
- Чрез канална програма може да се разглоби входен запис или да се сглоби изходен запис.
- Пример. Нека на входът имаме записи по 80 бајта (перфокарти) за всеки човек от предпријатието.
- Първите пет бајта - служебен номер.
- Следващите десет бајта - ЕГН.
- Следващите тридесет бајта - име, презиме, фамилија.
- До крајът на перфокартата - други данни: отдел. адрес, и т. н.
- Интересуват ни само служебнијът номер и полето "име, презиме, фамилија".
- Чрез канална програма каналът може да бѫде инструктиран да пропуска данните, които не сѫ от интерес - да не се заема оперативна памет за те̋х.
- Чрез канална програма каналът може да бѫде инструктиран данните, които сѫ от интерес, да бѫда̨т разположени в паметта в указан ред, а не непременно както сѫ във входнијът поток.
- Чрез канална програма може да се осѫществи асоциативен достѫп до дискът.
- На това е посветен отделен раздел на тази беседа.
- Свързано е и с потребителското форматиране на дисковите писти, на което сѫщо е посветен отделен раздел.
- И тогава, и сега
елементарните операции с периферните (входно-изходните) устројства
се извършват с посредничество на харду̌ерни устројства, наречени контролери.
- Контролерът знае особеностите на съответното периферно устројство.
- Контролерът е настроен и към харду̌ерните интерфејси на съответнијът компјутър.
- При компјутрите от системата IBM/360 (както и при IBM/370), всеки контролер беше свързан с не̋кој канал (с не̋кој периферен процесор).
- При всички по-модерни компјутри контролерите сѫ свързани с централнијът процесор, а повечето от те̋х имат достѫп и до оперативната памет (до RAMът).
- Не̋ма вече канали (периферни процесори).
- Не̋ма вече и канални програми. Слава Богу!
- Съвременните процесори сѫ толкова бързи, че не̋ма защо да се щадја̨т и да се разтоварват.
- И ако тре̋бват повече от един, слагат се толкова, колкото е нужно.
- Защо тези процесори тре̋бва да имат толкова различни архитектури и различни машинни езици?
- Сега сѫществуват обособени части на системнијът софту̌ер, наречени
драјвери (drivers).
- Все̋ко периферно харду̌ерно устројство (drive) си върви в комплект с drivers (драјвери) за все̋ка компјутърна архитектура и платформа.
- Драјверът, којто е софту̌ер, се разбира с контролерът, којто е харду̌ер.
- Драјверът подава команди на контролерът, којто знае как да накара устројството да изпълни командата.
- Драјверът получава отчет от контролерът за изпълнението на задачата.
- Драјверът получава отчет от контролерът за текущото състојание на устројството.
- Тогава на нивото на сегашните драјвери имаше системен софту̌ер, наречен методи на достѫп (access method).
- Каналните програми бе̋ха̨ части от методите на достѫп.
- Имахме си работа с три метода на достѫп:
- последователен (sequential),
- пре̋к (direct), и
- индексно-последователен (indexed sequential, ISAM).
- (.. скриј ги каналните програми ..) (.. скриј ја̨ петата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- Дисковете сѫ дошли у нас със системата IBM/360 (ЕС ЭВМ).
- ►► Потребителското форматиране (.. покажи го ..) (.. разгъна̨то ..)
-
▼▼
Потребителското форматиране
(.. скриј го ..)
(.. свиј го ..)
(.. разгъни го ..)
- Потребителското форматиране на дисковите писти съм го срещал само в системите IBM/360 и IBM/370.
- Да, на потребителите им се налагаше да форматират дискети, но тогава се прилагаше фабрично форматиране, стандартно форматиране.
- При форматиране на дискета потребителјът не указваше как тја да бѫде форматирана.
- За да се разбере проблемът с форматирането на дисковите писти,
(.. покажи ..)
(.. покажи ..) първо тре̋бва да имаме представа за магнитните ленти. - За да се разбере проблемът с форматирането на дисковите писти,
(.. скриј ..)
първо тре̋бва да имаме представа за магнитните ленти. (.. скриј ..)- Понеже една неформатирана писта на магнитен диск е като магнитна лента. Е да, доста по-кѫса.
- Човек може да види и даже да прочете запис върху перфолента или перфокарта.
Човек може да види баркод или QR-код.
Но не и магнитен запис. Човек не̋ма сетива за това. - Стандартните магнитни ленти от 70-те и 80-те бе̋ха девет-пистови (девет-пѫтечкови, 9 tracks).
- Това, което се виђаше като магнитна глава на устројството, в дејствителност беше букетче от девет глави за запис и четене.
- Отклонение_1. Осем плјус едно е девет.
- Или бројът на пистите при стандартните магнитни ленти беше девет, защото в индустријата вече беше установено понјатието бајт като редица от осем бита.
- Или понјатието бајт като редица от осем бита е възникна̨ло заради установилијът се деветпистов стандарт при магнитните ленти.
- Как да е. Връзка има.
- При нај-простијът метод на запис (NRZ, 800bpi), можете да си представјате магнитната лента като девет-пѫтечкова перфолента.
- На все̋ка позиција - 0 или 1 - има или не̋ма дупка.
- На всеки ред - девет позиции, девет бита.
- Деветијът бит е за контрол по нечетност (odd parity).
- Ако на редът, којто е съставен от девет бита, не̋ма нито една дупка - нито една единица, то на този ред нищо не е записано.
- Защото дори бајт, съставен от осем нулеви бита, се записва с единица в пѫтечката за контрол по нечетност.
- Бројът на единиците (на дупките) на един ред тре̋бва да е нечетен.
- Редовете, където има нещо записано, тре̋бва да сѫ групирани в записи (records).
- Поне̋кога вместо запис (record) се казваше блок (block).
- Имаше ограниченија за дължината на един запис.
- Устројството се сърдеше, ако записът е по-кѫс от 18 бајта.
- Не се приемаха̨ и твърде дълги записи, защото лентата може много да се разпъне на такова ме̋сто при скоростта на четене.
- Устројството не може да си почива вѫтре в един запис (вѫтре в един блок).
- Освен това, на самијът крај на блокът има един или два контролни бајта.
- Устројството си почива међу записите (међу блоковете).
- За целта међу записите се оставја празнина (gap), достатъчно дълга, така че да даде възможност на устројството да спре међу два записа и да може след това да ускори до скорост за четене преди достигане на следващијът блок.
- Отклонение_2. Чист спирт за почистване на магнитните глави.
- Главите на магнитно-дисковите устројства сѫщо се замърсјаваха̨, но почистването им изискваше специална квалификација и се правеше при редовна харду̌ерна профилактика.
- А да чистја̨ главите на магнитно-лентовите устројства се е налагало и на мене.
- Чист спирт винѫги беше на разположение за целта в не̋кој шкаф или чекмеџе - знаеше се къде, заедно с чисто парцалче.
- Имаше едно българо-съветско предпријатие на софијската улица Александър Стамболијски.
- Там дошъл на работа ново-назначен директор - прјамо из Москвы или прјамо из Минска - не знају точно.
- И първата му работа била да провери как се съхранјава чистијът спирт, нужен за почистване на магнитните глави.
- Наложило се да му објаснјават, че никој в Българија не̋ма да пие чист спирт при наличието на толкова много спиртни напитки.
- Ролките с магнитни ленти се произвеђаха̨ в три стандарни дължини: 600ft, 1200ft и 2400ft.
- Нај-големите ролки не се събираха̨ в дамска чанта.
- Архив на пълен 20-мегабајтов дисков пакет IBM/2314 (ЕС-5061) не се събираше на по-малка ролка.
- Но можеше да се сложи втора ролка.
- Началото и крајът на лентата се маркират със светло-отразителни станиолчета, които датчикът на устројството засича.
- След станиолчето в крајът на лентата тре̋бва да има ме̋сто за още не̋колко записа (до шест), за да завърши фајлът нормално.
- Магнитната лента е с последователен достѫп. Строго последователен.
- Не може да се зададе команда "превърти 100 ft (фута) и почни да четеш (или да пишеш) оттам!"
- Не̋ма жалон за 100 ft (фута).
- Обаче може да се зададе команда "пропусни 100 записа (100 блока) и почни да четеш (или да пишеш) оттам!"
- Устројството не може да пропусне 100 записа, без последователно да ги прочете.
- Да ги пропусне - значи прочетените данни да не се пращат към оперативната памет.
- Наред с обикновените записи, имаше и специален особен запис върху магнитната лента, наречен TM (tape mark).
- Устројството изпълнјаваше такива команди:
- Вземи от този адрес на физическата памет толкова последователни бајта и ги запиши върху лентата на текущата позиција.
- Запиши TM върху лентата на текущата позиција.
- Пропускај всички записи върху лентата, докато стигнеш TM.
- Пропускај записи върху лентата, докато стигнеш TM, но нај-много толкова записа.
- Прочети от текущата позиција запис, докладвај дали е TM, и ако не е, докладвај дължината му, а данните запиши по този адрес на физическата памет.
- Мило устројство, знам, че току-що си прочело TM. Върни се, молја̨, една стѫпка назад, така че следващијът запис да покрие tape-mark-ерът.
- Rewind! Превърти лентата и ја̨ позиционирај в началото, на началното станиолче.
- И това сѫ всички команди, които устројството изпълнјава.
- При все̋ка команда, ако устројството засече крајното станиолче, то е длъжно да докладва, че лентата е на привършване.
- На първо приближение може да се приеме, че фајлът върху магнитна лента
представлјава редицата от записи међу два tape-mark-ера.
- Два последователни tape-mark-ера (без други записи међу те̋х - празен фајл) означава, че по-нататък на лентата не̋ма нищо записано.
- (.. скриј ги магнитните ленти ..) (.. скриј го потребителското форматиране ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- И тъј, магнитната лента е със строго последователен достѫп и без предварително форматиране.
- При все̋ка операција за запис върху лентата ме̋стото на записът "се форматира" наново.
- Магнитно-дисковите устројства предоставјат пре̋к достѫп до всеки запис върху дискът.
- За целта записите тре̋бва предварително да сѫ създадени.
- Създаването на записите върху дисковата писта се нарича форматиране на пистата.
- След това, по време на нормалната експлоатација, данните вѫтре в създадените при форматирането записи се презаписват.
- Разбира се, при форматиране на пистата, всичко, което е било записано на неја̨ преди това, безвъзвратно се губи.
- При системите IBM/360 и IBM/370 все̋ка дискова писта може да се форматира отделно от другите писти,
и то по указан от потребителјът начин.
- Форматирането на една писта не засе̋га другите писти.
- Различните писти мога̨т да имат различно форматиране.
- Различните писти мога̨т да имат различно форматиране, извършено по различно време.
- Различните писти мога̨т да имат различно форматиране, зајавено от различни потребители.
- Потребителските зајавки за форматиране се указваха̨ чрез JCL (Job Control Language).
- При старите дискови пакети се виђаше процепът, през којто се прокрадва светлината, којато устројството засича.
- Този процеп маркира началото и крајът на все̋ка писта.
- Процепът е един за целијът дисков пакет.
- Пистата представлјава окрѫжност. Тја започва и свършва на ме̋стото, маркирано от процепът.
- Това е фабрична маркировка.
- Форматирането си има работа с вѫтрешността на пистата.
- Къде тја почва и къде свършва - това е фабрично определено.
- И тъј, във вѫтрешността на дисковата писта има записи (records) или блокове (blocks).
- Колко записа и колко бајта да е един запис - както е указано в зајавката за форматиране на пистата.
- Един запис върху дискът се състои от три части - жалон, индекс и данни.
- Међу тези части има празнини.
- Целта им е да дада̨т време на "електрониката" да реши дали записът е от интерес в даденијът момент.
- Жалонът. Съдържанието му е следното:
- номерът на цилиндърът (при IBM-2311 и IBM-2314: число от 0 до 199),
- номерът на дисковата повърхност (surface) или номерът на пистата вѫтре в цилиндърът (при IBM-2314: число от 0 до 19), и
- номерът на записът (на блокът) върху пистата.
- Горните три числа съставлјават дисковијът адрес на блокът (на записът).
- Освен дисковијът адрес, в жалонът е указана дължината на индексът и дължината на данните.
- Ако дължината на индексът е нула, индекс не̋ма.
- Дължината на данните не може да е нула - данни винѫги има.
- Индексът.
Данните от него се ползват при асоциативнијът достѫп и при индексно-последователните фајлове.
- Има си специален раздел за това.
- Ако пистата не е част от индексно-последователен фајл, в блокът не̋ма индекс.
- Данните. Дължината на блокът с данни се задава при форматиране.
- Блоковете данни върху една писта обикновено сѫ еднакво дълги.
- Защото не̋ма лесен начин да се укаже друго.
- Ако магнитно-дисковото устројство получи команда ..
- за позициониране (за четене или за писане) на определен дисков адрес,
- съставен от номер на цилиндър, номер на повърхност и номер на блок,
- устројството първо позиционира (с придвижване)
- гребенът с магнитните глави на указанијът цилиндър
- и веднага идентифицира указаната писта.
- Но не чака да мине физическијът светлинен маркер за началото на пистата.
- Веднага чете всеки срещна̨т жалон и сравнјава дисковијът адрес.
- Ако е този, којто е указан в командата,
- значи устројството е на точното ме̋сто за четене или за писане.
- Забележка_1: При асоциативнијът достѫп вместо дисков адрес в командата се дава тѫрсен индекс и устројството по подобен начин сравнјава индекси, а не адреси.
- Забележка_2: Ако жалон с тѫрсенијът адрес не се намери върху идентифицираната писта, има възможност при форматиране да е било преценено, че съответната част от пистата е повредена и записът да е бил пренасочен към резервна писта. Там - на резервната писта, жалонът съдържа оригиналнијът дисков адрес.
- Как да е.
- Отдавна не̋ма потребителското форматиране. Слава Богу!
- Него го имаше само в системите IBM/360 и IBM/370.
- При всички други компјутри дисковите писти се форматират еднакво и това не може да бѫде променено от потребителјът.
- Винѫги без индекс и в блокове по 512 бајта (по половин килобајт).
- За всеки тип диск бројът на блоковете върху една писта е фиксиран и се знае.
- (.. скриј го потребителското форматиране ..) (.. свиј го ..) (.. разгъни го ..) (.. скриј ја̨ петата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- Потребителското форматиране на дисковите писти съм го срещал само в системите IBM/360 и IBM/370.
- ►► Геометријата на дискът (.. покажи ја̨ геометријата ..)
-
▼▼
Геометријата на дискът
(.. скриј ја̨ геометријата ..)
- Стана̨ дума, че освен в системите IBM/360 и IBM/370,
- при другите компјутри всички писти на един диск съдържат
- един и сѫщ број блокове (записи), всеки по половин килобајт.
- Този број е фиксиран и се знае за всеки тип диск.
- Например, дисковете от тип IBM-2314 (ЕС-5061),
когато работја̨т с компјутър PDP-11 (СМ-4),- имат по 10 (десет) блока на все̋ка писта,
- по половин килобајт (512 бајта) всеки.
- 200 цилиндъра,
- по 20 писти на цилиндър: 4000 писти общо,
- по 10 блока на писта: 40000 блока общо,
- по половин килобајт на блок: 20000 килобајта, почти 20 мегабајта.
- Ако знаем бројът на цилиндрите (в примерът 200),
- бројът на пистите на един цилиндър (бројът на дисковите повърхности, в примерът 20),
- и бројът на блоковете върху една писта (в примерът 10),
- значи знаем геометријата на дискът.
- В условијата на примерът, ако знаем адресът на блок върху дискът
- разположен на цилиндър номер CylNo (число от 0 до 199),
- повърхност номер SurfNo (число от 0 до 19), и запис номер RecNo (число от 0 до 9),
- то по формулата ( ( ( CylNo * 20 ) + SurfNo ) * 10 ) + RecNo
- ще получим число от 0 до 39999.
- Това число се нарича номер на дисков блок.
- Именно то се ползва вече за адресиране на дисковата памет.
- И обратно, пак в условијата на примерът, ако знаем
- номерът на дисков блок - число от 0 до 39999, което ще означим BlockNo,
- като разделим BlockNo на бројът на блоковете на писта (10),
- ще получим остатък RecNo (число от 0 до 9) и частно TrackNo.
- След това, като разделим TrackNo на бројът на дисковите повърхности (20),
- ще получим остатък SurfNo (число от 0 до 19) и частно CylNo - номерът на цилиндърът.
- В условијата на примерът, като изклјучим дисковијът драјвер,
остана̨лата част от софту̌ерът на PDP-11
не се интересува от геометријата на дискът и от горните две сметки. - Дисковијът драјвер на PDP-11, којто е софту̌ерен компонент,
му се налага да знае геометријата на дискът
и да може да прави тези две сметки,- защото харду̌ерът е взет от IBM/System-360 и
дисковијът контролер, којто е харду̌ерен компонент,
не знае как сѫ форматирани пистите. - Вижте предишнијът раздел за форматирането.
- защото харду̌ерът е взет от IBM/System-360 и
- Обаче ако харду̌ернијът компонент "дисков контролер"
е проектиран така, че да знае геометријата на дискът, то на никој софту̌ерен компонент не му тре̋бва да ја̨ знае.
- Софту̌ерът тре̋бва да знае общијът број на дисковите блокове, които по размер сѫ стандартни.
- Софту̌ерът работи само с номера на дискови блокове, които сѫ числа в плътен диапазон от нула нагоре.
- Софту̌ерът не се интересува вече от геометријата на дискът. Слава Богу!
- А пък при устројствата от тип SSD геометријата на дискът вече не̋ма никакъв смисъл.
- (.. скриј ја̨ геометријата на дискът ..) (.. скриј ја̨ петата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- Стана̨ дума, че освен в системите IBM/360 и IBM/370,
- ►► Разположението на фајловете върху дискът - задача на потребителјът (.. покажи го ..) (.. разгъна̨то ..)
-
▼▼
Разположението на фајловете върху дискът - задача на потребителјът
(.. скриј го ..)
(.. свиј го ..)
(.. разгъни го ..)
- При IBM/System-360 една писта винѫги се назначава на един фајл це̋лата.
- Не е възможно част от една писта да принадлежи към един фајл, а друга част от сѫщата писта - към друг фајл.
- Пистата е нај-малката единица - нај-малката част от дискът - којато може да бѫде назначена към фајл.
- От друга страна, един фајл може да заема не̋колко писти.
- Даже много писти.
- И тези писти може да не сѫ сѫседни.
- Нещо повече: един фајл може да заема писти от не̋колко диска.
- Такова нещо мај не̋ма в съвременните фајлови системи -
- от какъв зор един фајл ще захапва и друга фајлова система.
- Един диск от гледна точка на фајловото си съдържание се наричаше том (volume).
- Тој си имаше таблица на съдържанието VTOC (volume table of contents).
- Само една на том - една на диск - само една "директорија".
- Тја доне̋къде е предшественик на сетнешните директории.
- Всеки фајл на дискът беше представен в таблицата VTOC.
- Идентифицира се с името си - до 44 бајта без определена структура.
- Кои дискови писти фајлът заема и в какъв ред.
- Има ли фајлът продължение на друг диск и дали това тука е продължение.
- И още данни за фајлът - за вѫтрешната му структура,
- на което е посветен следващ раздел.
- С томове и фајлове се оперираше на езикът JCL (Job Control Language).
- Ако е нужен достѫп до сѫществуващ фајл, указва се името на фајлът и съдържащија̋т го том, и системнијът софту̌ер го намира.
- Обаче когато се създава нов фајл, системата DOS/360 не можеше сама да го сложи не̋къде.
- При създаване на нов фајл под DOS/360 потребителјът тре̋бваше јавно да укаже на кои писти фајлът да бѫде разположен.
- Слава Богу! Такова нещо вече не̋ма.
При всички нови системи системнијът софту̌ер сам намира къде да разположи нов фајл. - Да забравим за системите IBM/360 и IBM/370.
- Там потребителјът на фајлът, към којто фајл е назначена дискова писта, отговарја за форматирането ӥ - на колко блока по колко бајта пистата да се раздели.
- В по-новите компјутърни системи не̋ма такова нещо като потребителско форматиране.
- В по-новите компјутърни системи все̋ка писта е била подложена на стандартно форматиране -
- фиксиран број блокове по половин килобајт (512 бајта).
- В по-новите компјутърни системи на фајловете се назначават отделни блокове,
- а не непременно цели писти.
- Геометријата на дискът вече не̋ма значение.
- Има начин - има механизъм, по којто за всеки фајл да се укаже кои дискови блокове тој заема и в какъв ред.
- Това описание на разпределението на дисковите блокове по фајлове се съдържа в специален фајл - нај-важнијът фајл на дискът, наречен индексен фајл.
- Блоковете се идентифицират или все едно се адресират с номерата си (BlockNo).
- Номерът на блокът (или все едно адресът му) е число в плътен интервал от нула нагоре.
- В не̋кои дискови фајлови системи се разпределјат не стандартни блокчета по половин килобајт (512 бајта), а групички ор сѫседни блокчета (1024 бајта, 2048 бајта, 4096 бајта).
- Поне̋кога това е съгласуването със системата на виртуалната памет (вижте шестата беседа).
- Отклонение.
Общо описание на дискова фајлова система
(.. покажи го отклонението ..)
(.. покажи ..) с автоматично поблоково назначаване на дисковото пространство. - Отклонение.
Общо описание на дискова фајлова система
(.. скриј го отклонението ..)
с автоматично поблоково назначаване на дисковото пространство. (.. скриј ..)- wiki/List_of_file_systems Не става дума за IBM/360 или IBM/370.
- В основата е индекснијът фајл - нај-важнијът фајл върху дискът.
- Има и други фајлове - важни части на фајловата система:
- битмап на свободните елементи от индекснијът фајл,
- фајл, съставен от свободните блокове на дискът,
- фајл, съставен от повредените дискови блокове,
- изпълним код на операционната система, и
- главна директорија.
- Обръщението към всеки от гореспоменатите фајлове е по номер, а не по не̋какво име.
- Тоест, всеки от гореспоменатите фајлове си има фиксиран номер - не̋какво малко число.
- Създаването на фајловата система - създаването на тези основни фајлове - се нарича инициализација, а не форматиране.
- Форматирането е стандартно, фабрично и не е проблем на софту̌ерът.
- Индекснијът фајл се състои от плътно разположени елементи (entries)
с еднаква фиксирана дължина.
- Тези елементи се номерират с последователни числа от нула нагоре.
- Достѫпът до елемент на индекснијът фајл е по номер.
- Достѫпът до елемент на индекснијът фајл е бърз - ме̋стото му се изчислјава лесно.
- Един елемент на индекснијът фајл:
- може да бѫде свободен, или
- може да съдържа описание на фајл, или
- може да съдържа продължение на описанието на фајл.
- Последователните битове от битмап-фајлът съответстват на последователните елементи на индекснијът фајл.
- Съответнијът бит показва дали елементът на индекснијът фајл е свободен.
- Когато един елемент на индекснијът фајл
съдържа описание на фајл, тогава:
- Номерът на този елемент се ползва като номер на фајл.
- Не само за горе-споменатите "важни" фајлове, но и за всеки фајл.
- Описанието на един фајл,
съдържащо се в елемент от индекснијът фајл, се състои от следните части:
- Неформална част. Например име и разширение.
- Не е от интерес в този контекст.
- Затова тази информација е неформална.
- Типът на фајлът. Важно.
- Обикновен фајл (създаден от потребител).
- Директорија (directory, folder).
- "Важен" фајл између гореспоменатите, поддържан от фајловата система и скрит от потребителите.
- Спецификација на правата за достѫп. Важно.
- Кој има право на достѫп до фајлът.
- И какъв вид достѫп му се разрешава.
- Датировки. Timestamps. Важно.
- Времето на създаване на фајлът.
- Времето на последното му изменение.
- Разположението на фајлът върху дискът. Нај-важното.
- На кои дискови блокове е разположен фајлът.
- Последователно се описват всички фрагменти на фајлът.
- Пореден фрагмент от толкова дискови блока, започващ от този дисков блок.
- Ако фајлът е силно фрагментиран, описанието му тре̋бва да продължи в друг елемент на индекснијът фајл.
- Ако елемент на индекснијът фајл съдържа продължение на описанието на фајл, номерът му не се ползва като номер на фајл.
- Неформална част. Например име и разширение.
- Самијът индексен фајл като "важен" фајл си има фиксиран номер (нула или едно) и чрез својът си елемент с този номер сам описва разположението си.
- На фиксирано ме̋сто в началото на всеки елемент от индекснијът фајл
има число, наречено последователен контролен номер.
- Всеки пѫт, когато този елемент бива назначаван да съдържа описанието на не̋кој фајл, това число - последователнијът контролен номер, се увеличава с единица.
- Към самијът фајл, чието описание се съдържа в елементът, се обръщаме не просто чрез номерът на елементът, а чрез двојка номера: номерът на елементът и последователнијът контролен номер.
- Така се прави, за да се обезсилја̨т обръщенија към стари вече изтрити фајлове, които сѫ ползвали за описанието си сѫщијът елемент от индекснијът фајл.
- Свободните дискови блокове се оформјат като отделен "важен" фајл.
- "Разположението" му се описва чрез индекснијът фајл, подобно на всеки друг фајл.
- Само фајловата система има достѫп до него, и то по номерът му.
- Ако не̋кој обикновен фајл бѫде изтрит от потребителјът, неговите блокове се добавјат към този фајл.
- Този фајл бива претѫрсван от разни програми за възстановјаване на изтрити данни.
- Повредените (лошите) дискови блокове се оформјат като друг отделен "важен" фајл.
- "Разположението" му се описва чрез индекснијът фајл, подобно на всеки друг фајл.
- Само фајловата система има достѫп до него, и то по номерът му.
- Изпълнимијът код на операционната система ..
- обикновено се оформја като "важен" фајл.
- Но това не е задължително за самата фајлова система.
- При начално заређане (boot) първијът софту̌ер е с минимални уменија.
- За не го караме да се рови по директории, оформјаме това, което тре̋бва да се прочете при начално заређане от дискът в оперативната памет, като фајл с малък фиксиран номер.
- Просто за улеснение.
- Главната директорија (master directory) е вторијът по "важност" фајл
след индекснијът фајл.
- От "важните" фајлове, само тој се виђа от потребителите.
- Другите "важни" фајлове сѫ изклјучително за "служебно ползване".
- Макар да е "важен" фајл, достѫпен по фиксиран малък номер, главната директорија се виђа от потребителите, защото е директорија (directory, folder).
- Фајловете, които потребителите виђат и с които те оперират, биват
- обикновени фајлове (ordinary files), и
- директории (directories, folders).
- Другите типове (например линковете) за простота ги пропускам.
- И директориите, и обикновените фајлове сѫ все фајлове и си имат описание в не̋кој елемент на индекснијът фајл.
- Номерът на този елемент служи за номер на фајлът.
- Двојката числа номерът на елементът от индекснијът фајл и последователнијът контролен номер служа̨т за препратка (за обръщение) към фајлът.
- Това важи за всеки фајл: обикновен фајл, директорија или пък "важен" фајл.
- Фајловата система обикновено не обръща внимание на вѫтрешното съдържание на
обикновените фајлове.
- С обикновените фајлове се занимава потребителскијът софту̌ер.
- Обаче директориите се поддържат от фајловата система.
- Фајловата система знае вѫтрешната структура на директориите.
- А тази структура е следната:
- [точка като име на фајл], препратка към самата директорија, којато си е фајл
- [две точки като име на фајл], препратка към директоријата на по-горно јерархично ниво
- име на фајл, препратка към фајлът
- име на друг фајл, препратка към фајлът
- и така нататък за много фајлове.
- Първите два реда се слагат за удобство при обхођане на јерархијата от директории.
- За името на фајлът може да има не̋какви ограниченија, може и да не̋ма.
- Препратката към фајлът представлјава двојката числа номерът на елементът от индекснијът фајл и последователнијът контролен номер.
- Директориите създават јерархична структура на фајловата система.
- Потребителите имат представа за неја̨.
- Един потребител или създава нов обикновен фајл, или създава нова директорија.
- Каквото и да създава, потребителјът тре̋бва да го сложи в не̋која сѫществуваща директорија.
- Потребителјът не може да създава фајлове извън сѫществуващите директории.
- (.. скриј го отклонението ..)
- (.. скриј го разпределјането на дисковото пространство ..) (.. свиј го ..) (.. разгъни го ..) (.. скриј ја̨ петата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- При IBM/System-360 една писта винѫги се назначава на един фајл це̋лата.
- ►► Споделени цилиндри (.. покажи ги ..)
-
▼▼
Споделени цилиндри
(.. скриј ги ..)
- Дисковата памет на System/360: това е заглавието на тази пета беседа.
- При това положение не би било редно да подмина̨ такава техника като споделените цилиндри (shared cylinders).
- Ако при не̋која обработка участват два фајла, например входен и изходен, и двата на един и сѫщ диск, при онова бедно буфериране заради онази оскѫдица на оперативна памет, беше възможно обработката да се бави заради движението на дисковите магнитни глави међу цилиндрите, както и да се причини върхово натоварване на механизмите на дисковото устројство.
- В такива случаи се налагаше да се прилага техниката споделени цилиндри.
- Както бе казано в предишнијът раздел, потребителјът (програмистът, технологът на обработката) тре̋бва да указва къде по дискът да се разполагат фајловете.
- При техниката споделени цилиндри долните писти на не̋колко последователни цилиндъра се назначават на единијът фајл, а горните писти - на другијът.
- Така се намалјава движението на гребенът с магнитните глави.
- Обработката може да мине не̋колко пѫти по-бързо, без тре̋сък и вибрации.
- Отдавна вече дисковото пространство се разпределја автоматично.
Геометријата на дискът отдавна не̋ма значение.
Оскѫдицата на оперативна памет е преодоле̋на.
Осигурјава се подходјащо буфериране на операциите за вход и изход.
Не̋ма вече нуђа от техниката със споделените цилиндри. Слава Богу! - (.. скриј ги споделените цилиндри ..) (.. скриј ја̨ петата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ►► Асоциативен достѫп до дискът (.. покажи го ..) (.. разгъна̨то ..)
-
▼▼
Асоциативен достѫп до дискът
(.. скриј го ..)
(.. свиј го ..)
(.. разгъни го ..)
- Дисковата памет на System/360: това е заглавието на тази пета беседа.
- При това положение не би било редно да подмина̨
- индексно-последователните фајлове и
- индексно-последователнијът метод на достѫп (ISAM: indexed-sequential access method).
- Съвсем нормално е компјутрите да предлагат и да осѫществјават асоциативен достѫп.
- Например, да се намерја̨т данните за човек със зададено ЕГН.
- Или да се намери фајл на дискът със зададено име.
- Но това се осѫществјава от софту̌ерът.
- При индексно-последователнијът метод на достѫп обаче
асоциативнијът достѫп е подпомогна̨т от харду̌ерът.
- При системите IBM/360 и IBM/370 дисковите писти се форматират според изискванијата на потребителјът.
- Пистите на индексно-последователнијът фајл, којто ще съдържа данни за хора и којто ще има ЕГН-то за клјуч, ще бѫда̨т форматирани така, че међу жалонът и блокът с данни да има индекс с дължина 10 бајта.
- Записите в индексно-последователнијът фајл сѫ сортирани (подредени) по клјуч, в случајът по ЕГН.
- Устројството може да получи команда "тѫрси на тази писта запис с това съдържание на индексът".
- Устројството ще докладва "индекс с това съдържание току-що мина̨ под мојата глава".
- И ще получи нова команда "прочети блокът с данни, којто следва".
- Колкото и бързо да се върти дискът, комуникацијата устројство-контролер-канал е по-бърза.
- Когато блокът с данни стигне четјащата глава на устројството, то вече ще знае, че тре̋бва да ги прочете данните.
- Ще знае, че данните за човекът със зададеното ЕГН сѫ намерени.
- Може и друго да се случи.
- Устројството може да докладва "индекс със съдържание, по-голе̋мо от тѫрсеното, премина̨ под мојата глава".
- Тогава каналът и каналната му програма ще си направја̨т изводът, че на тази писта такъв запис не̋ма.
- Към един индексно-последователен фајл е възможен и
последователен достѫп.
- Програмата ще получи последователно един след друг всички записи от фајлът (например за всички хора, за които има данни във фајлът), и то сортирани по клјуч (подредени по ЕГН).
- Все едно, че програмата чете сортиран фајл от магнитна лента.
- Обикновено, един индексно-последователен фајл се пълни
при последователен достѫп.
- Индексно-последователнијът фајл тре̋бва предварително да е създаден на дискът с нужното форматиране.
- Записите предварително се подготвјат като последователен фајл на магнитна лента.
- Сортирани! Подредени по клјуч.
- Ако записите, които ще запълнја̨т индексно-последователнијът фајл, не сѫ предварително сортирани, резултатът може да е отчајващ.
- След първоначалното запълване на индексно-последователнијът фајл, новопостѫпващите записи си намират ме̋стото в подредбата по клјуч, но свалјат ефективността - и заемат повече ме̋сто, и се намират по-трудно.
- Затова от време на време един индексно-последователен фајл тре̋бва да се пресъздава.
- Има и други случаи, когато при системите IBM/360 и IBM/370 се предоставја
асоциативен достѫп до дискът.
- Дали в тези случаи се ползва специална подкрепа от харду̌ерът, както при индексно-последователните фајлове, не знаја̨.
- Първијът такъв случај е самата таблица на съдържанието на дискът, VTOC (Volume Table Of Contents).
- Системата намира сѫществуващ дисков фајл по зададено име на фајлът, преравјајки VTOC-ът.
- Вторијът такъв случај (.. покажи го ..) сѫ така наречените библиотеки (libraries).
- Вторијът такъв случај
сѫ така наречените библиотеки (libraries).
(.. скриј ги библиотеките ..)
- Имаше програма библиотекар (librarian), којато поддържаше дискови фајлове с библиотечна структура - библиотеки.
- Една библиотека съдържа модули, на които можем да гледаме като на по-малки фајлчета.
- Чрез библиотекарјът, един модул от библиотека можеше да бѫде намерен по неговото име.
- Името на модула не можеше да е по-дълго от 8 бајта.
- На потребителите се даваше само CLI-достѫп до библиотеките - чрез езикът JCL (Job Control Language).
- Системни програми - компилатори, асемблер, текстов редактор, LinkageEditor, Loader и други, ползваха̨ API-та към библиотекарјът - можеха̨ да го извикват вѫтрешно, но това не беше документирано.
- Из разни книги съм срещал да се обсѫђа библиотечен метод на достѫп, но не и във фирмената документација.
- Може би защото във фирмената документација понјатието метод на достѫп означаваше канални програми, а библиотекарјът може да не е ползвал такива.
- В системата DOS/360 сѫществуваха̨ три вида библиотеки:
- SLB: source code library: библиотека от изходни програмни кодове.
- Такава библиотека имаше раздели с еднобуквени означенија.
- При тѫрсене на даден модул тре̋бваше да се укаже разделът.
- Например, раздел 'A' беше предназначен за асемблерски програми (за макродефиниции).
- А пък раздел 'P' - за програмки на PL/I.
- Библиотекарјът не проверјаваше синтаксисът на текстовете като програмен код.
- Можеше да се слагат произволни текстове, стига да не ги подавате на асемблер или на компилатор.
- Например, можете да отворите раздел 'L' и там като модули да слагате текстове на лјубовни писма.
- Самата операционна система DOS/360 се разпространјаваше в source code във вид на SLB, съдържащо макродефиниции.
- RLB: relocatable library: библиотека от обектни модули.
- Резултатът от асемблер или компилатор се нарича обектен модул и обикновено се записва в RLB.
- Именно заради тази практика при IBM/360 резултатите от работата на такива езикови процесори и досега се наричат модули (или обектни модули).
- Функционалността на некогашните RLB-та и досега се пази едно към едно във фајлове, наричани статични библиотеки.
- В системата Windows статичните библиотеки имат разширение на името ".LIB", а в Unix - ".a".
- Защо relocatable? Защото съдържащите се програми на машинен език, резултат от работата на не̋кој езиков процесор, не сѫ обвързани с ме̋сто в оперативната памет, където да бѫда̨т заредени и изпълнени.
- Макар и на машинен език, тези програмки все още не сѫ изпълними.
- LinkageEditor-ът е програма, којато от предварително асемблирани или компилирани обектни модули (relocatables) ще създаде готова за изпълнение програма във формат core-image.
- И в помощ на LinkageEditor-ът, библиотекарјът може да намери модул в RLB-то не само по име, но и по друг "външен символ".
- Когато обектен модул (а relocatable) се пъха в RLB (в статична библиотека), библиотекарјът го индексира не само по името на модулът, но и по всеки друг символ, отбеле̋зан като "външен" (external) от езиковијът процесор.
- Забележка. Съвременнијът термин "статична библиотека" отразјава фактът, че вече има подобни библиотеки с разширена функционалност, наричани "динамични библиотеки" (DLLs) или (в Unix) "shared objects" (.so).
- CLB: core-image library: библиотека от изпълними програми.
- В системата DOS/360 един модул от CLB не подлежи на следваща обработка.
- Тој може само да бѫде зареден в паметта и изпълнен.
- Обикновено такъв модул е маркиран с адрес от паметта, където тој тре̋бва да бѫде зареден, за да може да се изпълни правилно.
- Имаше изпълними модули, маркирани като само-преместващи се (relocatable).
- Такава програма в началото проверјава къде е заредена и сама настројва местата от својът код, които сѫ позиционно зависими.
- SLB: source code library: библиотека от изходни програмни кодове.
- (.. скриј ги библиотеките ..) (.. скриј го асоциативнијът достѫп ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- Използването на индексно-последователните фајлове и
индексно-последователнијът метод на достѫп може да е било уместно при
пакетнијът режим на работа (batch processing).
- Но те никак не сѫ подходјащи за реалната работа на един съвременен сървър.
- Сегашните разнообразни изискванија се покриват от јерархичната фајлова система и нај-вече от базите данни.
- Само софту̌ер може да посрещне разнообразието в съвременната дејствителност.
- Слава Богу! Харду̌ерът вече не се меси при предоставјането на асоциативен достѫп.
- (.. скриј го асоциативнијът достѫп ..) (.. свиј го ..) (.. разгъни го ..) (.. скриј ја̨ петата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ►► Системнијът софту̌ер се меси във вѫтрешната структура на фајловете (.. покажи ..) (.. разгъна̨то ..)
-
▼▼
Системнијът софту̌ер се меси във вѫтрешната структура на фајловете
(.. скриј ..)
(.. свиј ..)
(.. разгъни ..)
- Системнијът софту̌ер се е чувствал длъжен да прави това, за да улеснјава потребителите.
- Не е съзнавал, че това не му влиза в работата.
- Магнитната лента вече е отпадна̨ла като носител на потребителски данни.
(.. покажи ..) А не̋кога това беше основен носител. (.. покажи ги магнитните ленти ..) - Магнитната лента вече е отпадна̨ка като носител на потребителски данни.
А не̋кога това беше основен носител. (.. скриј ..) (.. скриј ги магнитните ленти ..)- Системнијът софту̌ер се е чувствал задължен да маркира фајловете, разположени на магнитна лента,
- да слага в началото и в крајът на всеки фајл етикети.
- В етикетите на фајлът системата записва:
- името на фајлът,
- версија и дата,
- поредност на този фајл в поредицата фајлове на този том (на тази ролка),
- дали това е само фрагмент от фајлът,
- колко други фрагменти на този фајл върху други ролки сѫществуват,
- това последнијът фрагмент на фајлът ли е или фајлът има продължение на друга ролка,
- дали записите сѫ с фиксирана или с променлива дължина,
- колко е дължината - фиксирамата или максималната - на един физически запис,
- колко е дължината на един логически запис,
- колко общо записа има в сегментът или във фајлът.
- Както заради пакетната обработка при машините IBM/360/370,
така и заради магнитните ленти като основен носител на потребителски данни,
така и заради установилата се коболистка традиција,- системнијът софту̌ер маркираше мета-данни за фајловете
- както при лентите, така и при дисковете.
- Пакетната обработка остана̨ в мина̨лото.
Компјутрите вече работја̨т в реално време. (.. покажи какво донесе системата Unix ..)
(.. покажи ..) Дојде и системата Unix. - Пакетната обработка остана̨ в мина̨лото.
Компјутрите вече работја̨т в реално време.
Дојде и системата Unix. (.. скриј какво донесе тја ..) (.. скриј ..)- Системата Unix е много-потребителска (multi-user).
- Основната ӥ грижа тре̋бва да е правилното разпределение на ресурсите међу потребителите.
- Магнитната лента е неделим ресурс. Не се споделја међу потребителите.
- Системата ја̨ назначава на потребител це̋лата
- и не се интересува какво потребителјът ще прави с лентата.
- Системата Unix не поддържа фајлове на магнитна лента.
- Це̋лото лентово устројство се разглеђа като фајл.
- Софту̌ерът, којто по коболистка традиција чете и пише етикети и фајлове от и на магнитна лента, е изце̋ло потребителски.
- От друга страна, коболистката традиција е възникна̨ла в "бездисково време".
- А пък системата Unix предполага диск,
- предполага външно запомнјащо устројство с пре̋к бърз достѫп и за споделено ползване от всички потребители.
- Системата Unix поддържа фајлова система на диск, и разпределја дисковите ресурси въз основа на фајловете.
- Системата Unix тре̋бва да идентифицира и локализира фајл в јерархичната фајлова система по фајлова спецификација (име на фајл).
- Системата Unix тре̋бва да провери дали този потребител има право на достѫп до този фајл.
- Тја може да откаже достѫп до фајлът.
- Но ако тја разреши исканијът достѫп, какво потребителјът ще прави вѫтре във фајлът - това си е работа на потребителјът - системата Unix не му се меси.
- Системата Unix решава въпросът за компетенциите в слоевете на софту̌ерът.
- Не̋ма си вече представа системнијът софту̌ер за вѫтрешната структура на фајловете.
- Слава Богу!
- (.. скриј го оттеглјането на системнијът софту̌ер ..) (.. свиј го ..) (.. разгъни го ..) (.. скриј ја̨ петата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ►► Магнитните глави вече сѫ си част от дисковете (.. покажи ги дисковете Winchester ..)
-
IBM-2311
- Спира се дисковото устројство и се чака дисковијът пакет да спре да се върти.
- Не̋ма спирачки, спира бавно.
- Не̋къде наблизо, обикновено върху устројството, стои празната кутија на дисковијът пакет, състојаща се от дъно и капак с рѫкохватка.
- Със силната (де̋сната) рѫка се взема капак за рѫкохватката.
- С другата рѫка се отварја горната врата на устројството.
- Дисковијът пакет с помощта на својът капак с въртеливо движение се прихваща и извађа се от устројството.
- С другата рѫка се затварја горната врата на устројството.
- Слага се върху дъното, дъното щраква и се прикрепја за пакетът отдолу.
- Дисковијът пакет се прибира за съхранение в шкаф.
- Другијът дисков пакет, којто тре̋бва да се монтира, се вади от шкафът.
- Със силната си рѫка го хващаме здраво за рѫкохватката на капакът му.
- Занасјаме го до устројството.
- С другата рѫка откопчаваме дъното от пакетът и го слагаме върху устројството.
- Със сѫщата слаба рѫка отварјаме горната врата на устројството.
- Със силната си рѫка поставјаме дисковијът пакет върху шпинделът на устројството
- и с въртеливо движение закрепваме пакетът към шпинделът и освобођаваме капакът на пакетът.
- Със слабата рѫка затварјаме горната врата на устројството.
- Силната рѫка държи празнијът капак и го поставја върху дъното.
- С која да е рѫка се пуска дискът да се завърти.
- Може да мине минута, докато ускори до нужната скорост.
- Щом това стане, гребенът с главите влизат на нулев цилинддър и устројството минава в готовност.
- Устројствата ЕС-5063 (IBM-2314), с които сѫщо съм разботил, външно изглеђаха̨ по сѫщијът начин.
- Обаче дисковијът пакет имаше 11 плочи (вместо 6) и тежеше повече.
- И плътността на магнитнијът запис бе удвоена.
- В резултат, IBM-2314 събираше четири пѫти повече информација, отколкото IBM-2311.
- Устројството на картинката е музеен експонат.
- На ме̋стото, където е надписът с техническите данни, стоеше празната кутија на монтиранијът дисков пакет.
- Такива устројства се произвеђаха̨ в Стара Загора, а дискови пакети - в Пазарџик.
-
▼▼
Магнитните глави вече сѫ си част от дисковете
(.. скриј ги дисковете Winchester ..)
- Не̋кога се е считало, че магнитните глави и механизмът за придвижването им међу цилиндрите
сѫ много по-скѫпи от магнитните носители.
- Магнитнијът носител е метална плоча с магнитно покритие от двете страни.
-
(..Вижте IBM-2311 на картинка ..) (.. прочетете за него ..) - Плочите обикновено се оформјаха̨ в пакети (disk packs).
- Пакет от шест плочи (IBM-2311) имаше десет повърхности и съответно десет писти на цилиндър.
- Пакет от единадесет плочи (IBM-2314) имаше двадесет повърхности и двадесет писти на цилиндър.
- Външните повърхности в пакетът не се ползваха̨.
- Дисковете и дисковите пакетите бе̋ха̨ сменни.
- Те се монтираха̨ в устројството от човек-оператор.
- Механизмът, въртјащ дисковете, магнитнте глави и механизмът за придвижването им бе̋ха̨ част от устројството (част от драјвът, disk drive).
- Едно дисково устројство беше голе̋мо колкото автоматична пералнја или автоматична мијална.
- По не̋кое време имаше флопи-дискове или дискети - пластмаса с магнитно покритие.
- Те̋х не ги считам за истински дискове, понеже не предоставјаха̨ достатъчно бърз достѫп.
- Основнијът експлоатационен проблем беше замърсјаването.
- При сменни носители, прахът повређаше и магнитните глави, и носителите.
- Друг експлоатационен проблем беше настројката на главите към стандарт за магнитен запис.
- Обикновено ги оставјаха̨ ненастроени.
- В резултат, за всеки дисков пакет тре̋бваше да се знае кое от устројствата може да го чете.
- Операционната система OS/360 изискваше настројка на главите към стандартът.
- DOS/360 не поставјаше такова изискване.
- Технологиите напредна̨ха̨: миниатјуризација, масово производство, поевтинјаване.
- Магнитните глави и механизмът за придвижването им међу цилиндрите не се сме̋тат вече за много по-скѫпи от магнитните носители.
- Огромната вместимост при новите технологии намалјават необходимостта от сме̋на на носителите.
- Всичко вече се оформја като едно едно устројство - глави и магнитна повърхност, капсулирани и изолирани от външната среда̀.
- За първите такива модели се използваше названието Winchester.
- При те̋х задвижването беше все още външно.
- При съвременните HDD (hard disk drives) абсолјутно всичко е капсулирано и изолирано -
и въртенето на дискът, и постѫпателното движение на гребенът с главите. - (.. Илјустрација: един терабајт HDD Toshiba, USB, 2.5 инча ..)
- Магнитните глави сѫ фабрично капсулирани в едно дисково устројство заедно с магнитната повърхност.
- Слава Богу!
- (.. скриј ги дисковете Winchester ..) (.. скриј ја̨ петата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- Не̋кога се е считало, че магнитните глави и механизмът за придвижването им међу цилиндрите
сѫ много по-скѫпи от магнитните носители.
- ►► Нещо като заклјучение (.. покажи го заклјучението на беседата ..) (.. разгъна̨то ..)
-
▼▼
Нещо като заклјучение
(.. скриј го заклјучението на беседата ..)
(.. свиј го ..)
(.. разгъни го ..)
- ►► А не̋кога System/360 беше за пример .. (.. покажи ..)
-
▼▼
А не̋кога System/360 беше за пример ..
(.. скриј ..)
- Не̋кога от Москва е дошла команда всички проекти да се канцелират и
це̋лата инженерна мисъл в пространството от Бранденбургската врата до Владивосток
да се впрегне във reverse-engineering на IBM System/360.
- За да се издаде такава команда от Москва, тре̋бва System/360 на IBM да е била вече стана̨ла за пример в целијът остана̨л све̋т.
- Официално се казваше, че разработваме ЕС ЭВМ (Единаја Система Электронных Вычислительных Машин).
- Професионалната ми историја като компјутърџија започна̨ от System/360.
- Не претендирам за точност при историческите справки.
- Не знам в кој компјутър сѫ били приложени магнитни дискове за пръв пѫт.
- Но до мене дисковете достигна̨ха̨ на бордът на System/360.
- Освен дисковете, какво друго трајно е остана̨ло от System/360?
- На първо ме̋сто, софту̌ернијът бизнес. Компјутърната програма като индустриален продукт.
- След това, нещо незначително: понјатието бајт. Никој вече не смее да изневери на тази тогавашна мода.
- Понјатијата обектен модул и библиотека от обектни модули.
- Тука попадат и LinkageEditor-ът, асемблерът, компилаторите ..
- Компилаторът от FORTRAN бе впечатлјаващ с бързината си.
- Съжале̋вахме ја̨ машината, като ја̨ гледахме как се мѫчи да компилира COBOL.
- И защо не се сещам за друго? Трајно остана̨ло от System/360?
По много причини.- Забравил съм много неща веројатно.
- Наистина прогресът в технологиите е огромен.
- Тој е изхвърлил и обезсмислил много неща.
- В тази беседа, посветена на дисковете на System/360,
- Ви занимавах нај-вече с това, което го имаше не̋кога там,
- а сега вече - Слава Богу! - го не̋ма.
- Сещам се за не̋кои неща, несвързани с дисковете, които ги имаше в System/360, а сега вече ги не̋ма.
- Десетични числа с плаваща точка. Това е необјаснима странност на System/360.
- Разни други странни формати и кодировки.
- EBCDIC вместо ASCII.
- Пакетирани десетични числа и машинна аритметика с такива числа.
- Записи с променлива дължина с предшестващ бројач.
Това може да е полезно, но е изоставено.
- (.. скриј кога System/360 беше за пример ..) (.. скриј го заклјучението на беседата ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- Не̋кога от Москва е дошла команда всички проекти да се канцелират и
це̋лата инженерна мисъл в пространството от Бранденбургската врата до Владивосток
да се впрегне във reverse-engineering на IBM System/360.
- ►► Езикът COBOL стъпкан в прахта от езикът C (.. покажи ..)
-
▼▼
Езикът COBOL стъпкан в прахта от езикът C
(.. скриј ..)
- На какво се дължи зашеметјаващијът успех на техническото развитие?
На това, че не се обръщаше внимание на тесните места (bottle-necks: ботълнеци),
а на важните неща, които извеђат технологијата на нови равнища, на нови висоти.- Не на машинна десетична аритматика.
- Не на харду̌ерно подпомагане на асоциативнијът достѫп до дискът.
- Не на сложни машинни инструкции, които така се опитват да въвлека̨т харду̌ерът в ботълнеците.
- Не - ботълнеците сѫ си софту̌ерен проблем.
- Да на екстремната миниатјуризација.
- Да на екстремно голе̋мата компјутърна памет.
- Да на екстремното бързодејствие.
- Да на екстремно ниската енергозависимост.
- Преди повече от 40 години съм почна̨л на компјутър със 120 килобајта оперативна памет и със седем-мегабајтови дискове.
- Сега се наслађавам:
- на 16 гигабајта оперативна памет (140000 пѫти повече)
- и на терабајтов диск (25000 пѫти повече),
- и то с размерът на кутија шоколадови бонбони, а не в зала с климатик, противопожарна инсталација и повдигна̨т под.
- Само се наслађавам. Защото заслуга не̋мам. Само се възползвам.
- А кој има заслуга?
- Кој го движи прогресът?
- Има за какво да им завиђат смо̀таните злобни леви поcepковци "всех стран".
- Компјутърна архитектура от тип RISC (Reduced Instruction Set Computers).
- Не е важно, че харду̌ерът на централнијът процесор сме̋та само двоично, а не десетично.
- Важното е да сме̋та екстремно бързо.
- Софту̌ерът лесно ще превърне числата от десетични в двоични, а после обратно в десетични.
- Ако десетичната аритметика беше реализирана в "харду̌ерът", едва ли щеше да е по-различно.
- Не е важно, че централнијът процесор не приема инструкција "премести оттук там двеста бајта".
- Важното е инструкцијата "премести оттук там един бајт" да се изпълнјава екстремно бързо.
- Пък софту̌ерът ще ја̨ задава тази инструкција двеста пѫти.
- Архитектурата RISC бе навејана от езикът C и от системата Unix.
- За ужас на коболистите.
- Не е важно, че харду̌ерът на централнијът процесор сме̋та само двоично, а не десетично.
- Коболистът може да цени техниката "логически и физически записи"
и да се радва на предоставените от системата улесненија в тази връзка.
- А пък програмистът на C се подхилква на това.
- Че това сѫ елементарни неща.
- Роднијът ми език за програмиране беше PL/I.
- Тој беше нещо като обединение на трите езика ALGOL-60, FORTRAN-IV и COBOL,
- но без "извращенијата", каквито всеки от те̋х си имаше.
- Езикът C, системата Unix и обектно-ориентираното програмиране стъпкаха̨ и PL/I.
- Завърших професионалната си кариера като програмист на C и C++.
- Сега като пенсионер се упражнјавам на JavaScript.
- (.. скриј ја̨ победата на езикът C ..) (.. скриј го заклјучението на беседата ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- На какво се дължи зашеметјаващијът успех на техническото развитие?
- ►► Дискът е душата на компјутърът (.. покажи ..)
-
▼▼
Дискът е душата на компјутърът
(.. скриј ..)
- Макар че жабите и рибите сѫ все гръбначни животни като нас, аз не съм способен да им назначавам индивидуалност.
- Хората назначават индивидуалност на кучетата и котките.
- Даже душа им назначават!
- Лично аз с пуделите имам спомени!
- За мене те сѫ личности с индивидуалност и душа.
- Има ли компјутърът индивидуалност и душа?
- Стана̨ дума, че не̋кога имаше бездискови компјутри.
- Те сѫ като рибите и жабите.
- Без индивидуалност и без душа.
- Докато ползвам даден компјутър, аз пълнја̨ дискът му със спомени.
- Дискът му придава на компјутърът индивидуалност.
- Да не се изсилвам да казвам, че компјутърът имал душа.
- Знам му карантиите - това е машина.
- Битове. Много много битове, ама все битове.
- Каква душа.
- На нов компјутър се радвам.
- Може да се погрижа̨ да прехвърлја̨ спомените си от старијът на новијът диск.
- За старијът компјутър не̋ма да плача̨.
- А при смъртта на два пудела и аз, и Тамара плакахме.
- (.. скриј ја̨ душата на компјутърът ..) (.. скриј го заклјучението на беседата ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ◄► (.. скриј ја̨ петата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ◄► (.. скриј ја̨ петата беседа за дисковете на IBM/360 ..) (.. свиј ја̨ ..) (.. посвиј или поразгъни ..) (.. разгъни ја̨ ..) .. към началото ..
►► 7. Виртуалната памет на компјутрите (.. покажи ја̨ шестата беседа ..) (.. разгъна̨то ..) .. към началото ..
- Виртуалната памет на компјутрите се осѫществјава чрез автоматична динамична преадресација.
- Можете ли да си представите компјутър без динамична преадресација?
- Съвременните компјутри не мога̨т без неја̨.
▼▼ 7. Виртуалната памет на компјутрите (.. скриј ја̨ шестата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ◄► Не знам при кој компјутър се е појавила виртуалната памет за пръв пѫт.
- Не претендирам за точност при историческите справки.
- Писах, че до мене дисковете достигна̨ха̨ на бордът на System/360.
- Сега пиша̨, че до мене виртуалната памет достигна̨ на бордът на System/370.
- Нещо повече.
- Самата дума "виртуално" до мене сѫщо така дојде със System/370.
- Когато ставаше дума за виртуални адреси и виртуална памет.
- Сега вече има виртуална реалност, виртуален све̋т, виртуални пријатели, виртуална лјубов.
- Но това вече е съвсем друго.
- А можеха̨ не̋кога вместо думата "виртуална" (virtual) да употребја̨т думата "симулирана" (simulated).
- ►► Нещо като увод (.. покажи го ..) (.. разгъна̨то ..)
-
▼▼
Нещо като увод
(.. скриј го ..)
(.. свиј го ..)
(.. разгъни го ..)
- ►► Машинни инструкции, операнди и адресите им (.. покажи ги ..)
-
▼▼
Машинни инструкции, операнди и адресите им
(.. скриј ги ..)
- Централнијът процесор (CPU: Central Processing Unit) е мозъкът на компјутърът -
това, дето сме̋та, мисли и взема решенија.
- От човешка гледна точка, тој изпълнјава програма.
- Самијът тој обаче не знае за неја̨, за програмата си.
- Централнијът процесор (CPU-то) във всеки момент изпълнјава не̋каква инструкција, машинна инструкција.
- Съсредоточил е вниманието си на неја̨, на текущата инструкција.
- Докато ја̨ изпълнјава текущата инструкција, вече е забравил предишната и си не̋ма представа која ще е следващата.
- А инструкцијата идва от оперативната памет на компјутърът.
- Оперативната памет на компјутърът (RAM-ът: Random Access Memory, main memory) е извън CPU-то.
- За да получи инструкцијата си за изпълнение, CPU-то издава зајавка до RAM-ът:
- Прати ми съдържанието на толкова бајта, както си ги запомнил, започвајки от този адрес.
- Колко толкова? Два, четири, осем нај-много.
- RAM-ът взема от посоченијът адрес поредица от битове (не̋колко бајта) и ги праща на CPU-то.
- А пък CPU-то ги интерпретира и ги изпълнјава като машинна инструкција.
- Вѫтре в себе си CPU-то поддържа специален регистър, наречен PC (Program Counter).
- Чрез PC-регистърът CPU-то знае от кој адрес на RAM-ът да вземе инструкцијата си.
- Когато CPU-то иска от RAM-ът следваща инструкција за изпълнение, CPU-то използва съсдържанието на PC-регистърът за адрес към RAM-ът и веднага CPU-то увеличава PC-регистърът да бѫде готов за по-следващата инструкција.
- Вѫтре в себе си CPU-то поддържа не̋колко регистъра, за които ще стане дума по-долу.
- PC-регистърът е един от те̋х.
- Повечето регистри сѫ с общо предназначение (General Purpose Registers).
- При не̋кои компјутри CPU-то взема съдържанието на PC-регистърът и на регистрите с общо предназначение по един и сѫщ начин.
- При други компјутри (например при IBM/360/370) CPU-то взема съдържанието на PC-регистърът по специален начин, със специална инструкција.
- Практически при всички компјутри има специални машинни инструкции за установјаване на ново съдържание на PC-регистърът.
- Това сѫ инструкциите за безусловен или условен преход (branching, jumping).
- Те променјат адресът на следващата машинна инструкција.
- Вѫтре в себе си CPU-то поддържа регистри.
- Това сѫ елементчета памет. Памет на една рѫка разстојание до CPU-то.
- RAM-ът е памет на един поглед разстојание,
- а дискът е необјатна памет отвѫд хоризонтът.
- Повечето от тези регистри сѫ с общо предназначение.
- CPU-то не знае предназначението им. Програмата знае.
- CPU-то се обръща към такъв регистър, само ако това е указано в изпълнјаваната машинна инструкција.
- Не̋кои от регистрите сѫ със специално предназначение.
- Такъв е PC-регистърът, за којто стана̨ дума.
- CPU-то знае предназначението му и го използва според предназначението му.
- В съвременните компјутри (но не и във IBM/360/370) има и друг регистър със специално предназначение - SP (Stack Pointer).
- Темата за stack-ът и за heap-ът може би заслужава беседа от тукашната поредица беседи.
- Такава обаче не се предвиђа.
- Дори установени термини на български не̋ма.
- Пък и това не е загубило актуалността си - на тези, които се уча̨т да програмират на C или C++, stack-ът и heap-ът тре̋бва да им бѫда̨т објаснени.
- А аз не пиша̨ учебник.
- Регистрите на CPU-то нај-често съдържат адрес.
- Нај-често в те̋х се съхранјават адреси на места от RAM-ът, с които CPU-то или по-точно програмата работи.
- Двата регистъра със специално предназначение, за които стана̨ дума - PC-регистърът и SP-регистърът, съдържат именно адреси.
- Регистрите на CPU-то с общо предназначение, които не съдържат адреси, ако програмата ги ползва,
тја ги ползват като акумулатори, например суматори.
- Акумулаторите съдържат данни, които сѫ резултат от изчисленија и подлежа̨т на скорошна обработка.
- Това сѫ елементчета памет. Памет на една рѫка разстојание до CPU-то.
- Данните, с които CPU-то борави при изпълнението на машинна инструкција, се наричат операнди на инструкцијата.
- Един операнд:
- или се съдържа в самата инструкција,
- или се съдържа в не̋кој регистър,
- или се съдържа в RAM-ът по не̋кој адрес.
- Ако операндът се съдържа в RAM-ът, то адресът му:
- или се съдържа в самата инструкција,
- или се съдържа в не̋кој регистър,
- или се съдържа в RAM-ът по не̋кој адрес.
- Това последното ре̋дко се среща, но се среща.
- По-голе̋ма дѫлбочина на косвено адресиране не се среща.
- Един операнд:
- И тъј, основната връзка на CPU-то (на централнијът процесор)
със светът извън него е връзката му с RAM-ът.
- Основното в тази връзка е адресът на ме̋сто в RAM-ът.
- CPU-то задава този адрес.
- CPU-то или иска да получи от RAM-ът съдържанието на този адрес, какво е запомнено там,
- или иска от RAM-ът по указанијът адрес да бѫда̨т записани (и запомнени) не̋какви данни (поредица от битове), които CPU-то сѫщо задава.
- Друга връзка на CPU-то (на централнијът процесор) със светът извън него
е системата на прекѫсванија.
- Основното предназначение на механизмът на прекѫсванијата е
CPU-то да бѫде уведомено за настѫпило изменение във външнијът све̋т.
- Завършила е операција за вход или за изход, натисна̨л съм клавиш, мръдна̨л съм мишката, барна̨л съм touch-screen-ът.
- Трудно ми е да го опиша̨ механизмът на прекѫсванијата обобщено.
- Пък е и извън темата на беседата.
- Основното предназначение на механизмът на прекѫсванијата е
CPU-то да бѫде уведомено за настѫпило изменение във външнијът све̋т.
- При компјутърна архитектура, којато позволјава много-потребителска (multi-user) работа,
CPU-то има нај-малко два режима на работа: системен режим (kernel mode) и потребителски режим (user mode).
- В потребителскијът режим (user mode) машинните инструкции, които мога̨т да повлијаја̨т на другите потребители, сѫ забранени.
- Това сѫщо е извън темата на беседата и силно зависи от конкретната компјутърна архитектура.
- (.. скриј ги машинните инструкции ..) (.. скриј го уводът към швстата беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- Централнијът процесор (CPU: Central Processing Unit) е мозъкът на компјутърът -
това, дето сме̋та, мисли и взема решенија.
- ►► Адреси, адресно пространство, адресација (.. покажи ..)
-
▼▼
Адреси, адресно пространство, адресација
(.. скриј ..)
- И тъј, CPU-то (централнијът процесор) на компјутърът генерира и извеђа към външнијът све̋т адреси,
които сѫ част от два вида зајавки:
- Зајавка за четене:
- CPU-то иска да получи данните, записани на този адрес,
като предполага, че това е адрес на ме̋сто от RAM-ът.
- CPU-то иска да получи данните, записани на този адрес,
- Или зајавка за писане:
- CPU-то иска по този адрес да се запиша̨т и запомнја̨т
не̋какви данни, които CPU-то предоставја заедно с адресът,
като пак предполага, че адресът е на ме̋сто от RAM-ът.
- CPU-то иска по този адрес да се запиша̨т и запомнја̨т
- Зајавка за четене:
- Например, когато CPU-то иска да получи следваща машинна инструкција за изпълнение, CPU-то издава зајавка за четене по адрес, взет от PC-регистърът.
- При съвременните компјутри адресът е адрес на бајт - на поредица от 8 бита, наречена бајт.
- Не винѫги е било така.
- Но системата IBM/360 въведе тази мода и оттогава това е стандарт в индустријата.
- Ако към един адрес прибавим единица, ще се получи адресът на следващијът бајт.
- Зајавката за четене или за писане по адрес, којато CPU-то издава към външнијът све̋т,
може да има обхват с различна ширина:
- един бајт (8 бита),
- два бајта (16 бита),
- четири бајта (32 бита - нај-често), или
- осем бајта (64 бита)
- Ако зајавката е за два бајта, обикновено адресът е четен (последнијът бит от адресът е 0).
- Ако зајавката е за четири бајта, обикновено адресът се дели на 4 (последните два бита от адресът сѫ 00).
- Харду̌ерът може да се сърди, ако не е така, а може и да не се сърди.
- CPU-то не може да издава зајавки с произволна ширина.
- Не може 100 или 200 бајта.
- CPU-то тре̋бва да издаде зајавки бајт по бајт, а не наведнѫж.
- Не може само 5 бита.
- CPU-то тре̋бва да издаде зајавка за целијът 8-битов бајт, а после да си отдели интересуващите го битове.
- Не може 100 или 200 бајта.
- Нај-често адресът представлјава редица от 32 бита, интерпретирана като 32-битово двоично це̋ло число без знак.
- Но има и други случаи.
- При други компјутри адресът може да е 16-битово двоично число без знак.
- При IBM/360/370 адресът е 24-битово двоично число без знак.
- При други компјутри адресът може да е 64-битово двоично число.
- Адресите съставлјават адресно пространство (address space).
- То се състои от всички възможни адреси.
- Отсега ще го нарека̨ физическо адресно пространство (physical address space), макар засега да не е јасно за какво е думата физическо.
- Ако адресът е 32-битов, то всички адреси на број сѫ 4294967296.
- Това число е в десетичен запис и представлјава 2 на степен 32.
- Толкова различни бајта може да се адресират с 32-битови адреси.
- Може да се каже, че обемът на адресното пространство при 32-битови адреси е 4 гигабајта.
- При друга разрјадност на адресът (16-битов, 24-битов, 64-битов) обемът на адресното пространство може да се пресметне по сѫщата формула - числото 2 на тази степен.
- Нај-нискијът (нај-малкијът) адрес е съставен само от нулеви битове (двоични нули).
- Нај-високијът адрес е съставен само от двоични единици.
- Стојността на адрес не̋ма смисъл да се представја десетично.
- Представја се в шестнадесетичен или в осмичен запис и обикновено се запълват всички разрјади.
- Например, нај-високијът 32-битов адрес шестнадесетично се представја така: FFFFFFFF.
- А пък нај-нискијът, разбира се е 0 (нула) или 00000000.
- CPU-то се обръща по адрес към външнијът све̋т -
CPU-то адресира физическо адресно пространство -
- или за да получи следващата машинна инструкција, којато CPU-то тре̋бва да изпълни,
- тогава това е зајавка за четене,
- или в изпълнение на машинна инструкција,
- тогава това може да е зајавка за четене или за писане според машинната инструкција.
- или за да получи следващата машинна инструкција, којато CPU-то тре̋бва да изпълни,
- (.. скриј ги адресите и адресацијата ..) (.. скриј го уводът към швстата беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- И тъј, CPU-то (централнијът процесор) на компјутърът генерира и извеђа към външнијът све̋т адреси,
които сѫ част от два вида зајавки:
- ►► Оперативна памет и физическо адресно пространство (.. покажи ..)
-
▼▼
Оперативна памет и физическо адресно пространство
(.. скриј ..)
- Когато CPU-то издава към външнијът све̋т - към физическото адресно пространство - зајавка за четене или за писане, кој му отговарја?
- Кој ја̨ изпълнјава зајавката?
- Кој е разположен във физическото адресно пространство?
- Нај-често това е RAM-ът, оперативната памет.
- RAM-ът - това е памет (memory).
- Записва (запомнја) подадени данни на ме̋сто, определено чрез адресација, определено от зададен физически адрес.
- Подава обратно данните, които сѫ били записани (запомени) на ме̋сто, определено чрез адресација.
- RAM-ът е пасивно устројство.
- Изпълнјава зајавки и не пројавјава инициатива.
- Чии зајавки изпълнјава пасивното устројство RAM?
- На първо ме̋сто на CPU-то (на централнијът процесор).
- В RAM-ът е записана неговата програма и CPU-то си ја̨ чете програмата от RAM-ът.
- Пак към RAM-ът се обръща CPU-то и във връзка с операндите на изпълнјаваната от него инструкција, освен когато операндът е в регистър.
- Но не само на CPU-то.
- Зајавки към RAM-ът идват и откъм дисковијът контролер.
- По-общо казано, зајавки към RAM-ът идват и откъм системата за вход/изход (I/O).
- Данните, които дискът или лентата записват на магнитната си повърхност, с посредничеството на контролерът идват от RAM-ът, като контролерът използва сѫщата физическа адресација, както CPU-то.
- CPU-то ги е сложило на това ме̋сто в RAM-ът, преди да се стартира операцијата за запис върху магнитен носител.
- И сѫщо така, данните, които дискът или лентата чета̨т от магнитната си повърхност, с посредничеството на контролерът биват пращани към RAM-ът.
- CPU-то, при стартиране на операцијата за четене от магнитен носител, е казало на контролерът къде точно в RAM-ът - на кој физически адрес - да бѫда̨т записани тези данни.
- После CPU-то ще си ги намери там.
- По-общо казано, зајавки към RAM-ът идват и откъм системата за вход/изход (I/O).
- Например, от контролерът на дисплејът (на екранът).
- Дисплејът на мојът лаптоп (пиксели 1920 на 1080) изисква поне 8-мегабајтово ме̋сто в паметта.
- А реално веројатно доста повече.
- Це̋лата RAM-памет на лаптопът ми е 16 гигабајта, което е 2000 пѫти повече от 8 мегабајта.
- За сравнение: през 1979 започна̨х работа на компјутър IBM/360 (ЕС ЭВМ) с RAM 120 килобајта.
- CPU-то подготвја в тази област от RAM-ът данните, вклјучително картинките, които дисплејът тре̋бва да ми покаже.
- Областите от RAM-ът, които служа̨т на CPU-то за обмен на данни с контролерите на периферијата, се наричат буфери.
- И CPU-то, и контролерите се обръщат към буферите чрез физическа адресација на RAM-ът.
- Контролерите на периферијата научават физическите адреси на буферите от CPU-то, от командата за стартиране на входно-изходната (I/O) операција.
- На първо ме̋сто на CPU-то (на централнијът процесор).
- Нај-много ме̋сто във физическото адресно пространство заема RAM-ът.
- Обаче RAM-ът не заема всичкото физическо адресно пространство.
- Може компјутърът да е оборудван с по-малко RAM, отколкото физическото адресно пространство позволјава.
- Може сегменти от RAM-ът да сѫ били отстранени заради повреда.
- А може и част от физическото адресно пространство да е била заделена от компјутърната архитектура за контролерите на периферијата.
- Какъв е резултатът, след като CPU-то издаде зајавка за четене или писане по физически адрес към външнијът све̋т?
- Зајавката ще бѫде изпълнена без проблеми.
- CPU-то може да бѫде уведомено, че адресът не е достѫпен заради защита по клјуч.
- CPU-то може да бѫде уведомено, че адресът не е достѫпен, защото липсва.
- CPU-то може само̀ да се усети, че адресът липсва, ако отговорът на зајавката закъснјава.
- (.. скриј го физическото адресно пространство ..) (.. скриј го уводът към швстата беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ►► Много-потребителска работа на компјутърът (.. покажи ..)
-
▼▼
Много-потребителска работа на компјутърът
(.. скриј ..)
- Тази шеста беседа е за виртуалната памет. Напредваме натам стѫпка по стѫпка.
- Предишната пета беседа беше за дисковете.
- Там стана̨ дума, че операционната система Unix не може без дискове.
- В дејствителност, всички съвременни компјутри имат дискове и затова всички съвременни операционни системи разчитат на дискова памет.
- Всички съвременни компјутри имат и виртуална памет.
- Съвременните операционни системи ја̨ използват виртуалната памет, за да организират много-потребителската работа (multi-user) на компјутърът, и то до степента компјутърът да може да се ползва като сървър - без формално заложено ограничение за едновременно обслужваните потребители.
- Нататък в настојащијът подраздел ще се опитам да покажа̨ как е организирана много-потребителската работа
в IBM/System-360 без виртуална памет.
- Какво значи да се организира много-потребителска работа?
- Да е възможно компјутърът да има много (поне повече от един) потребители едновременно,
- като системата чрез харду̌ерът и чрез системнијът софту̌ер не позволјава един потребител неволно (чрез грешка в потребителската програма) или умишлено да наруши работата на другите потребители или на компјутърната система като це̋ло.
- И тъј, в IBM/System-360 ..
- Наличната оперативна памет е разделена на блокове (наричани още страници) по 2 килобајта (2048 бајта).
- На всеки такъв блок се назначава 4-битов клјуч за защита.
- 4-битов клјуч: това значи число от 0 до 15.
- Централнијът процесор (CPU-то) сѫщо има своја текуща стојност на този 4-битов клјуч.
- CPU-то го ползва својът текущ 4-битов клјуч при адресирането на оперативната памет (RAM-ът) по какъвто и да е повод.
- Когато CPU-то стартира канална програма, дава съответнијът 4-битов клјуч за ползване от каналът (от перифернијът процесор) при изпълнението на тази канална програма.
- Все̋ка зајавка за достѫп до физически адрес
(а такава зајавка може да идва от CPU-то или от не̋кој канал)
тре̋бва да бѫде придружена от 4-битов клјуч за достѫп. - Ако клјучът за достѫп е нула, достѫпът се разрешава.
- Ако клјучът за достѫп не е нула, достѫпът се разрешава,
само ако клјучът за достѫп съвпада с клјучът на защита на 2K-блокът, в којто попада адресът. - Когато се изпълнјава потребителска програма, CPU-то работи в потребителски режим.
- В потребителски режим на CPU-то му е забранено да изпълнјава привилигировани инструкции.
- В частност, на CPU-то в потребителски режим му е забранено да променја својът 4-битов клјуч за достѫп, да променја 4-битовите клјучове за защита на блоковете RAM, както и да стартира канални програми.
- Горното означава, че архитектурата на IBM/System-360 (без виртуална памет) позволјава едновременно обслужване на 15 потребителја нај-много.
- Имаше версија на операционната система - OS/360-MVT,
којато автоматично разкројаваше наличната оперативна памет на потребителски раздели (partitions)
според постѫпващите заданија в потокът за пакетна обработка (batch processing).
- Аз не съм имал досег с такава система.
- При системите OS/360-MFT и DOS/360 наличната за ползване оперативна памет биваше разкројавана
на потребителски раздели (partitions) от човек.
- Нај-много 15 раздела, всеки с клјуч за защита от 1 до 15.
- Системата OS/360-MFT сама избираше кога да пусне дадено потребителско задание и в кој от наличните раздели на паметта да го пусне.
- При системата DOS/360 човек указваше това (програмист, технолог, оператор).
- (.. скриј ја̨ много-потребителската работа ..) (.. скриј го уводът към швстата беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ►► Обектни модули, секции, сегменти (.. покажи ги ..)
-
▼▼
Обектни модули, секции, сегменти
(.. скриј ги ..)
- В този подраздел ще се помѫча̨ да покажа̨ как едно време без виртуална памет се строе̋ха̨
големи програми за изпълнение от компјутър.
- Толкова големи, че не се събират в наличната оперативна памет.
- Повечето от тези неща все още сѫ валидни.
- Дори новите технологии да ги скриват.
- Тука става дума само за програми, които сѫ създадени или построени да работја̨т непосредствено на компјутърът,
- а не за програми, които докато се изпълнјават, се интерпретират от други програми.
- Не става дума за програми, написани на Java, JavaScript, Python, Perl, PHP и други подобни.
- Не става дума за програми, написани на разни shell-script-ове.
- Програмата се пише на части, наречени изходни модули (source modules).
- Програмата може да се пише от колектив програмисти
- и различните изходни модули може да сѫ написани от различни програмисти.
- Но дори да е само един програмистът, естествено е програмата да се пише на части.
- Различните изходни модули може да сѫ написани на различни езици за програмиране.
- По принцип, на асемблер.
- Реално, на COBOL, FORTRAN, PL/I, Pascal, C или C++.
- Все още в употреба: C и C++.
- Всеки изходен модул се обработва - компилира се или се асемблира - от асемблер или от компилатор,
и се получава обектен модул (object module).
- За обектни модули (object modules) ставаше дума и в предната беседа.
- При все̋ко пускане на асемблерът или на компилаторът се получава един обектен модул.
- Oбектнијът модул има двоичен формат, нечетлив за хора.
- Едно време за все̋ка компјутърна платформа сѫществуваше специфичен формат на обектните модули.
- Например, при IBM/System-360 обектните модули имаха̨ формат удобен за пънч, макар че отдавна те не се пънчваха̨, а се записваха̨ на магнитен носител (диск или лента).
- Сега има не̋какви стандартни общи формати за обектни модули. (.. Например, COFF .. или .. ELF ..)
- Един обектен модул съдържа машинни инструкции и данни,
- като данните мога̨т да бѫда̨т инициализирани (с објавени начални стојности) или не.
- Ако данните не сѫ инициализирани, те не заемат ме̋сто в самијът обектен модул, но тој пак назначава ме̋сто за тези данни в оперативната памет по време на изпълнение на програмата.
- Паметта за времето на изпълнение на програмата можем да ја̨ наречем обектна памет.
- И тъј, един обектен модул назначава и пълни парчета от обектната памет.
- Когато ги пълни, пълни ги с машинни инструкции или инициализиращи данни.
- Но да не забравјаме, че обектнијът модул по начало е разултат от работата на компилаторът или асемблерът.
- Как обектнијът модул допринасја за обектната памет - компилаторът или асемблерът сѫ определили това.
- Парчетата, с които обектнијът модул допринасја за обектната памет, се наричат програмни секции.
- Едно време при IBM/System-360 вместо програмни секции се казваше контролни секции.
- Обектната памет - оперативната памет, назначена за изпълнјаваната програма - се дели на програмни секции.
- Ако обектнијът модул е резултат от работата на асемблерът, то асемблерът е следвал точно указанијата на програмистът как да се разкрои модулът на секции.
- Ако обектнијът модул е резултат от работата на компилатор, компилаторът сам може да реши да отдели машинните инструкции, инициализираните данни и неинициализираните данни в различни секции.
- Но и в този случај програмистът тре̋бва да може да укаже специфика в оформјането на програмните секции.
- Има две програми, които умеја̨т да боравја̨т с обектни модули:
- програма-библиотекар (librarian), наричана в системата Unix архивар (ar), и
- линкер (Linker или LinkageEditor), наричан още свързващ редактор.
- Библиотекарјът (архиварјът) поддържа
- библиотеки от обектни модули, наричани още статични библиотеки.
- Като фајлове в IBM/System-360 библиотеките от обектни модули се наричаха̨
RLB-та,
в системата Unix фајловете със статични библиотеки имат разширение на името .a, а във Windows - .lib. - Един обектен модул е резултат от работата на асемблерът или на компилаторът.
- Тој може да си остане отделен фајл (с разширение .o в Unix или .obj във Windows),
- но може с помощта на библиотекарјът да се пъхне в не̋која статична библиотека.
- Библиотекарјът и форматът на статичните библиотеки сѫ проектирани така, че да служа̨т на линкерът.
- Библиотекарјът не може да раздели обектен модул на съдържащите се в модулът програмни секции - това го може линкерът.
- Линкерът - сам или с вѫтрешна невидима помощ от библиотекарјът, тре̋бва да може:
- Да извлече от статична библиотека обектен модул по името на модулът.
- Да извлече от статична библиотека този обектен модул, съдържащ се в неја̨, којто дефинира даден външен символ.
- Външните символи нај-често сѫ имена на подпрограми (функции), но може и да сѫ означенија на блокове с данни.
- Линкерът е една от нај-важните програми.
- Резултатът (изходът) от едно пускане на линкерът е изпълнима програма - executable.
- Забележка в аванс. В новите системи със виртуална памет резултатът от линкерът може да бѫде или executable, или динамична библиотека. Но засега ще забравим за това.
- Паметта на executable-ът се дели на сегменти (segments).
- По своја инициатива - ако не му е указано от програмистът, линкерът не̋ма да направи повече от един сегмент.
- Забележка в аванс. По своја инициатива линкерът не̋ма да направи динамична библиотека.
- Забележка в аванс. Динамичната библиотека е сегмент за общо ползване.
Но засега ще забравим за това.
- Резултатът (изходът) от едно пускане на линкерът е изпълнима програма - executable.
- Ако executable-ът (изпълнимата програма) се вмества в наличната оперативна памет,
- то не̋ма смисъл executable-ът да се дели на сегменти - достатъчен е един сегмент.
- В този случај програмистът не мисли и за програмни секции.
- За всеки изходен модул компилаторът ще създаде обектен модул с нај-много три програмни секции: за машинни инструкции, за инициализирани данни и за неинициализирани данни.
- Дали тја съдържа машинни инструкции, инициализирани данни или неинициализирани данни - това е својство на програмната секција.
- Компилаторът дава едно и сѫщо подразбиращо се име на програмните секции, щом програмистът не се е намесил.
- После линкерът ще сглоби секцијата с това подразбиращо се име, като събере (конкатенира) приносите към тази секција от различните обектни модули.
- Така в полученијът единствен сегмент има само една програмна секција, съдържаща машинни инструкции, и името ӥ се подразбира.
- По подобен начин се третират и секциите с данни, но те не се събират, а се препокриват.
- От различните изходни модули през различните обектни модули се обръщаме към общи данни - това е смисълът на препокриването.
- Когато такава програма се пуска за изпълнение, единственијът ӥ сегмент се заређа в оперативната памет и управлението на CPU-то се предава на указана входна точка.
- Смисълът на този подраздел обаче е да објаснја̨ как се строја̨т големи програми
- такива, които не се побират в наличната оперативна памет.
- Програмистът проектира и разкројава голе̋мата програма на сегменти.
- Всеки сегмент се заређа в оперативната памет отделно.
- Не е възможно всички сегменти да се заредја̨т едновременно, защото програмата е голе̋ма.
- Един от сегментите е базов - root segment.
- Тој се заређа, когато програмата се пусне да се изпълнјава, и тој заређа другите сегменти.
- Некои от сегментите се препокриват - те се заређат на един и сѫщ адрес (на едно и сѫщо ме̋сто) и не мога̨т да сѫ заредени едновременно.
- Никој от другите сегменти не препокрива базовијът сегмент.
- Може да има не̋колко групи от взаимно препокриващи се сегменти.
- Програмистът указва на линкерът:
- от колко сегмента да бѫде построен executable-ът,
- кој е базовијът сегмент и кои сѫ групите препокриващи се сегменти,
- от кои обектни модули и програмни секции да се състои всеки сегмент.
- Линкерът вклјучва в базовијът сегмент подпрограмки за заместване на един сегмент с друг по време на изпълнение.
- Дори да идват от един и сѫщ обектен модул, различните програмни секции мога̨т да отида̨т в различни сегменти.
- Програмистът проектира и разкројава една голе̋ма програма на сегменти, така че заместванијата на един сегмент с друг да се случват максимално ре̋дко.
- При недобро разпределение на програмните секции и обектните модули по сегментите, производителността на програмата може да падне драстично.
- (.. скриј ги секциите и сегментите ..) (.. скриј го уводът към швстата беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- В този подраздел ще се помѫча̨ да покажа̨ как едно време без виртуална памет се строе̋ха̨
големи програми за изпълнение от компјутър.
- ◄► (.. скриј го уводът ..) (.. свиј го ..) (.. разгъни го ..) (.. скриј ја̨ шестата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ►► Нещо по средата (.. покажи го ..) (.. разгъна̨то ..)
-
▼▼
Нещо по средата
(.. скриј го ..)
(.. свиј го ..)
(.. разгъни го ..)
- ◄► За да разберете това нещо по средата, тре̋бва да сте прочели нещото като увод.
- ►► Динамичната преадресација (.. покажи ..)
-
▼▼
Динамичната преадресација
(.. скриј ..)
- Това, което се слага по средата међу CPU-то (централнијът процесор) и външнијът за него све̋т, е MMU-то.
(.. Повече за MMU-тата можете да прочетете тука ..)- Външнијът све̋т за CPU-то се състои от физическата оперативна памет и от периферијата.
- MMU-то стои на изходът от CPU-то към външнијът све̋т.
- Всеки адрес, којто CPU-то генерира и праща към външнијът све̋т в зајавки за четене или за писане, минава през MMU-то.
- Когато MMU-то не работи (не е вклјучено, изклјучено е), адресите минават през MMU-то без проме̋на.
- Може да се сме̋та, че когато MMU-то е изклјучено, адресите не минават през него.
- Когато обаче MMU-то работи (вклјучено е), то променја адресите и пуска към външнијът све̋т други адреси.
- MMU-то извършва динамична преадресација
- Адресите, които важа̨т във външнијът све̋т, се наричат физически адреси.
- Те образуват физическо адресно пространство.
- Адресите, които CPU-то генерира и които стигат само до MMU-то, се наричат виртуални адреси.
- Те образуват виртуално адресно пространство.
- MMU-то извършва динамична преадресација:
преобразува виртуалните адреси във физически. - CPU-то може да вклјучва и да изклјучва MMU-то,
но само когато CPU-то е в системен (привилегирован) режим (kernel mode, privileged mode),
не и в потребителски режим (user mode).
- Битовете на виртуалнијът адрес се делја̨т на две групи - младши и старши.
- Старшите битове определјат "сѫдбата" на виртуалнијът адрес.
При "щастливо" стечение на обстојателствата,
те определјат базовијът физически адрес,
към којто се добавјат младшите битове,
за да се получи физическијът адрес.
- Старшите битове определјат "сѫдбата" на виртуалнијът адрес.
- Виртуалните адреси със съвпадащи старши битове образуват виртуална страница (virtual page).
- Виртуалните адреси от една виртуална страница обикновено имат една и сѫща "сѫдба". (Изклјучение: PDP-11)
- Колко на број сѫ младшите битове на виртуалнијът адрес?
- Колко е голе̋ма една виртуална страница?
- Тези два въпроса, разбира се, сѫ свързани:
бројът на младшите битове на адресът определја размерът на една виртуална страница. - Зависи от архитектурата на компјутърът и от моделът на MMU-то.
- При не̋кои MMU-та бројът на младшите битове на адресът е част от настројката на това устројство, и то работи според текущата си настројка.
- При IBM/System-370 ..
- бројът на младшите битове e 11, и съответно една виртуална страница е 2048 бајта (2 килобајта, 2К бајта, 2 на степен 11 бајта).
- Спомнете си, че в IBM/360/370 толкова е и размерът на блокът памет с общ 4-битов клјуч за защита.
- Адресът в системата IBM/370 е 24-битов.
- Младшите 11 бита на виртуалнијът адрес дават адресът вѫтре във виртуалната страница, а старшите 13 бита определјат која е самата виртуална страница.
- При VAX бројът на младшите битове e 9, и съответно една виртуална страница е 512 бајта (2 на степен 9 бајта, половин килобајт).
- При по-новите компјутърни архитектури, с модерна организација на дисковата памет, размерът на виртуалната страница е съгласуван с размерът на дисковите блокове в разпределението на дисковото пространство по фајлове..
- (.. покажи ..) MMU-то на PDP-11 не е показателно за другите компјутри, но този случај е обозрим. (.. покажи подробности за MMU-то на PDP-11 там ..)
-
MMU-то на PDP-11 не е показателно за другите компјутри, но този случај е обозрим.
(.. покажи подробности за MMU-то на PDP-11 там ..)
(.. скриј го PDP-11 ..)
- PDP-11 е 16-битов компјутър, и виртуалнијът адрес е 16-битов.
- Бројът на младшите битове във виртуалнијът адрес е 13, а на старшите - 3.
- Това означава, че:
- една виртуална страница е 8 К (2 на степен 13) бајта,
- виртуалното адресно пространство е 64 К (2 на степен 16) бајта, и
- виртуалното адресно пространство съдържа 8 (осем на број: 2 на степен 3) виртуални страници.
- За да извършва динамичната преадресација, MMU-то на PDP-11 ползва таблица с осем реда - таблица на виртуалните страници, по един ред за все̋ка виртуална страница.
- В дејствителност, MMU-то на PDP-11 има достѫп до две такива таблици: една за системнијът режим (kernel mode) на CPU-то, и друга за потребителскијът режим (user mode).
- С други думи, във всеки момент има две виртуални адресни пространства - едно за "kernel mode" и друго за "user mode".
- С превклјучването от "kernel mode" във "user mode", CPU-то сменја видимото за него виртуално адресно пространство.
- А колко е голе̋мо физическото адресно пространство при компјутрите PDP-11?
- Младшите модели не̋мат MMU и физическото адресно пространство е сѫщото като виртуалното.
- Младшите модели на PDP-11 сѫ едно-потребителски компјутри.
- При средните модели физическите адреси сѫ 18-битови и размерът на физическото адресно пространство е 256 К бајта (2 на степен 18 бајта).
- При старшите модели физическите адреси сѫ 22-битови и размерът на физическото адресно пространство е 4 М бајта (4 мегабајта, 2 на степен 22 бајта).
- При всички модели горните 8 К бајта от физическото адресно пространство сѫ заделени за входно-изходната страница.
- Остана̨лата част на физическото адресно пространство е свободна за разполагане на физическа оперативна памет там.
- При средните модели 248 К бајта е максималнијът размер на наличната физическа оперативна памет.
- Характерно за архитектурата на PDP-11 е това, че размерът на физическото адресно пространство (то е 18-битово или по-голе̋мо) надвишава размерът на виртуалното адресно пространство.
- При PDP-11, MMU-то (динамичната преадресација) дава на CPU-то възможност да гледа по це̋лото физическо адресно пространство, като пренастројва и променја виртуалното адресно пространство.
- Виртуалната страница е доста голе̋ма по размер - 8 K бајта.
- А пък наличната физическа оперативна памет при PDP-11 е цѐнен ресурс,
- при положение, че средните и старшите модели се рекламират като много-потребителски компјутри.
- Физическата оперативна памет се разпределја за ползване по̀ на дребно - на парчета по 128 бајта.
- Едно такова парче се определја от съвпадащи старши битове на физическијът адрес, след като отрежем младшите 7 бита.
- Една виртуална страница (8 К бајта) може да съдържа 64 на број 128-бајтови парчета.
- Колко точно такива парчета сѫ назначени за виртуалната страница - това може да се укаже със 6 бита.
- Схема на 16-битов виртулен адрес при PDP-11:
P P P L L L L L L Λ Λ Λ Λ Λ Λ Λ ................. Λ Λ Λ Λ Λ Λ Λ => 7 нај-младши бита ..... L L L L L L ............. => 6 средно младши бита P P P ......................... => 3 старши бита
- P: трите старши бита определјат една от 8-те виртуални страници на виртуалното адресно пространство.
- Λ: 7-те нај-младши бита се запазват без проме̋на във физическијът адрес след динамичната преадресација.
- L: 6-те средни бита определјат 128-бајтовото парче от физическата памет. Ако такова парче не е назначено, адресът е невалиден.
- L: тези 6 бита, разглеђани като двоично число без знак, се прибавјат към базовото число от специалнијът регистър PAR за съответната виртуална страница.
- Схема на 18- или 22-битов физически адрес при PDP-11:
b b b b B B B B B B B B B B B Λ Λ Λ Λ Λ Λ Λ ............................. Λ Λ Λ Λ Λ Λ Λ => 7 нај-младши бита b b b b B B B B B B B B B B B ............. => 11 или 15 старши бита
- Λ: 7-те нај-младши бита сѫ копирани от виртуалнијът адрес.
- bB: старшите битове на физическијът адрес се получават, като към базовото число от специалнијът регистър PAP се прибави 6-битовото число LLLLLL от виртулнијът адрес.
- И тъј, MMU-то на PDP-11 във всеки момент предоставја две виртуални адресни пространства:
- едно за системен режим (kernel mode) и друго за потребителски режим (user mode).
- Все̋ко от двете виртуални адресни пространства се състои от осем виртуални страници.
- За все̋ка виртуална страница във MMU-то има по два специална регистъра:
- PAR (Page Address Register). Съдържа старшите битове на физическијът адрес на началото на страницата, след като младшите седем бита сѫ отсечени.
- PDR (Page Descriptor Register). Описва виртуалната страница.
- CPU-то казва на MMU-то дали достѫпът до виртуалната страница изобщо е разрешен.
- CPU-то казва на MMU-то дали във виртуалната страница е разрешено писане (е разрешена проме̋на).
- CPU-то казва на MMU-то колко 128-бајтови парчета физическа памет сѫ заделени за виртуалната страница.
- CPU-то казва на MMU-то дали тези 128-бајтови парчета физическа памет сѫ разположени в началото или в крајът на виртуалната страница.
Удобно е виртуална страница, използвана за стек (stack), да започва от крајът на адреснијът диапазон. - MMU-то казва на CPU-то дали виртуалната страница е била променјана.
- Освен това, има не̋колко специални регистъра общо за MMU-то, така че:
- CPU-то да може да го пуска MMU-то и да го спира,
- MMU-то да може да каже на CPU-то защо виртуален адрес е невалиден и как да се излезе от ситуацијата.
- Резјуме́: Какво позволјава MMU-то на PDP-11? За какво се ползва то?
- Физическото адресно пространство да е по-голе̋мо от виртуалното адресно пространство, което е ограничено до 64 K бајта.
- Изолиране на потребителите един от друг.
- Базовијът сегмент и стекът може да започват от едни и сѫщи виртуални адреси за кој да е потребител.
- След динамичната преадресација получените физически адреси ще сѫ различни за различните потребители.
- Един конкретен потребител изобщо не може да виђа физическата памет извън показаното в неговото виртуално адресно пространство.
- В рамките на обслужването на един потребител.
- На един потребител при нуђа може да му бѫде заделена физическа оперативна памет,
повече отколкото тој може в даден момент да виђа през виртуалното си адресно пространство.
- Виртуалното адресно пространство е 64 К бајта.
- А може да има и 100 K бајта налична физическа оперативна памет, свободна за разпределение.
- MMU-то на PDP-11 позволјава презаређане на виртуални страници, така че в различни моменти една виртуална страница да гледа към различни сегменти на физическата оперативна памет.
- На един потребител при нуђа може да му бѫде заделена физическа оперативна памет,
повече отколкото тој може в даден момент да виђа през виртуалното си адресно пространство.
- Обслужване на повече потребители, отколкото наличната физическа оперативна памет без MMU би позволила.
- Физическа оперативна памет е цѐнен ресурс, подлежащ на разпределение међу потребителите съобразно техните нуђи и приоритети.
- Парче физическа оперативна памет, обикновено с размер на виртуална страница, което е назначено на потребител в състојание на очакване на нещо или на потребител с нисък приоритет, може да бѫде записано на дискът в специален фајл (swap file), без този "ощетен" потребител да "съзнава" какво става, и ме̋стото във физическата оперативна памет да се даде на друг потребител.
- В моментът, когато "ощетенијът" потребител отново се "събуди" за работа, неговото виртуално адресно пространство се заређа в MMU-то, но онова парче памет, което е било записано на дискът в специалнијът фајл, не се връща във физическата памет.
- Виртуалнијът адрес, којто сочи към него, ще бѫде невалиден.
- Може да не се случа̨т обръщенија към тази невалидна виртуална страница, којато отдавна е била изгонена от физическата оперативна памет на дискът. Тја ще си остане на дискът.
- Но ако има обръщение към неја̨, MMU-то ще рапортува невалиден адрес,
а операционната система ще се сети какво да направи.
- Потребителјът ще мине в състојание на очакване.
- Ще му бѫде заделена нужната физическа оперативна памет.
- На това ново ме̋сто ще бѫде прочетена от дискът исканата виртуална страница.
- Виртуалната таблица ще бѫде променена, така че тази виртуална страница да гледа към това ново ме̋сто.
- Потребителјът ще мине в състојание на готовност.
- Ако настане момент този потребител пак да отстѫпи назад и да даде предимство на други, и ако при това физическа оперативна памет, заделена за тази виртуална страница, тре̋бва пак да бѫде освободена за други нуђи, операционната система ще провери дали тази виртуална страница е била променјана, докато е пребивавала във физическата оперативна памет.
- Ако не е била, парчето физическа памет просто се освобођава.
- Но ако е била променјана, парчето физическа памет се освобођава, едва след като записът върху дискът се опресни.
- (.. скриј го PDP-11 ..) (.. скриј го PDP-11 ..)
- (.. скриј ја̨ динамичната преадресација ..) (.. скриј го това по средата на швстата беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- Това, което се слага по средата међу CPU-то (централнијът процесор) и външнијът за него све̋т, е MMU-то.
- ►► Общо виртуално адресно пространство за це̋лата система (.. покажи ..)
-
▼▼
Общо виртуално адресно пространство за це̋лата система
(.. скриј ..)
- В предишнијът подраздел навле̋зох в не̋кои подробности за MMU-то на PDP-11.
- Но първото MMU, което ми е попадало, е това за IBM/System-370.
- Тука нај-напред ще ги сравнја̨ накратко.
- MMU-то на PDP-11 изобразјава малко виртуално адресно пространство върху по-голе̋мо физическо адресно пространство.
- При IBM/370 физическото адресно пространство реално е по-малко от виртуалното.
- MMU-то на PDP-11, както и всички по-нови MMU-та, предоставјат отделни виртуални адресни пространства за различните режими на CPU-то - системнијът и потребителскијът (kernel-user mode).
- MMU-то на IBM/370 предоставја само едно виртуално адресно пространство.
- MMU-то на IBM/System-370 е тре̋бвало да поддържа защитата по 4-битов клјуч, наследена от IBM/System-360.
- MMU-то на PDP-11 позволјава разрешенијът диапазон на адресите в една виртуална страница да е по-малък от самата виртуална страница.
Физическата памет се разпределја на парчета по 128 бајта. - При IBM/360/370 паметта се разпределја само по цели страници, 2 K бајта все̋ка.
- При PDP-11, MMU-то е част от архитектурата на компјутърът от самото начало.
- При IBM/360/370, MMU-то идва като късно допълнение на вече установила се сѫществуваща архитектура.
- Затова, при въвеђането на разширената архитектура IBM/370, първата работа на разработчиците на системнијът софту̌ер е да се пусне натрупанијът за IBM/360 софту̌ер, системен и приложен, и то с минимални промени.
- Усилијата сѫ били насочени към виртуализација.
- Физическата оперативна памет е да кажем 512 K бајта (половин мегабајт).
Модели на IBM/370 с памет повече от един мегабајт мај не сѫ пускали. - Във дисков фајл (page file) се моделира виртуална памет да кажем два мегабајта.
То и дисковото пространство е кът.
Максималнијът размер е 16 M бајта. - Старата система - тази, којато е работила години наред на IBM/System-360 и којато не подозира за такива неща като MMU, динамична преадресација и виртуални адреси, се пуска да работи при памет два мегабајта.
- Само дето тази памет е виртуална.
- Це̋лата виртуална памет ја̨ има на дискът.
- Виртуалните страници, които се ползват в моментът, сѫ заредени във физическата оперативна памет, и MMU-то динамично преобразува виртуалните адреси в реални физически адреси.
- В не̋какъв момент се случва обръщение към виртуална страница, којато не е заредена във физическата оперативна памет,
- MMU-то ще съобщи за това събитие на CPU-то чрез прекѫсване.
- В случајът на IBM/370 това прекѫсване ще бѫде прихвана̨то и обработено от ново-написанијът системен софту̌ер.
- MMU-тата на IBM/370 и на PDP-11 сѫ истински MMU-та,
- Едно истинско MMU ще помогне на системнијът софту̌ер да реши која виртуална страница између заредените в паметта да бѫде изгонена оттам, за да се освободи ме̋сто за ново-поисканата виртуална страница.
- Ще бѫде изгонена тази, към којато не е имало обръщение нај-отдавна.
- MMU-то ще каже дали тази страница е била променјана по време на престојът си във физическата оперативна памет.
- Ако е била променјана, нејнијът запис върху дискът ще се опресни.
- След това исканата виртуална страница - тази, којато е предизвикала прекѫсването, ще бѫде заредена от дискът на освободеното ме̋сто във физическата оперативна памет, и изпълнението ще продължи от ме̋стото на прекѫсване.
- Прекѫсна̨тата програма не̋ма да забележи прекѫсването.
- Ново-написанијът системен софту̌ер тре̋бва да прихваща и други неща от старата система.
- Командите за работа с 4-битовите клјучове за защита тре̋бва да бѫда̨т прихващани.
- Тези клјучове важа̨т за виртуалните страници, сѫществуващи само като копие в дисковијът фајл.
- Командите за старт на вход-изход и прекѫсванијата откъм системата за вход-изход тре̋бва да бѫда̨т прихващани,
- защото буферите за вход-изход требва да остана̨т във физическата оперативна памет.
- Още нещо. Тези буфери имат различни виртуални и физически адреси, а системата за вход-изход тре̋бва да знае само физическите адреси.
- Физическата оперативна памет е да кажем 512 K бајта (половин мегабајт).
- Освен IBM/370, не знаја̨ друг случај, когато при виртуална памет и "истинско" MMU
да се поддържа общо виртуално адресно пространство за це̋лата система.
- При IBM/370 това се е наложило, за да може бързо да се пусне сѫществуващ и познат на потребителите софту̌ер на модел с модифицирана архитектура.
- (.. скриј го общото виртуално адресно пространство ..) (.. скриј го това по средата на швстата беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ►► Всеки потребител с отделно виртуално адресно пространство (.. покажи ..)
-
▼▼
Всеки потребител с отделно виртуално адресно пространство
(.. скриј ..)
- В предишнијът подраздел показах кое е било нај-малкото, което разработчиците на системнијът софту̌ер на IBM/System/360/370 е тре̋бвало да направја̨т, за да използват новијът харду̌ер - MMU-то.
- Осигурили сѫ голе̋мо виртуално адресно пространство.
- На първо време - едно за це̋лата система.
- Следващата стѫпка е да се осигури отделно виртуално пространство за всеки потребител.
- Освен при IBM/370, при другите системи с "истинско" MMU това е било първата стѫпка.
- Върху специален дисков фајл системата моделира не̋колко виртуални адресни пространства - по едно за потребител.
- Все̋ка виртуална страница, записана в специалнијът фајл, се идентифицира не само с виртуалнијът си адрес, но и с идентификаторът на потребителјът.
- Всеки потребител получава свое виртуално адресно пространство.
- Но, разбира се, не с максималнијът размер (16 M бајта при IBM/370), а само толкова, колкото му е нужно.
- Старото ограничение - 15 - за бројът на едновременно обслужваните потребители, наложено от 4-битовијът клјуч за защита при IBM/360, отпада.
- Специалнијът дисков фајл може да съдържа страниците на повече от 15 виртуални адресни пространства.
- Потребителите сѫ изолирани един от друг - всеки виђа само своето виртуално адресно пространство.
- Във все̋ка архитектура MMU-то си има особености.
- Обобщение на особеностите при IBM/370.
- Отделно виртуално адресно пространство за всеки потребител е втора стѫпка при IBM/370, докато при другите е първа стѫпка и се подразбира.
- MMU-то при IBM/370 тре̋бва да се съобразјава с 4-битовијът клјуч за защита, наследен от IBM/370.
- Развитието на системнијът софту̌ер при IBM/370 е върве̋ло в две посоки:
- Старите операционни системи, които потребителите добре познават от IBM/360, се модифицират така, че всеки потребител в термините на старата система да получи свое виртуално адресно пространство.
- Разработена е нова операционна система VM/370, којато може да обслужва много потребители.
- Разбира се, програми мога̨т да се изпълнјават непосредствено на операционната система VM/370.
- VM е съкращение на Virtual Machines.
- Системата VM/370 може да играе ролјата на домакин, като потребителите ӥ сѫ ӥ гости.
- Като домакин тја може да предостави на всеки свој гост отделна виртуална машина - отделен виртуален компјутър.
- Архитектурата на предоставената на гостът виртуална машина - IBM/360 или IBM/370, както и конфигурацијата, е по избор.
- Системата VM/370 като домакин симулира за гостът избраната от него виртуална машина.
- За домакинът VM/370 един гост е един потребител.
- Но гостът може да пусне на својата си виртуална машина каквато си иска опрационна система - стара (DOS/360, OS/MFT, OS/MVT) или нова (т.е. модифицирана стара).
- стара, дълго време експлоатирана на IBM/360, или
- нова, за IBM/370 - с едно виртуално адресно пространство или с не̋колко такива.
- Така на својата си виртуална машина гостът може да обслужва свои потребители.
- Накратко, новата операционна система VM/370 предоставја на всеки свој потребител, когото аз тука наричам гост, не само и не толкова отделно виртуално адресно пространство, а отделна виртуална машина.
- Основна грижа на разработчиците на системнијът софту̌ер за IBM/370 е била да не налагат промени в потребителскијът софту̌ер, којто е бил дълго време в експлоатација на IBM/360.
- (.. скриј ги отделните виртуални адресни пространства ..) (.. скриј го това по средата на швстата беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ►► Потребители, сесии, процеси и нишки (.. покажи ..)
-
▼▼
Потребители, сесии, процеси и нишки
(.. скриј ..)
- Едно време - при IBM/System/360/370, при пакетната обработка и преди системата Unix - тези понјатија не бе̋ха̨ добре определени.
- В предишните раздели и подраздели на тази беседа употребјавах не̋какво недобре дефинирано понјатие потребител.
- При пакетната обработка (batch procesisng) точната дума беше job, но не мога̨ да намерја̨ подходјаща българска дума за job.
- Не̋кога думата job ја̨ превеђахме на български и на руски с думата задание.
- Думата задание не се вписва добре в контекстът на настојащата беседа.
- Затова досега пишех потребител.
- Но настана̨ време понјатијата да се уточнја̨т.
- Уточнението дојде със системата Unix.
- Да напомнја̨, че виртуална памет без дискова памет нема.
- На виртуалната памет е посветена настојащата беседа, а на дисковата памет - предишната.
- В предишната беседа мај бе̋х написал, че без дисковата памет и системата Unix ја̨ не̋ма.
- Потребителите (users).
- Описанието на потребителите се намира в "зорко охранјаван" фајл на системнијът диск.
- В нашите модерни времена описанието на потребителите може да се намира в не̋кој облак тъмен.
- Това значи да се намира на диск на не̋кој сървър, разположен в не̋која точка от глобусът или от космосът.
- Сървърът е мощен компјутър.
- Облачността на глобалната мрежа се състои от сървъри, които менја̨т локацијата си като стратегически јадрени ракети.
- В настојащата си беседа облачността ще ја̨ игнорирам.
- Все пак, аз пиша̨ предимно за мина̨лото.
- Един потребител се идентифицира с името си (username).
- Потребителјът си има и парола.
- Потребителјът е собственик на не̋кои фајлове на дискът, и към те̋х тој има пълен достѫп.
- Към други фајлове един потребител може да има ограничен достѫп, или пък може да не̋ма никакъв достѫп.
- Този важен аспект - достѫпът на потребителите до дисковите фајлове, не̋ма отношение към виртуалната памет.
- Може би тре̋бваше да бѫде разгледан в предишната беседа.
- Как да е. За достѫът на потребителите до дисковите фајлове - толкова.
- Описанието на потребителите се намира в "зорко охранјаван" фајл на системнијът диск.
- Сесиите.
- Потребителјът отварја и затварја сесии.
- Отварјането на сесија се нарича LogIn или SignIn,
- а затварјането - LogOut или SignOut.
- От гледна точка на потребителјът в рамките на сесијата тој изпълнјава програми - потребителски програми, приложни програми, приложенија, applications.
- Например аз сега като пенсионер на лаптопът си нај-често изпълнјавам две приложенија - брау̌зерът (the internet browser), с којто ровја̨ из интернет, и редакторът, с којто въвеђам текстовете на html.
- Процесите.
- За изпълнението на все̋ка компјутърна програма (вклјучително на все̋ко приложение), операционната система пуска процес.
- Един процес може да пуска други процеси.
- В повечето случаи, самата операционна система работи като взаимодејстващи си процеси.
- Един процес може сам да си завърши (to terminate).
- Може и привилегирован процес да го терминира (to be terminated).
- Понјатието процес е нај-важното във връзка с MMU-тата. тоест в контекстът на настојащата беседа.
- Процесът е това нещо, което има свое отделно виртуално адресно пространство.
- Процесите, работещи едновременно, се конкурират един друг за ресурсите на компјутърът.
- Обаче процесите сѫ изолирани един от друг в оперативната памет.
- Когато CPU-то превклјучва от един процес на друг, CPU-то превклјучва от едно виртуално адресно пространство на друго.
- Все̋ка сесија се представја със својът базов процес.
- Когато потребителјът отвори сесија, за неја̨ се пуска процес - базов процес за сесијата.
- За изпълнението на разни приложенија в рамките на сесијата, този базов процес пуска други процеси.
- Игнорирајки детајли, базовијът процес на сесија можете да си го мислите като интерпретатор на команди или като manager на екранът.
- Нишките (threads).
(.. advanced topic .. за напредна̨ли ..)
- Думата нишка идва като съкращение на изразът нишка на изпълнение (execution thread).
- Нишките сѫ тези, които се конкурират за "вниманието" на CPU-то.
- Поне̋кога сложни програми се нуђаја̨т от не̋колко нишки, които се изпълнјават едновременно на CPU-то.
- Ако две нишки сѫ част от един и сѫщ процес, то те работја̨т в едно и сѫщо виртуално адресно пространство.
- Процесът може да си го мислите като нишка, но не каква да е, а нишка със собствено виртуално адресно пространство.
- Един процес може да пусне друг процес - друг отделен процес с отделно виртуално адресно пространство.
- Но сѫщо така, един процес може да пусне друга нишка във своето виртуално адресно пространство.
- Новата нишка ще е част от процесът, којто ја̨ е пусна̨л.
- Тја сѫщо така може да пусне друга нишка в сѫщото виртуално адресно пространство, тоест друга нишка към сѫщијът процес.
- Нишките, принадлежащи към един и сѫщ процес, не сѫ изолирани една от друга, понеже ползват общо виртуално адресно пространство.
- Забележка. Коректното взаимодејствие међу нишките в един процес изисква специални уменија у програмистът.
- Владеенето на multi-threading-ът (много-нишковото програмиране) следва изрично да се објави в CV-то.
- Ако работата изисква multi-threading, това умение се проверјава на интервјутата за работа.
- Disclaimer. Разпределението на работата върху много компјутри, разположени близо или далеч един от друг, е отвѫд предметът на беседата.
- (.. скриј ги процесите и нишките ..) (.. скриј го това по средата на швстата беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- Едно време - при IBM/System/360/370, при пакетната обработка и преди системата Unix - тези понјатија не бе̋ха̨ добре определени.
- ◄► (.. скриј го това по средата ..) (.. свиј го ..) (.. разгъни го ..) (.. скриј ја̨ шестата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ►► Нещо като заклјучение (.. покажи го заклјучението ..) (.. разгъна̨то ..)
-
▼▼
Нещо като заклјучение
(.. скриј го ..)
(.. свиј го ..)
(.. разгъни го ..)
- ◄► Като заклјучение: За какво служи виртуалната памет.
- ►► Физическото адресно пространство да е по-голе̋мо от виртуалното (.. покажи ..)
-
▼▼
Физическото адресно пространство да е по-голе̋мо от виртуалното
(.. скриј ..)
- Такъв е случајът при 16-битовите компјутри.
- При те̋х виртуалното адресно пространство е твърде малко - само 64 К бајта.
- Динамичната преадресација към физически адреси може да предостави достѫп до оперативна памет с по-голе̋м размер.
- В тази беседа вече бе разгледано MMU-то на PDP-11.
- Тука тре̋бва да спомена̨ Intel 8086/8088 - процесорите, използвани в първите персонални компјутри на IBM.
- За разлика от PDP-11, MMU-то при 8086/8088 не си поставја други цели освен разширението на физическото адресно пространство.
- Много-потребителска работа не се осигурјава.
- (.. скриј го голе̋мото физическо адресно пространство ..) (.. скриј го заклјучението към швстата беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ►► Голе̋мо виртуално адресно пространство (.. покажи ..)
-
▼▼
Голе̋мо виртуално адресно пространство
(.. скриј ..)
- Обърнете внимание на две клјучови думи: голе̋мо и виртуално.
- Голе̋мото адресно пространство е виртуално.
- Да, то може да е виртуална памет с огромен размер.
- Може да събере данни за обработка, много повече от преди.
- Преди динамичната преадресација и MMU-тата толкова данни не можеха̨ да се побера̨т в оперативната памет.
- Програмистът тре̋бваше да се погрижи да ги организира данните в дисков фајл.
- Сега на програмистът ще му е по-лесно. Ще разположи данните във виртуалната памет и те "наглед" постојанно ще сѫ му под рѫка.
- Обаче това е само улеснение за програмите и за програмистите.
- Природата не може да бѫде излъгана.
- Системнијът софту̌ер с помощта на MMU-то ще моделира голе̋мата виртуална памет върху дискът.
- Ще го прави скрито от програмистът, којто не̋ма да има грижата.
- Виртуално адресно пространство е голе̋мо.
- Да, то може да е виртуална памет с огромен размер.
- Програмата може да е толкова голе̋ма, че преди динамичната преадресација и MMU-тата да не е можела да се побере в оперативната памет.
- Програмистите сѫ разделјали големите програми на припокриващи се сегменти.
- Върнете се да прочетете този подраздел.
- Сега програмата веројатно ще се събере в голе̋мата виртуална памет и програмистът не̋ма да има грижата да ја̨ сегментира.
- Обаче това е само улеснение за програмистите.
- Природата не може да бѫде излъгана.
- Системнијът софту̌ер с помощта на MMU-то ще моделира голе̋мата виртуална памет върху дискът.
- Вместо презаређане на програмни сегменти, определени от програмистът, ще се случва автоматично презаређане на виртуални сраници.
- Всеки процес си има свое виртуално адресно пространство, и то е виртуално.
- Процесът работи не с реални физически адреси, а с виртуални адреси, които подлежа̨т на автоматично динамично преобразуване в реални физически адреси от MMU-то.
- Преди, без динамична преадресација, линкерът тре̋бва да настрои произвеђаната от него изпълнима програма (executable) към адресът на разделът в оперативната памет, в којто раздел executable-ът ще се пусне да се изпълнјава.
- Сега, линкерът може да настрои произвеђанијът от него executable към уговорен фиксиран адрес (обикновено над ме̋стото, заделено за stack).
- Този предварително уговорен адрес е виртуален.
- Тој е адрес във виртуалното адресно пространство за този процес.
- На какъв физически адрес отговарја - за това не тре̋бва да се грижим.
- Това ще стане јасно едва при пускане на програмата.
- При различни пусканија на програмата физическијът адрес може да е различен.
- Фиксиран е виртуалнијът адрес.
- (.. скриј го голе̋мото виртуално адресно пространство ..) (.. скриј го заклјучението към швстата беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ►► Изолација на процесите един от друг (.. покажи ..)
-
▼▼
Изолација на процесите един от друг
(.. скриј ..)
- Всеки процес работи във свое виртуално адресно пространство и така е изолиран от другите процеси.
- Бъгава или злонамерена потребителска програма не може да пише из паметта на другите процеси или на операционната система, защото не̋ма достѫп.
- Процесът виђа само това, което му се показва в неговото виртуално адресно пространство.
- Към все̋ка страница от виртуалното адресно пространство на процесът достѫпът може да е разрешен, да е напълно забранен, или да е само за четене.
- Процесът не̋ма възможност да навреди на другите.
- Да не може да се навреди на другите - това е основното в много-потребителската работа на компјутърът.
- (.. скриј ја̨ изолацијата на процесите ..) (.. скриј го заклјучението към швстата беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- Всеки процес работи във свое виртуално адресно пространство и така е изолиран от другите процеси.
- ►► Динамични библиотеки (.. покажи ги ..)
-
▼▼
Динамични библиотеки
(.. скриј ги ..)
- Върнете се да прочетете този подраздел.
- Динамични библиотеки. Целијът израз е библиотеки с динамично свързване.
- DLLs: Dynamically Linked Libraries.
- Наричани още: shared objects, shared libraries или разделјаеми библиотеки.
- За функционалността на DLL-ите допринасја не само динамичната преадресација (MMU-тата), но и възможността, којато съвременните компјутърни архитектури предоставјат, компилаторите да генерират само позиционно независим код (PIC: position independent code).
- Една динамична библиотека и един executable си приличат много.
- Резултат сѫ от работата на линкерът.
- Съдържат или код (машинни инструкции - код, изпълним от CPU-то), или данни.
- Мога̨т да се заређат в оперативната памет за изпълнение.
- Обаче от executable може да се стартира процес, а от динамична библиотека не може.
- Един executable објавјава на операционната система от која входна точка да се стартира процесът.
- Една динамична библиотека не̋ма специална входна точка.
- Обръщенијата към съдържащите се в неја̨ подпрограми и данни тре̋бва да дојда̨т от други програми, а не от операционната система.
- Тези обръщенија се свързват и настројват по време на заређането на динамичната библиотека във виртуалното адресно пространство на процесът.
- Когато една динамична библиотека се заређа във виртуалното адресно пространство на процес, нуђаещ се от неја̨, намира ӥ се там ме̋сто.
- Ако сѫщата динамична библиотека се зареди във виртуалното адресно пространство на друг процес, тја може да бѫде наместена на друг виртуален адрес.
- Двата процеса използват едно и сѫщо копие на динамичната библиотека във физическата оперативна памет.
- Затова е важно подпрограмите от динамичната библиотека да сѫ в позиционно независим код.
- (.. скриј ги динамичните библиотеки ..) (.. скриј го заклјучението към швстата беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ►► Виртуални машини (.. покажи ..)
-
▼▼
Виртуални машини
(.. скриј ..)
- Думата виртуален означава симулиран или моделиран, а виртуализација - симулација или моделиране.
- А думата машина означава компјутър, разбира се.
- За системата VM/370, којато предоставја гостуващи виртуални машини с архитектура, подобна на архитектурата на компјутърът-домакин, стана̨ дума тука.
- Идејата за виртуализација на оперативната памет - идејата за виртуална памет, се пренасја към целијът компјутър - към це̋лата машина.
- Појавјава се идејата за виртуална машина.
- На пръв поглед - отсам хоризонтът, тре̋бва да се спомена̨т
виртуалните машини, които симулират-моделират реални машини.
- Реална машина - означава машина, сѫществуваща в харду̌ерно изпълнение.
- След системата VM/370, вече има много приложен софту̌ер за виртуални машини.
- Има даже софту̌ер, којто симулира машина със съвсем друга архитектура.
- Например, виртуална машина с архитектура VAX, работеща на машина-домакин, којато не е VAX.
- Виртуалните машини имат широко приложение
- както за тестване на програми, когато целевијът харду̌ер не е наличен,
- така и за мултиплициране, когато един нов мощен модел идва да замени стари машини в не̋колко обработки.
- А оттатък хоризонтът, на следващо ниво на абстракција, сѫ
виртуалните машини, сѫществуващи изце̋ло като софту̌ерна идеја, без връзка в никакъв харду̌ер.
(.. Това излиза от темата на настојащата беседа ..)
- На първо ме̋сто следва да се спомене виртуалната машина на езикът Java - JVM: Java Virtual Machine.
- Тја изпълнјава програми на езикът Java.
- Програмите на езикът Java се изпълнјават на такава машина.
- За всеки от езиците за програмиране, които не се компилират, а се интерпретират, може да се изгради съответна идеја за виртуална машина.
- Освен Java, такива езици сѫ PERL, Python, PHP, LISP и други.
- На първо ме̋сто следва да се спомене виртуалната машина на езикът Java - JVM: Java Virtual Machine.
- (.. скриј ги виртуалните машини ..) (.. скриј го заклјучението към шестата беседа ..) (.. свиј го ..) (.. разгъни го ..) .. към началото ..
- ◄► (.. скриј го заклјучението ..) (.. свиј го ..) (.. разгъни го ..) (.. скриј ја̨ шестата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
- ◄► (.. скриј ја̨ шестата беседа за динамичната преадресација ..) (.. свиј ја̨ ..) (.. посвиј или поразгъни ..) (.. разгъни ја̨ ..) .. към началото ..
►► 8. [Draft] Хуманната аритметика на компјутър (.. покажи ја̨ седмата беседа ..) (.. разгъна̨то ..) .. към началото ..
- Колкото по̀ остаре̋вам, толкова по̀ се вдетине̋вам.
- С това ще се упражнјавам на JavaScript.
- Ще уча̨ компјутърът на сѫщата аритметика, както децата в началното училище.
- May appear in the future: Не е написано още. Ја̀ доживеја̨ да го напиша̨, ја̀ не.
▼▼ 8. [Draft] Хуманната аритметика на компјутър (.. скриј ја̨ седмата беседа ..) (.. свиј ја̨ ..) (.. разгъни ја̨ ..) .. към началото ..
-
In development: Не е написано още.
- ◄►
- ◄►
- ◄► (.. скриј ја̨ седмата беседа за хуманната аритметика ..) (.. свиј ја̨ ..) (.. посвиј или поразгъни ..) (.. разгъни ја̨ ..) .. към началото ..
►► 9. Препратки (references) (.. покажи ги ..) .. към началото ..
▼▼ 9. Препратки (references) (.. скриј ги ..)
- christotamarin.blog: Житејска програма
- christotamarin.blog: XT Keyboard Layouts Reference: Клавиатури с разширена кирилица
- christotamarin.blog: Virtual Keyboard and some other tools
- christotamarin.blog: Принципи на моите възгледи за мина̨лото
►► 10. Коментари, въпроси и отговори (comments, Q&As) (.. покажи ги коментарите ..) (.. разгъна̨ти ..) .. към началото ..
▼▼ 10. Коментари, въпроси и отговори (comments, Q&As) (.. скриј ги ..) (.. свиј ги ..) (.. разгъни ги ..) .. към началото ..
Ако има въпрос или коментар, на којто тре̋бва да отговорја̨, ще препиша̨ въпросът или коментарът тука и ще отговорја̨ тука.
- ►► ::christo.tamarin, 2023-04-13 20:34:: The history of IT at a glance (.. покажи тука ..) (.. разгъна̨то ..) (.. покажи във facebook: .. там .. или там ..) .. към началото ..
-
▼▼
::christo.tamarin, 2023-04-13 20:34:: The history of IT at a glance
(.. скриј ..)
(.. свиј ..)
(.. разгъни ..)
(.. покажи във facebook: ..
там .. или
там ..)
.. към началото ..
- ◄► Историјата на информационните технологии накратко Този текст не е завършен. Ја̀ го завърша̨, ја̀ не.
- ►► Програмисти (.. покажи ..)
-
▼▼
Програмисти
(.. скриј ..)
- Сме̋та се, че първата програмистка е била Ада Лъвлејс (Ada Lovelace), дъщерја на поетът Бајрон и сътрудничка на Чарлз Бабиџ (Charles Babbage).
- Обаче през животът си изпълнение на своја програма тја не е виђала, понеже компјутърът на Чарлз Бабиџ не е вле̋зъл в дејствие.
- Реално първите на светът програмисти сѫ настројчиците на жакардовите тъкачни станове.
- ►► Бази данни (.. покажи ..)
-
▼▼
Бази данни
(.. скриј ..)
- Архиви и библиотеки сѫ първите бази данни.
- Следващијът сѫществен момент в развитието е холеритовата техника на фирмата IBM от крајът на 19-ти и през 20-ти век.
- Бази данни в компјутърната ера.
- Първо ще спомена̨ базите данни по јерархичнијът или по мрежовијът модел.
- Коболистите (програмистите на COBOL) бе̋ха̨ наложили езикът CODASYL.
- Не̋ма мај такива неща вече.
- Сега все̋ка фајлова система може да се сме̋та за јерархична база данни.
- Наложи се релационнијът модел на базите данни и езикът SQL.
- ►► Калкулатори (.. покажи ..)
-
▼▼
Калкулатори
(.. скриј ..)
- Сметала̀.
- Едно време във все̋ка класна стаја в началното училище (в отделенијата) имаше голе̋мо сметало,
- а всеки второкласник имаше малко сметало като учебно пособие.
- Имаше и уроци за работа с такива сметала̀.
- Въпреки това българското образование се провалјаше при усвојаването на уменијата за работа със сметалата.
- Магазинерите в Българија сме̋таха̨ с химически молив върху амбалажна хартија.
- Амбалажната хартија, с којато магазинерът ще ти увие буцата сирене, обикновено съдържаше сметката на предишнијът клиент.
- Не така беше в Русија.
- Когато през 80-те ходех в командировка в Москва, тамошните магазинери работеха̨ срѫчно със сметала̀.
- Логаритмична линијка и логаритмични таблици.
- Едно време в гимназиите се учехме да сме̋таме с логаритмична линијка и логаритмични таблици.
- Тогава това беше необходимо за инженерното дело.
- На средношколските олимпиади по математика и физика разрешаваха̨ да си носим логаритмични линијки.
- Сега всичко това е out-of-date, остаре̋ло, изместено от компјутрите и електронните калкулатори.
- Механични калкулатори.
- При такъв калкулатор се натискат клавиши и се върти рѫчка.
- Често сѫ снабдени и със звънчета.
- В много филми за старото американско време може да се види, че във всеки американски магазин или бар има такъв калкулатор като касов апарат.
- Баща ми беше счетоводител и имаше на разположение такъв калкулатор.
- Едно завъртане на рѫчката напред - събиране.
- Завъртане назад - извађане.
- Пет завъртанија напред - умножаване на пет.
- Имаше бројач на завъртанијата.
- Ако искаш да умножиш по пет, но си се засилил и си завърте̋л рѫчката шест пѫти, завърташ веднѫж назад.
- Имаше и начин за извършване на деление, но в нашето село никој не знаеше как става това.
- Електро-механични калкулатори.
- За разлика от чисто механичните, тези си не̋мат рѫчка, а само клавиши.
- Имат си и електромоторче[та] за въртене на регистрите.
- Изполвал съм такъв - немско производство. Много удобен беше за работа.
- Електронни калкулатори.
- Тука има вече българска следа, даже две такива следи.
- Иначе в областта на ΙΤ друга българска следа има само при компјутърните вируси.
- Но за те̋х изобщо не̋ма да пиша̨, че ме е срам.
- Първата българска следа не е съвсем българска, ама все пак.
- На Џон Атанасов баща му още като дете роднини го отвели в Щатите.
- Там тој се изучил за инженер и се оженил за американка от ирландски произход, учителка по математика.
- А самијът Џон бил професор по физика в щатскијът университет на Ајова.
- По време на WW2 тој решил да създаде калкулатор за насочване на артилеријскијът огън, изграден върху материалната база на радиотехниката, т.е. електронен калкулатор.
- Наречен бил ABC - Atanassoff-Berry Computer (Berry бил сътрудник на Atanassoff).
- Војната свършила и работата по калкулаторът била заре̋зана, преди тој да бѫде завършен.
- През следващите години във връзка със сѫдебен спор за патенти адвокатите на едната страна по делото изровили информација за ABC.
- Тази информација достигна̨ла до Благовест Сендов, след което на случајът била придадена гласност и в Българија, и в светът.
- При ABC за пръв пѫт електроника била използвана за IT.
- Но все пак, това ABC не е било компјутър, защото ABC не е бил програмируем.
- ABC е бил калкулатор със специално предназначение.
- Втората българска следа в електронните калкулатори.
- Прохођащата българска електроника през 60-те била на световно ниво при настолните електронни калкулатори.
- Построени били заводи в Софија и Силистра.
- Марката ЕЛКА стана̨ла нарицателно за електронен калкулатор в българскијът език.
- Разбира се, българската електроника бързо изостана̨ла, защото не можела да следва прогресът към калкулаторите џобен формат.
- Тука има вече българска следа, даже две такива следи.
- (.. скриј ги сметалата и калкулаторите ..)
- Сметала̀.
- ►► Електроника (.. покажи ..)
-
▼▼
Електроника
(.. скриј ..)
- Електрониката е следваща фаза в развитието на радиотехниката, приложение на радио-техниката не само в радиото.
- Радио-техниката (електрониката) се обособила от електро-техниката след изобретјаването на електронната лампа (1904).
- Технологичнијът прогрес е заменил електронните лампи с транзистори (след 1954), основани на полу-проводници (силициј, германиј, ..).
- За разлика от електронните лампи, при полу-проводниците имало мегдан за миниатјуризација.
- Појавили се интегрални схеми - LSI (Large Scale Integration), после X-LSI (Extra-Large Scale Integration), после XX-LSI, ..
- Сега нано-технологии и XXXX..XX-LSI.
- ►► Компјутри (.. покажи ..)
-
▼▼
Компјутри
(.. скриј ..)
- Конрад Цузе.
- Конрад Цузе.
- ◄► (.. скриј го коментарът ..) (.. свиј го ..) (.. разгъни го ..) (.. скриј ги коментарите ..) (.. свиј ги ..) (.. разгъни ги ..) .. към началото ..
- ►► ::author.unknown, 2023-10-25 09:45:: Историческа справка за нашето поколение (.. покажи ја̨ тука ..) (.. покажи ја̨ във facebook: .. Нежна е нощта .. Българија ..) .. към началото ..
-
▼▼
::author.unknown, 2023-10-25 09:45:: Историческа справка за нашето поколение
(.. скриј ја̨ ..)
(.. покажи ја̨ във facebook: ..
Нежна е нощта ..
Българија ..)
.. към началото ..
- Има хора, които сѫ родени през 50-те и 60-те години.
Отгледани сѫ през 60-те години.
Учили сѫ през 70-те години.
Те сѫ се женили през 80-те години.
Работили сѫ през 80-те и 90-те,
много работја̨т и днес ... - Те си промениха̨ мирогледът през 90-те.
«Виђаха̨ светлината» през 2000-та.
Бе̋ха̨ изненадани през 2010.
И неотказали се през 2020! - Преживели почти
седем различни десетилетија...
два различни века...
две различни хилјадолетија... - От телефон на дълги разстојанија до видео-разговори навсе̋къде по светът,
от филмови ленти и slide-show-та до Youtube,
от винилови плочи до online-музика,
от рѫкописни писма до email, WhatsApp и социални мрежи.
От слушане на мачове по радиото, гледане на черно-бе̋ла телевизија и след това телевизија с висока разделителна способност.
Те ходеха̨ във видеотеката, а сега гледат Netflix.
Знаеха̨ как да отпечатат фотокарта,
имаха̨ първите компјутри, перфокарти, флопи дискове,
а сега имат гигабајти и терабајти на мобилни телефони или iPad.
През це̋лото си детство те носја̨т кѫси панталони, след това дълги панталони, оксфордки, бермуди или мини поли, макси поли, клинове, харем и др.
Обуваха̨ филцове, караха̨ ролери, триколки и велосипеди, мотопеди, бензинови или дизелови коли, а сега карат хибриди или 100% електрически скутери, велосипеди, скутери и коли.
Те избегна̨ха̨ детски паралич, менингит, едра шарка, грип H1N1 и западнонилска треска. - Да! Такива хора сѫ мина̨ли през много, но какъв прекрасен и интересен живот имат!
- Това поколение спокојно може да се нарече «бивши пенсионери»,
които сѫ родени в онзи све̋т на 50-те и 60-те години,
имали сѫ аналогово детство
и дигитален живот на зре̋ла възраст.
Те сѫ един вид «Абракадабра». В буквалнијът смисъл на думата. - Това поколение е живе̋ло и преживе̋ло повече от все̋ко друго в историјата на човечеството във все̋ко измерение на животът.
- Именно това поколение се адаптира към все̋какви промени!
- 👏 Аплодисменти 👏!
За всички представители на особеното поколение,
което беше и си остава уникално, независмо от всичко!
Здраве, Радост, Късмет, Доброта и Щастие!💛🍀💜 - ◄►
::christo.tamarin, 2023-10-25 11:05::
два различни века...
Кое е нашето хилјадолетие?
две различни хилјадолетија...- Дали това, през което европејците сѫ открили Америка?
- Или това, през което американците ще заселја̨т Луната?
- (.. скриј ја̨ историческата справка за нашето поколение ..) (.. скриј ги коментарите ..) (.. свиј ги ..) (.. разгъни ги ..) .. към началото ..
- Има хора, които сѫ родени през 50-те и 60-те години.
- ►► ::christo.tamarin, 2024-04-01 15:34:: Не е била Brigitte Bardot (.. покажи го коментарът ..) .. към началото ..
-
▼▼
::author.unknown, 2023-10-25 09:45:: Не е била Brigitte Bardot
(.. скриј го коментарът ..)
.. към началото ..
- В третата си беседа разказах как през ле̋тото на 1977, докато карах стаж в Търново, избродирах картинка за тракащ принтер.
- Искаше ми се Brigitte Bardot да е позирала на художникът.
- Но се оказа, че това не̋ма как да е възможно.
- Литографијата е рисувана около 1935 от съветскијът художник Е.А.Кибрик.
- (.. скриј го коментарът ..) (.. скриј ги коментарите ..) (.. свиј ги ..) (.. разгъни ги ..) .. към началото ..
- ◄► (.. скриј ги коментарите ..) (.. свиј ги ..) (.. разгъни ги ..) .. към началото ..
(.. развернуть все̇ ..) (.. свернуть все̇ ..) .. to the bottom ..
[Draft] Полиномиально о компьютерах
Перевода на русский не будет.
.. в начало ..
(.. show all ..) (.. collapse all ..) .. to the bottom ..
[Draft] About Computers Polynomially
Not available yet - still in development.
.. to the top ..
No comments:
Post a Comment