“Linux” operatsion tizimida real vaqtning ko‘p tarmoqli ilovasini shakllantirish
15.12.2015
Rukn: Sharh va fikr-mulohazalar.
Muallif: D.Mirzayev.

“Linux” operatsion tizimi uchun dasturli tizimning bajarilishini ta’minlashdagi real vaqt masalalarini yechishda ayrim maxsus real vaqtdagi masalalarni yechish uchun dasturiy tizimning bajarilishini ta’minlovchi real vaqt ilovasi ishlab chiqilgan.   

Real vaqt tizimi tushunchasi ko‘rib chiqilgan; real vaqt uchun POSIX.1003.1 xalqaro standartiga mos keluvchi tushunchaga aniqlik kiritilgan. Ko‘rib chiqilgan real vaqtining tizim dasturlari real vaqt operatsion tizimida maxsus boshqaruv orqali amalga oshiriladi.

Deyarli har bir real vaqtga taalluqli masala o‘z ichiga bir necha bir-biriga bog‘liq masalalar ketma-ketligini keltirib chiqa­rish bilan birga, har bir masalani alohida yechish yoki masalalar uzviyligini uzishi yoki masalalarning kamroq soni bilan yechish ham mumkin. Shu bilan birga, masalalar yechimi raqobat orqali (bir jarayonli tizim) yoki parallel ravishda, ko‘p jarayonli tizim orqali amalga oshiriladi. Ayni bir jarayonning o‘zidagina individual oqim ko‘rinishida xuddi yuqorida aytib o‘tilganidek, ko‘p masalalarning tarmoqli model tizimi mavjud. Shu bilan birga, jara­yon ikki qismga bo‘linadi:

Birinchi qism o‘zida quyidagi resurslarni jamlaydi: butun dasturni qamrab oluvchi dasturiy kod va global ma’lumotlar;

Ikkinchi qism esa quyidagi ma’lumotga ega: bajarish holatiga taalluqli ma’lumot (masalan, dasturga oid hisobchi) va tugatgich. Bu qism — oqim (thread) deb ataladi.

«Linux» operatsion tizimi aniq tillar to‘plamiga moslashtirilgan «S» dasturlash tili bilan ta’minlangan va tarmoqlar ustida ish­lovchi operatsiyalarni bajaruvchi vazifalar to‘plami mavjud. Oqimlarning bajarilishini qo‘llab-quvvatlovchi axborot-kutubxona markazi (ARM) va sarlavhali fayllar to‘plami ko‘rinishida shakllantirilgan bo‘lib, tuzish jarayonida yuqoridagi yordamchi dastur ishga tushadi. Shuni ta’kidlab o‘tish joizki, «Linux» operatsion tizimida mavjud jarayonning biror-bir qismi emas, balki oqimlar bajarilishi alohida jarayon deb hisoblanadi. Ilovaning ko‘p tarmoqli ishlarini tashkillashtirishda sodda jarayonlar yordamida alohida qismlarni bir-biriga moslashtirish va bir vaqtning o‘zida umumiy manbalardan foydalanishga o‘zaro to‘siqni ta’minlash oqimlarini boshqara bilish zarur (yaratish, yakunlash, bloklash). ARM yordamidan foydalanish davomida sodda jarayonlarning quyidagi ko‘rinishlari ishga tushadi, masalan (1-rasm):

linux_15_12_2015

Sodda jarayonlarning ko‘rinishlari

Taymer hisoblash tizimida tutilishlarni ta’minlovchi va vaqtni o‘lchovchi omil deb hisoblanadi. Aniqlik, eng kam vaqt intervalini kafolatchisi — bu taymerning asosiy ta’rifidir. Real vaqt tizimlarida yuqoriroq aniqlikni ta’minlovchi vositalarga ehtiyoj ko‘proq bo‘ladi. Vaqtni o‘lchash uchun gettimeofday tizim chaqiruvidan foydala­nish munosib bo‘lib, u quyidagi timsolga ega, aniq faylda saqlanuvchi sys/time.h: 1970-yil 1-yanvarda o‘tgan o‘zgaruvchi tuzilish va vaqtiga olib kiruvchi –int gettimeofday(struct timeval *tv, struct timezone *tz); operatsiyaning muvaffaqiyatli bajarilganligi belgisi qaytadi. Ikkinchi parametr sifatining ta’rifi doim 0 deb ko‘rsatilishi kerak, chunki u hozirda qo‘llanilmaydi va qo‘shib yuborish qoldirilgan.

Timeval’ning tuzilish tipi quyidagi ko‘rinishga ega:

struct timeval {

time_t tv_sec; // sekundlar

suseconds_t tv_usec; //mikrosekundlar

};

Dasturiy taymerdan foydalanish tutilishlarni ta’minlashning mashhur bir ko‘rinishi hisoblanadi. Dasturiy taymer topshirilgan bir xil «bo‘sh» operatsiyalar soni bajarilishi hisobidan amalga oshiriladi. Oldindan belgilangan chastotalar ishlovchi prosessorlari o‘tgan vaqtni aniqlashga ruxsat beradi. Bunday uslubning quyidagi kamchiliklari mavjud (2-rasm):

linux_15_12_2015_1

Oldindan belgilangan chastotalar ishlovchi prosessorlari o‘tgan vaqtni aniqlashga ruxsat berishdagi usulning kamchiliklari

Sanab o‘tilganlarning eng oxirgisi, qo‘shimchalar real vaqt uchun dasturiy taymerdan muvaffaqiyatli foydalanishda qiyinchilik tug‘di­radi. Apparat taymerlarini ishlatish orqali tutib turish muammosini yechish mumkin. Apparat taymerlari markaziy prosessordan mustaqil ishlaydi va ishga tushish vaqtida uzilishlar jo‘natadi. «Linux» ope­ratsion tizimi o‘zining masalalarini yechish uchun (masalan, jara­yonlarni rejalashtirishda) vaqtni kvantlovchi taymerdan foydalanadi. Xuddi shu vaqt kvantlari nanosleep tizim chaqiruvi yordamida tutib turishni ta’minlash uchun amaliy jarayonlar ishlatilishi mumkin. U time.h faylida aniqlangan, quyidagi statistikaga ega:

int nanosleep(const struct timespec *req, struct timespec *rem); — dasturning bajarilishi *req vaqtining chegarasida to‘xtatiladi. Agar vazifa avvalroq tugasa, unda qolgan vaqt *rem ga kiritiladi. Operasiyaning muvaffaqiyatli bajarilganligi belgisi qaytadi.

Timespec tuzilish tipi quyidagi ko‘rinishga ega:

struct timespec {

time_t tv_sec; //sekundlar

long tv_nsec; //nanosekundlar (0..999 999 999)

};

Shuni hisobga olish kerakki, apparat platformasini ishlatishga bog‘liq, haqiqiy foydalanishga ruxsat etilgan yadrodagi taymer 1…10 ms.ga teng. Shuning uchun to‘xtatilish taymerga ruxsat etilgan kattalikka nisbatan oshib ketishi mumkin. Shu sababli tizimga qilinadigan murojaatni vaqtidan ilgariroq tugatishdan qolgan vaqt kattaroq qismga qo‘shib yuboriladi. Real vaqtni rejalashtiruvchi strategik jarayonlar uchun nanosleep yuqori aniqlikdagi qisqa to‘xtatib turishlarni ta’minlaydi. Bu holatda 2 millisekundli to‘xtatib turishlar, mikrosekundlar aniqligida ta’minlanadi. Shuningdek, prosessor parametrlariga to‘be bo‘lmagan va tizimning to‘liq prosessor vaqtini band qilmaydigan dasturiy taymerning maxsus ko‘rinishi ishlatiladi.

Tutib turishlarni ta’minlash maqsadida, shu jumladan, vaqtinchalik hamda «real vaqt soati» («Real Time Clock») qurilmasidan foydalanish mumkin. Real vaqt soatini (IRQ 8) 2Gs dan 8192Gs gacha chastotali signallar generatsiyasi uchun ishlatish mumkin. Real vaqt soati drayveriga /dev/rtc fayl — qurilmasi orqali ruxsat amalga oshiriladi. Zarur chastotada qurilma ishini sozlashga 2n ko‘rinishidagi drayver ruxsat beradi. Bu drayverdan foydalanuvchi jarayon, /dev/rtc dan mos bo‘lgan chastotali ma’lumotlarni qabul qiladi. Shu bilan birga, generatsiyalangan oxirgi daqiqadan boshlab, o‘qilgan so‘z raz­ryadlari 8-31 uzilib qolishlar soniga ega. Har doim oddiy foydala­nuvchi (mutaxassis foydalanuvchi huquqlarisiz) faqatgina 64Gs chastotasini ishlatishi mumkin. Chastotalarning chegaralangan mohiya­tini oshirish uchun aniq ruxsat, mutaxassis foydalanuvchi nomidan drayverlarga /proc ko‘rinishidagi fayl tizimiga murojaat zarur:

echo chastota| cat >/proc/sys/dev/rtc/max-user-freq

Agar real vaqt ilovasi mutaxassis foydalanuvchi nomidan ishlatilsa, bunday holatda ko‘rsatilgan cheklanish amalga oshmaydi. Qurilmaga kirish tizimning standart open() ochilish fayli chaqiruvi orqali amalga oshiriladi. Natijada, hosil bo‘lgan faylli deskriptor bundan keyingi barcha operatsiyalarda ochiq fayl bilan ishlati­ladi. Real vaqt soatlarini boshqarish, qurilmaga yuboriladigan so‘rovnomali jo‘natmalar orqali, ya’ni ioctl() tizimning standart chaqiruvi yordamida amalga oshiriladi. U sys/ioctl.h ma’lum fayl­dagi sintaksisga ega, ya’ni int ioctl(int d, int request, …);– request so‘rovnoma jo‘natmasini d diskripti orqali aniqlaydigan qurilma ishini boshqarish. Operatsiyaning muvaffaqiyatli yakunlanganligi haqida belgini (xatolik holatida -1) yoki so‘rovnoma bajarilganligi natijasini qaytaradi. Har bir qurilma shaxsan o‘zining mumkin bo‘lgan so‘rovnomalari to‘plami, so‘rovnoma bajarilishini aniqlashtiruvchi ba’zi uchinchi parametrdagi ioctl(), talab qilinuvchi ko‘rsatmalarni aniqlaydi. linux/rtc.h aniqlangan, real vaqt soatlari drayveri yordamida vaqtinchalik tutib turilishlarni tashkillashtirish uchun qu­yidagi so‘rovnomalardan foydalaniladi (3-rasm).

linux_15_12_2015_2

Vaqtinchalik tutib turilishlarni tashkillashtirishda foydalaniladigan so‘rovnomalar

Qurilmadan o‘qish bitta tipdagi element «unsigned long» orqali amalga oshirilishi kerak. Shuningdek, ko‘rsatilgan 24 razryaddan yuqori bo‘lgan elementga uzilishlar soni kiritiladi, joy egallagan navbatdagi ikkita operatsiya oralig‘idagi o‘qilish. Agarda uzilishlar bo‘lmagan bo‘lsa, navbatdagi uzilishning yuzaga kelgunigacha, uni bajargan qurilmadan o‘qish jarayoni qulfga tushish holati harakatini yuzaga keltiradi. Quyida real vaqt soatidan foydalanish namunalari keltirilgan:

//rtc_sample.cpp

#include <linux/rtc.h>

#include <sys/ioctl.h>

#include <sys/types.h>

#include <fcntl.h>

#include <unistd.h>

#include <iostream>

 

int main()

{

int rtc = open(«/dev/rtc»,O_RDONLY);

if ( rtc == -1 )

return 1;

int frequency = 64; // uzilishlar generasiyasi chastotasi

int duration = frequency*10; //dastur ishining davomiyligi

unsigned long counter = 0; //uzilishlar soni hisoblagichi

// uzilishlar chastotasi o‘rnatilishi

if ( ioctl(rtc,RTC_IRQPti_SET,frequency) == -1 )

return 2;

// taymer aktivlashuvi

if( ioctl(rtc,RTC_PIE_ON,0) == -1 )

return 3;

while ( counter < duration ) {

unsigned long rtcData;

//qo‘llanmadan ma’lumotlarni o‘qish

int ret = read(rtc,&rtcData,sizeof(rtcData));

if ( ret == -1 )

break;

counter += rtcData >> 8; //umumiy uzilishlar sonini hisobga olish

std::cout << counter << ‘ ‘ << (rtcData >> 8) << std::endl;

}

//taymer to‘xtashi

ioctl(rtc,RTC_PIE_OFF,0);

close(rtc);

Real vaqt tizimini baholash uchun quyidagi tasnif ko‘rinishlari keltirilgan:

  • Uzilib qolishga javob berish oralig‘i;
  • («Lagency») boshqaruv oqimining javob berish vaqti.

«Linux» operatsion tizimi uchun real vaqt ilovasining ko‘p oqimli texnologiyasini tashkillashtirish aks ettirilgan. Avvaldan ma’lumotga ega bo‘lganlar uchun tutilishlarni ta’minlash va hisob­lash tizimida vaqtni o‘lchash usuli bayon etilgan va apparat taymerlari yordamida bu usulning apparat ko‘rinishi aks ettirilgan. «Linux» operatsion tizimiga real vaqt soatlarini qo‘llashdan foydalanish namoyish qilingan. Nafaqat doimiy fayllarga, balki maxsus (masalan, hisoblash tizimining tabiiy xotirasiga to‘g‘ridan-to‘g‘ri kiruvchi fayl — qurilmalariga) fayllarga ham qo‘llash mumkin bo‘lgan manzilli bo‘shliq jarayonida faylni aks ettirish mexanizmi ko‘rib chiqilgan. Bunda amaliy dasturning hisoblash tizimi tashqi qurilmasi bilan bevosita o‘zaro ta’sirini tashkillash­tirishda, tabiiy operativ xotiraning istalgan manziliga amaliy dasturdan ruxsat olinishi juda muhim.

Orphus system
O'zbеkistonda AKT yangiliklaridan birinchilar qatorida xabardor bo'lish uchun Telegramda infoCOM.UZ kanaliga obuna bo'ling.
Telegramga qo`shmoq
WhatsAppga qo`shmoq
Odnoklassnikiga yubormoq
VKontakteda bo`lishmoq