Sabtu, 15 Mei 2010

managing memori : swapping memori

http://lecturer.eepis-its.edu/Dalam tahapannya, suatu proses bisa saja di tukar keluar sementara dari memori ke sebuah penyimpanan sementara dan kemudian dibawa lagi ke memori untuk melanjutkan pengekskusian. Hal ini dalam system operasi disebut swapping. Contoh swapping adalah asumsikan sebuah multi programming environment dengan penjadwalan CPU Round-Robin. Ketika waktu kuantum habis, pengatur memori akan menukar proses yang telah selesai dan memasukkan proses yang lain ke dalam memori yang sudah bebas. Disaat yang bersamaan, penjadwal CPU akan mengalokasikan waktu untuk proses lain di dalam memori. Ketika waktu kuantum setiap proses sudah habis, proses tersebut akan ditukar dengan proses lain.
Dalam kondisi ideal, penukaran proses dapat dilakukan dengan cepat sehingga proses akan selalu berada dalam memori dan siap dieksekusi saat penjadwal CPU hendak menjadwal CPU. Hal ini berkaitan dengan CPU utilization. Swapping dapat juga terdapat dalam penjadwalan berbasis prioritas (priority scheduling). Jika proses dengan prioritas lebih tinggi datang dan meminta layanan, manajer memori dapat menukar keluar memori proses-proses yang prioritasnya rendah sehingga proses-proses yang prioritasnya lebih tinggi tersebut dapat dieksekusi. Setelah proses-proses yang memiliki prioritas lebih tinggi tersebut selesai dieksekusi, proses-proses dengan prioritas rendah dapat ditukar kembali ke dalam memori dan dilanjutkan eksekusinya. Cara ini disebut juga dengan metoda roll in, roll out.
Ketika proses yang sebelumnya ditukar, akan dikembalikan keruang memori. Ada 2 kemungkinan yang terjadi.

Pertama, apabila pemberian alamat dilakukan pada waktu pembuatan atau waktu pengambilan, maka proses tersebut pasti akan menempati ruang memori yang sama. Kedua, apabila pemberian alamat diberikan pada waktu eksekusi, ada kemungkinan proses akan dikembalikan ke ruang memori yang berbeda dengan sebelumnya

managing memori : virtual memori


Virtual memory adalah sebuah komputer sistem teknik yang memberikan kesan program aplikasi yang memiliki memori kerja berdekatan (ruang alamat), padahal mungkin secara fisik terfragmentasi dan bahkan mungkin meluap ke penyimpanan disk.
Dikembangkan untuk multitasking kernel , memori virtual menyediakan dua fungsi utama:
  • Setiap proses memiliki ruang alamat sendiri, sehingga tidak perlu direlokasi maupun yang diperlukan untuk menggunakan mode pengalamatan relatif .
  • Setiap proses satu blok berdekatan melihat memori bebas setelah peluncuran. Fragmentasi tersembunyi.


Semua implementasi (tidak termasuk emulator) memerlukan dukungan hardware. Hal ini biasanya dalam bentuk sebuah unit manajemen memori dibangun ke dalam CPU.

Sistem yang menggunakan teknik ini membuat pemrograman aplikasi besar lebih mudah dan menggunakan memori fisik yang sebenarnya (misalnya RAM ) lebih efisien daripada yang tanpa memori virtual. Virtual memory berbeda secara signifikan dari virtualisasi memori di memori virtual memungkinkan sumber daya untuk virtual sebagai memori untuk sistem tertentu, sebagai lawan dari kolam besar memori yang virtual sebagai kolam kecil untuk sistem yang berbeda.

Perhatikan bahwa "memori virtual" adalah lebih dari sekedar "menggunakan ruang disk untuk memperpanjang ukuran memori fisik" - yang hanya perpanjangan dari hirarki memori untuk menyertakan hard disk drive . Memperluas memori untuk disk adalah konsekuensi normal dari menggunakan teknik memori virtual, tapi bisa dilakukan dengan cara lain seperti lapisan atau bertukar program dan data mereka benar-benar keluar untuk disk sementara mereka tidak aktif. Yang dimaksud dengan "virtual memory" mendefinisikan ulang didasarkan pada ruang alamat memori virtual berdekatan dengan alamat untuk "trik" program berpikir mereka menggunakan alamat blok besar bersebelahan.

Modern komputer untuk tujuan umum sistem operasi umumnya menggunakan teknik memori virtual untuk aplikasi biasa, seperti pengolah kata, spreadsheet, pemutar multimedia, akuntansi, dll, kecuali dukungan hardware yang dibutuhkan (sebuah unit manajemen memori ) tidak tersedia. sistem operasi lama, seperti DOS [1] dari tahun 1980-an, atau mereka untuk mainframe tahun 1960-an, umumnya tidak memiliki fungsi virtual memory - pengecualian menjadi Atlas , B5000 dan Apple Computer 's Lisa .

Embedded sistem dan lain-tujuan sistem komputer khusus yang memerlukan sangat cepat dan / atau respon yang konsisten kali sangat mungkin memilih untuk tidak menggunakan virtual memory dikarenakan berkurangnya determinisme . Hal ini didasarkan pada gagasan bahwa pengecualian prosesor terduga menghasilkan yang tidak diinginkan jitter pada CPU dioperasikan I / O, yang tertanam prosesor yang lebih kecil sering melakukan langsung agar biaya dan konsumsi daya rendah, dan aplikasi sederhana terkait telah menggunakan sedikit untuk fitur multitasking.

managing memori : segmentasi memori

Dimulai dengan model 80386, microprocessor Intel menampilkan translasi alamat dengan 2 cara berbeda, yang disebut real mode dan protected mode. Real mode untuk memelihara kompatibilitas prosesor dengan model yang lebih lama dan untuk OS agar dapat melakukan bootstrap.

• Segmentation Registers
Logical address terdiri atas dua bagian : segment identifier dan sebuah offset yang menunjukkan alamat yang bersangkutan pada segment. Segment identifier adalah sebuah 16-bit field yang disebut segment selector. Untuk mempermudah memperoleh segment selectors dengan cepat, prosesor menyediakan segmentation register yang tujuannya hanya untuk memegang segment selectors. Ada enam segmentation register : cs, ss, ds, es, fs, dan gs.

• Segment Descriptor
Setiap segment direpresentasikan dengan 8-byte segment descriptor yang menggambarkan karakteristik segment. Segment descriptor disimpan pada Global Descriptor Table(GDT) atau pada Local Descriptor Table(LDT).

• Segment Selectors
Untuk mempercepat pengubahan dari logical address ke linear address, Intel menyediakan nonprogrammable register tambahan untuk setiap dari 6 programmable segmentation register. Setiap segment selector di-load pada sebuah segmentation register, segment descriptor yang bersangkutan di-load dari memori ke nonprogrammable CPU register yang bersesuaian. Jadi, 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.

• Segmentation Unit
Segmentatipn Unit melakukan operasi-operasi berikut :
- Memeriksa TI dari segment selector, 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.



Segmentation pada Linux

Linux menggunakan segmentasi secara sangat terbatas. Kenyataannya, segmentasi dan paging merupakan hal yang redundan karena keduanya digunakan untuk memisahkan ruang physical address padai proses. Segmentasi bisa menugaskan sebuah ruang linear address yang berbeda, sementara paging bisa memetakan ruang linear address yang sama ke ruang physical address yang berbeda. Linux lebih menyukai paging karena alasan berikut :

• Manajemen memori lebih sederhana bila semua proses menggunakan nilai segment register yang sama, yaitu, pada saat saling berbagi linear addressess yang sama.

• Salah satu tujuan desain Linux adalah portabilitas untuk sebagian besar arsitektur populer; sementara beberapa prosesor RISC hanya mendukung segmentasi secara terbatas.

managing memori: paging

Paging unit mengubah linear addresses ke physical adresses. Paging unit mengecek tipe permintaan akses yang melanggar hak akses dari linear address. Jika akses memori tidak valid, maka akan menghasilkan eksepsi page fault.


Untuk efisiensi, linear address dikelompokkan dalam interval fixed-length yang disebut pages; linear addressess kontigu pada sebuah page dipetakan ke physical addresses kontigu. Paging unit menganggap semua RAM terpartisi menjadi fixed-length page frames. Setiap page frame mengandung sebuah page. Struktur data yang memetakan linear ke physical addressses disebut page tables, tersimpan dalam memori utama dan harus diinisialisasi secara tepay oleh kernel sebelum memfungsikan paging unit.


• Regular Paging
Linear address 32 bit dibagi menjadi 3 :
- Direktori, 10 bit most significant
- Tabel, 10 bit intermediet
- Offset, 12 bit least significant

Pengubahan linear address terjadi 2 dalam 2 tahap, masing-masing berdasar pada tipe tabel translasi. Tabel translasi yang pertama disebut page directory dan yang kedua disebut page table.


• Extended Paging
Dimulai pada model Pentium, mikroprosesor Intel 80x86 memperkenalkan extended paging, yang memungkinkan page frames berukuran 4KB atau 4 MB. Extended paging dimungkinkan dengan men-set Page Size flag dari sebuah entri Page Directory. Pada kasus ini, paging unit membagi 32 bit linear address menjadi 2 bagian:
- Direktori, 10 bit most significant
- Offset, 22 bit sisanya

Entri page directory untuk extended paging sama dengan untuk paging biasa, kecuali :
- Page Size flag harus diset.
- Hanya 10 bit most signifcant pertama dari 10 bit physical address field yang signifikan


• Transaction Lookaside Buffers (TLB)
Selain cache general purpose hardware, Intel 80x86 menyediakan juga cache yang lain, disebut translation lookaside buffers (TLB) untuk meningkatkan kecepatan translasi linear address.


Paging pada Linux


Linux mengadopsi model three-level paging sehingga paging memungkinkan pada arsitektur 64 bit. Tiga tipe paging tables :
- Page Global Directory
- Page Middle Directory
- Page Table

Page Global Directory mengandung alamat dari beberapa Page Middle Directory, yang mengandung beberapa alamat dari beberapa Page Tables. Setiap entri page table menunjuk ke sebuah page frame. Linear address kemudian terbagi menjadi 4 bagian.


• Linear Address Fields
Makro berikut ini menyederhanakan page table handling :
- PAGE_SHIFT, menentukan panjang offset field dalam bit.
- PMD_SHIFT, menentukan logaritma dari ukuran area Page Middle Directory entry yang dapat dipetakan.
- PGDIR_SHIFT, menentukan logaritma dari ukuran area Page Global Directory entry yang dapat dipetakan.
- PTRS_PER_PTE, PTRS_PER_PMD, dan PTRS_PER_PGD; menghitung jumlah entri di Page table, Page Middle Directory, dan Page Global Directory, bernilai 1024, 1 dan 1024.


• Page Table Handling
pte_t, pmd_t, dan pgd_t merupakan tipe data 32 bit yang menggambarkan entri Page Table Table, Page Middle Directory, dan Page Global Directory. pgprot_t merupakan tipe data 32-bit yang lain yang merepresentasikan protection flags dihubungkan dengan entri tunggal.

Empat tipe makro konversi tipe (_ _pte(), _ _pmd(), dan _ _pgprot()) meng-casting unsigned integer 32-bit ke tipe yang sesuai. Kernel juga menyediakan beberapa makro dan fungsi untuk membaca atau memodifikasi entri page table : pte_none(), pmd_none(), pgd_none(), pte_presents(), pmd_present(), pgd_present(), pte_clear(), pmd_clear(), dan pgd_clear. Makro pmd_bad() dan pgd_bad()digunakan oleh fungsi untuk mengecek entri Page Global Directory dan Page Middle Directory sebagai parameter. Tidak ada makro pte_bad()karena legal bagi sebuah entri Page Table untuk mengacu pada sebuah page yang tidak berada di memori utama, tidak bisa ditulis, atau tidak bisa diakses sama sekali. Beberapa fungsi yang berhubungan dengan flag yang terkandung dalam entri Page Table :
pte_read(),pte_write(),pte_exect(),pte_dirty(),pte_young(),pte_wrprotect(),pte_rdprotect(),pte_exprotec(),pte_mkwrite(),pte_mkread(),pte_mkexec(), pte_mkdirty, pte_mkclean(),pte_mkyoung(), pte_mkold(), pte_modify(p,v), set_pte.
Kemudian makro yang mengkombinasikan sebuah alamat page dan sebuah grup protection flags menjadi sebuah page entry 32 bit : mk_pte(), mk_pte_phys(), pte_page(),pmd_page(), pgd_offset(p, a), pmd_offset(p, a).
Fungsi dan makro yang lain :
pte_quicklist, pgd_quicklist,check_pgt_cache(), pgd_alloc(), pmd_alloc(p, a), pte_alloc(p, a), pte_free(), pte_free_kernel(), pgd_free(), free_one_pmd(), free_one_pgd(), SET_PAGE_DIR, new_page_tables(), clear_page_tables(), free_page_tables().


• Reserved Page Frames
Kode kernel dan struktur data disimpan dalam sebuah kelompok dari reserved page frames. Arsitektur PC memempunyai beberapa kelakuan yang tidak biasa :
- Page frame 0 digunakan oleh BIOS untuk menyimpan konfigurasi hardware sistem yang terderteksi selama Power On-Self Test (POST).
- Physical addressess dari 0x000a0000 hingga 0x000fffff dipesan untk rutin BIOS dan untuk pemetaan internal memori dari ISA graphic cards.
- Page frames tambahan pada megabyte pertama mungkin dipesan oleh model komputer model tertentu. Contohnya, Ibm ThinkPad memetakan 0xa0 page frame ke 0x9f.


• Proses Page Tables
Ruang linear address dibagi menjadi dua bagian :
- Linear address dari 0x00000000 ke PAGE_OFFSET -1 bisa dialamatkan saat proses berada pada user atau kernel mode.
- Linear address dari 0x00000000 ke PAGE_OFFSET -1 bisa dialamatkan hanya saat proses berada pada kernel mode.


• Kernel Page Tables
Kernel menginisialisai page table dirinya dalam dua fase. Sesaat sesudah kernel di-load ke memori, CPU masih bekerja dalam real mode; sehingga paging masih belum berfungsi. Pada fase pertama, kernel membuat sebuah ruang alamat terbatas 4 MB, yang cukup untuk menginstal dirinya pada RAM. Pada fase kedua, kernel memanfaatkan semua Ram yang ada dan men-set paging tables dengan tepat.