Senin, November 18, 2019

Pemahaman Volatile tahap 1

Pada level lebih tinggi, kompilator mengkonversi bahasa C menjadi bahasa kode sehingga program eksekusi dapat dijalankan tanpa kode program sesungguhnya. Sama dengan teknologi lainnya, teknologi kompilator juga telah mengalami perkembangan. Ketika mengartikan sumber kode menjadi bahasa mesin, kompilator pada dasarnya mencoba melakukan optimisasi output sehingga kebutuhan bahasa mesin mejadi lebih sedikit untuk dieksekusi pada tahap akhir. Salah satu bentuk optimisasi adalah menghilangkan bahasa mesin yang tidak perlu untuk mengakses variabel yang tidak berubah dari sudut pandang kompilator. Perhatikan potongan kode program berikut ini:

uint32 status = 0;

while (status == 0)
{
/*Let us assume that status isn't being changed
in this while loop or may be in our whole program*/

/*So long as status (which could be reflecting
status of some IO port) is ZERO, do something*/
}

Optimisasi kompilator dalam memperlihatkan status yang tidak berubah pada saat loop. Sehingga tidak diperlukan akses status lagi dan lagi setiap kali melakukan iterasi dari pengulangan. kompilator dapat mengkonversi perulangan menjadi infinite looop sehingga tidak perlu dilakukan proses membaca bahasa mesin. Catatan bahwa kompilator tidak menyadari status khusus variabel yang dapat diubah dari luar program saat ini pada waktu apapun atau IO operasi terjadi pada perangkat peripheral untuk perangkat port IO yang telah dipetakan pada variabel. Pada kenyataannya, kompilator diharapkan untuk mengakses status variabel setelah semua iterasi meskipun tidak dilakukan modifikasi atau perubahan pada program yang telah dikompilasi oleh kompilator.

Ketika ada pendapat yang mengatakan bahwa optimisasi kompilator dapat di turn-off untuk program, namun hal tersebut belum tentu dapat dilakukan karena beberapa hal:

satu, Setiap implementasi kompilator berbeda sehingga bukan merupakan solusi yang portabel.

dua, Hanya karena satu variabel, bukan berarti harus mematikan semua proses optimisasi yang dilakukan oleh kompilator pada keseluruhan program.

tiga, Dengan mematikan semua proses optimisasi, program low level tidak dapat bekerja seperti yang diharapkan karena akan meningkatkan terlalu banyak ukuran dan penundaan eksekusi.

Inilah tujuan dari penggunaan "volatile". Pada dasarnya, dibutuhkan instruksi kompilator yang statusnya variabel khusus sehingga proses optimisasi tidak bisa dilakukan pada variabel tersebut. Untuk itu, akan didefinisikan jenis variabel seperti berikut ini:

volatile uint32 status = 0;

Untuk penyederhanaan penjelasan, dipilih contoh seperti berikut ini. Tetapi secara umum volatile digunakan dengan pointer seperti berikut ini:

volatile uint32 * statusPtr = 0xF1230000

Berikut ini statusPtr melakukan pointer ke lokasi memori pada konten yang dapat berubah pada waktu terntentu dari beberapa perangkat peripheral. Perlu dicatat bahwa program yang dibuat mungkin tidak memiliki kontrol apapun atau pengetahuan apapun ketika memori mengalami perubahan. Sehingga dibuat dalam bentuk "volatile" agar kompilator tidak melakukan optimisasi untuk variabel volatile yang ditunjuk (pointer) oleh statusPtr.

Dalam hal ini "volatile" mengikuti standar dari ISO/IEC 9899 C11 - clause 6.7.3

“An object that has volatile-qualified type may be modified in ways unknown to the implementation or have other unknown side effects.”

“A volatile declaration may be used to describe an object corresponding to a memory-mapped input/output port or an object accessed by an asynchronously interrupting function. Actions on objects so declared shall not be ‘‘optimized out’’ by an implementation or reordered except as permitted by the rules for evaluating expressions.”

Pada standar C variabel "volatile" dapat diubah dari luar program dan karena hal inilah kompilator tidak seharusnya mengoptimisasi aksesnya. Sehingga dapat diperkirakan bahwa ketika memiliki banyak variabel "volatile" dalam suatu program dapat mengurangi hasil optimisasi kompilator.





Related Posts

Pemahaman Volatile tahap 1
Oleh

"semoga yang memberikan komentar diberikan berkah kebaikan dari Allah, dijauhkan dari kejahatan, dan diberikan pahala ilmu dan amal jariyah dari sepenggal kata yang ia tinggalkan amiin :) "