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

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

  1. DimaNS

    DimaNS New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2012
    Сообщения:
    42
    Если кому-то понадобится то вот правильная реализация структуры таблиц... (2gb страницы в 2mb)
    Код (Text):
    1. mov dword [0x70000],0x71000 + 3  ; PDPTE
    2. mov dword [0x71000],0x72000 + 3 ; PDE
    3. mov dword [0x71000+8],0x73000 + 3 ; PDE
    4.  
    5. mov eax,0x72000
    6. mov ebx,010000011b
    7. xor esi,esi
    8. mov ecx,512
    9. @@:
    10. mov dword [eax+esi],ebx
    11. add esi,8
    12. add ebx,200000h
    13. loop @b
    14.  
    15. mov eax,0x73000
    16. mov ebx,40000000h + 010000011b
    17. xor esi,esi
    18. mov ecx,512
    19. @@:
    20. mov dword [eax+esi],ebx
    21. add esi,8
    22. add ebx,200000h
    23. loop @b
     
  2. DimaNS

    DimaNS New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2012
    Сообщения:
    42
    как разрешить или запретить определенное прерывание irq в x64???

    в х32 я делал это так:
    Код (Text):
    1. in al,21h
    2. and al,11110111b
    3. out 21h,al
    4.  
    5. in al,0A0h
    6. and al,11111111b
    7. out 0A0h,al
     
  3. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    так же
     
  4. DimaNS

    DimaNS New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2012
    Сообщения:
    42
    подскажите пожалуйста в чем проллема??
    при
    Код (Text):
    1. in al,21h
    2. and al,11111111b
    3. out 21h,al
    4.  
    5. in al,0A0h
    6. and al,11111111b
    7. out 0A0h,al
    все прерывания работают... а не должны..
    где я напартачил??


    Код (Text):
    1. start1:
    2. ORG 0x7c00
    3. use16
    4. start:
    5. ;очистка экрана
    6. mov  ax,3
    7. int  10h
    8. ;иинициализация RM-сегментов и стека
    9. mov  ax,cs
    10. mov  ds,ax
    11. mov  es,ax
    12. mov  ss,ax
    13. mov  sp,start
    14. mov  bp,sp
    15. ;чтение остальных секторов
    16. mov  ah,2
    17. mov  al,40
    18. xor  ch,ch
    19. mov  cl,2
    20. ;xor  dx,dx
    21. xor dh,dh
    22. mov dl,80h ;диск для чтения
    23. ;mov dl,0h
    24. mov  bx,start + 512
    25. int  13h
    26. jnc continue_loading   
    27. ;Выравниваем код на 4кб
    28. mov si, continue_loading
    29. xor ax, ax
    30. mov es, ax
    31. mov di, 8000h
    32. mov cx, end_pr-continue_loading
    33. rep movsb
    34. ;переходим на вировняный код
    35. jmp 8000h
    36.  
    37. db 510 - ($ - $$) dup 0, 0x55, 0xAA
    38.  
    39. db 10000 dup(00h)
    40.  
    41. continue_loading:
    42. ; Открыть линию A20
    43. in   al,92h
    44. or   al,2
    45. out 92h,al
    46.  
    47. ;Загрузить адрес и размер GDT в GDTR
    48. lgdt  [gdtr]
    49. ;Загрузить адрес и размер IDT в IDTR
    50. ;lidt  [idtr]
    51. ;Запретить прерывания
    52. cli
    53. in  al,70h
    54. or  al,80h
    55. out 70h,al
    56.  
    57. ;Переходим в защищенный режим
    58. mov eax,cr0
    59. or  al,1
    60. mov cr0,eax
    61. ;jmp  8h:pm_entry
    62. jmp  16:pm_entry
    63. ;32-битная адресация
    64. use32
    65. ;Точка входа в защищенный режим
    66. pm_entry:
    67.     mov ax,8
    68.     mov ds,ax
    69.   ;mov es,ax
    70.  
    71. mov dword [0x70000],0x71000 + 3  ; PDPTE
    72. mov dword [0x71000],0x72000 + 3 ; PDE
    73. mov dword [0x71000+8],0x73000 + 3 ; PDE
    74. mov dword [0x71000+16],0x74000 + 3 ; PDE
    75. mov dword [0x71000+24],0x75000 + 3 ; PDE
    76.  
    77. mov eax,0x72000
    78. mov ebx,010000011b
    79. xor esi,esi
    80. mov ecx,512
    81. @@:
    82. mov dword [eax+esi],ebx
    83. add esi,8
    84. add ebx,200000h
    85. loop @b
    86.  
    87. mov eax,0x73000
    88. mov ebx,40000000h + 010000011b
    89. xor esi,esi
    90. mov ecx,512
    91. @@:
    92. mov dword [eax+esi],ebx
    93. add esi,8
    94. add ebx,200000h
    95. loop @b
    96.  
    97. mov eax,0x74000
    98. mov ebx,80000000h + 010000011b
    99. xor esi,esi
    100. mov ecx,512
    101. @@:
    102. mov dword [eax+esi],ebx
    103. add esi,8
    104. add ebx,200000h
    105. loop @b
    106.  
    107. mov eax,0x75000
    108. mov ebx,0xC0000000 + 010000011b
    109. xor esi,esi
    110. mov ecx,512
    111. @@:
    112. mov dword [eax+esi],ebx
    113. add esi,8
    114. add ebx,200000h
    115. loop @b
    116.    
    117.     ;mov eax,4096*7
    118.     ;or eax,3
    119.     ;mov dword [0x73000+7*8],eax
    120.  
    121. mov eax,cr4
    122. bts eax,5  ; PAE = 1
    123. mov cr4,eax
    124. ; поместить адрес каталога страниц в CR3
    125. mov eax,0x70000 ; базовый адрес
    126. mov cr3,eax
    127. ; включить 64-битный режим
    128. mov ecx,0xC0000080 ; EFER MSR
    129. rdmsr
    130. or  eax,0x100       ; enable long mode
    131. wrmsr
    132. ; включить страничную адресацию,
    133. mov eax,cr0
    134. or  eax,0x80000000
    135. mov cr0,eax
    136.  
    137. ;переходим на 64 битный код    
    138.  
    139. jmp 24:long_start1
    140.  
    141.     USE64
    142.  
    143. long_start1:
    144.     mov rax,'L O N G '
    145.     mov [0x0B8000],rax
    146. ;Загрузить адрес и размер GDT в GDTR
    147. lgdt  [GDTR64]  
    148. ;Загрузить адрес и размер IDT в IDTR
    149. lidt  [idtr]
    150. ;запуск APIC
    151. mov ecx,1Bh
    152. rdmsr
    153. bts eax,11
    154. wrmsr
    155. ;ведущий
    156. mov dx,20h
    157. mov ah,20h
    158.  
    159. mov al,11h
    160. out dx,al
    161. mov al,ah
    162. inc dx
    163. out dx,al
    164. mov al,4
    165. out dx,al
    166. mov al,1
    167. out dx,al
    168. ;ведомый
    169. mov dx,0A0h
    170. mov ah,28h
    171.  
    172. mov al,11h
    173. out dx,al
    174. mov al,ah
    175. inc dx
    176. out dx,al
    177. mov al,2
    178. out dx,al
    179. mov al,1
    180. out dx,al
    181. ;-----------------
    182.  
    183. in al,21h
    184. and al,11111111b
    185. out 21h,al
    186.  
    187. in al,0A0h
    188. and al,11111111b
    189. out 0A0h,al
    190. ;Разрешаем прерывания
    191. in   al, 70h
    192. and  al, 7Fh
    193. out  70h, al
    194. sti
    195.  
    196.  
    197. ;int 20h
    198.  
    199.  
    200. mov rax,(exit1 shr 32)
    201. mov edi,160
    202. call hex
    203.  
    204. mov rax,exit1
    205. mov edi,320
    206. call hex
    207. ;иницыализация сетевой карты
    208. ;call NET  
    209.  
    210.  
    211. trt1:  
    212. ;   cli
    213. ;   hlt
    214. jmp $
    215.  
    216. use64
    217. include 'x64/network.inc'
    218.  
    219. GDT64:
    220.     dq 0
    221.     db      0FFh,0FFh,00h,00h,00h,10011010b,11001111b,00h
    222.     db      0FFh,0FFh,00h,00h,00h,10010010b,11001111b,00h
    223.     db    00h, 00h, 00h,00h,00h,10011000b,00100000b,00h
    224.     ;DEFINE_TSS64Descr TSS, TSS_Size-1
    225. GDT64_size    equ         $-GDT64
    226.  
    227. GDTR64:
    228.       dw GDT64_size-1
    229.       dq GDT64
    230. idt:
    231.   dq 0,0 ;0  #DE  Divede by zero error
    232.   dq 0,0 ;1  #DB  Debug
    233.   dq 0,0 ;2  #NMI Not maskable interrupt
    234.   dq 0,0 ;3  #BP  Breakepoint
    235.   dq 0,0 ;4  #OF  Overflow
    236.   dq 0,0 ;5  #BR  Bound range
    237.   dq 0,0 ;6  #UD  Invalide opcode
    238.   dq 0,0 ;7  #NM  Device not available
    239.   dq 0,0 ;8  #DF  Double fault
    240.   dq 0,0 ;9 --   Coprocessor segment overrun (unsuppored)
    241.   dq 0,0 ;10 #TS  Invalide TSS
    242.   dq 0,0 ;11 #NP  Segment not present
    243.   dq 0,0 ;12 #SS  Stack
    244.   dq 0,0 ;13 #GP  General protection
    245.   dq 0,0 ;14 #PF  Page fault
    246.   dq 0,0 ;15 Reserved
    247.   dq 0,0 ;16 #MF  x87 floating point exception pending
    248.   dq 0,0 ;17 #AC  Aligment check
    249.   dq 0,0 ;18 #MC  Machine check
    250.   dq 0,0 ;19 #XF  SIMD floating point
    251.   dq 0,0 ;20 Reserved
    252.   dq 0,0 ;21 Reserved
    253.   dq 0,0 ;22 Reserved
    254.   dq 0,0 ;23 Reserved
    255.   dq 0,0 ;24 Reserved
    256.   dq 0,0 ;25 Reserved
    257.   dq 0,0 ;26 Reserved
    258.   dq 0,0 ;27 Reserved
    259.   dq 0,0 ;28 Reserved
    260.   dq 0,0 ;29 Reserved
    261.   dq 0,0 ;30 #SX  Security exception
    262.   dq 0,0 ;31 Reserved  
    263.   dq 0x00008E0000000000+18h*0x10000+exit1,0
    264.   dq 0x00008E0000000000+18h*0x10000+exit,0
    265.   dq 0x00008E0000000000+18h*0x10000+exit,0
    266.   dq 0x00008E0000000000+18h*0x10000+exit1,0
    267.   ;dd (exit and 0FFFFh) or (18h shl 16)
    268.     ;dd (8000h or (0 shl 13) or (1110b shl 8) or 0) or ((exit shr 16) and 0FFFFh)
    269.     ;dd (exit shr 32)
    270.     ;dd 0;32 IRQ(0)
    271.  
    272.   ;dd (exit1 and 0FFFFh) or (18h shl 16)
    273.     ;dd (8000h or (0 shl 13) or (1110b shl 8) or 0) or ((exit1 shr 16) and 0FFFFh)
    274.     ;dd (exit1 shr 32)
    275.     ;dd 0;33 IRQ(1)
    276.  
    277.   ;dd (exit and 0FFFFh) or (18h shl 16)
    278.     ;dd (8000h or (0 shl 13) or (1110b shl 8) or 0) or ((exit shr 16) and 0FFFFh)
    279.     ;dd (exit shr 32)
    280.     ;dd 0;34 IRQ(2)
    281.     ;dw exit1,18h,1000111000000000b,0
    282.   ;dd (exit1 and 0FFFFh) or (18h shl 16)
    283.     ;dd (8000h or (0 shl 13) or (1110b shl 8) or 0) or ((exit1 shr 16) and 0FFFFh)
    284.     ;dd (exit1 shr 32)
    285.     ;dd 0 ;35 IRQ(3)
    286.  
    287. idt_size  equ $ - idt
    288. idtr:
    289.   dw idt_size - 1
    290.   dq idt
    291.  
    292. tx dq 0
    293. exit:
    294. push ax  ;разрешить преривания с более низким приорететом
    295. mov al,20h
    296. out 20h,al
    297. pop ax
    298.  
    299. iret
    300. exit1:
    301. push ax  ;разрешить преривания с более низким приорететом
    302. mov al,20h
    303. out 20h,al
    304. pop ax
    305.  
    306. ;in al,60h ;код клавиши
    307. inc [tx]
    308. mov rax,[tx]
    309. mov edi,320
    310. call hex
    311. iret
    312.  
    313. hex:
    314. push rax rdx rcx
    315. mov   cl,64-4        
    316. xchg  rdx,rax        
    317. Repea:
    318. mov     rax,rdx
    319. shr     rax,cl          
    320. and     al,0Fh        
    321. add     al,'0'        
    322. cmp     al,'9'        
    323. jbe     Digit09        
    324. add     al,'A'-('9'+1)
    325. Digit09:
    326. mov byte [0x0B8000+edi],al
    327. mov al,7
    328. mov byte [0x0B8001+edi],al
    329. add edi,2
    330. sub     cl,4          
    331. jnc     Repea
    332. pop rcx rdx rbx
    333. ret
    334.  
    335. delay:
    336. ; input
    337. ;       EAX - microseconds
    338.  
    339.     push rax rdx rcx
    340.  
    341.     mov ecx, eax
    342.     mov eax, 1000000
    343.     xor edx, edx
    344.     div ecx
    345.    
    346.     mov ecx, eax
    347.     mov eax, 1193182
    348.     xor edx, edx
    349.     div ecx
    350.  
    351.     out 42h, al
    352.     xchg    al, ah
    353.     out 42h, al
    354.  
    355. .rep:
    356.     in  al,0x61
    357.     test    al, 20h
    358.     jz  .rep
    359.    
    360.     pop rcx rdx rax
    361. ret
    362.  
    363. use32
    364. ;GDT.
    365. gdt:
    366.    db  8 dup (0);0
    367.    db  0FFh,0FFh,00h,00h,00h,10010010b,10001111b,00h;8
    368.    db    0FFh,0FFh,00h,00h,00h,10011010b,11001111b,00h;16
    369.    ;db  0,   0,   0,  0,  0,  10011010b,10100000b,0  ;24
    370.    ;    db 0xFF, 0xFF,0,0, 0, 10010010b,10001111b, 0
    371.    ; db 0xFF, 0xFF,0,0,0, 10011010b,11001111b, 0
    372.     db 0, 0, 0,0, 0,10011010b,10100000b, 0
    373. gdt_size  equ $ - gdt
    374. gdtr:
    375.    dw  gdt_size - 1
    376.    dd  gdt  
    377. hex1:
    378. pushad
    379. mov   cl,32-4        
    380. xchg  edx,eax        
    381. Repea1:
    382.                 mov     eax,edx          ; Восстанавливаем число в AX
    383.                 shr     eax,cl          
    384.                 and     al,0Fh        
    385.                 add     al,'0'        
    386.                 cmp     al,'9'        
    387.                 jbe     Digit091        
    388.                 add     al,'A'-('9'+1)
    389. Digit091:        ;int     29h
    390.                 mov byte [0x0B8000+edi],al
    391.                 mov al,7
    392.                 mov byte [0x0B8001+edi],al
    393.                 add edi,2
    394.                 sub     cl,4          
    395.                 jnc     Repea1  
    396. popad
    397. ret
    398. end_pr:
    399. times 1474560-($-start1) db 00h
     
  5. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    in al,21h
    or al,11111111b
    out 21h,al

    in al,0A1h
    or al,11111111b
    out 0A1h,al

    попробуй
     
  6. DimaNS

    DimaNS New Member

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

    DimaNS New Member

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