Thread,SMP Symmetric multiprocessing,Cron,Numa

Thread  adalah  sebuah  alur  kontrol  dari  sebuah  proses.Kontrol  thread  tunggal  ini hanya memungkin kan  proses  untuk  menjala nkan  satu  tugas  pada  satu  waktu.

Banyak  sistem  operasi  modern  telah  memiliki  konsep  yang  di kembangkan  agar memungkinkan  sebuah  proses  untuk  memiliki  eksekusi  multi-threads,  agar  dapat secara terus menerus mengetik dan menjalankan pemeriksaan ejaan didalam proses yang sama, maka sistem operasi tersebut memungkinkan proses untuk menjalankan lebih dari satu tugas pada satu waktu. Suatu proses yang multithreaded mengandung beberapa perbedaan alur kontrol dengan ruang alamat yang sama. Keuntungan dari multithreaded meliputi peningkatan respon dari pengguna, pembagian sumber daya proses,  ekonomis,  dan  kemampuan  untuk  mengambil  keuntungan  dari  arsitektur multiprosesor. Thread merupakan unit dasar dari penggunaan CPU, yang terdiri dari Thread_ID,  program  counter,  register  set,  dan  stack.  Sebuah  thread  berbagi  code section,  data  section,  dan  sumber  daya  sistem  operasi  dengan  Thread  lain  yang  dimiliki  oleh  proses  yang  sama.  Thread  juga  sering  disebut  lightweight  process. Sebuah proses tradisional atau heavy weight process mempunyai thread tunggal yang berfungsi sebagai pengendali.

 

            1. Thread Linux

Ketika pertama kali dikembangkan, Linux  tidak didukung dengan threading di

dalam kernelnya,  tetapi dia mendukung proses-proses sebagai entitas yang dapat dijadwalkan  melalui clone()  system  calls.  Sekarang  Linux  mendukung penduplikasian  proses  menggunakan system  callclone()  dan  fork().  Clone() mempunyai  sifat  mirip  dengan  fork(),  kecuali  dalam  hal  pembuatan copy dari proses  yang  dipanggil  dimana  ia  membuat  sebuah  proses  yang  terpisah  yang berbagi address  space dengan  proses  yang  dipanggil.  Pembagian address space dari parent  process memungkinkan cloned  task bersifat  mirip  dengan thread yang  terpisah.  Pembagian address  space ini  dimungkinkan  karena proses  direpresentasikan  di  dalam  Kernel  Linux.

Di  dalam  Kernel  Linux  setiap proses  direpresentasikan  sebagai  sebuah  struktur  data  yang  unik.  Jadi,  daripada menciptakan  yang  baru maka  struktur  data  yang  baru mengandung pointer yang menunjuk ke tempat dimana data berada. Jadi ketika fork() dipanggil, proses yang baru  akan  tercipta  beserta  duplikasi  dari  segala  isi  di  struktur  data  di parent process,  namun  ketika  clone()  dipanggil,  ia  tidak  menduplikasi parent processnya tetapi  menciptakan pointer ke  struktur  data  pada parent  process yang memungkinkan child  process untuk  berbagi memori dan  sumber  daya  dari parent processnya.

Project  LinuxThread  menggunakan system  call ini  untuk mensimulasi thread di user  space.  Sayangnya,  pendekatan  ini  mempunyai beberapa  kekurangan, khusunya  di  area signal  handling,  scheduling, daninterprocess  synchronization  primitive.Untuk  meningkatkan  kemampuan Thread  Linux,  dukungan  kernel  dan  penulisan  ulang  pustaka thread sangat diperlukan. Dua project yang  saling bersaing menjawab  tantangan  ini. Sebuah  tim yang  terdiri  dari  pengembang  dari  IBM membuat  NGPT  (Next  Generation  POSIX Threads).  Sementara  pengembang  dari Red  Hat membuat  NPTL  (Native  POSIX Thread  Library).Sebenarnya  Linux  tidak  membedakan  antara  proses  dan thread. Dalam  kenyataannya,  Linux  lebih  menggunakan  istilah task dibandingkan  proses dan thread ketika  merujuk  kepada  pengaturan  alur  pengontrolan  di  dalam program.

Status proses pada linux :

  • Running yaitu bisa dalam 2 kondisi, sedang berjalan atau siap untuk di  eksekusi
  • Interruptable yaitu keadaan yang terblok dimana proses menunggu akhir dari operasi I/O, atau proses yang lainnya
  • Uninterruptable sebuah proses yang langsung menunggu dari kondisi hardware dan tidak di interrup selainnya
  • Stopped  prosses yang dihentikan dan hanyya dapat di kembalikan oleh aksi positif dari proses lainnya , contohnya proses yang sedang di debug dapat di tempatkan pada keadaan di berhentikan
  • Zombie proses yang telah dihentikan Continue reading

NoSQL (Not Only SQL) MONGO DB

MongoDB adalah satu diantara banyak Nosql , dalam web resminya tertulis “MongoDB is an open source, document-oriented database designed with both scalability and developer agility in mind. Instead of storing your data in tables and rows as you would with a relational database, in MongoDB you store JSON-like documents with dynamic schemas. The goal of MongoDB is to bridge the gap between key-value stores (which are fast and scalable) and relational databases (which have rich functionality).” Yang berarti MongoDB merupakan database yang berorientasi dokumen  dan dirancang dengan baik skalabilitas dan kelincahan

Kelebihan NOSQL dibandingkan database SQL Adalah :

  • Melakukan Searching lebih cepat , sehingga bagus untuk list produk,social network,blogging.
  • Tidak perlu membuat struktur tabel,MongoDB otomatis membuatkannya,jadi hanya perlu melakukan insert saja.
  • Mempercepat proses CRUD (CREATE,READ, UPDATE,DELETE).
  • Digunakan oleh banyak website-website besar

Kekurangan MongoDB :

  • MongoDB harus diinstall di sebuah server.
  • MongoDB belum support di banyak hosting.
  • Tidak cocok untuk aplikasi proses transaksi.

Continue reading

ALGORITMA PENJADWALAN

Penjadwalan CPU menyangkut penentuan proses-proses yang dalam queue yang akan dialokasikan pada CPU. Terdapat beberapa algoritma penjadwalan CPU yaitu :

 

1.2.1. First-Come First-Served  (FCFS)

Proses yang pertama kali meminta jatah waktu untuk menggunakan CPU akan dilayani terlebih dahulu. Pada skema ini, proses yang meminta CPU pertama kali akan dialokasikan ke CPU pertama kali.

Rata-rata waktu tunggu kasus ini jauh lebih baik dibandingkan dengan kasus sebelumnya. Pada penjadwalan CPU dimungkinkan terjadiConvoy effect apabila proses yang pendek berada pada proses yang panjang. Algoritma FCFS termasuk non-preemptive. karena, sekali CPU dialokasikan pada suatu proses, maka proses tersebut tetap akan memakai CPU sampai proses tersebut melepaskannya, yaitu jika proses tersebut berhenti atau meminta I/O.

 

 

1.2.2. Shortest Job First Scheduler (SJF)

Pada penjadwalan SJF, proses yang memiliki CPU burst paling kecil dilayani terlebih dahulu. Terdapat dua skema :

1. Non preemptive, bila CPU diberikan pada proses, maka tidak bisa ditunda sampai CPU burst selesai.

2. Preemptive, jika proses baru datang dengan panjang CPU burst lebih pendek dari sisa waktu proses yang saat itu sedang dieksekusi, proses ini ditunda dan diganti dengan proses baru. Skema ini disebut dengan Shortest-Remaining-Time-First (SRTF). SJF adalah algoritma penjadwalan yang optimal dengan rata-rata waktu tunggu yang minimal.

Ada beberapa kekurangan dari algoritma ini yaitu:

a. Susahnya untuk memprediksi burst time proses yang akan dieksekusi selanjutnya.

b. Proses yang mempunyai burst time yang besar akan memiliki waiting time yang besar pula karena yang dieksekusi terlebih dahulu adalah proses dengan burst time yang lebih kecil.

 

1.2.3. Round-Robin Scheduling

Konsep dasar dari algoritma ini adalah dengan menggunakan time-sharing. Pada dasarnya algoritma ini sama dengan FCFS, hanya saja bersifat preemptive. Setiap proses mendapatkan waktu CPU yang disebut dengan waktu quantum (quantum time) untuk membatasi waktu proses, biasanya 1-100 milidetik. Setelah waktu habis, proses ditunda dan ditambahkan pada ready queue. Jika suatu proses memiliki CPU burst lebih kecil dibandingkan dengan waktu quantum, maka proses tersebut akan melepaskan CPU jika telah selesai bekerja, sehingga CPU dapat segera digunakan oleh proses selanjutnya. Sebaliknya, jika suatu proses memiliki CPU burst yang lebih besar dibandingkan dengan waktu quantum,

maka proses tersebut akan dihentikan sementara jika sudah mencapai waktu quantum, dan selanjutnya mengantri kembali pada posisi ekor dari ready queue, CPU kemudian menjalankan proses berikutnya. Jika terdapat nproses pada ready queue dan waktu quantum q, maka setiap proses mendapatkan 1/n dari waktu CPU paling banyak q unit waktu pada sekali penjadwalan CPU. Tidak ada proses yang menunggu lebih dari (n-1)q unit waktu. Performansi algoritma round robin dapat dijelaskan sebagai berikut, jika q besar, maka yang digunakan adalah algoritma FIFO, tetapi jika q kecil maka sering terjadi context switch.

Double Linked list

#include <malloc.h>

#include <iostream>

using namespace std;

int main() {

    int i;

    struct SimpanData {

        int angka;

        struct SimpanData *next;

        struct SimpanData *before;

    } start , *node;

    start.next=NULL;

    start.before=NULL;

    node = &start;

    for(int i=0; i<10; i++) {

              //alokasi memori=malloc

node -> next = (struct SimpanData *)//casting bentuk struct pointer untuk mengalokasikan besarnya struct SimpanData

                       malloc(sizeof(struct SimpanData));

          node->next->before=node;

          //geser

        node = node -> next;

        node -> angka = i;

        node -> next = NULL;

    }

    node = start.next;

    while(node->next) {

        cout << node -> angka << endl;

        node = node -> next;

    }

    while(node->before) {

        cout << node-> angka <<endl;

        node = node -> before;

    }

    return 0;

}