Fon Neymanning kompyuter arxitekturasi klassik deb hisoblanadi va aksariyat kompyuterlar uning asosida qurilgan. Umuman olganda, fon Neyman arxitekturasi haqida gap ketganda, ular protsessor modulini dasturlar va ma'lumotlarni saqlash qurilmalaridan jismoniy ajratishni anglatadi. Saqlash g'oyasi kompyuter dasturlari umumiy xotirada kompyuterlarni aylantirishga imkon berdi universal qurilmalarkeng doiradagi vazifalarni bajarishga qodir bo'lganlar. Dasturlar va ma'lumotlar arifmetik mantiqiy qurilma orqali kirish moslamasidan xotiraga kiritiladi. Barcha dastur buyruqlari ulashgan xotira katakchalariga yoziladi va ishlov berish uchun ma'lumotlar ixtiyoriy katakchalarda bo'lishi mumkin. Har qanday dastur uchun oxirgi buyruq o'chirish buyrug'i bo'lishi kerak.
Jon fon Neyman eng yuqori ilmiy unvonlarga sazovor bo'ldi. U aniq fanlar akademiyasi (Lima, Peru), Amerika san'at va fanlar akademiyasi, Amerika falsafiy jamiyati, Lombard fan va adabiyot instituti, Niderlandiya Qirollik Fanlar va Badiiy akademiyasi, Milliy akademiyasining a'zosi etib saylandi. Amerika Qo'shma Shtatlari va boshqa mamlakatlarning ko'plab universitetlarining faxriy doktorlari.
Fon Neyman tamoyillari asosida qurilgan kompyuterlar
1940-yillarning o'rtalarida Mur elektrotexnika maktabida o'z dasturlarini umumiy xotirada saqlaydigan kompyuter uchun loyiha ishlab chiqildi (ing. Mur elektrotexnika maktabi ) Pensilvaniya shtati universitetida. Ushbu hujjatda tasvirlangan yondashuv fon Neyman arxitekturasi deb nomlandi, chunki loyihaning yagona nomlangan muallifi Jon fon Neymandan so'ng, aslida loyihaning muallifligi jamoaviy bo'lgan. Fon Neyman arxitekturasi o'sha paytda yaratilgan ENIAC kompyuteriga xos bo'lgan muammolarni kompyuter dasturini o'z xotirasida saqlash orqali hal qildi. Ko'p o'tmay, loyiha haqidagi ma'lumotlar boshqa tadqiqotchilarga ma'lum bo'ldi.
Oqimlar va jarayonlar.
C++da oqimli sinflar kutubxonasi ikkita asosiy ios va streambuf sinflar asosida tuzilgan, streambuf sinfi kiritish-chiqarish fizik qurilmalari bilan xotirada joylashgan kiritish-chiqarish buferlarni o‘zaro bo‘g‘lanishini va tashkilini ta’minlaydi. Streambuf sinfining metodlarini va ma’lumotlarini dasturchi ochiq ishlatmaydi. Mavjud bo‘lgan sinflar asosida yangi sinflarni yaratishda dasturchiga xam sinfga murojaat etish ruxat etilgan. ios sinfi formal kiritish chiqarish va xatolarni tekshirish vositalarga ega. o Standart oqimlar (istream, ostream, iostream) terminal bilan ishlash uchun xizmat qiladi. o Satrli oqimlar (istrstream, ostrstream, strstream) xotirada joylashtirilgan satrli buferlardan kiritish-chiqarish uchun xizmat qiladi. o Faylli oqimlar(ifstream, ofstream, fstream) fayllar bilan ishlash uchun xizmat qiladi. Oqimli sinflar, ularning metodlari va ma’lumotlari dasturda murojaat etish ruxsatiga ega bo‘ladi, qachonki unga kerakli bosh fayl kiritilgan bo‘lsa.
- iostream.h – ios, ostream, istream uchun.
- strstream.h – strstream, istrstream, ostrstream uchun
- fstream.h – fstream, ifstream, ofstream uchun
Quyidagi ob’ekt-oqimlar dasturda main funksiyasini chaqirish oldidan avvaldan aniqlangan va ochilgan bo‘ladi:
- extern istream cin; //Klaviaturadan kiritish standart oqimi
- extern ostream cout; //Ekranga chiqarish standart oqimi
- extern ostream cerr; //Xatolar xaqidagi xabar chiqarish standart oqimi.
Oqimli sinflar metodlari Oqimdan qiritish uchun istream sinfdagi ob’ektlar ishlatiladi, oqimga chiqarish uchun - ostream sinfdagi ob’ektlar. istream sinfda quyidagi funksiyalar tavsiflangan:
- istream get (char& S) - istream dan S ga simvolni o‘qiydi. Xato xolatida S 0XFF qiymatini oladi.
- int get() - istream dan keyingi simvolni chiqaradi. Faylni oxirini aniqlagach EOFni qaytaradi.
- istream& get(char* buffer,int size,char delimiter=’\n’) - Bu funksiya istreamdan simvollarni chiqaradi va ularni buferga nusxalaydi. Operatsiya yoki faylning oxiriga yetganda, yoki size fayllardan nusxa olgan jarayonda, yoki ko‘rsatilgan ajratuvchini aniqlaganda to‘xtaydi. Ajratuvchi esa nusxalanmaydi va streambuf qoladi. O‘qib bulingan simvollar ketma-ketligi xardoim nul simvol bilan tugatiladi.
- istream& getline(char* buffer,int size, char delimiter=’\n’) - Ajratuvchi oqimdan chiqariladi, lekin, buferga kiritilmaydi. Bu esa satrlarni oqimdan chiqaruvchi asosiy funksiya. O‘kib chiqilgan simvollar nul simvoli bilan ta’momlanadi.
- istream& read(char* buffer,int size) - Ajratuvchilarni qo‘llanmaydi va buferga o‘qilgan simvollar nul simvoli bilan tugamaydi.
- int peek() - istream dan simvolni chiqarmasdan istreamga qaytaradi.
- int gcount() - Formatlanmagan oxirgi kiritish operatsiyasi vaqtida o‘qilgan simvollar sonini qaytaradi.
- istream& putback(S) - Agar get doirasidagi streambuf ob’ektida bo‘sh fazo mavjud bo‘lsa, unda o‘sha yerga S simvoli joylashtiriladi.
- istream& ignore(int count=1,int target=EOF) - Quyidagilar bajarilmaguncha istream dan simvol chiqarilaveradi:
- funksiya count simvollarni chiqarmaguncha;
- target simvoli aniqlanmaguncha;
- faylni oxiriga yetmaguncha.
- ostream sinfida quyidagi funksiyalar tavsiflangan:
- ostream& put(char C) - ostream ga S simvolni joylashtiradi.
- ostream& write(const char* buffer,int size) - Buferda mavjudlarni ostreamga yozadi. Xatoga duch kelmaguncha yoki size simvollarni nusxasi olmaguncha simvollarni nusxasi olinadi. Bufer formatlanmasdan yoziladi. Nol simvollarga ishlov berish boshqa ishlov berishlardan farq qilmaydi. Quyidagi funksiya ishlov berilmagan (binar va matnli) ma’lumotlarni ostreamga uzatadi.
ostream& flush() - streambuf buferni olib tashlaydi. Bu funksiyalardan tashqari istream sinfda >>, ostream sinfda esa << operatsiyalar qayta yuklangan. << va >> operatsiyalar ikkita operandga ega. Chap operandi – bu istream (ostream) sinfning ob’ekti, o‘ng operandi esa – bu dasturlash tilida ko‘rsatilgan tipdagi ma’lumot. Misol: char ch, next, lookahead; while ( cin.get( ch )) { switch (ch) { case '/': // izoxni peek() yordamida tekshirish // agar xa bo‘lsa satr qolganini o‘tkazish next = cin.peek(); if ( next == '/' ) cin.ignore( lineSize, '\n' ); break; case '>': // leksemaga tekshirish >>= next = cin.peek(); if ( next == '>' ) { lookahead = cin.get(); next = cin.peek(); if ( next != '=' ) cin.putback( lookahead ); }
Dostları ilə paylaş: |