Subversion Repositories Kolibri OS

Rev

Rev 3534 | Rev 3732 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3534 Rev 3539
Line 3... Line 3...
3
;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
3
;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
4
;; Distributed under terms of the GNU General Public License    ;;
4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 7... Line 7...
7
 
7
 
Line 8... Line 8...
8
$Revision: 3534 $
8
$Revision: 3539 $
9
 
9
 
Line 629... Line 629...
629
        inc     [pg_data.pages_faults]
629
        inc     [pg_data.pages_faults]
Line 630... Line 630...
630
 
630
 
Line 631... Line 631...
631
        mov     eax, [pf_err_code]
631
        mov     eax, [pf_err_code]
632
 
632
 
Line 633... Line 633...
633
        cmp     ebx, OS_BASE      ;ebx == .err_addr
633
        cmp     ebx, OS_BASE      ;ebx == .err_addr
634
        jb      .user_space       ;ñòðàíèöà â ïàìÿòè ïðèëîæåíèÿ ;
634
        jb      .user_space       ;страница в памяти приложения ;
Line 635... Line 635...
635
 
635
 
636
        cmp     ebx, page_tabs
636
        cmp     ebx, page_tabs
637
        jb      .kernel_space     ;ñòðàíèöà â ïàìÿòè ÿäðà
637
        jb      .kernel_space     ;страница в памяти ядра
638
 
638
 
639
        cmp     ebx, kernel_tabs
639
        cmp     ebx, kernel_tabs
640
        jb      .alloc;.app_tabs  ;òàáëèöû ñòðàíèö ïðèëîæåíèÿ ;
640
        jb      .alloc;.app_tabs  ;таблицы страниц приложения ;
641
                                  ;ïðîñòî ñîçäàäèì îäíó
641
                                  ;просто создадим одну
642
if 0 ;ïîêà ýòî ïðîñòî ëèøíåå
642
if 0 ;пока это просто лишнее
643
        cmp     ebx, LFB_BASE
643
        cmp     ebx, LFB_BASE
644
        jb      .core_tabs        ;òàáëèöû ñòðàíèö ÿäðà
644
        jb      .core_tabs        ;таблицы страниц ядра
645
                                  ;Îøèáêà
645
                                  ;Ошибка
646
  .lfb:
646
  .lfb:
647
                                  ;îáëàñòü LFB
647
                                  ;область LFB
648
                                  ;Îøèáêà
648
                                  ;Ошибка
649
        jmp     .fail
649
        jmp     .fail
Line 659... Line 659...
659
;        restore_ring3_context
659
;        restore_ring3_context
660
;        iretd
660
;        iretd
Line 661... Line 661...
661
 
661
 
662
.user_space:
662
.user_space:
663
        test    eax, PG_MAP
663
        test    eax, PG_MAP
664
        jnz     .err_access       ;Ñòðàíèöà ïðèñóòñòâóåò
664
        jnz     .err_access       ;Страница присутствует
Line 665... Line 665...
665
                                  ;Îøèáêà äîñòóïà ?
665
                                  ;Ошибка доступа ?
666
 
666
 
667
        shr     ebx, 12
667
        shr     ebx, 12
668
        mov     ecx, ebx
668
        mov     ecx, ebx
669
        shr     ecx, 10
669
        shr     ecx, 10
670
        mov     edx, [master_tab+ecx*4]
670
        mov     edx, [master_tab+ecx*4]
671
        test    edx, PG_MAP
671
        test    edx, PG_MAP
Line 672... Line 672...
672
        jz      .fail             ;òàáëèöà ñòðàíèö íå ñîçäàíà
672
        jz      .fail             ;таблица страниц не создана
673
                                  ;íåâåðíûé àäðåñ â ïðîãðàììå
673
                                  ;неверный адрес в программе
674
 
674
 
675
        mov     eax, [page_tabs+ebx*4]
675
        mov     eax, [page_tabs+ebx*4]
676
        test    eax, 2
676
        test    eax, 2
677
        jz      .fail             ;àäðåñ íå çàðåçåðâèðîâàí äëÿ ;
677
        jz      .fail             ;адрес не зарезервирован для ;
678
                                  ;èñïîëüçîâàíèÿ. Îøèáêà
678
                                  ;использования. Ошибка
679
.alloc:
679
.alloc:
Line 729... Line 729...
729
        rep movsd
729
        rep movsd
730
        jmp     .exit
730
        jmp     .exit
Line 731... Line 731...
731
 
731
 
732
.kernel_space:
732
.kernel_space:
733
        test    eax, PG_MAP
733
        test    eax, PG_MAP
Line 734... Line 734...
734
        jz      .fail   ;ñòðàíèöà íå ïðèñóòñòâóåò
734
        jz      .fail   ;страница не присутствует
735
 
735
 
736
        test    eax, 12 ;U/S (+below)
736
        test    eax, 12 ;U/S (+below)
737
        jnz     .fail   ;ïðèëîæåíèå îáðàòèëîñü ê ïàìÿòè
737
        jnz     .fail   ;приложение обратилось к памяти
738
                        ;ÿäðà
738
                        ;ядра
739
       ;test    eax, 8
739
       ;test    eax, 8
Line 740... Line 740...
740
       ;jnz     .fail   ;óñòàíîâëåí çàðåçåðâèðîâàííûé áèò
740
       ;jnz     .fail   ;установлен зарезервированный бит
Line 741... Line 741...
741
                        ;â òàáëèöàõ ñòðàíèö. äîáàâëåíî â P4/Xeon
741
                        ;в таблицах страниц. добавлено в P4/Xeon
742
 
742
 
Line 743... Line 743...
743
;ïîïûòêà çàïèñè â çàùèù¸ííóþ ñòðàíèöó ÿäðà
743
;попытка записи в защищённую страницу ядра