BAB 2 LANDASAN TEORI 2.1 Multithreading - Implementasi Multithreading Untuk Meningkatkan Kecepatan Waktu Proses Pada Enkripsi Gambar Dengan Algoritma Affine Cipher

BAB 2 LANDASAN TEORI

2.1 Multithreading

  Pada saat membangun sebuah program, kita sering menemukan proses yang harus dikerjakan dengan urutan sequencial yang memiliki pola tertentu. Meskipun masing- masing indeks didalam urutan tersebut memiliki variable yang berubah-ubah nilainya sesuai indeks yang diwakilinya, contohnya proses perkalian matriks, penentuan nilai deret bilangan dan deret aritmatika, pemrosesan matriks adjacency didalam teori

  

graph , penyusunan laporan didalam file Microsoft Excel, dan lain-lain. Pada

  penerapannya, proses-proses sequencial tersebut harus diolah mulai dari indeks pertama hingga indeks terakhir. Maka secara logika indeks yang ke n tidak akan diproses sebelum indeks yang ke n-1 selesai diproses dan indeks yang ke n-1 juga tidak akan diproses sebelum indeks yang ke n-2 selesai diproses. Tetapi dengan menggunakan teknik multithreading, kita mampu mengolah indeks-indeks yang ada didalam sebuah proses sequencial tanpa menunggu indeks yang sebelumnya selesai diproses. Dan salah satu keuntungan yang didapat melalui multithreading adalah proses runtime akan berjalan lebih cepat karena multithreading mampu memparalelkan proses yang berjalan pada proses sequencial tersebut.

2.1.1 Pengertian Multitasking

  Kita mungkin sering mendengar tentang multitasking, sebuah kemampuan didalam sebuah sistem operasi yang memungkinkan berjalannya lebih dari satu program pada saat yang bersamaan. Sebagai contoh, kita bisa mencetak sebuah dokumen sambil mendengarkan music, atau kita bisa menonton video sambil mendownload sebuah lagu dari internet. Multitasking bisa dilakukan dalam dua cara berdasarkan bagaimana cara sistem operasi menghentikan program, dua cara tersebut adalah preemptive

  

multitasking dan cooperative (atau nonpreemptive) multitasking (Sun Microsystem,

  1994). Preemptive multitasking adalah sistem operasi menghentikan program tanpa persetujuan dari program yang bersangkutan dengan kata lain program dihentikan dengan cara dipaksa sehingga program berakhir sebelum perintah exit. Sedangkan

  

cooperative multitasking adalah ketika program berakhir pada saat program tersebut

diperintahkan untuk berakhir.

2.1.2 Pengertian Multithreading

  Program dengan multithreading sebenarnya mengembangkan ide dari multitasking tersebut dengan mengambil satu level pemahaman dibawahnya, yaitu sebuah program tunggal yang menjalankan lebih dari satu task pada waktu yang bersamaan (Sun Microsystem, 1994). Biasanya task tersebut disebut dengan thread yang merupakan singkatan dari istilah thread control. Maka, sebuah program yang menjalankan lebih dari satu thread pada saat yang bersamaan disebut dengan program multithreading.

  Untuk lebih memperjelas mengenai multithreading, penulis akan mencoba memberikan gambaran melalui gambar 2.1.1 dibawah ini.

Gambar 2.1.1 : Penjabaran multithreading

  Pada gambar 2.1.1 diberikan penjabaran tentang multithreading. Gambar yang disebelah kiri adalah proses squencial dan yang disebelah kanan adalah proses yang dikerjakan dengan multithreading. Pada proses multithreading dapat dilihat bahwa ada dua thread yang bekerja meskipun diatur dengan penjadwalan. Pada proses

  

multithreading tersebut, akan lebih banyak code yang dieksekusi pada saat thread

yang lain sedang menunggu.

  Pemrograman multithreading telah ada lebih dari 30 tahun ini (Shene C-k, 2001), beberapa sistem sebelumnya juga sudah mendukung pemrograman

  

multithreading dengan beberapa nama yang berbeda. Sebagai contoh IBM memanggil

  sebuah thread dengan sebutan coroutine. Dan sekarang ini hampir semua sistem operasi mendukung pemrograman multithreading sejak Windows 95/NT hingga sistem operasi turunan dari Unix.

  2.1.3 Penjadwalan Thread

  Processor komputer semakin lama semakin cepat, sebelum kemampuan aplikasi komputer belum mampu memepertahankan kecepatannya. Untuk aplikasi komersial, nilai rata-rata CPI (Cycles Per Instruction) processor mencapai 2.5 atau 3 CPI. Melalui instruksi empat arah dari processor, satu diantara 3 CPI berarti hanya satu slot dari dua puluh yang sedang baik untuk digunakan. Karena itu kemampuan aplikasi komputer tidak berubah meskipun kemampuan hardware telah ditingkatkan.

  Penjadwalan thread adalah sebuah metode yang digunakan untuk melakukan pengukuran terhadap thread yang sedang dieksekusi pada multithreaded processor.

  

Resource utilitas dari masing-masing multiple thread diukur pada saat thread tersebut

dieksekusi secara bersamaan pada sebuah multithreaded processor (Chrysos, 2003).

  2.1.4 Desain Perancangan Pemrograman Multithreading

  Pada saat ini, hampir semua sistem operasi mendukung pemrograman multithreading sejak Windows 95/NT hingga sistem operasi turunan Unix. Untuk melakukan pemrograman multithreading, dibutuhkan bahasa yang berbasis objek (Object

  

Oriented Programming ) dikarenakan hanya bahasa pemrograman yang berorientasi

  objek yang menyediakan fasilitas untuk pemrograman multithreading dimana bahasa tersebut menyediakan eksekusi serentak dari banyak thread yang ada pada sebuah program yang sama. Pada dasarnya, thread menyediakan cara untuk mengeksekusi program secara parallel didalam satu program yang sama.

  Untuk desain perancangan pemrograman multithreading digunakan metode UML (Unified Modelling Language). UML dikeluarkan oleh Object Management

  

Group (OMG), adalah sebuah bahasa grafis yang telah diterima secara umum sebagai

  metode standart untuk menggambarkan sistem perangkat lunak yang dikembangkan berorientasi objek (Saxena dan Shrivastava, 2009). Selain diaplikasikan pada desain perancangan program atau sistem, UML juga bisa diaplikasikan pada perancangan proses bisnis dan arsitektur sistem hardware. Detail dan deskripsi yang baik tentang UML ditunjukkan pada tulisan oleh Booch et al tahun 2004 dan Alhir tahun 1998.

2.1.4.1 Representasi UML dari Proses dan Thread

Gambar 2.1.2 : Representasi UML untuk proses dan thread

  Pada gambar 2.1.2 menunjukkan detail dari sebuah proses dan thread serta relasi antara keduanya menggunakan class diagram. Pada desain ini, digunakan stereotype dari UML untuk mendefenisikan proses dan thread yang dinamakan <<process>> dan <<thread>>. Stereotype tersebut mendefenisikan class dari proses dan thread yang sedang aktif yang dinamakan class process dan thread. Class process memiliki multiple anggota dari class thread dan dijelaskan sebagai relasi 1..n pada diagram (Saxena dan Shrivastava, 2009).

2.1.4.2 Representasi UML dari Execution Core

Gambar 2.1.3 : Stereotype dari execution coreGambar 2.1.4 : Class diagram dari sebuah coreGambar 2.1.5 : Anggota tunggal dan multiple dari core

  Pemodelan UML untuk menggambarkan core eksekusi yang ditunjukkan menggunakan UML. Gambar 2.1.3 menunjukkan stereotype <<Execution_core>>,

gambar 2.1.4 menunjukkan class diagram dari core yang ditunjukkan, dan gambar

  2.1.5 menunjukkan anggota tunggal dan multiple dari core (Saxena dan Shrivastava, 2009) .

2.2 Kriptografi

  Untuk membuktikan pengaruh mutltithreading didalam meningkatkan kecepatan proses, maka penulis menerapkan teknik multithreading tersebut pada proses kriptografi dengan algoritma affine cipher. Kriptografi adalah suatu ilmu yang mempelajari bagaimana cara menjaga agar data atau pesan tetap aman saat dikirimkan, dari pengirim ke penerima tanpa mengalami gangguan dari pihak ketiga (Stalling, 1998). Tujuan penerapan kriptografi adalah untuk membuat sesuatu yang tersembunyi, baik itu berupa text, suara, gambar, dan video. Untuk lebih memperjelas pengertian kriptografi, penulis mencoba menjabarkan arsitektur umum kriptografi melalui gambar 2.2.1 dibawah ini.

  ALGORITMA

TOLONG UANGNYA WBMBWN=FJWNWZI=YX

DISIMPAN DIBAWAH

  VXRGJW=YXOJPJS=HJV KEY

  

KASUR KAMAR SAYA, FQ=HJRJQ=VJZJ+=CJW

JANGAN LUPA KAMAR NJW=MFGJ=HJRJQ=YX

DIKUNCI LALU HFWTX=MJMF=VXRGJW

SIMPANKAN KUNCI ITU HJW=HFWTX=XAF=YXO

  DIBAWAH POT BUNGA JPJS=GBA=OFWNJ

PLAIN TEXT CIPHER TEXT

Gambar 2.2.1 : Arsitektur umum kriptografi

  Dari arsitektur umum kriptografi diatas terlihat bahwa text pada kotak sebelah kiri merupakan text mentah (plain text) dan text pada kotak sebelah kanan adalah text hasil enkripsi atau mekanisme yang dilakukan untuk merubah text mentah menjadi text tersembunyi (Septiarini dan Hamdani, 2011) yang disebut dengan cipher text. Sedangkan setelah menjadi cipher text, text tetap bisa kembali diubah menjadi bentuk

  • nya, proses ini disebut dengan dekripsi. Enkripsi dan dekripsi dilakukan

  plain text

  melalui sebuah algoritma yang algoritma tersebut memiliki key yang hanya diketahui oleh pengirim dan penerima.

  Didalam penulisan skripsi ini, penulis mencoba melakukan proses kriptografi dengan algoritma affine cipher.

  2.2.1 Affine Cipher

Affine cipher adalah perluasan dari metode Caesar cipher, yang mengalihkan plain

text dengan sebuah nilai dan menambahkannya dengan pergeseran P menghasilkan

cipher text C yang dinyatakan dengan fungsi kongruen

  = + ( ) Yang mana n adalah ukuran alphabet, m adalah bilangan bulat yang harus relatif prima dengan n (m dan n tidak mempunyai faktor prima bersamaan atau FPB m dan b = 1) maka jika tidak relatif prima, maka dekripsi tidak bisa dilakukan, dan b adalah jumlah pergeseran. Untuk melakukan deskripsi, rumus enkripsi diatas harus dipecahkan untuk memperoleh P. Solusi kekongruenan tersebut hanya ada jika invers

  • 1 -1

  m (mod n), dinyatakan dengan m . Jika m ada maka dekripsi dilakukan dengan persamaan sebagai berikut = ( ) ( − )( )

  Invers(m) didapat dengan menggunakan persamaan ( ) ≡ 1 ( )

  Untuk lebih jelas mengenai proses algoritma Affine Cipher, maka akan dijabarkan melalui contoh dibawah ini. P = {A=0, B=1, C=2, …} maka n = 26 (0 S/D 25) Plaintext = KRIPTO (10 17 8 15 19 14) m = 7 dan b = 10 (dikarenakan 7 dan 10 adalah relatif prima) Enkripsi: C ≡ 7P + 10 (mod 26)

  p 1 = 10  c 1 ≡ 7 ⋅ 10 + 10 ≡ 80 ≡ 2 (mod 26) (huruf ‘C’) p 2 = 17  c 2 ≡ 7 ⋅ 17 + 10 ≡ 129 ≡ 25 (mod 26) (huruf ‘Z’) p 3 = 8  c 3 ≡ 7 ⋅ 8 + 10 ≡ 66 ≡ 14 (mod 26) (huruf ‘O’) p

  4 = 15  c 4 ≡ 7 ⋅ 15 + 10 ≡ 115 ≡ 11 (mod 26) (huruf ‘L’) p 5 = 19  c 1 ≡ 7 ⋅ 19 + 10 ≡ 143 ≡ 13 (mod 26) (huruf ‘N’) p

  6 = 14  c 1 ≡ 7 ⋅ 14 + 10 ≡ 108 ≡ 4 (mod 26) (huruf ‘E’) maka didapat hasil ciphertext yaitu CZOLINE Kemudian untuk melakukan dekripsi, mula-mula cari invers(m).

  7x ≡ 1 (mod 26) x = 15, karena 7.15 (mod 26) = 1 (mod 26) maka P = 15 (C – 10) (mod 26)

  c = 2  p

  1 1 ≡ 15 ⋅ (2 – 10) = –120 ≡ 10 (mod 26) (huruf ‘K’) c 2 = 25  p 2 ≡ 15 ⋅ (25 – 10) = 225 ≡ 17 (mod 26) (huruf ‘R’) c

  3 = 14  p 3 ≡ 15 ⋅ (14 – 10) = 60 ≡ 8 (mod 26) (huruf ‘I’) c = 11  p

  4 4 ≡ 15 ⋅ (11 – 10) = 15 ≡ 15 (mod 26) (huruf ‘P’) c 5 = 13  p 5 ≡ 15 ⋅ (13 – 10) = 45 ≡ 19 (mod 26) (huruf ‘T’) c

  6 = 4  p 6 ≡ 15 ⋅ (4 – 10) = –90 ≡ 14 (mod 26) (huruf ‘O’)

  maka didapatlah Plaintext berupa KRIPTO Dalam kasus tugas akhir ini, n adalah 2.147.483.647 dikarenakan nilai dari integer adalah antara - 2.147.483.647 hingga 2.147.483.647, karena nilai dibatasi tidak boleh lebih kecil dari nol, maka rentang yang diterapkan adalah antara 0 hingga 2.147.483.647. Nilai integer diambil karena penulis mencoba menerapkan algoritma enkripsi tersebut pada gambar dan masing-masing pixel gambar dapat diwakili dengan nilai integer.