Transcript Status
Bölüm 14
GİRİŞ/ÇIKIŞ SİSTEMLERİ
Giriş
Bilgisayara bağlı olan aygıtların kontrolünün
sağlanması işletim sistemi tasarımcılarının öncelikli
hedeflerindendir.
G/Ç cihazları, fonksiyonları ve hızlarına göre çok
geniş bir yelpazade değişirler. (mouse, harddisk, cdrom...).
Bunların kontrolü için çeşitli metotlar gerekmektedir.
Bu metotlar, Kernel’ın I/O alt sistemini kurarlar.
Bu alt sistem karmaşık I/O düzenleme işlerini
kernel’ın geri kalan işlemlerinden ayırmış olmaktadır.
I/O Yönetimi Gereksinimler
I/O Devices:
Aygıtlar olmadan bilgisayar(CPU, DRAM vb) kullanılamaz.
Geniş yelpazede değişen aygıtlar
Güvenilmeyen aygıtlar (phsycical failures or transmission errors)
Nasıl güvenilir yapılacaklar?
Unpredictable/slow aygıtlar
Nasıl standart bir arayüz sağlanacak?
Hangi işlemi nasıl gerçekleştireceklerini bilmiyorsak onları nasıl yöneteceğiz?
Bazı Operasyonel Parametreler:
Byte/Blok
Sequential/Random
Bazı aygıtlar byte erişimi sağlarlar (klavye,mouse)
Bazıları blok erişimi sağlarlar (disk)
Bazı aygıtlara sıralı erişim yapılabilir (tape)
Bazılarına random şekilde erişilir (disk, cd)
Polling/Interupts (hangisi daha etkin)
Bazı aygıtlar devam eden izlenmeye e ihtiyaç duyarlar (işletim sistemi sürekli keypressed oldumu diye çok kısa
aralıklarla kontrol eder)
Bazıları servise ihtiyaç duyduklarında interrupt oluştururlar (OS keypressed interruptı ile aygıta yönelir)
Keyboard için hangisi daha etkin?
Gigabit ethetnet için hangisi daha etkin?
Genelde aygıtlar polling ve interruptları kombine ederler.
I/O Donanımı
Cihazlar birkaç kategoriye ayrılırlar:
Depolama birimleri(disk driverlar, CD-Rom)
transfer birimleri (network cards, modems)
insan-etkileşimliler (ekran, klavye, mouse).
özel amaçlar için geliştirilmiş cihazlar
I/O Donanımı
Çeşitli G/Ç Cihazları
Genel içerik
Port (bilgisayarın bir cihaza erişimi için bağlantı noktası)
Bus (birkaç cihaz bir grup genel hattı paylaşıyorsa)
Controller(host adapter) (bus, aygıtları yönetmek üzere
kurulmuş elektronik sistem)
I/O talimatları için kontrolör cihazlar(cihazlara ait registerlar)
Cihazlar adreslere sahiptir, adresler şunlar tarafından kullanılır:
Direk I/O talimatları (in, out,..)
Memory-mapped I/O (move, load, store,..)
I/O Hardware
I/O Hardware (direct I/O)
I/O Hardware (memory mapped I/O)
Port Yapısı
PC lerde I/O port yerleşimi
G/Ç Portu
G/Ç portu tipik olarak 4 register saklar:
Status register, birtakım bitler içerir. Bu bitler,
mevcut komut tamamlandı mı,
Cihaz meşgul mü (busy bit),
bir device error var mı
gibi durum bilgileri içerirler.
Control register, bir komuta başlamak yada cihazın
modunu değiştirmek üzere yazılabilir.(comment bit,
comment ready bit içerir)
Data-in register, inputu almak üzere hazır bekler.
Data-output register, outputu göndermek üzere yazılan
registerdır.
Tipik Bus Yapısı
Aygıtlar için Standart Arayüzler
Block Devices (disk, tape, dvd-rom drivers)
Character Devices (klavye, mouse, seri port, USB)
Veri bloklarına erişim vardır
Komutlar open(), read(), write(), seek() ins.içerir.
Dosya sistemi erişimi
Memory-Mapped dosya erişimi olanaklıdır
Belirli bir zamanda tekil karakter erişimi
Komutlar get(), put() içerir
Network Devices (ethernet, wireless, bluetooth)
Kendi arayüzü olacak kadar blok ve karakter erişimli
olanlardan farklılık gösterir
Unix ve Windows soket arayüzü içerir
Kullandıkları: streams, queues, mailboxes
Zamanlama?
Blocking Interface: Bekle
Veri isteğinde bulunulduğunda (read() sistem çağrısı gibi), veri
hazır olana kadar prosesi sleep modunda beklet
Veriyi yazdığın zaman (write() çağrısı), cihaz veri için hazır olana
kadar prosesi sleep modunda beklet.
Non-Blocking Interface: Bekleme
Read() yada write() çağrılarından beklemeden başarı ile transfer
edilmiş byte sayıları ile döner.
Asynchronous Interface: Daha sonra hatırlat
Veri isteğinde bulunulduğunda, pointer’ı user buffer alanına al,
return immediately; sonrasında kernel buffer alanını doldurur ve
kullanıcıyı uyarır.
Veri gönderildiğinde, pointer’ı user buffer alanına al; return
immediately; sonrasında kernel veriyi alır ve kullanıcıyı uyarır.
İşlemci Aygıtlar ile Konuşur
CPU bir kontrolör ile
etkileşimdedir.
I/O Instructions: in/out
Okunan ve yazılabilen
register setleri içerir
Request kuyrukları için
bellek içerebilir
Örn: Intel mimarisi: out
0x21, AL
Memory Mapped I/O:
load/store
Registers/bellek fiziksel
adres alanında görünür
I/O load ve store instruction
ları ile gerçekleşir.
Aygıt Yönetimi
Aygıt yönetimi G/Ç işlemleri yapan uygulamaların kullandığı
kaynakların, birinci seviyede sanal tanımını yapmayı sağlar.
Sanal tanımlama ile uygulama yazılımı geliştiren programcılar
donanımın nasıl yönetildiği bilmeden, donanımla ilgili işlemleri İşletim
sistemi yardımıyla yapabiliriler.
Aygıt yönetimi tarafından, çeşitli G/Ç işlemleri için tanımlanan teknikler:
G/Ç sistemi düzeni
Sorgulamalı doğrudan G/Ç
Kesme Yönelimli G/Ç
Bellek eşleşmeli G/Ç
Doğrudan bellek erişimi
G/Ç Sistemi Düzeni
Modern işletim sistemlerinde aygıt yönetimi:
aygıt sürücüsü
ve kesme yordamı (kesme-yönelimli denilen)
etkileşimiyle yürütülür.
Kesmeler kullanılmazsa aygıt sürücüsü aygıt yönetimini
tamamen yürütür.
Uygulama işlemi bir aygıtı, komut vererek ve veriyi aygıt
sürücüsü ile dönüşümlü olarak kullanır. Aygıt sürücüsünün iki ana
sorumluluğu vardır:
Uygulama işlemine bir Uygulama Programı Arayüzü(API)
uygulamak
API'de tanımlanan fonksiyonları yürütmek için uygun komutlar
vererek aygıta özgü operasyonları yapmak.
...
Farklı aygıt sürücüleri arasındaki API'ler mümkün olduğunca
benzer olmalıdır.
Bu durum uygulama programcısının aygıtı kullanmak için
gereken aygıta özgü bilgilerin miktarını azaltacaktır.
Ancak aygıt denetleyicileri o aygıta özgü olduğundan,
sürücünün denetleyiciye doğru komutları verebilmesi,
denetleyici durum yazmacındaki bilgileri doğru bir şekilde
yorumlaması
ve hatasız aygıt fonksiyonu için bilginin denetçi veri yazmacına veya
yazmacından iletilmesi için
sürücü uygulaması sürücüye ve donanıma özel olmalıdır.
Sorgulamalı Doğrudan G/Ç
Doğrudan G/Ç; makinenin ana belleği ve aygıt denetleyicisinin
veri yazmaçları arasındaki veri iletiminin CPU ‘nun
sorumluluğunda olan bir G/Ç yöntemi belirtir.
G/Ç yapılırken, aygıt yöneticisi aygıtın meşgul-bitti işaretlerini
sorgulayabilir veya fonksiyonun tamamlandığını anlamak için
kesmeleri kullanabilir.
Bu bölüm çok basit teknikler üzerine yoğunlaşmıştır; yani, CPU
aygıtı başlatır ve sonra fonksiyonun ne zaman bittiğini
sorgulamak için durum yazmaçlarını sorgular.
CPU sürekli olarak denetleyicinin durumunu gözetlediğinden, bu
teknikle verimli bir şekilde CPU’yu çalıştırmak oldukça zordur
...
bir giriş fonksiyonunu başarmak için gereken
adımlar:
Uygulama işlemi bir oku fonksiyonu ister.
Aygıt sürücüsü aygıtın boş olup olmadığını belirlemek için
durum yazmacını araştırır. Eğer aygıt meşgulse, sürücü
aygıt boş olana dek bekler.
Sürücü aygıtı başlatmak için aygıt denetleyicisinin komut
yazmacına bir giriş komutu koyar.
Aygıtın fonksiyonunu tamamlamasını beklerken sürücü
defalarca durum yazmacını okur.
Sürücü denetleyicinin veri yazmaçlarının içeriğini kullanıcı
işleminin sahasına kopyalar.
Programmed I/O
CPU zamanı
Printer saniyede 100 karakter print etsin. Her
karakter için 10msaniye geçsin.
Bu durumda her karakter printer’ın data
register’ına yazıldıktan sonra CPU 10 Msec
idle-loop’da beklemek zorunda kalacaktır.(bir
sonraki karakterin print edilip edilmeyeceğini
kontrol)
Kesme-Yönelimli G/Ç
Bilgisayar donanımına kesmelerin konulmasının nedeni aygıt
sürücüsünün sürekli olarak denetçinin durum yazmacını
sorgulamasını ortadan kaldırmak içindir.(CPU nun busy-wait
döngüsünü kırmak)
Bunun yerine aygıt denetleyicisi, otomatik olarak fonksiyon
bitiminde aygıt sürücüsünü uyarır.
Kesmeleri kullanan bu modelde, aygıt yönetimi işlevselliği dört
farklı bölüme ayırır.Bunlar:
Sürücünün fonksiyonu başlattığı üst kısım
Aygıt durum tablosu
Kesme işleyici
Aygıt işleyici
Kesmeler
Temel bir interrupt mekanizması şu şekilde çalışır.
CPU, işletilen her işlemden sonra CPU’nun sezdiği “interrupt-request-line”
olarak adlandırılan bir hatta sahiptir.
Kısaca şunu diyebiliriz:
CPU, kontrolörün interrupt request line’da bir sinyal bildirdiğini tesbit ettiğinde, CPU,
durumu (state’in) kaydeder ve interrupt-handler prosesine atlar.
Interrupt-handler, kesmenin nedenini tespit eder, gerekli işlemleri yapmaya başlar.
aygıt kontrolörü, interrupt-request-line’a bir sinyal bırakarak kesme bildirir,
CPU kesmeyi yakalar ve kontrolü kesme işlemciye geçirir,
Kesme işlemci(interrupt handler), aygıta gerekli hizmeti sunarak kesmeyi silmiş olur
Kesme mekanizması bunlara ek olarak bir de kesme öncelik seviyeleri sistemi
barındırır.
...
Kesme Vektörü
Kesme mekanizması, bir adres – küçük bir kümeden özel bir
interrupt-handler seçen bir numara- kabul eder.
Bir çok mimaride, bu adres “kesme vektörü” olarak adlandırılan
bir tablodaki bir ofset değeridir.
Bu vektör, interrupt handlerların bellek adreslerini içerirler.
Vektör haline getirilmiş bir kesme mekanizmasının amacı, tek bir
interrupt-handlerın tüm olası kesme kaynaklarını hangisinin
servise ihtiyacı var şeklinde bir arama ihtiyacını azaltmaktır
Intel Pentium da Event-Vector(Kesme
Vektörü) Tablosu
Bellek Eşlemeli G/Ç
Bir G/Ç aygıtı denetleyicinin yazmaçlarına veya denetleyicinin
yazmaçlarından bilgiyi okuyan/yazan yazılıma sahip olmalıdır.
Bilgisayar tasarımcısı denetçinin yazmaçlarını işleyebilecek hangi
komutları kullanacağına karar vermelidir.
Her kontrol yazmacının bir port(kapı) numarası vardır. I/O işlemleri
için özel assembly kodlar kullanılır.
Bu sistemde bellek ve I/O için kullanılacak adres uzayı farklıdır.
makine komut kümesi bu işi başarmak için özel G/Ç komutlarını
içerir.
Örneğin, komut kümesi G/Ç fonksiyonlarını yapmak için aşağıdaki
komutları bulundurmalıdır:
...
input
aygıt_adresi
output
aygıt_adresi
copy_in
MIÜ_yazmacı, aygıt_adresi, denetleyici_yazmacı
copy_out
MIÜ_yazmacı, aygıt_adresi, denetleyici_yazmacı
test
MIÜ_yazmacı, aygıt_adresi
...
Copy_in R3, 0x012, 4 :
0x012 aygıt adresli denetleyicinin 4 nolu veri
yazmacını 3 nolu MIÜ yazmacına kopyalar.
Example: Memory-Mapped Display
Controller
Memory-Mapped:
Kontrol registerları ve görüntü belleği
fiziksel adres alanına map edilir
Adresler boot zamanında set
edilmişlerdir.
display memory alanına yazmak
( “frame buffer” olarak da adlandırılır)
ekrandaki image’i değiştirir.
Addr: 0x8000F000—0x8000FFFF
Komut kuyruğu alanına grafik tanımını
yazmak
Addr: 0x80010000—0x8001FFFF
Komut registerına yazmak on-board
graphics donanımında şunun
yapılmasına neden olabilir
Addr: 0x0007F004
Fiziksel sayfalar page table lar ile korunurlar
0x80020000 Graphics
Command
Queue
0x80010000
Display
Memory
0x8000F000
0x0007F004 Command
0x0007F000 Status
Physical Address
Space
Doğrudan Bellek Erişimi
Sürücü G/Ç fonksiyonunu başlattıktan sonra doğrudan bellek erişimi
(DMA) denetçileri MIÜ müdahalesi olmadan doğrudan bilgiyi bellek
adresine iletir veya bellek adresinden okuyabilir veya yazabilir
DMA denetçisi, yazılımın veriyi bellek ve denetleyici arasında iletmek
için kullandığı fonksiyonların aynısını yapan bir mantık içerir.
Fakat bunu yaparken sadece denetçinin donanımını kullanır.
DMA donanımı hiç CPU kullanmaksızın veri iletimini yapabilir.
DMA makinenin G/Ç başarımını önemli derecede arttırabilir.
DMA ile denetçi, aygıt ve bellek arasında doğrudan okuyup
yazabildiğinden, denetçinin mantıksal olarak veri yazmaçlarına bile
ihtiyacı yoktur.
Ancak, DMA denetçisi ilgili bellek bloğunu gösteren sürücü tarafından
yüklenilen adres yazmacını içermelidir. Bu gösterge ana belleğe hedef
bloğu yerleştirmek için denetçi tarafından kullanılır.
DMA Adımları
Aygıt Sürücüleri
Her aygıt bilgisayara bağlandıktan sonra kendisine özgü bazı
kodlara ihtiyaç duyar bu kod device driver olarak adlandırılır.
Aygıt üreticisi tarafından yazılır.
Aygıt sürücüleri G/Ç fonksiyonunu çağırmak için uygulama işlemi
tarafından kullanılan aygıt yöneticisinin bir bölümüdür.
İşlem aygıt sürücüsünü istediğinde, sürücü denetçi-bağımsız
talebi iletişim kurmak için denetçi-bağımlı eylemlere dönüştürür.
Aygıt-sürücü katmanının amacı, kernel’ın alt sistemlerinden
device-kontrolörlerin arasındaki farkları kaldırmaktır.
I/O sistemini donanımdan bağımsız yapabilmek işletim sistemi
tasarımcıları ve donanım parçası imalatçıları için çok kolaylıklar
sağlamaktadır.
Her işletim sistemi device-driver arayüzü için kendi standartlarına
sahiptir.
…
Aygıt sürücüsü kavramı oldukça karmaşık ve soyut bir
kavramdır.
Bu bilgisayarın yazılımı üzerinde en alt seviyede
çalışır. Çünkü aygıt sürücü kavramı tamamen aygıtın
donanım özelliklerine bağlıdır.
Eğer herhangi bir uygulama bir aygıta ihtiyaç
duyuyorsa; çekirdek uygun aygıt sürücüsüyle iletişime
geçer. Sonra, sürücü uygun komutları aygıt üzerinde
uygular. Aslında aygıt sürücüsü bir çeşit fonksiyonlar
serisidir.
Bu fonksiyonlar aç, kapat, oku, yaz, ara gibi
kavramları içerirler.
Aygıt Sürücü Arayüzü
İşletim sistemleri aygıt yönetimi sistemi için bir
mimari tanımlar.
Bu tasarımlar sistemden sisteme değişiklik gösterir;
bu yüzden evrensel bir organizasyon yoktur.
Bu sistemlerin her biri aygıt yöneticisi için iki önemli
arayüze sahiptir
API (blok, karakter, network)
Sürücü ve İşletim sistemi çekirdeği arasındaki arayüz
Aygıt Sürücülerinin Yerleşimi
Kernel I /O Yapısı
KERNEL I/O Alt Sistemi
Buffering: Buffer verilerin iki cihaz arasında transferi ya da bir
cihazla uygulama arasında transferi sırasında kullanılan bellek
alanlarıdır. Performansın anahtarıdır.
Caching: Cache, verinin bir kopyasını taşıyan ve çok hızlı
erişilebilen bir bellek türüdür. Cached kopyaya erişmek verinin
orjinaline erişmekten çok daha etkin bir yöntemdir.
Spooling: Bir cihaz için çıkış verisi içeren bir çeşit bufferdır. Bir
printer bir zamanda yalnızca bir işe cevap verebilirken, birden çok
uygulama farklı çıktılar almak isteyebilir. Ve bu işlerin birbirine
karışmamalarını isterler. Her uygulamanın çıkışı ayrı bir disk
dosyasına spool edilir.
Error handling (hata yakalama):Aygıtlar ve I/O transferi birçok
bozulmaya uğrayabilir. Genel bir kural olarak, bir I/O sistem çağrısı
bir bilgi biti ile geri döner. Bu bit sistem çağrısının durumunu bildirir.
Başarılı ya da başarısız şekilde.
Kernel Veri Yapıları
Dosya ve aygıtlara erişim kontrolü
Dosya sistemi yerleşimi
Aygıt yerleşimi
Buffering, caching, spooling
I/O düzenleme
Aygıt durumlarını görüntüleme, hata yakalama, hatadan geri
dönüş
Aygıt sürücü konfigürasyonu ve başlatılması, çalıştırılması
I/O Döngüsü
I/O System Özeti
Sistemin Performansını Etkileyenler
CPU nun aygıt sürücüyü işletmesi ve kernel
In I/O kodu işletmesine göre değişir
kesmelere göre Context switch ler
Veri kopyalama
Network trafiği
Performansı Artırmak için
İçerik anahtarlamanın sayısı azaltılmalı
Veri kopyalama azaltılmalı
Bir kere de daha çok transfer ile kesmeler
azaltılmalı
DMA kullanılmalı
CPU, bellek, bus ve I/O lar yüksek through
put için ayarlanmalı.