60
УНИВЕРЗИТЕТ У НОВОМ САДУ ФАКУЛТЕТ ТЕХНИЧКИХ НАУКА Радован Марковић Имплементација сервисне листе ослањајући се на SQLite базу података ДИПЛОМСКИ РАД - Основне академске студије -

Diplomski rad Sqlite baze

Embed Size (px)

DESCRIPTION

Diplomski rad SQLite baza podataka

Citation preview

Page 1: Diplomski rad Sqlite baze

УНИВЕРЗИТЕТ У НОВОМ САДУ

ФАКУЛТЕТ ТЕХНИЧКИХ НАУКА

Радован Марковић

Имплементација сервисне листеослањајући се

на SQLite базу података

ДИПЛОМСКИ РАД- Основне академске студије -

Нови Сад, 2014

Page 2: Diplomski rad Sqlite baze

УНИВЕРЗИТЕТ У НОВОМ САДУ ФАКУЛТЕТ ТЕХНИЧКИХ НАУКА 21000 НОВИ САД, Трг Доситеја Обрадовића 6

КЉУЧНА ДОКУМЕНТАЦИЈСКА ИНФОРМАЦИЈА

Редни број, РБР:

Идентификациони број, ИБР:

Тип документације, ТД: Монографска документација

Тип записа, ТЗ: Текстуални штампани материјал

Врста рада, ВР: Завршни (Bachelor) рад

Аутор, АУ: Радован Марковић

Ментор, МН: др Миодраг Темеринац

Наслов рада, НР: Имплементација сервисне листе ослањајући се на SQLite базу података

Језик публикације, ЈП: Српски / ћирилица

Језик извода, ЈИ: Српски

Земља публиковања, ЗП: Република Србија

Уже географско подручје, УГП: Војводина

Година, ГО: 2014

Издавач, ИЗ: Ауторски репринт

Место и адреса, МА: Нови Сад; трг Доситеја Обрадовића 6

Физички опис рада, ФО:(поглавља/страна/ цитата/табела/слика/графика/прилога)

7/33/0/8/7/0/0

Научна област, НО: Електротехника и рачунарство

Научна дисциплина, НД: Рачунарска техника

Предметна одредница/Кqучне речи, ПО: База података, листа сервиса, SQLite, Comedia,

УДК

Чува се, ЧУ: У библиотеци Факултета техничких наука, Нови Сад

Важна напомена, ВН:

Извод, ИЗ: У раду је реализована имплементација SQLite модула, kao и чување листе сервиса помоћу задате базе података.

Датум прихватања теме, ДП:

Датум одбране, ДО:

Чланови комисије, КО: Председник: др Јелена Ковачевић

Члан: дp Небојша Пјевалица Потпис ментора

Page 3: Diplomski rad Sqlite baze

УНИВЕРЗИТЕТ У НОВОМ САДУ ФАКУЛТЕТ ТЕХНИЧКИХ НАУКА 21000 НОВИ САД, Трг Доситеја Обрадовића 6

КЉУЧНА ДОКУМЕНТАЦИЈСКА ИНФОРМАЦИЈА

Члан, ментор: др Миодраг Темеринац

Page 4: Diplomski rad Sqlite baze

UNIVERSITY OF NOVI SAD FACULTY OF TECHNICAL SCIENCES 21000 NOVI SAD, Trg Dositeja Obradovića 6

KEY WORDS DOCUMENTATION

Accession number, ANO:

Identification number, INO:

Document type, DT: Monographic publication

Type of record, TR: Textual printed material

Contents code, CC: Bachelor Thesis

Author, AU: Radovan Marković

Mentor, MN: Miodrag Temerinac, PhD

Title, TI: Implementing the service list relying on SQLite database

Language of text, LT: Serbian

Language of abstract, LA: Serbian

Country of publication, CP: Republic of Serbia

Locality of publication, LP: Vojvodina

Publication year, PY: 2014

Publisher, PB: Author’s reprint

Publication place, PP: Novi Sad, Dositeja Obradovica sq. 6

Physical description, PD:(chapters/pages/ref./tables/pictures/graphs/appendixes)

7/33/0/8/7/0/0

Scientific field, SF: Electrical Engineering

Scientific discipline, SD: Computer Engineering, Engineering of Computer Based Systems

Subject/Key words, S/KW: Porting, SQLite, Slist, eCos, Comedia

UC

Holding data, HD: The Library of Faculty of Technical Sciences, Novi Sad, Serbia

Note, N:

Abstract, AB: This documentation describes the porting procedure of SQLite database on eCos operating system and implementation of the service list using a SQLite standard of database

Accepted by the Scientific Board on, ASB:

Defended on, DE:

Defended Board, DB: President: Jelena Kovačević, PhD

Member: Nebojsa Pjevalica, PhD Menthor's sign

Page 5: Diplomski rad Sqlite baze

UNIVERSITY OF NOVI SAD FACULTY OF TECHNICAL SCIENCES 21000 NOVI SAD, Trg Dositeja Obradovića 6

KEY WORDS DOCUMENTATION

Member, Mentor: Miodrag Temerinac, PhD

Page 6: Diplomski rad Sqlite baze

Захвалност

Захвалност

Захваљујем се Милету Давидовићу и Душану Живкову на стручној помоћи током

израде завршног рада.

Посебно се захваљујем Милану Станкићу,Тијани Јевић, Ђорђу Глишићу као и

колегама Немањи Поповићу и Миклошу Кепеу на помоћи, савјетима и утрошеном

времену.

На крају се захваљујем свима онима који су на било који начин допринели изради

овог рада.

I

Page 7: Diplomski rad Sqlite baze

УНИВЕРЗИТЕТ У НОВОМ САДУ

ФАКУЛТЕТ ТЕХНИЧКИХ НАУКА

САДРЖАЈ

1. Увод..............................................................................................................................1

2. Теоријске основе..........................................................................................................3

3. Концепт рјешења.........................................................................................................7

4. Програмско рјешење.................................................................................................15

5. Резултати....................................................................................................................27

6. Закључак.....................................................................................................................32

7. Литература..................................................................................................................34

Page 8: Diplomski rad Sqlite baze

УНИВЕРЗИТЕТ У НОВОМ САДУ

ФАКУЛТЕТ ТЕХНИЧКИХ НАУКА

СПИСАК СЛИКА

Слика 2.1 DVB стандарди у свијету..............................................................................4

Слика2.2 Архитектуре Comedia средњег слоја............................................................4

Слика3.1 Comedia са SQLite библиотеком...................................................................8

Слика3.2 Адаптациони слој...........................................................................................9

Слика3.3 Идејна шема базе података за израду решења чувања листе сервиса.....13

Слика 3.4 Шема базе података за креирање тренутне листе сервиса......................13

Слика5.1Графички приказ меморије и утрошене меморије.....................................28

Page 9: Diplomski rad Sqlite baze

УНИВЕРЗИТЕТ У НОВОМ САДУ

ФАКУЛТЕТ ТЕХНИЧКИХ НАУКА

Page 10: Diplomski rad Sqlite baze

СПИСАК ТАБЕЛА

Табела4.1 TemporaryServiceList табела.......................................................................20

Taбела4.2 TemporaryList табела..............................................................................20

Taбела4.3 МаppingList taбела..................................................................................20

Табела5.1 Утрошене меморије приликом укључивања sqlite модула...................27

Табела5.2 Заузетост меморије послије тестних функција.......................................28

Табела 5.3 Резултати мјерења заузетости меморије

након 10 извршених тестова...................................................................29

Табела5.4 Заузетост меморије при креирању и брисању табела...........................30

Табела5.5 Резултати поређења тренутног програмског решења и

решења са базом података.....................................................................30

Page 11: Diplomski rad Sqlite baze

Списак табела

СКРАЋЕНИЦЕ

SQL - Structured Query Language, структуирани упитни језик

STB-Set top Box, уређај за пријем и обраду дигиталних и сателитских сигнала

MIPS- Microprocessor without Interlocked Pipeline Stages, микропроцесор

беблокираних фаза обраде

eCos- embedded configurable operating system, уграђени конфигурабилни

оперативни системи

DVB- Digital Video Broadcasting,стандард за дигиталну телевизију

RAM-Random-access memory, радна меморија

HTML- Hypertext Markup Language, програмски језик за структуирање текстова,

медија и објеката у веб странице и електронску пошту

MPEG2-  Motion Picture Experts Group, стандард за компровитовање видео

сигнала

PVR-Personal video recorder, персонални видео рекордер

FTA- Free to air ,систем за слободно гледање дигиталних сервиса

VоD- Video on demang, видео на захтјев, пријем одређених мултимедијалних

садржаја

SDK- Software developement kit, скуп рачунарских алатки

DMJFS- Data Manager Jurnalized File System, модул који омогућава рад са флеш

меморијом

VI

Page 12: Diplomski rad Sqlite baze

Скраћенице

1. Увод

У оквиру овог рада реализована је инсталација SQLite библиотеке на STB

платформу са MIPS архитектуром и eCos оперативним системом.

Такође, у раду је приказано једно рjешење интеграције SQLite базе података у

окружење програмске подршке за чување листе сервиса доступних по DVB стандарду.

Представљено програмско решење је написано у програмском језику C.

Дигитална телевизија представља сасвим нову технологију у производњи радио и

телевизијског програма. Начин емитовања аудио и видео сигнала дигиталним путем

отворио је потпуно нове просторе за радиодифузију и омогућио интеграцију свих

телекомуникационих и информационих података. Добија се квалитетнија резолуција

слике, бољи и квалитетнији звук као и многе остале погодности као што су додатне

информације и мултимедијални садржај. DVB је стандард за дигиталну телевизију који

се користи за подручје Европе зе емитовање дигиталних сервиса.

Један од начина преглед дигиталних сервиса је омогућено преко STB-a. То је

уређај који служи за пријем и обраду дигиталних сигнала. Поред тога имају и друге

могућности које су дефинисане стандардом за дигиталну телевизију. Неке од

могућности су: електронски програмски водич за преглед садржаја сервиса, преглед

доступних сервиса, снимање садржаја, креирање листе омиљених сервиса, родитељска

контрола и остало. Листа сервиса је модул STB који служи да обезбиједи приступ

листи свих инсталираних сервиса (програма) уређеној по броју програма. Сваки сервис

има своје име, број и тип.

1

Page 13: Diplomski rad Sqlite baze

Скраћенице

Убрзаним развојем технологије и повећањем могућности нових STB платформи

појављује се потреба за прилагођавањем и проширењем постојеће програмске подршке

на нове платформе. Ово се ради како из практичних економских разлога тако и због

уштеде у времену, а да би се могао испратити тренд убрзаног развоја платформи. Тиме

долази и до све већих захтјева по питању перформанси и поузданости система.

Ради бржег, стабилнијег, модуларнијег и бољег приступа листи сервиса,

реализована је инсталација SQLite на STB платформу.

SQLite je програмска библиотека која имплементира самостојећи и безсерверски

SQL Engine, првенствено намијењен интеграцији у друге програме. SQL Engine је

основни сервис за складиштење, прераду, и обезбеђивање података.

За реализацију овог програмског рјешења потребно је разумјети систем, односно

начин на који се врши добављање сервиса и њихово чување у дигиталним

телевизијским системима и начин на који је реализована претрага сервиса у оквиру

постојећег програмског рјешења, као и начин на који се добављају подаци за дате

сервисе.

Овај рад је описан у шест поглавља. У првом поглављу се могу наћи теоријске

основе које су неопходне за разумјевање програмске подршке у оквиру које је

извршена инсталација SQLite-a и чување листе сервиса. У другом поглављу се налази

концепт рјешења које представља опис реализације инсталирања SQLite-a,

пројектовање базе података и чување доступних сервиса у пројектовану базу. У трећем

поглављу је представљено програмско рјешење са описом модула коришћених током

рада. Четврто поглавље чине опис и резултати тестирања. Пето поглавље представља

кратак закључак свега што је урађено са евентуалним могућностима за даљи развој и

додатно усавршавање тренутног рјешења. У шестом поглављу се налази литература

која је коришћена у изради овог рјешења.

2

Page 14: Diplomski rad Sqlite baze

Увод

2. Теоријске основе

У овом поглављу представљени су сажети описи технологија које је потребно

познавати за реализацију овога рада. Описани су модули и технологије које се користе

у изради рада.

2.1 Дигитална телевизија

Дигитална телевизија представља пренос аудио и видео записа као и додатних

информација у дигиталном формату и замијенила је постојећу аналогну телевизију.

Идеја да телевизија користи исту дигиталну технологију коју користе рачунари и

савремене телекомуникационе мреже отвара могућност да се ове три области могу

комбиновати много једноставније. Дигитална телевизија подржава напредне

могућности као што су: интерактивна телевизија која омогућава извршавање

апликација писаних у JAVА и HTML-у, као и приступ интернету. Поред тога,

дигитална телевизија обезбјеђује много бољи квалитет звука и слике наспрам аналогне,

могућност да се у преносним системима MPEG2 и DVB пренесе велики број DTV

сервиса у једном физичком каналу. Такође, дигитална телевизија има могућност

увођења нових услуга као што су: избор језика за превод, избор аудио канала,

мултимедијални садржај, програмски водич, PVR итд... Најчешћи начини преноса

дигиталног телевизијског сигнала су : земаљски, кабловски и сателитски.

Најважнији стандарди за дигиталну телевизију су:

DVB

ATSC

ISDB-T

DMB-T

3

Page 15: Diplomski rad Sqlite baze

Увод

Слика 2.1 DVB стандарди у свијету

2.2 Средњи слој - Comedia

Comedia обезбјеђује одговарајућу програмску спрегу која апстрактује

функционалност ТВ уређаја, физичке архитектуре платформе, као и функција

оперативног система. Тиме је омогућено да произвођачи апликативне програмске

подршке не морају да познају специфичности физичке архитектуре DTV пријемника.

Формира се виртуелна машина и омогућава да се апликације које користе исти средњи

слој могу извршавати на различитим платформама. Comedia реализује најважније

операције ( рашчлањивање DVB података, контрола приступа и организација сервиса,

прикупљање EIT података, подршка за снимање садржаја, контрола подсјетника,

декодовање мултимедијалног садржаја итд.).

Слика2.2 Архитектуре Comedia средњег слоја

4

Page 16: Diplomski rad Sqlite baze

Увод

Основни дијелови Comedia средњег слоја су:

CHAL – представља апстракцију физичке архитектуре и састоји се из три

независне цјелине: TKEL, TBOX и TDAL

o TKEL је слој за апстракцију функционалности оперативног

система реалног времена ( енг. RTOS)

o TDAL je слој за апстракцију руковалаца (eng drivers) и састоји се

из мноштва модула. Сваки блок физичке архитектуре DTV

пријемника посједује одговарајући руковалац.

o TBOX је модул који декларише помоћне функције и макрое и

служи за сврху отклањања неправилности у раду програмске

подршке.

Comedia Core – језгро Comedia средњег слоја које користи

функционалност CHAL-a. Неке од могучности су му:

o Подешавање DTV пријемника

o Управљање листом програма

o Управљање аудио/виде приказом

o Приступ информацијама о емисијама

o Подршка за приказ телетекста

o Подршка за снимање садржаја

o Подршка за подсјетнике

o Подршка за извршавање MHEG апликација

o Подршка за ажурирање системске програмске подршке

o Подршка за приказ HbbTV садржаја

2.2.1 SList (Service List)

Основна улога SList (Service List) модула је да обезбиједи приступ листи свих

инсталираних сервиса (програма) уређеној по броју програма. Сваки сервис има своје

име, број и тип (дигитални ТВ сервис, аналогни ТВ сервис, радио сервис, интерактивни

сервис) ком припада. Такође, модул омогућава подешавање листе сервиса и добијање

обавјештења о промјенама у листи. Сортирање сервиса се обавља у складу са типом

система емитовања (сателитски, кабловски и земаљски) и корисничким подешавањима.

5

Page 17: Diplomski rad Sqlite baze

Увод

Омогућено је претраживање сервиса коришћењем курсора, чиме се омогућава

сортирање и итеративни пролазак кроз листу која задовољава задати критеријум ( нпр.

Сателитски ТВ сервиси). Модул такође омогућава измјену назива сервиса, за приступ

сервисима и операције над њима SList користи PIDB ( Program Information Database).

2.3 SQLite

SQLite је софтверска библиотека написана у C програмском језику која

имплементира SQL машину базу података. SQL је програмски језик намјењен за

управљање подацима у релационом систему за управљање базама података. Обухвата

унос података,ажурирање, брисање, упите као и податке за контролу приступа. Одлика

SQLite јесте да не захтјева велике перформансе, брза је , мала и портабилна. Процеси

читања и писања података се врше директно у фајл базе података. Нису потребна

додатна подешавања, већ само укључивање модула у рад програма.

SQLite је уграђен у све већи број популарних програма и оперативних система.

На примјер Мозила фајерфокс чува мноштво конфигурационих података у интерно

управљану SQLite базу података. Исто тако и Андроид оперативни систем за мобилне

телефоне и друге мале уређаје садржи SQLite.

6

Page 18: Diplomski rad Sqlite baze

Теоријске основе

3. Концепт рјешења

У овом поглављу представљен је концепт рјешења по ком је урађен овај рад. У

реализацији овог рада је коришћен Comedia 2.0, постојеће структуре из SList модула,

TKEL и TDAL модули, као и модул за руковање са флеш меморијом. Концепт рјешења

је подијељен у двије цјелине:

Интеграција SQLite библиотеке унутар Comedia програмског рјешења

Прелазак са постојећег начина чувања листе сервиса на чување

коришћењем SQLite базе података

3.1 Интеграција SQLite библиотеке унутар Comedia

програмског решења

SQLite библиотека је писана у C програмском језику. Написана је тако да

подржава више платформи у које се може извршити интеграција. Плоча која је

коришћена током интеграције SQLite библиотеке, као новог модула, подржава само

флеш меморију за трајно чување података.

Интеграција SQLite библиотеке обухвата додавање новог модула у Comedia у

део резервисан за додатке. SQLite модул се ослања на TDAL, TKEL и DMJFS

модуле.SQLite база података је смјештена на флеш меморији уређаја.

DMJFS (Data Manager Jurnalized Files System) је модул који омогућава рад са

флеш меморијом у оквиру Comedia програмског рјешења. Подржава функције које су

намјењене за рад са три врсте системских објеката:

Партиције: статус, ресет, постављање и уклањање

Директоријуми: креирање, брисање, отварање, затварање и статус

7

Page 19: Diplomski rad Sqlite baze

Теоријске основе

Датотеке: отварање/креирање, писање, читање, позиционирање, затварање/

пражњење и статус

Oсновни принцип нивоа рада DMJFS је на нивоу блокова који нису преписиви.

Значи да блок који треба да буде преписан се прво обрише, па се онда настави упис.

Уписи се увијек врше након посљедњег уписаног бајта. Када дође до попуњености

блока, врши се циклично брисање. Циклично брисање омогућава сљедећем блоку

наставак уписа. Такође DMJFS омогућава задржавање старијих верзија података као и

могућност руковања опоравка старијих верзија ако је више блокова конфигурисано у

партицији. На следећој слици је приказанa архитектура Comedia 2.0 и организација

модула које користи.

Слика3.1 Comedia са SQLite библиотеком

8

Page 20: Diplomski rad Sqlite baze

Теоријске основе

У зависности од циљне платформе и оперативног система који се користи, често се

разликује рад са системским позивима задуженим за руковање меморијом. У случају

промјене платформе, преласка на други оперативни систем или интеграцијеSQLite

модула за неке друге сврхе, направљен је један адаптациони слој преко којег

функционишу позиви према флеш меморији као и системски позиви за функције које

су специфичне за циљну платформу на којој се врши интеграција SQLite библиотеке.

На сљедећој слици је приказан адаптациони слој између SQLite библиотеке и

оперативног система.

Слика3.2 Адаптациони слој

Сврха адаптационог слоја јесте да позиве упућене ка меморији прилагоди

облику који захтјева платформа, а повратне вриједности функција ( у зависности од

платформе) прилагоди захтјевима SQLite библиотеке.

9

Page 21: Diplomski rad Sqlite baze

Теоријске основе

Међутим, због тренутне конфигурације оперативног система на којем ради

уређај за репродукцију дигиталног телевизијског сигнала као и његова максимална

оптимизација по питању перформанси, неке системске функције које користи SQLite

библиотека недостају. Мимо тих функција које недостају, постоје и функције са истим

називом, али разлике су у улазним аргументима као и повратне вриједности код неких

функција. То је један од разлога за постојање адаптационог слоја који раздваја те

функције, које су специфичне за овај оперативни систем који користи SQLite

библиотеку.

У сврху коришћења овог модула на неку другу платформу која користи други

начин чувања података на флеш или масовној меморији , потребне су измјене тијела

функција које се налазе у поменутом адаптационом слоју.

3.2 Прелазак са тренутног рјешења чувања листе

сервиса на чување коришћењем SQLite базе

података

Модул у коме се ради са листом сервиса написан је у програмском језику C.

Састоји се из више под-модула који реализују одређене функције за рад са листама

сервиса. Неки под-модули су подијељени по системима емитовања сервиса, а то су:

DVB

DUAL

IP-OUTOFBAND

IP-VOD (Video on Demand)

Такође, постоје и неки под-модули који служе за сортирање листа као и додатне

информације о сервисима и листама сервиса.

3.2.1SList_Dual

Овај под- модул служи за реализацију функција у DUAL систему емитовања.У

овом под-модулу су реализоване функције као што су : добављање триплет података,

информација колико постоји листа сервиса, промјена тренутне листе сервиса, измјена

тренутног сервиса из задате листе, промјена сервиса из задате листе, добављање

индекса тренутног сервиса из листе, добављање информација о типу тренутне листе

сервиса.

10

Page 22: Diplomski rad Sqlite baze

Теоријске основе

3.2.2SList_DVB

SList_DVB под-модул служи за реализацију функција у DVB систему емитовања.

Функције које су реализоване у овом модулу су: податак да ли је сервис видљив,

добављање податка о називу сервиса, добављање податка о скраћеном називу сервиса,

да ли је дати сервис шифрован, добављање LCN ( Logical Channel Number ), добављање

алтернативног LCN, добављање приоритета за LCN.

3.2.3SList_IP_OUTOFBAND

Oвај под-модул служи за реализацију функција у IPOUTOFBAND систему

емитовања. Функције које су реализоване у овом модулу су исте као у под-модулу

SLIS_DVB.

3.2.4SList_IP_VOD

SList_IP_VOD под-модул служи за реализацију функција у IP_VOD систему

емитовања. Функције које су реализоване у овом модулу су исте као у претходна два

под-модула ( SList_DVB и SList_IP_OUTOFBAND.

3.2.5SList_Sort

Oвај под-модул нам служи за сортирање листа сервиса по задатим критеријумима.

Задати критеријуми могу бити вриједности неких поља из табела. Такође могу бити и

неки одређени елементи који садрже више критеријума пореданих по редоследу. Као

примјер може се навести сортирање по имену као први критеријум, док други

критеријум може бити редоследу у листи севиса гдје се прво сортира листа по имену, а

унутар тога се врши сортирање по редоследу. Такође, функције из овог под-модула

извршавају и поређење вриједности података који припадају различитим сервисима,

као резултат тог поређења може се добити неки вид сортирања листе сервиса.

3.2.6SList_spe_Dual

Slist_spe_Dual под-модул служи за рализацију додатних функција у Dual систему

емитовања. Функције које су реализоване у овом модулу се односе на креирање табела

према запованом редоследу сервиса као и претрагу тренутног запованог сервиса према

одређеној ставки.

3.2.7SList_spe

Овај под-модул као и претходни, служи за реализацију додатних функција које се

користе за прављење листе сервиса. Функције које су реализоване у овом модулу су:

добављање имена сервиса, креирање заповане табеле сервиса, брисање сервиса,

11

Page 23: Diplomski rad Sqlite baze

Теоријске основе

провјера да ли сервис постоји, креирање листе нових сервиса, попуњавање листе

сервиса запованим редоследом итд.

3.2.8SList_fileman

SList_fileman под-модул служи за чување тренутне листе сервиса. Такође ,

одрађене су и остале функције као што су: вршење повраћаја листе у којој се налазе

листе сервиса, мјењање имена тренутне листе сервиса, враћање листе из меморије,

чување података о сервисима итд.

3.2.9SList

SList je главни под-модул у коме се налазе главне функције за реализацију листе

сервиса. Функције које су реализоване у овом модулу су: иницијализација модула,

завршетак модула, снимање података, прављење привремене листе сервиса, креирање и

брисање листе сервиса, добављање укупног броја листа, добављање неких поља из

табела (структура) итд.

3.2.10 Концепт рјешења тренутног рјешења и прелазак на

рјешење са SQLite базом података

Постојеће рјешење које је имплементирано, чува податке у структурама, која

имају поља у које се уписују резултати извршавања функција. Идеја јесте да се

резултати из структура чувају у бази података, тачније у табелама из базе података које

одговарају структурама. Потребно је креирати табелу са називом као и сва поља унутар

ње у које ће се смјештати подаци из поља која се налазе у структури. Једној структури

одговара једна табела у бази података. Након креирања табела и поља унутар табеле

идеја је да се неки позиви функција ураде као упити базе података. Тиме ће се скратити

вријеме извршавања кода, заузеће меморије и робусност апликације. Сљедећа слика

приказује идејно рјешење са коришћењем SQLite базе података.

12

Page 24: Diplomski rad Sqlite baze

Теоријске основе

Слика 3.3 Идејна шема базе података за израду решења чувања листе сервиса

У овом раду је приказана имплементација привремене (eng. Temporary) листе

сервиса. Сљедећа слика приказује начин креирања привремене листе сервиса.

Слика 3.4 Шема базе података за креирање тренутне листе сервиса

13

Page 25: Diplomski rad Sqlite baze

Теоријске основе

Као што је приказано на слици 4.3 , користе се три табеле. Прва табела јесте она у

којој се чувају подаци о сервису, друга представља табелу информација за листу у којој

се чувају сервиси који јој припадају , док се у трећој одређује који сервис којој листи

припада. Могуће је да више сервиса припадају једној листи. Такође, као што је

наведено, неке функције везане за креирање и коришћење тренутне листе сервиса су

одрађене као упити и њихове повратне вриједности јесу резултати тог датог упита за

одрећену функцију.

14

Page 26: Diplomski rad Sqlite baze

4. Програмско рјешење

Програмско рјешење је реализовано коришћењем Eклипс(енг. Eclipse) развојног

окружења у Видоузу(енг. Windows). Написано је у програмском језику C, док је

превођење кода урађено помоћу Linux виртуелне машине. Исправљање и тражење

грешака (енг. Debugging) је рађено помоћу TraceT32 апликације.

Рад се састоји из два дијела, самим тим ће програмско рјешење бити подијељено у

двије цјелине. Посебно ће бити описана интеграција SQLite библиотеке на Comedia 2.0 ,

а посебно прелазак чувања листе сервиса са постојећег рјешења на чување које се

ослања на SQLite базу података.

4.1 Интеграција SQLite библиотеке у Comedia 2.0

Ради лакше интеграције и прилагођавања SQLite библиотеке у Comedia 2.0

програмско рјешење, коришћен је SQLite amalgamation. Oва верзија омогућава велику

конфигурабилност за намјенске платформе, али због конфигурације система на ком је

рад рађен , била је потребна редукција неких системских функција. Цјелокупне измјене

у SQLite су опционе. У make фајлу је потребно обрисати -DPOSIX_ECOS опцију

преводиоца, поново превести код да би SQLite радио као да никакве измјене нису

урађене.

Адаптациони слој се састоји из два фајла: helper_file.h и helper_file.c. У њима се

налазе декларације и имплементације функција за рад са меморијом, као и функције

које су коришћене за тестирање SQLite базе података.

SQLite je написан тако да су све функције реализоване у низу ( aSyscall[ ] )

структура (unix_syscall) системских позива.

Page 27: Diplomski rad Sqlite baze

Приказ структуре и системских позива :

static struct unix_syscall { const char *zName; /* Naziv sistemskog poziva*/ sqlite3_syscall_ptr pCurrent; /* Trenutna vrednost */ sqlite3_syscall_ptr pDefault; /* Početna vrednost */} aSyscall[] = {#ifdef POSIX_ECOS { "open", (sqlite3_syscall_ptr)ecos_fopen, 0 },#else { "open", (sqlite3_syscall_ptr)posixOpen, 0 },#endif#define osOpen ((int(*)(const char*,int,int))aSyscall[0].pCurrent)

#ifdef POSIX_ECOS { "close", (sqlite3_syscall_ptr)ecos_close, 0 },#else { "close", (sqlite3_syscall_ptr)close, 0 },#endif#define osClose ((int(*)(int))aSyscall[1].pCurrent)...};

Сваки елемент aSyscall[] низа представља системски позив. За сваки системски позив дефинисан је макро који омогућава извршавање задате функције кроз програмско рјешење умјесто директног позивања системског позива. Овако је извршена лака измјена коришћења системских позива.

Функције које су имплементиране у адаптационом фајлу ослањају се на DMJFS. Функције коју користи SQLite библиотека које одговарају функцијама DMJFS-а разликују се по улазно-излазним аргументима, као и по повратним вриједностима у неким функцијама. Овај проблем је ријешен тиме што су направљене функције у адаптационом слоју тако да улазни аргументи функција одговарају аргументима са којим SQLite библиотека ради, док су излазни аргументи урађени да одговарају аргументима са којим DMJFS ради. Исто тако је урађено и са повратним вриједностима неких функција. Прихвата се вриједност која стигне из DMJFS а SQLite-у се прослеђују повратне вриједности у облику у којем он захтијева.

Поред ових функција за рад са датотеком и флеш меморијом, постоји и контрола потрошње RAM меморије. Comedia 2.0 ово обезбјеђује помоћу TKEL функција. SQLite користи функције malloc, free и realloc за рад са меморијом, и приказане су на сљедећи начин: #define SQLITE_MALLOC(x) malloc(x) #define SQLITE_FREE(x) free(x) #define SQLITE_REALLOC(x,y) realloc((x),(y))

Овај дио је замијењен функцијама које ECOS захјтева, такође ради функционалности и овај дио је стављен под компајлерску позицију.

Page 28: Diplomski rad Sqlite baze

#ifdef POSIX_ECOS #define SQLITE_MALLOC(x) ecos_malloc(x) #define SQLITE_FREE(x) ecos_free(x) #define SQLITE_REALLOC(x,y) ecos_realloc((x),(y))#else #define SQLITE_MALLOC(x) malloc(x) #define SQLITE_FREE(x) free(x) #define SQLITE_REALLOC(x,y) realloc((x),(y))#endif

helper_file.c се састоји из сљедећих функција void* ecos_malloc( size_t size );

void ecos_free(void *buffer);

void* ecos_realloc (void *ptr, size_t newsize);

int fchmod(int filedes, int mode);

int fchown(int filedes, int owner, int group);

int ftruncate(int fd, off_t length);

int gettimeofday(struct timeval *tp, struct timezone *tzp);

int utimes(const char *filename, struct timeval tvp[2]);

oDMJFS_File get_real_dmjfs_descriptor(int index);

int ecos_fstat(int, struct stat*);

int ecos_fopen(const char *zFile, int flags, int mode);

int ecos_lseek(int, off_t, int);

ssize_t ecos_write(int filedes, const void *buffer, size_t size);

ssize_t ecos_read(int filedes, void *buffer, size_t size);

int ecos_close(int filedes);

int my_fcntl(int index_descriptor, int command, ...);

int my_stat(const char *filename, struct stat *buf);

int ecos_delete(const char *filename);

int ecos_fdatasync (int fildes);

void printLineSwitch(int line, int switchCode);

static int callback(void *NotUsed, int argc, char **argv, char **azColName);

void sqliteTest();

void sqliteTestMemory();

Еcoss_malloc, ecos_free и ecos_realloc су функције које се користе за рад са RAM меморијом и оне служе као замјена умјесто системских malloc, free и realloc и њихова имплементација се ослања на TKEL функције за руковање меморијом.

Page 29: Diplomski rad Sqlite baze

Fchmod и fchown функције служе за добијање и мијењање права приступа фајлу. Због недостатка ових функција у DMJF , имплементиране су тако да враћају повратну вриједност SQLite-у за коју он сматра да је валидна.

Ftruncate функција служи за измјену величине фајла. Из разлога што ову функцију не подржава DMJFS и еCos који је интегрисан на плочи која се користи за израду рада, неопходно је реализовати ову функцију помоћу TKEL-a који се ослања на DMJFS.

Функције gettimeofday и utimes не постоје у еCos-у, па су оне реализоване помоћу datetime пакета који је реализован у Comedia 2.0.

Флеш меморија која се налази на плочи на ком је реализован овај рад, ради са 32-битним адресама који на највишој адреси имају вредност 1. Ове адресе ако се преносе као вриједности типа int, третирају се као негативне. Због тога што eCos негативне вриједности сматра грешком, оне требају да се преносе на неки други начин да би их и SQLite библиотека прихватила као исправне. Сходно томе направљен је један низ у коме се чувају вриједности ових адреса, а SQLite-у се прослеђују индекси низа у ком се чувају дате адресе. Када SQLite позове функције за рад са флеш меморијом, он прослиједи и индекс низа који третира као адресу. Get_real_dmjfs_descriptor функција као аргумент прима индекс низа гдје је смјештена адреса и враћа неозначени број који представља стварну адресу. Та адреса се прослеђује DMJFS-у и након тога се позивају функције за рад са датотекама. На овај начин је омогућено да овај модул без икаквих измјена ради на неким другим плочама без бриге да ли бит на највећој позицији има вриједности 0 или 1.

Еcos_fopen, ecos_close, ecos_read, ecos_write, ecos_lseek су функције које се директно ослањају на одговарајуће функције из DMJFS.

Fcntl je функција која се у SQLite-у користи за добијање и подешавање одређених флегова дескриптора. Пошто је у DMJFS-у другачије одрађено читање, писање и позиционирање у фајлу, довољно је SQLite-у прослиједи вриједност коју сматра валидном и да он ради како треба. Са преласком на неку другу платформу, гдје је рад са меморијом замишљен на неки други начин потребна је измјена функције на мјестима назначеним у коментару кода.

Ecos_delete је функција која се користи за брисање фајлова. Њена реализација се директно ослања на DMJFS FileDelete функцију.

Еcos_fdatasync се у SQLite-у позива при упису и читању када се ради са више нити. Због тога што је у DMJFS-у упис, читање и позиционирање у фајлу заштићено семафорима, не може се доћи до проблема при конкурентном упису или читању у фајл па се ова функција састоји само од повратне вриједности, коју SQLite сматра као валидну. Функција се мора реализовати да буде блокирајућа ако се врши упис над фајлом, и треба да омогући наставак извршавања програма кад се упис у фајл заврши, све ово треба да се уради ако дође до промјене плоче на којој рад са фајловима није на неки начин заштићен од конкурентног приступа.

Ecos_fstat je такође функција за рад са фајловима, намјењена за рад са хард диском. Њој одговарајућа функција из DMJFS је DMJFS_FileStat на коју се у реализацији ecos_stat и ослања.

PrintLineSwitch је функција која се користи ради лакшег дебаговања SQLite-a за праћење докле се стигло са извршавањем.

Callback функција коју позива SQLite као повратну функцију за исписивање резултата SELECT наредбе.

Мy_callback функција коју позива SQLite која нам враћа резултат SELECT наредбе.

Page 30: Diplomski rad Sqlite baze

SQLiteTest je функција у којој су дефинисани тестни случаји помоћу који х је тестирана функционалност , брзина и меморија коју троши SQLite током извршавања.

SQLiteTestMemory функција служи за испис стања меморије прије и послије позива тестне функције (sqliteTest ).

4.2 Прелазак са трентног начина чувања листе

сервиса на чување коришћењем SQLite базе

података

Потребно је замјенити тренутно чување листе сервиса које се врши преко

структура, које су написане у C програмском језику. Свака структура садржи поља у

коју се уписују подаци. Идеја овог рада јесте да се структуре замјене табелама, а поља

из структура са пољима из табела.Такође је идеја да неке функције буду урађене као

упити умјесто тренутног решења. У овом раду је приказан прелазак чувања привремене

листе сервиса (енг.Temporary Service List ). Постоје две структуре које се користе за

чување привремене листе сервиса а то су tSList_TemporaryList и

tSList_TemporaryServiceList

Изглед ових структура је следећи:

typedef struct{ uint16_t numberOfServices; tSLIST_TemporaryList *list; uint16_t pointedService; uint16_t maxZapOrder;} tSLIST_TemporaryServiceList;

typedef struct{ uint16_t index; uint16_t HashID; uint16_t ZappingOrder; tSLIST_LockStatus LockStatus;#ifdef VOLUME_LEVEL_MODE

uint8_t Audio_Volume;#endif /* VOLUME_LEVEL_MODE */ tSLIST_DeletedStatus DeletedStatus;} tSLIST_TemporaryList;

Структура tSLIST_TemporaryServiceList служи за смјештање података о листи сервиса,док структура tSLIST_TemporaryList служи за смјештање података о сервису.Као што је већ наведено, постоје 3 табеле, једна за податке о сервису, друга за податке о листи сервиса и трећа која даје представу који сервис којој листи припада. Табеле са пољима су приказане следећим табелама:

Page 31: Diplomski rad Sqlite baze

Назив поља у табели Тип елемента у пољу табеле

LIST_ID Интеџер,

NUMBEROF_SERVICES Интеџер

POINTED_SERVICE Интеџер

MAX_ZAP_ORDER Интеџер

Табела4.1 TemporaryServiceList табела

Поље LIST_ID означава идентификациони број листе, тачније која је листа у питању. NUMBEROF_SERVICES означава колики број сервиса се налази у датој листи. POINTED_SERVICE поље даје нам вриједност који се сервис тренутно емитује. MAX_ZAP_ORDER поље означава максималну вриједност редослиједа одабирања.

Назив поља у табели Тип елемента у пољу табеле

SERVICE_ID Интеџер

INDEX_ID Интеџер

HASH_ID Интеџер

ZAPPING_ORDER Интеџер

LOCK_STATUS Интеџер

AUDIO_VOLUME Интеџер

DELETED_STATUS Интеџер

Taбела4.2 TemporaryList табела

SERVICE_ID поље означава идентификациони број сервиса, тачније који је сервис у питању. INDEX_ID показује индекс сервиса. HASH_ID oзначава дигитални потпис сервиса. ZAPPING_ORDER означава редослијед одабирања у листи сервиса. LOCK_STATUS поље провјерава да ли је сервис закључан. AUDIO_VOLUME показује вриједност јачине звука сервиса. DELETED_STATUS означава да ли је канал избрисан из листе сервиса.

Назив поља у табели Тип елемента у пољу табеле

ID_FROM_TEMPORARYLIST Интеџер

ID_FROM_TEMP_SERVICE Интеџер

Taбела4.3 МаppingList taбела

ID_FROM_TEMPORARYLIST поље означава идентификациони број листе, а ID_FROM_TEMP_SERVICE означава идентификациони број сервиса. Наиме у овој табели имамо референце да сервис може да постоји у више листа. Релација ове табеле јесте 1:N.

Page 32: Diplomski rad Sqlite baze

Тренутно програмско решење задатка јесте да се подаци уписују из currentservicelist структуре у којој су смјештени тренутни подаци о лист. Након уписа података у базу , функције које раде са привременом листом користе податке из базе уместо из структура. Такође ако дође до промјене података исти резултат ће се уписати у базу који ће се током рада базе користити. Ради констатног ажурирања листе сервиса, стара листа се брише, креира се нова са новим сервисима.Израда листе сервиса се може подјелити у 3 корака, а то су:

отварање базе података и креирање табела упис, читање и сортирање табела брисање табела и затварање базе

4.2.1Отварање базе података и креирање табела

Отварање базе података и креирање табела за базу се врши у функцији

initDatabase( ).

void initDatabase(){

int rc;char* test_db = "test.db";ecos_delete("/dev/test.db");rc = sqlite3_open(test_db, &db);if (rc) {

fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));} else {

fprintf(stderr, "Opened database successfully\n");}

sprintf(sql,"CREATE TABLE TEMPORARYLIST(" "SERVICE_ID INTEGER PRIMARY KEY AUTOINCREMENT," \ "INDEX_ID INTEGER ," \ "HASH_ID INTEGER ," \ "ZAPPING_ORDER INTEGER L," \ "LOCK_STATUS INTEGER ," \ "AUDIO_VOLUME INTEGER," "DELETED_STATUS INTEGER );");command_executioin(db, sql);

sprintf(sql,"CREATE TABLE TEMPORARYSERVICE_LIST(" "LIST_ID INTEGER PRIMARY KEY AUTOINCREMENT," \ "NUMBEROF_SERVICES INTEGER," \ "POINTED_SERVICE INTEGER," \ "MAX_ZAP_ORDER INTEGER);");

command_executioin(db, sql); sprintf(sql,"CREATE TABLE MAPPINGLIST(" "ID_FROM_TEMPORARYLIST INTEGER NOT NULL," "ID_FROM_TEMP_SERVICE INTEGER NOT NULL," "FOREIGN KEY(ID_FROM_TEMPORARYLIST) REFERENCES TEMPORARYSERVICE_LIST(LIST_ID)," "FOREIGN KEY(ID_FROM_TEMP_SERVICE) REFERENCES TEMPORARYLIST(SERVICE_ID));"); command_executioin(db, sql);}

Page 33: Diplomski rad Sqlite baze

sqlite3_open(test_db, &db) je функција која служи за отварање базе података. Као

улазне вриједности ове функције дефинише се назив базе и референца на саму базу

података. Као повратну вриједност враћа одговор да ли је база успешно отворена.

SQLite наредба за креирање табела јесте CREATE TABLE у којој се даје назив

табеле као и називи поља које та табела треба да садржи заједно са типовима података

који ће бити чувани у истој. SQLite библиотека у C-у наредбе преводи у низ карактера

и тако их извршава.

PRIMARY KEY означава да је то поље јединствено и да не постоје идентичне

вриједности за то поље. У случају покушаја да се упише иста вриједност база података

враћа грешку и не упије податке.

AUTOINCREMENT oзначава да се вриједности аутоматски повећавају , тачније за

сваки следећи упис у табелу, поље ће се самостално повећавати. Самим тим је скраћено

вријеме уписа у табелу као и сигурност да се неће појавити двије исте вриједности

поља.

Command_executioin(db,sql) функција служи за извршавање SQLite наредбе. У

телу функције се налазе функција sql_exec(db,sql,callback,data,errmsg) која извршава

упит који се налази у низу карактера sql.

4.2.2Упис,читање и сортирање табела

Упис у табелу се врши помоћу SQLite наредбе INSERT.

Упис у TEMPORARYLIST табелу се врши на следећи начин:

Sprint(sql, "INSERT INTO TEMPORARYLIST

(INDEX_ID ,HASH_ID,ZAPPING_ORDER,LOCK_STATUS,AUDIO_VOLUME,DELETED_STATUS) VALUES

(%d,%d,%d,%d,%d,%d);" , i

,SLIST_CurrentServiceList.preferredOrder[i].HashID,

SLIST_CurrentServiceList.preferredOrder[i].ZappingOrder,

ServiceData->SharedProperties.LockStatus,

#ifdef VOLUME_LEVEL_MODE

ServiceData->SharedProperties.Audio_Volume,

#else

0,

#endif /* VOLUME_LEVEL_MODE */

1);

Прво се редом наводи табела и поља из табеле у коју се уписују подаци, док

VALUES одређује вриједности које ће бити уписане у поља табеле. Подаци се уписују

Page 34: Diplomski rad Sqlite baze

из структура SLIST_CurrentServiceList и ServiceData. Као што је наведено наредбу

треба приказати као низ карактера да би се она успјешно извршила. Наредба се

извршава функцијом Command_executioin(db,sql)

Упис у TEMPORARYSERVICE_LIST се врши на следећи начин.

sprintf(sql,"INSERT INTO TEMPORARYSERVICE_LIST

(NUMBEROF_SERVICES,POINTED_SERVICE,MAX_ZAP_ORDER) "

"VALUES (%d,%d,%d);",value1,value2,value3);

гдје су value1,value2,value3 сљедеће вриједности : SLIST_TemporaryServiceList-

>numberOfServices, SLIST_TemporaryServiceList->pointedService,

SLIST_TemporaryServiceList->maxZapOrder.

Види се да се подаци у табелу листа уносе из структуре SLIST_TemporaryServiceList.

Читање из табела је мало сложенији процес. Наиме, прво се пронађе задата

вриједност поља наредбом SELECT, након тога се у функцији за извршавање наредбе

направи callback функција која ће вриједност добијену упитом смјештати у

промјењиву.

Примјер наредбе SELECT:

sprintf(sql,"SELECT NUMBEROF_SERVICES from TEMPORARYSERVICE_LIST");

Сортирање табела у овом раду се ради у више корака. Прво се креира помоћна

табела са идентичним пољима као табела која се треба сортирати, након тога

оригинална табела се селектује по вриједности задатог поља наредбом ORDER BY.

Послије тога се у помоћну табелу уписују подаци из оригиналне табеле која је

селектована по некој вриједности. Након успјешно одрађеног уписа у нову табелу,

оригинална табела се брише наредбом DROP, и након тога помоћна табела се

преименује у назив оригиналне табеле која је избрисана наредбом RENAME, чиме

помоћна табела постаје оригинална.

Примјер сортирања:

sprintf(sql,"INSERT INTO TEMPORARYLISTSORT

(INDEX_ID,HASH_ID,ZAPPING_ORDER,LOCK_STATUS,AUDIO_VOLUME,DELETED_STATUS) SELECT

INDEX_ID,HASH_ID,ZAPPING_ORDER,LOCK_STATUS,AUDIO_VOLUME,DELETED_STATUS FROM

TEMPORARYLIST

ORDER BY ZAPPING_ORDER ASC");

command_executioin(db, sql);

sprintf(sql,"DROP TABLE TEMPORARYLIST");

command_executioin(db,sql);

sprintf(sql,"ALTER TABLE TEMPORARYLISTSORT RENAME TO TEMPORARYLIST");

command_executioin(db,sql);

Page 35: Diplomski rad Sqlite baze

4.2.3Брисање табела и затварање базе података

Брисање табела се врши помоћу наредбе DROP.

sprintf(sql,"DROP TABLE TEMPORARYLIST");

command_executioin(db, sql);

sprintf(sql,"DROP TABLE TEMPORARYSERVICE_LIST");

command_executioin(db, sql);

sprintf(sql,"DROP TABLE MAPPINGLIST");

command_executioin(db, sql);

Затварање базе поgатака се врши у функцији closeDatabase( )

void closeDatabase()

{

int rc;

char *sql;

char* test_db = "test.db";

rc = sqlite3_close(db);

if (rc != SQLITE_OK)

{

fprintf(stderr, "Can't close database: %s\n", sqlite3_errmsg(db));

}

else

{

fprintf(stderr, "Close database successfully\n\n");

}

}

Остале функције са којима ради привремена (енг TemporaryList) листа:

SLIST_GetServiceAccessKey_ByTempListIndex- добављање приступног

кључа преко индекса сервиса из привремене листе

SLIST_GetService_ZappingOrderByTempListIndex- добављање редослиједа

одабирања сервиса преко индекса сервиса из привремене листе

SLIST_GetService_AccessKeyByZappingOrder- добављање приступног

кључа преко редослиједа одабирања

SLIST_GetServiceName_ByTempListIndex- добављање имена сервиса преко

индекса сервиса из привремене листе

SLIST_GetCurrentService_PreferedOrder-добављање вриједности

приоритетног редослиједа сервиса

SLIST_GetTemporaryServiceList_CurrentIndex- добавља вриједност индекса

од тренутног сервиса који се емитује из привремене листе сервиса

Page 36: Diplomski rad Sqlite baze

SLIST_GetTemporaryServiceList_ValidCurrentIndex- добављање

вриједности валидног индекса сервиса

SLIST_GetTemporaryServiceList_NumberOfServices- добављање броја

сервиса у листи

SLIST_GetPointedService_ZappingOrder- враћа вриједност редослиједа

добављања тренутног сервиса

SLIST_GetPointedService- добављање вриједности за тренутно емитовање

сервиса

SLIST_SetPointedService- постављање вриједности за тренутно емитовање

сервиса

SLIST_SetPointedService_ByDisplayedIndex- постављање вриједности за

тренутно емитовање сервиса преко индекса сервиса који је

SLIST_MovePointedService- врши помјерање вриједности тренутног

емитовања сервиса

SLIST_InvertStateOfService- инвертовање стања сервиса

SLIST_InvertLockStatus- инвертовање вриједности статуса за закључавање

сервиса

SLIST_GetTemporaryServiceList_Statistics- добављање статистике

привремене листе

SLIST_InvertDeleteStatus- инвертовање вриједности статуса за брисање

сервиса

SLIST_BuildTemporaryServiceList- креирање привремене листе сервиса

SLIST_BuildTemporaryServiceListFromCurrentMultiplex- креирање

привремене листе сервиса помоћу мултиплексера

SLIST_SetCurrentOrder_As_ZappingOrder- постављање вриједности

тренутног редослиједа преко редослиједа одабирања

SLIST_SaveModifications – снимање измјена

SLIST_GetPointedService_Triplet- добављање триплета за тренутни сервис

SLIST_SkipOrAddAllServices_TemporaryList- у зависности од флегова

врши додавање или прескакање сервиса у привременој листи

SLIST_AddRemoveServiceFavList- Креирање осталих листа сервиса помоћу

привремене листе сервиса.

Page 37: Diplomski rad Sqlite baze

5. Резултати

У овом поглављу дат је опис платформе над којом је вршено испитивање за

реализовано програмско рјешење. Поред тога, детаљно су приказани тестни

случајеви.Резултати који су добијени током тестирања су такође приказани у овом

поглављу.

5.1 Опис платформе

Испитивања реализованог рјешења су вршена на платформи MSD 5017 компаније

MStar са еCOS оперативним системом и меморијом од 5.76 мb (5766kb).

5.1.1Mstar MSD 5017

MSD5017 је високо интегрисан, ниске цене и високих перформанси STB са

интегрисаним условним приступом (CA) апликацијама. У свом склопу има

конфигурисан DVB-C и DVB-T демодулатор, Single SmartCard, аудио и видео декодер

који декодира MPEG-2 формат. За условни приступ апликацијама, обезбеђује веома

сигурну заштиту било којих безбедносних информација у CA систему.Остале

функционалности: преглед сервиса, преглед информација о емитовању емисија за

сервисе, претрага сервиса итд.

5.1.2 еCOS (Embedded Configurable Operative System)

eCоs je бесплатан оперативни систем у реалном времену са отвореним кодом,

намјењен за уграђене системе и апликације којима је потребан један процес са више

нити. Дизајниран је да буде прилагодљив прецизним захтјевима апликације што се тиче

перформанси и хардверских потреба. Написан је у програмским језицима C и C++ и

има компатибилне слојеве и програмске спреге за POSIX и µITRON.

Page 38: Diplomski rad Sqlite baze

Овај оперативни систем је дизајниран за уређаје са меморијом од десетина до

стотина килобајта, или у зависности од потребе рада у релном времену.

5.2 Тестни случајеви

Предложено рјешење је испитано у више тестних случајева, који приказују заузеће

меморије након извршавања одређеног процеса као и анализа резултата са постојећим

рјешењем. Списак тестних случајева:

Анализа утрошене меморије при укључивању SQLite модула у Comedia

2.0 програмско решење

Потрошња RAM меморије за тестне функције за рад са базом

Потрошња RAM меморије за базу података која се користи у овом раду

Анализа резултата потрошње меморије програмског решења са базом и

постојећег решења које се користи

5.2.1Анализа утрошене меморије при укључивању SQLite

модула у Comedia 2.0 програмско решење

Утрошена меморија се може добити, при укључивању модула, анализирањем

comedia.map фајла. Потребне секције за анализу су сљедеће:

.text - извршни код у извршној датотеци

.rodata – константни подаци

.data – иницијализовање глобалне промјењиве

.bss – неиницијализоване глобалне промјењиве

Детаљан приказ утрошене меморије приликом укључивања sqlite модула се

налази у табели 1.

Секције .text .rodata .data .bss Укупно

Меморија 760648B 45904B 3144B 5160B 814kB

Табела5.1 Утрошене меморије приликом укључивања sqlite модула

Утрошена меморија за укључивање овог модула у Comedia 2.0 програмско

рјешење износи 814kb.

Page 39: Diplomski rad Sqlite baze

Слика5.1Графички приказ меморије и утрошене меморије

5.2.2Потрошња RAM меморије за тестне функције за рад са

базом

Сљедећи тестни случај који је одрађен јесте потрошња RAM меморије током

извршавања тестне базе. Тестирање је реализовано коришћењем TKEL_bstat функције.

Ова функција као резултат враћа укупну потрошњу RAM меморије. Наиме, ова

функција враћа резултат мјерења комплетног comedia програмског решења, не само

SQLite модула. Самим тим је одрађено мјерење прије и послије коришћења SQLite

модула. Сва мјерења су представљена као заузетост на односу на стање пре коришћења

SQLite модула. Тестна функција помоћу које је урађено мјерење заузетости меморије

током извршавања садржи мјерења послије следећих случаја:

Отварање базе података са креирањем фајла на флеш меморији у који се уписује

база података

Креирање табеле

Упис елемената у табелу

Ажурирање елемената у табели

Брисање елемената из табеле

Затварање базе

Након сваког случаја, исписиван је садржај креиране табеле. Тест је поновљен

више пута, а максималне вредности заузетости меморије су приказане у следећој

табели:

Функција Отварање Креирање Упис Ажурирање Брисање Затварање

Меморија

(бајти)

67105 83500 83580 83660 83642 285

Табела5.2 Заузетост меморије послије тестних функција

Page 40: Diplomski rad Sqlite baze

Ради утврђивања да ли долази до цурења меморије током извршавања кода, мјерена

је заузета меморија прије и послије тестне функције. Резултати мјерења показују да

је вриједност просјечне меморије послије неколико поновљених тестова приближна

нултој вриједности. Тестирање је вршено више пута, и сваки пут се добијају слични

резултати мјерења.

Редни број покретања теста Заузета меморија током једног теста

( у бајтима)

1. 249

2. 110

3. 0

4. 0

5. 50

6. -708

7. 15

8. 142

9. 9

10. 120

Просјечна заузета меморија -13

Табела 5.3 Резултати мјерења заузетости меморије након 10 извршених тестова

Из горе наведене табеле види се да је више меморије ослобођено него што је

заузето, али се опет не може поуздано утврдити да ли постоји цурење меморије јер

се мјерење врши над укупном меморијом а не само SQLite модулом. Због тога је

урађена још једна груба провјера цурења меморије.

Наиме, у функцији је убачен један бројач који се при заузимању меморије

увећава, док при позивању функције за ослобађање меморије умањује. На крају

теста вриједност овог бројача је нула, што значи да у овом модулу нема цурења

меморије.

Page 41: Diplomski rad Sqlite baze

5.2.3Потрошња RAM меморије за креирање и брисање базе

података из програмског решења

Следећи тестни случај јесте потрошња меморије за креирање и брисање базе

података која се користи у овом раду. Максималне вредности заузетости меморије су

приказане у следећој табели:

Функција Креирање Брисање

Меморија

(бајти)

95881 1215

Табела5.4 Заузетост меморије при креирању и брисању табела

5.2.4Анализа резултата потрошње меморије постојећег

програмског решења и решења са базом података

Следећи тестни случај јесте поређење резултата мјерења потрошње меморије

при програмском решењу са базом података и тренутног решења. Максималне

вриједности су приказане у следећој табели:

Програмско решење Програмско решење са

базом података

Тренутно програмско

решење

Меморија (бајти) 2235396 2069360

Табела5.5 Резултати поређења тренутног програмског решења и решења са

базом података

Из табеле 5.5 видимо да решење са базом података за заузима више меморије од

тренутног програмског решења.

Page 42: Diplomski rad Sqlite baze

6. Закључак

Идеја задатка је била да се изврши прелазак са постојећег решења чувања листе сервиса

на чување и коришћење листе сервиса са SQLite базом података. Рад је реализован у

два дијела, први је била сама инсталација SQLite-a на STB платформу над којом су

вршена тестирања, а други дио јесте коришћење базе података за рад са листом

сервиса.

Први дио је реализован тиме што је додат нови модул у Comedia решење.

Направљен је један адаптациони слој преко којег функционишу позиви према флеш

меморији као и системски позиви за функције које су специфичне за циљну STB

платформу на којој се врши интеграција SQLite библиотеке. Сврха адаптационог слоја

јесте да позиве упућене ка меморији прилагоди облику који захтјева платформа, а

повратне вриједности функција ( у зависности од платформе) прилагоди захтјевима

SQLite библиотеке.Међутим, због тренутне конфигурације оперативног система на

којем ради уређај за репродукцију дигиталног телевизијског сигнала као и његова

максимална оптимизација по питању перформанси, неке системске функције које

користи SQLite библиотека недостају и које су урађене тако да повртатна вриједност

одговара датој библиотеци.

Други дио јесте коришћење SQLite модула.Увидом у начин на које је тренутно

решење урађено, у ком су подаци чувани у структурама података, реализовано је

креирање три табеле у ком се смјештају подаци за рад са листом сервиса. У прву табелу

се смјештају резултати о листи сервиса са датим пољима, у другу табелу се смјештају

резултати о самом сервису док у трећој табели се налазе парови који говоре који сервис

којој листи припада. Овдје се мора узети у обзир да један сервис може бити у више

листа. Поља структура из постојећег решења су замјењена пољима табела из базе. Неке

Page 43: Diplomski rad Sqlite baze

функције су реализоване кроз SQL упите, чиме је постигнуто модуларност и

стабилност података.

Испитивања су вршена на Mstar 5017 платформи са eCOS оперативним системом,

гдје је укупна меморија уређаја 5.76 мb. Испитивано је заузеће меморије у неколико

тестних случајева.

Резултатима испитивања предложеног решења у овом задатку долази се до

закључка да је постигнута иста функционалност као са тренутним програмским

решењем. База података је обезбједила модуларност као и стабилнију организацију

података. Такође урађен је ефективнији начин сортирања сервиса по задатим

критеријумима.Постигнута је једнака функционалност са тренутним решењем.

Остављен је простор за даљу реализацију решења. Даље што би се могло урадити

јесте интеграција осталих структура у табеле као и функције које оне користе. Такође

би било добро да се неке функције интегришу у упите, тако да би се радило са мање

функција које би се могле користити као резултат упита за више табела. Овим би се

постигла још већа модуларност и стабилнија организација података.

Page 44: Diplomski rad Sqlite baze

7. Литература

[1] G.Allen, M.Owens: The Definitive Guide to SQLite, 2010

[2]Benoit, H. , "Digital Television - Satellite, Cable, Terrestrial, IPTV, Mobile TV in the DVB Framework", Focal Press, 2008

[3]SQLite: http://www.sqlite.org/amalgamation.html, učitano 25.08.2014.

[4] eCos: http://ecos.sourceware.org/, učitano 25.08.2014.

[5] MStar: http://www.mstarsemi.com/, učitano 25.08.2014.

[6] Comedia:http://www.iwedia.com/en/software-components/comedia-tv-and-stb-

middleware, učitano 25.08.2014.

[7]Vijayan Prabhakaran, Andrea C. Arpaci-Dusseau, and Remzi H. Arpaci-Dusseau,

"Analysis and Evolution of Journaling File Systems", Computer Sciences

Department, University of Wisconsin, Madiso

[8]W. Fischer, "Digital Video and Audio Broadcasting Technology" (2010), A Practical

Engineering Guide, Third Edition

[9]Milan Bjelica, Literatura sa predavanja iz predmeta PROGRAMSKA PODRŠKA U

Page 45: Diplomski rad Sqlite baze

TELEVIZIJI I OBRADI SLIKE 1, 2014.

[10]Milan Bjelica, Literatura sa predavanja iz predmeta PROJEKTOVANJE

NAMENSKIH

RAČUNARSKIH STRUKTURA 2, 2014.

[11]Maestro: http://www.i-maestro.org/contenuti/contenuto.php?contenuto_id=50,

učitano 11.09.2014.