-
Ijen Crater Banyuwangi
-
Zoomtemplate.com is a free professionally designed and search engine optimized Blogger Templates collection. It is currently the fastest growing Blogger Templates blog.The blog has numerous templates which are categorized properly in a Categories menu and Tags so it is for you to find the right Blogger templates for your Blogger/Blogspot blog
-
Zoomtemplate.com is a free professionally designed and search engine optimized Blogger Templates collection. It is currently the fastest growing Blogger Templates blog.The blog has numerous templates which are categorized properly in a Categories menu and Tags so it is for you to find the right Blogger templates for your Blogger/Blogspot blog.
-
Zoomtemplate.com is a free professionally designed and search engine optimized Blogger Templates collection. It is currently the fastest growing Blogger Templates blog.The blog has numerous templates which are categorized properly in a Categories menu and Tags so it is for you to find the right Blogger templates for your Blogger/Blogspot blog.
-
Zoomtemplate.com is a free professionally designed and search engine optimized Blogger Templates collection. It is currently the fastest growing Blogger Templates blog.The blog has numerous templates which are categorized properly in a Categories menu and Tags so it is for you to find the right Blogger templates for your Blogger/Blogspot blog.
-
Zoomtemplate.com is a free professionally designed and search engine optimized Blogger Templates collection. It is currently the fastest growing Blogger Templates blog.The blog has numerous templates which are categorized properly in a Categories menu and Tags so it is for you to find the right Blogger templates for your Blogger/Blogspot blog.
Tuesday, August 30, 2011
Ucapan Unik Selamat Lebaran 2011
#include (SEBENTAR_senang) /* ganti tanda kurungnya dulu */
#include (SEBENTAR_sedih)
#include (SEBENTAR_bokek)
#include (SEBENTAR_berduit)
#include (SEBENTAR_ketawa)
int hidup(){
var SEBENTAR_lagi=1;
while (time==idul_fitri){
printf "LEBARAN Idul Fitri 1432H";
printf "untuk SEGENAP KELUARGA BESAR POLITEKNIK BANYUWANGI ";
printf "Saya mengucapkan Minal aidzin wal faidzin";
printf "Mohon Maaf Lahir Batin";
SEBENTAR_lagi--;
}
if (SEBENTAR_lagi==0){
salam_salaman;
}
if (salam_salaman==~);{
printf "Makan kue tetangga,sahabat,saudara,pacar,mantan,selingkuhan";
printf "minum softdrink tetangga,sahabat,saudara,pacar,mantan,selingkuhan";
printf "sebelum pulang jangan lupa minta angpau,pacar,mantan,selingkuhan";
printf "kalau g dikasi angpau bawa pulang kuenya,pacar,mantan,selingkuhan";
}
return 0;
}
Read More..
Tuesday, July 26, 2011
PROSES ADDRESS SPACE
Ketika user mode process meminta alokasi memori, maka proses tersebut bagi kernel :
Dianggap nonurgent sehingga proses tersebut tidak dengan segera mendapat alokasi memori.
Tidak bersih dari error sehingga kernel harus berusaha menangguli error yang ada.
Karena kernel berusaha sebisa mungkin untuk menunda permintaan alokasi memory maka user mode process menggunakan sebuah interval linier address yang baru yang merupakan bagian dari address space yang disebut memory region.
Address space sebuah proses terdiri dari semua linier address yang proses tersebut dapat gunakan. Interval linier address tersebut disebut memory region. Memory region dikarakterisasi dengan initial address, length (panjang) dan hak akses. Untuk alasan efisiensi, maka initial address dan panjang dari memory region harus merupakan kelipatan dari 4096.
Memory descriptor
Segala informasi yang berhubungan dengan process address space terdapat dalam tabel referensi mm field dari process descriptor. Struktur data mm_struct :
struct mm_struct {
struct vm_area_struct *mmap, *mmap_avl, *mmap_cache;
pgd_t *pgd;
atomic_t count;
int map_count;
struct semaphore mmap_sem;
unsigned long context;
unsigned long start_code, end_code, start_data,
end_data;
unsigned long start_brk, brk, start_stack;
unsigned long arg_start, arg_end, env_start, env_end;
unsigned long rss, total_vm, locked_vm;
unsigned long def_flags;
unsigned long cpu_vm_mask;
unsigned long swap_cnt;
unsigned long swap_address;
void *segments;
};
Field yang penting :
pgd dan segments : menunjuk Page Global Directory dan Local Descriptor Table dari proses.
rss : menspesifikasikan jumlah page frame yang dialokasikan untuk proses.
total_vm : melambangkan ukuran proses dalam jumlah pages.
locked_vm : menghitung jumlah “locked” pages, yaitu pages yang tidak bisa diswap.
count : merupakan jumlah prses yang menggunakan mm_struct deskriptor yang sama.
Fungsi mm_alloc () digunakan untuk mendapatkan memori deskriptor yang baru. Karena deskriptor ini terletak dalam slab allocator cache, maka mm_alloc () memanggil kmem_cache_alloc () untuk menginisialisasi memori deskriptor baru dengan menduplikasi isi dari memori deskriptor yang ada dan countnya diset 1.
Memory Regions
Memory region dideskripsikan degna vm_area struct :
struct vm_area_struct {
struct mm_struct *vm_mm;
unsigned long vm_start;
unsigned long vm_end;
struct vm_area_struct *vm_next;
pgprot_t vm_page_prot;
unsigned short vm_flags;
short vm_avl_height;
struct vm_area_struct *vm_avl_left, *vm_avl_right;
struct vm_area_struct *vm_next_share,**vm_pprev_share;
struct vm_operations_struct *vm_ops;
unsigned long vm_offset;
struct file *vm_file;
unsigned long vm_pte;
};
Tiap memory region deskriptor mengindentifikasi sebuah interval linier address tertentu. vm_start berisi linier address dalam interval yang pertama sementara vm_end berisi linier address pertama diluar interval sehingga vm_end – vm_start merupakan panjang dari memory region.
Memory region tiap proses tidak pernah overlap. Jika ada 2 memory region yang bersinggungan maka kernel akan berusaha untuk menggabungkannya. Jika tidak bisa maka akan dibuat saling bersebelahan saja. Pada proses dialokasi, jika yang didisalokasi ada ditengah-tengah sebuah memory region maka memory region tersebut akan terbagi 2.
Page Fault Handler
Linux Page Fault exception handler harus membedakan eksepsi yang disebabkan oleh kesalahan programming dari eksepsi yang disebabkan oleh pengacuan ke sebuah page yang berada pada process address space , tetapi belum dialokasi. Fungsi do_page_fault()yang merupakan rutin servis interup Page Fault membandingkan linear address yang menyebabkan page fault dengan memori region dari proses current hal ini merupakan hal yang tepat untuk meng-handle exception.
Jenis page fault handler antara lain : copy on write, demand paging, send SIGSEGV, kill process and kernel “Oops”, dan “fixup code”.
Copy on Write
Sistem Unix generasi pertama mengimplementasikan pembuatan proses dengan cara yang ceroboh : saat fork()dipanggil, kernel menduplikasi seluruh process address space parentdan meng-assign salinan proses ke child process. Kernel Unix modern memperkenalkan pendekatan yang lebih efisien yang disebut Copy OnWrite (COW). Idenya adalah daripada menduplikasi page frames, maka terjadi pembagian antara parent process dan child process.
Managing the Heap
Setiap proses Unix mempunyai memory region spesifik yang disebut heap yang digunakan untuk memenuhi permintaan proses dinamik memori. Field memory descriptor start_brk dan brk membatasi alamat awal dan akhir pada region tersebut.
Fungsi libary C berikut bisa digunakan oleh proses untuk meminta dan membebaskan dynamic memory :
malloc (size), meminta ukuran byte dynamic memory
calloc(n, size), meminta sebuah array yang terdiri atas n elemen dari size, jika alokasi suskses maka akan menginisialisasi komponen array dengan 0 dan mengembalikan linear address dari elemen pertama.
free(addr), membebaskan memory region yang dialokasikan oleh malloc() atau calloc() yang mempunyai alamat inisial addr.
brk(addr), memodifikasi ukuran heap secara langsung, parameter addr menentukan nilai baru dari current->mm->brk, dan return value-nya adalah alamat akhir yang baru dari memory region.
MEMORY MANAGEMENT
Beberapa bagian dari RAM digunakan oleh ke
rnel untuk menyimpan kode kernel dan struktur data statis kernel. Sisa dari bagian yang digunakan oleh kernel tersebut disebut dynamic memory. Dynamic memory ini tidak hanya digunakan oleh proses, tetapi juga oleh kernel senidri. Kualitas pe
rformansi dari keseluruhan sistem tergantung pada seberap
a efisien manajemen dynaimc memory. Manajemen mem
ori yang akan dibahas berikut menggambarkan bagaimana kernel mengalokasikan memori untuk keperluannya. Macam teknik manajemen memori :
1. Physically contigous memory areas
a. Page Frame Management
Memory Area Management
Physically noncontigous memory areas
a. Noncontigous Memory Area Management
Contiguous Memory Area Management
Page Frame Management
Linux menggunakan ukuran page frame 4KB sebagai standar untuk memory alocation unit, alasannya :
Kernel bisa langsung mengetahui memory allocation unit di mana page fault terjadi.
Ukuran 4KB merupakan kelipatan terkecil dari hampir seluruh ukura
n blok disk.
Page frame descriptor diinisialisasi oleh fungsi free_area_init(), yang mempunyai 2 parameter : start_mem dan end_mem.
Kemudian fungsi mem_init() mengosongkan flag PG_reserved , dan flag PG_DMA dari semua page frame yang mempunyai alamat fisik sama dengan atau lebih besar dari 0x1000000.
Gambar 2 : Layout Memori
Requesting & Releasing Page Frame
Page frame bisa direquest dengan fungsi dan makro berikut :
_ _get_free_pages(gfp_mask, order), untuk merequest 2order page frame kontigu.
_ _get_dma_pages(gfp_mask, order), makro untuk mendapatkan page frame yang cocok untuk DMA; berkembang menjadi : _ _get_free_pages(gfp_mask | GFP_DMA, order).
_ _get_free_page(gfp_mask), makro untuk mendapatkan page frame tunggal, berkembang ke : _ _get_free_pages(gfp_mask, 0).
get_free_page(gfp_mask), fungsi yang
memanggil _ _get_free_page(gfp_mask) dan kemudian mengisi page frame yang didapatkan dengan 0
Page frame bisa dibebaskan (direlease) melalui fungsi dan makro berikut :
free_pages(addr, order), fungsi yang mengecek page
descriptor dari page frame yang mempunyai alamat fisik addr.
_ _free_page(p), membebaskan page frame yang descriptornya ditunjuk oleh parameter p.
free_page(addr), makro untuk membebaskan page frame dengan alamat fisik addr, berkembang ke free_pages(addr, 0).
Parameter gfp_mask menspesifikasikan bagaimana mencari page frame yang bebas. Terdiri atas flag – flag :
_ _GFP_WAIT , diset apabila kernel diijinkan untuk membuang isi page frame untuk membebaskan memori sebelum memenuhi request.
_ _GFP_IO, diset apabila kernel diijinkan untuk menulis page ke disk dengan tujuan membebaskan page frame yang bersangkutan.
_ _GFP_DMA, diset apabila page frame yang diminta harus sesuai untuk DMA.
_ _GFP_HIGH, _ _GFP_MED, _ _GFP_LOW, me
nspesifikasikan prioritas request. _ _GFP_LOW biasanya diasosiasikan dengan request dynamic memory oleh proses User Mode, dan prioritas yang lain diasosiasikan dengan request dari kernel.
Buddy System Algorithm
Teknik yang digunakan linux untuk mengatasi fragmentasi eksternal adalah algoritma sistem buddy.
Sistem Buddy merupakan cara mengelola memori utama dengan memanfaatkan kelebihan penggunaan bilangan biner.
Semua page frame dibagi menjadi 10 list blok yang terdiri dari group 1, 2, 4, 8, 16, 32, 64, 128, 256, dan 512 page frame yang kontigu, secara berurutan : alamat page frame pertama dari blok merupakan kelipatan dari ukuran group, misalnya, blok frame 16 merupakan kelipatan dari 16 × 212
Misalnya suatu memori utama pada awalnya me
miliki satu lubang besar berukuran 1 Mbyte. Jika suatu proses A berukuran 90Kbyte memasuki memori, maka permintaan 90 Kbyte akan dialokasikan ke lokasi terdekat yang dapat memuatnya yaitu 128 Kbyte. Karena tidak tersedia blok ukuran 128, maka blok 1 Mbyte dipecah menjadi 2 blok masing-masing berukuran 512 Kbyte. Blok ini dibagi lagi menjadi blok-blok berukuran 256 Kbyte, selanjutnya masih dibagi menjadi blok-blok 1
28 Kbyte. Kemudian Proses B yang berukuran 50 Kbyte akan menempati lubang 64 Kbyte berikutnya dengan cara membagi blok 64 Kbyte. Jika tidak ada blok yang dapat dialokasikan maka akan melaporkan error.
Dengan menggunakan sistem buddy ini akan mudah melakukan dealokasi proses. Jika suatu proses dibebaskan, kernel akan melakukan penggabungan dari pasangan blok buddy yang bebas dengan ukuran b ke dalam blok tunggal dengan ukuran 2b. Dua blok dapat digabung jika kedua buddy mempunyai ukuran yang sama, dialokasikan pada alamat fisik yang kontigu, dan alamat fisik dari page pertama dari blok pertama merupaka kelipatan dari 2b x 212. Penggabungan ini dilakukan secara iteratif.
Struktur Data
Linux menggnakan 2 sistem buddy yang berbeda. Satu sistem untuk meng-handle page frame yang sesuai untuk ISA DMA, sementara yang lainya meng-handle page frame yang tersisa. Masing-masing sistem buddy ini menggunkan struktur data :
array mem_map (array yang mengandung page frame descriptor).
array yang mempunyai 10 elemen dengan tipe free_area_struct, satu elemen untuk tiap ukuran group. Variabel free_area[0] menunjuk pada array yang digunakan sistem buddy untuk page frame yang tidak sesuai untuk ISA DMA
, sementara free_area[1] menunjuk pada array yang digunakan sistem buddy untuk page frames yang sesuai untuk ISA DMA.
10 array biner yang dinamakan bitmaps, 1 untuk tiap ukuran group. Tiap-tiap sistem buddy mempunyai himpunan bitmapsnya sendiri yang digunakan untuk menjaga track dari blok yang dialokasikan.
Allocation
Untuk mengalokasikan suatu page frame, sistem buddy menggunakan function __get_free_pages().
Algoritma : Pertama mengecek apakah ada ruang yang cukup, yaitu jika nr_free_pages lebih besar daripada freepages.min. Jika tidak, maka perlu mendapatkan kembali page frame, atau tetap mengalokasikan dengan mengeksekusi kode y
ang terkandung di macro RMQUEUE_TYPE. Jika page frame telah dialokasikan, kode di macro RMQUEUE_TYPE mengeksekusi return statement, lalu menterminasi function __get_free_pages(). Kemudian jika kode pada RMQUEUE_TYPE dieksekusi lagi dengan parameter kedua = 1, maka request untuk alokasi memori dipenuhi dengan menggunakan page frame yang sesuai dengan DMA.
Macro kemudian melakukan pencarian blok yang tersedia pada list. Jika loop while (untuk search) selesai, jika tidak ada blok yang cocok yang ditemukan, maka __get_free_pages() mengembalikan nilai NULL, jik
a blok yang sesuai ditemukan, maka descriptor dari page frame pertama dihapus dari list, kemudian bitmap yang sesuai di update, dan melakukan decreament pada nilai nr_free_pages. Jika blok yang ditemukan berasal dari list mempunyai ukuran new_order lebih besar daripada ukurang yang direquest, loop while di eksekusi. Akhirnya, RMQUEUE_TYPE meng-update counter untuk page descriptor yang diasosiasikan dengan blok yang dipilih dan mengeksekusi instruksi hasil. Sebagai
hasilnya, function __get_free_pages() mengembalikan nilai alamat dari blok yang ditemukan
Deallocation
Sistem buddy menggunakan function free_pages_ok() untuk membebaskan page frame dengan menggunakan 3 parameter input.
map_nr, yaitu nomor page dari salah satu page frame yang terkandung dari blok yang akan dibebaskan.
order, yaitu ukuran logik blok
type, biner, 1 jika page frame sesuai untuk DMA dan 0 jika tidak
Algoritma : Fungsi ini dimulai dengan men-declare dan menginisialisasi local variable.
struct page *next, *prev;
struct free_area_struct *area =&free_area[type][order];
unsigned long index = map_nr >> (1 + order);
unsigned long mask = (~0UL) << order;
unsigned long flags;
variabel mask mengandung komplemen dua dari 2order yang digunakan untuk mengubah map_nr ke dalam nomor dari page frame pertama blok yang dibebaskan dan untuk melakukan increament nr_free_pages.
Kemudian fungsi mulai mengeksekusi cycle paling banyak (9-order), satu kali untuk tiap kemungkinan untuk menggabungkan blok dengan buddynya. Di dalam body loop dilakukan pengecekan apakah buddy dari blok yang mempunyai map_nr bebas atau tidak. Pada akir iterasi, fungsi melakukan update terhadap mask, area, index, dan map
_nr. Kemudian fungsi ini melanjutkan pada iterasi selanjutnya, mencoba untuk menggabungkan blok-blok bebas untuk yang kedua kalinya menjadi satu blok bebas dengan ukuran yang lebih besar.
Memory Area Managemet
Manajemen memory area ini digunakan untuk mengatasi request untu memory area dengan ukuran kecil. Dengan adanya manajemen memory area maka internal fragmentation yang terjadi akibat adanya sistem buddy dapat dikurangi. Untuk iu digunakan algoritma slab allocator.
The Slab Allocator
Algoritma ini menggambarkan memory area sebagai objek-objek yang terdiri dari struktur data dan pasangan metode, yaitu constructor yang berfungsi untuk menginisialisasi memory area, dan destructor yang berfungsi untuk meng-deinisialisasi memory area. Objek-objek yang ada dikelompokkan ke dalam caches. Area dari main memory terdiri dari suatu cache yang dibagi menjadi slab-slab yang terdiri dari satu atau lebih page frame yang kontigu yang juga terdiri dari dari objek yang sudah dialokasikan dan yang masih bebas.
Gambar 3 : Keterhubungan Cache, Slab dan Objek
Slab allocator tidak pernah membuang objek yang telah dialokasikan, namun membebaskannya tetapi tetap menyimpannya di dalam memory. Hal ini dilakukan agar ketika ada request untuk objek baru maka dapat diambil dari memori tanpa melakukan inisialisasi ulang. Jadi secara umum, tujuan dari penggunaan slab allocator ini adalah untuk mengurangi pemanggilan buddy sistem allocator.
Kernel function cenderung untuk me-request memory area dengan tipe yang sama secara berulang-ulang sehingga tidak perlu melakukan alokasi dan dealokasi page frame yang mengandung memory area yang sama secara berulang-ulang, tetapi cukup dengan menyimpannya dalam cache dan menggunakan ulang ketika diperlukan.
Cache Descriptor
Tiap cache descriptor terdiri dari tabel dengan struktur data :
c_name, menunjuk nama dari cache
c_firstp, c_lastp, menunjuk first dan last slab descriptor dari cache.
c_freep, menunjuk slab descriptor pertama yang setidaknya mengandung satu objek bebas.
c_num, merupakan jumlah objek dalam satu slab tunggal. Semua slab dari suatu cache mempunyai ukuran yang sama.
c_offset, merupakan ukuran dari objek yang terkandung dalam suatu cache.
c_gfporder, angka logaritma dari jumlah page frame kontigu yang terdapat pada suatu slab tunggal.
c_ctor, c_dtor, menunjuk pada constructor dan destructor
c_nextp, menunjuk next cache descriptor
c_flags, suatu array flag yang mendeskripsikan beberapa permanent dari cache.
c_magic, mengandung magic number yang digunakan untuk mengecek keadaan suatu cache pada saat ini dan konsistensinya.
Slab Descriptor
Tiap slab pada cache mempunyai deskriptornya masing-masing dengan type struct kmem_slab_s. Field-field yang penting pada suatu slab descriptor antara lain :
s_inuse, merupakan jumlah objek pada slab yang sedang dialokasikan.
s_mem, menunjuk pada objek pertama pada slab, baik yang sudah dialokasikan ataupun yang masih bebas.
s_freep, menunjuk objek bebas pertama pada slab jika ada.
s_nextp, s_prevp, menunjuk next dan previous slab descriptor.
s_dma, diset oleh flag untuk menunjukkan bahwa objek pada slab dapat digunakan oleh DMA.
s_magic, mengandung magic number yang digunakan untuk mengecek keadaan suatu slab pada saat ini dan konsistensinya.
Slab descriptor disimpan dengan dua kemungkinan tergantung pada ukuran objek pada slab. Jika ukuran objek kurang dari 512 bytes, slab descriptor disimpan diakhir slab; dan sebaliknya jika ukuran objek dalam slab itu lebih dari 512 bytes maka slab descriptor disimpan di luar slab.
General And Specific Caches
Cache dibedakan menjadi dua jenis, yaitu general dan spesifik. General caches hanya digunakan oleh slab allocator untuk tujuannya, sementara cache spesifik digunakan oleh bagian lain dari kernel.
General caches terdiri dari :
Cache pertama yang terdiri dari cache deskriptor yang digunakan oleh kernel.
Cache kedua terdiri dari slab descriptor yang tidak disimpan dalam slab.
Tiga belas cache tambahan terdiri dari memori area yang terdistribusi secara geometri. Tabel dengan nama cache_sizes yang elemen-elemennya merupakan type cache_sizes_t yang menunjuk pada 13 cache descriptor yang diasosiasikan dalam memory area dengan ukuran : 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65
536, dan 131072 bytes.
Specific caches dibuat oleh fungsi kmem_cache_sizes_init(). Berdasarkan parameter, fungsi ini pertama kali menentukan cara paling baik untuk meng-handle cache baru. Kemudian membuat cache descriptor untuk cache baru itu dan memasukkan descriptor ke dalam general cache cache_cache. Sekali cache sudah dibuat maka tidak dapat dihilangkan.
Allocating A Slab to A Cache
Cache yang baru dibuat tidak mengandung slab, oleh karena itu tidak mengandung objek bebas. Slab baru dapat di-assign ke dalam cache dengan syarat :
Request telah dikeluarkan untuk mengalokasikan objek baru.
Cache tidak mengandung objek bebas.
Ketika kedua syarat tersebut dipenuhi maka slab baru di-assign ke dalam cache dengan memanggil fungsi kmem_cache_grow(). Fungsi ini memanggil fungsi kmem_getpages() untuk mendapatkan kumpulan page frame dari buddy sistem, kemudian memanggil fungsi kmem_cache_slabmgmt() untuk mendapatkan slab descriptor baru. Kemudian memanggil fungsi kmem_cache_init_objs() yang menggunakan metode constructor kepada semua objek yang dikandung pada slab baru. Kemudian memanggil fungsi kmem_slab_link_end() yang memasukkan slab descriptor pada akhir list slab pada cache (insert last).
Releasing a Slab from a Cache
Slab allocator tidak pernah membebaskan page frame dari slab yang kosong, namun slab dapat dibebaskan hanya jika :
Buddy system tidak mampu memenuhi request page frame.
Slab kosong, dan semua objek yang dikandungnya bebas.
Ketika kernel mencari page frame bebas tambahan, maka kernel memanggil fungsi try_to_free_pages(). Fungsi ini mungkin memanggil fungsi kmem_cache_reap() yang memilih cache yang sedikitnya mengandung satu slab kosong. Kemudian fungsi kmem_slab_unlink() menghapus slab dari list. Kemudian dihilangkan sama sekali dengan menggunakan fungsi kmem_slab_destroy().
Object Descriptor
Seperti halnya slab descriptor, objek descriptor juga dapat disimpan dalam dua cara, yaitu:
External object descriptor
Objek descriptor disimpan di luar slab.
Internal object descriptor
Objek descriptor disimpan di dalam slab, ditempatkan sesudah objek yang dideskripsikannya.
Slab allocator akan menggunakan cara pertama (External object descriptor) jika ukuran objek kelipatan dari 512, 1024, 2048, atau 4096 karena jika untuk ukuran tersebut objek disimpan di dalam slab maka kemungkinan adanya internal fragmentation semakin besar. Jika ukuran objek kurang dari 512 bytes atau bukan merupakan kelipatan dari 512, 1024, 2048, atau 4096, maka objek tersebut disimpan di dalam slab.
Struktur data dari objek descriptor :
typedef struct kmem_bufctl_s {
union {
struct kmem_bufctl_s * buf_nextp;
kmem_slab_t * buf_slabp;
void * buf_objp;
} u;
} kmem_bufctl_t;
#define buf_nextp u.buf_nextp
#define buf_slabp u.buf_slabp
#define buf_objp u.buf_objp
buf_nextp, menunjuk objek bebas selanjutnya pada slab jika objek bebas.
buf_objp, menunjuk pada objek jika objek sudah dialokasikan dan objek descriptornya disimpan di luar slab.
buf_slabp, menunjuk pada slab descriptor dari slab dimana objek disimpan jika objek yang dialokasikan dan objek descriptornya disimpan di dalam slab.
Noncontiguous Memory Area Management
Pemetaan Memory area ke Page Frame yang kontigu lebih banyak digunakan karena penggunaan cache yang lebih maksimal dan waktu akses memori yang lebih rendah. Namun jika permintaan akses akan memori area jarang, maka alokasi berdasarkan page frame yang non kontigu melalui linier address yang kontigu dapat digunakan.
Keuntungan dari skema tersebut adalah menghindari external fragmentation. Hal ini dikarenakan penggunaan list yang besarnya telah ditentukan sebelum akan dialokasikan. Sedangkan kerugiannya adalah kita harus banyak berurusan dengan Page Table Kernel. Ukuran dari noncontiguous memory area merupakan kelipatan dari 4096. Linux menggunakan noncontiguous memory area untuk mengalokasikan struktur data untuk swap area aktif, alokasi space utnuk modul atau alokasi buffer untuk perangkat I/O.
Linier Address untuk Memori Area Nonkontigu
Untuk mencari interval linier address kita dapat memulai dari PAGE_OFFSET. PAG_OFFSET merupakan gigabyte keempat dari total 4 GB linier address yang bisa digunakan. Kita tahu bahwa Kernel menggunakan bagian awal dari memory dimulai dari PAGE_OFFSET ini. Namun itu hanya sebagian kecil saja. Semua linier address setelah bagian tersebut dapat bebas digunakan untuk memetakan noncontiguous memory area. Antara memory area yang satu dengan yang lain dipisahkan oleh interval 4-8 KB ( noncontiguous ).
Gambar 4 : Linier Address Gigabyte keempat
Deskriptor Memori Area Nonkontigu
Noncontiguous memory area dideskripsikan dengan struktur data vm_struct :
struct vm_struct {
unsigned long flags;
void *addr;
unsigned long size;
struct vm_struct *next; };
Deskriptor ini memiliki next yang mendefinisikan area selanjutnya. Address dari first element disimpan di variabel vmlist. Sedangkan addr menyimpan linier address untuk memory cell area yang pertama dan size menyimpan ukuran + 4096.
Fungsi get_vm_area () digunakan untuk membuat deskriptor baru dari tipe vm_struct tadi. Parameternya adalah size yang menspesifikasikan ukuran dari memory area yang diinginkan.
Fungsi get_vm_area () pertama kali memanggil kmalloc () untuk memperoleh memory area dari deskriptor yang baru. Fungsi tersebut mencari range linier yang memungkinkan untuk dialokasi dengan ukuran size + 4096. Jika range tersebut ada, maka fungsi tersebut akan mengembalikan initial address dari noncontiguous memory area dan jika gagal akan mengembalikan NULL.
Alokasi Memori Area Nonkontigu
Fungsi vmalloc () digunakan untuk mengalokasikan sebuah noncontiguous memory area pada kernel. Parameter yang digunakan adalah size yang menyatakan ukuran. Jika fungsi ini berhasil maka akan mengembalikan initial linier address dari area yang baru atau mengembalikan NULL jika gagal.
Pertama kali fungsi vmalloc () akan didekatkan ke kelipatan dari 4096. Selain itu akan diperiksa apakah size tadi > 0 dan <= jumlah page frame yang tersedia. Jika syarat tersebut dipenuhi maka vmalloc () akan memanggil fungsi get_vm_area () yang menciptakan deskriptor dan mengembalikan linier address yang diassign ke memory area. Lalu vmalloc () akan memanggil vmalloc_area_ pages () untuk merequest noncontiguous page frame dan diterminasi dengan mengembalikan initial linier address dari noncontiguous memory area.
Fungsi vmalloc_area_ pages () menggunakan 2 parameter : address, sebagai initial linier address dari area dan size sebagai ukuran. Akhir dari linier address merupakan penjumlahan dari address dengan size.
Fungsi vmalloc_area_ pages () menggunakan makro pgd_offset_k untuk menurunkan entry di Page Global Direktory yang berhubungan dengan initial address dari area yang dialokasi. Lalu fungis vmalloc_area_pages () tersebut dalam setiap siklusnya memanggil pmd_alloc_kernel () untuk membuat Page Middle Directory untuk area yang baru lalu memanggil alloc_area_pmd () untuk mengalokasikan semua Page Table yang berhubungan dengan Page Middle Directory baru tadi. Selanjutnya set_pgdir () dipanggil untuk mengupdate entry yang berkorespondensi dengan Page Middle Directory yang baru di semua Page Global Directories yang ada. Siklus ini berlangsung hingga semua Page Table entries yang merujuk ke noncontiguous memory area baru berhasil diset.
Dalam alloc_area_pmd () dipanggil pte_alloc_kernel () yang mengalokasikan Page Table yang baru dan mengupdate entry yang berkorespondensi dalam Page Middle Directory. Selanjutnya alloc_area_pte () mengalokasikan semua page frame yang berkorespondensi dengan entry di Page Table.
Setiap page frame dialokasikan melalui fungsi __get_free_page () yang dipanggil dalam alloc_area_pte (). Alamat fisik dari page frame yang baru ditulis ke dalam Page Table dengan macro set_pte dan mk_pte.
Releasing Memori Area Nonkontigu
Untuk membebaskan noncontiguous memory area digunakan fungsi vfree (). Parameter yang digunakan adalah addr yang berisi initial linier address area yang akan dibebaskan.
Pertama kali vfree () akan mencari area deskriptor yang berasosiasi dengan area yang akan dibebaskan. Size dari deskriptor mendefinisikan ukuran dari area yang akan dibebaskan. Area itu sendiri dibebaskan dengan fungsi vmfree_area_pages () sedangkan deskriptornya dengan fungsi kfree ().
Fungsi vmfree_area_pages () menggunakan 2 parameter : initial linier address dan size area. Di dalamnya akan memanggil free_area_pmd () yang merupakan kebalikan aksi dari alloc_area_pmd () dan free_area_pte () yang merupakan kebalikan aksi dari alloc_area_pte ().
Tiap page frame yang dialokasikan ke noncontiguous memory area dibebaskan dengan fungsi free_page () dan entry yang berkorespondensi di Page Table diset 0 dengan makro pte_clear.
Read More..MEMORY ADDRESSING
MEMORY ADDRESSING
Dalam mengakses isi dari sel memori programmer biasanya mengacu pada alamat memori (memory addresses). Pada microprocessor Intel 80x86 memory addresses dibedakan menjadi tiga jenis address :
Logical Address
Terdapat pada instruksi bahasa mesin untuk menspesifikkan alamat dari sebuah operan atau instruksi. Setiap logical address terdiri dari sebuah segment dan sebuah offset (displacement) yang menyatakan jarak dari awal segment ke alamat aktual.
Linear Address
Merupakan sebuah 32-bit unsigned integer tunggal yang bisa digunakan untuk pengalamatan hingga 4 GB. Biasanya direpresentasikan dalam notasi heksadesimal.
Physical Address
Digunakan untuk pengalamatan sel memori, terdapat pada chip memori.
CPU control unit mengubah logical address ke linear address dengan menggunakan perangkat hardware yang disebut segmentation unit, dan kemudian circuit hardware kedua yang disebut paging unit mengubah linear address ke physical address.
Segmentation
Segmentation pada hardware
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.
Paging
Paging pada hardware
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.
Read More..Mencegah Deadlock
- Definisi Deadlock
sekumpulan proses yang terblok yang tiap proses tersebut memegang sumber daya dan menunggu untuk mendapatkan sumber daya yang dipegang oleh proses di dalam kumpulan tersebut.

3. Penyebab Deadlock / Syarat Terjadi Deadlock
- Mutual Exclusion :
- Hold and Wait
- Non-pre-emptive
- Circular Wait
- Tiap proses menyatakan kebutuhan maksimum tiap jenis sumber yg dibutuhkan
• Logikanya:
– Jika sistem berada pd safe state no deadlock
– Jika sistem berada pd unsafe state kemungkinan deadlock
– Pencegahan: sistem tidak masuk ke unsafe state
- Beri pengurutan linear terhadap resource pada semua proses
- Algoritma Bankir
Seek Pi, an element of P that can finish
If no Pi can be found then
End algorithm: state is unsafe
else
Remove Pi from P
Return resource of Pi to allocated pool
end if
end while
End algorithm: state is safe
Read More..
Saturday, July 23, 2011
32M-bit serial flash memory with dual and quad SPI
1. GAMBARAN UMUM
W25Q32BV (32M-bit) Flash memori serial yang menyediakan solusi penyimpanan untuk sistem dengan ruang penyimpanan, pin dan tegangan terbatas. Seri 25Q menawarkan fleksibilitas dan kinerja jauh melampaui Serial Perangkat flashdisk biasa. Tipe ini ideal untuk code shadowing ke RAM, mengeksekusi kode langsung dari Dual / Quad SPI (XIP) dan menyimpan suara, teks dan data. Perangkat beroperasi pada supply 2.7V sampai 3.6V DC dengan konsumsi arus rendah sekitar 4mA dan minimal 1μA. saat ini konsumsi Semua perangkat yang ditawarkan dalam space-saving packages.
Array W25Q32BV ini diatur dalam 16.384 halaman program dari 256-byte masing-masing. Sampai 256 byte dapat diprogram pada suatu waktu. Halaman program dapat dihapus dalam kelompok 16 (4KB menghapus sektor), kelompok 128 (32KB menghapus blok), kelompok 256 (64KB menghapus blok) atau seluruh chip (menghapus chip). W25Q32BV masing-masing memiliki 1.024 erasable sectors dan 64 erasable block. Sektor 4KB kecil memungkinkan adanya fleksibilitas dalam aplikasi yang memerlukan data dan penyimpanan parameter.
W25Q32BV mendukung standar Serial Peripheral Interface (SPI), dan kinerja tinggi Dual / Quad output serta Dual / Quad I / O SPI: Serial Jam, Chip Pilih, Data Serial I/O0 (DI), I/O1 (DO), I/O2 (/ WP), dan I/O3 (/ HOLD). Clock frekuensi SPI hingga 104MHz yang
Read More..
UAS sistem operasi
Soal NO. 2
a. 3.6 menit
penyelesaian :

Proses P1=5, Proses P1=3, Proses P3=4, Proses P4=2, Proses P4=4.
Jadi : rata-rata waktu turnaround
= 5+3+4+2+4 / 5
= 3.6 menit
b.
:-D admin lagi capek nulis ....... ^_^ jadi jawaban di publish insyaallah hari minggu malam ( kalau begadang ===>> publish hari senin siang jam 10.WIB ) thx ....
g ada yg pijitin soalnya ... :-D
NB: berhubung pulsa ud expired, tinggalkan pesan di halaman ini.... coz g bisa balas
sms / telp
Update jawaban ..... :-D
1. Penjadwalan Preemptive : Keputusan penjadwalan CPU dilakukan apabila proses
berpindah dari keadaan running ke ready atau proses berpindah dari waiting ke
ready.
Penjadwalan Nonpreempitive : Keputusan penjadwalan CPU dilakukan apabila
proses berpindah dari running ke waiting atau apabila proses berhenti.
3. a. Menggunakan Algoritma FCFS
Waktu tunggu untuk P1 = 0, P2 = 8, P3 = 12
Rata-rata waktu tunggu (turn around) = (0 + 8 + 12) / 3 = 6,6
b. Menggunakan Algoritma SJF non preemptive
Waktu tunggu untuk P1 = 0
P2 = 9 – 0,4 = 8,6
P3 = 8 – 1 = 7
Rata-rata waktu tunggu (turn around) = (0 + 8,6 + 7) / 3 = 5,2
c. Menggunakan Algoritma SJF preemptive / SRTF
Waktu tunggu untuk P1 = 5 – 0 = 5
P2 = 4,8 – 0,4 = 4,4
P3 = 1 – 1 = 0
Rata-rata waktu tunggu (turn around) = (5 + 4,4 + 0) / 3 = 3,13
d. Menggunakan Algoritma Round Robin (quantum time = 1)
Waktu tunggu untuk P1 = 8, P2 = 4, P3 = 2
Rata-rata waktu tunggu (turn around) = (8 + 4 + 2) / 3 = 4,6
4. a. Priority dan SJF
Algoritma SJF adalah Algoritma Priority untuk menyelesaikan suatu kasus khusus
b. Priority dan FCFS
Algoritma FCFS adalah Algoritma Priority yang memiliki prioritas sama.
c. Round Robin dan FCFS
Algoritma Round Robin adalah Algoritma FCFS yang bersifat preemptive dan
menggunakan time-sharing.
5. Race condition : suatu kondisi dimana dua atau lebih proses mengakses
shared memory/sumber daya pada saat yang bersamaan dan hasil akhir dari data
tersebut tergantung dari proses mana yang terakhir selesai dieksekusi sehingga
hasil akhirnya terkadang tidak sesuai dengan yang dikehendaki.
6. Critical section : dengan mendesain sebuah protokol di mana proses-proses
dapat menggunakannya secara bersama-sama.
- Mutual Exclusion.
Jika suatu proses sedang menjalankan critical section-nya, maka proses-proses
lain tidak dapat menjalankan critical section mereka. Dengan kata lain, tidak
ada dua proses yang berada di critical section pada saat yang bersamaan.
- Terjadi kemajuan (progress).
Jika tidak ada proses yang sedang menjalankan critical section-nya dan ada
proses-proses lain yang ingin masuk ke critical section, maka hanya proses-
proses yang yang sedang berada dalam entry section saja yang dapat
berkompetisi untuk mengerjakan critical section.
- Ada batas waktu tunggu (bounded waiting).
Jika seandainya ada proses yang sedang menjalankan critical section, maka
proses lain memiliki waktu tunggu yang ada batasnya untuk menjalankan critical
section -nya, sehingga dapat dipastikan bahwa proses tersebut dapat mengakses
critical section-nya (tidak mengalami starvation: proses seolah-olah
berhenti, menunggu request akses ke critical section diperbolehkan).
7.
#define BUFFER_SIZE 10
typedef struct {
. . .
} item;
item buffer[BUFFER_SIZE];
int in = 0;
int out = 0;
int counter = 0;
item nextProduced;
while (1) {
while (counter == BUFFER_SIZE)
; /* do nothing */
buffer[in] = nextProduced;
in = (in+1) % BUFFER_SIZE;
counter++;
8. Semaphore adalah lokasi di dalam memori yang nilainya dapat diuji dan di set
oleh lebih dari satu proses. Tes dan operasi yang dapat diset adalah, selama
masing-masing proses tekait, atomik atau uninterrupable; sekali dijalankan tidak
dapat dihentikan.
Hasil dari operasi tes dan set operasi merupakan penambahan nilai semaphore dan
set nilai, yang dapat bernilai positif maupun negatif. Hasil test dan set operasi
sebuah proses akan berhenti sampai nilai semaphore diubah oleh proses yang lain.
Semaphore biasanya digunakan untuk memonitor dan mengontrol ketersediaan
sumberdaya sistem, seperti pembagian segmen memori.
Operasi Down (P)
· operasi ini menurunkan nilai semaphore
· jika nilai semaphore menjadi non positif maka proses yang mengeksekusinya
diblocked
Operasi Up (V)
· Operasi ini menaikkan nilai semaphore
· jika satu proses atau lebih telah di blocked pada suatu semaphore tak dapat
menyelesaikan operasi Down, maka salah satu dipilih oleh sistem dan dibolehkan
menyelesaikan operasi Down-nya
· urutan proses yang dipilih tidak ditentukan oleh Dijkstra dapat dipilih secara
acak, FIFO dll sesuai kepentingan.
· operasi UP menaikkan nilai semaphore, memindahkan dari antrian dan menempatkan
proses ke antrian.
Operasi P dan V adalah sebagai berikut :
Wait(S) : while(S) <= 0 do no-op;
S:=S-1;
Signal(S) : S:=S+1;
Keterangan :
- Pada kondisi Wait(S) dimana S<=0,
maka modifikasi yang mungkin adalah S:=S-1;
- Operasi Wait dan Signal ini dijalankan secara individual.
9.
a. Source code implementasi Bounded-Buffer Problem (Masalah Produsen Konsumen).
Source code ini diprogram dengan menggunakan bahasa pemrograman Java.
Bounded buffer adalah tempat penampung data yang ukurannya terbatas,
contohnya pada proses produsen dan konsumen.
Beberapa masalah produsen-konsumen :
produsen menaruh data pada buffer. Jika buffer tersebut sudah terisi penuh, maka
produsen tidak melakukan apa-apa dan menunggu sampai konsumen mengosongkan
isi buffer dan konsumen mengambil data dari buffer. Jika buffer tersebut kosong,
maka konsumen tidak melakukan apa-apa dan menunggu sampai buffer tersebut diisi
oleh produsen.
b. Problem lain yang terkenal adalah readers-writer problem yang memodelkan
proses yang mengakses database. Sebagai contoh sebuah sistem pemesanan sebuah
perusahaan penerbangan, dimana banyak proses berkompetisi berharap untuk
membaca (read) dan menulis (write). Hal ini dapat diterima bahwa banyak proses
membaca database pada saat yang sama, tetapi jika suatu proses sedang
menulis database, tidak boleh ada proses lain yang mengakses database tersebut,
termasuk membaca database tersebut. Dalam solusi ini, pertama-tama pembaca
mengakses database kemudian melakukan DOWN pada semaphore db. Langkah
selanjutnya readers hanya menaikkkan nilai sebuah counter. Hasil dari pembaca
nilai counter diturunkan dan nilai terakhir dilakukan UP pada semaphore,
mengizinkan memblok writer. Misalkan selama sebuah reader menggunakan
database, reader lain terus berdatangan.
Karena ada dua reader pada saat bersamaan bukanlah sebuah masalah,
maka reader yang kedua diterima, reader yang ketiga juga dapat diterima jika
terus berdatangan reader-reader baru. Sekarang misalkan writer berdatangan
terus menerus. Writer tidak dapat diterima ke database karena writer hanya bisa
mengakses data ke database secara ekslusif, jadi writer ditangguhkan. Nanti
penambahan reader akan menunjukkan peningkatan. Selama paling tidak ada satu
reader yang aktif, reader berikutnya jika datang akan diterima.
Sebagai konsekuensi dari strategi ini, selama terdapat suplai reader yang terus-
menerus, mereka akan dilayani segera sesuai kedatanga mereka. Writer akan
ditunda sampai tidak ada reader lagi. Jika sebuah reader baru tiba, katakan,
setiap dua detik, dan masing-masing reader mendapatkan lima detik untuk
melakukan tugasnya, writer tudak akan pernah mendapatkan kesempatan. Untuk
mencegah situasi seperti itu, program dapat ditulis agak sedikit berbeda: Ketika
reader tiba dan writer menunggu, reader ditunda dibelakang writer yang justru
diterima dengan segera. Dengan cara ini, writer tidak harus menunggu reader yang
sedang aktif menyelesaikan pekerjaannya, tapi tidakperlu menunggu reader lain
yang datang berturut-turut setelah itu.
c. Sistem operasi merupakan suatu program yang bertindak sebagai interface
antara user dan sistem komputer. Sistem operasi ini harus mampu melakukan
pengontrolan penggunaan resource. Dalam proses perancangan sistem operasi,
terdapat suatu landasan umum yang disebut dengan kongkurensi.
10.
Sumber daya : Suatu nilai potensi yang dimiliki oleh suatu materi atau unsur
tertentu dalam kehidupan. Sumber daya tidak selalu bersifat fisik, tetapi juga
non-fisik.
Sumber daya ada yang dapat berubah, baik menjadi semakin besar maupun
hilang, dan ada pula sumber daya yang kekal (selalu tetap). Selain itu, dikenal
pula istilah sumber daya yang dapat pulih atau terbarukan (renewable resources)
dan sumber daya tak terbarukan (non-renewable-resources).
Ke dalam sumber daya dapat pulih termasuk tanaman dan hewan (sumber daya hayati).
11. Deadlock adalah suatu kondisi dimana dua proses atau lebih saling menunggu proses yang lain untuk melepaskan resource yang sedang dipakai. Karena beberapa proses itu saling menunggu, maka tidak terjadi kemajuan dalam kerja proses-proses tersebut. Deadlock adalah masalah yang biasa terjadi ketika banyak proses yang membagi sebuah resource yang hanya boleh dirubah oleh satu proses saja dalam satu waktu. Di kehidupan nyata, deadlock dapat digambarkan dalam gambar berikut.
Pada gambar diatas, deadlock dianalogikan sebagai dua antrian mobil yang akan menyeberangi jembatan. Dalam kasus diatas, antrian di sebelah kiri menunggu antrian kanan untuk mengosongkan jembatan (resource), begitu juga dengan antrian kanan. Akhirnya tidak terjadi kemajuan dalam kerja dua antrian tersebut. Misal ada proses A mempunyai resource X, proses B mempunyai resource Y. Kemudian kedua proses ini dijalankan bersama, proses A memerlukan resource Y dan proses B memerlukan resource X, tetapi kedua proses tidak akan memberikan resource yang dimiliki sebelum proses dirinya sendiri selesai dilakukan. Sehingga akan terjadi tunggu-menunggu.
12.
- Mutual Eksklusif: hanya ada satu proses yang boleh memakai sumber daya, dan proses lain yang ingin memakai sumber daya tersebut harus menunggu hingga sumber daya tadi dilepaskan atau tidak ada proses yang memakai sumber daya tersebut.
- Memegang dan menunggu: proses yang sedang memakai sumber daya boleh meminta sumber daya lagi maksudnya menunggu hingga benar-benar sumber daya yang diminta tidak dipakai oleh proses lain, hal ini bisa menyebabkan kelaparan sumber daya sebab bisa saja sebuah proses tidak mendapat sumber daya dalam waktu yang lama .
-Tidak ada Preemtion : sumber daya yang ada pada sebuah proses tidak boleh diambil begitu saja oleh proses lainnya. Untuk mendapatkan sumber daya tersebut, maka harus dilepaskan terlebih dahulu oleh proses yang memegangnya, selain itu seluruh proses menunggu dan mempersilahkan hanya proses yang memiliki sumber daya yang boleh berjalan
-Circular Wait : adanya kondisi seperti rantai, yaitu sebuah proses membutuhkan sumber daya yang dipegang proses berikutnya.
13.
- Mengabaikan masalah deadlock.
- Mendeteksi dan memperbaiki
Penghindaran yang terus menerus dan pengalokasian yang baik dengan menggunakan protokol untuk memastikan sistem tidak pernah memasuki keadaan deadlock .Yaitu dengan deadlock avoidance sistem untuk men- data informasi tambahan tentang proses mana yang akan meminta dan menggunakan sumber daya.
Pencegahan yang secara struktur bertentangan dengan 4 kondisi terjadinya deadlock dengan deadlock prevention sistem untuk memasti- kan bahwa salah satu kondisi yang penting tidak dapat menunggu.
14.
a). Isi matrik Need didefinisikan dengan Max – Allocation.
Need
A B C
P0 7 4 3
P1 1 2 2
P2 6 0 0
P3 0 1 1
P4 4 3 1
Sistem dalam keadaan state selamat dengan urutan < P1, P3, P4, P2, P0> yang memenuhi
kriteria algoritma safety.
Misalnya proses P1 meminta tambahan anggota tipe sumber daya A dan dua
anggota tipe sumber daya C sehingga Request1 = (1, 0, 2). Untuk menentukan apakah
permintaan dapat segera dipenuhi, pertama harus diperiksa apakah Request1 ≤ Available
((1, 0, 2) ≤ (3, 3, 2)) ternyata benar. Maka akan diperoleh state baru berikut :
Allocation Need Available
A B C A B C A B C
P0 0 1 0 7 4 3 2 3 0
P1 3 0 2 0 2 0
P2 3 0 1 6 0 0
P3 2 1 1 0 1 1
P4 0 0 2 4 3 1
Kemudian harus ditentukan apakah sistem berada dalam state selamat. Setelah
mengeksekusi algoritma safety ternyata urutan memenuhi criteria safety.
Setelah sistem berada pada state doatas, permintaan (3, 3, 0) oleh P4 tidak dapat
dipenuhi karena sumber daya tidak tersedia. Permintaan (0, 2, 0) oleh P1 juga tidak
dapat dipenuhi karena meskipun sumber daya tersedia, state hasil tak selamat.
b). State Selamat (Safe State)
Ketika suatu proses meminta sumber daya yang tersedia, sistem harus
menentukan apakah alokasi sumber daya pada proses mengakibatkan sistem dalam state
selamat. Sistem dikatakan dalam state selamat jika sistem dapat mengalokasikan
sumber daya untuk setiap proses secara berurutan dan menghindari deadlock. Urutan
proses selamat jika untuk setiap Pi, sumber daya yang masih diminta Pi
masih memenuhi sumber daya yang tersedia dan sumber daya yang dibawa oleh setiap
Pj, dimana j < i. Jika sumber daya yang diperlukan Pi tidak dapat segera disediakan, maka Pi dapat
menunggu sampai semua Pj selesai. Ketika Pj selesai, Pi dapan memperoleh sumber daya yang
diperlukan, mengeksekusi, mengembalikan sumber daya yang dialokasikan dan terminasi. Ketika Pi
selesai, Pi+1 dapat memperoleh sumber daya yang diperlukan dan seterusnya. Jika sistem dalam
state selamat maka tidak terjadi deadlock, sedangkan jika sistem dalam state tidak selamat (unsafe
state) maka kemungkinan terjadi deadlock Metode menghindari deadlock menjamin bahwa sistem
tidak pernah memasuki state tidak selamat.
Untuk menggambarkan sistem dapat berpindah dari state selamat ke state tidak selamat dapat dilihat ilustrasi berikut ini. Misalnya sistem mempunyai 12 magnetic tape
drive dan 3 proses P0, P1 dan P2. Proses P0 membutuhkan 10 tape drive, proses P1
membutuhkan 4 dan proses P2 membutuhkan 9 tape drive. Misalnya pada waktu t0,
proses P0 membawa 5 tape drive, P1 membawa 2 dan P2 membawa 2 tape drive
sehingga terdapat 3 tape drive yang tidak digunakan.
Kebutuhan Maksimum Kebutuhan Sekarang
P0 10 5
P1 4 2
P2 9 2
Pada waktu t0, sistem dalam state selamat. Urutan < P1, P0, P2> memenuhi kondisi
selamat karena P1 dapat segera dialokasikan semua tape drive dan kemudian
mengembalikan semua tape drive sehingga sistem tersedia 5 tape drive. Kemudian P0
dapat memperoleh semua tape drive dan mengembalikan semua sehingga sistem
tersedia 10 tape drive dan terakhir proses P2 dapat memperoleh semua tape drive dan
mengembalikan semua tape drive sehingga system tersedia 12 tape drive.
kemudian mengembalikan semua tape drive sehingga hanya tersedia 4 tape drive.
Karena proses P0 sudah dialokasikan 5 tape drive tetapi membutuhkan maksimum 10
tape drive sehingga meminta 5 tape drive lagi. Karena tidak tersedia, proses P0 harus
menunggu demikian juga P2 sehingga system menjadi deadlock
c). tidak
15.
• First-fit : alokasi lubang pertama yang cukup untuk proses.
• Best-fit : alokasi lubang terkecil yang cukup untuk proses. Strategi ini
memerlukan pencarian keseluruhan lubang, kecuali bila ukuran sudah terurut.
• Worst-fit : alokasi lubang terbesar yang cukup untuk proses.
Strategi ini memerlukan pencarian keseluruhan lubang, kecuali disimpan berdasarkan urutan ukuran.
Diantara algoritma diatas, first-fit dan best-fit lebih baik dibanidngkan worst-fit dalam hal menurunkan waktu dan utilitas penyimpan. Tetapi first-fit dan best-fit lebih baik dalam hal utilitas penyimpanan tetapi first-fit lebih cepat. .
16. Fragmentasi internal terjadi saat penyimpanan dialokasikan tanpa pernah ingin menggunakannya. [1] Ini adalah ruang-siakan. Sementara ini tampaknya bodoh, sering diterima dalam kembali untuk meningkatkan efisiensi atau kesederhanaan. Istilah "internal" merujuk pada kenyataan bahwa unusable penyimpanan yang dialokasikan di dalam wilayah namun tidak sedang digunakan.
Fragmentasi eksternal adalah fenomena yang gratis menjadi dibagi menjadi beberapa bagian kecil dari waktu ke waktu. [1] Ini adalah kelemahan dari beberapa algoritma alokasi penyimpanan, terjadi ketika aplikasi dan mengalokasikan deallocatec ( "frees") dari daerah penyimpanan berbagai ukuran, dan alokasi oleh algoritma merespon meninggalkan dialokasikan dan deallocated daerah interspersed. Hasilnya adalah bahwa, walaupun gratis tersedia, maka secara efektif unusable karena dibagi menjadi potongan potongan yang terlalu kecil untuk memenuhi kebutuhan dari aplikasi.
17. Ruang alamat logika dari suatu proses dibagi ke dalam 2 partisi :
• Partisi 1 terdiri dari 8K segmen yang pribadi (private) untuk proses tersebut.
• Partisi 2 terdiri dari 8K segmen yang digunakan bersama untuk semua proses
Informasi mengenai partisi pertama disimpan dalam local descriptor table
(LDT) sedangkan informasi mengenai partisi kedua disimpan dalam global
descriptor table (GDT). Setiap entry pada tabel LDT dan GDT terdiri dari 8 byte, dengan informasi detail tentang segmen tertentu termasuk lokasi basis dan panjang segmen.
Alamat logika adalah pasangan (selector, offset), dimana selector sebanyak 16 bit.
1 page = 64 byte.
Jadi page 0 akan dipetakan ke frame 8, maka
alamat logika 0 akan dipetakan ke alamat fisik (8 * 64) + 0 = 512.
Keadaan memori logika dapat digambarkan sebagai berikut :
Dari gambar tersebut dapat dilihat bahwa :
• alamat logika 50 berada di page 0, offset 50 sehingga
alamat fisiknya (8 * 64) + 50 = 562
• alamat logika 121 berada di page 1,offset 57 sehingga
alamat fisiknya (2 * 64) + 57 = 185
• alamat logika 380 berada di page 5,offset 60 sehingga alamat fisiknya
(1 * 64) + 60 = 124
Keterangan :
alamat offset diperoleh dari nilai absolut alamat logika yang ditentukan dikurangi dengan alamat logika awal dari page yang diketahui.
Contoh :
- jika alamat logika 380 berarti alamat offsetnya adalah absolut(380 – 320) = 60
18. Pada sistem segmentasi alamat logika pada kode instruksi program juga perlu ditranslasi pada saat dieksekusi. Misalnya sistem memori computer menggunakan alamat 16 bit sehingga maksimal kapasitas memori utama adalah 64 kbyte. Bit alamat logika dapat dipecah atas nomor segmen dan alamat offset. Misalnya, nomor segmen menggunakan 4 bit atas alamat logika, yang berarti terdapat maksimal 212=4 kbyte. Misalnya dalam program terdapat instruksi jump[4848].
19. Dari tabel segmen proses terlihat bahwa segmen 1 dialokasikan pada memori fisik pada alamat awal 8224 sehingga pada saat dieksekusi alamat 4848 akan ditranslasi menjadi 8224 + 752 = 8976.
20. Paging merupakan kemungkinan solusi untuk permasalahan fragmentasi eksternal dimana ruang alamat logika tidak berurutan; mengijinkan sebuah proses dialokasikan pada memori fisik yang terakhir tersedia. Memori fisik dibagi ke dalam blok-blok ukuran tetap yang disebut frame. Memori logika juga dibagi ke dalam blok- blok dg ukuran yang sama yang disebut page. Semua daftar frame yang bebas disimpan. Untuk menjalankan program dengan ukuran n page, perlu menemukan n frame bebas dan meletakkan program pada frame tersebut. Tabel page (page table) digunakan untuk menterjemahkan alamat logika ke alamat fisik.
21. 40ms
22. Waktu akses efektif = 0,75 _ (200 nanodetik) + 0,25 _ (400 nanodetik) = 250 nanodetik
23. Waktu akses memory = 200 nanosecond
Rata-rata waktu page-fault service time = 8 milliseconds
1 ms=106 ns
EAT = ((1 – p) x 200) + (p x (8 milliseconds))
= ((1 – p) x 200) + (p x 8,000,000)
= 200 + (p x 7,999,800)
Jika 1 dari 1.000 kali akses terjadi fault, maka EAT = 8.2 microseconds.
24.
a. LRU - 10
b. FIFO - 14
c. Optimal - 8
25.
array disimpan baris utama, yaitu, terlebih data halaman berisi A [1,1], A [1,2 ].... A [2.100] dan halaman kedua berisi A [3,1? ], A [3,2 ].... A [4.100] dan seterusnya.
a. String referensi halaman adalah
0, 1, 0, 2, 0, ..., 0, 49, 0, 1, 0, 2, 0, ..., 0, 49, ...
dan dengan demikian akan ada 5000 page fault.
b. String referensi halaman adalah
0, 1, 0, 2, 0, ..., 0, 49
dan dengan demikian akan ada 50 page fault.
26.
EAT = ( 0.8 x 1 μ s) + (0.18 x 2 μ s) + (0.02 x 20002 μ s)
= 0.8 + 0.36 + 400.04
= 401.2 μ s
27.
Teknik yg umum untuk implementasi tipe file adalah memasukkan tipe file sebagai bagian dari nama file. Nama file dibagi menjadi dua bagian yaitu nama dan extension (seperti pada MS-DOS) seperti pada Gambar 9-2. Setiap file mempunyai atribut pembuat berisi nama dari program yang membuatnya (seperti pada MS- Windows / Apple Macintosh). Atribut ini di-set oleh sistem operasi saat menggunakan system call create. Bila user membuka file tersebut dengan melakukan double-clicking mouse pada icon dari file tsb, program yang dibuat ditampilkan otomatis.
UNIX menggunakan magic number yang disimpan pada awal file untuk mengindikasikan tipe file berupa program executable, batch file (shell script), file postscript dan lain-lain. Tidak semua file mempunyai magic number, sehingga informasi tipe tidak dapat digambarkan. UNIX tidak menyimpan nama dari program pembuatnya. UNIX juga mengijinkan nama extension dari file tersembunyi, sehingga user dapat menentukan tipe file sendiri dan tidak tergantung pada sistem operasi.
28 Sequential Access: Adalah suatu cara pengaksesan record, yang didahului pengaksesan record-record didepannya.
seluruh recordyang ada.Contoh : Magnetic Disk.
29. Direktori dengan Struktur Tree (Tree- Structured Directory).
Dalam struktur ini, setiap pengguna dapat membuat subdirektori sendiri dan mengorganisasikan berkas-berkasnya. Dalam penggunaan normal, tiap pengguna memiliki apa yang disebut current directory. Current directory mengandung berkas-berkas yang baru-baru ini digunakan oleh pengguna.
Direktori dengan Struktur Graf Asiklik (Acyclic-graph Structured Directory)
Direktori dengan struktur tree melarang pembagian berkas/direktori. Oleh karena itu, struktur graf asiklik memperbolehkan direktori untuk berbagi berkas atau subdirektori. Jika ada berkas yang ingin diakses oleh dua pengguna atau lebih, maka struktur ini menyediakan fasilitas sharing.
30. Pada sistem UNIX, proteksi direktori ditangani sama dengan proteksi file ,
misalnya , diasosiasikan dengan setiap subdirektory menggunakan owner, group
dan universe (others) sebagai 3 bit RWX.
Informasi yang terdapat pada file dari kiri ke kanan terdiri dari proteksi file
atau direktori,
jumlah link ke file, nama pemilik, nama group, ukuran file dalam byte, tanggal
membuat, nama
file:
-rw-rw-r-- 1 pbg staff 31200 Sep 3 08:30 intro.ps
drwx------ 5 pbg staff 512 Jul 8 09:33 private/
drwxrwxr-x 2 pbg staff 512 Jul 8 09:35 doc/
drwxrwx--- 2 pbg student 512 Aug 3 14:13 student-proj/
-rw-r—-r-- 1 pbg staff 9423 Feb 24 1993 program.c
-rwxr-xr-x 1 pbg staff 20471 Feb 24 1993 program
drwx—-x--x 4 pbg faculty 512 Jul 31 10:31 lib/
drwx------ 3 pbg staff 1024 Aug 29 06:52 mail/
drwxrwxrwx 3 pbg staff 512 Jul 8 09:35 test/
31. Pada level terendah, I/O control berisi device driver dan interrupt handler
untuk mengirim informasi antara memori dan sistem disk. Basic file system
berisi perintah bagi device driver untuk membaca dan menulis blok fisik pada
disk. File organization module berisi modul untuk mengetahui blok logika pada
blok fisik. Logical file system menggunakan struktur direktori untuk memberikan
ke file organization module informasi tentang kebutuhan terakhir. Informasi
mengenai sebuah file disimpan pada struktur penyimpan yang disebut file control
block seperti Gambar 10-2.Gambar 10-3 mengilustrasikan pentingnya struktur
sistem file disediakan oleh sistem operasi. Pada saat membuka file (dengan
menjalankan perintah open) blok-blok dari struktur direktori disimpan pada
struktur direktori di memori dan mengubah file control block. Pada saat membaca
file (dengan menjalankan perintah read), indeks yang dibaca di cari lokasi blok
pada disk melalui tabel open file yang berada di memori.Virtual File Systems
(VFS) merupakan implementasi sistem file yang berorientasi obyek.
VFS memungkinkan antarmuka system call (API) yang sama digunakan untuk sistem
file yang berbeda. API adalah lebih sebagai antarmuka VFS dan bukan untuk tipe
sistem file tertentu.
32. Alokasi Berurutan (Contiguous Allocation)
Pada alokasi berurutan, setiap file menempati sekumpulan blok yang berurutan pada disk (Gambar
10-5). Model ini sangat sederhana karena hanya membutuhkan lokasi awal (block #) dan panjang
(jumlah blok). Akses pada blok disk dilakukan secara random dan memakan banyak ruang
(permasalahan dynamic storage-allocation). File yang disimpan secara berurutan tidak dapat
berkembang.
Beberapa sistem file yang baru (misalnya Veritas File System) menggunakan skema alokasi
berurutan yang dimodifikasi. File sistem Extent-based mengalokasikan blok pada disk secara
berkembang (extent). Extent adalah blok berurutan pada disk. Extent dialokasikan untuk
alokasi file. Sebuah file terdiri dari satu atau lebih extent.
Alokasi Berhubungan (Linked Allocation)
Pada alokasi berhubungan, setiap file adalah sebuah linked list dari blok-blok terpisah.
Pada setiap blok terdapat satu pointer yang menunjuk ke blok lain.
Alokasi berhubungan mempunyai bentuk yang sederhana, hanya memerlukan alamat awal.
Sistem manajemen ruang bebas pada alokasi berhubungan tidak memakan banyak ruang. Model ini
tidak menggunakan random access. Blok yang diakses adalah blok ke-Q pada rantai link dari blok
pada file. Perpindahan ke blok = R + 1. Contoh sistem file yang menggunakan alokasi berhubungan
adalah file-allocation table (FAT) yang digunakan MS-DOS dan OS/2.
Alokasi Berindeks (Indexed Allocation)
Pada alokasi berindeks, terdapat satu blok yang berisi pointer ke blok-blok file. Alokasi berindeks
berupa bentuk logika.
Pada alokasi berindeks, memerlukan tabel indeks yang membawa pointer ke blok-blok file
yang lain. Akses dilakukan secara random. Merupakan akses dinamis tanpa fragmentasi
eksternal, tetapi mempunyai blok indeks yang berlebih. Pemetaan dari logika ke fisik dalam file
ukuran maksimum 256K word dan ukuran blok 512 word hanya memerlukan 1 blok untuk tabel
indeks.Apabila pemetaan dari logika ke fisik dalam sebuah file dari ukuran tak hingga (ukuran blok
adalah 512 word) maka digunakan skema menghubungkan blok link dari tabel indeks (ukuran tak
terbatas). Untuk ukuran file maksimum 5123 digunakan skema two-level indeks. Pada skema
two-level indeks terdapat tabel indeks luar dan dalam. Indeks dipetakan ke tabel indeks luar
kemudian dipetakan ke tabel indeks dalam setelah itu mengakses blok file yang dimaksud.
33. Untuk memperbaiki sistem file dilakukan dengan memeriksa konsistensi dengan cara
membandingkan data pada struktur direktori dengan blok data pada disk dan mencoba
memperbaiki inkonsistensi. Selain itu juga dapat menggunakan program sistem untuk back up data
dari disk ke penyimpan lain (floppy disk, magnetic tape). Perbaikan akan Recover menghilangkan file
atau disk dengan restoring data dari backup.
34. Mounting Sistem Berkas
Seperti halnya sebuah berkas yang harus dibuka terlebih dahulu sebelum digunakan,sistem
berkas harus dimount terlebih dahulu sebelum sistem berkas tersebut siap untuk memproses dalam
sistem. Sistem operasi diberikan sebuah alamat mounting (mount point) yang berisi nama device yang
bersangkutan dan lokasi dari device tersebut.