Ma'ruza Real vaqt tizimlarining asosiy tushunchalari. Real vaqt tizimlarining tuzilishi, tarkibi va asosiy texnik va texnologik ko'rsatkichlari


POSIX sinxronizatsiya ob'ektlaridan foydalanish



Download 1,9 Mb.
bet104/131
Sana11.04.2022
Hajmi1,9 Mb.
#542699
1   ...   100   101   102   103   104   105   106   107   ...   131
Bog'liq
RVT Ma\'ruza

POSIX sinxronizatsiya ob'ektlaridan foydalanish
Quyidagi dastur standart kiritishdan satrni o'qiydi va uni standart chiqishga chop etadi. Satrni o'qish va uni chiqarish uchun ikkita vazifa (ip) yaratiladi, ularning kodi mos ravishda o'quvchi va yozuvchi funktsiyalari . Vazifalar ularni yaratgan jarayon bilan bir xil manzil maydonida bajarilganligi sababli, ular avtomatik ravishda barcha o'zgaruvchilarni, shu jumladan msgbuf xabar buferini almashadi. Muhim umumiy resurslarga (o'zgaruvchilar bajarildi, msglen, msgbuf) kirishda o'zaro istisno qilishni tashkil qilish uchun mutex mutx sinxronizatsiya ob'ekti ishlatiladi.
#include
#include

/* POSIX-ga mos keladigan tizimlarda kompilyatsiya qiling (masalan, Linux): */


/* ss < fayl_nomi > -lpthread * /
#BUF_LEN 256 ni aniqlang
pthread_mutex_t mutx; /* Ob'ekt sinxronizatsiya mutex yozing */
int bajarildi; /* Ish tugaganligi belgisi */
intmsglen; /* Xabar uzunligi */

char msgbuf[BUF_LEN]; /* Xabar buferi */


/* Xabarni kuting, u kelganda uni ekranda ko'rsating. Funktsiya operatsion tizim tomonidan chaqirilgan mustaqil vazifa sifatida ishlaydi, shuning uchun prototip o'rnatiladi.
argp argumenti ishlatilmaydi. */
bekor * yozuvchi (void * argp)
{
uchun (;;)
{
pthread_mutex_lock(ftmutx); /* " qo'lga olish " mutex */
agar (bajarilgan)
{
/* Joriy vazifa identifikatorini chop etish */
printf("%x mavzu chiqadi\n", (int)pthread_self()); pthread_mutex_unlock(ftmutx); /* " reliz " mutex */ pthread_exit(0); /* tugatish vazifa */
qaytish 0; /* hech qachon */
}
agar (msglen)
{
printf("*>%s\n",msgbuf); /* chiqdi ustida ekran */
msglen=0;
}
pthread_mutex_unlock(ftmutx); /* " bepul " mutex */
/* Vazifani bir xil ustuvorlikka ega tayyor vazifalar qatorining oxiriga qo'ying */ /* bir xil ustuvorlik */
sched_yield();
}
}
/* Xabarni o'qing va uni buferga qo'ying.
Funktsiya operatsion tizim tomonidan chaqirilgan mustaqil vazifa sifatida ishlaydi, shuning uchun prototip o'rnatiladi.
argp argumenti ishlatilmaydi. */
bekor * o'quvchi (void * argp)
{
uchun (;;)
{
pthread_mutex_lock(ftmutx); /* " qo'lga olish " mutex */
agar (!msglen )
{
/* Xabarni o'qing. Ctrl+D yo'q */
agar (ifgets (msgbuf, BUF_LEN, stdin))
sindirish;
msglen = strlen(msgbuf) + 1;
}
pthread_mutex_unlock(ftmutx); /* " bepul " mutex */
/* Vazifani mavzu bilan tayyor topshiriqlar navbatining oxiriga qo'ying */
/* bir xil ustuvorlik */
sched_yield();
}
/* Joriy vazifa identifikatorini chop etish */
printf("Mavzu % x chiqadi\n", (int)pthread_self());
pthread_mutex_unlock(ftmutx); /* "bepul" mutex */
pthread_exit ( 0 ); /* yakuniy vazifa */
qaytish 0; /* hech qachon */
}
int asosiy ()
{
pthread_t _ _ wtid , rtid ; /*vazifa tavsiflovchilari*/
agar (pthread_mutex_init (ftmutx, 0)) /* mutex yaratish */
perror("pthread_mutex_init");
agar (pthread_create (ftwtid, 0, writer,0)) /* yaratish vazifa */
perror("pthread_create");
agar (pthread_create (ftrtid, 0, o'quvchi, 0)) /* yaratish vazifa */
perror("pthread_create");
agar (!pthread _join (rtid, 0)) /* kuting Bitiruv rtid vazifalari */
bajarildi = 1;
pthread_join(wtid, 0); /* kuting Bitiruv aniq vazifalar */
agar (pthread_mutex_destroy (ftmutx)) /* mutexni o'chirish */
perror("pthread_mutex_destroy");
qaytish 0;
}

Agar ushbu dastur ishlayotgan vaqtda tizimdagi vazifalar ro'yxatiga qarasak, ushbu dasturda to'rtta (!) borligini ko'ramiz:



    1. ishlash jarayoni,

    2. mos keladigan "asosiy" vazifa ,

    3. o'quvchi funktsiyasiga mos keladigan vazifa ,

    4. yozuvchi vazifasiga mos keladigan vazifa.

Yuqoridagi dastur quyidagi ma'noda mutlaqo to'g'ri emas. O'quvchi/'yozuvchi funksiyalarining har biri ikkinchi yozuvchi/'o'quvchi funksiyasi faqat sched_yield chaqirilganda mutex mutx chiqishini kutishini taxmin qiladi . Ushbu dastur uchun bu taxmin to'g'ri, lekin umuman olganda, o'quvchi / 'yozuvchi funktsiyasi bajarilgandan so'ng, keyingi yozuvchi / 'o'quvchi band bo'lsa (oldingi xabarni qayta ishlamagan) bajarilishini ta'minlash kerak. , keyin joriy vazifa kutish holatiga o'tishi kerak va CPU resurslarini foydasiz so'rov jarayonida iste'mol qilmang. Quyida ushbu dasturning o'zgartirilgan versiyasi mavjud bo'lib, u umumiy ma'lumotlarga kirishda o'zaro istisno qilish uchun mutex ob'ektiga qo'shimcha ravishda vazifalarning o'zini sinxronlashtirish uchun condvar ob'ektidan foydalanadi. pthread_cond_wait funktsiyasi bilan vazifa boshqa vazifadan ma'lumotlarni kutish rejimiga o'tadi va pthread_cond_signal funktsiyasi bilan ma'lumotlar tayyorligi haqida xabar beradi.



Download 1,9 Mb.

Do'stlaringiz bilan baham:
1   ...   100   101   102   103   104   105   106   107   ...   131




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish