Разделение програмы в многоядерных процесорах

Тема в разделе "WASM.OS.DEVEL", создана пользователем DimaNS, 3 фев 2012.

  1. DimaNS

    DimaNS New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2012
    Сообщения:
    42
    какой вид тогда будет иметь инструкция mov eax,[0x0FEE00020]?
     
  2. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    Начали с шедулера, кончили дурацкими вопросами про мнемоники. Прогресс :lol:
     
  3. DimaNS

    DimaNS New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2012
    Сообщения:
    42
    почему при выполнении команд в х64
    Код (Text):
    1. mov r9,0xFEE00020
    2. mov eax,[r9]
    комп перезагружается?
     
  4. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    чтобы к памяти обратиться надо сначала cоздать PTE которая описывает эту страницу (и соответственно PDE, PDPTE и PML4E)
     
  5. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Видать, компилятор тупо пытается сформировать rip-относительный адрес (+/- 2 гб). Попробуй так: mov eax,[dword 0x0FEE00020]
     
  6. DimaNS

    DimaNS New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2012
    Сообщения:
    42
    где можно про это почитать на русском? а то смотрю в мани на английском и туго понимаю..
     
  7. DimaNS

    DimaNS New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2012
    Сообщения:
    42
    блин з головы вылетело это...
     
  8. DimaNS

    DimaNS New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2012
    Сообщения:
    42
    объясните пожалуйста этот участок кода
    Код (Text):
    1.     mov dword [0x70000],0x71000 + 3  ; PDPTE
    2.     mov dword [0x71000],0x72000 + 3 ; PDE
    3.     mov dword [0x72000],0x73000 + 3 ; PTE
    4.        
    5.         mov eax,4096*7
    6.     or eax,3
    7.     mov dword [0x73000+7*8],eax
    8.    
    9.         mov eax,4096*0xB8
    10.     or eax,3
    11.     mov dword [0x73000+0xB8*8],eax
     
  9. DimaNS

    DimaNS New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2012
    Сообщения:
    42
    как создать структуру таблиц PML4E для адресного пространства в 4gb???
     
  10. DimaNS

    DimaNS New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2012
    Сообщения:
    42
    для описания страницы 1-го гигабайта я использую
    Код (Text):
    1. mov [0x900000],dword 0x901000+3   ;Адрес PDPE + начальные управляющие биты (11b)
    2. mov [0x901000],dword 0x902000+3 ;Адрес PDE  + начальные управляющие биты (11b)
    3. xor eax,eax
    4. xor esi,esi
    5. mov ecx,15+128     ;128==PDE.PS   Установка бита PS  (размер страниц, 1 = 2 мб)
    6. @@:
    7. mov [0x902000+esi],ecx  ;Заполняем каталог PDE
    8. add ecx,eax        ;следующий адрес в памяти
    9. add esi,8          ;следующий элемент
    10. cmp esi,8*512      ;Последний 512 элемент?
    11. jne @b
    как мне описать страницы 2-го гигабайта??

    вопрос решен...
    Код (Text):
    1. mov [0x900000],dword 0x901000+3   ;Адрес PDPE + начальные управляющие биты (11b)
    2. mov [0x901000],dword 0x902000+3 ;Адрес PDE  + начальные управляющие биты (11b)
    3. mov [0x901000+8],dword 0x903000+3 ;Адрес PDE  + начальные управляющие биты (11b)
    4. xor eax,eax
    5. xor esi,esi
    6. mov ecx,15+128     ;128==PDE.PS   Установка бита PS  (размер страниц, 1 = 2 мб)
    7. @@:
    8. mov [0x902000+esi],ecx  ;Заполняем каталог PDE
    9. add ecx,eax        ;следующий адрес в памяти
    10. add esi,8          ;следующий элемент
    11. cmp esi,8*512      ;Последний 512 элемент?
    12. jne @b
    13. xor esi,esi
    14. mov ecx,15+128     ;128==PDE.PS   Установка бита PS  (размер страниц, 1 = 2 мб)
    15. @@:
    16. mov [0x902000+esi],ecx  ;Заполняем каталог PDE
    17. add ecx,eax        ;следующий адрес в памяти
    18. add esi,8          ;следующий элемент
    19. cmp esi,8*512      ;Последний 512 элемент?
    20. jne @b
     
  11. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Я на практике не занимался длинным режимом, но можно попробовать посчитать.

    Твое пространство в 4 гига подпадает под уровень PDirTab (одна такая таблица описывает 512 гиг). Следовательно, таблицу PML4 ты делаешь с одной фиксированной ссылкой и больше ее не трогаешь. Таблица страниц, отображаемая в ВАП, для одной PDirTab имеет размер 1 гиг. Чтобы не отнимать 1 гиг от твоих 4, нужно отображать таблицу в пятом гигабайте. Каждый вход PDirTab описывает 1 гиг, поэтому у тебя должно быть 4 "рабочих" входа и 1 вход со ссылкой на себя для отображения таблицы в ВАП. Получаем ВАП со след. структурой:
    - 4 гб - "рабочее" пространство;
    - 8 мб - таблицы страниц (2048 шт.), описывающие "рабочее" пространство;
    - 16 кб - каталоги (4 шт.), описывающие таблицы страниц для "рабочего" пространства;
    - 4 кб, а фактически только первые 5 входов, - таблица каталогов с 4 "рабочими" входами и со ссылкой на себя.

    Чтобы сделать идентичное отображение первых 2 мег, нужно проинициализировать первую таблицу страниц, первый вход первого каталога (чтобы не делать предыдущий шаг, можно в этом входе установить PS=1) и первый вход таблицы каталогов. В итоге имеем:
    PML4: статичная ссылка на PDirTab (и 511 нулевых входов);
    PDirTab: ссылка на PDir, 3 нулевых входа, статичная ссылка на себя (и 507 нулевых входов);
    PDir: ссылка на PTab (и 511 нулевых входов);
    PTab (если используются страницы размером 4 кб): ссылки на 512 конечных страниц.
     
  12. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    в long mode можно использовать страницы размером 1 ГБ, там получается всё элементарно. создать одну запись в PML4 и 4 записи в PDPT. ВСЁ! все 4 гига покрыты! курим маны, там всё написано как для "особо одарённых".


    а вообще это всё необязательно, достаточно создать одну страницу по любому удобному адресу и спроецировать её на нужный адрес
     
  13. DimaNS

    DimaNS New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2012
    Сообщения:
    42
    почему по адресу 0xFEE00020 в х32 содержится 00000000h а в х64 содержится F000FEA5h??
     
  14. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Да, можно, но они не всегда поддерживаются. К тому же на практике пока такое нужно только для того, чтобы по-быстрому выполнить инициализацию пэйджинга и забыть про его существование, т.е. о реальном управлении пэйджингом речи не идет.
     
  15. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Потому что у тебя допущена где-то ошибка. И вообще сама фраза не очень корректна.
     
  16. DimaNS

    DimaNS New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2012
    Сообщения:
    42
    ошибка где-то в таблицах PDE, PDPTE,PML4E ??
     
  17. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Естественно (я надеюсь, до перехода в длинный режим пэйджинг был отключен).
     
  18. DimaNS

    DimaNS New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2012
    Сообщения:
    42
    вот весь код
    Код (Text):
    1. ORG 0x7c00
    2. use16
    3. start:
    4. ;очистка экрана
    5. mov  ax,3
    6. int  10h
    7. ;иинициализация RM-сегментов и стека
    8. mov  ax,cs
    9. mov  ds,ax
    10. mov  es,ax
    11. mov  ss,ax
    12. mov  sp,start
    13. mov  bp,sp
    14. ;чтение остальных секторов
    15. mov  ah,2
    16. mov  al,40
    17. xor  ch,ch
    18. mov  cl,2
    19. ;xor  dx,dx
    20. xor dh,dh
    21. ;mov dl,80h ;диск для чтения
    22. mov dl,0h
    23. mov  bx,start + 512
    24. int  13h
    25. jnc continue_loading   
    26. ;Выравниваем код на 4кб
    27. mov si, continue_loading
    28. xor ax, ax
    29. mov es, ax
    30. mov di, 8000h
    31. mov cx, end_pr-continue_loading
    32. rep movsb
    33. ;переходим на вировняный код
    34. jmp 8000h
    35.  
    36.  
    37. db 510 - ($ - $$) dup 0, 0x55, 0xAA
    38.  
    39. db 10000 dup(00h)
    40.  
    41. continue_loading:
    42.  
    43. cli             ; disable the interrupts, just in
    44. in   al, 70h
    45. or   al, 80h
    46. out 70h, al                    ; case they are not disabled yet
    47.  
    48. lgdt    [cs:GDTR]       ; load GDT register
    49.  
    50. mov eax,cr0         ; switch to protected mode
    51. or  al,1
    52. mov cr0,eax
    53.  
    54. jmp 16:pm_start
    55.  
    56.  
    57.  
    58. GDTR:                   ; Global Descriptors Table Register
    59.   dw 31             ; limit of GDT (size minus one)
    60.   dq GDT                ; linear address of GDT
    61.  
    62. GDT:
    63.     db 0,0,0,0,0,0,0,0
    64.     db 0xFF, 0xFF,0,0, 0, 10010010b,10001111b, 0
    65.     db 0xFF, 0xFF,0,0,0, 10011010b,11001111b, 0
    66.     db 0, 0, 0,0, 0,10011010b,10100000b, 0
    67.  
    68.    
    69. USE32
    70. pm_start:
    71.  
    72.     mov ax,8
    73.     mov ds,ax
    74.  
    75.     mov eax,cr4
    76.     or  eax,0x20
    77.     mov cr4,eax         ; enable physical-address extensions
    78.  
    79.    
    80.    
    81. mov [0x70000],dword 0x71000+15    ;Адрес PDPE + начальные управляющие биты (1111b)
    82. mov [0x71000],dword 0x72000+15    ;Адрес PDE  + начальные управляющие биты (1111b)
    83. mov [0x71000+8],dword 0x73000+15  ;Адрес PDE  + начальные управляющие биты (1111b)
    84. mov [0x71000+16],dword 0x74000+15 ;Адрес PDE  + начальные управляющие биты (1111b)
    85. mov [0x71000+24],dword 0x75000+15 ;Адрес PDE  + начальные управляющие биты (1111b)
    86. ;mov [0x901000+32],dword 0x907000+3
    87.  
    88. ;PDE
    89. xor eax,eax
    90. mov edi,0x72000
    91. call PDE_2M  
    92.  
    93. mov edi,0x73000
    94. call PDE_2M
    95.  
    96. mov edi,0x74000
    97. call PDE_2M
    98.    
    99. mov edi,0x75000
    100. call PDE_2M  
    101.  
    102.  
    103.  
    104.     mov eax,0x70000  ;Указатель на PML4 таблицу (должен быть < 4GB).
    105.     mov cr3,eax         ;Инициализация CR3 с PML4.
    106.   ;включаем 64-битній режим
    107.     mov ecx,0xC0000080 ; EFER MSR
    108.     rdmsr
    109.     or  eax,0x100       ; включаем длинный режим
    110.     wrmsr
    111.   ;Включаем страничную адресацию (CR0.PG=1)
    112.     mov eax,cr0
    113.     or  eax,0x80000000
    114.     mov cr0,eax        
    115.   ;переходим на 64 битный код
    116.     jmp 24:long_start
    117.  
    118. use64
    119. long_start:
    120.     mov rax,'L O N G '
    121.     mov [0x0B8000],rax
    122.  
    123. mov ecx,1Bh
    124. rdmsr
    125. bts eax,11
    126. wrmsr
    127.  
    128.  
    129.  
    130. mov eax,dword [dword 0xFEE00020]
    131. ;mov eax,1;[0x0B8000]
    132. mov edi,160
    133. call hex
    134.  
    135. ;  mov rax,4
    136. ;  mov edi,160
    137. ;  call hex
    138.  
    139.  
    140.  
    141.  
    142.     cli
    143.     hlt
    144.  
    145. use64
    146.  
    147. hex:
    148. push rax rdx rcx
    149. mov   cl,64-4        
    150. xchg  rdx,rax        
    151. Repea:
    152. mov     rax,rdx
    153. shr     rax,cl          
    154. and     al,0Fh        
    155. add     al,'0'        
    156. cmp     al,'9'        
    157. jbe     Digit09        
    158. add     al,'A'-('9'+1)
    159. Digit09:
    160. mov byte [0x0B8000+edi],al
    161. mov al,7
    162. mov byte [0x0B8001+edi],al
    163. add edi,2
    164. sub     cl,4          
    165. jnc     Repea  
    166. pop rcx rdx rbx
    167. ret
    168.  
    169. use32
    170. PDE_2M:
    171.     xor esi,esi
    172.     mov ecx,15+128     ;128==PDE.PS   Установка бита PS  (размер страниц, 1 = 2 мб)
    173.     ;mov eax,1 SHL 21      ;2097152 = 1000000000000000000000b  - установка 21 бита для увеличения адреса    
    174. @@:
    175.     mov [edi+esi],ecx  ;Заполняем каталог PDE
    176.     add ecx,eax        ;следующий адрес в памяти
    177.     add esi,8          ;следующий элемент
    178.     cmp esi,8*512      ;Последний 512 элемент?
    179.     jne @b
    180. ret
    181. end_pr:
    где здесь ошибка??
     
  19. DimaNS

    DimaNS New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2012
    Сообщения:
    42
  20. DimaNS

    DimaNS New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2012
    Сообщения:
    42
    Подскажите пожалуйста!!! я уже запарился второю неделю это ковырять:dntknw:
    почему при создании таблиц PDE, PDPTE,PML4E:
    Код (Text):
    1. mov dword [0x70000],0x71000 + 3  ; PDPTE
    2. mov dword [0x71000],0x72000 + 3 ; PDE
    3.  
    4. xor eax,eax
    5. mov ecx,15+128
    6. add ecx,eax  
    7. mov dword [0x72000+eax],ecx
    я могу обращаться к памяти 0х000000-0х1FFFFC а не 0х000000-0х1FFFFF??
    где я допустил ошибку???