Paging dan Segmentation

Secara sederhana, Paging dan Segmentation adalah dua cara yang digunakan oleh sistem operasi (OS) untuk mengatur bagaimana sebuah program disimpan di dalam memori fisik (RAM). Bayangkan RAM sebagai sebuah rak buku besar dan program Anda sebagai sebuah buku.


Paging: Membagi Memori Menjadi "Halaman" Berukuran Sama

Paging adalah teknik manajemen memori yang memecah program dan memori fisik menjadi blok-blok berukuran sama (fixed-size).

  • Blok-blok pada program disebut Pages (halaman).

  • Blok-blok pada memori fisik (RAM) disebut Frames (bingkai).

Intuisi / Analogi Sederhana: 📖

Bayangkan Anda memiliki sebuah buku cerita (program) yang sangat tebal. Rak buku Anda (RAM) memiliki banyak slot kosong, tapi tidak ada satu slot pun yang cukup besar untuk menampung seluruh buku secara utuh.

Dengan Paging, Anda melakukan ini:

  1. Anda merobek buku cerita menjadi halaman-halaman terpisah dengan ukuran yang sama persis (ini adalah Pages).

  2. Anda meletakkan halaman-halaman ini secara acak di slot-slot kosong mana pun yang tersedia di rak buku (ini adalah Frames). Halaman 1 bisa ada di slot 5, halaman 2 di slot 1, halaman 3 di slot 8, dan seterusnya. Mereka tidak perlu berurutan.

  3. Agar tidak bingung, Anda membuat sebuah Daftar Isi khusus yang disebut Page Table. Daftar ini mencatat: "Halaman 1 ada di slot 5", "Halaman 2 ada di slot 1", dan seterusnya.

Bagaimana Cara Kerjanya? (Proses Translasi Alamat)

Ketika CPU ingin membaca instruksi tertentu (misalnya, "baca baris ke-5 dari halaman 3"), prosesnya adalah:

  1. Alamat Logis: CPU memberikan alamat logis yang terdiri dari dua bagian: Nomor Halaman (Page Number) dan Offset (posisi baris di dalam halaman itu). Contoh: (Page 3, Offset 5).

  2. Mencari di Tabel Halaman (Page Table): Sistem operasi melihat Page Table untuk mencari tahu di frame (slot) mana Page 3 disimpan. Misalkan, tabel mengatakan Page 3 ada di Frame 8.

  3. Membentuk Alamat Fisik: Sistem operasi menggabungkan nomor frame dengan offset untuk mendapatkan alamat fisik di RAM. Jadi, alamatnya menjadi (Frame 8, Offset 5). Komputer pun langsung menuju ke slot 8 di rak buku dan membaca baris ke-5.

Kelebihan Paging:

  • Menghilangkan Fragmentasi Eksternal: Karena semua "slot" (frame) berukuran sama, tidak akan ada sisa-sisa ruang kosong yang aneh dan tidak bisa digunakan di antara program. Setiap slot kosong pasti bisa diisi oleh halaman mana pun.

  • Alokasi Memori Sederhana: OS hanya perlu mencari frame kosong mana saja, tanpa perlu pusing mencari blok memori yang cukup besar dan berurutan.

  • Sangat Efisien untuk Virtual Memory: Konsep ini memudahkan OS untuk memindahkan halaman yang jarang dipakai ke disk (hard drive) untuk sementara waktu.


Segmentation: Membagi Memori Berdasarkan "Segmen" Logis

Segmentation adalah teknik yang membagi memori menjadi blok-blok berukuran bervariasi (variable-sized) yang disebut segmen. Pembagian ini didasarkan pada struktur logis dari sebuah program.

Intuisi / Analogi Sederhana: 🗂️

Bayangkan sebuah proyek besar (program) yang terdiri dari beberapa bagian: tumpukan kode program, tumpukan data variabel, gambar-gambar, dan tumpukan fungsi pustaka (library).

Dengan Segmentation, Anda melakukan ini:

  1. Anda tidak memotong-motong proyek, melainkan mengelompokkannya ke dalam folder-folder terpisah berdasarkan fungsinya (ini adalah Segments). Jadi ada "Folder Kode", "Folder Data", "Folder Gambar", dll. Setiap folder ini ukurannya bisa berbeda-beda.

  2. Anda meletakkan seluruh folder ini di dalam lemari arsip (RAM). "Folder Kode" yang besar mungkin butuh satu laci penuh, sementara "Folder Gambar" yang kecil hanya butuh sebagian kecil dari laci lain.

  3. Anda membuat Label di Depan Lemari yang disebut Segment Table. Label ini mencatat: "Folder Kode dimulai dari alamat 1000 dan ukurannya 500 baris", "Folder Data dimulai dari alamat 2000 dan ukurannya 150 baris", dst.

Bagaimana Cara Kerjanya? (Proses Translasi Alamat)

Ketika CPU ingin mengakses sesuatu (misalnya, "variabel ke-10 di dalam segmen data"), prosesnya adalah:

  1. Alamat Logis: CPU memberikan alamat logis yang terdiri dari: Nomor Segmen (Segment Number) dan Offset (posisi di dalam segmen itu). Contoh: (Segment Data, Offset 10).

  2. Mencari di Tabel Segmen (Segment Table): Sistem operasi melihat Segment Table untuk Segment Data. Tabel ini memberikan dua informasi penting: Alamat Awal (Base Address) di mana segmen itu dimulai di RAM (misal, 2000) dan Ukuran (Limit) dari segmen itu (misal, 150).

  3. Pengecekan Keamanan & Membentuk Alamat Fisik:

    • Pertama, OS mengecek apakah offset (10) lebih kecil dari limit (150). Jika ya, aksesnya aman. Jika tidak (misalnya mencoba mengakses offset 200), akan terjadi error karena mencoba mengakses memori di luar segmen yang seharusnya.

    • Jika aman, alamat fisik dihitung dengan menjumlahkan alamat awal dengan offset: Alamat Fisik = Base Address + Offset (2000 + 10 = 2010). Komputer pun langsung menuju ke alamat 2010 di RAM.

Kelebihan Segmentation:

  • Pemisahan Logis: Cara ini sangat sesuai dengan cara pandang programmer. Programmer berpikir dalam bentuk "kode", "data", "stack", bukan "halaman 27".

  • Memfasilitasi Proteksi dan Berbagi (Sharing): Sangat mudah untuk melindungi segmen. Misalnya, segmen kode bisa ditandai sebagai read-only (hanya bisa dibaca). Selain itu, jika beberapa program menggunakan pustaka (library) yang sama, mereka bisa berbagi satu segmen kode yang sama di memori, sehingga lebih hemat.

  • Manajemen Struktur Data yang Dinamis: Struktur data seperti stack yang bisa membesar dan mengecil lebih mudah dikelola sebagai satu segmen tersendiri.


Tentu, kita bisa membuat simulasi sederhana dari Paging dan Segmentation menggunakan bahasa Go (Golang).

Simulasi ini akan fokus pada proses translasi alamat (mengubah alamat logis dari CPU menjadi alamat fisik di RAM) untuk menunjukkan perbedaan fundamental antara keduanya. Ini bukan implementasi level sistem operasi, melainkan model konseptual dalam bentuk kode.

Struktur Proyek

Kita akan membuat satu file main.go yang berisi kedua simulasi.


Simulasi Paging di Go

Konsep Kunci:

  • Memori fisik dibagi menjadi Frames berukuran sama.

  • Program dibagi menjadi Pages dengan ukuran yang sama seperti Frame.

  • Page Table memetakan setiap Page ke sebuah Frame di memori fisik.

  • Alamat Fisik = (Nomor Frame * Ukuran Page) + Offset

Penjelasan Kode Paging:

  1. Konstanta: PAGE_SIZE dan MEMORY_SIZE mendefinisikan arsitektur sistem kita. Ukuran page dan frame adalah sama (16 bytes).

  2. Struktur Data: PhysicalMemory adalah array byte sederhana yang berperan sebagai RAM. PageTable adalah sebuah map yang menjadi "daftar isi" kita.

  3. initPagingSystem: Fungsi ini menyiapkan simulasi. Kita berpura-pura memuat program 3 halaman ke dalam frame yang acak (5, 2, 7) untuk menunjukkan bahwa alokasi tidak harus berurutan.

  4. translateAddress: Ini adalah inti dari simulasi.

    • Ia mengambil logicalAddress.

    • Membaginya dengan PAGE_SIZE untuk mendapatkan pageNumber.

    • Menggunakan operator modulo (%) untuk mendapatkan offset.

    • Mencari pageNumber di PageTable untuk mendapatkan frameNumber.

    • Menghitung alamat fisik akhir.


Simulasi Segmentation di Go

Konsep Kunci:

  • Memori dibagi berdasarkan segmen logis (kode, data, dll.) dengan ukuran bervariasi.

  • Segment Table menyimpan alamat awal (Base) dan ukuran (Limit) dari setiap segmen.

  • Ada pengecekan keamanan: Offset harus lebih kecil dari Limit.

  • Alamat Fisik = Alamat Base + Offset

Mari kita tambahkan kode berikut ke file main.go kita.

Cara Menjalankan

  1. Simpan seluruh kode gabungan di atas dalam satu file bernama main.go.

  2. Buka terminal atau command prompt.

  3. Arahkan ke direktori tempat Anda menyimpan file tersebut.

  4. Jalankan perintah: go run main.go

Hasil yang Diharapkan (Output)

Kesimpulan dari Simulasi

  • Paging bekerja seperti kalkulator sederhana, memecah alamat logis menjadi page dan offset untuk menemukan frame dan menghitung alamat fisik. Ia tidak peduli dengan struktur program, hanya ukuran blok yang seragam.

  • Segmentation bekerja seperti penjaga keamanan. Ia melihat alamat logis sebagai segmen dan offset, lalu pertama-tama memeriksa izin akses (offset < limit) sebelum menghitung alamat fisik. Ini adalah cerminan dari pandangan logis seorang programmer.

Last updated