Informatics Engineering Stuffs

a few words to explain everything

  • About this Site

    This is a premature site talking about Informatics Technology. I just want to share what I've got in learning Informatics. Please leave your comments and give me some critics.. Hope you pleased with my stuffs First before posting my stuffs, I'd like to introduce my self .. foto1
    Name : Rahadian Dustrial Dewandono
    Nick : Dewa
    Mail : gusdewa@gmail.com
    FB : fsdw@plasa.com
    YM : dewa_tc

    Education :
    1. SD Negeri Gedongan 1 Kota Mojokerto (1997-2002 )
    2. SMP Negeri 1 kota Mojokerto (2002 - 2005 )
    3. SMA Negeri 1 Sooko Kabupaten Mojokerto (2005-2008 )
    4. S1 Teknik Informatika Institut Teknologi Sepuluh Nopember (2008 - 2011)
    Hobby : Playing Guitar, Arranging my own music, Blogging, Reading Informatics Stuffs.. he3..

    My name is Rahadian Dustrial Dewandono, a dummy 18-year-old boy, 178 cm in height, 80kg in weight, browned-skinned, and originally Javanese-blooded. I’m an ordinary people. Here, I just wanna share what I can share.

    Born in the small city in the developing country Indonesia, I just can keep dreaming about my people and what will it be. I was dreaming that I can give some of what I have to help others needing people.

    In my college, I'm not only learning my subject but also learning how to behave in society. I will be a part of them so that I should be able to act to them..

Game FP – NEED FOR SPEED : Under Becak

Posted by dewa32 on 20 January 2009

Final Project Praktikum Pemrograman Terstruktur kemarin adalah Pembuatan Game Indie dengan menggunkan Game Library Allegro milik Dev C++. Kelompok Praktikum Pemrograman Terstrukturku kamarin membuat FP dengan judul, NEED FOR SPEED : UnderBecak.

NEED FOR SPEED : UnderBecak merupakan gabungan dari tiga genre game favorit, RPG, Racing, dan War Game. Meskipun game ini mempunyai kekhususan di genre racing, RPG dan WarGame-nya pun tidak kalah seru.

Lho?? Apa hubungannya RPG dan Racing??

RPG-nya sih gak terlalu RPG-RPG amat sih. Letak genre RPG pada game ini hanyalah saat dia berada di kota. Di kota itu terdapat tempat penginapan untuk menyimpan data, mengisi stamina dan waktu, berbagai macam toko untuk memmperoleh kebutuhan membecak, dan stasiun becak untuk memulai racing.

Letak WarGame pada game ini adalah pada saat kita dikejar polisi. Becak kita sangatlah canggih sehingga bisa melontarkan basoka ke arah depan. Jadi, kita tidak lagi takut jika melanggar aturan / menabrak sesuatu. Karena pada saat kita dikejar polisi, kita bisa melawannya dengan peluru yang masih tersedia di becak kita.

Pada saat racing game, game ini dilengkapi dengan :
Perpindahan Gear yang memungkinkan user untuk mengatur seberapa becak dikayuh

- System GPS yang menyediakan info secara grafik dimana letak becak dan polisi sekarang berada
- Indikator Speed : Menunjukkan seberapa cepat kita mengayuh becak kita
- Indikator Stamina : Menunjukkan tiggal berapa stamina pembecak kita
- Indikator NOS : Menunjukkan tiggal berapa NOS yang dapat kita gunakan
- Indikator Waktu : WARNING!! Jika waktu habis, maka player tidak bisa membecak lagi kecuali player tidur beberapa kali di penginapan
- Indikator Tertangkap : Menunjukkan persentase polisi dapat menangkap kita
- Indikator Jumlah Peluru : Menunjukkan tiggal berapa peluru yang dapat kita gunakan
Dan indikator – indikator lainnya

Racing pada game ini memiliki empat peta yang berukuran 800px X 12000px dan TIDAK DIULANG-ULANG!! Berbeda dengan game racing indie yang lainnya. Biasanya game indie sejenis ini (Racing atau WarGame) pasti menggunakan perulangan map. Hal ini pasti membuat pemain bosan dengan game tersebut karena map-mapnya statis. Map pada NEED FOR SPEED : UnderBecak ini dapat kami pastikan tidak membosankan. Map kami mempunyai belokan-belokan yang menantang para gamer sejati. Tidak hanya itu, map-map pada game ini sudah kami desain dengan beberapa tema : GoingToBeach (map 1), WelcomeInTheJungle(map 2), Jl Raya Arif Rahman Hakim dekat ITS (map 3), DesertVacation (map 4). Jadi, apa yang bisa membuat kebosannan dari map kami ?? He3..

Poin plus lainnya dari game ini adalah cerita pembukaan. Mayoritas dari game indie lainnya menggunkan hanya gambar yang diedit dengan photosop lengkap dengan kata-kata karakternya kemudian main load satu-satu. Hal itu merupakan pembohongan anak kecil. He3.. Kami tidak sedikitpun menggunakan cara seperti itu. Untuk cerita, kami kondisikan seperti halnya saat kita memainkan RPG pada game ini. Jadi, karakter RPG kita kami jalankan secara automatis kemudian berinteraksi dengan karakter-karakter lainnya. Oleh karena itu, scene cerita kami terlihat realistis.

Ya udah aku tidak terlalu banyak meninggi-ninggikan deskripsiku mengenai game ini, alangkah baiknya kalau teman-teman melihat screenshoot di bawah ini :

Klik gambar untuk memperbesarnya !!

Game ini bisa didapat di

http://www.indowebster.com/Game_FP_Semester_1_NeedForSpeed_UnderBecak.html

password : ini gamenya dewa

Posted in General, Pemrogaman Terstruktur | Tagged: , , , , , | 3 Comments »

GAME FP – Balbalan Evolution Soccer (TC CUP 2009 Edition)

Posted by dewa32 on 24 June 2009

Game FP ini diciptakan oleh Kelompok 22 FP PSD 2009:

Rahadian Dustrial Dewandono [5108100032] – Project Manager
Faris Budi Arifianto [5108100066] – Main Programmer
Rendi Budiman [5108100020] – Game Artist
Adila Putra [5108100094] – Software and Database Specialist

PENDAHULUAN

Sepak bola adalah Olah raga permainan yang paling favorit di seluruh dunia. Hampir semua kalangan masyarakat menyukai olah raga ini. mulai dari anak2, remaja, hingga orang tua semua menyukai. tidak pandang status sosial, mereka semua gemar sepak bola. kegemaran ini berbagai macam, ada yg gemar bermain ataupun hanya melihatnya saja.

Oleh karena olahraga ini sangat populer, maka di era modern ini telah banyak permainan video game yang menawarkan sepak bola. permainan sepak bola ini sangat digandrungi berbagai kalangan. seperti kita lihat di persewaan Playstation
mulai dari anak SD, SMP, SMA, Kuliah hingga orang yangg telah bekerja semua suka memainkannya.

Tidak heran jika sepak bola merupakan salah satu cabang olah raga yang dikompetisikan tiap tahunnya di Teknik Informatika di dalam ajang TC Cup. Jadi dalam rangka tc cup ini juga, maka kami terinspirasi untuk membuat game
“Balbalan Evolution to Soccer” sebagai Final Project, Praktikum Struktur Data kami.

DESKRIPSI GAME

Game ini merupakan game simulasi sepak bola dengan 5 player (futsal) 2D (kamera atas). Game ini dapat dimainkan dengan mode PLAYER vs PLAYER atau PLAYER vs AI.

Kami mengambil tema edisi TC Cup karena nama – nama tim dan pemain pada Game kami adalah nama – nama tim dan pemain yang mengikuti kompetisi TC Cup 2009, kecuali Despro dan Office.

Kami dapat memastikan bahwa game ini adalah satu – satunya game FP yang dibuat Mahasiswa Teknik Informatika ITS dan belum pernah ada sebelumnya. Jadi, game ini merupakan inovasi terbaru dalam pembuatan game FP Praktikum Stuktur Data di Teknik Informatika ITS ini.

SCREENSHOT

Berikut adalah screenshot game FP kami :

Berkat semua keunggulannya, Game ini merupakan Game Final Project terbaik Praktikum Struktur Data 2009.

Penasaran mau coba ?? Sabar. . . Link download akan segera saya share..

Posted in General, Pemrogaman Terstruktur | Tagged: , , , , , | 9 Comments »

Struktur Data – Linked List

Posted by dewa32 on 2 November 2009

Soal Pendahuluan

  1. Jelaskan perbedaan Linked List dengan Array dan sertai gambar permodelannya! Sebutkan keuntungan dan kerugiannya masin-masing struktur data tersebut!
  2. Berikan contoh kasus kapan sebuah Linked List lebih baik digunakan dan kapan sebuah Array lebih baik digunakan serta alasannya!
  3. Jelaskan dan pahami definisi Node, Single Linked List, Double Linked List, Single Circular Linked List dan Double Circular Linked List beserta gambar permodelannya!
  4. Jelaskan operasi dasar yang dimiliki oleh Linked List berikut :   (Data bertipe int dan dianggap unik setiap menambah node, key yang digunakan adalah nilai integer dari data itu sendiri)

    -          Node find(key)

    -          Node removeLast()

    -          void addFirst(data)

    -          Node remove(key)

    -          void addLast(data)

    -          boolean insertAfter(key,data)

    -          Node removeFirst()

    -          boolean insertBefore(key,data)
    dan sertai gambar permodelannya untuk setiap fungsi tersebut !

Pembahasan

    -          Linked List
    Merupakan suatu struktur data pengembangan dari konsep ADT (Abstrak Data Type) yang bersifat dinamis. Linked List dapat dimanfaatkan secara effektif sesuai dengan keperluan. Linked List juga dapat benar – benar dihapus / dibersihkan dari memory.Linked List sebenarnya merupakan suatu typedata tersendiri. Di bahasa Java, Linked List bisa berupa suatu Class ataupun Record. Ciri – ciri utama dari Linked List adalah, dia mempunyai minimal dua elemen utama. Elemen – elemen itu adalah data dan pointer untuk menunjukkan ke list berikutnya.-    ArrayArray berbeda dengan Linked List. Array merupakan suatu struktur data yang bersifat statis. Array harus dialokasikan terlebih dahulu di dalam memory sebelum kita memakainya.

    Perbedaan mendetail antara Array dan Linked List adalah sebagai berikut :

    Linked List Array
    -          Pengaksesan Dinamis-          Pengalokasian random pada alamat memory-          Dapat dibebaskan dari memory-          Tidak menggunakan konsep indexing

     

    -          Pengaksesan untuk searching /sorting lambat

    -          Pengaksesan Statis-          Pengalokasian berurut pada alamat memory-          Tidak dapat dibebaskan dari memory-          Menggunakan konsep indexing

     

    -          Pengaksesan untuk searching atau sorting cepat

    5.

    -    Linked List

    linkedlist1

    Kita akan lebih efektif jika kita menggunakan konsep Linked List jika kita memerlukan suatu pengaksesan pada struktur data yang lebih dinamis. Konsep yang lebih cocok menggunakan linked list adalah : Stack, Queue, Tree, dan Graph.

    Hal ini dikarenakan oleh sifat dinamis dari Linked List. Kita tidak perlu untuk mengetahui berapa block memory yang akan kita akses. Jadi, jika kita butuh block baru pada memory, tinggal menyisipkan pada kanan atau kiri list yang telah ada.

    -    Array

    array

    Kita dapat memanfaatkan secara efektif konsep array dengan mengenal metode indexing pada array. Array merupakan struktur data statis yang mempunyai index penomoran alamat variable array yang dimaksud. Jadi, secara umum, kita dapat mengaksesnya dengan lebih cepat.

    Konsep – konsep yang dapat memanfaatkan konsep indexing untuk mempercepat pengaksesannya adalah Sorting dan Searching.

    Hal ini dikarenakan oleh penomoran alamat variable pada memory yang telah diketahui terlebih dahulu. Jadi, semisal kita menginginkan mencari variable dengan indeks tengah, kita bisa langsung menujuk ke indeksnya.

    6.    -    Singly Linked List :

    single ll

    Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya dan juga memiliki field yang berisi data.

    Akhir linked list ditandai dengan node terakhir akan menunjuk ke null yang akan digunakan sebagai kondisi berhenti saat pembacaan linked list.

    -    Double Linked List :

    doouble ll

    Linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu: 1 field pointer yang menunjuk ke pointer berikutnya, 1 field pointer yang menunjuk ke pointer sebelumnya dan field yang berisi data dari node tersebut. Pointer next dan prev-nya menunjuk ke null.

    -    Single Circular Linked List :

    single cir ll

    Single Linked List yang pointer next-nya menunjuk ke dirinya sendiri, jika terdiri dari beberapa node maka pointer terakhirnya akan menunjuk ke pointer terdepannya.

    -           Double Circular Linked List :

    double cir ll

    Double Linked List yang pointer next dan prev-nya menunjuk ke dirinya sendiri secara circular.

    6.    a.  Node find(int key)

    Suatu method java untuk mencari sebuah nilai pada linkedlist. Algoritma dari Operasi dasar adalah sebagai berikut :

    Node find(int key){ if(now.data==key)return now;else

     

    { now=now.next;

    return (find(key));

    }

    }

    b. Void addFirst(int data)

    Method untuk membuat Node untuk pertama kali. Algoritma dari Operasi dasar adalah sebagai berikut :

    void addFirst(Node input){   if (isEmpty()){head = input;

     

    tail = input;

    }

    else

    {

    input.next = head;

    head = input;

    }

    }

    c.    Void addFirst(int data)

    Method untuk menambahkan list pada awal linked list. Algoritma dari Operasi dasar adalah sebagai berikut :

    void addLast(Node input){     if (isEmpty()){head = input;

     

    tail = input;

    }

    else

    {

    tail.next = input;

    tail = input;

    }

    }

    d.    Void romoveFirst()

    Method untuk menghapus list pertama. Algoritma dari Operasi dasar adalah sebagai berikut :

    void removeFirst(){   Node temp = head;if (!isEmpty()){ if (head == tail)

     

    head = tail = null;

    else

    {

    temp = temp.next;

    head = temp;

    temp = null;

    }

    }

    else

    System.out.println(“Data is empty!”);

    }

    e.    Void romoveLast()

    Method untuk menghapus list terakhir. Algoritma dari Operasi dasar adalah sebagai berikut :

    void removeLast(){Node temp = head;if (!isEmpty()){if (tail == head){

     

    head = tail = null;

    }

    else {

    while (temp.next != tail){

    temp = temp.next;

    }

    temp.next = null;

    tail = temp;

    temp = null;

    }

    }

    else System.out.println(“Data is empty!”);

    }

    e.    Void romove(int key)

    Method untuk menghapus list yang bersesuaian dengan kata kunci. Algoritma dari Operasi dasar adalah sebagai berikut :

    void remove(int key){ Node temp = head;if (!isEmpty()){

     

    while (temp != null){

    if (temp.next.data == key){

    temp.next = temp.next.next;

    break;}

    else if ((temp.data == key)&&(temp == head)){

    this.removeFirst();

    break;}

    temp = temp.next;}

    }

    else

    System.out.println(“Data is empty!”);

    }

    f.     void insertAfter(int key,int data)

    Method untuk menyisipkan list yang serada setelah list yang dimaksud oleh parameter kata kunci. Algoritma dari Operasi dasar adalah sebagai berikut :

    void insertAfter(int key,Node input){ Node temp = head;do{if (temp.data == key){

     

    input.next = temp.next;

    temp.next = input;

    System.out.println(“Insert data is succeed.”);

    break;

    }

    temp = temp.next;

    }while (temp!=null);

    }

    g.    void insertBefore(int key,int data)

    Method untuk menyisipkan list yang serada setelah list yang dimaksud oleh parameter kata kunci. Algoritma dari Operasi dasar adalah sebagai berikut :

    void insertBefore(int key,Node input){ Node temp = head;while (temp != null){ if ((temp.data == key)&&(temp == head))

     

    { this.addFirst(input);

    System.out.println(“Insert data is succeed.”);

    break;

    }

    else if (temp.next.data == key)

    { input.next = temp.next;

    temp.next = input;

    System.out.println(“Insert data is succeed.”);

    break;

    }

    temp = temp.next;

    }

    }

Posted in Struktur Data | Leave a Comment »

Manajemen Proses dan Thread

Posted by dewa32 on 28 October 2009

Definisi Proses

Proses merupakan program sedang dieksekusi. Menurut Silberschatz proses tidak hanya sekedar suatu kode program (text section), melainkan meliputi beberapa aktivitas yang bersangkutan seperti program counter dan stack. Sebuah proses juga melibatkan stack yang berisi data sementara (parameter fungsi/metode, return address, dan variabel lokal) dan data section yang menyimpan variabel-variabel global. Tanenbaum juga berpendapat bahwa proses adalah sebuah program yang dieksekusi yang mencakup program counter, register, dan variabel di dalamnya [MDGR2006]. Perbedaan antara program dengan proses adalah program merupakan entitas yang pasif, yaitu suatu file yang berisi kumpulan instruksi-instruksi yang disimpan di dalam disk (file executable), sedangkan proses merupakan entitas yang aktif, dengan sebuah program counter yang menyimpan alamat instruksi selanjut yang akan dieksekusi dan seperangkat sumber daya (resource) yang dibutuhkan agar sebuah proses dapat dieksekusi.

Status Proses

Proses yang dieksekusi mempunyai lima status yang terdiri dari:

a. new: Pembentukan suatu proses

b. running: Instruksi-instruksi yang sedang dieksekusi

c. waiting: Proses menunggu untuk beberapa event yang terjadi

d. ready: Proses menunggu untuk dialirkan ke pemroses (processor)

e. terminated: Proses telah selesai dieksekusi.

Process Control Block (PCB)

Setiap proses digambarkan dalam sistem operasi oleh sebuah process control block (PCB), juga disebut sebuah control block. PCB berisikan banyak bagian dari informasi yang berhubungan dengan sebuah proses yang spesifik, termasuk hal-hal di bawah ini:

• Status proses: status yang mungkin adalah new, ready, running, waiting, halted, dan seterusnya.

• Program counter: suatu penghitung yang mengindikasikan alamat dari instruksi selanjutnya yang akan dieksekusi untuk proses tersebut.

• CPU register: Register bervariasi dalam jumlah dan tipenya, tergantung pada arsitektur komputer. Register tersebut termasuk accumulator, index register, stack pointer, general-purposes register, ditambah informasi condition-code. Bersama dengan program counter, keadaan/status informasi harus disimpan ketika gangguan terjadi, untuk memungkinkan proses tersebut berjalan/bekerja dengan benar.

• Informasi manajemen memori: Informasi ini dapat termasuk suatu informasi sebagai nilai dari dasar dan batas register, tabel page/halaman, atau tabel segmen tergantung pada sistem memori yang digunakan oleh sistem operasi.

• Informasi pencatatan: Informasi ini termasuk jumlah dari CPU dan waktu nyata yang digunakan, batas waktu, jumlah account, jumlah job atau proses, dan banyak lagi.

• Informasi status I/O: Informasi termasuk daftar dari perangkat I/O yang di gunakan pada proses ini, suatu daftar berkas-berkas yang sedang diakses dan banyak lagi.

PCB hanya berfungsi sebagai tempat penyimpanan informasi yang dapat bervariasi dari proses yang

satu dengan yang lain.

Thread

Proses merupakan sebuah program yang mengeksekusi thread tunggal. Kendali thread tunggal ini hanya memungkinkan proses untuk menjalankan satu tugas pada satu waktu. Banyak sistem operasi modern telah memiliki konsep yang dikembangkan agar memungkinkan sebuah proses untuk mengeksekusi multi-threads. Misalnya user melakukan pekerjaan secara bersamaan yaitu mengetik dan menjalankan pemeriksaan ejaan didalam proses yang sama. 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 heavyweight process mempunyai thread tunggal yang berfungsi sebagai pengendali. Perbedaannya ialah proses dengan thread yang banyakmengerjakan lebih dari satu tugas pada satu satuan waktu.

Pada umumnya, perangkat lunak yang berjalan pada komputer modern dirancang secara multithreading. Sebuah aplikasi biasanya diimplementasi sebagai proses yang terpisah dengan beberapa thread yang berfungsi sebagai pengendali. Contohnya sebuah web browser mempunyai thread untuk menampilkan gambar atau tulisan sedangkan thread yang lain berfungsi sebagai penerima data dari network.

Terkadang ada sebuah aplikasi yang perlu menjalankan beberapa tugas yang serupa. Sebagai contohnya sebuah web server dapat mempunyai ratusan klien yang mengaksesnya secara concurrent. Kalau web server berjalan sebagai proses yang hanya mempunyai thread tunggal maka ia hanya dapat melayani satu klien pada pada satu satuan waktu. Bila ada klien lain yang ingin mengajukan permintaan maka ia harus menunggu sampai klien sebelumnya selesai dilayani. Solusinya adalah dengan membuat web server menjadi multi-threading. Dengan ini maka sebuah web server akan membuat thread yang akan mendengar permintaan klien, ketika permintaan lain diajukan maka web server akan menciptakan thread lain yang akan melayani permintaan tersebut [MDGR2006].

Keuntungan Thread

Beberapa keuntungan dari penggunaan thread adalah sebagai berikut:

a. Responsif. Aplikasi interaktif menjadi tetap responsif meski pun sebagian dari program sedang diblok atau melakukan operasi yang panjang kepada pengguna. Umpamanya, sebuah thread dari web browser dapat melayani permintaan pengguna sementara thread lain berusaha menampilkan gambar.

b. Berbagi sumber daya. Thread berbagi memori dan sumber daya dengan thread lain yang dimiliki oleh proses yang sama. Keuntungan dari berbagi kode adalah mengizinkan sebuah aplikasi untuk mempunyai beberapa thread yang berbeda dalam lokasi memori yang sama.

c. Ekonomis. Pembuatan sebuah proses memerlukan dibutuhkan pengalokasian memori dan sumber daya. Alternatifnya adalah dengan penggunaan thread, karena thread berbagi memori dan sumber daya proses yang memilikinya maka akan lebih ekonomis untuk membuat dan konteks penukaran thread. Akan susah untuk mengukur perbedaan waktu antara proses dan thread dalam hal pembuatan dan pengaturan, tetapi secara umum pembuatan dan pengaturan proses lebih lama dibandingkan thread. Pada Solaris, pembuatan proses lebih lama 30 kali dibandingkan pembuatan thread, dan konteks penukaran proses lima kali lebih lama dibandingkan konteks penukaran thread.

d. Utilisasi arsitektur multiprocessor. Keuntungan dari multithreading dapat sangat meningkat pada arsitektur multiprocessor, dimana setiap thread dapat berjalan secara pararel di atas processor yang berbeda. Pada arsitektur processor tunggal, CPU menjalankan setiap thread secara bergantian tetapi hal ini berlangsung sangat cepat sehingga menciptakan ilusi pararel, tetapi pada kenyataannya hanya satu thread yang dijalankan CPU pada satu-satuan waktu (satusatuan waktu pada CPU biasa disebut time slice atau quantum).

Model Multithreading

Dukungan thread disediakan pada tingkat user yaitu user threads atau tingka kernel untuk kernel threads. User Threads disediakan oleh kernel dan diatur tanpa dukungan kernel, sedangkan kernel therads didukung dan diatur secara langusng oleh sistem operasi. Hubungan antara user threads dan kernel threads terdiri dari tiga model relasi, yaitu:

Model Many to One: Model Many-to-One memetakan beberapa thread tingkatan pengguna ke sebuah thread tingkatan kernel. Pengaturan thread dilakukan dalam ruang pengguna, sehingga efisien. Hanya satu thread pengguna yang dapat mengakses thread kernel pada satu saat. Jadi, multiple thread tidak dapat berjalan secara paralel pada multiprocessor. Thread tingkat pengguna yang diimplementasi pada sistem operasi yang tidak mendukung thread kernel menggunakan model Many-to-One.

Model One to One: Model One-to-One memetakan setiap thread tingkatan pengguna ke thread kernel. Ia menyediakan lebih banyak concurrency dibandingkan model Many-to-One. Keuntungannya sama dengan keuntungan thread kernel. Kelemahannya model ini ialah setiap pembuatan thread pengguna memerlukan pembuatan thread kernel. Karena pembuatan thread dapat menurunkan kinerja dari sebuah aplikasi maka implmentasi dari model ini, jumlah thread dibatasi oleh sistem. Contoh sistem operasi yang mendukung model One-to-One ialah Windows NT dan OS/2.

Model Many To Many: Model ini me-multipleks banyak thread tingkatan pengguna ke thread kernel yang jumlahnya lebih sedikit atau sama dengan tingkatan pengguna. thread. Jumlah thread kernel spesifik untuk sebagian aplikasi atau sebagian mesin. Many-to-One model mengizinkan developer untuk membuat user thread sebanyak yang ia mau tetapi concurrency (berjalan bersama) tidak dapat diperoleh karena hanya satu thread yang dapat dijadwal oleh kernel pada suatu waktu. One-to-One menghasilkan concurrency yang lebih tetapi developer harus hati-hati untuk tidak menciptakan terlalu banyak thread dalam suatu aplikasi (dalam beberapa hal, developer hanya dapat membuat thread dalam jumlah yang terbatas). Model Many-to-Many tidak mengalami kelemahan dari dua model di atas. Developer dapat membuat user thread sebanyak yang diperlukan, dan kernel thread yang bersangkutan dapat bejalan secara paralel pada multiprocessor. Dan juga ketika suatu thread menjalankan blocking system call maka kernel dapat menjadwalkan thread lain untuk melakukan eksekusi. Contoh sistem operasi yang mendukung model ini adalah Solaris, IRIX, dan Digital UNIX.

Persoalan dalam Thread

System Calls fork() dan exec()

Terdapat dua kemungkinan dalam sistem UNIX jika fork dipanggil oleh salah satu thread dalam proses:

a. Semua thread diduplikasi.

b. Hanya thread yang memanggil fork.

Jika suatu thread memanggil System Call exec maka program yang dispesifikasi dalam parameter exec, akan mengganti keseluruhan proses termasuk thread. Penggunaan dua versi dari fork di atas tergantung dari aplikasi. Kalau exec dipanggil seketika sesudah fork, maka duplikasi seluruh thread tidak dibutuhkan, karena program yang dispesifikasi dalam parameter exec akan mengganti seluruh proses. Pada kasus ini cukup hanya mengganti thread yang memanggil fork. Tetapi jika proses yang terpisah tidak memanggil exec sesudah fork maka proses yang terpisah tersebut hendaknya menduplikasi seluruh thread.

Pembatalan Thread

Pembatalan thread merupakan penghentian tugas sebelum prosesnya selesai, sebagai contoh dalam web page, pemanggilan suatu gambar menggunakan beberapa thread. Jika penggambaran belum sempurna sedangkan user menekan tombol stop, maka seluruh penggambaran oleh tiap-tiap thread tersebut akan dibatalkan secara kesuluruhan. Pembatalan suatu thread dapat terjadi dalam dua skenario yang berbeda, yaitu:

a. Asynchronous cancellation: suatu thread seketika itu juga memberhentikan target thread.

b. Deferred cancellation: target thread secara perodik memeriksa apakah dia harus berhenti, cara ini memperbolehkan target thread untuk memberhentikan dirinya sendiri secara berurutan. Kejaidan yang sulit dari pembatalan suatu thread adalah ketika terjadi situasi dimana sumber daya sudah dialokasikan untuk thread yang akan dibatalkan. Selain itu kesulitan lain adalah ketika thread yang dibatalkan sedang meng-update data yang ia bagi dengan thread lain. Hal ini akan menjadi masalah yang sulit apabila menggunakan asynchronous cancellation. Sistem operasi akan mengambil kembali sumber daya dari thread yang dibatalkan namun seringkali sistem operasi tidak mengambil kembali seluruh sumber daya dari thread tersebut. Alternatifnya adalah dengan menggunakan deffered cancellation. Cara kerja dari deffered cancellation adalah dengan menggunakan satu thread yang berfungsi sebagai pengindikasi bahwa target thread akan dibatalkan. Tetapi pembatalan hanya akan terjadi jika target thread telah memeriksa apakah ia harus batal atau tidak. Hal ini memperbolehkan thread untuk memeriksa apakah ia harus berhenti pada titik tersebut secara aman.

Penanganan Sinyal

Sinyal yang digunakan pada sistem UNIX untuk memberitahukan sebuah proses kalau suatu peristiwa telah terjadi. Sebuah sinyal dapat diterima secara synchronous atau asynchronous tergantung dari sumber dan alasan suatu event memberikan sinyal. Semua sinyal (asynchronous dan synchronous) mengikuti pola yang sama, yaitu:

a. Sebuah sinyal dimunculkan oleh kejadian dari suatu event.

b. Sinyal yang dimunculkan tersebut dikirim ke proses.

c. Sesudah dikirim, sinyal tersebut harus ditangani.

Contoh dari sinyal synchronous adalah ketika suatu proses melakukan pengaksesan memori secara ilegal atau pembagian dengan nol, sinyal dimunculkan dan dikirim ke proses yang melakukan operasi tersebut. Contoh dari sinyal asynchronous misalnya kita mengirimkan sinyal untuk mematikan proses dengan keyboard (CTRL+C) maka sinyal asynchronous dikirim ke proses tersebut. Setiap sinyal dapat ditangani oleh salah satu dari dua penanganan sinyal, yaitu:

1. Penanganan sinyal default.

2. Penanganan sinyal yang didefinisikan sendiri oleh user.

Penanganan sinyal pada program yang hanya memakai thread tunggal cukup mudah yaitu hanya dengan mengirimkan sinyal ke prosesnya. Tetapi mengirimkan sinyal lebih rumit pada program multithreading, karena sebuah proses dapat memiliki beberapa thread. Secara umum ada empat pilihan kemana sinyal harus dikirim, yaitu:

1. Mengirimkan sinyal ke thread yang dituju oleh sinyal tersebut.

2. Mengirimkan sinyal ke setiap thread pada proses tersebut.

3. Mengirimkan sinyal ke thread tertentu dalam proses.

4. Menugaskan thread khusus untuk menerima semua sinyal yang ditujukan pada proses.

Metode untuk mengirimkan sebuah sinyal tergantung dari jenis sinyal yang dimunculkan. Sebagai contoh sinyal synchronous perlu dikirimkan ke thread yang memunculkan sinyal tersebut bukan thread lain pada proses itu. Tetapi situasi dengan sinyal asynchronous menjadi tidak jelas. Beberapa sinyal asynchronous seperti sinyal yang berfungsi untuk mematikan proses (contoh: Alt-F4) harus dikirim ke semua thread. Beberapa versi UNIX yang multithreading mengizinkan thread menerima sinyal yang akan ia terima dan menolak sinyal yang akan ia tolak. Karena itu sinyal asynchronouns hanya dikirimkan ke thread yang tidak memblok sinyal tersebut. Solaris 2 mengimplementasikan pilihan ke-4 untuk menangani sinyal. Windows 2000 tidak menyediakan fasilitas untuk mendukung sinyal, sebagai gantinya Windows 2000 menggunakan asynchronous procedure calls (APCs).

Thread Pools

Dalam situasi web server multithreading ada dua masalah yang timbul, diantaranya adalah:

a. Ukuran waktu yang diperlukan untuk menciptakan thread dalam melayani permintaan yang diajukan akan berlebih. Pada kenyataannya thread dibuang ketika sudah menyelesaikan tugasnya.

b. Pembuatan thread yang tidak terbatas jumlahnya dapat menurunkan performa dari sistem. Solusinya adalah dengan penggunaan Thread Pools, cara kerjanya adalah dengan membuat beberapa thread pada proses startup dan menempatkan mereka ke pools, dimana thread tersebut menunggu untuk bekerja. Jadi ketika server menerima permintaan maka akan membangunkan thread dari pool dan jika thread tersebut tersedia, permintaan akan dilayani. Ketika thread sudah selesai mengerjakan tugasnya maka thread tersebut kembali ke pool dan

menunggu pekerjaan lainnya. Bila tidak thread yang tersedia pada saat dibutuhkan, maka server menunggu sampai ada satu thread yang bebas.

Keuntungan menggunakan thread pool adalah:

• Umumnya lebih cepat dalam melayani permintaan thread yang sudah ada dibandingkan dengan menunggu thread baru yang sedang dibuat.

• Thread pool membatasi jumlah thread yang ada pada suatu waktu. Hal ini penting pada sistem yang tidak dapat mendukung banyak thread yang berjalan secara bersamaan.

Jumlah thread dalam pool dapat tergantung dari jumlah CPU dalam sistem, jumlah memori fisik, dan jumlah permintaan klien yang bersamaan. Thread yang dimiliki oleh suatu proses memang berbagi data tetapi setiap thread mungkin membutuhkan duplikat dari data tertentu untuk dirinya sendiri dalam keadaan tertentu. Data ini disebut thread-specific data.

Posted in General, SIstem Operasi | Tagged: , , , | Leave a Comment »

Struktur Sistem Operasi

Posted by dewa32 on 28 October 2009

Pendekatan yang umum suatu sistem yang besar dan kompleks adalah dengan memecah tugastugas (task) ke bentuk komponen-komponen kecil dibandingkan dalam bentuk sistem tunggal (monolithic). Komponen-komponen tersebut akan akan di bahas pada bagian berikut ini.

Struktur Sederhana

Banyak sistem operasi komersial yang tidak terstruktur dengan baik. Kemudian sistem operasi dimulai dari yang terkecil, sederhana dan terbatas lalu berkembang dengan ruang lingkup originalnya. Contoh dari sistem operasi ini adalah MS-DOS dan UNIX. MS-DOS merupakan sistem operasi yang menyediakan fungsional dalam ruang yang sedikit sehingga tidak dibagi menjadi beberapa modul, sedangkan UNIX menggunakan struktur monolitik dimana prosedur dapat saling dipanggil oleh prosedur lain di sistem bila diperlukan dan kernel berisi semua layanan yang disediakan sistem operasi untuk pengguna [Bambang2002]. Inisialisasi-nya terbatas pada fungsional perangkat keras yang terbagi menjadi dua bagian yaitu kernel dan sistem program. Kernel terbagi menjadi serangkaian interface dan device driver dan menyediakan sistem file, penjadwalan CPU, manajemen memori, dan fungsi-fungsi sistem operasi lainnya melalui system calls.

Kelemahan struktur monolitik adalah:

• Pengujian dan penghilangan kesalahan sulit karena tidak dapat dipisahkan dan dialokasikan

• Sulit dalam menyediakan fasilitas pengamanan

• Merupakan pemborosan memori bila setiap komputer harus menjalan kernel monolitik, karena semua layanan tersimpan dalam bentuk tunggal sedangkan tidak semua layanan diperlukan.

• Kesalahahan sebagian fungsi menyebabkan sistem tidak berfungsi.

Keuntungan struktur monolitik adalah layanan dapat dilakukan dengan cepat karena terdapat dalam satu ruang.

Pendekatan Berlapis (Layer Approach)

Sistem operasi dibagi menjadi beberapa lapisan. Lapisan terbawah (layer 0) adalah hardware dan yang tertinggi (layer N) adalah user interface. Lapisan N memberi layanan untuk lapisan N+1 sedangkan proses-proses di lapisan N dapat meminta layanan lapisan N-1 untuk membangun layanan lapisan N+1. Lapisan N dapat meminta layanan lapisan N-1 namun lapisan N tidak dapat meminta layanan lapisan N+1. Masing-masing berjalan pada lapisannya sendiri.

[MDGR2006] Menurut Tanenbaum dan Woodhull, sistem terlapis terdiri dari enam lapisan, yaitu:

• Lapisan 0. Mengatur alokasi prosesor, pertukaran antar proses ketika interupsi terjadi atau waktu habis dan lapisan ini mendukung dasar multi-programming pada CPU.

• Lapisan 1. Mengalokasikan ruang untuk proses di memori utama dan pada 512 kilo word drum yang digunakan untuk menahan bagian proses ketika tidak ada ruang di memori utama.

• Lapisan 2. Menangani komunikasi antara masing-masing proses dan operator console. Lapisan ini masing-masing proses secara efektif memiliki operator console sendiri.

• Lapisan 3. Mengatur peranti I/O dan menampung informasi yang mengalir dari/ke proses tersebut.

• Lapisan 4. Tempat program pengguna. Pengguna tidak perlu memikirkan tentang proses, memori, console, atau manajemen I/O.

• Lapisan 5. Merupakan operator sistem.

Contoh sistem operasi yang menggunakan pendekatan berlapis adalah THE yang dibuat oleh Djikstra dan mahasiswa-mahasiswanya, serta sistem operasi MULTICS. [Bambang2002] Kelemahan struktur ini adalah fungsi-fungsi sistem operasi harus diberikan ke tiap lapisan secara hati-hati. Sedangkan keunggulannya adalah memeliki semua kelebihan rancangan modular, yaitu sistem dibagi menjadi beberapa modul dan tiap modul dirancang secara independen. Tiap lapisan dapat dirancang, dikode dan diuji secara independen. Pendekatan berlapis menyederhanakan rancangan, spesifikasi dan implementasi sistem operasi.

Microkernels

Metode struktur ini adalah menghilangkan komponen-komponen yang tidak diperlukan dari kernel dan mengimplementasikannya sebagai sistem dan program-program level user. Hal ini akan menghasilkan kernel yang kecil. Fungsi utama dari jenis ini adalah menyediakan fasilitas komunikasi antara program client dan bermacam pelayanan yang berjalan pada ruang user. Contoh sistem operasi yang menggunakan metode ini adalah TRU64 UNIX, MacOSX dan QNX

Keuntungan dari kernel ini adalah kemudahan dalam memperluas sistem operasi, mudah untuk diubah ke bentuk arsitektur baru, kode yang kecil dan lebih aman. Kelemahannya adalah kinerja akan berkurang selagi bertambahnya fungsi-fungsi yang digunakan.

Modular (Modules)

Kernel mempunyai kumpulan komponen-komponen inti dan secara dinamis terhubung pada penambahan layanan selama waktu boot atau waktu berjalan. Sehingga strateginya menggunakan pemanggilan modul secara dinamis (Loadable Kernel Modules). Umumnya sudah diimplementasikan oleh sistem operasi modern seperti Solaris, Linux dan MacOSX.

Sistem Operasi Apple Macintosh Mac OS X menggunakan struktur hybrid. Strukturnya menggunakan teknik berlapis dan satu lapisan diantaranya menggunakan Mach microkernel.

Virtual Machine

Dalam struktur ini user seakan-akan mempunyai seluruh komputer dengan simulasi atas pemroses yang digunakan. Sistem operasi melakukan simulasi mesin nyata yang digunakan user, mesin virtual ini merupakan tiruan seratus persen atas mesin nyata [Bambang2002]. Teknologi ini awalnya digunakan pada IBM S/370. VM/370 menyediakan mesin virtual untuk tiap user dengan membuat mesin virtual baru pada saat user tersebut melakukan log sistem. Kemudian teknik ini berkembang menjadi operating system emulator sehingga sistem operasi dapat menjalankan aplikasi-aplikasi untuk sistem operasi lain. Contoh dari pengembangan itu adalah sebagai berikut:

• Sistem operasi MS-Windows NT dapat menjalankan aplikasi untuk MS-DOS, OS/2 mode teks dan aplikasi WIN16.

• IBM mengembangkan WABI untuk meng-emulasikan Win32 API sehingga sistem operasi yang menjalankan WABI dapat menjalankan aplikasi-aplikasi untuk MS-Windows.

• Para pengembang Linux membuat DOSEMU untuk menjalankan aplikas-aplikasi DOS pada sistem operasi Linux, WINE untuk menjalankan aplikasi-aplikasi MS-Windows.

• VMWare merupakan aplikasi komersial yang meng-abstraksikan perangkat keras intel 80×86 menjadi virtual mesin dan dapat menjalan beberapa sistem operasi lain (guest operating system) di dalam sistem operasi MS-Windos atau Linux (host operating system). VirtualBox merupakan salah satu aplikasi sejenis yang opensource.

 

System Boot

[MDGR2006] Ketika komputer dinyalakan (booting). Komputer akan menjalankan bootstrap program yaitu sebuah program sederhana yang disimpan dalam ROM yang berbentuk chip CMOS (Complementary Metal Oxide Semiconductor). Chip CMOS modern biasanya bertipe Electrically Erasable Programmable Read Only Memory (EEPROM), yaitu memori non-volatile (tak terhapus jika power dimatikan) yang dapat ditulis dan dihapus dengan pulsa elektronik. Lalu bootsrap program ini lebih dikenal dengan nama BIOS (Basic Input Output System).

Bootstrap program utama, umumnya terletak pada motherboard dan memeriksa perangkat keras utama serta melakukan inisialisasi terhadap program dalam hardware yang dikenal dengan nama firmware. Program kecil ini akan me-load kernel ke memori dan menjalankannya. Rangkaian proses bootup diawali rutin bootstrap BIOS membangkitkan interrupt 19h yang me-load sektor pertama (512 byte) dari Floppy Disk atau Hard Disk (CHS 0:0:1) Cylinder:0, Head:0. Sector:1 (Pada umumnya silinder dan head hard disk selalu dimulai dengan urutan nol sedangkan sektor untuk harddisk dan floppy selalu dimulai dengan urutan kesatu) ke dalam memori yang beralamat segment 0000:7C00H (absolute: 07C000H). Sektor pertama ini merupakan bootstrap loader utama. BIOS memeriksa dua byte terakhir dari isi data sektor tersebut apakah AA55h, jika benar kemudian BIOS melakukan eksekusi program ke alamat segment 0000:7C00h. Jika bukan, maka BIOS

memberikan pesan non-system disk atau non-bootable disk atau hang. Bila terdapat Harddisk, INT 19h mencoba membaca MBR (Master Boot Record) pada sektor awal harddisk ke lokasi memori 0000:7C00h dan melakukan eksekusi ke alamat tersebut. Program kecil itu akan berusaha ke lokasi partisi yang aktif dari tabel partisi tersebut. Jika partisi tersebut ditemukan, boot sector pada partisi itu akan di-load ke memori 0000:7C00h dan dieksekusi. Setiap sistem operasi mempunyai format boot sector tersendiri. Program kecil dalam boot sector harus dapat me-alokasikan bagian pertama program kernel loader dari sistem operasi dan diload ke memori.

Posted in SIstem Operasi | Leave a Comment »

Operasi Sistem Komputer, Struktur Sistem Operasi, dan System Call

Posted by dewa32 on 28 October 2009

Operasi Sistem Komputer

Sistem komputer modern terdiri dari satu atau lebih CPU dan sejumlah device controller yang terhubung melalui BUS dan menyediakan akses berbagi memori (shared memory). CPU dan semua device controller berjalan secara bersamaan sehingga dapat menimbulkan persaingan penggunaan memori. Untuk menjamin berbagi memori secara berurutan, pengontrol memori menyediakan fungsi akses sinkronisasi ke memori.

 

Pada saat komputer dinyalakan, komputer melakukan inisialisasi oleh program (bootstrap) yang

tersimpan dalam ROM (Read Only Memory) atau EEPROM (Electrically Erasable Programable Read

Only memory) yang biasa disebut firmware melalui perangkat keras komputer. Proses ini menginisialisasi semua aspek sistem, dari register-register CPU ke pengontrol peralatan (device controller) lalu ke pengontrol memori (memory controller). Program bootstrap harus mengetahui bagaimana meload sistem operasi dan meng-eksekusi sistem tersebut. Untuk mengerjakan tujuan ini, bootstrap harus melokasikan dan me-load kernel sistem operasi ke memori kemudian meng-eksekusi proses pertama (init) dan menunggu event-event yang akan terjadi. Kejadian-kejadian (events) biasanya disinyalkan oleh sebuah interupsi (interrupt) yang berasal dari perangkat keras (hardware) atau perangkat lunak (software). Hardware dapat memicu interrupt setiap saat dengan mengirim sinyal ke CPU, biasanya melalui system bus. Sedangkan software memicu interrupt dengan meng-eksekusi operasi khusus (system call atau monitor call). Ketika CPU ter-interrupt, CPU menghentikan proses yang dilakukan dan secara langsung mengeksekusi ke lokasi yang ditentukan, kemudian akan kembali ke proses semula jika proses interupsi sudah diselesaikan.

 

Struktur Penyimpanan

Program-program komputer harus tersimpan ke dalam memori utama (RAM Random Access Memory) untuk dieksekusi. CPU secara otomatis akan memanggil intruksi-intruksi dari memori utama untuk dieksekusi.

Kelemahan dari memori utama adalah sebagai berikut:

a. memori utama umumnya terlalu kecil untuk memuat semua data dan program secara permanen

b. memori utama merupakan media penyimpan volatile ( kehilangan data ketika komputer dimatikan).

Untuk mengatasi kelemahan tersebut, sistem komputer menyediakan media penyimpan sekunder (secondary storage) misalnya Magnetic Disk, Tape dan media lainnya.

 

Struktur I/O (Input/Output)

Umumnya sistem operasi mempunyai device driver untuk setiap device controller. Dalam memulai

pengoperasian I/O, device driver me-load register yang tepat melalui device controller. Kemudian device controller memeriksa isi dari register tersebut untuk menentukan jenis aksi apa yang harus dilakukan (contoh pembacaan karakter dari keyboard). Controller mulai mentransfer data dari peralatan ke buffer lokal. Ketika selesai mentransfer, controller memberitahukan kepada device driver bahwa pekerjaan telah selesai melalui interrupt. Device driver kemudian mengembalikan pengontrolan ke sistem operasi atau mengirimkan informasi status.

 

Dalam format ini operasi interrupt driven I/O hanya melakukan transfer data dengan jumlah yang kecil, bila terjadi pemindahan data yang besar akan terjadi overhead. Solusi masalah dapat dipecahkan melalui penggunaan DMA (Direct Memory Access). Sesudah setting up buffer-buffer, pointer dan penghitung I/O device, device controller mentransfer sejumlah blok data secara langsung ke/dari buffer penyimpannya ke memori tanpa campur tangan CPU. Hanya satu interrupt dibangkitkan per blok, untuk memberitahukan device driver bahwa operasinya selesai, daripada satu interrupt per byte

 

Struktur Sistem Operasi

Sistem operasi menyediakan lingkungan dimana program dapat dieksekusi. Salah satu aspek terpenting sistem operasi adalah kemampuan untuk melakukan multiprogramming. Multiprogramming meningkatkan pemanfaatkan CPU dengan mengorganisir job (kode atau data) sehingga CPU selalu mempunyai satu job untuk diproses (mengurangi idle). Sistem multiprograming menyediakan lingkungan dimana bermacam sumber daya (CPU, memori dan peralatan lain) digunakan lebih efektif tetapi tidak menyediakan interaksi user terhadap sistem komputer. Time sharing (multitasking) adalah perluasan logical dari multiprogramming. Dalam sistem ini CPU meng-eksekusi banyak job dengan me-switch diantaranya, tetapi switch tersebut dilakukan sesering mungkin, sehingga user dapat berinteraksi pada setiap program selagi berjalan.

 

Contohnya ketika ada suatu aplikasi (video render) sedang diproses, user dapat melakukan pekerjaan lain misalnya mengetik dokumen di aplikasi word processor.

 

Pelayanan Sistem Operasi

Pelayanan sistem operasi menyediakan beberapa fungsi yang sangat membantu user, yaitu:

a. User Interface. Bentuk-bentuk user interface yang umum digunakan adalah Command Line Interface (CLI) dimana menggunakan perintah dalam bentuk teks dan sebuah metode untuk memasukinya, Batch Interface dimana perintah dan directive pengontrolnya dimasukan ke dalam satu file yang akan dieksekusi, Graphical User Interface (GUI) dimana interface ini berbentuk grafik.

b. Program Execution. Sistem harus dapat memanggil program ke memori dan menjalankannya.

c. I/O Operation. Program harus dapat mengatur piranti masukan atau keluaran.

d. File-System Manipulation. Program dapat melakukan baca/tulis, pengubahan dan penghapusan file.

e. Communications. Suatu proses terkadang memerlukan informasi dari proses yang lainnya. Komunikasi dapat dilakukan melalui satu mesin komputer atau mesin komputer lain melalui jaringan komunikasi.

f. Error Detection. Sistem Operasi mampu melakukan deteksi kesalahan yang disebabkan oleh perangkat keras maupun perangkat lunak serta mampu menanganinya.

 

Beberapa fungsi-fungsi yang mengefisiensikan fungsi lain, antara lain:

g. Resource allocation. Dimana beberapa user dan beberapa job berjalan bersama, sumber daya harus dialokasikan untuk setiap mereka.

h. Accounting. Menjaga jalur dimana user menggunakan berapa dan apa jenis sumber daya komputer tersebut.

i. Protection and Security. Perlindungan sangat diperlukan sistem dari berbagai gangguan yang berasal di luar maupun di dalam sistem tersebut. Layanan tersebut dapat berupa login dan password.

 

System Calls

System Calls menyediakan interface pelayanan-pelayanan yang disediakan oleh sistem operasi, umumnya sebagai rutin-rutin yang ditulis dengan bahasa C atau C++, atau beberapa tugas yang mengakses hardware secara langsung menggunakan bahasa rakitan. Biasanya programmer lebih memilih Application Programming Interface (API) dibandingkan dengan low level programming.

Ada lima jenis system calls utama, yaitu:

a. Process control merupakan system calls yang mengendalikan proses-proses yang berjalan.

b. File manipulation adalah kumpulan system calls yang bertugas untuk melakukan manipulasi file seperti pembacaan, penulisan, penghapusan dan pengubahan.

c. Device manipulation adalah system calls yang mengatur penggunaan peralatan-peralatan yang terhubung pada mesin tersebut.

d. Information maintenance. System calls yang menghubungkan user dengan sistem operasi dalam hal berbagi informasi.

e. Communications. Ada dua model komunikasi yaitu pertukaran informasi dilakukan melalui fasilitas komunikasi antar proses yang disediakan oleh sistem operasi (Message-Passing) dan pertukaran dengan menggunakan memori (shared-memory).

Posted in General, SIstem Operasi | Leave a Comment »

Pendahuluan Sistem Operasi – Sistem Komputer

Posted by dewa32 on 28 October 2009

Kali ini saya mengisi blog saya dengan sedikit materi tentang Sistem Operasi. Namun, sebelum membahas sistem operasi, terlebih dahulu akan saya bahas tentang sistem komputer.

Sistem komputer dapat dibagi menjadi empat komponen, yaitu:

1. Hardware – Menyediakan sumber daya dasar komputer. Misalnya CPU, Memori, I/O Device…

2. Sistem Operasi – Mengontrol dan mengkoordinasi penggunaan hardware diantara berbagai aplilkasi dan user.

3. Program-program aplikasi – Mendefinisikan cara dimana sumber daya sistem digunakan untuk memecahkan masalah penghitungan (computing) user. Contohnya Word Processors, sistem database, Compilers…

4. User-user – Manusia, Mesin atau komputer lain.

Untuk lebih memahami tentang sistem operasi, di bawah ini akan dibahas sisi pandang user dan sistem terhadap sistem operasi.

Sisi Pandang User

User adalah orang yang duduk didepan komputer, melihat monitor, mengoperasikan keyboard, mouse dan sistem. Dalam hal ini sistem operasi didesain untuk user dapat memonopoli sumber daya komputer dengan tujuan memaksimalkan pekerjaan serta meningkatkan kinerja user dan mudah untuk digunakan.

Dalam kasus lain seorang user duduk di depan terminal sedangkan user lain berada di terminal yang berbeda. Setiap terminal tersebut terhubung dengan satu komputer mainframe atau minicomputer. Sehingga user-user ini saling berbagi sumber daya dari satu komputer tersebut. Dalam hal ini sistem operasi didesain untuk dapat memaksimalkan penggunaan sumber daya (resource) dan menjamin CPU, memori dan peralatan I/O yang tersedia digunakan lebih efisien dan tidak ada seorang pengguna melebihi dari yang sebaiknya digunakan.

Sisi Pandang Sistem

Sistem operasi adalah pengalokasi sumber daya (resource) yang menjadi pengatur dalam pembagian pelayanan sumber daya sehingga tidak terjadi konflik diantaranya. Sistem operasi juga harus memutuskan bagaimana mengalokasikan spesifikasi program dan user sehingga mereka dapat mengoperasikan komputer lebih efisien dan baik. Sistem operasi adalah pengontrol program yang mengatur eksekusi program untuk mencegah terjadinya kesalahan dan ketidaklayakan penggunaan komputer.

Definisi Sistem Operasi

Sistem Operasi muncul dengan alasan sebagai cara agar sistem penghitungan (computing) lebih berdaya guna. Tujuan dasar dari sistem komputer adalah meng-eksekusi program dan memecahkan permasalahan user lebih mudah. Definisi umum lain dari sistem operasi adalah suatu program yang berjalan setiap waktu dalam komputer (disebut kernel) dengan semua program sistem dan aplikasinya.

Posted in SIstem Operasi | Leave a Comment »

Algoritma dan Source Code Josephus Problem dengan Linked List

Posted by dewa32 on 28 October 2009

Josephus Problem adalah suatu masalah pengeksekusimatian terpidana – terpidana mati pada jaman dahulu kala. Sebenarnya ini bisa dianalogikan dengan jenis permainan anak – anak.

Berikut adalah penjelasan Josephus Problem dengan pendekatan permainan anak – anak yang sejenis :

Ada sebuah permaian yang dilakukan oleh (n) orang secara melingkar. Permainan itu adalah membilang bilangan dari 1 – (r). Barangsiapa memperoleh girilan untuk membilang bilangan r, dia akan kalah dan tidak boleh ikut permainan lagi. Setelah itu penghitungan dilanjtkan mulai dari 1 oleh orang setelahnya. Penghitungan pertama dimulai di player ke-(st). Permainan akan berakhir jika dan hanya jika ada satu orang yang tidak kalah.

Algoritma Dasar :

-          Melakukan penghitungan dimulai dari player ke-n

-          Penghitungan dilanjutkan ke player sebelah kanannya (player.next)

-          Jika mencapai player ke-n, dilanjutkan dengan player pertama (circular)

-          Jika hitungan sudah mencapai range yang telah ditentukan, lakukan proses remove. Player.next dituju ke player sebelah kanan dari player yang tereliminasi. Begitu seterusnya sampai First = Last (tinggal 1 player).

Berikut adalah souce code penyelesaian Josephus Problem dengan menggunakan konsep linked list :

import java.util.ArrayList;

import java.util.List;

 

public class Josephus

{

public static void main(String[] args)

{ int captiveNumber = 7;

int startFrom = 1;

int runStep = 4;

 

CaptiveList list = new CaptiveList(startFrom, captiveNumber, runStep);

Link lastOne = list.runGame();

System.out.println(“The survival: ” + lastOne);

}

 

private static class CaptiveList

{ private Link dynamicHead;

private int  runStep;

 

public CaptiveList(int startFrom, int captiveNumber, int runStep)

{ this.runStep = runStep;

Link previous = null;

Link head = null;

for (int i = 1; i <= captiveNumber; i++)

{ Link tmpLink = new Link(i);

if (previous == null)

head = tmpLink;

else

previous.next = tmpLink;

 

previous = tmpLink;

 

if (i == startFrom)

dynamicHead = tmpLink;

}

previous.next = head;

}

 

private Link suicide()

{ Link current = dynamicHead;

Link previous = null;

int testPos = runStep;

 

while (–testPos >= 1)

{ previous = current;

current = current.next;

}

 

if (previous == current.next)

previous.next = null;

else

previous.next = current.next;

 

dynamicHead = current.next;

return current;

}

 

public Link runGame()

{ List killed = new ArrayList();

while (dynamicHead != null && dynamicHead.next != null)

killed.add(suicide());

 

for (int i = 0; i < killed.size(); i++)

{ Link kill = (Link) killed.get(i);

System.out.println(“Killing: ” + kill);

}

return dynamicHead;

}

}

 

private static class Link

{ private int number;

public Link next;

 

public Link(int number)

{ this.number = number; }

 

public String toString()

{ return String.valueOf(number);  }

}

}

Posted in General, Struktur Data | Leave a Comment »

Struktur Data – Macam – macam Linked List

Posted by dewa32 on 28 October 2009

Berikut merupakan macam – macam linked list :

-         Singly Linked List :

Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya dan juga memiliki field yang berisi data.

Akhir linked list ditandai dengan node terakhir akan menunjuk ke null yang akan digunakan sebagai kondisi berhenti saat pembacaan linked list.

-          Double Linked List :

Linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu: 1 field pointer yang menunjuk ke pointer berikutnya, 1 field pointer yang menunjuk ke pointer sebelumnya dan field yang berisi data dari node tersebut. Pointer next dan prev-nya menunjuk ke null.

-           Single Circular Linked List :

Single Linked List yang pointer next-nya menunjuk ke dirinya sendiri, jika terdiri dari beberapa node maka pointer terakhirnya akan menunjuk ke pointer terdepannya.

-           Double Circular Linked List :

Double Linked List yang pointer next dan prev-nya menunjuk ke dirinya sendiri secara circular.

Jika dilihat pengaksesannya, Linear dan Circular Linked List dapat dibedakan sebagai berikut :

Linear Linked List Circular Linked List
Tail.next dihubungkan ke null Tail.next dihubungkan ke head
Pada perulangan, akan break pada now = null Pada perulangan, akan break pada now = null
Method lebih sederhana Method lebih sulit debandingkan dengan Linear linked list
Algoritma akan lebih sulit jika kita melakukan penyelesaian masalah dengan menggunakan konsep circular queue Akan lebih mudah pada konsep – konsep tertentu salah satunya seperti konsep queue.

Menurut saya, lebih baik membiasakan diri untuk menggunakan circular linked list. Karena akan lebih membantu mempersingkat langkah – langkahnya. Akan tetapi berbeda lagi jika kita melihat dari segi kemudahannya. Akan lebih mudah jika kita menggunakan Linear list karena tidak harus menghubungkan tail dan head.

Posted in General, Struktur Data | Leave a Comment »

Algoritma – Mengubah Operasi Infix ke Dalam Bentuk PostFix

Posted by dewa32 on 28 October 2009

Program ini merupakan program pengkoversian dari operasi Infix ke dalam operasi postfix.  Algoritma dasar dari program ini adalah bagaimana cara kita membaca atau mengartika bentuk infix tersebut ke dalam betuk postfix. Kemudian jika bertemu dengan tanda kurung, maka akan dilakukan pop semua elemen stack sampai menemukan kurung tutup pasangannya.

Bentuk post Fix merupakan betuk lain dari operasi matematika. Biasanya bentuk ini digunakan oleh mesin penghitung atau computer untuk memproses data yang lebih lanjut.

Berikut meupakan source code dari program ini :

package infix2postfix;

import javax.swing.*;

 

class Stack

{   private int maxSize;

private int top;

 

public char [] array;

public char [] hasil;

 

public int indexHasil;

 

public Stack(int input)

{   maxSize=input;

array = new char [input];

hasil = new char [50];

indexHasil = 0;

top=-1;

}

public int hirarki(char ope)

{   if(ope ==’%’ || ope==’&’)

return 3;

else if(ope ==’*’ || ope==’/')

return 2;

else if(ope ==’+’ || ope==’-')

return 1;

else

return 0;

}

public void push(char data)

{   array[++top]=data;      }

public char pop()

{   return (array[top--]);  }

public char peek()

{   return (array[top]);    }

public boolean full()

{   return (top==maxSize-1);}

public boolean empty()

{   return (top==-1);       }

public void masukkanHasil(char input)

{   hasil[indexHasil++]=input;  }

 

public void edit(char input)

{   if(input>=48&&input<58) //jika bertemu angka maka diPush();

masukkanHasil(input);

 

else if(hirarki(input)>0)

{   if(empty()||peek()==’(‘)

push(input);

else

{   char tandaLama=peek();

char tandaBaru=input;

 

if(hirarki(tandaLama)<hirarki(tandaBaru))

push(tandaBaru);

 

else

{   while(hirarki(tandaLama)>=hirarki(tandaBaru)&&!empty()&&peek()!=’(‘)

masukkanHasil(pop());

 

push(tandaBaru);

}

}

}

else

{   if(input==’(‘)

push(input);

else

{   while(!empty()&&peek()!=’(‘)

masukkanHasil(pop());

 

top–;

}

}

 

}

}

 

public class Main

{   public static void main(String[] args)

{   String in=JOptionPane.showInputDialog(“Masukkan Max Stack = “);

Stack s = new Stack(Integer.parseInt(in));

 

in=null;

in=JOptionPane.showInputDialog(“Masukkan operasi inFix = “);

 

for(int i=0;i<in.length();i++)

{   s.edit(in.charAt(i));   }

 

while(!s.empty())

s.masukkanHasil(s.pop());

JOptionPane.showMessageDialog(null,”Hasil dapat dilihat pada console !”);

 

for(int i=0;i<s.indexHasil;i++)

System.out.print(s.hasil[i]);

}

}

 

Posted in General, Struktur Data | Leave a Comment »

Algoritma – Mengoperasikan Operasi Matematika Bentuk PostFix

Posted by dewa32 on 28 October 2009

Program ini meruapakan program pengitung operasi matematika dalam bentuk PostFix.  Algoritma dalam program ini sama dengan algoritma kita memahami bentuk PostFix itu sendiri.

Jika bertemu dengan angka, maka akan dipush. Jika bertemu dengan operator maka akan dilakukan pop kemudian akan dioperasikan kedua angka terakhir yang  tersimpan di dalam Stack tersebut. Hasil terakhir merupakan angka yang terakhir disimpan di dalam stack.  Jika isi stack masih ada, maka terjadi kesalahan di dalam penulisan input operasi postfix tersebut

Berikut merupakan source code dalam bahasa JAVA :


package PostfixOperasi;import javax.swing.*;
class Stack

 

{   private int maxStack;

private int [] array;

private int top;

public Stack(int max)

{   maxStack = max;

array = new int [max];

top=-1;

}

public boolean full()

{   return (top==maxStack-1);}

public boolean empty()

{   return (top==-1);       }

public void push(int data)

{   array[++top]=data;  }

public int pop()

{   return (array[top--]);  }

public int peek()

{   return (array[top]);  }

public void edit(char operator)

{   int angka1,angka2,hasil=1;

angka2=pop();

angka1=pop();

switch (operator)

{   case ‘+’    :   hasil = angka1+angka2;

break;

case ‘-’    :   hasil = angka1-angka2;

break;

case ‘*’    :   hasil = angka1*angka2;

break;

case ‘/’    :   hasil = angka1/angka2;

break;

case ‘%’    :   hasil = angka1%angka2;

break;

case ‘&’    :   for(int i=0;i<angka2;i++)

hasil*=angka1;

break;

}

push(hasil);

}

}

public class Main

{   public static void main(String[] args)

{   String input=JOptionPane.showInputDialog(null, “Masukkan Batasan Stack = “);

Stack s=new Stack(Integer.parseInt(input));

input=null;

input=JOptionPane.showInputDialog(null, “Masukkan Operasi PostFix = “);

char []operasi=new char[50];

for(int i=0;i<input.length();i++)

{   operasi[i]=input.charAt(i);

if(operasi[i]>=’0′&&operasi[i]<=’9′)

s.push(operasi[i]-48);

else if((operasi[i]==’+'||operasi[i]==’-'||operasi[i]==’*'||operasi[i]==’/'||operasi[i]==’%'||operasi[i]==’&’))

s.edit(operasi[i]);

else

JOptionPane.showMessageDialog(null, “Masukkan ada yang salah”);

}

JOptionPane.showMessageDialog(null,”Hasil “+s.peek());

}

}

Posted in General, Struktur Data | Leave a Comment »

Algoritma – Mengecek Kurung Dalam Operasi Matematika

Posted by dewa32 on 28 October 2009

Program ini merupakan program untuk memeriksa suatu inputan string yang merupakan suatu operasi matematika apakah sudah mempunyai  jumlah kurung buka dan kurung tutup yang pas dan benar.

Program ini merupakan salah satu program yang mengimplementasikan penggunaan STACK.

Algoritma dasar program ini adalah :

1. Mengecek tiap karakter sampai bertemu NULL

2. Jika bertemu kurung buka, maka akan dilakukan proses push(); namun, sebelum dilakukan proses push, haruslah dicek,   apakah stack masih dapat diisi atau tidak. Sehingga dibutuhkan  fungsi tambahan, dapatDiisi(); untuk mengecek apakah isi stack  sudah penuh atau belum

3. Jika bertemu kurung tutup, maka akan dilakukan proses pop(); yang akan ditampung pada variable tampung. Seperti halnya proses push();, proses pop(); harus dicek terlebih dahulu, apakah   stack masih berisi. Untuk itu, diperlukan fungsi dapatDiambil(); Pada proses pop kali ini juga harus mengecek apakah kurung tutup pada array saat pengecekan sama dengan isi stack array top atau tidak. Jika tidak, maka operasi matematika tersebut tidak valid

4. Operasi Matematika hanya akan valid jika pada saat bertemu NULL  isi stack kosong dan tidak ada tanda kurung tutup yang salah berpasangan dengan kurung buka pada indeks top.

Berikut merupakan source code program ini dalam bahasa C :

int dapatDiisi(int top,int maxStack);

int dapatDiambil(int top);

void pop(char *stack,char kurung,int &top,int &salah);

void push(char *stack,char simpan,int &top,int &salah,int maxStack);

 

main()

{ system(“cls”);

 

int top=-1; //indeks penunjuk puncak Stack

int maxStack; //nilai maximal isi stack

int salah=0; //variable untuk mengontrol kesalahan

char *kalimat;

char *stack; //variable stack

kalimat=(char *)malloc(sizeof(char)*30);

stack=(char *)malloc(sizeof(char)*maxStack);

 

do{

printf(“max stack = “);

fflush(stdin);

scanf(“%d”,&maxStack);

}while(maxStack<0||isalpha(maxStack));

 

printf(“operasi matematika = \n”);

fflush(stdin);

gets(kalimat);

for(int i=0;kalimat[i];i++)

{ if(kalimat[i]==’(‘||kalimat[i]==’['||kalimat[i]==’{‘)

//jika mendapati kurung buka, maka akan dilakukan PUSH

push(stack,kalimat[i],top,salah,maxStack);

 

else if (kalimat[i]==’)'||kalimat[i]==’]'||kalimat[i]==’}')

//jika mendapati kurung buka, maka akan dilakukan POP

pop(stack,kalimat[i],top,salah);

 

if(salah)

break;

}

 

if(!salah)

{ if(top==-1)

printf(“Operasi Matematika sudah benar\n”);

else

printf(“Terdapat kurung buka yang tidak berpasangan\n”);

}

 

printf(“Tekan (k) untuk kembali menjalankan program\n”);

if(getch()==’k')

main();

else

system(“pause”);

}

 

int dapatDiisi(int top,int maxStack)

{ if(top<maxStack-1)

return 1;

else

return 0;

}

 

int dapatDiambil(int top)

{ if(top>-1)

return 1;

else

return 0;

}

 

void pop(char *stack,char kurung,int &top,int &salah)

{ if(dapatDiambil(top))

{ switch (kurung) //pencocokan tanda kurung

{ case ‘)’ : if(stack[top]!=’(‘)

{  printf(“Tanda kurung %c%c salah\n”,stack[top],kurung);

printf(“Kesalahan terjadi karena %c berpasangan dengan %c\n”,stack[top],kurung);

salah=1;

}break;

case ‘]’ : if(stack[top]!=’[')

{  printf("Tanda kurung %c%c salah\n",stack[top],kurung);

printf(“Kesalahan terjadi karena %c berpasangan dengan %c\n”,stack[top],kurung);

salah=1;

}break;

case ‘}’ : if(stack[top]!=’{‘)

{  printf(“Tanda kurung %c%c salah\n”,stack[top],kurung);

printf(“Kesalahan terjadi karena %c berpasangan dengan %c\n”,stack[top],kurung);

salah=1;

}break;

}

stack[top--]=’ ‘; //menghapus stack yang telah diambil dengan cara menggantinys dengan spasi

}

else

{ printf(“STACK sudah kosong\n”);

salah=1;

}

}

 

void push(char *stack,char simpan,int &top,int &salah,int maxStack)

{ if(dapatDiisi(top,maxStack))

stack[++top]=simpan;

 

else

{ printf(“STACK telah penuh\n”);

salah=1;

}

}

Posted in General, Struktur Data | Leave a Comment »