Dalam sistem komputer, Segmentasi adalah teknik manajemen memori pada sistem operasi yang berfungsi untuk membagi memori utama komputer menjadi beberapa bagian yang berbeda. Setiap segmen memiliki alamat dasarnya sendiri. Segmen juga digunakan dalam file objek dari program yang dikompilasi saat mereka ditautkan bersama ke dalam gambar dan dimuat ke dalam memori.
Sebuah program adalah kumpulan segmen yang terdiri dari unit logika seperti program utama, prosedur, fungsi, metode, object, variabel, blok umum, stack, tabel simbol, array dan lain-lain. Oleh sebab itu segmentasi ini akan melibatkan programer, karena ia perlu tahu teknik yang digunakan. Pada umumnya, program dari pengguna/programer akan dikompilasi menggunakan kompilator, lalu kompilator tersebut akan membuat segmen-segmen tersebut secara otomatis.
Segmentasi pada sistem operasi awalnya ditemukan sebagai metode dimana perangkat lunak sistem dapat mengisolasi proses dan data yang mereka gunakan. Hal ini bertujuan untuk :
- Mengalokasi dan Perlindungan memori
- Meningkatkan kecepatan eksekusi sistem komputer,
- Meningkatkan keandalan sistem yang menjalankan banyak proses secara bersamaan.
- Mengambil dan mengeksekusi data dari memori dengan mudah dan cepat
Cara kerja Segmentasi pada Sistem Operasi
Segmentasi pada sistem operasi bekerja ketika suatu program berjalan, lalu processor akan mengalokasikan memori untuk program tersebut di memori RAM, yang terbagi menjadi empat segment yaitu :
1. Segmen kode (CS): digunakan untuk menangani lokasi memori di segmen kode memori, tempat program yang dieksekusi disimpan.
2. Segmen data (DS): menunjuk ke segmen data memori tempat data disimpan.
3. Extra Segment (ES): juga mengacu pada segmen dalam memori yang merupakan segmen data lain dalam memori.
4. Stack Segment (SS): digunakan untuk menangani segmen tumpukan memori. Segmen tumpukan adalah segmen memori yang digunakan untuk menyimpan data tumpukan.
Implementasi perangkat keras
Segmentasi pada sistem operasi dapat digunakan untuk mengimplementasikan memori virtual. Dalam hal ini setiap segmen memiliki flag terkait yang menunjukkan apakah ada di memori utama atau tidak.
Jika segmentasi diakses yang tidak ada di memori utama, maka sistem operasi akan membaca segmen tersebut ke dalam memori dari penyimpanan sekunder.
Setiap alamat dibangkitkan oleh CPU dengan membagi ke dalam 2 bagian yaitu :
- Page number (p) digunakan sebagai indeks ke dalam table page. Page table berisi alamat basis dari setiap page pada memori fisik.
- Page offset (d), mengkombinasikan alamat basis dengan page offset untuk mendefinisikan alamat memori fisik yang dikirim ke unit memori.
Pemetaan alamat logika ke alamat fisik menggunakan tabel segmen, terdiri dari :
- Segmen basis, yaitu berisi alamat fisik awal
- Segmen limit, merupakan panjang segmen, seperti tabel page.
- Tabel segmen, dapat berupa register atau memori berkecepatan tinggi. Pada program yang berisi sejumlah segmen yang besar, maka harus menyimpan tabel page di memori.
- Segment-table base register (STBR), digunakan untuk menyimpan alamat yang menunjuk ke segment table.
- Segment-table length register (STLR) digunakan untuk menyimpan nilai jumlah segmen yang digunakan program.
Untuk alamat logika (s, d), pertama diperiksa apakah segment number s legal (s < STLR), kemudian tambahkan segment number ke STBR, alamat hasil (STBR + s) ke memori dari segment table.
Pemetaan alamat logika ke alamat fisik dengan menggunakan tabel segmen. Misalnya :
- Alamat logika dengan nomor segment 0 offset 88 akan dipetakan ke alamat fisik 1400 + 88 = 1488 karena offset < limit (88 < 1000).
- Alamat logika dengan nomor segment 1 offset 412 akan terjadi error karena offset > limit (412 > 400).
Logical Address Space
Logical address atau alamat logika adalah kumpulan dari segmen-segmen yang tiap-tiap segmennya mempunyai nama dan panjang. Untuk memudahkan dalam implementasi, segmen-segmen atau alamat logika tersebut diberi nomor dan direferensikan dengan menggunakan penomoran tersebut, yaitu: nomor segmen (s), dan offset (d)
Logical address terdiri atas dua bagian yaitu:
1. Identifier, adalah sebuah 16-bit field yang disebut segment selector
2. Offset , yang menunjukkan alamat yang bersangkutan pada segment. .
Untuk mempercepat pengubahan dari logical address ke linear address, maka Intel menyediakan nonprogrammable register tambahan pada setiap 6 programmable segmentation register. Adapun enam segmentation register adalah : cs, ss, ds, es, fs, dan gs.
Pengubahan dari logical address ke linear address dilakukan tanpa mengakses GDT atau LDT yang berada pada memori utama. Akses ke GDT atau LDT hanya diperlukan bila isi dari segmentation register berubah.
Setiap segment selector mengandung hal-hal berikut :
– Sebuah index 13-bit yang menunjukkan masukan segment descriptor yang berhubungan yang terdapat pada GDT atau LDT.
– Sebuah TI (tabe indicator) flag yang menunjukkan apakah segment descriptor terdapat pada GDt (Ti = 0) atau pada LDT (TI = 1).
– Sebuah RPl (requestor privilege level) 2-bit field, yang membuat current privilege level cPu tepat saat segment selector yang berhubungan di-load ke register cs.
Segment Descriptor
Pada sistem operasi, Descriptor segmen adalah bagian dari unit segmentasi yang digunakan untuk menerjemahkan alamat logis ke alamat linier. Deskriptor segmen menggambarkan karakteristik segment yang direpresentasikan dengan 8-byte.. Segment descriptor disimpan pada Global Descriptor Table(GDT) atau pada Local Descriptor Table(LDT).
Segmentation Unit
Segmentatipn Unit adalah segmen yang melakukan operasi-operasi sebagai berikut :
– Memeriksa TI dari segment selector, dengan maksud untuk memutuskan apakah descriptor table berada pada segment descriptor.
– Menghitung alamat dari segment descriptor dari index filed segment selector.
– Menambahkan ke Base field dari segment descriptor, offset dari logical address, sehingga diperoleh linear address.