3 NOP 4 NOP ELSE SCTXN ;

: SCTXN TEKADR NCHAN LEN BUSYLEN NEXTADDR

PREDADDR SYNCADDR TOLOW GOTO 4 DO OLS !NCHAN GOTO ;

: SAVEALL NOP ; [СОХРАНИТЬ ВЕСЬ КАНАЛ НА ПЕРВИЧНОМ УСТРОЙСТВЕ (ИСТОЧНИКЕ)]

: SCTX1 POS DATACH 8 SPOS DATACH BUSYLEN OL DATACH LEN OL DATACH SPOS DATACH ;

[

: SCTX2 POS JOURCH 8 SPOS JOURCH BUSYLEN OL JOURCH LEN OL JOURCH SPOS JOURCH ;

]

[Новая виртуальная память]

0 %IF

: NEWVM [N] TEKADR C2 HSIZE+ UPSIZE GOTO -1 -1 C3 C WRITECTX D ;

%FI

: NEWVM [N] C HSIZE+ UPSIZE TEKADR PUSH -1 -1 0 C4 WRITECTX DO OBS-0

POP [SYNCADR] ;

: END? NEXTADDR -1 = TEKADR BUSYLEN TEKADR0 + = & ;

: NEWVM1 [N] C HSIZE+ UPSIZE TEKADR PUSH -1 -1 E3 C WRITECTX WRI_DATA

POP [SYNCADR] ;

: LOADCH0 0 !NCHAN 0 !LOWCH 0 !TEKADR 0 !BUSYLEN

TOTMEMLEN !LEN 0 !TEKADR0 0 !SYNCADDR -1 !NEXTADDR -1 !PREDADDR ;

[ДЛЯ БАЗОВЫХ КАНАЛОВ LOWCH=NCHAN]

7.4 Система управления хранением объектов

PROGRAM $SOMS

B16

[СИСТЕМА УПРАВЛЕНИЯ ХРАНЕНИЕМ ОБЪЕКТОВ]

FIX LONG VAR MAXID

1 ! MAXID

: NEWID MAXID !1+ MAXID ;

: DEFMAXID 6 EL_MAX 1+ ! MAXID ;

[5 КАНАЛ = ОПЕРАТИВНАЯ ПАМЯТЬ; 6 КАНАЛ = ДИСКОВАЯ ПАМЯТЬ]

: L_SUHO 0 !NCHAN 0 GOTO 5 LCTX 1 !NCHAN 0 GOTO 6 LCTX ;

[создание структуры СУХО для ОП]

[9 -- Размер, занимаемый элементом списка]

LONG VAR SIZE_EL 8 ! SIZE_EL

[создать новый объект]

ACT VAR WRI_DATA

: M.NEWOBJ [SIZE OID] 0 E2 8 5 X.NEWOBJ [] ;

: D.NEWOBJ [SIZE OID] 1 E2 8 6 X.NEWOBJ [] ;

: X.NEWOBJ [SIZE LOWCH OID SIZE_EL DIR_CHAN] C PUSH S( NCHAN ) !NCHAN UPSIZE

[.. OID] OLS [basechan] !NCHAN NEWVM1 [SYNCADDR] POP !NCHAN OLS [] ;

:: : M.VIEW 5 !NCHAN CR ."RAM:" VIEW.OBJ' ;

:: : D.VIEW 6 !NCHAN CR ."HDD:" VIEW.OBJ' ;

:: : A.VIEW M.VIEW D.VIEW ;

: IC.VIEW [A L] SHR SHR E2 GOTO DO IC1.V ;

: IC1.V TEKADR CR .D #> TOB SP SP ILS .D ;

: VIEW.OBJ' 0 GOTO ILS D [Пропустили длину элемента]

CR ." OID ADDRESS" RP SHOWPAROBJ ;

: SHOWPAROBJ END? EX+ ILS C BR0 SPO1 SPO2 ;

: SPO1 D ILS D ;

: SPO2 CR .D SP ILS .D SP ;

: M.DEL [OID] 5 X.DEL ; : D.DEL [OID] 6 X.DEL ;

: A.DEL [OID] C M.DEL D.DEL ;

ACT VAR EL_AVAR

:: : X.DEL [OID NCHAN] EL_FIND [OID 1/0] IF+ EL_DEL D ;

[найти элемент в списке по ID и встать на след. за OID слово]

: EL_DEL -4 @GOTO 0 OLS ;

:: : EL_FIND [OID NCHAN] '' EL_COMPAR ! EL_AVAR EL_PEREBOR ;

: EL_PEREBOR !NCHAN 0 GOTO ILS D RP EL_FIND0 [OID 1/0] ;

: EL_FIND0 END? 0 E2 EX+ D ILS C BR0 D EL_AVAR ILS D ;

: EL_COMPAR [OUR_OID TEK_OID] C2 = C EX+ D ;

:: : EL_MAX [DIR-NCHAN] 0 E2 '' MAX ! EL_AVAR EL_PEREBOR D [OID] ;

:: : DB.NEW !1 MAXID WOPEN DATACH

-1 OL DATACH -1 OL DATACH 14 OL DATACH 14 OL DATACH

-1 OL DATACH -1 OL DATACH 4 OL DATACH 4 OL DATACH

8 OL DATACH CLOSE DATACH

[ WOPEN JOURCH

-1 OL JOURCH -1 OL JOURCH 14 OL JOURCH 14 OL JOURCH

-1 OL JOURCH -1 OL JOURCH 4 OL JOURCH 4 OL JOURCH

8 OL JOURCH CLOSE JOURCH ]

 DB.OPEN ;

: DB.CLOSE CLOSE DATACH [CLOSE JOURCH] ;

: DB.OPEN -1 !!! CHDATA

 [DATA]

 OPEN DATACH 1 !NCHAN 0 !TEKADR 0 !TEKADR0 1 !LOWCH

IL DATACH !PREDADDR IL DATACH !NEXTADDR 0 !SYNCADDR

IL DATACH !BUSYLEN IL DATACH !LEN 6 LCTX

 [RAM]

 0 !NCHAN 0 !LOWCH 0 !TEKADR 0 !BUSYLEN

 TOTMEMLEN !LEN 0 !TEKADR0 0 !SYNCADDR -1 !NEXTADDR -1 !PREDADDR

 '' WRI_8OLS ! WRI_DATA [длина элемента каталога]

 4 [<can more...] NEWVM1

[SYNCADR] GOTO 5 LCTX [4 UPSIZE 8 OLS] DEFMAXID

 CHMS.INIT ;

: WRI_8OLS 8 OLS ;

7.5 Система управления каналами

PROGRAM $CHMS

3 VALUE LENGRP [Вместимость уровня приоритетов]

4 VALUE QChannels

LENGRP 3 * 1+ VALUE LenPrioQue [длина очереди приоритетов. Очередь -- с 0]

: N2CH [N] QChannels * 0A + [NCHAN] ;

LenPrioQue 1+ N2CH 10 * LONG VCTR CHDATA [память параметров каналов]

[для каждого канала можно завести 16. различных параметров]

: CHMS.INIT 0 !!! PrioQueOID

0 LenPrioQue DO SETNQ D ;

: SETNQ C C ! PrioQueNUM C N2CH [NUM CHAN1]

[вычислили номер канала для очередного объекта кэша]

C C3 1 ! Channels

1+ C C3 2 ! Channels

1+ C C3 3 ! Channels

1+ C C3 4 ! Channels D 1+ ;

[при обращении к объекту нужно повысить его приоритет]

: HIPRIODD D HIPRIO ;

: HIPRIO [OID] FINDOID C BR- D HIPRIO1 ;

: HIPRIO1 [N] C LENGRP / D C IF+ 1- LENGRP * [N N'] E2 UPOID [] ;

[Новый объект добавляется на последн. поз-ю, а затем к нему примен. HIPRIO]

LenPrioQue LONG VCTR PrioQueOID [список OID]

LenPrioQue WORD VCTR PrioQueNUM [номера записей в массиве каналов]

LenPrioQue QChannels 2 WORD ARR Channels

[обменять в очереди с соседним вышестоящим]

: SWP2OBJ [N] C IF0 LEAVE C PrioQueOID C2 1- PrioQueOID

C3 ! PrioQueOID C2 1- ! PrioQueOID

 C PrioQueNUM C2 1- PrioQueNUM C3 ! PrioQueNUM C2 1- ! PrioQueNUM 1- [N-1] ;

: SWP2OBJDD SWP2OBJ DD ;

: FINDOID [OID] 0 LenPrioQue DO CMPOID E2D C LenPrioQue = IF+ T-1 [-1/N] ;

: CMPOID [OID] C PrioQueOID [OID N OID(N)] C3 = EX+ 1+ ;

[Поднять объект от N_DOWN к N_UP в очереди]

: UPOID [N_UP N_DOWN ] C E3 - DO SWP2OBJ D [] ;

[Просмотр очереди (кэш объектов)]

: Q.VIEW 0 LenPrioQue

." M.Hdr D.Hdr M.Dat D.His"

DO QELVIEW D ;

: QELVIEW [n] CR C C 2 TON LENGRP / E2D BR0 #- #) TOB

 C PrioQueOID ." OID=" .D C PrioQueNUM ." Num=" .

." Channels= " 1 QChannels DO PriNCH

DD 1+ ;

: PriNCH [NOID NCH] C2C2 Channels 4 TON SP SP 1+ [NOID NCH+1] ;

7.6 Работа с базовыми объектами

PROGRAM $SYSOBJS

B16

LONG VAR ADRSTR LONG VAR LENSTR

 0 VALUE N_OID 4 VALUE N_BHR 8 VALUE N_KH

0C VALUE N_TRC 10 VALUE N_VAL 14 VALUE N_HIS

13 VALUE JRECLEN

: G_OID N_OID GOTO ; : W_OID G_OID OLS ;

: G_BHR N_BHR GOTO ; : W_BHR G_BHR OLS ;

: G_KH N_KH GOTO ; : W_KH G_KH OLS ;

: G_TRC N_TRC GOTO ; : W_TRC G_TRC OLS ;

: G_VAL N_VAL GOTO ; : W_VAL G_VAL OLS ;

: G_HIS N_HIS GOTO ; : W_HIS G_HIS OLS ;


Информация о работе «Объектно-ориентированная СУБД (прототип)»
Раздел: Информатика, программирование
Количество знаков с пробелами: 117457
Количество таблиц: 9
Количество изображений: 4

Похожие работы

Скачать
35774
0
0

... ); Pisa в университетах Глазго и Св. Эндрю (Universities of Glasgo and St. Andrew). Среди исследовательских институтов, в которых существовали мощные группы, ориентированные на исследования в области объектно-ориентированных баз данных, входили OGI (Oregon Graduate Institute ), MCC (Microelectronics and Computer Technology Corporation ) и французский исследовательский центр INRIA . На базе ...

Скачать
34318
0
0

... ООП. Сейчас язык С++ является языком публикаций по вопросам ООП. Практикум на С/С++:Фактически С++ содержит 2 языка: Полностью включает низкоуровневый Си, поддерживающий конструкции СП, и, собственно, С++ (Си с классами) – язык объектно-ориентированного программирования (ООП). Мы находимся сейчас на технологической ступени структурного программирования, поэтому начинаем с Си: Знакомство с С, ...

Скачать
515112
3
0

... СУБД; можно управлять распределением областей внешней памяти, контролировать доступ пользователей к БД и т.д. в масштабах индивидуальной системы, масштабах ограниченного предприятия или масштабах реальной корпоративной сети. В целом, набор серверных продуктов одиннадцатого выпуска компании Sybase представляет собой основательный, хорошо продуманный комплект инструментов, которые можно ...

Скачать
237727
39
0

... , а иногда и невозможным. Недостатки MOLAP-модели: ·           Многомерные СУБД не позволяют работать с большими базами данных. ·           Многомерные СУБД по сравнению с реляционными очень неэффективно используют внешнюю память. В подавляющем большинстве случаев информационный гиперкуб является сильно разреженным, а поскольку данные хранятся в упорядоченном виде, неопределенные значения ...

0 комментариев


Наверх