IPC -> Pipe




IPC (Inter-Process Communication)
adalah komunikasi antar proses untuk mengirim data dari satu proses ke proses yang lain, baik antar proses dalam satu komputer maupun proses-proses dalam komputer yang berbeda. Salah satu metode IPC adalah 'pipe'.

Pipe
merupakan komunikasi sekuensial antar proses yang saling terelasi, namun pipe memiliki kelemahan yaitu hanya bisa digunakan untuk komunikasi antar proses yang saling berhubungan, dan komunikasinya yang dilakukan adalah secara sekuensial. Urutan informasi yang ada dalam sebuah pipe ada yang mirip dengan antrian queue. Jika komunikasi yang diinginkan adalah komunikasi dua arah maka kita harus membuat dua pipe, karena sebuah pipe hanya bisa digunakan untuk komunikasi satu arah saja. 

Ada 2 jenis pipe, yaitu Named Pipe dan Unnamed Pipe.
Namun metode pipe yang sering digunakan adalah named pipe. Keuntungan named pipe adalah kemampuan untuk mengkomunikasikan dua proses yang dimulai secara independent, dimana salah satu proses tidak fork off sebuah proses baru. 

Named pipe bisa juga disebut FIFO karena prinsip kerjanya FIFO. Data yang pertama kali ditulis di pipe adalah data yang pertama dibaca.  Named pipe digunakan untuk 2 proses yang berjalan sendiri-sendiri dan hanya bisa digunakan pada proses-proses yang menggunakan filesystem yang sama. Secara umum, named pipe yaitu metode yang menggunakan file bertipe pipe file yang diciptakan terlebih dahulu oleh salah satu proses dengan menggunakan mkfifo, kemudian proses yang lain membacanya.

Berikut adalah langkah-langkah membuat named pipe :

Write Process :

1. Deklarasi variabel

Variabel pertama bertype char pointer (char *fifo), di mana variabel fifo tersebut berisi lokasi yang akan digunakan untuk membuat file pipe, misal lokasinya adalah "/tmp/fifo/". Maka deklarasinya adalah :

               char *fifo = "/tmp/fifo/";


Variabel kedua adalah variabel bertype integer yang akan digunaka untuk membuka file pipe tadi (int fd) dan juga variabel array of integer untuk ditulis ke dalam file pipe tersebut (arr[100]). Maka deklarasinya adalah :

               int fd,arr[100];

2. Membuat file pipe

File pipe bisa dibuat melalui perintah mkfifo, di mana salah satu parameternya adalah 0666, yaitu menandakan bahwa file pipe tersebut bisa di read dan write.

               mkfifo(fifo,0666);

3. Membuka file pipe
     File pipe yang tadi telah kita buat kemudian dibuka dengan menggunakan perintah "open", lalu dimasukkan ke dalam variabel integer yang telah kita buat tadi.Parameter ke dua isikan dengan "O_WRONLY" yang dimaksudkan untuk file tersebut dibuka dengan dalam mode write only.

               fd = open(fifo,O_WRONLY);

4. Menuliskan isi file pipe

Menuliskan isi file pipe bisa menggunakan perintah "write".

               write (fd,arr,sizeof(arr));

5. Menutup file pipe

Menutup file pipe bertujuan agar file pipe tersebut tidak akan diakses terus menerus. Menutup file pipe menggunakan perintah "close"

               close(fd);

6. Menghapus file pipe

Menghapus file pipe menggunakan perintah "unlink";
  
               unlink(fifo);

Read Process :

1. Deklarasi variabel

Variabel pertama bertype char pointer (char *fifo), di mana variabel fifo tersebut berisi lokasi yang telah digunakan untuk membuat file pipe, misal lokasinya adalah "/tmp/fifo/". Maka deklarasinya adalah :

               char *fifo = "/tmp/fifo/";

Variabel kedua adalah variabel bertype integer yang akan digunaka untuk membuka file pipe tadi (int fd) dan juga variabel array of integer untuk ditulis ke dalam file pipe tersebut (arr[100]). Maka deklarasinya adalah :

               int fd,arr[100]; 

2. Membuka file pipe

File pipe yang tadi telah kita buat kemudian dibuka dengan menggunakan perintah "open", lalu dimasukkan ke dalam variabel integer yang telah kita buat tadi.Parameter ke dua isikan dengan "O_RDONLY" yang dimaksudkan untuk file tersebut dibuka dengan dalam mode read only.

               fd = open(fifo,O_RDONLY);

3. Membaca isi file pipe

Membaca isi file pipe bisa menggunakan perintah "read".

               read (fd,arr,sizeof(arr));

4. Menutup file pipe

Menutup file pipe bertujuan agar file pipe tersebut tidak akan diakses terus menerus. Menutup file pipe menggunakan perintah "close"

               close(fd);

Kode Program

Write Process :

               char *fifo = "/tmp/fifo/";
               int fd,arr[100];
               mkfifo(fifo,0666);
               fd = open(fifo,O_WRONLY);
               write (fd,arr,sizeof(arr));
               close(fd);
               unlink(fifo);

Read Process :

               char *fifo = "/tmp/fifo/";
               int fd,arr[100]; 
               fd = open(fifo,O_RDONLY);
               read (fd,arr,sizeof(arr));
               close(fd);

0 komentar:

Thread Programming

Thread di Linux
GNU/Linux menggunakan POSIX Standard Thread API
Dikenal dengan nama pthread
Program dengan thread harus di-compile dengan option : -lpthread

Pembuatan Thread
Setiap thread dalam sebuah program diidentifikasi dengan thread ID
Type : pthread_t
Fungsi untuk membuat thread :
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
Parameter :
1 → thread ID
2 → thread attribute (NULL untuk default attribute)
3 → Fungsi yang ingin dijalankan
4 → Parameter untuk fungsi yang dijalankan

Contoh kode :

















Passing Data ke Thread
Parameter ke-4 dari pthread_create adalah parameter yang akan dimasukkan ke fungsi yang dijalankan oleh suatu thread
Parameter ke-4 bertipe pointer void
Jika ada lebih dari 1 nilai parameter yang ingin digunakan, maka gunakanlah struct

Menanti Sebuah Thread
Thread akan dijadwalkan oleh sistem operasi
Pengguna tidak akan pernah tahu mana yang berjalan dahulu
Fungsi untuk menunggu eksekusi sebuah thread selesai :
int pthread_join(pthread_t thread, void **retval);
Parameter :
1 → thread ID yang ditunggu
2 → Variabel untuk menyimpan return value dari thread (NULL jika tidak dibutuhkan)

Fungsi penting lain:
Pthread_self() : Digunakan untuk mengetahui thread ID dari thread yang sedang aktif
Pthread_equal() : Membandingkan thread ID yang satu dengan yang lain, apakah sama atau tidak

Prime single-thread





































Prime multi-thread

0 komentar:

Process Programming

Process Programming menjelaskan tentang proses dari sudut pandang seorang programmer di linux.

1. PID

Pertama – tama kita akan membahas PID, apa itu PID? PID adalah “Process ID” atau “Process Identifier”. Process identifier adalah integer unik berukuran 16 bit yang berurutan, anda bisa menganggap PID ini sebagai sebuah nomor induk (primary key) untuk membedakan process satu dengan yang lain. Selain itu juga ada PPID, Parent PID, yaitu adalah PID dari process yang men-spawn atau memanggil suatu process. Contohnya ada process “A” yang membutuhkan process “B”, maka process “A” akan memanggil process “B”, lalu process “B” akan memiliki sebuah PID unik dan sebuah PPID yaitu PID dari process yang memanggilnya, dalam kasus ini yang memanggilnya adalah process “A” sehingga PPID dari process “B” adalah PID process “A”.
Setiap process pasti memiliki PID dan PPID, kecuali process “init”, yang mana process ini adalah parent dari semua process, sehingga tidak memiliki PPID(karena tidak ada parent nya).
Ada beberapa cara untuk mengetahui PID dan PPID dari suatu process, salah satunya(menggunakan bahasa C++) adalah dengan menggunakan fungsi getpid(); dan getppid(); . jangan lupa gunakan typecast untuk merubah return valuenya menjadi integer. Kurang lebih seperti ini:
========================================================================printf(“PID=%d”,(int)getpid());
========================================================================

2. PROCESS SPAWNING

Tadi anda membaca istilah “men-spawn” process, atau memanggil process lainnya. Sekarang penulis akan menjelaskan bagaimana sebuah process men-spawn process lainnya. Terdapat 3 cara, yaitu :

System Call Fork

system call fork adalah sebuah fungsi yang digunakan untuk menduplikasi suatu process, misal ada sebuah process “A” yang melakukan fork, maka process “A” akan men-spawn process “A”(anak) juga (dengan PID yang berbeda tentunya).cara menggunakannya adalah
=================
pid_t cpid;
cpid=fork();
=================
cpid(singkatan untuk child pid) akan berisi PID dari process “A”(anak).bila PID>0 maka fork berhasil dan nilainya adlaah PID dari anaknya. Bila PID=0 berarti fork dijalankan di process anak (karena process anak sama dengan process parent maka ia pasti akan melakukan fork juga, namun karena posisinya sebagai anak maka fork nya tidak dijalankan, sehingga return value nya 0), bila return nya kurang dari 0 maka fork gagal karena beberapa alasan, salah satunya kehabisan memory.

System Call Exec Family

System call exec adalah sekumpulan fungsi yang digunakan untuk mengganti process yang sedang berjalan dengan process yang lain. Misal anda menjalankan process “A” dan meng-exec-nya menjadi process B. maka process A tadi akan dirubah menjadi process “B”, namun karena process tersebut hanya dirubah, maka PID akan tetap(pid nya tetap pid A).
ada banyak cara menggunakan exec, contohnya execv, execvp, dan lain lain, berikut penulis lampirkan situs yang sebaiknya anda baca:
a.) tentang keluarga exec:
b.) cara menggunakan execvp
Biasanya, bila suatu process ingin melakukan spawn process baru, ia akan melakukan fork() dahulu, untuk membuat “anak process”, lalu akan mengganti kerja dari anak process tersebut menjadi process yang dikehendaki dengan exec family. Bila butuh penjelasan lebih lanjut silahkan baca:

Fungsi “system”

fungsi system adalah cara yang paling gampang, anda tinggal menulis system(“X”) dengan X diganti menjadi process yang ingin dijalankan. Namun process ini sangat buruk dari sisi komputer. Berikut adalah sedikit kerja yang dilakukan komputer bila anda menggunakan fungsi system:
a.mensuspend program anda
b.memanggil operating system
c.membuka OS Shell (menjalankan OS baru didalam OS asli anda)
d.sekarang OS baru teserbut harus mencari program X untuk dijalankan
e.mengalokasikan memory untuk process X
f.mengeksekusi process X
g.dealokasi memory
h.menutup OS Baru tadi
i.melanjutkan program anda
jadi ibaratnya, kalau anda menggunakan fork-exec adalah anda pergi ke toko, membeli kompor untuk memasak indomie di rumah, maka pemanggilan fungsi system ini seperti membuat rumah baru lalu membakar rumah anda untuk memasak indomie tadi. Memang sama sama hasilnya tercapai (memasak indomie) namun sangat boros resource, selain itu antivirus membenci fungsi system karena boros resource dan tidak aman(pemanggilan process di OS baru berarti seperti memberikan kernel previlage pada process tsb), ibaratnya bila anda membakar rumah pasti ada polisi datang, walau anda tidak ditangkap tapi pasti ada keributan yang terjadi (menunggu antivirus berjalan, dan melakukan pekerjaannya).maka dari itu biasakanlah menggunakan fork-exec.
Exec dan fork membutuhkan #include <unistd> dan system membutuhkan #include <stdlib.h>. beda dari system call dengan fungsi system adalah:system call berarti menjalankan suatu fungsi dari system, sedangkan system adalah memanggil system baru dan menjalankan fungsi didalam system baru tersebut.

SIGNALS

adalah sebuah event yang dikirimkan oleh sebuah proces ke process itu sendiri atau process lain yang digunakan untuk notifikasi bahwa terjadi suatu event. Contoh beberapa signal terkenal yaitu:
1.) SIGKILL (membunuh process secara paksa)
2.)SIGTERM (mengirim request untuk membunuh process)
3.)SIGSEGV (Signal segmentation violation, error pada memory akses, biasanya ingin mengakses memory yang bukan hak nya)
4.)SIGSTOP (men-stop/pause suatu process)
5.)SIGCONT(meng-contintue suatu process yg di stop)
6.)SIGINT (Interrupt suatu process, contohnya ketika ada input dari keyboard.
Cara mengirimkannya ada 2 cara, bisa dengan syntax
=====
Kill –[SIGNAL] pid
====
Dengan [SIGNAL] diganti signal apa yang dikirim(SIGKILL, SIGSEGV,SIGTERM) dan pid adalah pid dari process tujuan(yang mau kita kirimin signalnya)
Bisajuga dengan system call kill(pid_t pid,int sig);, dengan pid adalah pid dari tujuan signal dan dengan sig adalah padanan angka dari signal, contohnya padanan dari SIGKILL adalah 9. Sebagai tambahan, bila menggunakan cara pertama bisa dengan “cara kill -9 pid” untuk mengirim signal SIGKILL. Pengiriman signal membutuhkan header file #include <sys/types.h> dan #include <signal.h>.

WAIT

Ketika sebuah process memanggil process baru(anak) maka process parent tersebut bisa menunggu(di block) sampai process anak selesai dengan fungsi wait. fungsi wait membutuhkan header file #include <sys/types.h> dan #Include <sys/wait.h>
Cara melakukannya adalah dengan cara:
===
int status;
pid_t temp;
temp=wait(&status);
===
Dengan temp adalah pid dari anak yang selesai, masalahnya adalah bila ada banyak process dan kita hanya ingin menunggu selesainya sebuah process spesifik, maka kita tidak bisa menggunakan wait() (sebenarnya bisa namun dengan cara yang agak panjang), namun cara mudahnya adalah dengan menggunakan waitpid,syntaxnya adalah
=============
Int temp = waitpid(pid_t cpid, int *status, int option);
=============
dengan cpid adalah pid dari child yang ingin ditunggu, status tidak perlu dipedulikan, dan option adalah option dari waitpid(anda bisa membuka man waitpid untuk melihat optionnya.), return dari waitpid(ditampung dalam variabel temp) adalah pid dari child yang berubah(bernilai sama dengan cpid),atau -1 bila error.

0 komentar:

Kontrol Proses Sistem Operasi


77777

Operating system bisa dikatakan sebuah process yang mengatur penggunaan resources oleh process lainnya. Seperti pada gambar 3.10 diatas OS mengatur P1(Process 1) menggunakan CPU dan I/O 1 dan 2, sedangkan P2 menggunakan I/O 3. P2 sebenarnya ingin mengakses I/O 1 tapi karena sedang digunakan oleh P1 maka P2 harus mengantri kembali lagi ke awal,
OS adalah process yang mengatur penggunaan resource oleh process lain, sehingga ia butuh list process apa menggunakan resource apa, maka dibuatlah OS Control Table.

8

OS Control Table terdiri dari:

1. Memory Table

Digunakan untuk mencatat perubahan-perubahan di memory baik fisik maupun virtual.
Berisi alokasi main dan secondary memory kepada process, selain itu juga ada proteksi memory. Dan juga ada informasi tentang virtual (secondary) memory. Virtual sama dengan secondary karena swap dan pagefile.

Informasi-informasi yang ada pada memory table antara lain :
  1. Alokasi main memory ke proses
  2. Alokasi memory sekunder ke proses
  3. Atribut tertentu pada blok tertentu di memory
  4. Informasi-informasi tentang virtual memory

2. I/O Table

Digunakan untuk mengatur pembagian akses I/O devices kepada proses.

3. File Table

Digunakan untuk mengatur pembagian akses file.
File Table juga digunakan untuk alokasi File kepada process, namun karena file ini biasanya berada dialam memory maka file table juga berisi alamat lokasi file tersebut di memory.
Terdiri dari :
  1. Keberadaan file
  2. Lokasi file di memory
  3. Status

4. Process Table

Menyimpan informasi mengenai setiap proses yang ada.
Terdiri dari :
  1. PID (Process ID)
  2. Process State
  3. Lokasi proses di memori (untuk yang biasa menggunakan bahasa C++ mungkin lebih familiar dengan istilah “Pointer to Process image(yang berisi PCB=Process Control Block, stack, data, dll))
Setiap proses memiliki process image-nya sendiri-sendiri. Process image terletak pada blok memori yang kontinyu.

5. Process Image


Process Image terletak pada blok memori yang kontinu. Setiap proses memiliki process image-nya sendiri-sendiri yang terdiri dari :

  1. Process Control Block
  2. User Data
  3. Stack
Mode pengeksekusian Proses Control

  1. User Mode (Less-privileged mode, tempat user program berjalan )
  2. System Mode, Control Mode, atau Kernel Mode (More-privileged mode)
Process Creation dan Mode Switching
Proses tentunya perlu juga untuk dibuat dan kadang juga perlu untuk dirubah modenya. Berikut adalah langkah-langkah untuk membuat sebuah proses :
  1. Memberi ID yang unik pada proses baru
  2. Mengalokasikan ruang untuk proses baru
  3. Membuat Process Control Block
  4. Memasukkan dalam queue
  5. Membuat data-data lain yang 
Berikut adalah langkah-langkah Mode Switching atau perubahan state pada proses:
  1. Simpan isi dari prosesor
  2. Update isi PCB (Process Control Block)
  3. Pindahkan PCB ke queue yang sesuai
  4. Pilih proses lain yang akan dieksekusi
  5. Update PCB dari proses itu
  6. Update struktur data dari manajemen memori
  7. Kembalikan isi dari prosesor

0 komentar:

Process State/ Status Proses

Process State adalah status dari proses, apakah proses tersebut sedang dieksekusi, suspend, block atau sudah release. Secara mendasar, Process State dibagi menjadi 5 state, yaitu :
  • New, State dimana proses dibuat
  • Ready, State dimana proses sudah memiliki resource yang dibutuhkan untuk dijalankan, tetapi CPU belum mengeksekusi proses ini
  • Running, State dimana proses dieksekusii oleh CPU
  • Waiting/Blocked, State dimana proses tidak dijalankan untuk sementara karena suatu hal seperti menunggu resource yang dibutuhkan, input user, atau event lainnya yang membuat proses ini tidak dapat dijalankan untuk sementara.
  • Terminated/Exit, State dimana proses telah selesai.



























Pembuatan dan Penghentian sebuah Proses

Pembuatan Proses
  • Sistem Operasi membangun suatu struktur data untuk mengelola proses tersebut
  • Biasanya, semua proses dibuat oleh Sistem Operasi. Tetapi Sistem Operasi juga membolehkan proses yang sedang berjalan membuat proses lain.
Penghentian Proses

Harus ada cara yang dapat menandakan bahwa suatu proses selesai. Cara-cara tersebut dapat berupa:
  • Instruksi HALT membangkitkan suatu interupsi alert untuk SO
  • Aksi pengguna (seperti log off & keluar dari suatu aplikasi)
  • Suatu kesalahan atau error
  • Dihentikan oleh proses induk
Suspended State

Dikatakan suspended state karena sebuah proses terlalu lama menunggu "momen" ntuk berjalannya sebuah proses (menunggu proses yang lain selesai berjalan). Untuk kasus seperti ini, proses tersebut dipindahkan ke secondary memory.

Alasan lain mengapa process suspended:
  • Swapping
  • Interactive User Request (jarang terjadi)
  • Timing
  • Parent Process Request

5555

Dari gambar diatas terlihat bahwa “Ready Queue” adalah antrian process yang akan dibawa ke processor untuk di “run”. Pada saat process berada di process, maka “State” nya adalah “Running” sedangkan ketika berada di queue, yaitu yang sedang menunggu untuk di “run”, adalah “Not Running”.

Sebelum sebuah process dimulai, tentunya ada sebuah event yang memulai process tersebut. Selain itu setelah process di-run, ada 2 kemungkinan, yaitu process belum selesai dan dikembalikan ke queue atau selesai dan di terminate. Jadi sekarang ada 2 istilah baru yaitu “start” dan “Termination”, berikut adalah beberapa sebab program di start atau di terminate:

Start: New Batch Job, Interactive Login, Created by OS, or Spawned by Existing Process.
Termination: Normal Completion, Memory Unavailable, Protection Error, Operator or OS Intervention.

666666

Jadi ketika process dijalankan(karena salah satu alasan yang telah disebutkan diatas) program tersebut akan dimasukkan ke ready queue, yang nantinya akan di-dispatch dan di run, lalu exit bila selesai. Namun 2 kotak lagi yaitu suspend dan blocked, apa itu?

Blocked adalah ketika sebuah process menunggu sebuah event, bisa itu menunggu input dari user, menunggu signal dari process/komputer lain, dan beberapa alasan lainnya. Supaya tidak memenuhi ready queue – yang nantinya akan di run dan langsung dikembalikan ke queue karena belum terjadi event yang diinginkan – ia akan dimasukkan kedalam state blocked, state bocked ini akan dicabut ketika event yang diinginkan terjadi.

Sedangkan suspend adalah ketika data sebuah process dipindah ke secondary memory (di “Swap” pada linux atau “Page” pada Windows”, inilah guna alokasi “swap” dan “pagefile” :) ) sampai dia diputuskan untuk di kembalikan ke main memory. Suspend/blocked adalah ketika process yang sedang di block yang dipindah ke secondary memory. Sedangkan ready/blocked adalah process ready yang dipindah ke secondary memory. Suspend ini bisa dilakukan karena swapping (memory penuh) atau bisa juga karena permintaan user, dan timing. Yang dimaksud timing adalah ketika program sudah terlalu lama di block(menunggu event) sehingga ia dipindah ke secondary memory. Bisa juga karena process ketika di “start” sedangkan dari main memory tidak cukup tempat. Sehingga ia ditaruh di secondary memory dulu dan OS akan mencari process di main memory yang nantinya akan di “swap” dengan process ini.

Sebuah process yang selesai tapi terdapat bug didalamnya bisa mengakibatkan termination error, sehingga processor mengenali process tersebut sudah mati namun datanya masih ada di memory. Hal seperti ini disebut Zombie Process.

Mereview tulisan saya diatas, jadi sebuah process pertama tama akan di “start”, process ini akan diberi PID, lalu akan dialokasikan tempat(di main memory bila cukup, bila tidak akan dialokasikan di secondary memory), lali dibuatka PCB(=Process Control Block), lalu diberi state “Ready”, dimasukkan kedalam queue. Lalu di dispatch untuk di process.
Dispatch adalah program yang mengirim instruksi untuk dikirim ke processor dan men switch ketika timeout/selesai. Kerja dispatch adalah menyimpan isi register processor untuk mengupdate PCB, lalu menaruh PCB tersebut kembali ke queue, lalu mengambil process lain untuk dieksekusi, copy data(yang dibutuhkan) dari PCB ke register, lalu biarkan processor bekerja, lalu kembali menyimpan isi processor untuk mengupdate PCB.

1 komentar:

Proses pada Linux

Proses adalah sebuah program yang sedang dieksekusi. Setiap kali menjalankan suatu program, sistem UNIX melakukan suatu fork, yaitu melakukan beberapa urutan operasi untuk membuat suatu proses konteks dan kemudian mengeksekusi program tersebut dalam konteks yang sudah dibuat. Oleh karena itu, kita harus menguasai manajemen proses Linux. 

Dalam proses terdapat:
1. Process ID (PID)
2. Data (variabel, stack, dll)
3. Status Proses (State), mendeskripsikan status dari suatu proses
4. Priority
5. dll
Hal ini disebut Process Control Block (PCB)


2222
1111


Kita dapat mendeskripsikan bagaimana sebuah process berjalan dengan melihat list instruksi apa saja yang dilakukan oleh process tersebut, list instruksi ini disebut sebagai sebuah Trace, Sebagai contoh gambar 3.3 ini adalah ilustrasi 3 buah trace

333333


Nah pada gambar 3.3 diatas kita memiliki 3 buah trace dari 3 buah process yaitu process A, B dan C. sekarang kita akan mengirimkannya ke processor untuk dieksekusi.

Dalam gambar 3.2 terlihat ada 3 buah process yaitu process A, B dan C. dan ada 1 process kecil yaitu Dispatcher, dispatcher adalah program milik Operating System yang bertugas untuk mengirim instruksi – instruksi dari process menuju processor. Dispatcher juga bertugas untuk  men-switch sebuah process menjadi process yang lain(untuk dikirim ke processor untuk diproses), hal ini berguna untuk mencegah sebuah process memonopoli resources processor. Dalam gambar 3.4 kita akan melihat bagaimana semua ini terjadi dari sudut pandang Processor.

44444

Penjelasan gambar: Pertama-tama komputer akan menjalankan instruksi dari process A, lalu diambil alih oleh process Dispatcher karena time out. Yang dilakukan oleh process dispatcher (pada gambar processnya di shade) adalah mengirim state data (variable, stack, dll) didalam register kembali ke main memory, lalu mengcopy instruksi process B dan state datanya ke register processor, lalu memberikan processor ke process B. pada saat yang bersamaan, Process A akan kembali ke queue “Ready Process” untuk mendapat gilirannya diproses kembali. Hal ini diulang terus untuk semua process.

Penjelasan diatas adalah murni permisalan yang sudah di-simplified. Perlu diketahui bahwa pada kenyataanya sebuah process tidak pasti di timeout setelah 6 instruksi, dan sebelum process A sebenarnya didahului oleh process dispatcher yang digunakan untuk mengirim process A untuk diprocess, well anda pasti tahu maksud saya.

Dispatcher sebenarnya melakukan “switch”, yang salah satu alasannya adalah karena timeout (timeout ->switch…jika timeout maka switch…matematika diskrit), adapun alasan lainnya yaitu process selesai ataupun karena permintaan dari OS.



Dalam manajemen proses, ada beberapa hal penting yang harus dikuasai :
1. Mengetahui proses yang terjadi Linux
2. Dapat melakukan proses controlling terhadap proses di Linux
3. Menghentikan proses yang tidak dibutuhkan dan mengurangi performa Linux

Untuk itu kita harus mempelajari Manajemen Proses pada Linux. Perintah inti dari proses manajemen proses di Linux adalah :
1. ps
2. kill

Tipe-tipe Proses dalam Linux

Dibagi menjadi tiga bagian:

Interactive : Proses yang diprakarsai oleh sebuah shell dan berjalan dalam foreground dan background. seperti : terminal, software running, dll.

Batch : Sebuah seri dari proses-proses yang dijadwalkan untuk dieksekusi pada suatu waktu tertentu, proses batch ini juga tidak berhubungan dengan terminal, tapi menunggu dieksekusi secara sekuensial.

Daemon : Proses yang diinisialisasi saat booting untuk membentuk suatu fungsi-fungsi sistem yang dibutuhkan, bila tidak ada request maka akan berada pada keadaan idle, seperti : LPD, NFS, dan DNS.


Identitas Proses

Berikut adalah beberapa identitas dari Proses yang ada di Linux :

1. PID ( Proccess ID ) 
adalah pengenalan unik suatu proses, dimana digunakan untuk menentukan proses-proses mana yang di bawa saat suatu aplikasi dijalankan atau melakukan proses pengiriman signal, mengubah, dan menunggu proses lainnya. PID sendiri merupakan bilangan 32 bit yang dibatasi oleh Linux dari range 0-32767 untuk menjamin kompatibilitas dengan UNIX tradisional.

2. Credentials ( Mandat )
adalah Pengaturan akses yang dipengaruhi oleh User ID dan Group ID. Jadi kita dapat mengatur hak akses atau Credetials setiap user, group, dll.

3. Personality
adalah sebuah hal yang cukup jarang ditemukan dalam sistem UNIX, namun sangat berpengaruh dalam proses system call dan pengiriman signal dari suatu aplikasi.

Status Proses yang dikenali dalam Linux

1. Task Running : Proses yang siap untuk dieksekusi CPU
2. Task Interruptable : Proses yang menunggu sebuah kondisi. Interupsi, Sinyal dan aktifitas lain akan mem
bangunkan proses.
3. Task Uninterruptable : Proses yang sedang sleep, dan tidak dapat di interrupt oleh signal.
4. Task Stopped : Proses yang dihentikan
5. Task Zombie : Proses telah berhenti, namun masih memiliki struktur data di task_struct di task
vektor dan masih memegang sumber daya yang tidak digunakan lagi.

Trace & Dispatcher
Trace: adalah daftar urutan intruksi yang harus dijalankan
Dispatcher: bertugas menyeleksi sekumpulan trace yang mana yang harus dijalankan.

Eksekusi Proses


Ada tiga proses yang sedang berjalan. Semuanya berada di main memory

Sudut pandang proses:
Trace Process A : 5000, 5001, 5002, dst
Trace Process B : 8000, 8001, dst
Trace Process C : 12000, 12001, 12002, dst

Sudut pandang processor:
Melihat timeout (masing-masing proses mendapatkan jatah waktu)
Setiap pergantian proses, dispatcher berjalan kemudian berganti ke proses yang lain 

1 komentar:

User dan Group pada Linux

Terdapat dua macam user pada Linux yaitu root (administrator) dan user biasa. User root hanya bisa satu di dalam suatu Sistem Operasi Linux. Root berlaku sebagai super admin yang memiliki hak penuh di dalam Sistem Operasi Linux, sedangkan user biasa memiliki hak akses terbatas dan bisa lebih dari satu user.


1. Perintah dasar untuk pengaturan User

ADDUSER/USERADD

Perintah untuk membuat user account baru yang tidak terdapat pada sistem
wicakson@wicakson-K46CM:~$ adduser [-option] [namauser]
option yang bisa digunakan :
-u : nomor identitas user (UID)
-g : nomor identitas group (GID)
-d : menentukan path home direktori user secara manual
-s : shell yang akan digunakan user
-c : komentar tentang user
option diatas sifatnya optional
contoh :
wicakson@wicakson-K46CM:~$ adduser okey
setelah kita melakukan perintah diatas user okey sudah terdaftar di sistem tapi belom bisa digunakan karena kita blom memberikan password untuk user okey, cara memberikan password

PASSWD

Perintah yang digunakan untuk mengubah password user yang terdapat pada sistem
wicakson@wicakson-K46CM:~$ passwd [namauser]
contoh :
wicakson@wicakson-K46CM:~$ passwd okey
setelah di berikan password user okey sudah bisa digunakan. Biasanya pada distro tertentu contohnya pada Ubuntu 12.10 yang saya gunakan saat kita membuat user langsung ditunjukan untuk membuat password tanpa perlu mengetikan PASSWD. Coba lihat gambar di bawah ini

USERMOD

Perintah yang digunakan untuk memodifikasi user acount yang ada pada sistem linux
wicakson@wicakson-K46CM:~$ usermod [-option] [namauser]
option yang dapat digunakan :
-L : mengunci password user
contoh :
wicakson@wicakson-K46CM:~$ usermod -d /tmp/backup okey

USERDEL

Perintah untuk menghapus user yang ada pada sistem
wicakson@wicakson-K46CM:~$ userdel [-option] [namauser]
contoh :
wicakson@wicakson-K46CM:~$ userdel -r okey

2. Perintah dasar untuk pengaturan Group

Group digunakan untuk mengelompokan banyak user yang memiliki persamaan kedalam suatu kelompuk, group biasa diguankan untuk mempermudah penanganan user, terutama untuk masalah keamanan

GROUPADD

Perintah untuk membuat group baru
wicakson@wicakson-K46CM:~$ groupadd [-option] [namagroup]
contoh :
wicakson@wicakson-K46CM:~$ groupadd -g 100 sounix

GPASSWD

Perintah untuk menambahkan user ke dalam group atau menghapus user dari dalam group
wicakson@wicakson-K46CM:~$ gpasswd -a [namauser] [namagroup] -> menambahkan user kedalam group
wicakson@wicakson-K46CM:~$ gpasswd -d [namauser] [namagroup] -> menghapus user dari dalam group
contoh :
wicakson@wicakson-K46CM:~$ gpasswd -a okey sounix
wicakson@wicakson-K46CM:~$ gpasswd -d okey sounix

GROUPMOD

Perintah untuk memodifikasi group account yang ada di sistem
wicakson@wicakson-K46CM:~$ groupmod [-option] [namagroup]
contoh :
wicakson@wicakson-K46CM:~$ groupmod -g 999 sounix

GROUPDEL

Perintah untuk menghapus suatu group dari sistem
wicakson@wicakson-K46CM:~$ groupdel [namagroup]
contoh :
wicakson@wicakson-K46CM:~$ groupdel sounix

0 komentar:

Wget Command pada Linux

Apa itu wget?
Pada Linux, kita bisa mengunduh atau mendownload file tidak hanya menggunakan aplikasi downloader seperti wget, downloader bawaan browser, atau aplikasi downloader yang lain. Kali ini yang akan saya bahas disini adalah download file melalui terminal linux menggunakan wget.

Keuntungan dari download file menggunakan wget pada terminal linux adalah sebagai berikut:
Gratis
Non-Graphic Interface
Resume
Mirroring
Dukungan ekstensi file

Install wget : apt-get install wget

Cek wget 
Bila anda masih belum mengetahui apakah paket wget telah terpasang dalam Linux anda, bisa anda cek dengan perintah berikut ini.
Management paket .deb
dpkg -l | grep wget
Management paket .rpm
rpm -qa | grep wget


Wget melalui proxy
export http_proxy=http://proxy_host:proxy_port
wget  http://url-website/file

Wget melalui proxy berpassword
export http_proxy=http://username:passwrod@proxy_host:proxy_port
wget  http://url-website/file

Contoh Command Wget pada Linux

1.Download secara langsung:
wget http://url-website/file

2.Jika download telah gagal, kita bisa menambahkan opsi -c untuk memulai melanjutkan download file yang sudah didownload sebelumnya:
wget -c http://url-website/file

3.Mendownload seluruh isi dari sebuah website dengan opsi -r:
wget -r http://url-website/file

4.Mirorring dengan opsi -m:
wget -m http://url-website/file

5.Download pada background atau proses download tidak ditampilkan menggunakan opsi -b:
wget -b http://url-website/file

6.Download pada situs yang tidak mengizinkan download manager menggunakan opsi -U:
wget -U http://url-website/file

7.Download file dengan ekstensi tertentu, misal mp3, jpg, dan lain-lain:
wget -r -A ektensi-file http://url-website/

8.Download subfolder yang ada dalam sebuag website tanpa harus mengunduh file induknya:
wget -r –no-parent http://url-website/mainfolder/sub-folder

9.Download file yang sudah dilist apa saja yang akan diunduh nantinya:
wget -i nama_file.txt

10.Membatasi kecepatan download menggunakan opsi –limit-rate:
wget –limit-rate=kecepatan-download http://url-website/file

11.Memilih tingkat download kedalam sebuah situs dengan menggunakan opsi -l.
wget -ltingkat-level http://url-website/

12.Download file lalu merenamenya dengan nama berbeda menggunakan opsi -O.
wget -O http://url-website/

13.Download file, jika koneksi terputus maka akan mencoba menyambungkannya lagi terus menerus menggunakan opsi -t inf.
wget -t inf http://url-website/

Wget HTTP Options :
http://www.gnu.org/software/wget/manual/wget.html#HTTP-Options

salah satu commandnya adalah seperti di bawah ini
'--http-user=user’
‘--http-password=password’
Menentukan username user dan password password pada HTTP server.  


Wget FTP Options :
http://www.gnu.org/software/wget/manual/wget.html#FTP-Options

salah satu commandnya adalah seperti di bawah ini
‘--ftp-user=user’
‘--ftp-password=password’
Menentukan username user dan password password pada FTP server.  Tanpa ini, atau opsi startup yang sesuai, default password untuk '-wget @', biasanya menggunakan FTP anonymous. 

Cara lain untuk menentukan username dan password HTTP dan FTP adalah di URL itu sendiri (lihat URL Format). Masing-masing metode mengungkapkan password mu ke siapa saja yang menjalankan ps. Untuk mencegah password terlihat, simpanlah dalam .wgetrc atau .netrc, dan pastikan untuk melindungi file-file dari pengguna lain dengan chmod. Jika password benar-benar penting, jangan membiarkan mereka berbaring di file-file begitu saja edit dan hapus mereka setelah Wget telah memulai download.

Catatan:
Tulisan berwarna abu-abu seperti ini apt-get install wget bebrati diketik di command line linux.
Bila ingin mengetahui command-command wget pada linux lebih lengkap, bisa kunjungi website ini.

1 komentar: