Wednesday, November 19, 2014

Process Programming dan Thread

Selamat siang temen-temen, kali ini saya akan mbahas tentang apa itu  Process Programming dan thread. Jadi, mari kita mulai diskusinya.
Jadi, dalam system operasi terdapat istilah yang namakan process ID. Apa itu? Process ID menrupakan media komunikasi tiap2 proses yang ada di system operasi sehingga dapat berkomunikasi. Proses ID ini terdiri dari 16 digit integer dan setiap process ID, pasti memiliki parent process (kecuali init). Fungsi “get pid()” digunakan untuk mendapatkan pid proses sendiri, dan “get ppid untuk parent proses”. Apa itu proses anak? proses merupakan proses yang merupakan duplikasi dari proses yang sedang dilakukan (yang sebutannya adalah parent proses ).
Nah, berikut akan dijelaskan bberapa cra untuk membuat proses anak, :
Dengan menggunakan fungsi system(), tidak disarankan. Sebab beberapa system operasi memiliki fungsi system yang berbeda(contoh windows dan linux), juga berbahaya sebab dapat mengganti isi dan mengubah secara bebas pada beberapa lever user
Dengan menggunakan fork(), menduplikasi proses yang ada, nah proses yang dihasilkan adalah proses anak, dan return value dari fork() menentukan  sekarang ada diproses mana. >0 ada di parent proses, =0 ada di proses anak, dan <0 maka proses gagal dibuat.
Dengan menggunakan proses exec, pada umumnya fungsi exec ini hamper sama dengan fungsi system, namun lebih baik.

Nah, pertanyaannya, bagaimana cara agar satu proses dan lainnya agar dapat berkomunikasi? Jawabannya adalah dengan menggunakan signal. Signal sendiri ada bermacam-macam, berikut adalah signal yang umum:
*      SIGKILL : mengakhiri eksekusi program sekarang juga
*      SIGTERM : mengakhiri eksekusi program
*      SIGSEGV : diterima ketika program melakukan segmentation violation
*      SIGSTOP : menghentikan sementara suatu proses sekarang juga
*      SIGCONT : melanjutkan kembali program yang di-stop
*      SIGINT : interrupt ke suatu proses

Nah, sekarang mari kita diskusi tentang thread, thread merupakan instruksi ada di process. Nah, 1 processor hanya dapat mengeksekusi 1 proses. Mungkin terdapat sedikit kebingungan antara thread dan proses. Untuk memperjelas berikut ciri2 antara thread dan proses:
Ciri2 proses:
Punya ruang/space sendiri di memory
Tidak dapat mengakses ruang lain di memory yang merupakan milik proses lain
Ciri2 thread:
Punya thread state
Punya program counter
Punya execution stack
Punya local variable
Akses ke memory yang dimiliki prosesnya

Nah, thread sendiri memiliki level2nya sendiri, berikut adalah level2 thread:
User Level thread
Kernel tidak mengetahui thread
Thread management dilakukan oleh aplikasi user level/library
Kernel leverl thread
Thread management dilakukan oleh kernel
Hybrid level thread
Pembuatan thread, scheduling, sikronisasi dilakukan di userspace

Ada beberapa thread user dipetakan ke luar kernel         

Berikut adalah contoh kodenya:
#include<stdio.h>
#include<pthread.h>
#include<string.h>
#include<stdint.h>
#include<stdlib.h>
#include<time.h>
int waktu;
int jum_soal;
double nilai=0;
struct Class{
char soal[100];
char pilihan[50];
char jawab;
};

FILE *file;
struct Class class[100];
pthread_t thread2,thread3;
pthread_mutex_t lock=PTHREAD_MUTEX_INITIALIZER;

void *scan(void *ptr){
int i = (intptr_t)ptr;

pthread_mutex_lock(&lock);
fgets(class[i].soal,100,file);
fgets(class[i].pilihan,100,file);
fscanf(file,"%c",&class[i].jawab); fgetc(file);
pthread_mutex_unlock(&lock);
}

void *show(void *ptr)
{
system("clear");
int i = (intptr_t)ptr;
printf("%s",class[i].soal);
printf("%s",class[i].pilihan);
sleep(waktu);
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);
pthread_cancel(thread3);
}

void *jawab(void *ptr)
{
int i = (intptr_t)ptr;
char answer;
scanf("%c",&answer);
getchar();
if(answer==class[i].jawab)
{
nilai+=(100/(double)jum_soal);
}
time_t kodokwaktu;
        char waktukodok[25];
        struct tm* waktunyakodok;
        time(&kodokwaktu);
waktunyakodok = localtime (&kodokwaktu);
        strftime(waktukodok,25,"%d-%m-%Y %H:%M:%S",waktunyakodok);
FILE *log=fopen("/home/ponigh/Desktop/log.txt","a+");
fprintf(log,"nomor soal : %c Jawaban : %c Kunci : %c Pada pukul : %s\n",class[i].soal[0],answer,class[i].jawab,waktukodok);
fclose(log);
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);
pthread_cancel(thread2);
}

int main()
{
pthread_t thread1[100]; //(menyediakan thread sebanyak 100)
file=fopen("/home/ponigh/Desktop/soal.txt","r"); //(membuka format soal)
fscanf(file,"%d",&jum_soal); fgetc(file); //(scan jumlah soal)
fscanf(file,"%d",&waktu); fgetc(file); //scan waktu
int i;
for(i=0;i<jum_soal;i++)
pthread_create(&thread1[i],NULL,&scan,(void *)(intptr_t)(i)); //memasukkan ke soal

for(i=0;i<jum_soal;i++)
pthread_join(thread1[i],NULL); //menunggu agar tiap thread hingga slese dulu

for(i=0;i<jum_soal;i++)
{
pthread_create(&thread2,NULL,&show,(void *)(intptr_t)(i));//menampilkan soal
pthread_create(&thread3,NULL,&jawab,(void *)(intptr_t)(i));//proses menjawab
pthread_join(thread2,NULL);
pthread_join(thread3,NULL);
}
char pesankodok[100];
        sprintf(pesankodok,"zenity --info --text='Anda berhasil mendapat nilai :%lf'",nilai);
        system(pesankodok); //pop up hasilnya
fclose(file);
}

nah, source code diatas digunakan untuk membuat program tes dengan format sbb:
(jumlah soal) (waktu pengerjaan tiap soal)
(soal)
(pilihan)
(kunci)

contoh:
5 3
1.siapa yang paling ganteng?
a.ponigh b.ponigh c.ponigh d.ponigh
a
2.siapa yang paling ganteng?
a.ponigh b.ponigh c.ponigh d.ponigh
b
3.siapa yang paling ganteng?
a.ponigh b.ponigh c.ponigh d.ponigh
c
4.siapa yang paling ganteng?
a.ponigh b.ponigh c.ponigh d.ponigh
d
5.siapa yang paling ganteng?
a.ponigh b.ponigh c.ponigh d.ponigh
e

5 merupakan jumlah soal, dan 3 merupakan waktu pengerjaan tiap soal.

Kodok Ganteng - Concurrency

Nah kali ini mari kita diskusi tentang concurrency, apa itu? Jadi gini Concurrency merupakan 2 hal (dalam hal ini adalah proses) yang berjalan secara bersamaan. Kira2 apa yang terjadi? Nah kemungkinan kesalahan pastinya akan muncul, berikut adalah beberapa kesalahan yang dapat terjadi:
  • Bahaya global resource
  • Sulit alokasi resource secara optimal
  • Sulit debugging


Beberapa istilah yang terdapat di concurrency:
  • Atomic operation, sebuah action yang tampaknya tidak dapat dibagi. Atomic operation bersifat tidak bisa di interrupt
  • Critical section,bagian tertentu dari code yang butuh akses ke resource. jika sedang berjalan maka proses lain tidak boleh ikut jalan.
  • Race condition, Hasil dari proses tergantung dari siapa proses yang berjalan terlebih dahulu
  • Mutual exclution, sesuatu yang digunakan untuk mengunci bagian pada critical section, ketika proses dijalankan. Biasanya menggunakan perintah mutex_lock.


Nah, penggunaan pada bagian yang dijelaskan diatas dapat terjadi kesalahan yang biasanya dari user. Berikut beberapa kesalahan yang sering terjadi :
  • Starvation, bagian dari proses yang tidak pernah dijalankan
  • Deadlock, saling tunggu antar proses sehingga tidak ada yang berjalan




Wednesday, November 5, 2014

Sharing IPC

Selamat siang temen2, jadi kali ini kita akan bahas tentang IPC. Apa itu IPC, inter process communication, yang artinya tiap program  yang kita buat dapat berkomunikasi dengan program lain. Sehingga antar satu program dan program lain dapat saling berhubungan dan mengirimkan hasilnya untuk diproses satu sama lain.

Nah, bagaimana caranya? Pertama kita akan mempelajari tentang PID, apa itu PID? PID dapat dianalogikan sebagai nomor yang unique dari setiap proses. Setiap prosess selalu memiliki pid, dan satu sama lain selalu memiliki pid yang berbeda. Lalu, setiap process juga memiliki parent process. Apa itu parent proses? parent proses adalah proses yang merupakan dari induk proses yang berjalan pada saat ini.

Ada 3 cara untuk membuat proses anak :
  • Fungsi system() (tidak disarankan, sebab antar operating system memiliki fungsi system yang berbeda)
  • fungsi fork() (return value dari fork ini akan memnentukan proses sedang berjalan dimana, >0 ada di parent proses, =0 di child proses, <0 berarti gagal dibuat)
  • Fungsi exec() (Mengganti program yang sedang berjalan pada suatu proses)
nah apa hubungannya IPC denga Pid? untuk berkomunikasi antar program, maka dibutuhkan id dari tiap proses yang berjalan, dan Pid ini yang menjadi Id tersebut. Nah, salah satu komunikasi yang sering digunakan pada IPC adalah signal. Signual merupakan sebuah event yang dikirimkan ke suatu proses oleh proses itu sendiri atau proses lain. Signal digunakan untuk mengirimkan notifikasi kepada suatu proses bahwa ada suatu event. Berikut beberapa signal yang populer:

  • SIGKILL : mengakhiri eksekusi program sekarang juga
  • SIGTERM : mengakhiri eksekusi program
  • SIGSEGV : diterima ketika program melakukan segmentation violation
  • SIGSTOP : menghentikan sementara suatu proses sekarang juga
  • SIGCONT : melanjutkan kembali program yang di-stop
  • SIGINT : interrupt ke suatu proses

Wednesday, October 22, 2014

Proses (Kodok ganteng)

Selamat siang, teman-teman. Sudah siap untuk berdiskusi lagi tentang sistem operasi? Jadi, kali ini diskusi kita tentang perdalaman apa sebenarnya proses itu.

Seperti yang sudah dibahas, proses itu adalah program yang berjalan. Nah, proses ini pasti memiliki urutan intsruksi untuk dijalankan, yang bagian menjadi penunjuk adalah Dispatcher, sekumpulan daftar itu dalah trace. Jadi program yang akan berjalan ini, tentu saja akan dipilih oleh dispatcher agar dapat dieksekusi.

Nah, otomatis, ketika process ini berjalan, ada statusnya. Sebab tidak semua proses langsung berjalan terlebih dahulu, ada dipatcher yang akan memilih trace mana yang berjalan. Nah, beberapa fase status tersebut adalah :
  • Running = Program siap berjalan
  • Not running = program siap dijalankan
  • Block = ketika suastu proses sedang menunggu agar dapat dijalankan
  • Suspend = Ketika program yang pada fase block terlalu lama, sehingga di taruh kefase lain agar tidak terlalu memakan memori.
Nah, didalam sistem operasi juga memiliki bagian lain, namanya kontrol proses. Nah, salah satunya, kontrol proses ini mencatat semua proses yang terjadi di komputer. Kontrol proses terdiri dari :
  • Memory tables
  • I/O tables
  • File Tables
Memory tables itu mencatat semua yang berubah yang ada di dalam memory, baik secara fisik ataupun virtual. Contoh yang dicatat :
  • Alokasi main mamory ke proses
  • Alokasi memory sekunder ke proses
  • atribut proteksi, pada blok tertentu
  • informasi2 tentang memory
 I/O tables berguna untuk mengatur pembagian I/O devices

File tables, untuk memcatat pembagian akses file Contoh yang dicatat
  • state
  • pid
  • lokasi memory

Wednesday, October 8, 2014

Perintah dasar Linux

Selamat pagi temen-temen, gimana kabarnya? Ok, kali ini kita akan diskusi tentang perintah dasar yang ada di Linux. Jadi, temen-temen tau gak, kalo di linux itu kita bisa ngakses seluruh sistem operasi dengan hanya mengakses terminal. Tapi, ya gitu temen-temen harus dengan perintah yang sesuai dengan command yang benar. Nah, apa saja command itu? berikut beberapa command dasar yang bisa temen-temen gunakan untuk dicoba di terminal
  • pwd, memberi informasi dimana directory yang sekarang berada
  • ls, menampilkan seluruh directory yang ada di directory sekarang
  • cd, untuk mengganti directory
  • wget, untuk mendownload langsung dari alamat melalui terminal
  • curl, untuk mengupload k server melalui terminal
  • rm, untuk me-remove sebuah direktori maupun file
  • mkdir, membuat folder baru
  • kill, untuk melaksanakan terminate proses
  • sudo, untuk melakukan perintah yang dengan akses super user
berikut diatas adalah perintah-perintah dasar yang ada di linux. Kalo pengen tau lebih lanjut, temen-temen bisa ketik "man (perintah)", untuk mengetahui lebih lanjut tentang rincian perintah tersebut, contoh: "man mkdir" => tanpa tanda petik.

selain itu temen-temen, di Linux juga bisa untuk melakukan sesuatu secara otomatis, jadi misalkan temen-temen ingin melakukan sesuatu tapi kelupaan, maka di Linux ada layanan berupa crontab. Crontab ini berguna untuk melakukan perintah yang kita inginkan secara otomatis. langkah-langkah penggunaan Crontab adalah :
  • ketikkan crontab -l
  • jika tidak ada, maka tidak ada crontab yang sedang berjalan
  • untuk menambahkan, ketikkan crontab -e
  • baris yang ada "#" merupakan command line, jadi g usah bingung
  • tambahkan baris */ * * * * * /direktori/dimana/perintah/ada
  • antara tanda /, terdapat 5 bintang, bintang yang pertama berarti menit, lalu jam, lalu tanggal, bulan, hari dalam satu minggu.
contoh penggunaan crontab */10 20 * * * /direktory/dimana/perintah/ada/kodok_ganteng.sh

jadi, setiap jam 20.10, saya (kodok) semakin ganteng. jika ingin merubah tinggal memasukkan tanggal bulan dan hari dalam 1 minggu (1-7). jika seperti ini */* * * * * /direktory/dimana/perintah/ada/kodok_ganteng.sh maka saya selaku kodok, akan semakin ganteng setiap menit
wkwkwkwkwk

gimana temen-temen? sudah bisa? slamat dicobaaa

Wednesday, October 1, 2014

Paham Sistem Operasi = Ganteng

Jadi, pada kesempatan kali ini, ayo kita diskusi tentang konsep-konsep yang lebih lanjut dari sistem operasi. Didalam sistem operasi, terdapat beberapa istilah, istilah yang umum tersebut diantaranya adalah :

  • Proses = Program yang berjalan
  • Thread = Kumpulan instruksi yang ada di prosesor
  • Entitas = Benda (program) yang bisa di eksekusi oleh prosesor
Nah, karena proses itu adalah program yang berjalan, tentu saja didalam proses tersebut terdapat beberapa item yang berjalan didalamnya, seperti :
  • Program yang dapat dieksekusi
  • Data (Variabel, Work, Status)
  • Status proses
Semua yang telah saya sebutkan diatas, bagian paling penting (untuk mengeksekusi) adalah prosesor. Sehingga prosesor memiliki bagian sendiri untuk menjalankan dan mengeksekusi thread-thread yang ada di didalamnya. Bagian prosesor ada dua, yaitu :
  • Prosesor Register, disini register gambarannya seperti memori. Sehingga instruksi apapun yang akan dijalankan akan dipindah (dicopy) disini untuk dijalanlan oleh prosesor. Disini, prosesor dapat mengetahui proses yang adakan dieksekusi selanjutnya sebab ada Index
  • PC (Program counter), oiya disini PC bukan komputer yang besar dan ada CPU terus monitor dan lain-lai itu ya(-_-). Disini PC berarti penunjuk  untuk eksekusi prosesor selanjutnya. Sehingga prosesor akan mengeksekusi apa yang ditunjuk oleh PC tersebut. PC akan mengiterasi dirinya sendiri ke register selanjutnya untuk menjalankan Thread.
Gimana temen-temen? Sudah pusing? wkwkwkwk, emang binguning kok, tapi sabar. Sebab cari ilmu itu harus penuh perjuangan (*sok bijak :v). Nah, sekarang memory management. Jadi gini temen-temen, pernah berpikir gak kalo temen-temen main game dan itu kok bisa dieksekusi oleh prosesor? Gini temen-temen, sebenarnya semua perintah untuk game tersebut dipindah ke memori utama (RAM) nah dari RAM tersebut bisa dieksekusi prosesor melalui register. Jadi, kalo misalkan main game dan RAM.nya kurang suka nge-lag kan? Itu karena antar perintah satu dan perintah lain terjadi delay, sehingga ada proses tunggu dan perintah yang harusnya uda dieksekusi jadi belum dieksekusi. 

Lho, kalo gitu gimana tentang gameku yang banyak? Kan RAM.ku cuma 4 gb (misal), trus gameku ada 100 gb dihard disk, kalo semua perintah harus ditaruh di RAM, gak cukup kan? Kalo masalah itu, itu tugasnya OS temen-temen, jadi setiap OS punya fungsi yang namanya Memory Management. Nah salah satu fungsi ini adalah Virtual memory. Virtual memory itu gunanyya untuk mengelabui prosesor, jadi Virtual memory membuat RAM terlihat besar banget, padahal enggak. gunanya apa? Biar kita bisa nyimpen data yang besar sesuai hard disk yang kita punya, gak cumaa terbatas pada RAM saja. Jadi, kesimpulannya prosesor gak mau tau sebesar apa RAM atau Harddisk yang kita punya, prosesor cuma tau kalo selama masih ada space maka akan dieksekusi. Tugas pengalokasian (penipuan) memory tersebut di serahkan sepenuhnya oleh OS.

Dari tadi kan kita diskusi cuma konsep memory managemen ada, lah sekarang apa gunanya memory menagemen? Gini temen-temen, beberapa fungsi memory managemen itu ada :
  • Isolasi Proses, biar g semua user dapat mengubah proses inti dai prosesor atau OS
  • Alokasi dan managemen secara otomatis, ini gunanya biar kita bisa nyimpen program sesuai dengan harddisk
  • Mendukung Modular Programing, jadi ini gunanya biar kita bisa buat program didalam OS
  • Proteksi dan data akses, misal ada data admin yang penting banget, maka user biasa harus g bisa ngakses data admin tersebut
  • Long-term Storage, biar kita bisa nyimpen data yang kita punya dalam jangka panjang
Temen-temen pernah kepikiran gak, kalo beberapa game butuh kayak minimal dual core, atau core i3, dll? Kan tadi prosesor hanya bisa eksekusi 1 intrsuksi di satu waktu? Nah hini temen-temen, dalam OS, ada yang namnya multiprosessing, jadi prosesor bisa mengeksekusi lebih dari 1 instruksi dalam 1 waktu. Sehingga misal ada 2 thread, dan komputer tersebut mendukung multiprosessing, maka 2 buat thread tersebut dapat dieksekusi secara bersamaan. Jadi, dengan ada multiprosessing ini, instruksi yang penjang dapat dipersingkat, dengan catatan perintah-perintah tersebut mendukung adanya multiprosessing. Berikut adalah beberapa syarat multiprosessing :
  • Multiple Prosessor
  • Prosessor memiliki memory dan I/O berbeda
  • Prosessor tersebut dapat melakukan kemampuan fungsi yang sama
Beberapa istilah SMP (Symmetric Multiprossesing), memiliki arti, bahwa pembagian proses yang dijalankan oleh prosessor untuk dibagi-bagi secara sama rata pada setiap inti prosessor yang ada (Biar gak gabut/gaji buta). Namun perlu diingat, bahwa Single thread, TIDAK dapat dibagi ke beberapa inti prosessor, sebab single thread TIDAK mendukung adanya multiprosessing. Beberapa keuntungan:
  • Performa (karena dapat diselesaikan lebih cepat)
  • Ketersediaan Terjamin (Sebab kerja masing-masing inti dapat berkurang bebannya)
  • Incremental growth (Dapat lebih cepat dalam setiap pemrosesan)
gimana temen-temen? cukup? saya juga udah capek, wkwkwkwkwk.
sekian dulu temen-temen, minggu depan saya post lagi, selamat pagi dan selamat beraktivitas
:D

Monday, September 22, 2014

Konsep Dasar Sistem Operasi = Ganteng

Pagi Temen-temen, dipagi yang cerah ini mari kita belajar mengenai apa itu Sistem Operasi. Mengapa harus? Sebab orang yang tau apa itu sistem operasi = ganteng. Jadi, ayo dimulai diskusinya. :D

Kebanyakan dari komputer kita, memakai sistem operasi windows, padahal g semua operasi itu cuma windows ajaaa. Ada Linux, chrome, garuda, Mac, dll. Memang yang paling populer adalah windows, kenapa? Soalnya gampang banget makenya. Nah, pernahkah temen-temen berpikir apa itu sistem operasi dan kenapa harus ada sistem operasi?

Sebenarnya, Sistem Operasi adalah software. Software untuk apa? Software untuk mengatur. Mengatur apa? Mengatur segala kegiatan yang ada di komputer. Nah, sistem operasi ini yang mengatur semua sumber daya yang ada di komputer agar teratur dan jangan sampai ada yang tumpang tindih. Bisa dibayangkan kalo sistem operasi itu g ada, kita harus pake bahasa mesin (1011101111011111) mau? Kalo saya sih, mutung. hehehehe

Gimana? Barangkali ada yang tertarik untuk membuat sistem operasi baru? Disini, ada beberapa hal yang perlu dipenuhi untuk sebuah sistem operasi (sisop). Mengapa syarat itu ada, agar tidak terlalu menyusahkan si pengguna. Syarat-syarat itu adalah:
  • Kenyamanan, disini kalo ada sisop tapi njelimet kan kasian penggunanya kan? Makanya dibuat senyaman dan seefisien mungkin
  • Efisiensi, Mau pake sisop tapi batere cepet abis? kalo saya se enggak
  • Kemampuan evolusi, nah disini sisop sewaktu dibuat juga harus dipikirkan agar dapat diupdate kemudian hari. Agar, sewaktu-waktu terjadi bug dapat diupdate dan diperbaiki.
Gimana udah mulai pusing? Saya juga, wkwkwkwkwk. Tetep dijaga semangatnya temen-temen, mcari ilmu itu g gampang soalnya. hehehehe. Tadikan sempet disinggung masalah evolusi, Kenapa sebenarnya sisop butuh evolusi. Maksud saya, kok g disempurnain aja? Gini temen-temen, sebenarnya sisiop tersebut mungkin udah sempurna, tapi pada tahun tersebut. seiring waktu pasti butuh pembahasuan, kenapa? Beberapa ini penyebabnya temen-temen:
  • Hardware jenis baru
  • Ada Bug
  • Layanan yang baru dibutuhkan
Kalo temen-temen udah sering pake sisop, lah temen-temen tau g layanan yang dikasih k kita dari sisop itu apa aja? Sebenarnya, untuk mempermudah kerja kita, sisop ngasih berbagai layanan k kita, layanan itu ada :
  • Program develompent (Untuk membuat dan mengedit program yang akan kita buat)
  • Program Execution (Untuk mengeksekusi program yang ada)
  • Access I/O device (Mengakses perangkat input ouput dan memproses untuk tampilan interface pada user)
  • Controll Access Files (Membatasi tiap pengguna dalam satu sisop)
  • Error detection and response (Mencari kesalahan, baik program maupun system, dan memberikan solusi)
  • Accounting (Membantu proses perhitungan)
Sudah mulai pusing lagi? Saya juga, sama, hehehehe. Minggu depan kita mulai lagi ya diskusinya, tetep semangat menjalankan aktifitas pagi ini temen-temen. :D

Sunday, September 21, 2014

Post pertama

Perkenalannnnnnnn
:D

Perkenalan dulu, nama saya Ponighzwa. Saya udah kuliah di ITS, barangkali temen-temen ada yang di ITS, mungkin bisa ketemuan hehehe....
Saya dari Gresik, jadi setiap minggu bisa pulang, lhek kate pm boso jowan ae. Aku isok kok. Ini post pertama saya, mau nyoba nge-blog(bukan nyoba sebenarnya ini Tugas). Lebih khususnya, ntar kita akan diskusi tentang sistem operasi. hehehehe
Tetep dijaga semangatnya