Senin, 29 April 2013


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.