Memahami Interrupt Di Komputer

Salah satu karakteristik komputer (PC) yang sering kali ditunjukkan adalah ia selalu mengerjakan perintah berurut, langkah demi langkah.   Yup, begitulah cara kerja prosesor (CPU) di komputer!   Akan tetapi tidak selamanya alur eksekusi selalu berurutan.   Prosesor dapat saja menerima sebuah sinyal penting dimana ia harus segera menanganinya dan menunda terlebih dahulu apa yang sedang dikerjakannya saat ini.   Sinyal penting tersebut disebut sebagai interrupt.   Prosesor dapat menerima dua jenis interrupt, yaitu hardware interrupt dan software interrupt.   Sesuai namanya, hardware interrupt adalah interrupt yang dikirim oleh hardware melalui jalur khusus.   Contoh hardware interrupt adalah sinyal yang dikirim ke prosesor saat tombol keyboard ditekan.   Interrupt ini bersifat asynchronous karena sinyal tersebut dapat dikirim kapan saja saat prosesor sedang mengerjakan program.   Kebalikannya, software interrupt adalah interrupt yang dikirim oleh software (dengan kata lain sinyal yang dikirim dari dalam prosesor itu sendiri).

Mengapa memakai interrupt?   Untuk menunjukkan alasan penggunaan interrupt, saya akan menggunakan contoh proses untuk membaca apa yang diketik dari keyboard.   Tanpa interrupt, program harus memerintahkan prosesor untuk secara periodik memeriksa apakah ada tombol yang di tekan di keyboard.   Teknik ini disebut sebagai polling.   Semakin banyak hardware yang terlibat dalam proses polling, maka beban prosesor akan semakin berat.   Ingat bahwa polling harus memeriksa secara periodik walaupun tidak ada tombol yang di tekan di keyboard.   Interrupt menawarkan solusi yang lebih baik: prosesor akan mendapatkan notifikasi hanya bila tombol keyboard ditekan.

Pada contoh di atas, muncul sebuah pertanyaan: bukankah ada banyak hardware dalam sebuah PC, berapa banyak jalur yang khusus dipakai untuk mengirim interrupt?   CPU untuk PC umumnya hanya memiliki satu pin INTR (dan satu lagi untuk Non Maskable Interrupt/NMI) .   Anggap saja semua hardware dapat dihubungkan ke pin tersebut secara langsung, pertanyaannya adalah bila semua hardware mengirim sinyal secara bersamaan ke pin INTR, mana yang harus ditangani oleh prosesor terlebih dahulu?   Untuk mengatasi permasalahan ini, arsitektur hardware PC memakai teknik multiplexing dengan memperkenalkan PIC (Programmable Interrupt Controller).   Hardware terhubung ke PIC yang kemudian terhubung ke CPU.   PIC akan membuat antrian dan menentukan interrupt mana yang akan diteruskan ke prosesor terlebih dahulu.   Pada komputer modern, PIC sudah digantikan oleh APIC (Advanced Programmable Interrupt Controller).   APIC mendukung hingga 255 jalur interrupt dan mendukung multiprocessor.   APIC terdiri atas 2 komponen, yaitu I/O APIC yang terhubung ke jalur interrupt di perangkat keras dan Local APIC yang terletak di masing-masing prosesor.

Pertanyannya berikutnya, yang lebih ke arah software (eksekusi), adalah bagaimana prosesor bisa tahu apa yang harus dikerjakan saat sebuah interrupt terjadi?   Sebagai perbandingan, prosesor (CPU) akan selalu mengerjakan perintah yang ada di lokasi ECS:EIP.   Setelah perintah selesai dikerjakan, nilai EIP akan bertambah.   Ini yang menyebabkan CPU selalu mengerjakan perintah secara berurut, walaupun beberapa instruksi seperti JMP dan CALL dapat mengubah nilai register ECS dan EIP ke lokasi yang tidak berurut lagi.   Lalu, bila interrupt terjadi, CPU harus mengerjakan apa?

Untuk menjawab pertanyaan di atas, saya perlu memahami apa yang disebut sebagai vector number.   Setiap interrupt memiliki vector number dengan nilai dari 0 hingga 255 (dimana nilai 0 hingga 31 tidak boleh dipakai!).   Jadi, hardware boleh memiliki vector number dari 32 hingga 255.   Setiap kali terjadi interrupt, prosesor akan meminta vector number dari interrupt bersangkutan (kecuali non-maskable interrupt yang selalu memiliki vector number 2).

Interrupt Dispatch Table (IDT) adalah sebuah struktur data array yang berisi lokasi instruksi yang akan dikerjakan bila terjadi interrupt.   Prosesor akan menentukan instruksi yang akan dikerjakan dengan memanggil alamat di IDT (anggap saja pemanggilan ini sama seperti pada instruksi CALL) berdasarkan vector number untuk interrupt tersebut.

Yang bertugas untuk mengisi nilai IDT, yang menentukan apa yang harus dilakukan bila ada interrupt, adalah sistem operasi. Sebagai contoh, di Windows Debugger, saya dapat melihat isi IDT dengan menggunakan perintah !idt, seperti pada berikut ini:

0: kd> !idt

Dumping IDT:

37:     83640104 hal!PicSpuriousService37
71:     87610cd8 i8042prt!I8042MouseInterruptService (KINTERRUPT 87610c80)
72:     86b1ea58 USBPORT!USBPORT_InterruptService (KINTERRUPT 86b1ea00)
80:     87610a58 dxgkrnl!DpiFdoMessageInterruptRoutine (KINTERRUPT 87610a00)
81:     8727b058 i8042prt!I8042KeyboardInterruptService (KINTERRUPT 8727b000)
82:     86b1ecd8 USBPORT!USBPORT_InterruptService (KINTERRUPT 86b1ec80)
...

Pada output di atas, terlihat bahwa bila terjadi interrupt pada vector number 0x81 (bilangan heksadesimal bukan desimal), maka kode program di driver keyboard (i8042prt.sys) akan dikerjakan.   Jadi, mekanisme yang disediakan oleh hardware (prosesor) hanya sebatas sampai memanggil kode program berdasarkan IDT.   Sistem operasi-lah yang bertanggung jawab untuk mengisi IDT.  Selain itu, khusus untuk sistem operasi Windows, ia tidak memakai fasilitas prioritas dari APIC melainkan menggunakan manajemen berbasis software yang disebutnya sebagai IRQL.  Alasan utama Windows melakukan hal ini adalah agar tidak terikat pada fasilitas hardware (PIC, APIC, atau lainnya nanti) sehingga lebih portable.  Dampak buruknya: Windows tidak dapat dipakai sebagai real-time operating system yang harus memiliki prioritas serba akurat.

Emulator Android Dan Dukungan Virtualisasi Di Prosesor

Patokan yang sering dipakai dalam memilih sebuah prosesor (CPU) adalah kecepatan dan jumlah core.   Tapi nilai sebuah prosesor tidak hanya dilihat dari kedua patokan tersebut.   Pengguna yang sering menjalankan emulator seperti emulator Android atau virtual machine seperti VirtualBox, sebaiknya memilih prosesor yang mendukung fasilitas hardware-assisted virtualization.   Penggunaan fasilitas ini dapat meningkatkan kinerja emulator/simulator.   Selain itu, tanpa dukungan hardware-assisted virtualization, virtual machine akan menolak mensimulasikan CPU yang berbeda.   Sebagai contoh, mensimulasikan CPU x64 (64-bit) dari sebuah host CPU x86 (32-bit) tidak dapat dilakukan bila prosesor tidak memiliki fitur ini.    Intel memberi nama teknologi hardware-assisted virtualization-nya sebagai VT-x, sementara AMD memakai nama AMD-V.

Perlu diingat bahwa tidak semua prosesor yang beredar di pasaran mendukung virtualisasi (secara hardware).   Sebagai contoh, seluruh seri Intel Core i3, i5 dan i7 sudah mendukung virtualisasi sementara itu banyak tipe prosesor Intel Atom serta beberapa tipe Intel Celeron dan Intel Pentium (generasi baru) tidak mendukung virtualisasi hardware.   Untuk memeriksa dukungan virtualisasi di sistem operasi Windows, saya dapat menjalankan program coreinfo.exe yang merupakan bagian dari paket Sysinternals Suite.   Bila pada baris VMX atau SVM terdapat tanda bintang (*),  maka CPU yang dipakai sudah mendukung virtualisasi hardware, seperti yang terlihat pada gambar berikut ini:

Memeriksa apakah prosesor mendukung virtualisasi hardware

Memeriksa apakah prosesor mendukung hardware-assisted virtualization

Pada contoh ini, saya akan memakai prosesor Intel.   Pertanyaan yang muncul saat ini adalah apa kelebihan hardware-assisted virtualization? Apa yang membedakannya dengan virtualisasi yang dilakukan oleh software?

Untuk menjawab pertanyaan di atas, saya perlu terlebih dahulu memahami arsitektur komputer.    Pada komputer rumah (PC), eksekusi kode program sistem operasi dan eksekusi kode program untuk aplikasi biasanya dilakukan secara terpisah.   Prosesor modern mendukung hingga 4 lapisan eksekusi (ring 0, ring 1, ring 2, dan ring 3), tapi sistem operasi Windows hanya memanfaatkan 2 lapisan saja, yaitu ring 0 untuk menjalankan kode program penting milik sistem operasi tersebut dan ring 3 untuk menjalankan kode program aplikasi. Tujuan pemisahan ini adalah untuk menjaga agar kode program aplikasi yang berbahaya hanya terbatas merusak area memori di ring 3 saja tanpa membahayakan sistem operasi di ring 0.   Beberapa instruksi prosesor (bayangkan bahasa assembly) hanya bisa bekerja di ring 0.   Boleh dibilang ciri khas sebuah sistem operasi adalah ia selalu dijalankan dari ring 0 dimana ia bisa mengelola seluruh sumber daya yang ada dan mengerjakan seluruh instruksi prosesor yang tersedia.

Pada saat sebuah sistem operasi dijalankan dari emulator atau virtual machine, maka sistem operasi ‘virtual’ tersebut bekerja di ring 3 bukan ring 0.  Hal ini sistem operasi host (yang menjalankan emulator) sudah duluan bekerja di ring 0 dan tidak mungkin membiarkan sistem operasi ‘virtual’ tersebut untuk mengambil alih kendali.  Masalahnya adalah kode program di sistem operasi ‘virtual’ pada dasarnya dirancang untuk bekerja di ring 0.  Sistem operasi ‘virtual’ tersebut akan memakai wilayah memori yang tidak boleh diakses oleh ring 3 dan mengerjakan instruksi CPU yang tidak dapat dilakukan di ring 3.  Oleh sebab itu, emulator perlu menentukan apa yang harus dilakukan bila operasi yang harus bekerja di ring 0 dipanggil (misalnya dengan melakukan simulasi).   Terkadang bila akses tidak mungkin disimulasikan, emulator akan mengabaikan operasi tersebut.

Berbeda dengan pendekatan dimana software emulator harus bekerja keras mensimulasikan operasi di ring 0, hardware-assisted virtualization di prosesor Intel mengatasi permasalahan ini dengan memperkenalkan operasi VMX.   Prosesor yang mendukung VT-x memiliki beberapa intruksi tambahan seperti VMXON, VMLAUNCH, VMRESUME, VMXOFF, dan sebagainya (bayangkan kode program assembly bila ingin memanggilnya).   Instruksi tersebut memungkinkan emulator untuk menjalankan sistem operasi virtual pada state prosesor yang unik berlaku untuknya tanpa mempengaruhi state ‘nyata‘.   Dengan demikian, sistem operasi virtual dapat berjalan pada ring 0 di prosesor ‘virtual‘ tersebut secara aman.   Karena sebagian besar proses virtualisasi tidak lagi dilakukan oleh kode program emulator melainkan secara transparan terjadi di CPU, maka ini disebut sebagai hardware-assisted virtualization.

Saya akan mencoba menjalankan Android Emulator di prosesor Intel Pentium berkecepatan 2.2 GHz tanpa dukungan teknologi VT-x.   Saya menemukan bahwa dibutuhkan waktu sekitar 3 menit agar tampilan emulator siap untuk dipakai.

Kemudian sebagai perbandingan, saya akan menjalankan emulator Android pada sebuah prosesor berkecepatan Intel Celeron 1.6 GHz yang mendukung teknologi VT-x.   Secara clock speed, nilainya jauh dibawah prosesor sebelumnya dimana terdapat selisih 0.6 GHz (walaupun prosesor yang berbeda arsitektur tidak dapat dibandingkan melalui clock speed-nya!).   Karena saya memakai prosesor Intel untuk menjalankan emulator Android, saya dapat menggunakan teknologi Intel Hardware Accelerated Execution Manager (Intel HAXM) yang mensyarakatkan prosesor yang mendukung VT-x.   Untuk memakai Intel HAXM, pada Android SDK Manager, saya memberi tanda centang di Intel x86 Emulator Accelerator (HAXM) seperti yang terlihat pada gambar berikut ini:

Mendownload Intel HAXM

Mendownload Intel HAXM

Setelah proses download selesai, saya perlu men-install Intel HAXM secara manual.   Install?  Yup!  Walaupun tertulis ‘Installed‘ di Android SDK Manager,  sebenarnya yang dilakukan oleh SDK Manager hanya men-download file installer Intel HAXM.   Oleh sebab itu, saya perlu mencari folder berikut ini di lokasi instalasi Android SDK: extras/intel/Hardware_Accelerated_Execution_Manager.   Pada folder tersebut terdapat sebuah file IntelHAXM.exe yang dapat dipakai untuk melakukan instalasi.

Setelah proses instalasi Intel HAXM selesai dilakukan, saya kemudian membuat sebuah Android Virtual Device (AVD) baru dengan konfigurasi seperti berikut ini:

Membuat AVD Baru

Membuat AVD Baru

Saya menemukan bahwa waktu yang dibutuhkan agar layar home Android muncul dan siap dipakai adalah sekitar 1 menit. Kesimpulannya, Intel Celeron 1.6 GHz dengan teknologi VT-x lebih cepat menjalankan emulator dibandingkan dengan Intel Pentium 2.2 GHz tanpa teknologi VT-x.  Selain itu, pada percobaan melakukan instalasi aplikasi BlackBerry Messenger (BBM) untuk Android pada emulator Genymotion, saya menemukan bahwa aplikasi tersebut tidak dapat berjalan pada komputer dengan prosesor yang tidak mendukung hardware-assisted virtualization  Aplikasi BBM akan selalu tertutup sendiri beberapa saat setelah dijalankan (pesan kesalahan menunjukkan hal yang berkaitan dengan native API).  Saat mencobanya pada prosesor Intel yang mendukung VT-x, saya tidak menemukan masalah ini.

Siapa Bilang Pemograman Embedded Hardware Harus Selalu Assembly?

Gadget impian saya bukanlah iPhone atau Samsung Galaxy Tab (Android) terbaru.  Yang saya inginkan saat ini adalah Raspberry Pi Model B.   Benda apa itu?  Berikut ini adalah gambar yang diambil dari situs resminya di http://www.raspberrypi.org:

Sebuah Raspberry Pi

Sebuah Raspberry Pi

Benda seukuran kartu kredit ini sebenarnya adalah sebuah komputer mini.  Tetapi komputer mini ini dapat dirangkai sebagai bagian dari sistem lain yang lebih rumit.  Raspberry Pi Model B dijual seharga US$35 (belum termasuk ongkos kirim dan customs bila dipesan ke Indonesia).

Apa saja ‘komponen‘ yang terdapat pada Raspberry Pi Model B?

  1. Memakai SoC (System on a Chip) Broadcom BCM2835.  Di dalamnya sudah terdapat Prosesor ARM11 dan GPU Videocore 4.   Ini adalah generasi prosesor yang sama yang dipakai pada Kindle 2, iPhone 3G, Nintendo 3DS, Samsung Galaxy Mini, dan sebagainya.  Prosesor yang dipakai oleh Raspberry Pi berjalan pada clock rate 700 MHz.  Sementara itu GPU Videocore 4 mendukung OpenGL ES2.0 and OpenVG libraries.  Menurut keterangan dari situs resminya, kinerja GPU yang dipakai setara dengan Xbox 1.
  2. SD Card Slot yang mendukung SD card (kartu memori) hingga maksimal 32GB (minimal 2GB).
  3. Memori 256 MB (revisi 1) atau 512 MB (revisi 2).
  4. 10/100 wired Ethernet untuk terhubung ke LAN.
  5. 2 buah port USB 2.0.
  6. Output audio jack 3.5mm.
  7. Composite RCA (PAL and NTSC) untuk output ke layar televisi.  Yup, kebanyakan televisi analog memiliki TV in  (‘colokan‘ bulat dengan ‘lubang‘ ditengahnya) sehingga harusnya tidak sulit menjadikan televisi sebagai layar monitor.
  8. HDMI untuk output ke layar monitor.  Sayangnya, Raspberry Pi tidak mendukung VGA, padahal disini monitor VGA masih banyak dipakai.
  9. microUSB sebagai pemberi catu daya 5V.  Untuk mengambil catu daya dari ‘colokan listrik’ di rumah, bisa memakai power supply yang dijual terpisah.   Bisa juga digantikan dengan 4 baterai AA.  4 x 1.5 = 6 V sehingga disarankan untuk memakai voltage regulator.
  10. Terdapat GPIO di board, tetapi belum ada datasheet yang tersedia bagi yang tertarik dengan proyek elektronik.

Karena saya tidak pernah menyentuh benda ini, saya tidak dapat melakukan review.  Saya hanya akan merangkum informasi yang diperoleh dari situs resminya.

Apa yang harus dilakukan setelah memiliki Raspberry Pi?   Sebuah hardware digital tanpa software ibarat sebuah tubuh yang hanya bisa terbaring kaku tanpa roh.  Oleh sebab itu, tujuan utama membeli Raspberry Pi adalah untuk diprogram untuk menciptakan gadget sesuai kreatifitas pemiliknya.  Well, sesungguhnya, Raspberry Pi awalnya dipakai untuk pembelajaran di perkuliahan computer science (btw, kebanyakan universitas ilmu komputer di Indonesia tidak menganut penamaan seperti di US; tetapi jurusan Teknik Informatika adalah sinonim untuk  jurusan Computer Science) .  Dengan harganya yang terjangkau, setiap  mahasiswa bisa membeli Raspberry Pi dan bisa bereksperimen di rumah masing-masing 🙂

Sistem operasi dan kode program yang menjadi software bagi Raspberry Pi akan disimpan di SD card.   Sistem operasi yang direkomendasikan adalah Raspbian yang dapat di-download di situs resmi Raspberry Pi.  Tetapi Raspberry Pi dapat memakai sistem operasi lain seperti Debian Squeeze dan sistem operasi Linux lainnya yang mendukung prosesor ARM.

Jadi, begitu Raspberry Pi mendapat catu daya, ia akan mengerjakan sistem operasi di SD card.  Dengan demikian, dibutuhkan komputer lain yang akan men-format dan men-install sistem operasi di SD card.

Lalu bagaimana dengan bahasa pemograman?  Apakah harus memakai bahasa pemograman assembly seperti di pemograman microcontroller?  Tidak!  Raspberry Pi dapat diprogram dengan bahasa pemograman yang didukung oleh sistem operasi yang dipakai, seperti Python, C/C++, Java dan lainnya!

Bicara soal Java, hampir semua mahasiswa telah mengetahui bahwa teknologi Java dibedakan ke dalam Java Standard Edition (JSE), Java Micro Edition (JME), dan Java Enterprise Edition (JEE).   Tapi sebenarnya masih ada yang lain juga, seperti Java Card dan Java SE Embedded.

Java SE Embedded?  Bukankah untuk perangkat mobile sudah ada Java Micro Edition (JME)?   JME ditargetkan untuk perangkat mobile dengan kinerja terbatas sehingga banyak fitur JSE yang dipangkas dan dimodifikasi sehingga JME terlihat ramping dan ‘mini’!  Tapi seiring perkembangan zaman, perangkat mobile sudah semakin canggih sehingga mereka bahkan sanggup menjalankan Java Standard Edition (JSE), misalnya pada perangkat Android.  JavaSE  Embedded pada dasarnya adalah Java Standard Edition (JSE) yang  diatur untuk keperluan embedded, misalnya optimalisasi garbage collector dan berjalan pada headless mode (konfigurasi dimana tidak ada keyboard, mouse, dan layar).   Kesimpulannya:  membuat program untuk Java SE Embedded hampir sama dengan untuk Java Standard Edition (JSE); tetapi membuat kode program di Java Micro Edition (JME) membutuhkan adaptasi lagi karena lumayan berbeda dari Java Standard Edition (JSE).

Kabar gembiranya, Java SE Embedded sudah mendukung prosesor ARM.  Tapi ada juga kabar buruknya:  Oracle membolehkan developer men-download dan membuat kode program dengan Java SE Embedded secara gratis;  tetapi pada saat distribusi, Oracle akan me-‘nagih’ lisensi yang tidak gratis!!!   Berikut ini adalah kutipan dari FAQ di http://www.oracle.com/technetwork/java/embedded/resources/se-embeddocs/index.html :

Q10. How is Java SE Embedded licensed?

Java SE is free to use for development of embedded applications. We provide affordable licensing for deploying Java SE in an embedded device or as part of a embedded-based system. Please contact us when you are ready to deploy or if you have already deployed but not sure you have the correct license

Q11. Does deploying Java SE embedded devices or purposes require a royalty?

Yes. Oracle's license for Java SE enables it to be freely used for general purpose desktops or servers. If Java SE is bundled as part of a dedicated solution that involves or controls hardware of some kind, then it's likely an embedded application and is subject to modest royalty payments.

Mahasiswa masih tetap dapat memakai Java SE Embedded di  Raspberry Pi asalkan tidak menjual alat hasil rancangannya 🙂

Untuk informasi lebih lanjut, silahkan baca artikel http://www.oracle.com/technetwork/articles/java/raspberrypi-1704896.html menjelaskan secara lengkap bagaimana menggunakan Java SE embedded di Raspberry Pi.

Kesimpulannya: Membuat program untuk Raspberry Pi akan terasa mudah bila dibandingkan mem-‘program’ microcontroller (walaupun tidak semua microcontroller harus diprogram dengan assembly).   Karena Raspberry Pi adalah sebuah mini komputer yang cukup lengkap, programmer dapat menghindari banyak hal yang berkaitan dengan elektronik (solder-menyolder).    Programmer bisa memakai port USB yang disediakan Raspberry Pi untuk berkomunikasi dengan hardware USB lain.   Tapi tetap terbuka peluang bagi programmer yang hobi melakukan eksperimen elektronika;  mereka dapat menggunakan pin GPIO dan library C untuk mem-‘program’ pin tersebut seperti yang dibicarakan di http://www.raspberrypi.org/phpBB3/viewtopic.php?f=44&t=30315.

Menyimpan Bit Dengan Latch

Sirkuit yang outputnya tergantung pada input sebelumnya disebut sebagai sequential circuit.  Ketergantungan dengan input sebelumnya membuat sequential circuit memiliki sifat memori.  Salah satu contoh sequential circuit yang ditunjukkan dalam tulisan ini adalah apa yang disebut sebagai latches. Berikut ini adalah diagram sirkuit SR latch:

Diagram animasi SR latch

SR latch adalah sirkuit sederhana yang terdiri atas dua buah NOR gate. Sirkuit ini membutuhkan dua input, yaitu S (Set) dan R (Reset)SR latchmenghasilkan dua output, yaitu Q dan Q’.

Bila nilai S adalah 0 dan R adalah 1, maka nilai Q adalah 0.  Hal ini karena R adalah 1 dan NOR gate akan selalu menghasilkan 0 bila salah satu input bernilai 1.  Sebaliknya, nilai Q’ adalah 1.

Bila nilai S adalah 1 dan R adalah 0, maka keluaran Q’ selalu 0 sehingga Q bernilai 1.

Bila S bernilai 0 dan R bernilai 0, maka output dari Q dan Q’ akan bergantung pada nilai saat ini:

  • Nilai Q adalah 1 dan Q’ adalah 0.  Lalu, SR latch mendapat input S berupa 0 dan R berupa 0, maka nilai Q menjadi 1 dan nilai Q’ menjadi 0.
  • Nilai Q adalah 0 dan Q’ adalah 1.  Lalu, SR latch mendapat input S berupa 0 dan R berupa 0, maka nilai Q menjadi 0 dan nilai Q’ menjadi 1.

Hal ini menunjukkan bahwa:

  • Bila Set (S) bernilai 1 dan Reset (R) bernilai 0, maka nilai Q akan menjadi 0.
  • Bila Set (S) bernilai 0 dan Reset (R) bernilai 1, maka nilai Q akan menjadi 1.
  • Bila Set (S) bernilai 0 dan Reset (R) bernilai 0, maka nilai Q akan selalu sama seperti nilai sebelumnya.

Dengan demikian, sebuah SR latch dapat dipakai untuk menyimpan nilai sebuah bit.  Untuk mengatur nilai bit, seseorang perlu memberikan SR = 10 atau SR = 01.  Untuk mempertahankan nilai bit tersebut, nilai S tetap 0 dan nilai R tetap 0, maka bit Q akan selalu memiliki nilai yang sama selama listrik masih mengalir.  Ini adalah konsep dasar dari sebuah sel 1-bit dalam memori RAM.

Sequential circuit umumnya beroperasi pada synchronous mode.  Pada modus ini, seluruh sirkuit dalam sistem mengubah state-nya secara bersamaan pada waktu yang telah ditentukan, melalui penggunaan clock signal.  Sebuah clock signal adalah sinyal yang memiliki state 1 (ON) dan 0 (OFF), seperti yang ditunjukkan pada gambar berikut:

Clock Signal

Sebuah clock cycle adalah waktu diantara dua buah rising edge (sisi sinyal dari 0 menjadi 1) yang berurutan.  Clock rate atau frequency adalah jumlah clock cycle selama 1 detik dalam satuan Hertz (Hz).  Dengan demikian, frequency 1 GHz menunjukkan bahwa dalam 1 detik terdapat 1 x 109 clock cycle.  Jadi, waktu yang dibutuhkan untuk sebuah clock cycle adalah 1 / (1 x 109) = 1 x 10-9 detik atau 1 ns (nano detik).

Untuk membuat SR latch tersinkronisasi dengan keseluruhan sirkuit lainnya dalam sistem, maka diagram dapat dimodifikasi menjadi seperti pada gambar berikut:

SR latch dengan clock signal

Sekarang, input pada SR latch akan memiliki efek bila terdapat sinyal 1 (ON) dari clock.

D latch adalah jenis SR latch yang menghindari kombinasi S=1 dan R=1.  Caranya adalah dengan menggunakan sebuah inverter, seperti yang terlihat di gambar berikut:

D latch

Langkah untuk memberi nilai Q pada D latch sama seperti pada SR latch.  Setelah itu, nilai Q pada D latch akan terus dipertahankan dengan selama sinyal dari clock adalah sinyal 0 (OFF).