Bosh sahifa Wiki Register

Register

Register — protsessor ichidagi juda tez va kichik xotira elementi. CPU instructionlarni bajarishda operandlar, manzillar, holat bitlari va oraliq natijalarni registerlarda saqlaydi.

Registerga murojaat operativ xotiraga murojaatdan ancha tez. Shu sababli compiler tez-tez ishlatiladigan qiymatlarni imkon qadar registerlarda ushlashga harakat qiladi.

Register soni va vazifasi protsessor arxitekturasining instruction set architecture qismiga kiradi.

General-purpose register

Umumiy maqsadli registerlar:

  • integer qiymat;
  • pointer;
  • address;
  • counter;
  • temporary result;
  • function argument

uchun ishlatilishi mumkin.

x86-64 arxitekturasida RAX, RBX, RCX, RDX kabi registerlar mavjud.

ARM64da X0X30 kabi registerlar ishlatiladi.

Maxsus registerlar

Ba’zi registerlar maxsus vazifaga ega.

Program counter

Keyingi bajariladigan instruction manzilini saqlaydi.

x86da instruction pointer, ARMda program counter tushunchasi bilan bog‘liq.

Stack pointer

Call stackning joriy yuqori qismini ko‘rsatadi.

Frame pointer

Funksiya stack frame’iga barqaror reference beradi.

Compiler optimizationda frame pointer olib tashlanishi mumkin.

Flags register

Arithmetic va control holatlarini saqlaydi:

  • zero;
  • carry;
  • sign;
  • overflow;
  • interrupt enable;
  • privilege bilan bog‘liq bitlar.

Register width

Register hajmi arxitekturaga bog‘liq.

  • 8-bit;
  • 16-bit;
  • 32-bit;
  • 64-bit;
  • 128-bit va undan katta vector registerlar.

64-bit CPUda general-purpose registerlar ko‘pincha 64 bit.

Bitta register ichida kichik qiymatning faqat pastki qismi ishlatilishi mumkin.

Arithmetic operation

ALU operandlarni registerlardan oladi va natijani registerga yozadi.

Misol:

R1 = 10
R2 = 20
ADD R3, R1, R2
R3 = 30

Ayrim instruction operanddan birini xotiradan ham olishi mumkin, ammo ichki bajarishda qiymat baribir processor data path’iga kiradi.

Load va store

RISC arxitekturalarda arithmetic instructionlar odatda faqat registerlar bilan ishlaydi.

Xotiradan qiymat olish:

LOAD R1, [address]

Xotiraga yozish:

STORE [address], R1

Bu load-store architecture deb ataladi.

Register file

CPU ichidagi umumiy registerlar to‘plami register file deb ataladi.

U bir clock cycle ichida bir nechta operandni o‘qish va natijani yozish uchun ko‘p portga ega bo‘lishi mumkin.

Ko‘p port register file chip maydoni va energiya sarfini oshiradi.

Calling convention

Function argument va return value qaysi registerlarda uzatilishi ABI bilan belgilanadi.

Masalan, bir arxitekturada birinchi argumentlar ma’lum registerlarda, qolganlari stackda bo‘lishi mumkin.

Return value odatda alohida registerda qaytariladi.

Calling convention quyidagilarni belgilaydi:

  • argument registerlari;
  • return registeri;
  • caller-saved;
  • callee-saved;
  • stack alignment.

Caller-saved register

Function chaqiruvchi tomon register qiymati kerak bo‘lsa, chaqirishdan oldin saqlaydi.

Called function uni erkin o‘zgartirishi mumkin.

Callee-saved register

Called function registerdan foydalansa, eski qiymatni stackga saqlab, qaytishda tiklaydi.

Bu kelishuv compilerlar va turli tillarda yozilgan kodlarning birga ishlashiga imkon beradi.

Register allocation

Compiler vaqtinchalik o‘zgaruvchilarni fizik registerlarga taqsimlaydi.

Muammo:

  • virtual qiymatlar ko‘p;
  • registerlar soni cheklangan;
  • live range’lar ustma-ust tushadi.

Compiler graph coloring, linear scan yoki boshqa algoritm ishlatishi mumkin.

Register spilling

Register yetmasa, ayrim qiymatlar stack yoki memoryga vaqtincha yoziladi.

Bu spill deb ataladi.

Spill qo‘shimcha load/store instruction yaratib, performance’ni pasaytiradi.

Code optimization register pressure’ni kamaytirishga intiladi.

SIMD register

Vector instructionlar bitta register ichida bir nechta elementni parallel qayta ishlaydi.

Misollar:

  • SSE;
  • AVX;
  • NEON;
  • SVE.

Qo‘llanishlar:

Vector registerlar 128, 256, 512 bit yoki scalable hajmda bo‘lishi mumkin.

Floating-point register

Floating-point qiymatlar uchun alohida registerlar bo‘lishi mumkin.

Zamonaviy arxitekturada floating-point va SIMD registerlar bir register file’da birlashtirilishi mumkin.

Control register

Operatsion tizim CPU rejimini boshqaradigan privileged registerlardan foydalanadi.

Ular:

ni boshqarishi mumkin.

User mode dastur ularga to‘g‘ridan-to‘g‘ri kira olmaydi.

Status register

CPU instruction natijasidagi holatni saqlaydi.

Misol:

CMP R1, R2

instruction natijani yozmasdan flaglarni o‘zgartiradi. Keyingi conditional branch shu flaglarga qaraydi.

Register renaming

Out-of-order CPUlarda architectural registerlardan ko‘proq physical register mavjud bo‘lishi mumkin.

Register renaming false dependencylarni yo‘qotadi.

Masalan, bir xil RAX nomiga ketma-ket yozuvlar ichki fizik registerlarga ajratiladi.

Bu parallel instruction executionni oshiradi.

Context switch

Thread almashtirilganda uning register holati saqlanib, boshqa threadniki tiklanadi.

Saqlanadigan qiymatlar:

Katta vector register state context switch xarajatini oshirishi mumkin.

Debug register

Hardware breakpoint va watchpoint uchun maxsus debug registerlar mavjud.

Debugger ma’lum manzil bajarilganda yoki o‘qilganda CPUni to‘xtatishi mumkin.

Hardware breakpoint soni cheklangan.

Register va cache farqi

Register CPU execution unitga eng yaqin va eng tez xotira.

Cache esa RAMdan olingan ma’lumot bloklarini saqlaydi.

Jihat Register Cache
Hajm Juda kichik Kattaroq
Boshqaruv Instruction/compiler Hardware
Murojaat Register nomi Memory address
Tezlik Eng yuqori Registerdan past

Diagnostika

Low-level xatoda registerlar debugger yoki core dump orqali ko‘riladi.

Muhim ma’lumot:

  • instruction pointer;
  • stack pointer;
  • argument registerlari;
  • return registeri;
  • flags;
  • fault address;
  • calling convention.

Register qiymatini source code bilan bog‘lash uchun assembly va debug symbol kerak.

Bog‘liq tushunchalar

CPU, ALU, Program counter, Stack pointer, Flags register, Calling convention, Register allocation, SIMD, Context switch, Cache