Mutitasking Kernel - Scheduler, Context Switching, Paging, VM by: ev1lut10n Sistem operasi jaman sekarang mengenal yang namanya multitasking. Pada dasarnya dengan satu cpu hanya memungkinkan 1 proses yang dilakukan. tapi pada kenyataanya banyak sistem2 operasi yang memungkinkan multitasking lebih dari satu proses, cara kerjanya simple dg cara membuat suatu time frame untuk tiap proses suatu kernel akan bisa melakukan switch dari satu proses ke proses lain. Proses perpindahan antara 1 proses dengan proses lainya dinamankan context switching. untuk bisa melakukan context switching diperlukan informasi tentang proses, misal di linux: ============= mywisdom 18055 0.8 1.8 68312 38492 ? S 22:04 0:09 quanta mywisdom 18058 0.0 0.2 26412 5264 ? Ss 22:04 0:00 kdeinit Running... mywisdom 18061 0.0 0.1 25968 3772 ? S 22:04 0:00 dcopserver [kdeinit] --nosid --suicide mywisdom 18064 0.0 0.3 26628 6320 ? S 22:04 0:00 klauncher [kdeinit] --new-startup mywisdom 18066 0.0 0.3 27208 8000 ? S 22:04 0:00 kded [kdeinit] --new-startup mywisdom 18069 0.0 0.2 26912 5424 ? S 22:04 0:00 kio_file [kdeinit] file /tmp/ksocket-m mywisdom 18071 0.0 0.3 27364 7764 ? S 22:04 0:00 knotify [kdeinit] mywisdom 18155 0.0 0.6 30680 12424 ? S 22:05 0:00 kio_uiserver [kdeinit] ============== di situ pada proses2 terlihat secara kasat mata context2 user yang menjalankan proses, nomor pid, status , berapa banyak memori, dsb untuk memungkinkan context switching si kernel ini punya suatu subsystem yang namanya "scheduler". VM tiap kernel punya yang namanya physical address (0 s/d jumlah RAM). Virtual Memory ini suatu subsystem lain dari si kernel buat metain physical addres. jadi seolah2 tiap proses akan punya private address space dalam jumlah besar hanya utk masing 2 proses (padahal range physical address terbatas !!!). misal pada suatu mesin 32 bit. maka range virtual addressnya 0 sampai dengan (( 2 ^ 32 ) -1 ) dan 64 bit range virtual addressnya : 0 sampai dengan (( 2 ^ 64 ) -1 ). Si kernel ini akan membagi2 suatu physical address menjadi bagian2 range address tetap yang namanya page frame yang akan dipetakan ke memori virtual dengan ukuran page yang sebanding. Si kernel ini menyiapkan suatu table yang namanya page table untuk melakukan translasi dari physical memori ke virtual memori. ukuran dari suatu page virtual memori pada mesin linux biasanya :4096 bytes getpagesize ===================================== //getpagesize snippet by mywisdom #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <sys/mman.h> int getpagesize(); int main() { int i=getpagesize(); printf ("\nUkuran page adalah : %d\n",i); } ===================================== 32 bit ====================== mywisdom@mywisdom-Vostro1310:~/c$ uname -a Linux mywisdom-Vostro1310 2.6.35-22-generic #33-Ubuntu SMP Sun Sep 19 20:34:50 UTC 2010 i686 GNU/Linux mywisdom@mywisdom-Vostro1310:~/c$ gcc -o getpagesize getpagesize.c mywisdom@mywisdom-Vostro1310:~/c$ ./getpagesize Ukuran page adalah : 4096 ====================== 64 bit: ========== root@server [~]# uname -a Linux server.************* 2.6.18-238.12.1.el5 #1 SMP Tue May 31 13:22:04 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux root@server [~]# getconf PAGESIZE 4096 ==================