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
==================