Materi Sistem Komputer Modul I/O
I/O System merupakan bagian untuk menangani masukan dan
keluaran dari DCS. Inputan dan outputan tersebut bisa termasuk analog atau
digital. Inputan/outputan digital seperti sinyal-sinyal ON/OFF atau Start/Stop.
Kebanyakan dari pengukuran proses dan outputan terkontrol merupakan jenis
analog
I/O system terdiri dari beberapa bagian penting yaitu:
a. I/O Hardware
b. Application I/O Interface
c. Kernel I/O Subsystem
d. I/O Requests to Hardware Operations
e. Streams
f. Performance
Oke, mari kita mulai dari bagian yang pertama,
I/O Hardware
I/O Hardware pada umunya berupa beberapa jenis, seperti device penyimpanan
(disk,tape), transmission device (network card, modem), dan human-interface
device (screen, keyboard). Device tersebut dikendalikan oleh instruksi I/O.
Alamat-alamat yang dimiliki oleh device tersebut akan digunakan oleh direct I/O
instruction dan memory-mapped I/O.
Berikut beberapa konsep yang biasanya digunakan ialah port, bus (daisy chain/
shared direct access), dan controller (host adapter).
- Port ialah koneksi yang digunakan
oleh device untuk berkomunikasi dengan mesin.
- Bus ialah koneksi yang menghubungkan
beberapa device menggunakan kabel-kabel.
- Controller ialah alat-alat
elektronik yang berfungsi untuk mengoperasikan port, bus, dan device.
Application I/O Interface
Merupakan suatu mekanisme untuk mempermudah pengaksesan, sehingga sistem
operasi melakukan standarisasi cara pengaksesan peralatan I/O. Contoh : suatu
aplikasi ingin membuk data yang ada dalam suatu disk, aplikasi tersebut harus
dapat membedakan jenis disk apa yang akan diaksesnya.
Interface aplikasi I/O melibatkan abstraksi, enkapsulasi, dan software
layering. Device driver mengenkapsulasi tiap-tiap peralatan I/O ke dalam
masing-masing 1 kelas yang umum (interface\standar). Tujuan dari adanya lapisan
device driver ini adalah untuk menyembunyikan perbedaan-perbedaan yang
ada pada device controller dari subsistem I/O pada kernel. Karena hal
ini, subsistem I/O dapat bersifat independen dari hardware.
Beberapa hal yang berhubungan dengan Application I/O Interface adalah:
Peralatan Block dan Karakter:
Perangkat Block termasuk disk drive
- Perintah termasuk baca, tulis dan cari
- Raw I/O atau akses file-sistem
- Pemetaan memori untuk pengaksesan file
Perangkat karakter termasuk keyboad,
mouse dan serial port
- Perintahnya seperti get, put
- Library layered dalam proses pengeditan
Peralatan Jaringan
Adanya perbedaan pengalamatan dari jaringan I/O, maka sistem operasi memiliki
interface I/O yang berbeda dari baca, tulis dan pencarian pada disk. Salah satu
yang banyak digunakan pada sistem operasi adalah interface socket. Socket
berfungsi untuk menghubungkan komputer ke jaringan. System call pada socket
interface dapat memudahkan suatu aplikasi untuk membuat local socket, dan
menghubungkannya ke remote socket.Dengan menghubungkan komputer ke socket, maka
komunikasi antar komputer dapat dilakukan.
Jam dan Timer
Jam dan timer pada hardware komputer, memiliki tiga fungsi :
- memberi informasi waktu saat ini
- memberi informasi lamanya waktu sebuah proses
- sebagai trigger untuk suatu operasi pada suatu waktu.
Fungsi ini sering digunakan oleh
sistem operasi. Akan tetapi, system call untuk pemanggilan fungsi ini
tidak di-standarisasi antar sistem operasi. Hardware yang mengukur waktu dan
melakukan operasi trigger dinamakan programmable interval timer yang dapat di
set untuk menunggu waktu tertentu dan kemudian melakukan interupsi. Contoh
penerapannya ada pada scheduler, dimana akan melakukan interupsi yang akan
memberhentikan suatu proses pada akhir dari bagian waktunya.
Sistem operasi dapat mendukung lebih dari banyak timer request daripada
banyaknya jumlah hardware timer. Dengan kondisi seperti ini, maka kernel atau
device driver mengatur list dari interupsi dengan urutan yang duluan datang
yang duluan dilayani.
Kernel
I/O subsystems
Kernel menyediakan banyak service
yang berhubungan dengan I/O. Pada bagian ini, kita akan mendeskripsikan
beberapa service yang disediakan oleh kernel I/O subsystem, dan kita akan
membahas bagaimana caranya membuat infrastruktur hardware dan device-driver.
Service yang akan kita bahas adalah I/O scheduling, buffering, caching, pooling,
reservasi device, error handling.
I/O Scheduling
Untuk menjadualkan sebuah set permintaan I/O, kita harus menetukan urutan yang
bagus untuk mengeksekusi permintaan tersebut. Scheduling dapat meningkatkan
kemampuan sistem secara keseluruhan, dapat membagi device secara rata di antara
proses-proses, dan dapat mengurangi waktu tunggu rata-rata untuk menyelesaikan
I/O. Ini adalah contoh sederhana untuk menggambarkan definisi di atas. Jika
sebuah arm disk terletak di dekat permulaan disk, dan ada tiga aplikasi yang
memblokir panggilan untuk membaca untuk disk tersebut. Aplikasi 1 meminta
sebuah blok dekat akhir disk, aplikasi 2 meminta blok yang dekat dengan awal,
dan aplikasi 3 meminta bagian tengah dari disk. Sistem operasi dapat mengurangi
jarak yang harus ditempuh oleh arm disk dengan melayani aplikasi tersebut
dengan urutan 2, 3, 1. Pengaturan urutan pekerjaan kembali dengan cara ini
merupakan inti dari I/O scheduling. Sistem operasimengembangkan
implementasi scheduling dengan menetapkan antrian permintaan untuk tiap device.
Ketika sebuah aplikasi meminta sebuah blocking sistem I/O, permintaan tersebut
dimasukkan ke dalam antrian untuk device tersebut. Scheduler I/O mengatur
urutan antrian untuk meningkatkan efisiensi dari sistem dan waktu respon rata-rata
yang harus dialami oleh aplikasi. Sistem operasi juga mencoba untuk bertindak
secara adil, seperti tidak ada aplikasi yang menerima service yang buruk,
atau dapat seperti memberi prioritas service untuk permintaan penting yang
ditunda. Contohnya, pemintaan dari subsistem mungkin akan mendapatkan prioritas
lebih tinggi daripada permintaan dari aplikasi. Beberapa algoritma scheduling
untuk disk I/O akan dijelaskan ada bagian Disk Scheduling.Satu cara untuk
meningkatkan efisiensi I/O subsistem dari sebuah komputer adalah dengan
mengatur operasi I/O. Cara lain adalah dengan menggunakan tempat penyimpanan
pada memori utama atau pada disk, melalui teknik yang disebut buffering,
caching, dan spooling.
Buffering
Buffer adalah area memori yang menyimpan data ketika mereka sedang dipindahkan
antara dua device atau antara device dan aplikasi. Buffering dilakukan untuk
tiga buah alasan. Alasan pertama adalah untuk men-cope dengan kesalahan yang
terjadi karena perbedaan kecepatan antara produsen dengan konsumen dari sebuah
stream data. Sebagai contoh, sebuah file sedang diterima melalui modem dan
ditujukan ke media penyimpanan di hard disk. Kecepatan modem tersebut kira-kira
hanyalah 1/1000 daripada hard disk. Jadi buffer dibuat di dalam memori utama
untuk mengumpulkan jumlah byte yang diterima dari modem. Ketika keseluruhan
data di buffer sudah sampai, buffer tersebut dapat ditulis ke disk dengan
operasi tunggal. Karena penulisan disk tidak terjadi dengan instan dan modem
masih memerlukan tempat untuk menyimpan data yang berdatangan, maka dipakai 2
buah buffer. Setelah modem memenuhi buffer pertama, akan terjadi request untuk
menulis di disk. Modem kemudian mulai memenuhi buffer kedua sementara buffer
pertama dipakai untuk penulisan ke disk. Pada saat modem sudah memenuhi buffer
kedua, penulisan ke disk dari buffer pertama seharusnya sudah selesai, jadi
modem akan berganti kembali memenuhi buffer pertama dan buffer kedua dipakai
untuk menulis. Metode doublebuffering ini membuat pasangan ganda antara
produsen dan konsumen sekaligus mengurangi kebutuhan waktu di antara mereka.
Alasan kedua dari buffering adalah untuk menyesuaikan device-device yang
mempunyai perbedaan dalam ukuran transfer data. Hal ini sangat umum terjadi pada
jaringan komputer, dimana buffer dipakai secara luas untuk fragmentasi dan
pengaturan kembali pesan-pesan yang diterima. Pada bagian pengirim, sebuah
pesan yang besar akan dipecah ke paket-paket kecil. Paket-paket tersebut
dikirim melalui jaringan, dan penerima akan meletakkan mereka di dalam buffer
untuk disusun kembali. Alasan ketiga untuk buffering adalah untuk mendukung
copy semantics untuk aplikasi I/O. Sebuah contoh akan menjelaskan apa arti dari
copy semantics. Jika ada sebuah aplikasi yang mempunyai buffer data yang ingin
dituliskan ke disk. Aplikasi tersebut akan memanggil sistem penulisan,
menyediakan pointer ke buffer, dan sebuah integer untuk menunjukkan ukuran
bytes yang ingin ditulis. Setelah pemanggilan tersebut, apakah yang akan
terjadi jika aplikasi tersebut merubah isi dari buffer, dengan copy semantics,
keutuhan data yang ingin ditulis sama dengan data waktu aplikasi ini memanggil
sistem untuk menulis, tidak tergantung dengan perubahan yang terjadi pada
buffer. Sebuah cara sederhana untuk sistem operasi untuk menjamin copy
semantics adalah membiarkan sistem penulisan untuk mengkopi data aplikasi ke
dalam buffer kernel sebelum mengembalikan kontrol kepada aplikasi. Jadi
penulisan ke disk dilakukan pada buffer kernel, sehingga perubahan yang terjadi
pada buffer aplikasi tidak akan membawa dampak apa-apa. Mengcopy data antara
buffer kernel data aplikasi merupakan sesuatu yang umum pada sistem operasi,
kecuali overhead yang terjadi karena operasi ini karena clean semantics. Kita
dapat memperoleh efek yang sama yang lebih efisien dengan memanfaatkan
virtual-memori mapping dan proteksi copy-on-wire dengan pintar.
Caching
Sebuah cache adalah daerah memori yang cepat yang berisikan data kopian. Akses
ke sebuah kopian yang di-cached lebih efisien daripada akses ke data asli.
Sebagai contoh, instruksi-instruksi dari proses yang sedang dijalankan disimpan
ke dalam disk, dan ter-cached di dalam memori physical, dan kemudian dicopy
lagi ke dalam cache secondary and primary dari CPU. Perbedaan antara sebuah
buffer dan ache adalah buffer dapat menyimpan satu-satunya informasi datanya
sedangkan sebuah cache secara definisi hanya menyimpan sebuah data dari sebuah
tempat untuk dapat diakses lebih cepat. Caching dan buffering adalah dua fungsi
yang berbeda, tetapi terkadang sebuah daerah memori dapat digunakan untuk
keduanya. sebagai contoh, untuk menghemat copy semantics dan membuat scheduling
I/O menjadi efisien, sistem operasi menggunakan buffer pada memori utama untuk
menyimpan data. Buffer ini juga digunakan sebagai cache, untuk meningkatkan
efisiensi I/O untuk file yang digunakan secara bersama-sama oleh beberapa
aplikasi, atau yang sedang dibaca dan ditulis secara berulang-ulang. Ketika
kernel menerima sebuah permintaan file I/O, kernel tersebut mengakses buffer
cacheuntuk melihat apakah daerah memori tersebut sudah tersedia dalam memori
utama. Jika iya, sebuah physical disk I/O dapat dihindari atau tidak dipakai.
penulisan disk juga terakumulasi ke dalam buffer cache selama beberapa detik,
jadi transfer yang besar akan dikumpulkan untuk mengefisiensikan schedule
penulisan. Cara ini akan menunda penulisan untuk meningkatkan efisiensi I/O
akan dibahas pada bagian Remote File Access.
Spooling dan Reservasi Device
Sebuah spool adalah sebuah buffer yang menyimpan output untuk sebuah device,
seperti printer, yang tidak dapat menerima interleaved data streams. Walau pun
printer hanya dapat melayani satu pekerjaan pada waktu yang sama, beberapa
aplikasi dapat meminta printer untuk mencetak, tanpa harus mendapatkan hasil
output mereka tercetak secara bercampur. Sistem operasi akan menyelesaikan
masalah ini dengan meng-intercept semua output kepada printer. Tiap output
aplikasi sudah di-spooled ke disk file yang berbeda. Ketika sebuah
aplikasi selesai mengeprint, sistem spooling akan melanjutkan ke antrian
berikutnya. Di dalam beberapa sistem operasi, spooling ditangani oleh sebuah
sistem proses daemon. Pada sistem operasi yang lain, sistem ini ditangani oleh
in-kernel thread. Pada kedua kasus, sistem operasi menyediakan interfacekontrol
yang membuat users and system administrator dapat menampilkan antrian tersebut,
untuk mengenyahkan antrian-antrian yang tidak diinginkan sebelum mulai
di-print. Untuk beberapa device, seperti drive tapedan printer tidak dapat me-multiplex
permintaan I/O dari beberapa aplikasi. Spooling merupakan salah satu cara untuk
mengatasi masalah ini. Cara lain adalah dengan membagi koordinasi untuk
multiple concurrent ini. Beberapa sistem operasi menyediakan dukungan untuk
akses device secara eksklusif, dengan mengalokasikan proses ke device idledan
membuang device yang sudah tidak diperlukan lagi. Sistem operasi lainnya
memaksakan limit suatu file untuk menangani device ini. Banyak sistem operasi
menyediakan fungsi yang membuat proses untuk menangani koordinat exclusive
akses diantara mereka sendiri.
Error Handling
Sebuah sistem operasi yang menggunakan protected memory dapat menjaga
banyakkemungkinan error akibat hardware mau pun aplikasi. Devices dan transfer
I/O dapat gagal dalam banyak cara, bisa karena alasan transient, seperti
overloaded pada network, mau pun alasan permanen yang seperti kerusakan yang
terjadi pada disk controller. Sistem operasi seringkali dapat mengkompensasikan
untuk kesalahan transient. Seperti, sebuah kesalahan baca pada disk akan
mengakibatkan pembacaan ulang kembali dan sebuah kesalahan pengiriman pada
network akan mengakibatkan pengiriman ulang apabila protokolnya diketahui. Akan
tetapi untuk kesalahan permanent, sistem operasi pada umumnya tidak akan bisa
mengembalikan situasi seperti semula. Sebuah ketentuan umum, yaitu sebuah
sistem I/O akan mengembalikan satu bit informasi tentang status panggilan
tersebut, yang akan menandakan apakah proses tersebut berhasil atau gagal.
Sistem operasi pada UNIX menggunakan integer tambahan yang dinamakan errno
untuk mengembalikan kode kesalahan sekitar 1 dari 100 nilai yang
mengindikasikan sebab dari kesalahan tersebut. Akan tetapi, beberapa perangkat
keras dapat menyediakan informasi kesalahan yang detail, walaupun banyak
sistem operasi yang tidak mendukung fasilitas ini.
Kernel Data Structure
Kernel membutuhkan informasi state tentang penggunakan komponen I/O. Kernel
menggunakan banyak struktur yang mirip untuk melacak koneksi jaringan,
komunikasi karakter-device, dan aktivitas I/O lainnya. UNIX menyediakan akses
sistem file untuk beberapa entiti, seperti file user, raw devices, dan alamat
tempat proses. Walau pun tiap entiti ini didukung sebuah operasi baca,
semantics-nya berbeda untuk tiap entiti. Seperti untuk membaca file user,
kernel perlu memeriksa buffer cache sebelum memutuskan apakah akan melaksanakan
I/O disk. Untuk membaca sebuah raw disk, kernel perlu untuk memastikan bahwa
ukuran permintaan adalah kelipatan dari ukuran sektor disk, dan masih terdapat
di dalam batas sektor. Untuk memproses citra, cukup perlu untuk mengkopi data
ke dalam memori. UNIX mengkapsulasikan perbedaan-perbedaan ini di dalam
struktur yang uniform dengan menggunakan teknik object oriented.Beberapa sistem
operasi bahkan menggunakan metode object oriented secara lebih extensif.
Sebagai contoh, Windows NT menggunakan implementasi message-passing untuk I/O.
Sebuah permintaan I/O akan dikonversikan ke sebuah pesan yang dikirim melalui
kernel kepada I/O manager dan kemudian ke device driver, yang masing-masing
bisa mengubah isi pesan. Untuk output, isi message adalah data yang akan
ditulis. Untuk input, message berisikan buffer untuk menerima data. Pendekatan
message-passing ini dapat menambah overhead, dengan perbandingan dengan teknik
prosedural yang men-share struktur data, tetapi akan mensederhanakan struktur
dan design dari sistem I/O tersebut dan menambah fleksibilitas.
I/O
Requests to Hardware Operations
Salah satu contohnya adalah:
1. Ilustrasi membuka sebuah
- Device mana tempat file yang akan dibuka
- Menerjemahkan _nama_ ke dalam device yang dimaksud
- Membaca secara fisik file yang hendak dibuka
- Data sudah siap untuk diakses
- Mengembalikan kontrol pada proses
2. Ilustrasi lain pada waktu boot
Sistem mula-mula meminta bus piranti keras untuk menentukan device apa yang ada
Streams
I/O stream adalah suatu mekanisme
pengiriman data secara bertahap dan terus menerus melalui suatu aliran data
(dua arah).Biasa digunakan dalam network protocol dan menggunakan message
passingdalam men-transferdata
Stream terdiri atas :
- sebuah stream head yang merupakan antarmuka dengan user
process,
- sebuah driver end yang mengontrol device,
- dan nol atau lebih stream modules
Performance
- Faktor utama dalam performa sistem :
- Permintaan CPU untuk menjalankan device driver, kode
kernel I/O
- Keadaan/state untuk melayani interrupt
- Copy data
- Network traffic khususnya pada beban kinerja
Improving Perfomance:
- Menurunkan jumlah alih konteks.
- Mengurangi jumlah pengkopian data ke memori ketika
sedang dikirimkan antara device dan aplikasi.
- Mengurangi frekuensi interupsi, dengan menggunakan
ukuran transfer yang besar, smart controller, dan polling.
- Meningkatkan concurrency dengan controller atau channel
yang mendukung DMA.
- Memindahkan kegiatan processing ke perangkat keras,
sehingga operasi kepada device controller dapat berlangsung bersamaan
dengan CPU.
- Menyeimbangkan antara kinerja CPU, memory subsystem,
bus, dan I/O.