Jawaban:
Jika saya memiliki CPU dengan dua core, masing-masing core memiliki cache L1 sendiri, mungkinkah Core1 dan Core2 cache bagian memori yang sama pada saat yang sama?
Iya. Performa akan mengerikan jika ini tidak terjadi. Pertimbangkan dua utas yang menjalankan kode yang sama. Anda ingin kode itu di kedua cache L1.
Jika memungkinkan, berapakah nilai memori utama jika Core1 dan Core2 telah mengedit nilainya dalam cache?
Nilai lama akan berada di memori utama, yang tidak masalah karena CPU tidak akan membacanya. Sebelum mengeluarkan nilai yang dimodifikasi dari cache, itu harus ditulis ke memori. Biasanya beberapa varian protokol MESI digunakan. Dalam implementasi MESI tradisional, jika suatu nilai diubah dalam satu cache, itu tidak bisa hadir sama sekali dalam cache lain di tingkat yang sama.
Ya, ini (memiliki dua cache cache wilayah memori yang sama) dapat terjadi, sebenarnya ini adalah masalah yang sering terjadi dalam praktik. Ada berbagai solusi, misalnya:
Masalahnya disebut koherensi cache . The artikel Wikipedia pada topik memiliki gambaran yang baik dari masalah dan solusi yang mungkin.
Untuk menjawab pertanyaan dalam judul Anda, itu tergantung pada apa protokol caching itu. Jika ini adalah write-back, cache hanya akan dibilas kembali ke memori utama ketika controller cache tidak punya pilihan selain untuk menempatkan blok cache baru di ruang yang sudah ditempati. Blok yang sebelumnya ditempati ruang dihapus dan nilainya ditulis kembali ke memori utama.
Protokol lain adalah write-through. Dalam hal ini, kapan saja blok cache ditulis pada level n, blok yang sesuai pada level (n +1) diperbarui. (Ini serupa dalam konsep untuk mengisi formulir kami dengan kertas karbon di bawahnya; apa pun yang Anda tulis di atas disalin pada lembar di bawah ini.) Ini lebih lambat karena jelas melibatkan lebih banyak operasi penulisan, tetapi nilai di antara cache lebih konsisten. Dalam skema tulis-kembali, hanya cache level tertinggi yang memiliki nilai paling baru untuk blok memori tertentu.