Bagaimana arsitektur Harvard membantu?


12

Saya sedang membaca tentang arduino dan arsitektur AVR dan terjebak pada titik bahwa bagaimana pipeline atau bubbling diselesaikan oleh pengantar arsitektur Harvard di AVR. Maksud saya apa yang dilakukan Harvard hanyalah menyediakan lokasi penyimpanan yang berbeda untuk memori data dan memori program yang memungkinkan untuk memuat program tanpa operator. Tetapi bagaimana hal itu membantu menyelesaikan masalah di atas?


2
Ini sedikit dugaan jadi saya tidak akan memposting sebagai jawaban, tapi saya kira arsitektur Harvard membantu karena tidak ada kemungkinan kode modifikasi diri oleh instruksi sebelumnya di dalam pipa.
PeterJ

1
saya tidak yakin jika saya mengerti ... apakah Anda bermaksud mengatakan bahwa begitu instruksi telah "diambil", itu tidak dapat diubah atau dibuang kembali?
Ayush

1
Ya itu benar, untuk non-Harvard karena kode dapat berubah sendiri ada kemungkinan bahwa instruksi sebelumnya dapat memodifikasi instruksi yang mengikuti. Tetapi tunggu sebentar, seseorang mungkin akan memiliki jawaban yang lebih pasti dan lebih jelas.
PeterJ

Jawaban:


9

Arsitektur Harvard, yang kebetulan digunakan jauh sebelum AVR ditemukan, memang memiliki ruang alamat terpisah untuk memori program dan untuk memori data. Apa yang dibawa ke pesta ini adalah kemampuan untuk merancang sirkuit sedemikian rupa sehingga bus dan sirkuit kontrol yang terpisah dapat digunakan untuk menangani aliran informasi dari memori program dan aliran informasi ke memori data. Penggunaan bus terpisah berarti bahwa program dapat mengambil dan mengeksekusi untuk melanjutkan tanpa gangguan dari transfer data sesekali ke memori data. Misalnya dalam versi paling sederhana dari arsitektur unit pengambilan program dapat sibuk mengambil instruksi berikutnya dalam urutan program secara paralel dengan operasi transfer data yang mungkin telah menjadi bagian dari instruksi program sebelumnya.

Pada tingkat paling sederhana ini arsitektur Harvard memiliki keterbatasan karena umumnya tidak mungkin memasukkan kode program ke dalam memori data dan menjalankannya dari sana.

Ada banyak variasi dan kompleksitas yang dapat ditambahkan di atas bentuk arsitektur paling sederhana yang telah saya uraikan ini. Satu tambahan umum adalah menambahkan instruksi caching ke bus informasi program yang memungkinkan unit eksekusi instruksi lebih cepat mengakses ke langkah program berikutnya tanpa harus pergi ke memori yang lebih lambat untuk mengambil langkah program setiap kali diperlukan.


terima kasih banyak .... benar-benar membantu saya mendapatkannya, tetapi hanya satu hal lagi ... tidak bisakah kita memiliki bus yang berbeda tetapi memori yang sama dan bekerja pada saat yang sama?
Ayush

@ Ayush - Jika Anda memiliki dua bus pergi ke ruang memori yang sama maka dua permintaan transaksi memori yang tiba di memori pada saat yang sama masih harus bersaing untuk akses memori. Yang satu harus menunggu yang lain selesai !! Sekarang dikatakan bahwa beberapa desainer telah "memecahkan" masalah itu dengan merancang memori untuk beroperasi pada kecepatan dua kali normal dan kemudian membiarkan satu bus memiliki akses ke memori bergantian dengan akses dari bus lain. Yaitu hal-hal yang dirancang sedemikian rupa sehingga bus pertama selalu disinkronkan dengan slot akses aneh ke memori dan (lanjutan komentar berikutnya)
Michael Karas

(lanjutan dari komentar sebelumnya) bus kedua disinkronkan ke slot akses memori yang rata maka kedua bus dapat melanjutkan untuk beroperasi dengan kecepatan tinggi tanpa pertentangan akses memori.
Michael Karas

@MichaelKaras: Orang bisa melakukan itu. Di sisi lain, dalam banyak kasus, faktor pembatas utama untuk kecepatan sistem secara keseluruhan adalah kecepatan memori. Jika seseorang memiliki memori yang dapat berjalan dua kali lebih cepat dari yang dibutuhkan hanya untuk data atau hanya untuk kode, memecah sistem memori menjadi masing-masing untuk data dan kode akan memungkinkan semuanya berjalan dua kali lebih cepat.
supercat

4

Beberapa catatan selain jawaban Michaels:

1) arsitektur Harvard tidak mensyaratkan bahwa ada dua ruang terpisah untuk data dan kode, hanya saja mereka (sebagian besar) diambil alih oleh dua bus yang berbeda .

2) masalah yang dipecahkan oleh arsitektur Harvard adalah pertikaian bus: untuk sistem di mana memori kode dapat menyediakan instruksi dengan cukup cepat agar CPU tetap bekerja dengan kecepatan penuh, beban tambahan dari pengambilan data / toko akan memperlambat CPU turun. Itu masalah diselesaikan dengan arsitektur Hardvard: memori yang (sedikit) terlalu lambat untuk kecepatan CPU.

Perhatikan bahwa caching adalah cara lain untuk menyelesaikan masalah ini. Seringkali Harvard dan caching digunakan dalam kombinasi yang menarik.

Harvard menggunakan dua bus. Tidak ada alasan yang melekat untuk tetap pada dua, dalam kasus yang sangat khusus lebih dari dua digunakan, terutama dalam DSP (prosesor Sinyal Digital).

Memory Banking (dalam arti mendistribusikan akses memori ke berbagai set chip) dapat dilihat sebagai semacam Harvard di dalam sistem memori itu sendiri, tidak berdasarkan pada perbedaan data / kode, tetapi pada bit tertentu dari alamat.


4
Sebenarnya arsitektur Harvard "murni" memang membutuhkan ingatan terpisah (ruang alamat) untuk instruksi dan data. Namun, karena ini mencegah komputer dari mem-boot sendiri, banyak mesin menerapkan arsitektur Harvard yang "dimodifikasi", di mana menulis ke memori instruksi diperbolehkan.
Dave Tweed

Memory banking tidak membantu kecuali ada dua (atau lebih) bus antara CPU dan masing-masing bank memori.
Dave Tweed

@Dave 2: perbankan memang membantu dalam keadaan tertentu, misalnya jika masalahnya adalah waktu memori DAN bus ke memori non-pemblokiran (beberapa transaksi dapat dilakukan).
Wouter van Ooijen

@ Dave1: dapatkah Anda memberikan referensi?
Wouter van Ooijen

Wikipedia , juga Universitas Princeton (yang sebenarnya hanya salinan halaman Wikipedia). Juga, kebanyakan mikrokontroler chip tunggal adalah arsitektur Harvard, dan banyak lembar data benar-benar membahas bagaimana menyediakan mekanisme untuk menulis sendiri kode memori flash menciptakan arsitektur Harvard yang dimodifikasi.
Dave Tweed

2

Arsitektur Harvard murni umumnya akan memungkinkan komputer dengan tingkat kompleksitas tertentu untuk berjalan lebih cepat daripada arsitektur Von Neuman, asalkan tidak ada sumber daya yang perlu dibagi antara kode dan memori data. Jika batasan pinout atau faktor lain memaksa penggunaan satu bus untuk mengakses kedua ruang memori, keuntungan semacam itu cenderung dibatalkan.

Arsitektur Harvard yang "murni" akan terbatas pada menjalankan kode yang disimpan dalam memori oleh beberapa mekanisme selain prosesor yang akan menjalankan kode. Ini membatasi kegunaan arsitektur seperti itu untuk perangkat yang tujuannya tidak ditentukan oleh pabrik (atau seseorang dengan peralatan pemrograman khusus). Dua pendekatan dapat digunakan untuk mengatasi masalah ini:

Beberapa sistem memiliki area kode dan memori yang terpisah, tetapi menyediakan perangkat keras khusus yang dapat diminta untuk mengambil alih kode bus secara singkat, melakukan beberapa operasi, dan mengembalikan kontrol ke CPU setelah operasi tersebut selesai. Beberapa sistem seperti itu memerlukan protokol yang cukup rumit untuk melakukan operasi seperti itu, beberapa memiliki instruksi khusus untuk melakukan tugas seperti itu, dan beberapa bahkan menonton untuk alamat "memori data" tertentu dan memicu pengambilalihan / rilis ketika suatu upaya dilakukan untuk mengaksesnya . Aspek kunci dari sistem tersebut adalah bahwa ada area memori yang ditentukan secara eksplisit untuk "kode" dan "data"; bahkan jika mungkin bagi CPU untuk membaca dan menulis ruang "kode", itu masih diakui secara semantik berbeda dari ruang data. '

Pendekatan alternatif yang digunakan dalam beberapa sistem kelas atas, adalah memiliki pengontrol dengan dua bus memori, satu untuk kode dan satu untuk data, yang keduanya terhubung ke unit arbitrase memori. Unit itu pada gilirannya terhubung ke berbagai subsistem memori menggunakan bus memori terpisah untuk masing-masing. Akses kode ke satu subsistem memori dapat diproses secara bersamaan dengan akses data ke yang lain; hanya jika kode dan data mencoba mengakses subsistem yang sama secara bersamaan maka salah satu harus menunggu.

Pada sistem yang menggunakan pendekatan ini, bagian-bagian non-kinerja-kritis dari suatu program mungkin mengabaikan batas-batas antara subsistem memori. Jika kode dan data berada di subsistem memori yang sama, semuanya tidak akan berjalan secepat jika mereka berada di subsistem yang terpisah, tetapi untuk banyak bagian dari program biasa yang tidak masalah. Dalam sistem tipikal, akan ada bagian kecil dari kode di mana kinerja benar-benar penting, dan itu hanya akan beroperasi pada sebagian kecil dari data yang dipegang oleh sistem. Jika seseorang memiliki sistem dengan 16K RAM yang dibagi menjadi dua partisi 8K, seseorang dapat menggunakan instruksi linker untuk memastikan bahwa kode kritis kinerja terletak di dekat awal keseluruhan ruang memori, dan data kritis kinerja dekat akhir. Jika ukuran kode keseluruhan tumbuh menjadi misalnya 9K, kode dalam 1K terakhir akan berjalan lebih lambat daripada kode yang ditempatkan di tempat lain, tetapi kode itu tidak akan kritis terhadap kinerja. Demikian juga, jika kode misalnya hanya 6K, tetapi data tumbuh menjadi 9K, akses ke data 1K terendah akan lambat, tetapi jika data kritis-kinerja terletak di tempat lain, itu tidak akan menimbulkan masalah.

Perhatikan bahwa sementara kinerja akan optimal jika kode di bawah 8K dan data di bawah 8K, desain sistem memori yang disebutkan di atas tidak akan memaksakan partisi ketat antara kode dan ruang data. Jika suatu program hanya membutuhkan 1K data, kode dapat tumbuh hingga 15K. Jika hanya membutuhkan 2K kode, data dapat tumbuh hingga 14K. Jauh lebih fleksibel daripada memiliki area 8K hanya untuk kode dan area 8K hanya untuk data.


1

Satu aspek yang belum dibahas adalah bahwa untuk mikrokontroler kecil, biasanya dengan bus alamat 16-bit, arsitektur Harvard secara efektif menggandakan (atau tiga kali lipat) ruang alamat. Anda dapat memiliki 64K kode, 64K RAM, dan 64k memori I / O yang dipetakan (jika sistem menggunakan I / O yang dipetakan memori bukan nomor port, yang terakhir sudah memisahkan pengalamatan I / O dari kode & Ruang RAM).

Kalau tidak, Anda harus menjejalkan kode, RAM, dan alamat I / O opsional semua dalam ruang alamat 64K yang sama.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.