Разработка прототипа системы управления объектно-ориентированной базой данных



Кэширование объектов


PROGRAM $LS_CASH

[ Каналы: 1 - Header M.Obj  2 - Header D.Obj  3 - M.Data  4 - D.History ]

[Считаем, что все объекты -- стабильные]

: LOADOBJ [OID] C FINDOID [искали в кэше] C BR- LOADOBJ-1 DD ;

: LOADOBJ-1 D [OID] [Ищем в каталоге БД объект] [C] LOADOBJ1 [LOADOBJ2]

     LenPrioQue 1- HIPRIO1 [] ;

: LOADOBJ1 6 LOADOBJ3 ;

[открыть дисковый объект в кэше]

: LOADOBJ3 [OID NDIRCH] EL_FIND [OID 1/0] IF0 O_NOTFND [Нет такого объекта]

  C LenPrioQue 1- ! PrioQueOID [Занесли в кэш идентификатор объекта]

  ILS [OID ADDR_MEM] [получили адрес размещения в дисковой памяти]

  LenPrioQue 1- PrioQueNUM

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

  [OID ADDR_MEM NUM]

  C 2 Channels [OID ADDR_MEM NUM CHANOBJ]

  NCHAN NBASECH - !NCHAN [получили номер базового канала]

  C3 GOTO LCTX [OID ADDR_MEM NUM] [загрузили заголовок дискового объекта]

  E2D [O N]

  C 4 Channels [OID NUM CHANHIST] [получили канал для истории]

  G_HIS ILS

  [O N C HISTORY] [HISTORY д.б. <>0]

  GOTO NCHAN E2 LCTX [Открыли историю в канале] !NCHAN [O N]

  C 3 Channels G_VAL ILS GOTO LCTX [временно открыли канал данных

                                     напрямую с жесткого диска]

  [LOADDM]

NOP [Здесь нужно установиться на объект в памяти и канал данных перекл. на него]

DD [] ;

 VAR NCHANDAT

 VAR NCHANOBJ  LONG VAR LENDAT

: COPY_DAT1 [] NCHANOBJ 0 GOTOC [NCHANOBJ] NCHAN 0 GOTO 8 DO_IOBSCC D 14 OLS

  0 OLS 10 GOTOC NCHAN 4 DO_IOBSCC DD -1 OLS -1 OLS LENDAT OLS LENDAT OLS

  COPY_DAT ;

: GOTOC [NCHAN n] C2 S( NCHAN ) !NCHAN GOTO [NCHAN] ;

: COPY_DAT [] NCHANDAT NCHAN [SRC_CH DST_CH]

              C2 !NCHAN LENVMEM [SRC_CH DST_CH LEN] 0 GOTO DO_IOBSCC DD ;




Содержание  Назад  Вперед