Beberapa bagian dari RAM digunakan oleh kernel 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 performansi dari keseluruhan sistem tergantung pada seberapa efisien manajemen dynaimc memory. Manajemen memori yang akan dibahas berikut menggambarkan bagaimana kernel mengalokasikan memori untuk keperluannya. Macam teknik manajemen memori :

1. Physically contigous memory areas
a. Page Frame Management
b. Memory Area Management
2. 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 :
1. Kernel bisa langsung mengetahui memory allocation unit di mana page fault terjadi.
2. Ukuran 4KB merupakan kelipatan terkecil dari hampir seluruh ukuran 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, menspesifikasikan 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 memiliki 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 128 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.
a. 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.

b. 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 yang 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, jika 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

c. 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, 65536, 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.


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.

1. 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.

2. 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.

3. 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”.

4. 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.

5. 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.

sumber :
http://translate.google.co.id/translate?hl=id&sl=en&u=http://www.makelinux.net/ldd3/chp-15-sect-1.shtml&ei=ORXLS-bYDpO2rAfcl_2yBQ&sa=X&oi=translate&ct=result&resnum=6&ved=0CCQQ7gEwBQ&prev=/search%3Fq%3DMEMORY%2BMANAGEMENT%2BLINUX%26hl%3Did%26client%3Dfirefox-a%26hs%3D8cq%26rls%3Dorg.mozilla:id:official
Ada banyak alasan mengapa seseorang ingin tahu bagaimana membangun sebuah server situs. Anda mungkin memiliki bisnis sendiri dan ingin membuat website Anda sendiri tanpa orang lain untuk melakukannya untuk Anda. Lainnya mungkin akan ingin memasang sendiri web hosting usaha kecil. Apapun alasan Anda, membangun server website untuk penggunaan pribadi Anda sama sekali tidak mungkin bagi Anda untuk melakukan

Berikut adalah langkah-langkah tentang bagaimana membangun sebuah server website:.

Langkah 1:. Tentukan kesiapan server Anda
Ini berarti Anda harus memastikan bahwa Anda memiliki aplikasi yang tepat atau perangkat lunak yang akan memungkinkan komputer Anda untuk mengirimkan informasi melalui internet. Pastikan bahwa komputer server yang Anda gunakan memiliki Transmission Control Protocol / Internet Protocol (TCP / IP) yang memungkinkan semua fungsi klien dan server untuk bekerja dengan baik.

Langkah 2: Instal perangkat lunak server yang diperlukan
perangkat lunak server Anda adalah mitra dari sebuah Sistem Operasi komputer pribadi Anda.. Server FTP fungsi seperti upload tidak akan mungkin dengan perangkat lunak server Anda. Ada versi terdaftar dari perangkat lunak ini yang dapat Anda beli, atau Anda dapat men-download beberapa perangkat lunak gratis melalui internet.

Langkah 3: Pastikan alamat IP statis
Mungkin ada biaya tambahan ketika Anda mencoba untuk mendapatkan alamat IP statis dari Internet Service Provider (ISP).. Anda harus mendapatkan jenis alamat IP karena pengaturan default dari ISP Anda yang dinamis biasanya tidak benar-benar berguna jika Anda ingin membangun server Anda sendiri

Langkah 4:.. Pastikan Anda kemampuan ISP
Hal ini perlu bahwa Anda bertanya tentang kemampuan ISP Anda sebelum pengadaan sebuah alamat IP statis sehingga penyedia internet Anda akan tahu bahwa Anda menggunakan internet dan komputer Anda sebagai server web. Jika Anda tidak memiliki percakapan dengan mereka tentang layanan yang Anda berniat untuk memanfaatkan, Anda mungkin tidak dapat memastikan bahwa ISP Anda memang dapat memberikan kemampuan yang Anda butuhkan untuk menjadi server web.

Langkah 5:. Pilih nama untuk sistem anda
Anda dapat pergi ke www.godaddy.com, www.networksolutions.com atau ke situs registrasi nama untuk mendapatkan sebuah domain seperti ini sangat penting ketika Anda mencoba untuk membangun server web Anda sendiri. Kemudian, link ini nama domain ke alamat IP statis Anda sehingga Anda dapat mengarahkan pengguna ke situs Web Anda.

Langkah 6: Jika Anda sudah memiliki nama domain, Anda dapat melanjutkan sudah untuk menghubungkan ini dengan alamat IP statis server Anda
Untuk melakukan ini, Anda dapat menggunakan. alat penyedia domain itu untuk menciptakan hubungan antara alamat IP statis Anda dan nama domain yang Anda telah terdaftar

Langkah 7:.. Sekarang Anda siap untuk mengaktifkan server web Anda
Sekarang Anda dapat mulai melayani file dan menawarkan layanan lain untuk klien Anda
Keinginan untuk membuat hosting tanpa harus menyewa host?.
Kita melakukan dengan menggunkan infrastruktur yang telah ada.
Kebutuhan infrastructur :
1. satu buah PC dengan OS XP
2. Modem ADSL dengan koneksi Speedy Unlimited
3. XAMPP sebagai Localhost
Dengan Asumsi kebutuhan infrastruktur diatas sudah terpasang dan koneksi speedy sudah jalan normal kita dapat membuat webhost sendiri dengan bantuan XAMPP.
Sekarang kita mulai memodifikasi konfigurasi modem untuk menjadikan pc yang terhubung dengan adsl kita sebagai server yg meng-host kebutuhan seperti yang saya sebut diatas (www, ftp, telnet, dan lain-lain).

1. login lah ke Modem ADSL Speedy anda
2. ubahlah koneksi speedy di modem, yang awalnya PPPoE/PPPoA (dengan user&password), Menjadi Bridge Mode (tanpa user & password)
3. Simpan Konfigurasi Modem Anda
sekarang untuk bisa mendapatkan ip dynamic dari speedy, kita beralih ke PC yang terkoneksi dengan Speedy langsung atau yang terhubung melalui hub.
4. bukalah Network Connection atau dengan meng-klik Start – Settings – Control Panel – Network Connections
5. Kemudian Buatlah Koneksi PPP dari Windows Anda untuk mendapatkan ip dynamic dari speedy dengan mengklik Create a new connections dengan username dan password Speedy
6. Kemudian akan muncul Kotak isian Username & Password, jika anda telah mengikuti langkah2 diatas dengan benar, maka kotak yang muncul akan sudah terisi untuk kolom username & password nya, Sekarang untuk melakukan Koneksi, tekan CONNECT
7.  Bila koneksi Speedy Anda Akan muncul 2 indikator seperti gambar dibawah ini, dan bila di ipconfig via DOS, PC Anda Mempunyai 2 IP Address, yaitu IP Local (private ip) dan IP dari Speedy (public IP)
Dari Percobaan diatas, PC anda sekarang sudah bisa di jadikan Server yang bisa dikenali dunia secara langsung, dalam artian bisa meng-host banyak kebutuhan diantaranya www, ftp, email, dan lain-lain, karena peran modem diatas hanyalah sebagai Bridging (tidak memiliki IP dan sebagai penjembatan koneksi internet speedy Anda)

Memperoleh dinamic DNS melalui DynDNS
DynDNS ( Dynamic DNS) -  www.dyndns.com Adalah penyedia DNS untuk dynamic dan static IP serta banyak Sub-Domain yang bisa di gunakan secara bebas dan GRATIS, dalam artikel ini kita akan membuat satu sub domain ‘anda.subdomain.xxx’ dengan puluhan pilihan subdomain yang sudah tersedia di dyndns.com serta updating secara berkala supaya domain selalu mengenali ip speedy anda yang selalu berganti karena bersifat dinamis, serta software pendukung nya

Syarat dan Caranya :
1. internet anda harus udah tersambung dengan koneksi speedy
2. buka url ini di browser anda : www.dyndns.com
3. atau langsung aja buat account baru di : https://www.dyndns.com/account/create.html
4. lakukan konfirmasi melalui email Anda tadi, dan klik url yang ada didalam nya untuk mengaktifkan account anda.
5. bila sudah aktivasi, account anda akan langsung aktif
6. lakukan login ke dydns dengan user+password anda tadi
7. klik pada My Services yang terletak pada pojok atas kanan
8. pilih lah menu Add Host Services (gb. lingkar 1)
9. kemudian klik Add Dynamic DNS Host (gb. lingkar 2)
Cara cepat untuk mem by-pass nomer 7-9 dengan meng klik / copy paste di browser: https://www.dyndns.com/account/services/hosts/dyndns/add.html
Contoh :
- misal pada hostname anda isian : hostku
- Kemudian dengan pilihan domain : blogdns.net
- Settingan yg lain ?  default (tanpa ada perubahan)
- Kemudian klik ?  Add Host
maka alamat url domain untuk speedy anda adalah :
NOTE:
*
Sub-Domain yang anda buat bisa menjadi sub-domain anda selamanya
*
Sub-domain yang anda buat tadi ( http://helmstandart.homeip.net/ ) tidak bisa mengikuti perubahan ip pada speedy anda kecuali anda mengikuti tahap terakhir yang akan saya jelaskan di bawah ini, yang akan secara otomatis mengupdate ip dynamic anda dengan sub-domain di dyndns
Proses Updating DNS pada DynDNS.com
Updating DNS pada DynDNS ini sangat diperlukan, mengingat ip Speedy Anda adalah Dynamic IP ( tidak memiliki IP tetap )
Agar DynDNS selalu mengerti perubahan IP speedy anda, anda perlu untuk meng-update ya secara berkala di web nya dyndns, terutama saat modem baru di nyalakan, atau faktor lain yg menyebabkan ip berubah
Untuk memudahkan proses Updating dan update secara OTOMATIS, DynDNS telah menyediakan Software pendukung nya yang disediakan secara Free, yang berfungsi untuk peng-updatan secara otomatis sub-domain dengan ip dynamic speedy Anda.
ikuti langkah-langkah dibawah ini dan download file updater :
2.extract lah file tersebut
3.install file tersebut
4. buat groups
5.isikan username dan password speedy anda disitu, atau klik tombol detect untuk detect dialer account yang sudah anda buat tadi
6.kemudian Klik OK sampe aplikasi tertutup, tapi pastikan icon try dyndns masih ada, tunggu sebentar sekitar 5-10 detik, untuk dyndns  melakukan connecting secara otomatis
masukkan sub-domain yang sudah anda buat tadi (helmstandart.homeip.net), dengan pilihan system dyndns

indikator
centang hijau Anda berhasil
Centang kuning proses update
Centang merah anda gagal
Distro DSL yang digunakan DSL 0.84, menu dan langkah-langkah instalasi bisa berbeda di versi yang lain.

Persiapan Instalasi

  1. Masukkan CD DSL dan boot dari CD.
  2. pada waktu ada tulisan "boot :" tulis "dsl 2" dimana maksud dari ini adalah supaya booting mode text.
  3. Sampai ke console anda partisi harddisk dengan perintah "fdisk /dev/hda", 
  4. Buat partisi minimal 3GB buat system, 2xRAM buat swap.
  5. Kalau sudah di partisi maka format partisi swap dengan perintah "mkswap /dev/hda?"

Mulai Instalasi

  1. Kalau sudah tulis "dsl-hdinstall"
  2. Ketika ada tulisan :
    Enter the target partition. (EXAMPLE: hda2):

    Maka tulis lokasi dari partisi system dsl yang anda buat, kalau di partisi pertama maka nama devicenya /dev/hda1 tapi di sini tulis "hda1" saja dan enter
  3. Ketika ada tulisan :
    "Do you wish to use the Standard or Enhanced install (s/e)?"

    Keterangan :
    1. Kalau anda menginstall dengan "Standard install" maka program akan mengekstrak dari live CD yang anda punyai sehingga besar dari system dsl di harddisk masih tetap kecil.
    2. Kalau anda menginstall dengan "Enhanced install" maka yang diinstall adalah sama dengan "Standard install" plus program akan menambah binary dan library yang di ambil dari internet. Untuk itu dibutuhkan sambungan internet.
    Sebaiknya anda install yang versi standard, tulis "s".
  4. Ketika ada tulisan :
    Do you wish to install with multi-user login (y/...)?

    Keterangan :
    Multi user login memungkinkan lebih dari satu user menggunakan komputer tersebut dengan folder home yang berbeda. Pilih "y".
  5. Ketika ada tulisan :
    Last change to exit before destroying any data on /dev/hda1!! Continue (y/...)?

    Keterangan :
    Ini adalah peringatan terakhir sebelum anda menginstall ke harddisk dan data pada partisi tersebut akan di rusak. Pilih "y".
  6. Ketika ada tulisan :
    Do you want to run mkliloboot now? (y/...):

    Keterangan :
    mkliloboot adalah program yang digunakan dsl untuk menginstall boot loader ke dalam MBR komputer anda. Pilih "y".
  7. Ketika ada tulisan :
    Reboot now? (y/...):

    Keterangan :
    DSL meminta reboot komputer. Pilih "y".

Pasca Instalasi

  1. Setelah reboot DSL akan otomatis booting dengan boot loader lilo. Jangan lupa mengeluarkan CD DSL anda.
  2. Ketika ada tulisan :
    Enter new password for root:

    Keterangan :
    DSL meminta anda mengubah password untuk user root. Tulis password untuk root. DSL akan meminta anda untuk memasukkan password sekali lagi.
  3. Ketika ada tulisan :
    Enter new password for user dsl:

    Keterangan :
    DSL secara default akan membuat user bernama dsl dan meminta anda memasukan password untuk user dsl. Tulis password untuk user dsl.
  4. Ketika ada tulisan :
    box login :

    Keterangan :
    Ini adalah permintaan login dari DSL. Sekarang anda login saja dengan user dsl. 
  5. Ketika login maka anda akan mendapati layar menjadi biru dan terdapat window dengan judul "DSL X Setup" hal ini adalah pengaturan grafis pada DSL. Anda akan mendapati dua pilihan, yaitu "Xvesa" dan "Xfbdev". dimana Xvesa akan memberi konfigurasi yang hampir didukung oleh semua kartu grafis dan lebih ringan dan Xfbdev dia akan melakukan frame bufer pada saat boot sehingga lebih menarik tetapi lebih berat. Sebaiknya anda pilih Xvesa. 
  6. Muncul tulisan "USB Mouse", kalau anda menggunakan mouse USB pilih "Yes", kalau tidak pilih "No".
  7. "IMPS/2 mouse", kalau anda menggunakan mouse PS/2 pilih "Yes", kalau tidak pilih "No".
  8. "Choose your prefered screen resolution.", DSL meminta anda memilih resolusi dari layar komputer anda. Penulis sarankan gunakan resolusi yang kecil lebih dahulu.
  9. "Choose your preferred color depth.", DSL meminta anda memilih kedalaman warna dari layar komputer anda. Penulis sarankan gunakan kedalaman yang kecil lebih dahulu.
  10. "Choose your own dpi? If you have no idea, it is best to skip this.", DSL meminta dpi -- dot per inch dari layar komputer anda, tapi disarankan anda melewati pilihan ini jadi pilih "No".
  11. Maka DSL siap digunakan.
  1. User tidak bisa login
    Penyebab :
    • Space / atau /home kepenuhan.
      Pengecekan dengan menggunakan pengaksesan lewat text mode (Login dari Ctrl+Alt+F1) bila tidak bisa restartlah komputer dan masuk ke mode recovery Ubuntu dari boot loader dan masuklah ke command prompt dengan memilih pilihan root. Kemudian jalankan perintah :
      $ df
      Bila / atau /home kepenuhan (Used Percent 100%) maka hapuslah file-file yang tidak penting.
    • Direktori home tidak ada atau tidak bisa diakses
      Maka akan muncul peringatan ketika login. Home direktori user anda terdaftar sebagai /home/nama_user tetapi tidak ada atau tidak bisa diakses.
      Cara mengatasinya buatlah direktori home tersebut (bila belum ada) dan ubah permission untuk home tersebut dengan menggunakan user administrator. Dengan asumsi anda telah login dari user administrator dan nama user "adi" dengan home direktori di "/home/adi" jalankan perintah :
      $ sudo mkdir /home/adi
      $ sudo chown adi.adi /home/adi
      Kemudian loginlah sebagai user adi.
    • File /etc/passwd, /etc/shadow, /etc/group atau /etc/gshadow hilang atau rusak.
      Biasanya disebabkan kecerobohan dengan tanpa sengaja menghapus file-fiel tersebut.
      solusinya file-file ini memiliki backup sesuai dengan nama file-file tersebut ditambah dengan karakter "-". Seperti /etc/passwd-, /etc/group-, /etc/shadow-, dan /etc/gshadow-. Anda tinggal mengcopy ulang ke file aslinya. Caranya dengan masuk sebagai Live CD dan mount Linux anda dan copykan ulang file-file tersebut. Sebagai asumsi partisi Linux anda /dev/sda5 dan file yang terhapus adalah /etc/passwd, perintahnya adalah :
      $ sudo mount /dev/sda5 /mnt
      $ sudo cp /mnt/etc/passwd- /mnt/etc/passwd
    • Lupa password
      Bila user biasa yang melupakan passwordnya maka anda bisa ganti password dari user admin. Sedangkan bila password user yang dilupa adalah user admin maka anda harus masuk ke mode recovery Ubuntu dan ganti password user administrator. Dengan asumsi nama user "budi" Maka caranya :
      $ sudo passwd budi
       
  2. Tidak bisa masuk ke dalam sistem Linux
    • Konfigurasi dari boot loader yang salah
      Terjadi pesan error atau file not found ketika booting. Anda bisa edit file /boot/grub/menu.lst untuk pembetulan.
    • Selalu restart diduga terjadi kerusakan file system
      Apabila terjadi error pada file system anda bisa gunakan program pembetulan file system dengan "fsck". Untuk menggunakannya jalankan Linux Live CD dengan asumsi sistem Linux anda /dev/sda5 jalankan perintah :
      $ sudo fsck /dev/sda5
      Tetapi terkadang hal ini disebabkan karena pengecekan harddisk yang salah mengira terjadi kerusakan harddisk.
      Hal ini dapat diatasi dengan menonaktifkan pengecekan harddisk ketika komputer booting dengan mengedit file /etc/fstab. Untuk menonaktifkan anda bisa memberikan nilai 0 pada pengaturan fsck di /etc/fstab. Contoh :
      konfigurasi awal :
      UUID=6119758d-b0f9-4684-905b-51a370314658 / ext3 relatime,errors=remount-ro 0 1
      Menjadi :
      UUID=6119758d-b0f9-4684-905b-51a370314658 / ext3 relatime,errors=remount-ro 0 0
    • Kerusakan boot loader

  3. Masalah hardware
    • Driver Printer tidak ada
      Carilah driver di situs openprinting.org
    • Sound tidak aktif
      Terkadang sound tidak langsung aktif ketika anda menjalankan Ubuntu anda. Untuk mengatasinya anda bisa menggunakan perintah "alsamixer" untuk membesarkan volume sound.
    • Graphic Card tidak aktif
      Hal ini bisa disebabkan komputer anda tidak didukung drivernya. Untuk mengatasi masuk dengan mode recovery Ubuntu dan pilih root. Jalankan perintah berikut :
      # X -configure
      # X -config /root/xorg.conf.new
      # cp /root/xorg.conf.new /etc/X11/xorg.conf
      # exit
      Ketika exit pilih normal untuk booting secara normal. 
    •  
  4. Masalah Permission
    Untuk menjalankan program console dengan hak akses administrator awali perintah dengan "sudo", contoh :
    $ sudo /etc/init.d/networking restart
    Untuk menjalankan program grafis dengan hak akses administrator awali perintah dengan "gksu", contoh :
    $ gksu nautilus
     
  5. Referensi
    Apabila anda mendapatkan masalah yang berhubungan dengan Linux anda dapat menggunakan website berikut :
NFS adalah service jaringan yang memungkinkan untuk memount folder di komputer lain seakan-akan ada di dalam komputer itu sendiri. Selain NFS terdapat jenis file system yang melakukan hal yang sama seperti samba, andrew File System (oleh IBM), dan Coda File System.

Dalam menggunakan NFS anda harus mengikuti beberapa aturan umum :
  1. Hanya meng-export direktori dibawah direktori /.
  2. Jangan meng-export sebuah subdirektori dari direktori yang telah di-export. Kecuali subdirektori berada pada partisi yang berbeda. Begitu juga kebalikannya jangan meng-export parent direktori dari direktori yang telah di-export.
  3. Hanya meng-export direktori yang berada pada komputer anda sendiri.
Dalam melakukan prosesnya NFS memanfaatkan service RPC (Remote Procedure Call) agar dapat mengakses komputer server atau client oleh karena itu dalam menggunakan NFS perlu dijalankan beberapa service berikut :
  • rpcbind (portmap untuk Linux terdahulu), adalah service utama yang digunakan oleh service-service yang lain, rpcbind mengatur koneksi untuk aplikasi yang menggunakan RPC. Service ini perlu dijalankan pada client dan server.
  • nfs, digunakan untuk menyediakan fasilitas share. Service ini hanya perlu dijalankan pada server.
  • nfslock, digunakan untuk memperbolehkan client NFS untuk mengunci file yang ada di server dengan menggunakan proses RPC. Service ini perlu dijalankan baik di client maupun server.
  • netfs, digunakan agar NFS client dapat me-mount NFS filesytem di server. Service ini hanya perlu dijalankan di client.
Untuk mengaktifkan service-service di atas digunakan perintah :

# /etc/init.d/rpcbind start
# /etc/init.d/nfs start
# /etc/init.d/nfslock start
# /etc/init.d/netfs start
 
Untuk melakukan pengecekan apakah service NFS sudah aktif anda bisa menggunakan :

# rpcinfo -p localhost
 
Hasilnya harus ada service "nfs" yang aktif :

 program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100011    1   udp    653  rquotad
    100011    2   udp    653  rquotad
    100011    1   tcp    656  rquotad
    100011    2   tcp    656  rquotad
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100021    1   udp  37292  nlockmgr
    100021    3   udp  37292  nlockmgr

Konfigurasi Server

Untuk melakukan share dengan NFS, maka anda harus memiliki direktori yang akan dishare. Kemudian konfigurasi share diatur pada /etc/exports.
Pengaturan share pada /etc/exports meliputi :
  1. Direktori yang ingin di share.
  2. Komputer, grup NIS, hostname, nama domain, atau subnet yang diperbolehkan mengakses direktori tersebut.
  3. Opsi, seperti ro, rw atau beberapa opsi lain.
Contoh pengaturan share :

# vim /etc/exports
 
Isi dengan :

# [direktori]   [client]([opsi])

/var/data *(ro)
## /var/data dapat diakses oleh client dari IP berapa
## saja.
## ro --> share hanya dapat dibaca saja

/var/private *.mydomain.com(rw,async)
## /var/private dapat diakses oleh client dari 
## sub-sub domain mydomain.com
## rw --> share dapat ditulis 
## async --> Balasan dari permintaan penulisan file akan 
##           diberitahukan sebelum dilakukan penulisan
##           ke harddisk. 
## Keterangan : Async tidak akan memberitahukan apabila
## penulisan ke harddisk error. 

/var/mydata 192.168.1.0/24(rw,sync,no_root_squash)
## /var/mydata dapat diakses oleh komputer di jaringan 
## 192.168.1.0
## sync --> Balasan dari permintaan penulisan file akan 
##          diberitahukan setelah penulisan ke harddisk 
##          selesai.
## no_root_squash --> Memperbolehkan hak user root di 
##                    client digunakan untuk mengakses 
##                    file di server.
## Keterangan :
## Secara default nfs menggunakan akan menggunakan opsi
## root_squash dimana hak akses user root di client akan
## diubah menjadi uid dan gid anonymous.

/var/database 192.168.1.100/32(rw,sync,all_squash,secure)
## /var/database hanya dapat diakses oleh satu komputer 
## dengan IP address 192.168.1.100.
## all_squash --> Mengubah semua hak akses user client 
##                yang mengakses diubah menjadi uid dan 
##                gid anonymous 
## secure --> share hanya dapat diakses oleh port-port
##            jaringan di bawah 1024. Ini adalah opsi 
##            default dari NFS
## Keterangan :
## Secara default NFS akan menggunakan hak akses user client
## ketika mengakses file-file di server. Sehingga apabila 
## user-user di client tidak ada di server maka user tidak bisa
## mengakses file di server. Anda bisa menyamakan user-user yang
## ada di client dengan server atau bisa menggunakan opsi
## all_squash.
 
Refresh konfigurasi share yang ada di share. Gunakan perintah :

# exportfs -ra

Konfigurasi Client

Untuk mengakses share yang ada di server anda bisa menggunakan perintah mount. Dalam hal ini device akan diganti letak direktori yang dishare di server. Untuk file system yang digunakan adalah "nfs". Cara me-mount-nya adalah :

# mount -t nfs [ip_server]:[dir_share] [mount_point]
 
contoh :

# mount -t nfs 192.168.1.123:/var/data /media/data
 
Apabila anda ingin direktori yang dishare tersebut di mount secara otomatis ketika anda booting maka anda bisa mengatur mount di /etc/fstab. Cara mengkonfigurasikannya :

# vim /etc/fstab
Tambahkan :
# [ip_server]:[dir_share]   [mount_point]   nfs defaults 0 0 
192.168.1.123:/var/data   /media/data   nfs defaults 0 0
-- Back to Top --

Samba

Samba adalah service yang digunakan di Linux untuk berbagi data dengan komputer yang lain terutama untuk komputer yang menggunakan Microsoft Windows. Samba menggunakan protokol yang sama dengan protokol sharing data di Microsot Windows, yaitu CIFS (Common Internet File System).
Selain digunakan untuk berbagi data samba dapat digunakan untuk sharing printer atau digunakan sebagai PDC (Primary Domain Controller). Walaupun dikhusukan untuk berinteraksi dengan komputer Windows, tetapi samba dapat digunakan untuk sharing data antar komputer Linux juga.
Samba menggunakan dua service, yaitu :
  • smbd, menyediakan sharing file dan printer ke jaringan klien SMB (Server Message Block) atau jaringan windows.
  • nmbd, menyediakan layanan layanan penamaan NetBIOS dan agar komputer anda dapat di browse dari komputer lain.
Selain service samba dalam mengakses share di komputer lain membutuhkan program samba client, program ini pada umumnya telah terinstall pada Linux anda.

Konfigurasi Sharing tanpa password di Samba

Untuk mempermudah akses share ke server, anda bisa membuat share di samba tanpa menggunakan password. Hal ini dapat dilakukan dengan menggunakan konfigurasi security "share". Dengan cara ini client tidak ditanyakan user dan password.
Contoh Kasus Misalkan anda hendak menshare direktori /var/data dan /var/share. Dimana keduanya dapat diakses tanpa autentifikasi, tetapi /var/data hanya bisa dibaca sedangkan /var/share selain bisa dibaca dapat ditulis juga.

Penyelesaian :
  1. Bila direktori tersebut di atas belum ada, maka anda harus membuat direktori tersebut. Setelah itu anda berikan permission yang tepat untuk direktori tersebut. Sebagai catatan apabila anda menggunakan share tanpa password maka data akan memiliki kepemilikan user "nobody" dan group "nogroup". Oleh karena itu apabila direktori anda ingin bisa ditulis maka pastikan user "nobody" dan group "nogroup" diberikan akses menulis. Caranya :
    # mkdir /var/data
    # mkdir /var/share
    # chmod 777 /var/share
     
  2. Kemudian anda konfigurasikan samba anda di file /etc/samba/smb.conf . Caranya :
    # vi /etc/samba/smb.conf
    Diubah pada : 
  3. [global] 
           workgroup =  MYGROUP
           netbios name = MYPC
           security = share
           log file = /var/log/samba/%m.log
           max log size = 50
    [mydata] 
           comment = Dataku 
           path = /var/data 
           read only = yes 
           public = yes 
           browseable = yes 
    [myshare] 
           comment = Share-anku 
           path = /var/share 
           read only = no 
           public = yes 
           browseable = yes 
     
    Keterangan :
    • [global] --> Berisi konfigurasi umum dari samba
      [mydata] dan [myshare] -->> Nama share dari direktori anda
    • workgroup --> nama workgroup dari jaringan anda.
      netbios name --> nama komputer anda (My Computer Name), bila tidak dikonfigurasikan maka akan digunakan hostname anda.
      security --> pengaturan security yang memperbolehkan data dapat diakses tanpa menggunakan password.
    • comment --> deskripsi dari share data anda
      path --> direktori yang anda share.
      read only --> apabila "yes" maka hanya bisa dibaca saja dan bila "no" berarti share dapat ditulis juga.
      public --> apabila "yes" maka share anda dapat digunakan oleh komputer di jaringan.
      browseable --> apabila "yes" maka share anda dapat di-browse/dicari dari komputer di jaringan.
Bagaimana cara mematikan/membunuh proses yang berjalan di linux. Disini Anda akan berkenalan dengan perintah kill, killall dan sedikit shell scripting untuk mengambil PID dari proses yang sedang berjalan, dan kemudian membunuh proses tersebut.

Misal, ada kasus proses apache2 masih berjalan. Padahal kita sudah menjalankan skrip untuk mematikan service apache2, /etc/init.d/apache2 stop berkali-kali. Dan ini menyebabkan aplikasi web yang
Anda jalankan bermasalah.

Solusi utk masalah ini adalah, entah kita restart servernya (pakai perintah reboot), atau cara yang tanpa restart server keseluruhan. Kita matikan/bunuh semua proses apache2 yang tersisa dengan perintah kill.
Periksa proses apache2 yang masih tersisa,

ps ax |grep apache2
 
Hasilnya, misal seperti pada contoh di bawah ini.

21496 ?        S      0:01 /usr/sbin/apache2 -k start
21500 ?        S      0:00 /usr/sbin/apache2 -k start
21501 ?        S      0:00 /usr/sbin/apache2 -k start
22643 ?        S      0:01 /usr/sbin/apache2 -k start
23737 ?        S      0:00 /usr/sbin/apache2 -k start
24707 ?        S      0:00 /usr/sbin/apache2 -k start
25853 ?        S      0:00 /usr/sbin/apache2 -k start
26836 ?        S      0:00 /usr/sbin/apache2 -k start
27765 ?        S      0:00 /usr/sbin/apache2 -k start

kill -9 PID

Perhatikan baris di atas, kolom pertama adalah PID dari proses yang sedang berjalan. Untuk mematikan proses apache2 di atas, salah satu caranya dengan perintah kill -9 PID

sudo kill -9 21496
sudo kill -9 21500
sudo kill -9 21501
sudo kill -9 22463
dst (untuk semua PID yang ada dikolom pertama
 
Atau pakai kalau mau satu baris

sudo kill -9 21496 21500 21501 22643 (dst utk semua PID yang ada di kolom pertama)

killall NAMA_PROSES

Cara lain yang bisa dilakukan, adalah dengan perintah killall, diikuti dengan nama proses yang mau dimatikan.

sudo killall apache2
 
Tapi cara ini tidak selamanya berhasil. Jika gagal, cobalah cara yang pertama.

Menggunakan Bantuan BASH

Ini adalah gabungan cara pertama, dan bantuan sedikit pemograman di shell bash.

for p in `ps ax |grep apache2| cut -d " " f 1`; do kill -9 $p; done
 
Perhatikan perintah di atas, cut -d " " f 1 akan memprint semua PID yang ada dikolom pertama, dan selanjutnya akan kita gunakan untuk mematikan proses apache2.

Cara lain, serupa dengan cut, tapi menggunakan awk.

for p in `ps ax |grep apache2| awk '{print $1}'`; do kill -9 $p; done
3D Home Architect

3D Studio Max

ACDSee

Adobe Acrobat Reader

Adobe Audition

Adobe Illustrator

Adobe Lightroom

Adobe PageMaker

Adobe Photoshop

Ant Movie Catalog

AOL Instant Messenger (AIM)

APC PowerChute

Collectorz

DAMN NFO Viewer

Dreamweaver

DVDShrink

Everest
Evernote
Finale
FL Studio

Fontographer
foobar2000
Forte Agent

Fraps
FreeRIP
FruityLoops
Google Desktop Search

Google Earth

Guitar Pro

Legacy Family Tree

LimeWire
Meal Master

Microsoft Access

Microsoft Excel

Microsoft HyperTerminal

Microsoft Internet Explorer

Microsoft Money

Microsoft Office

Microsoft Outlook (Express)

Microsoft Powerpoint

Microsoft Project

Microsoft Visio

Microsoft Windows Media Center

Microsoft Word

mIRC
Mp3tag
MS Paint

MSN messenger

Mudbox
Nero Burning Rom

NetMeeting
NetStumbler
NewzCrawler
Notepad
OrangeCD Catalog

Origin
Partition Magic

PhotoME
Picasa
SoulSeek
SoundForge
Total Commander

Traktor DJ

TweetDeck
uTorrent
Videora
Winamp
Windows Media Player

Windows Movie Maker

WinIso
WinMerge
WinTV
WS_FTP
ZoneAlarm
Zscreen