GİRİŞ/ÇIKIŞ SİSTEMLERİ 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, cd-rom...). 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 Nasıl standart bir arayüz sağlanacak? Güvenilmeyen aygıtlar (phsycical failures or transmission errors) Nasıl güvenilir yapılacaklar? Unpredictable/slow aygıtlar Hangi işlemi nasıl gerçekleştireceklerini bilmiyorsak onları nasıl yöneteceğiz? Bazı Operasyonel Parametreler: Byte/Blok Bazı aygıtlar byte erişimi sağlarlar (klavye,mouse) Bazıları blok erişimi sağlarlar (disk) Sequential/Random 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) 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 Character Devices (klavye, mouse, seri port, USB) 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 Non-Blocking Interface: Bekleme 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. Okunan ve yazılabilen register setleri içerir Request kuyrukları için bellek içerebilir I/O Instructions: in/out Ö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 G/Ç sistemi düzeni Sorgulamalı doğrudan G/Ç 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. 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. Kısaca şunu diyebiliriz: 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 copy_in MIÜ_yazmacı, aygıt_adresi, denetleyici_yazmacı copy_out 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 0x8000F000 0x80010000 Physical Address Space Status 0x0007F000 Command 0x0007F004 Graphics Queue 0x80020000 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
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.
… Bu fonksiyonlar aç, kapat, oku, yaz, ara gibi kavramları içerirler. 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ı.