Bir işletim sisteminin olduğu yerlerde, programlar en azından doğrudan değil, aygıt sürücüleri ile konuşmaz. Programlar, onlardan habersiz, sonunda bir ya da daha fazla soyutlama katmanı aracılığıyla aygıt sürücülerine konuşulan soyutlamalarla konuşurlar.
Modern işletim sistemlerinin karmaşıklığını atlayacağım ve 45 yıl önce geliştirilen bir mikrobilgisayar işletim sistemi olan CP / M'yi örnek olarak kullanacağım . CP / M, üç katmanlı bir katman kekiydi:
Programı. Üst katman, hesaplama ve I / O yaparak faydalı bir şey yapan (kelime işlemci, Space Invaders oynamak) bir programdır . Bir noktada programın kullanıcının görmesi için 'A' harfini görüntülemek istediğini varsayalım. CP / M, konsol olarak bilinen ve programla etkileşime giren kullanıcının bakması gereken bir soyutlama sağlar . Bir karakter göndermenin geleneksel yolu birkaç montaj talimatı ile:
LD C,2 ; Load 2 into register C
LD E,65 ; Load the ASCII code for 'A' into register E
CALL 5 ; Call CP/M's routine for getting things done
(Onlara aşina değilseniz, kayıtlar işlemcide yaşayan değişkenler olarak düşünülebilir.) Sihirli sayıların ne olduğunu 2
ve 5
bir dakika içinde ne olduğunu öğreneceğiz . Buradaki paket, tüm programın bildiği bir konsolun ve ona yazmanın bir yolu olduğudur. Bunun ötesinde hiçbir şey bilmiyor ya da umursamıyor. CP / M'nin I / O için kullandığı iki soyutlamadan ilki budur.
BDOS . 5
Programın çağırdığı adres , bir sonraki katmanın, Temel Disk İşletim Sisteminin veya BDOS'un giriş noktasıdır . BDOS, bir restoran menüsünden numaraya göre sipariş vermek gibi bir dizi numaralandırılmış işlev sunar . Kaydı C
işlev numarasıyla ( 2
konsol çıktısı için) ve E
gönderilecek karaktere sahip kaydı yükleyerek konsol çıktısını almak istediğinizi söylersiniz . Konsol çıkışı çok basit bir işlemdir ve BDOS'un bir sonraki katmanı çağırmak dışında bununla çok fazla uğraşması gerekmez.
BIOS. BIOS veya Temel Giriş / Çıkış Sistemi , donanıma özgü tüm kodların yaşadığı katmandır. Modern sistemlerde, bu bir dizi aygıt sürücüsü olarak kabul edilir. BDOS gibi, BIOS da BDOS'un işini yapmak için kullandığı standart çok ilkel işlemler kümesi için çağrılar sağlar . Bu operasyonlardan birineCONOUT
Programın istediği karakteri üst üste iki katman yazmasını istediği karakteri elde etmeye özen gösterir. (PC'lerin aksine, o zamanlar homojen değildi. Herkesin sistemi bunu gerçekleştirmenin farklı yollarına sahipti.) Konsol çıktısı BDOS için basit bir geçiş, ancak bir diskte dosya oluşturmak gibi daha karmaşık bir şey yapmak birçok şey gerektirebilir BIOS, medyayı manipüle etmek için çağırır. Yine, BIOS'un standart, soyut bir arayüzü olduğundan, BDOS her zaman istediklerini nasıl elde edeceğini bilir ve BIOS'un nasıl yaptığını umursamaz.
Muhtemelen neden sadece biri yerine iki soyutlama olduğunu (programdan BDOS'a ve BDOS'dan BIOS'a) merak ediyorsunuzdur. Cevap, CP / M ve BDOS'un bilgisayar üreticilerine ikili formda sağlanabilmeleri, donanımları için aygıt sürücülerine sahip özel bir BIOS yazmaları, ikisini birbirine cıvatalaması ve sistemleri için OS olarak göndermeleri. Bu çok önemli bir şeydi, çünkü BDOS bir kuruluş tarafından korunuyordu ve bu nedenle her zaman kullanıcı programları tarafından bilinen bir miktardı ve aynı uygulamaları çok çeşitli (zaman) donanımda çalıştırmayı mümkün kıldı. Bu yüzden işletim sistemleri mevcuttur ve biz sadece donanımı doğrudan büken programlar yazmıyoruz .
Burada tarif ettiğim her şey modern işletim sistemleri için de geçerlidir. Örneğin Unix, her şeyi dosya olarak özetler. Bu programlar sistem çağrıları aynı seti (verir open()
, write()
, close()
bir disk sürücüsü veya seri port olsun iletişim, vs.). Kararlar ve soyutlamalar kümesi çok daha karmaşıktır, ancak yine de işlemin gerçekleşmesi için alt katmandaki hangi aygıt sürücüsü kodunun çalıştırılması gerektiğini seçmek için kaynar.