Scatter Loading: Membuat Layar Memory yang Sesuai dengan Kebutuhan Anda
Dalam pengembangan sistem operasi dan aplikasi, memiliki kontrol penuh terhadap layar memory menjadi sangat penting. Scatter loading adalah salah satu teknik yang digunakan untuk membuat layar memory yang sesuai dengan kebutuhan aplikasi.
Mengenal Scatter Loading
Scatter loading adalah sebuah file yang berisi informasi tentang bagaimana membagi layar memory menjadi beberapa region yang berbeda. Dalam file scatter loading, kita dapat menentukan bahwa suatu region hanya dapat digunakan sebagai area loading, sementara lainnya hanya dapat digunakan sebagai area execution.
Contoh dari file scatter loading adalah seperti berikut:
LOAD_ROM 0x0 : Load Region : Loading image
{
EXEC_ROM 0x0 : Execution Region : Excution image
{
spaghetti.o (+RO) : RO untuk input section
}
EXEC_RAM 0x8000 : Execution Region
{
spaghetti.o (+RW) : RW untuk input section
}
EXEC_RAM2 0xA000 : Execution Region
{
spaghetti.o (+ZI) : ZI untuk input section
}
}
Dalam contoh di atas, kita dapat melihat bahwa region 0x0 adalah load region, sementara region 0x8000 dan 0xA000 adalah execution regions. Dalam setiap region, kita dapat menentukan atributnya, seperti RO, RW, atau ZI.
Membuat File Scatter Loading
Untuk membuat file scatter loading, kita perlu menggunakan tool linker, seperti armlink. Contoh untuk membuat file scatter loading adalah sebagai berikut:
armlink -scatter filename.scl outfile1.o outfile2.o outfile3.o ...
Dalam contoh di atas, filename.scl adalah nama file scatter loading, dan outfile1.o, outfile2.o, dan outfile3.o adalah nama file objek yang akan digunakan.
Root Region
Satu hal yang perlu diingat ketika membuat file scatter loading adalah bahwa root region harus ada. Root region adalah sebuah region yang memiliki alamat loading view dan execution view yang sama.
Default Memory Map
Jika kita tidak menggunakan file scatter loading, maka default memory map akan digunakan. Default memory map adalah sebuah layar memory yang memiliki struktur sebagai berikut:
RO (0x8000) -> RW (0xA000) -> ZI (0xC000)
Dalam default memory map, region RO akan mulai dari alamat 0x8000, sementara region RW dan ZI akan mulai dari alamat yang lebih tinggi.
Stack dan Heap
Jika kita menggunakan file scatter loading, maka stack dan heap dapat diatur secara manual. Namun, jika kita tidak menggunakan file scatter loading, maka compiler akan menentukan lokasi stack dan heap secara otomatis.
BSS (Block Started by Symbol)
BSS adalah sebuah konsep yang digunakan dalam pengembangan sistem operasi. BSS adalah sebuah block yang dimulai oleh symbol, dan hanya diisi dengan nilai 0 pada saat runtime.
Dalam file scatter loading, kita dapat menentukan bahwa suatu region adalah BSS region. Contoh dari file scatter loading dengan BSS region adalah sebagai berikut:
LOAD_ROM 0x0 : Load Region : Loading image
{
EXEC_ROM 0x0 : Execution Region : Excution image
{
spaghetti.o (+RO) : RO untuk input section
}
EXEC_RAM 0x8000 : Execution Region
{
__main : Entry point
}
BSS 0xA000 : BSS Region
{
_edata : Data section
}
}
Dalam contoh di atas, kita dapat melihat bahwa region 0xA000 adalah region BSS, dan memiliki symbol _edata sebagai data section.
Konklusi
Scatter loading adalah sebuah teknik yang digunakan untuk membuat layar memory yang sesuai dengan kebutuhan aplikasi. Dengan menggunakan file scatter loading, kita dapat menentukan lokasi region-region yang berbeda, serta mengontrol penuh terhadap stack dan heap. Namun, jika kita tidak menggunakan file scatter loading, maka compiler akan menentukan lokasi stack dan heap secara otomatis.