SEGMENTASI
Compiler bisa
memiliki beberapa tabel dengan alamat virtual yang terpisah, misalnya terdiri
dari tabel-tabel untuk:
1.
Source text,
2.
Tabel simbol,
3.
Tabel untuk semua konstanta integer dan floating
point,
4.
Parse tree, berisi analisis sintaksis program, dan
5.
Stack yang digunakan untuk pemanggilan prosedur.
Tabel 1 s/d 4 bisa bertambah pada saat kompilasi berjalan, sehingga
dengan sistem paging yang berukuran tetap, batas satu page bisa terlampaui.
Dengan alasan ini dipakai bagian-bagian dengan alamat yang relatif
independen, yang disebut segmen.
Setiap segmen mempunyai ukuran yang berbeda dengan yang lain. Panjang segmen
juga bisa berubah selama eksekusi.
Program harus menyediakan alamat yang terdiri dari dua bagian:
-
nomer segmen
-
alamat di dalam segmen
Segmentasi juga memberikan fasilitas pemakaian bersama prosedur atau
data antar beberapa proses. Contoh umumnya adalah shared library.
|
Segmen
|
|
Segmen
|
|
Segmen
|
|
Segmen
|
|
Segmen
|
|
0
|
|
1
|
|
2
|
|
3
|
|
4
|
0
|
|
0
|
|
0
|
Konstanta
|
0
|
|
0
|
|
|
|
|
|
|
|
|
|
|
|
4K
|
|
4K
|
|
|
|
4K
|
|
4K
|
|
|
|
|
Source
|
|
|
|
Parse
|
|
Call
|
|
|
|
text
|
|
|
|
tree
|
|
stack
|
8K
|
|
8K
|
|
|
|
8K
|
|
8K
|
|
|
Tabel
|
|
|
|
|
|
|
|
|
|
Symbol
|
|
|
|
|
|
|
|
|
12K
|
|
12K
|
|
|
|
12K
|
|
12K
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16K
|
|
|
|
|
|
16K
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20K
|
|
|
|
|
|
|
|
|
|
Memori yang
tersegmentasi memungkinkan setiap tabel bertambah atau berkurang.
Pertimbangan
|
Paging
|
Segmentasi
|
Apakah programmer harus menyadari bahwa teknik
ini sedang digunakan?
|
Tidak
|
Ya
|
Berapa banyak ruang alamat linier yang ada?
|
1
|
Banyak
|
Dapatkah ruang alamat total melebihi ukuran memori fisik?
|
Ya
|
Ya
|
Apakah tabel yang ukurannya berubah-ubah dapat diakomodasi?
|
Tidak
|
Ya
|
Dapatkan prosedur dan data dibedakan dan
diproteksi secara terpisah?
|
Tidak
|
Ya
|
Adakah fasilitas pemakaian bersama prosedur antar user?
|
Tidak
|
Ya
|
Mengapa teknik ini diciptakan?
|
Untuk mendapatkan ruang alamat linier yang besar tanpa harus membeli
memori fisik tambahan
|
Untuk memungkinkan program dan data dibagi menjadi ruang alamat yang
secara logik independen dan untuk membantu pemakaian bersama dan proteksi
|
Perbandingan
paging dan segmentasi.
Checkerboarding: Timbulnya
blok-blok memori yang kosong (hole) pada saat isi segmen dikeluarkan. Hal ini
diatasi dengan pemampatan (compaction).
Segmentasi dengan Paging : Setiap segmen dapat dianggap sebagai satu
virtual memori, dan masing-masing dibagi menjadi page-page.
Salah satu mesin yang memakai cara ini adalah MULTICS. Setiap program
MULTICS memiliki satu tabel segmen, dengan satu descriptor per segmen. Segmen descriptor berisi keterangan
apakah segmen yang bersangkutan ada di memori atau tidak.
Segmen
descriptor
|
|
Tabel page untuk segmen 0
|
|||
36 bit
|
|
Page 0 entry
|
|
|
|
Descriptor
segmen 0
|
|
Page 1 entry
|
|
Pointer-
|
|
Descriptor
segmen 1
|
|
Page 2 entry
|
|
pointer
|
|
Descriptor
segmen 2
|
|
Page 3 entry
|
|
ke page
|
|
Descriptor
segmen 3
|
|
|
|
|
|
Descriptor
segmen 4
|
|
|
|
|
|
Descriptor
segmen 5
|
|
Tabel page untuk segmen 1
|
|||
Descriptor
segmen 6
|
|
Page 0 entry
|
|
|
|
Descriptor
segmen 7
|
|
Page 1 entry
|
|
|
|
|
|
Page 2 entry
|
|
|
|
|
|
Page 3 entry
|
|
|
|
|
|
Page 4 entry
|
|
|
|
|
|
Page 5 entry
|
|
|
|
|
|
|
|
|
|
Virtual address MULTICS 34-bit:
Alamat
di dalam segmen
Nomer segmen
|
|
Nomer page
|
Offset di dalam page
|
18
|
|
6
|
10
|
Nomer segmen
|
|
Nomer page
|
Offset di dalam page
|
|
Nomer
|
|
|
|
|
|
segmen
|
|
|
|
|
|
|
|
Nomer
|
|
|
Descriptor
|
|
|
page
|
|
|
|
|
Page frame
|
|
|
Offset
|
|
|
|
|
|
|
|
|
|
|
|
|
Segmen
|
|
Tabel page
|
|
|
|
Descriptor
|
|
|
|
Word
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Page
|
|
Konversi alamat
MULTICS menjadi alamat memori utama.