Bagaimana cara kerja TLB dan cache data?

15

Saya mencoba belajar untuk ujian dan saya menyadari saya bingung tentang cara kerja TLB dan cache data.

Saya mengerti bahwa TLB pada dasarnya adalah cache dari alamat fisik yang terakhir digunakan. Namun, saya melihat diagram di buku teks saya (ditunjukkan di bawah), dan saya tidak mengerti apa yang terjadi di dalamnya. Tiba-tiba membagi alamat fisik dan menggunakannya untuk mengindeks cache, saya kira. Tetapi mengapa ini menunjukkan cache dan data secara terpisah? dan mengapa byte offset baru saja mengambang? Saya cukup yakin cache seharusnya menyimpan data juga. Saya tidak berpikir satu-satunya tujuan adalah untuk menentukan apakah ada hit atau miss di dalamnya.

Saya minta maaf atas ketidaktahuan saya sebelumnya, tetapi buku ini hampir tidak mencakup TLB (seperti sedikit lebih dari satu halaman) dan itu tidak melakukan pekerjaan yang sangat baik dalam menjelaskan hubungan antara TLB dan cache.

Angka

audiFanatic
sumber
Pertanyaan ini terlalu panjang. Dapatkah Anda mengekstrak pertanyaan sempit dan spesifik dari ini, dan kemudian mengedit pertanyaan Anda untuk memangkas ini menjadi hanya satu pertanyaan spesifik? Bagian dari mengajukan pertanyaan yang baik melibatkan berpikir dengan hati-hati tentang apa esensi minimal dari apa yang perlu Anda ketahui dan hanya memasukkan apa yang relevan dan penting untuk pertanyaan itu. Misalnya, jika Anda memiliki pertanyaan spesifik tentang cara kerja TLB, alih-alih membuang semua ini, bagaimana dengan mencoba membingkai satu pertanyaan yang dibuat secara sempit tentang TLB?
DW
Baiklah, maksud saya adalah untuk menunjukkan apa yang sudah saya pahami tentang subjek ini, karena kebanyakan orang di pertukaran tumpukan tidak suka menjawab pertanyaan tanpa penanya menunjukkan upaya (dimengerti). Saya kira saya tidak bisa membuat semua orang bahagia. Mungkin saya akan mengeditnya dengan pertanyaan saya dalam huruf tebal atau sesuatu.
audiFanatic
@DW apakah itu lebih baik?
audiFanatic
audiFanatic, Anda mungkin salah mengartikan atau salah memahami komentar saya dan pola pikir "tunjukkan usaha". Saran saya adalah Anda mengidentifikasi pertanyaan sempit - sesuatu seperti "bagaimana cara kerja TLB? Saya tidak begitu mengerti" - dan kemudian kembali fokus hanya pada pertanyaan itu. Ya, Anda perlu melakukan upaya serius untuk menjawab pertanyaan itu , dan Anda harus menunjukkan upaya yang telah Anda lakukan untuk menjawab pertanyaan spesifik itu , tetapi upaya pada subjek yang tidak terkait tidak relevan (misalnya, fakta bahwa Anda berusaha keras untuk membuat kemajuan pada pertanyaan pekerjaan rumah yang membuat Anda memikirkan pertanyaan ini).
DW
Biarkan saya membantu Anda memahami latar belakang di balik ini. Kami ingin membangun arsip pertanyaan dan jawaban berkualitas tinggi yang akan membantu orang lain (tidak hanya untuk Anda). Hal terbaik yang dapat Anda lakukan untuk membantu adalah mengekstraksi pertanyaan spesifik, sempit, berposisi baik, dan memfokuskan pertanyaan Anda hanya pada satu pertanyaan itu. Pertanyaan yang luas, terbuka, dan tidak terlalu fokus cenderung tidak membantu orang lain yang mungkin tersandung (dan juga lebih sulit bagi pembaca untuk sampai pada intinya dan memahami apa inti dari pertanyaan Anda, jadi Anda cenderung mendapatkan jawaban yang baik).
DW

Jawaban:

23

Saya pikir saya melihat kebingungan Anda. TLB dan cache data adalah dua mekanisme terpisah. Keduanya sama-sama merupakan cache, tetapi mereka menyimpan beberapa hal yang berbeda:

  • alamat virtual fisik, dengan mencari alamat virtual di tabel halaman. Namun, melakukan pencarian di tabel halaman lambat (melibatkan 2-3 beban memori). Jika prosesor harus melakukan pencarian ini setiap kali ada instruksi yang mengakses memori, ini akan menyebabkan perlambatan yang substansial.

    Oleh karena itu, TLB bertindak sebagai cache khusus untuk pencarian ini. TLB memiliki beberapa entri TLB, di mana setiap entri TLB berisi alamat virtual dan alamat fisik yang sesuai.

    TLB memungkinkan prosesor mengubah alamat virtual menjadi alamat fisik dengan sangat cepat. Jika sebuah instruksi meminta prosesor untuk melakukan beberapa operasi memori pada alamat (virtual), prosesor akan memeriksa terlebih dahulu untuk melihat apakah TLB berisi entri untuk alamat virtual itu. Jika ya, maka itu disebut "cache hit" untuk pencarian TLB, dan karena entri TLB juga berisi alamat fisik yang diterjemahkan, prosesor segera tahu alamat fisik apa yang digunakan. Jika tidak, itu adalah cache miss untuk pencarian TLB, dan prosesor harus susah payah melakukan konversi virtual ke fisik dengan berjalan di halaman tabel. (Setelah selesai melakukan konversi itu, itu menambahkan entri ke TLB sehingga konversi masa depan dari alamat virtual itu akan terjadi jauh lebih cepat.)

  • Cache data adalah cache untuk isi memori. Memori utama memungkinkan Anda menentukan alamat fisik dan membaca nilai di alamat fisik itu. Namun, memori utama lambat. Jika kami harus pergi ke memori utama setiap kali kami ingin melakukan operasi memori, prosesor kami akan sangat lambat.

    Oleh karena itu, cache data bertindak sebagai cache khusus untuk memori yang dibaca. Cache data memiliki beberapa entri cache, di mana setiap entri cache berisi alamat fisik dan nilai memori di alamat itu.

    Cache data memungkinkan prosesor membaca dengan cepat dari memori. Ketika prosesor ingin membaca memori di beberapa alamat (fisik), ia terlebih dahulu memeriksa cache data untuk melihat apakah itu berisi entri cache untuk alamat itu. Jika ya, ini dikenal sebagai "hit cache" (dalam cache data), dan prosesor dapat segera menggunakan nilai data yang disimpan dalam entri cache itu, tanpa perlu menghubungi memori utama. Jika tidak, maka ini adalah "cache miss" (untuk cache data), dan prosesor harus pergi ke memori utama. (Setelah prosesor menerima nilai pada alamat itu dari memori utama, ia menambahkan entri cache ke cache data sehingga upaya untuk membaca alamat yang sama akan mengenai cache data.)

Keduanya adalah cache, tetapi mereka melayani tujuan yang berbeda. Prosesor menggunakan keduanya untuk setiap operasi memori: pertama menggunakan TLB untuk mengkonversi dari alamat virtual ke alamat fisik, kemudian memeriksa cache data untuk mempercepat proses membaca nilai yang tersimpan dalam memori di alamat itu.

Untuk detail lebih lanjut, Anda dapat membaca artikel Wikipedia tentang TLB . Jika Anda melakukan pencarian, ada banyak informasi lain yang tersedia di TLB dan cache data. Saya sarankan mencari "TLB" dan "L1 cache" atau "L2 cache" (2 yang terakhir adalah jenis cache data).

(Untuk referensi di masa mendatang: kami mengharapkan Anda untuk melakukan riset pada pertanyaan Anda sebelum bertanya di sini, dan untuk memeriksa sumber-sumber Internet standar. Jika jawabannya dapat ditemukan di Wikipedia, Anda belum melakukan penelitian yang cukup pada Anda sendiri. Anda mungkin memiliki lebih beruntung jika Anda akan diperiksa sumber internet untuk informasi tentang bagaimana TLBs sebelum bertanya di sini. Lihat juga berapa banyak upaya penelitian yang diharapkan dari pengguna Stack Overflow? . Jadi, mengambil kesempatan untuk menggunakan ini sebagai pelajaran untuk bagaimana Anda dapat meningkatkan Anda sendiri keterampilan riset - sesuatu yang akan berharga bagi Anda sepanjang karier Anda.)

DW
sumber
1
Terima kasih! Itu membersihkan sebagian besar segalanya. Saya menghabiskan banyak waktu untuk meneliti hal ini (beberapa hari), saya hanya tidak dapat menemukan informasi yang jelas dan ringkas yang mengikat semuanya (ditambah kebingungan saya mungkin tidak membantu pencarian saya). Sebagai analogi, saya merasa seperti berada di apotek mencari obat untuk penyakit yang tidak terdiagnosis; hanya menggunakan gejala sebagai panduan.
audiFanatic
Dengan itu, saya punya satu pertanyaan lagi. Jika itu adalah cache, mengapa buku memisahkan data dan menandai bagian dari cache (ya, bagian data bahkan lebih tinggi daripada tag dan bagian bit yang valid)? Itu membuatnya tampak seperti cache berfungsi tidak lain untuk memeriksa tag (seolah-olah itu tidak menyimpan data). Apakah itu blok data di sudut kanan bawah bagian gambar cache atau apakah itu bagian dari memori utama atau apa?
audiFanatic
1
VPV+1P+1V+2P+2V+4095P+4095.
DW
sayasayasaya
OK bagus. Terima kasih. Saya kira pemisahan itulah yang paling membingungkan saya.
audiFanatic