Minggu, 11 Desember 2011

Hukum Moore's Law



PERCAYAKAH terdapat lebih dari 40 juta transistor pada sebuah prosesor Pentium 4 atau Athlon XP yang Anda pakai? Sebanyak 7,5 juta transistor pada prosesor Pentium II dan hanya 275.000 transistor pada sebuah prosesor Pentium 486 yang terkenal di tahun 1980-an silam. Hal tersebut mungkin jarang diamati, karena transistor sebanyak itu telah dikemas secara rapi dalam bentuk chip silikon yang besarnya hanya beberapa inchi persegi. Namun ada baiknya mengetahui fenomena tersebut agar semakin mengenal barang-barang yang tanpa terasa menjadi konsumsi sehari-hari.
Pemakaian jumlah transistor selalu mengalami peningkatan secara signifikan dari tahun ke tahun. Hal itu berpengaruh pada ukuran transistor dan kemampuan processor. Bayangkan, jika terdapat 40 juta transistor pada sekeping IC seluas 2 inchi persegi, seberapa besar satu buah transistor?
Banyaknya transistor menentukan kemampuan kecepatan processor. Jika Pentium pertama keluaran Intel hanya mampu berkecepatan maksimal 233 MHz, Pentium II dan processor sekelasnya hingga 800 MHz, Pentium III hingga 1,5 GHz, maka Pentium 4 terbaru berkecepatan hingga 3 GHz.
Mengapa kemampuan processor dapat meningkat demikian drastis? Pemakaian jumlah transistor di setiap keping chip processor adalah kuncinya. Dalam chip prosesor Pentium 4 terdapat 54 juta transistor, atau dua kali lipat dari Pentium III yang memiliki 24 juta transistor.
Semakin besar jumlah transistor yang dipakai akan meningkatkan kemampuan melakukan instruksi paralel setiap detik. Jika processor 486 hanya mampu menjalankan 20 MIPS (Million Instruction Per Second), Pentium 4 terbaru mampu menjalankan 1,5 juta MIPS.
Kenyataan ini telah menjadi sebuah fenomena tersendiri sejak penemuan IC (Integrated Circuit) tahun 1958 oleh Jack Kilby di laboratorium Texas Instrument. Di tempat berbeda dalam waktu yang bersamaan, Robert Noyce memiliki ide serupa di laboratorium Fairchild Semiconductor hingga memperoleh hak paten IC tahun 1961. Oleh karena itu kedua peneliti secara bersamaan dikenal sebagai penemu IC. Sejak saat itulah revolusi transistor dimulai.

**
PENGEMBANGAN IC tidak lepas dari mekanisme kerja transistor yang ditemukan John Bardeen, Walter Houser Brattain, dan William Bradford Shockley tahun 1948 atas hasil penelitiannya di Bell Labs., Amerika Serikat. Transistor yang memanfaatkan bahan semikonduktor (seperti silikon, germanium, dan gallium arsenide) membuat ukuran komponen elektronika jauh lebih kecil dan ringkas. Didukung cara kerja yang tidak berbeda dengan tabung trioda atau vacuum tube yang dipakai sebelumnya, pemakaian jumlah transistor dalam berbagai aplikasi semakin meningkat. Hingga muncul gagasan untuk menjadikan seluruh komponen dalam suatu lembaran silikon (planar). Gagasan inilah yang mendasari ditemukannya IC.
IC tidak ubahnya sebuah sirkuit elektronika yang terdiri dari komponen elektronika seperti transistor, resistor, kapasitor, dan sebagainya. Yang berbeda dari sirkuit elektronika yang lain adalah sirkuit IC dibangun di atas wafer silikon (atau bahan semikonduktor yang lain seperti galium arsenide atau germanium) secara planar (pada lapisan dan blok material tertentu).
Kelebihan bahan semikonduktor adalah memiliki sifat konduktivitas (sifat penghantar listrik) yang dapat berubah melalui proses doping, memasukkan bahan lain ke dalam kristal semikonduktor. Boron dan fosfor biasa dipakai sebagai dopant untuk membentuk muatan positif dan negatif dari kristal silikon yang semula netral/tidak bermuatan.
Kristal silikon yang bermuatan positif disebut tipe p, dan yang negatif disebut tipe n. Perbedaan muatan pada kristal ini digunakan untuk membentuk dioda, gate transistor, resistor, kapasitor, dan komponen yang lain. Kristal yang bermuatan sama dapat digunakan bersama-sama oleh komponen yang berbeda. Dengan metode tersebut sirkuit elektronika dapat dibuat lebih kecil dan efisien dibandingkan dengan sirkuit yang dibangun dengan tabung trioda atau transistor berkaki tiga.
Dengan kelebihan yang dimiliki IC, pemakaian jumlah transistor pada sebuah keping IC terus meningkat dari tahun ke tahun. Gordon Moore, saat masih di Fairchild Semiconductor melakukan observasi dan memprediksikan kecenderungan tersebut melalui tulisannya berjudul Cramming More Components Onto Integrated Circuits (memasukkan sebanyak mungkin komponen pada rangkaian terintegrasi) yang dimuat di majalah Electronics No. 8 Volume 38 pada 19 April 1965.
Dalam tulisannya, Moore meramalkan, pemakaian transistor pada keping IC meningkat secara eksponensial dua kali lipat setiap tahun. Prediksi Moore dikenal sebagai Hukum Moore dan terbukti hingga saat ini. Namun kecenderungan tersebut terus menurun dan mulai dipertanyakan ketepatannya, sehingga peningkatan jumlah IC secara eksponensial berlangsung rata-rata menjadi setiap 18 bulan.
Namun Gordon Moore mempertahankan pendapatnya dan membantah, Hukum Moore tidak lagi relevan dalam penjelasannya di depan International Solid State Circuits Conference (ISSCC) pada 10 Februari 2003 dalam presentasi berjudul No Exponential Forever, But We Can Delay Forever. (Eksponensial Tidak Selamanya, Namun Kami Selalu Dapat Menunda). Moore mengakui, prediksinya tidak selamanya akurat. Meskipun demikian, Hukum Moore terus dipelajari para ahli dan menjadi bahan kajian yang penting.
**
HUKUM Moore bukan sekadar prediksi dan hasil pengamatan belaka. Saat ini, Hukum Moore telah dijadikan target dan tujuan yang ingin dicapai dalam pengembangan industri semikonduktor. Peneliti di industri prosesor berusaha mewujudkan Hukum Moore dalam pengembangan produknya. Produsen alat produksi IC berusaha membuat alat yang dapat mencetak transistor sekecil mungkin. Industri material semikonduktor terus menyempurnakan produk material yang dibutuhkan prosesor, dan aplikasi komputer dan telekomunikasi berkembang pesat seiring dikeluarkannya prosesor yang memiliki kemampuan semakin tinggi.
Secara tidak langsung, Hukum Moore menjadi umpan balik (feedback) untuk mengendalikan laju peningkatan jumlah transistor pada keping IC. Hukum Moore telah mengendalikan semua orang untuk bersama-sama mengembangkan prosesor. Terlepas dari alasan-alasan tersebut, pemakaian transistor akan terus meningkat hingga ditemukannya teknologi yang lebih efektif dan efisien yang akan menggeser mekanisme kerja transistor sebagaimana yang dipakai saat ini.
Semakin kecil ukuran sebuah transistor, memungkinkan penggunaan transistor yang semakin berlipat ganda. Bahkan baru-baru ini Bell Labs. telah mengumumkan penemuan single nano tube yang berpeluang menjadi transistor berukuran nanometer dan para peneliti di Technion, Israel telah mengembangkan transistor berbasis DNA dan single nano tube. Perkembangan ini menjadi pengarah kemajuan nanotechnology di bidang elektronika.
**
HUKUM Moore merupakan salah satu sumbangan besar Gordon Moore yang dilahirkan pada 3 Januari 1929 dan dibesarkan di Kalifornia, dekat Palo Alto. Dengan gelar PhD. di bidang fisika dan kimia dari Caltech, dia adalah salah satu peneliti andalan William Bradford Shockley saat mendirikan Shockley Semiconductor di Kalifornia tahun 1956.
Setahun kemudian dia keluar dari Shockley Semiconductor dan bekerja di Fairchild Semiconductor. Gordon Moore bekerja di Fairchild Semiconductor selama 11 tahun, saat di mana ia menulis sebuah artikel di majalah Electronics tentang masa depan industri semikonduktor.
Gordon Moore bersama dengan Robert Noyce mendirikan Intel Corp. pada tahun 1968 setelah keluar dari Fairchild Semiconductor. Gordon Moore dikenal sebagai salah satu orang terkaya di dunia saat ini. Betapa tidak, berdasarkan data riset Mercury Research di akhir tahun 2003, produk prosesor buatan Intel menguasai 83,6 asar processor dunia yang bernilai jutaan dolar AS disusul Advance Micro Device (AMD) 14,9 sementara sisanya dibagi perusahaan lain.
Meskipun Gordon Moore bukanlah penemu transistor atau IC, gagasan yang dilontarkannya mengenai kecenderungan peningkatan pemakaian jumlah transistor pada IC telah memberikan sumbangan besar bagi kemajuan teknologi informasi. Tanpa jasa Moore mungkin kita belum bisa menikmati komputer berkecepatan 3GHz seperti saat ini.



Sumber : 
1. Tri Wahono ( 25 Maret 2005 ). Gordon Moore, Melipatgandakan Transistor.
     12 Desember 2001.

»»  READMORE...

Minggu, 04 Desember 2011

PIRANTI INPUT & OUTPUT (I/O)



          Input/Output (I/O) adalah bagian dari sistem mikroprosesor yang digunakan oleh mikroprosesor itu untuk berhubungan dengan dunia luar. Unit input adalah unit luar yang digunakan untuk memasukkan data dari luar ke dalam mikroprosesor ini, contohnya data yang berasal dari keyboard atau mouse. Sementara unit output biasanya digunakan untuk menampilkan data, atau dengan kata lain untuk menangkap data yang dikirimkan oleh mikroprosesor, contohnya data yang akan ditampilkan pada layar monitor atau printer.

Beberapa contoh input :
ALAT INPUT LANGSUNG
-          Keyboard
-          Pointing device contoh mouse, ligh pen, digitizer graphic tablet
-          Scanner, contoh micr, magnetic strip, optical data reader(ocr reader, ocr tag reader, bar code wand, omr reader).
-          Sensor, contoh camera
-          Voice recognizer atau speech recognizer
ALAT INPUT TAK LANGSUNG
-          Key to card
-          Key to tape
-          Key to disk

Beberapa contoh output :

HARD COPY DEVICE
-          Berupa alat yang digunakan untuk mencetak tulisan serta image pada media kertas seperti kertas, plastic atau film.
-          Contoh: printer, plotter, computer output to microfilm (com)
SOFT COPY DEVICE
-          Berupa alat yang dignakan untuk menampilkan tulisan serta image pada media lunak yang berupa signal elektronik.
-          Contoh: video display (CRT), flat panel display (LCD), seaker
DRIVE DEVICE
-           Berupa alat yang digunakan untuk merekam symbol dalam bentuk yang hanya dapat dibaca oleh mesin dan berfungsi sebagai alat input maupun output.
-          Contoh : disk drive, tape drive, optical drive, CD-ROM.

Pengaksesan I/O terdiri dari 2 cara :

  1. MEMORY MAPPED I/O
Piranti I/O dihubungkan sebagai lokasi memori virtual dimana port I/O tergantung memori utama.
Karakteristik:
-          Port I/O dihubungkan ke bus alamat.
-          Piranti input sebagai bagian memori yang memberikan data ke bus data. Piranti output sebagai bagian memori yang memiliki data yang tersimpan di dalamnya.
-          Port I/O menempati lokasi tertentu pada ruang alamat
dan diakses seolah-olah adalah lokasi memori.
  1. I/O MAPPED I/O (I/O ISOLATED)
Piranti I/O dihubungkan sebagai lokasi terpisah dengan lokasi memori, dimana port I/O tidak tergantung pada memori utama.
Karakteristik:
-          Port I/O tidak tergantung memori utama.
-          Transfer informasi dilakukan di bawah kendali sinyal kontrol yang menggunakan instruksi INPUT dan OUTPUT
-          Operasi I/O tergantung sinyal kendali dari CPU.
-          lnstruksi I/O mengaktifkan baris kendali read/write pada port I/O, sedangkan instruksi memori
akan mengaktifkan baris kendali read/write pada memori.
-          Ruang memori dan ruang alamat I/O menyatu, sehingga dapat memiliki alamat yang sama.
Kelebihan dan kekurangan:
-          I/O mapped I/O Iebih cepat dan efisien, karena lokasi I/O terpisah dengan lokasi memori.
-          I/O mapped I/O mempunyai keterbatasan jumlah instruksi yang dapat digunakan untuk operasi I/O.
Operasi I/O terbagi menjadi 3 metode :
  1.  I/O TERPROGRAM
Metode di mana CPU mengendalikan operasi I/O secara
keseluruhan dengan menjalankan serangkaian instruksi
I/O dengan sebuah program.
Karakteristik:
-          Program tersebut digunakan untuk memulai, mengarahkan dan menghentikan operasi-operasi I/O.
-          Membutuhkan sejumlah perangkat keras (register)
yaitu:
  • Register status, berisi status piranti I/O dan data yang akan dikirimkan.
  • Register buffer, menyimpan data sementara sampai CPU siap menerimanya
  • Pointer buffer, menunjuk ke lokasi memori di mana sebuah karakter harus ditulis atau dan mana karakter tersebut harus dibaca.
  • Counter data, tempat penyimpanan jumlah karakter dan akan berkurang nilainya jika karakter ditransfer.
*Membutuhan waktu proses yang lama dan tidak efesien dalam pemanfaatan CPU.
  1.  I/O INTERUPSI
Metode di mana CPU akan bereaksi ketika suatu piranti mengeluarkan permintaan untuk pelayanan.
Karakteristik:
-          Lebih efisien dalam pemanfaatan CPU, karena tidak harus menguji status dari piranti.
-          Interupsi dapat berasal dari piranti I/O, interupsi perangkat keras misalnya : timer, memori, power supply, dan Interupsi perangkat lunak misalnya :
  • overflow, opcode/data yang ilegal, pembagian dengan nol.
Ada 2 jenis interupsi:
  1. lnterupsi maskable
Interupsi yang dapat didisable (dimatikan) untuk sementara dengan sebuah instruksi disable interupsi khusus.
2.  Interupsi nonmaskable
Interupsi yang tidak dapat didisable dengan instruksi perangkat lunak.
Metode Interupsi:
- Polling/polled interupt
Berdasarkan urutan prioritas yang telah ditentukan sebelum piranti memerlukan interupsi.
Misal: piranti A dan B mempunyai urutan prioritas A lebih Iebih dulu dari B, maka jika A dan B secara bersamaan memerlukan pelayanan interupsi, maka piranti A akan didahulukan.
- Vector Interupt
Peralatan yang berinterupsi diidentifikasikan secara Iangsung dan dihubungkan routine pelayanan vector interupt.
INTR  = Sinyal yang dikeluarkan oleh peralatan.
INTA = Sinyal kendali yang digunakan CPU untuk menyiapkan pelayanan interrupt. Cara yang biasa digunakan dengan metode daisy chain dan encoder prioritas.
3. Direct Memory Access (DMA)
Metode transfer data secara langsung antara memori dengan piranti tanpa pengawasan dan pengendalian CPU.
• Skema transfer blok DMA dual port CPU dan DMA controller mengakses memori utama melalui MAR dan MBR dengan menggunakan sebuah memori utama dual port (2 port).
Port I —-> melayani CPU
Port II —-> melayani DMA controller
• Skema transfer blok DMA cycle stealing (pencurian siklus)
Hanya memerlukan sebuah memori port tunggal dimana CPU dan piranti I/O beradu cepat pada basis asinkron, prioritas utama akan diberikan pada piranti I/O.
Interfacing
Adalah peralatan yang digunakan untuk menghubungkan suatu piranti dengan CPU melalui bus.

Keterangan:
• Register kendali (CR) digunakan untuk mencatat berbagai perintah dan informasi lainnya dalam peripheral.
• Register status (SR) digunakan untuk menyimpan status piranti dan memberitahukan pesan-pesan kesalahan
• Register data input (IDR) dan register data output (ODR) masing-masing berfungsi sebagai bufer data untuk operasi input dan output.
Urutan operasi interface:
- Unit logika handshaking memasok unit kendali dengan empat sinyal.
- Dua sinyal, register kendali penulisan (WCR atau write control register) dan register status pembacaan (RSR atau read status register), masing-masing berhubungan dengan CR dan SR.
- Sedangkan dua sinyal lainnya adalah register pembacaan data input (RIDR atau read input data register) dan register penulisan data output (WODR atau write output data register ), masing-masing mengendalikan IDP dan ODR.
Transfer data
Format transfer:
- Paralel : semua bit pada karakter (word dengan panjang tertentu) dikirim secara bersamaan dalam batas waktu yang diberikan.
- Serial : Data dikirim secara berurutan dalam satu saluran.
Transfer data secara paralel lebih cepat daripada secara serial karena saluran transmisinya banyak, kelemahannya kalau terlalu panjang akan terjadi interferensi antar saluran.
Mode transfer data:
1. Synchronous mode
Baris kendali digunakan untuk mengsinkronkan waktu pada semua kejadian yang terjadi selama periode waktu tertentu.
Kelemahan:
• Tiap piranti I/O berbeda-beda kecepatan operasinya, sehingga harus diturunkan pada kecepatan yang paling rendah.

Gambar 2. Sinyal Pengaturan waktu mode sinkron
2. Asynchronous mode
Menggunakan teknik jabat tangan (hand shaking) untuk menyakinkan transfer data antara pengirim dan penerima tidak ada kesalahan (data valid)

Gambar 3. Sinyal Pengaturan waktu mode asinkron
Kelemahan :
- memerlukan lebih banyak kendali
- kecepatan transfer lebih rendah dari yang sebenarnya.
Kelebihan :
- memungkinkan penggunaan piranti I/O yang memiliki berbagai varasi kecepatan dalama system yang sama.
Sistem Prosesor I/O
  1. Saluran I/O:
Merupakan sebuah prosesor khusus dengan kemampuan terbatas yang disusun untuk interface beberapa piranti I/O ke memori.
- Saluran I/O dapat melakukan pendeteksian dan pembetulan kesaIahan dan beroperasi dalam basis cycle stealing.
- Saluran I/O berkomunikasi dengan CPU sebagai suatu fasiIitas DMA dan berkomunikasi dengan piranti I/O seolah-olah sebuah CPU.
3 pelayanan saluran:
- Saluran Multiplexer : Digunakan untuk menghubungkan piranti yang berkecepatan rendah dan sedang serta serta mengoperasikannya secara bersamaan dengan multiplexing.
- Saluran Selektor : Digunakan untuk menghubungkan piranti I/O yang berkecepatan tinggi tanpa multiplexing.
Contoh: pita magnetis, disk
-Saluran Multiplexer Blok Merupakan kombinasi dari dua pelayanan diatas.
  1. Prosesor I/O (IOP)
Merupakan komputer umum yang berkomunikasi dengan memori utama melalui fasilitas DMA system bus dan dengan piranti I/O atas satu atau lebih bus I/O.
Ada 2 mode yaitu :
-           Single Shared bus
Setiap IOP mengendalikan sejumlah piranti I/O tertentu yang tetap.

Gambar 4. Model Single Shared bus
-           Switching matriks bus
Setiap IOP mengendalikan satu piranti I/O
Gambar 5. Model Switching matriks bus
Konfigurasi Multiprosesor:
Di dalam satu komputer seakan-akan terdapat beberapa mikroprosesor, meskipun sebenarnya mikroprosesor utamanya hanya satu, sedangkan yang Iainnya berupa prosesor I/O (lOP). Hubungan yang paling sederhana menggunakan common bus.
Gambar 6. Model common bus pada multiprosesor
• Bus umum bersifat membagi waktu (time shared) oleh semua prosesor dan hanya satu prosesor yang dapat mengakses memori pada waktu tertentu.Tetapi dapat juga menggunakan bus umum ke dalam organisasi multiprosesor dual bus.
• Setiap komputer dihubungkan suatu pengendali sistem ke bus umum
• Komunikasi interkomputer ini dilakukan pada sistem bus melalui memori umum.

Gambar 7. Model system bus pada multiprosesor
Kernel I/O Subsystem:
  1. Scheduling :
-          Permohonan I/O dilakukan berdasarkan antrian perangkat
-          Beberapa sistem operasi berusaha untuk seadil mungkin
  1. Buffering : menyimpan data di memori selama proses transfer antar perangkat
-          Solusi perbedaan kecepatan dari perangkat yang ada
-          Solusi perbedaan ukuran transfer perangkat
Caching
  1. Cache : area memori yang cepat, yang berisikan kopian-kopian data.
  2. Beda BUFFER dan CACHE :
-          Buffer dapat menyimpan satu-satunya copy dari sebuah item data yang ada.
-          Cache hanya menyimpan sebuah salinan dari data di tempat lain pada storage sehingga lebih cepat diakses.
  1. Peningkatan performa I/O, terutama untuk:
-          berkas yang digunakan secara bersama oleh beberapa aplikasi,
-          berkas yang sedang di baca/tulis secara berulang-ulang.
Spooling
  1. Spool : buffer yang menyimpan output device
-          Tidak dapat menerima interleaved data stream.
  1. 1 device memenuhi 1 permintaan, tapi aplikasi bisa minta bersamaan.
  2. Sistem operasi meng-intercept semua output ke device.
Masing-masing output aplikasi di-spooled ke berkas disk yang berbeda.
  1. Setiap Sistem Operasi menyediakan control interface yang :
-          Membuat users dan administrator sistem menampilkan antrian,
-          Menyingkirkan pekerjaan yang tidak diinginkan.
-          dll.
Error Handling
  1. Sistem Operasi dengan pelindung memori dapat bertahan dari berbagai jenis error dari perangkat keras dan aplikasi.
  2. Sistem Operasi sulit memperbaiki kesalahan permanen bila
terjadi pada komponen penting,.
  1. Umumnya akan me-return sebuah error number atau kode
ketika permintaan I/O gagal.
  1. Log system error menyimpan laporan masalah yang ada.
Struktur Data Kernel
  1. Kernel menyimpan informasi penggunaan komponen I/O, termasuk tabel open-file, koneksinetworking, informasi karakter device.
  2. Struktur data yang rumit dapat digunakan untuk memeriksa buffer, alokasi memori, dan menentukan batasan sektor/blok.
  3. 3.      Beberapa sistem operasi menggunakan tehnik object oriented untuk mengkapsulasikan perbedaan-perbedaan semantik yang ada.
Transformasi I/O Menjadi Operasi H/W
Proses:
  1. Blocking read system call diberikan pada pendeskripsi data
dari data yang sudah terbuka sebelumnya.
  1. Kode di kernel memeriksa parameter. Dalam proses input, jika data sudah ada di buffer, data dikembalikan ke proses dan permintaan I/O selesai
Contoh:
  1. membaca data dari disk untuk di proses.
  2. Menentukan device yang mengandung data,
  3. 3.      Menerjemahkan nama ke perwakilan device
  4. 4.      Secara fisik memindahkan data dari disk ke buffer
  5. Mempersiapkan data untuk proses permintaan I/O
  6. Mengembalikan kontrol ke proses
I/O Stream (1)
I/O stream adalah suatu mekanisme pengiriman data secara
bertahap dan terus menerus melalui suatu aliran data (dua arah). Biasa digunakan dalam network protocol.Asynchronous.
-          Menggunakan message passing dalam men-transfer data.
-          Untuk memasukkan ke dalam stream digunakan ioctl system call
-          Untuk menuliskan data ke device digunakan write / putmsg system call
-          Untuk membaca data dari device digunakan read / getmsg system call

Kinerja I/O
  1. Pembuat CPU melaksanakan kode device-driver
  2. Memberitahukan ke-tidak efisien-an pada mekanisme penanganan interrupt dalam kernel
  3. Me-load memory bus sewaktu menyalin data yang dilakukan di controller dan physical memory
Meningkatkan Kinerja I/O
  1. Memperkecil jumlah context switch
  2. Memperkecil jumlah penyalinan data yang dilakukan sewaktu pengoperan data antara device dan aplikasi
  3. Memperkecil jumlah interrupt dengan menggunakan transfer secara besar-besaran, smart controllersdan polling (jika busywaiting bisa diminimalisir)
  4. Menambah konkurensi dengan menggunakan DMA controllers atau channels yang telah diketahui untuk meng-offload penyalin sederhana dari CPU
  5. Memindahkan proses-proses primitif ke perangkat keras, untuk membuat operasinya dalam device controllers konkuren dengan CPU dan operasi Bus
  6. Menyeimbangkan CPU, memory subsystem, bus, dan I/O performance, karena kelebihan di salah satu area akan membuat keterlambatan pada yang lain
»»  READMORE...
 
blog design by suckmylolly.com