თუ განსაკუთრებით არ გაინტერესებთ კომპიუტერები, გაპატიებთ იმის ვარაუდს, რომ კომპიუტერში მეხსიერების ერთადერთი ფორმა იყო მყარი დისკი და ოპერატიული მეხსიერება. ვინც დაინტერესებულია კომპიუტერებით, სავარაუდოდ, იცოდა, რომ ეს ასე არ არის და რომ CPU-ს ასევე აქვს ქეშების ნაკრები, რომლებიც გამოიყენება RAM-დან მონაცემების ქეშირებისთვის, რათა CPU-მ შეძლოს მასზე წვდომა. უფრო სწრაფად. ყველა ეს არის რეკლამირებული ფუნქციები, უპირველეს ყოვლისა, იმიტომ, რომ სიჩქარე და/ან სიმძლავრე არის ღირსეული გაყიდვის წერტილი და ზოგადად გავლენას ახდენს შესრულების დონეზე.
სინამდვილეში მეხსიერების კიდევ ერთი ფენაა. რამდენადაც შეიძლება ფიქრობთ, რომ L1 ქეში რაც შეიძლება ახლოს არის რეალურ დამუშავების ბირთვთან, მეხსიერების იერარქიაში კიდევ ერთი უმაღლესი ფენაა. ეს არის CPU რეგისტრები. მიზეზი იმისა, რომ ეს ნამდვილად არ არის რეკლამირებული ან ნახსენები არის ის, რომ ისინი ნამდვილად არ შეცვლილა. ტექნიკურად, ისინი შეიძლება იყოს, თუმცა რეგისტრების რაოდენობა და ზომა რეალურად ფუნდამენტურია არქიტექტურისთვის. ეს ნიშნავს, რომ ყველა x86-64 პროცესორს აქვს იგივე რაოდენობის რეგისტრები. ისინი არ იყიდება, რადგან ისინი არ არიან კონკურენტუნარიანი.
რას აკეთებს რეესტრი?
რეგისტრი არის სწრაფად ხელმისაწვდომი შენახვის ადგილი პროცესორისთვის. რეესტრზე წვდომა მყისიერია ნულოვანი შეყოვნებით, მაშინ როცა L1 ქეშსაც კი აქვს დაახლოებით 4-5 ციკლის შეყოვნება თანამედროვე პროცესორებში. წვდომის ეს უშუალოობა მიუთითებს რეგისტრების გამოყენების შემთხვევაზე. რეგისტრები გამოიყენება ინსტრუქციების შესანახად, რომლებზეც აქტიურად მუშაობს CPU. ისინი ასევე ინახავენ მონაცემთა წერტილებს, რომლებიც უნდა დამუშავდეს. ზოგიერთი რეესტრი ზოგადი დანიშნულებისაა, ზოგს კი ძალიან სპეციფიკური დანიშნულება აქვს. სპეციალური დანიშნულების რეგისტრის მაგალითი იქნება პროგრამის მრიცხველი, სადაც პროცესორი აკონტროლებს თავის პოზიციას პროგრამის თანმიმდევრობაში.
ბევრი რეესტრი ითვლება მომხმარებლისთვის ხელმისაწვდომად. ეს არ ნიშნავს იმას, რომ კომპიუტერის მომხმარებელს შეუძლია აირჩიოს რა მნიშვნელობა დააყენოს მათში. ეს ნიშნავს, რომ გაშვებულ პროგრამას შეუძლია მიუთითოს მონაცემები, რომლებიც ჩაიტვირთება ამ რეესტრებში. რეგისტრების უფრო მცირე რაოდენობა შიდაა, რაც იმას ნიშნავს, რომ პროგრამული უზრუნველყოფა მათ საერთოდ არ შეუძლია მიმართოს. ინსტრუქციების რეესტრი, რომელიც ინახავს ამჟამად შესრულებულ ინსტრუქციას, არის შიდა რეესტრის მაგალითი.
რეგისტრაცია გადარქმევა
მიუხედავად იმისა, რომ CPU არქიტექტურამ შეიძლება დაუშვას რეგისტრების მხოლოდ ერთი კონფიგურაცია, ამაში რეალურად არის ცოტა ნიუანსი. ყველა თანამედროვე CPU იყენებს რეესტრის გადარქმევას. ეს არის ტექნიკა, სადაც შეგიძლიათ გქონდეთ მეტი ფიზიკური რეგისტრი და გამოიყენოთ ისინი მონაცემების წინასწარ ჩატვირთვის ან მწყობრიდან გამოსულ ინსტრუქციებთან დაკავშირებული მონაცემების შესანახად, რომლებიც სხვაგვარად გადაწერილი იქნებოდა. როდესაც CPU მიაღწევს იმ დონეს, რომ მას სჭირდება მონაცემები დამატებით რეგისტრებში, ის უბრალოდ გადარქმევს მათ ისე, რომ იყოს მისამართებადი, ამავე დროს, რაც ადრე მისამართებად რეგისტრს უადრესად აქცევს.
რეესტრის სახელის გადარქმევის პროცესი შეიძლება ძალიან სასარგებლო იყოს წესრიგის გარეშე შესრულებისთვის. მაგალითად, თუ მეხსიერების მდებარეობა დაპროგრამებულია წაკითხვის შემდეგ და ინსტრუქციები შესრულებულია ამ თანმიმდევრობით, ეს კარგია. თუმცა, თუ ინსტრუქციები ხელახლა დალაგებულია ჩაწერის შესასრულებლად, წაკითხვის ინსტრუქცია მიიღებს არასწორ მნიშვნელობას. ამის თავიდან ასაცილებლად, წასაკითხი ორიგინალური მნიშვნელობა ინახება გამოუყენებელ რეესტრში, რომელსაც შემდეგ დაერქმევა სახელი შესაბამისი ინსტრუქციის დამუშავებისას.
დასკვნა
რეგისტრები მეხსიერების იერარქიის უმაღლესი დონეა. ისინი ერთადერთი ნაწილია, რომელიც პირდაპირ მიმართულია CPU-ს მიერ და არ აქვთ შეყოვნება. რეგისტრები გამოიყენება CPU-ს მიერ აქტიურად შესრულებული მონაცემების შესანახად. ისინი ასევე გამოიყენება სხვა მონაცემთა წერტილების შესანახად, როგორიცაა პროგრამის მრიცხველი, რომელიც თვალყურს ადევნებს, რომელი ინსტრუქცია არის შემდეგი შესასრულებელი. რეგისტრების ძალიან შეზღუდული რაოდენობა ხელმისაწვდომია x86-64 არქიტექტურით, რომელსაც აქვს 16 ზოგადი დანიშნულების რეგისტრი და 16 ან 32 მცურავი წერტილის რეგისტრი, იმისდა მიხედვით, არის თუ არა AVX-512 მხარდაჭერილი.