Kas ir Reģistrs?

Ja jūs īpaši neinteresē datori, jums tiks piedots pieņēmums, ka vienīgie atmiņas veidi datorā bija cietais disks un operatīvā atmiņa. Tie no jums, kuriem interesē datori, droši vien zinātu, ka tas tā nav un ka CPU ir arī kešatmiņu kopa, kas tiek izmantota, lai saglabātu kešatmiņas datus no RAM, lai CPU varētu tai piekļūt. ātrāk. Visas šīs ir reklamētas funkcijas, galvenokārt tāpēc, ka ātrums un/vai jauda ir pienācīgs pārdošanas punkts un kopumā ietekmē veiktspējas līmeni.

Tomēr patiesībā ir vēl viens atmiņas slānis. Lai arī kā jūs varētu domāt, ka L1 kešatmiņa ir pēc iespējas tuvāk faktiskajam apstrādes kodolam, atmiņas hierarhijā ir vēl viens augstāks slānis. Tie ir CPU reģistri. Iemesls, kāpēc tie īsti netiek reklamēti vai pieminēti, ir tas, ka tie nemaz nav mainīti. Tehniski tie varētu būt, taču reģistru skaits un lielums patiesībā ir arhitektūras pamatā. Tas nozīmē, ka visiem x86-64 CPU ir vienāds reģistru skaits. Tie netiek tirgoti, jo tie nav konkurējošs punkts.

Ko dara reģistrs?

Reģistrs ir ātri pieejama procesora uzglabāšanas vieta. Piekļuve reģistram ir tūlītēja ar nulles latentumu, savukārt pat L1 kešatmiņai mūsdienu centrālajos procesoros ir aptuveni 4–5 ciklu latentums. Šī piekļuves tūlītējība norāda uz reģistru lietošanas gadījumu. Reģistrus izmanto, lai saglabātu instrukcijas, kuras aktīvi darbina centrālais procesors. Tie arī glabā datu punktus, kas ir jāapstrādā. Daži reģistri ir vispārīgi, savukārt citiem ir ļoti konkrēts mērķis. Īpaša mērķa reģistra piemērs varētu būt programmu skaitītājs, kurā procesors izseko savu pozīciju programmas secībā.

Daudzi reģistri tiek uzskatīti par lietotājiem pieejamiem. Tomēr tas nenozīmē, ka datora lietotājs var izvēlēties, kādu vērtību tiem pievienot. Tas nozīmē, ka darbojošā programmatūra var norādīt datus, kas jāielādē šajos reģistros. Mazāks skaits reģistru ir iekšēji, kas nozīmē, ka programmatūra tos vispār nevar risināt. Instrukciju reģistrs, kurā tiek saglabāta pašlaik izpildāmā instrukcija, ir iekšējā reģistra piemērs.

Reģistrācijas pārdēvēšana

Lai gan CPU arhitektūra var atļaut tikai vienu reģistru konfigurāciju, patiesībā tajā ir neliela nianse. Visi mūsdienu CPU izmanto reģistru pārdēvēšanu. Tas ir paņēmiens, kurā varat izveidot vairāk fizisko reģistru un izmantot tos, lai iepriekš ielādētu datus vai saglabātu datus, kas saistīti ar ārpuskārtas instrukciju, kas pretējā gadījumā būtu pārrakstīta. Kad centrālais procesors nonāk līdz punktam, ka tam ir nepieciešami dati papildu reģistros, tas tos vienkārši pārdēvē, lai tie būtu adresējami, vienlaikus padarot iepriekš adresētu reģistru neadresējamu.

Reģistra pārdēvēšanas process var būt ļoti noderīgs ārpuskārtas izpildei. Piemēram, ja atmiņas vieta ir ieprogrammēta nolasīšanai, sākot no tās rakstīšanas, un instrukcijas tika izpildītas šādā secībā, tas ir labi. Tomēr, ja instrukcijas tiek pārkārtotas, lai vispirms veiktu rakstīšanu, lasīšanas instrukcija saņems nepareizu vērtību. Lai to novērstu, sākotnējā nolasāmā vērtība tiek saglabāta neizmantotā reģistrā, kas pēc tam tiek pārdēvēta, kad tiek apstrādāta attiecīgā instrukcija.

Secinājums

Reģistri ir augstākais līmenis atmiņas hierarhijā. Tās ir vienīgās daļas, kuras CPU tieši adresē, un tām nav latentuma. Reģistrus izmanto, lai saglabātu datus, ko aktīvi izpilda CPU. Tos izmanto arī, lai saglabātu citus datu punktus, piemēram, programmu skaitītāju, kas seko tam, kura instrukcija ir nākamā, kas jāizpilda. Ir pieejams ļoti ierobežots skaits reģistru ar x86-64 arhitektūru ar 16 vispārējas nozīmes reģistriem un 16 vai 32 peldošā komata reģistriem atkarībā no tā, vai tiek atbalstīts AVX-512.