πŸ“Œ ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π΅Π»Π΅Π³Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ Π½Π΅ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… инструкций Π² RISC-V

Π’ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ RISC-V прСдусмотрСна чёткая модСль ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ случаи выполнСния Π½Π΅Π»Π΅Π³Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ»ΠΈ Π½Π΅ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… инструкций. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ядра, Ρ‚Π°ΠΊ ΠΈ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм.

🧠 Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Когда происходит ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ:

  • Π½Π΅ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ (Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ISA),
  • ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΈΠ· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½ΠΎΠ³ΠΎ Π² Π΄Π°Π½Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, F, D, C),
  • Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ,

Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ trap (ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅) Ρ‚ΠΈΠΏΠ° Illegal Instruction.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ рСгистры:

РСгистрНазначСниС
mcauseΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° trap’а (mcause = 2 для Illegal Instruction)
mepcадрСс инструкции, Π²Ρ‹Π·Π²Π°Π²ΡˆΠ΅ΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
mtvalсодСрТит ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠΉ инструкции (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ноль)
mtvecадрСс ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Machine

// ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π² mtvec
void handle_trap() {
    uintptr_t cause = read_csr(mcause);
    if (cause == 2) {
        uintptr_t inst = read_csr(mtval);
        uintptr_t epc = read_csr(mepc);
        printf("Illegal instruction 0x%lx at PC=0x%lx\n", inst, epc);
        // Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ: ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ
    }
}

βš™οΈ Π“Π΄Π΅ примСняСтся

  • Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах Π½Π° RISC-V, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Linux Kernel, для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сигнала SIGILL

  • Π’ Π³ΠΈΠΏΠ΅Ρ€Π²ΠΈΠ·ΠΎΡ€Π°Ρ… ΠΈ эмуляторах β€” для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ fallback ΠΈΠ»ΠΈ эмуляции инструкций

  • Π’ кастомных ядрах β€” ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ soft-float, soft-MMU ΠΈ Ρ‚.ΠΏ.


βœ… ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°

  • Полная спСцификация trap-ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°, стандартизованная Ρ‡Π΅Ρ€Π΅Π· Privileged ISA

  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ эмуляции Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΡ… Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· trap + software fallback)

  • ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΎΡ‚Π»Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ошибки ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ бСзопасный Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ исполнСния


❌ НСдостатки

  • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° trap’ов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΡ€ΠΎΠ³ΠΎΠΉ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (context switch)

  • Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ со стороны firmware ΠΈΠ»ΠΈ ОБ