Bilindiği gibi bilgisayar sistemleri donanım ve yazılım olarak adlandırılan iki temel bileşenden oluşur.
Gözle görülür, elle tutulur yarı iletken yongalar, bunları taşıyan kartlar, görüntü ekranları gibi elektronik kökenli birimler ile disk, disket, manyetik şerit sürücüleri, tuş takımı ve yazıcılar gibi elektromekanik nitelikli ögeler bilgisayar donanımı olarak adlandırılırlar.
Donanım ögelerinin anlamlı birlikteliğiyle ortaya çıkan bilgisayar sisteminin hizmet üretebilmesi programlanarak işe koşulmasıyla sağlanır. Bilgisayar donanımlarını, hizmet üretme yönünde denetleyen programlar, daha genel bir bağlamda yazılım diye adlandırılırlar.
İşletim Sisteminin Konumu
Sorunların çözümünde bilgisayardan yararlanabilmek için, çözümlere ilişkin algoritmaları, bilgisayar sistemi üzerinde programlamak gerekir. Bu yolla oluşturulan bilgisayar programları, eldeki verileri, algoritmanın belirlediği yolla işleyerek sonuç üretirler. Verilerin işlem öncesi bilgisayar sistemine girilmesi, elde edilen sonuçların da kullanıcıya döndürülmesi, görüntülenmesi gerekir. Bu bağlamda programlar, sorunun çözümüne özgü ve verilerin giriş/çıkış işlemlerine özgü olmak üzere iki kesimden oluşuyormuş gibi düşünülebilir.
Sorununun çözümüne özgü kesimde, örneğin, çözümün gerektirdiği kimi hesaplamalar, arama, sıralama gibi işlemler yerine getirilirken giriş/çıkış işlemleri kesiminde; verilerin, klavye, disk gibi birimlerden, fiziksel olarak okunması, yazıcılardan döküm alınması gibi işlemler gerçekleştirilir.
Ortalama alma amacıyla geliştirilen bir programda, ortalamaya giren değerlerin toplanması, toplamın öge sayısına bölünmesi işlemleri sorunun çözümüne özgü işlemlerdir. Ortalamaya giren değerlerin klavyeden okunması, elde edilen sonuçların ekran, yazıcı gibi birimlerden görüntülenmesi ise giriş/çıkış işlemlerini oluşturur. Verilerin diskten okunması, ekranda görüntülenmesi, yazıcıdan dökülmesi gibi giriş/çıkış işlemleri, üst düzey programlama dilleriyle, birkaç komutla yerine getirilen işlemler olarak algılanır. Ancak derleme sonucunda elde edilen amaç programlar içinde, bu işlemlere ilişkin kesimler de önemli bir yer tutar.
Programlar içinde sorunların çözümüne ilişkin kesimler sorundan soruna farklılıklar gösterir. Giriş/çıkış işlemleriyle ilgili kesimler ise, donanımın fiziksel özelliklerine bağımlı ve bir bilgisayar sistemi için hep aynıdır. Örneğin, silindir, kafa ve sektör numaraları bilinen bir disk öbeğinin sürücüden okunması, tüm uygulama programlarınca, hep aynı biçimde yerine getirilmesi gereken bir işlemdir. Bu durumda programların, giriş/çıkış işlemlerine özgü kesimlerinin, aynı donanım üzerinde işletilen tüm programlar tarafından ortaklaşa kullanılabileceği söylenir. Ortaklaşa kullanılabilen bu kesimleri hazır yordamlar biçiminde, bilgisayar donanımlarıyla birlikte sağlamak, kullanıcıları bunların gerçekleştirim yükümlülüğünden kurtarır. Donanıma özgü karmaşık ayrıntıların bilinme zorunluluğu da, böylece ortadan kalkar. Bilgisayar sisteminin kullanımı, bu sistemden hizmet alan kullanıcılara daha yalın bir görünüm ve hazır işlevler çerçevesinde sunulabilir. Bu yolla program geliştirme süreçleri kısaltılarak kullanım kolaylığı sağlanır.

İşletim sistemleri, donanım birleşenlerinin sürülmesine dönük yordamları hazır işlevler olarak içerirler. Bu yolla kullanıcılara, bilgisayar sistemine dönük yalın bir görünüm ve kolay bir kullanım ortamı sunmayı amaçlarlar. Kullanım kolaylığı işletim sistemlerinin temel amaçlarından birini oluşturur. Salt bu amaç gözetilerek bir tanım vermek gerekirse: "İşletim sistemi, bilgisayar donanımı ile kullanıcı programları arasında yer alarak kullanıcıların bilgisayar sisteminden kolayca yararlanabilmelerini sağlayan hizmet yazılımı" olarak tanımlanır.
Ana işlem birimi, ana bellek, giriş/çıkış birimleri gibi, bir bilgisayar sistemini oluşturan donanım birleşenleri, kullanıcı programlarının işletilmesinde yararlanılan kaynaklar olarak da düşünülebilir. Bu bağlamda işletim sistemi, kaynak sözcüğünü de içerecek biçimde:
Kullanıcıların bilgisayar sistem kaynaklarından kolayca yararlanmalarını sağlama işlevi, işletim sisteminin yerine getirmekle yükümlü olduğu tek işlev değildir. Bu işlev, işletim sisteminin salt kullanıcılara dönük sorumluluğunu belirler. İşletim sisteminin bunun yanı sıra, sistem kaynaklarının verimli kullanımını sağlamak gibi, işletime dönük çok önemli bir diğer işlevi daha vardır.
İşletim sistemi, kısıtlı kaynakları programlar arasında, hem bu kaynakların verimli kullanımını, hem de hızlı bir işletimi gözeterek paylaştırmak zorundadır. Verimli kaynak kullanımı, kaynakların olabildiğince çok kullanıcı arasında bölüştürülerek boşta kaldıkları sürelerin en düşük düzeyde tutulmasını gerektirir. Bu yolla, birim zaman içinde, aynı sayıda kaynakla daha çok hizmet üretme olanakları yaratılır. Ancak programlar yönünden tek tek bakıldığında bu yaklaşımın, kaynak bekleme nedeniyle işletim hızlarını düşürdüğü görülür. Kaynak kullanım verimliliği ve program sonlandırma hızı gibi, genelde çelişebilen iki ayrı parametrenin, aynı anda eniyilenmesi, işletim sisteminin diğer temel ve zor işlevini oluşturur.
Bu durumda: "İşletim sistemi, bilgisayar sistemini oluşturan donanım ve yazılım nitelikli kaynakları, kullanıcılar (programlar) arasında kolay, hızlı ve nitelikli bir işletim hizmetine olanak verecek biçimde paylaştırırken bu kaynakların kullanım verimliliğini en üst düzeyde tutmayı amaçlayan bir yazılım sistemi" olarak düşünülebilir.
İşletim sisteminin, kolay ve hızlı kullanım, kaynak verimliliği gibi kıstasların dışında, bilgisayar ortamında saklanan bilgilerin, gerek bozulmalara, gerekse izinsiz erişimlere karşı korunmasının sağlanması gibi koruma ve güvenlikle ilgili başka işlevleri de vardır. Bu işlevler de tanım içine katıldığında: "İşletim sistemi, bilgisayar sistemini oluşturan donanım ve yazılım nitelikli kaynakları kullanıcılar (programlar) arasında kolay, hızlı ve güvenli bir işletim hizmetine olanak verecek biçimde paylaştırırken bu kaynakların kullanım verimliliğini en üst düzeyde tutmayı amaçlayan bir yazılım sistemi" olarak tanımlanabilecektir.
Daha önce de belirtildiği gibi, işletim sistemi, kullanıcı (ya da uygulama programı) ile bilgisayar sistem kaynakları arasında yer alan bir yazılım katmanıdır. Bu yazılımın incelenmesi, bu bağlamda denetimleri gerçekleştirilen donanım birleşenlerine ilişkin kimi özellik ve ayrıntıların bilinmesini gerektirir. Bu özellik ve ayrıntılar inceleneceği zaman, gereksiz ayrıntılardan soyutlanmış ancak fiziksel gerçekliği yeteri kadar yansıtan bir yapısal model kullanmak, bu model üzerinde yer alan birleşenlerin yalın ve açık tanımlarını vermek sözel anlatımı kolaylaştırmak ve bu anlatıma açıklık kazandırmak açısından yararlı olacaktır. Bu çerçevede, bilgisayar sistemi dendiğinde:
- Ana işlem birimi (AİB),
- Ana bellek ve
- Giriş/çıkış birimleri
olarak adlandırılan üç temel birleşenden oluşan bir bütün anlaşılacaktır.
Bu bütün içerisinde tek bir ana işlem birimi bulunduğu, başka bir deyişle incelenen bilgisayar sisteminin tek işleyicili olduğu varsayılacaktır. İleride bu varsayımın, tek işleyicili sistemlere dayalı ilkeleri çok işleyicili sistemlere uyarlamada önemli bir sınırlama getirmediği görülecektir. Ana işlem biriminin kendisi de:
- Yazmaç/Sayaç Takımı (kısaca yazmaç takımı),
- Aritmetik-Mantık Birimi (AMB) ve
- Denetim Birimi (DB)
olarak, üç alt birleşenden oluşan bir birim olarak modellenecektir. Ana bellek, sözcüklerden oluşan doğrusal bir dizi biçiminde düşünülecektir. Giriş/çıkış birimi,
- Giriş/çıkış sürücüsü (ya da aygıtı) ile
- Giriş/çıkış arabirimi
ikilisinin oluşturduğu bütünün adı olarak kullanılacaktır.
Ana işlem birimi, ana bellek ve giriş/çıkış birimleri, bilgisayar sistem donanımını oluşturmak üzere bir yol yapısı çerçevesinde bütünleşeceklerdir. Bu bağlamda, giriş/çıkış arabirimleri, giriş/çıkış sürücülerinin ana işlem birimi ve ana bellek ikilisi ile bütünleşmesini sağlayan uyarlayıcı birimler olarak düşünülebilecektir.
Bilgisayar Yapısı Modeli
Yol, ortak işlevleri uyarınca gruplanmış im ileti hatlarına verilen addır. Bu bağlamda:
- Adres,
- Veri ve
- Denetim
yolları sözkonusu edilecektir.
Adres yolu, ana işlem biriminin, okuma ya da yazma amacıyla erişmek istediği, ana bellek sözcüğü ya da giriş/çıkış arabirimi yazmacını belirlemede (adreslemede) kullandığı genelde tek yönlü hatlara; veri yolu, kimliği adres yolu üzerinde bulunan bellek sözcüğü ya da arabirim yazmaç içeriklerinin buralardan ana işlem birimi yazmaçlarına ya da ana işlem birimi yazmaçlarından buralara iletildiği çift yönlü hat grubuna verilen addır.
Denetim yolu ise, ana işlem birimi ile ana bellek ve giriş/çıkış arabirimleri arasındaki veri aktarımlarının zamanuyumlanmasına yarayan imlerin iletildiği hat grubudur. Adres ve veri yolu üzerinden iletilen adres ve veri imleri bir bütün olarak anlamlıdır. Zira, adres ve veri yolunu oluşturan her hat, aynı anda, aynı adres ya da veri sözcüğünün değişik bit değerlerini taşır.
Von Neumann ilkesine göre çalışan bir bilgisayar sisteminde, ana bellekte saklanan komutlar yorumlanarak ya ana bellekte ya da giriş/çıkış arabirim yazmaçlarında tutulan veriler üzerinde, temel aritmetiksel ve mantıksal işlemler gerçekleştirilir. Bunun için işlemin türünü belirleyen komutlara ve işlemin uygulanacağı verilere erişim gereklidir. Ana işlem biriminin temel etkinliğini oluşturan ana belleğe ya da giriş/çıkış arabirim yazmaçlarına erişimin mantığı, zaman çizeneği diye adlandırılan bir çizim yoluyla gösterilir. Zaman çizenekleri, bilgisayar donanımlarınca yürütülen alt düzey işlemleri açıklamada güçlü bir gösterim aracını oluştururlar.
Örnek Zaman Çizeneği
Zaman çizenekleri, ana işlem biriminin gerek bellek sözcüklerine, gerekse arabirim yazmaçlarına erişimi sırasında etkili olan, adres, veri ve denetim nitelikli imlerin zaman eksenindeki çizimlerinden oluşur. Bu çizimlerde imlerin zamana göre değişen mantıksal düzeyleri gösterilir. Zaman çizenekleri üzerinde, tüm imlerin, mutlaka ayrı ayrı gösterimlerine yer verilmez. Adres ve verileri simgeleyen imler gibi birbirleriyle bağımlı imler demetlenerek gösterilir. Bu durumda, çizim üzerinde, bu imlere ilişkin salt ortak düzey değişimlerine yer verilir. Zaman çizeneklerinde kullanılan zaman birimi, ana işlem birimi saat imi periyodudur (Ti). Bu nedenle, genellikle zaman çizeneklerinin en üst kesiminde saat imini simgeleyen bir kare im çizimine yer verilir. Zira bilgisayar sistemlerinde işlem akışı ve bu akışının gereği olarak ortaya çıkan im düzey değişimleri, bir saat imine uyumlu (zamanuyumlu) olarak gelişir.
Çizimde, mov [r2],r1 simgesiyle gösterilen, r1 adlı yazmaç içeriğini r2 adlı yazmacın gösterdiği adrese aktaran (yazan) örnek bir komutun, varsayımsal bir işleyici için zaman çizeneği verilmiştir. Bu zaman çizeneğinin ilk kesimi komut kodunun bellekten okunması (komut algetir evresi) sırasında, ikinci kesimi ise r1 yazmaç içeriğinin r2 yazmaç içeriğiyle adreslenen bellek sözcüğüne yazılması (komut uygula evresi) sırasında, adres, veri ve ilgili (RD: read/oku; WR: Write/yaz) denetim imlerinin değişimlerini gösteren çizimlerden oluşmuştur.
Yukarıda belirtildiği üzere adres ve veri imleri, bunların bulunabileceği her iki olası düzeyi simgeleyen iki koşut doğru ile, demetli biçimde ve sadece değişimler gösterilerek çizilmiştir. Tek başına anlamlı olan RD ve WR gibi denetim imleri ise ayrı birer çizimle gösterilmiştir. İmlerim değişim anlarının diğer imler ve saat imi ile olan zaman uyumu eğri oklarla vurgulanmıştır. Ana bellek ve giriş/çıkış arabirimleri, ana işlem birimi ile iletişimlerinde, veri yolunu ortak kullanmak durumundadırlar. Bu birimler, veri yolunu salt ana işlem birimi buna izin verdiği sürece (bu birimleri seçtiği sürece) kullanabilirler. Bu süreler dışında, veri yolu ile bağlantılarını kopuk tutmak zorundadırlar. Bu nedenle, veri yolu üzerinde imler, salt aktarıldıkları süre boyunca ve kopuk kopuk gösterilirler.
mov [r2],r1 komutunun işletiminin ilk evresi olan algetir evresinde ana işlem birimi, adres yolu üzerine, işletilecek komutun adresini içeren program sayaç içeriğini koyar. Adres hatları üzerinde adres bilgisi varlığını sürdürürken, ikinci saat periyodunda, saat iminin düşen kenarıyla zamanuyumlu olarak RD denetim imini yükseltir. Bir saat periyodu süresince bekledikten sonra, RD iminin düşen kenarıyla zamanuyumlu olarak, veri yolu üzerinde bulunan veri değerini komut yazmacı içine aktarır. Bu işlem, ana işlem biriminin bellekten okuma yapma işlemidir. Algetir evresinin dördüncü periyodunda, komut yazmacı içinde yer alan komut kodunun çözümü (yorumlaması) yapılır. Komutun uygulaması, algetir evresini izleyen üç periyod içinde gerçekleşir. Bellekten okuma işleminde olduğu gibi, ana işlem birimi, adres yolu üzerine, bu kez r2 yazmacının içeriğini koyar. Adres hatları üzerinde bu adres bilgisi varlığını sürdürürken, bu evreye ilişkin ikinci saat periyodunda, saat iminin düşen kenarıyla zamanuyumlu olarak, bir yandan WR denetim imini yükseltirken diğer yandan, veri yolu üstüne r1 yazmaç içeriğini yükler. Bir saat periyodu boyunca bu durumda bekledikten sonra, WR imini düşürüp veri hatlarıyla olan bağlantısını koparır.
Hemen hemen tüm işletim sistemleri, kullanıcılarına iş tanımlama olanakları sunarlar. Kişisel bilgisayarlara yönelik MS-DOS işletim sisteminde iş tanımlama, bu amaç için öngörülmüş kütükler kullanılarak yapılır. Kullanıcılar bir bütün olarak işletilmesini istedikleri komut ya da program adlarını, türü .BAT olan özel bir kütüğün içine, istedikleri işletim sırasında yazarlar. Tanımlanan iş, bu özel kütüğün adı verilerek çalıştırılır.
UNIX'te iş tanım kütüğü örneği aşağıda verilmiştir.
UNIX'te İş Tanım Kütüğü Örneği
UNIX işletim sisteminde de, MS-DOS kapsamında açıklanana benzer bir yolla iş tanımı yapılır. Kullanıcılar, gene bir bütün olarak işletilmesini istedikleri komut ya da program adlarını, metin türü bir kütüğün içine, istedikleri işletim sırasında yazarlar. İşletilir (X) özelliği kazandırılan bu kütüğün adı verilerek tanımlanan iş çalıştırılır. Gerek MS-DOS gerek UNIX işletim sistemlerinde, bir kütük içinde sıralanan komutları, giriş kütüğü adı, seçenek numarası gibi işletim aşamasında sağlanacak parametrelerle donatmak ya da bu komutları, işlem akışı sırasında ortaya çıkan koşullara bağlı olarak gerçekleştirmek de olanaklıdır. Bu gerekçeye dayalı olarak, kimi zaman, bir programlama dili yetkinliğinde olabilen iş tanım ya da iş denetim dillerinden de söz edilir. Yukarıdaki örnekte verilen iş tanımı içindeki, if, fi gibi komutlar UNIX iş tanım/denetim dili (Shell Programlama) komutlarıdır.
UNIX işletim sistemi ortamında, usr/$altklv adlı alt kılavuz altındaki $kutuk adlı kütüğün sıralanması, sıralı kütüğün yenikut içinde oluşturulması, yenikut'ün eskikut'le karşılaştırılması, bu kütükler aynı değilse yenikut ile program'ın çalıştırılmasını gerçekleştiren işle ilgili kütük içeriği yukarıdaki örnekte verilmiştir. UNIX kuralları gereği $ işareti ile başlayan değişken adları, işe, işletimin başlama aşamasında sunulacak parametreleri göstermektedir. Bu bağlamda, örnekte, sıralanacak kütük adı ile bu kütüğün bulunduğu altkılavuz adı, işletim aşamasında işe aktarılacak parametreler biçiminde yazılmıştır. Sözkonusu iş çalıştırılırken iş adımlarını içeren kütük adının yanında, ilgili alt kılavuz adı ile sıralanacak kütük adı girilecektir. Örnekte verilen cmp komutu, -s anahtarı ile çalıştırılarak karşılaştırma sonucunun değeri, bir alt satırda ? ile belirtilen durum değişkeni içinde oluşturulmaktadır.
Tek iş ve çok iş düzenleri bilgisayar sistemleri üzerinde yürütülen işletim düzenleridir. Bir bilgisayar sisteminde, aynı anda tek bir iş işletime alınabiliyor ise kurulan işletim düzenine tek iş düzeni denir. Bu düzen içinde tüm sistem kaynakları, aynı anda tek bir iş, dolayısıyla tek bir kullanıcı tarafından tüketilir. Tek iş düzeni, genel amaçlı bilgisayar sistemlerinin kısıtlı kaynaklara sahip olduğu ilk yıllarda kullanılmış, sonradan bilgisayar donanımlarının ucuzlamasına koşut olarak tüm kaynakların tek bir kullanıcıya adandığı kişisel bilgisayarlarda da geçerli olmuş bir işletim düzenidir.
Çok iş düzeni, tek iş düzeninin yetersizliklerini aşmak üzere ortaya çıkan bir düzendir. Bir bilgisayar sisteminde, birden çok iş, aynı anda işletime alınabiliyor ise kurulan işletim düzenine çok iş düzeni denir. Birden çok işin aynı anda işletime alınabilmesi, bir işin işletimi sonlanmadan diğer işlerin de işletimlerinin başlatılması demektir. Birden çok işin aynı anda işletime alınabilmesi, sistem kaynaklarının bu işler arasında, eşzamanlı olarak paylaştırılmasını gerektirir.
3600 rpm (döngü/dakika) hızında dönen, 12ms'lik (average seek time) ortalama yatay erişim süresine sahip, her izinde 512 baytlık 63 sektör bulunan bir disk sürücüde, iki sektörden oluşan bir öbeğe ortalama erişim süresi:
Burada
to= ty+ td+ ta olarak hesaplanır.
ty ortalama yatay erişim süresini,
td ortalama döngüsel gecikme süresini,
ta ise bir öbeklik bilginin sürücü-arabirim arası aktarım süresidir.
Bu durumda:
ty = 12 ms;
td = (1/60)(1/2) = 8,3 ms;
ta= (1/60)(2/63) = 0,06 ms olduğundan
to yaklaşık 20 ms olarak bulunur.
500 MHz'lik saat imi ile çalışan ve makina komutlarını 1 saat periyodu içinde işletebilen bir ana işlem birimi için komut işletim süresinin, (1/500)x10-6 saniye, ya da 2 nanosaniye (ns) olduğu hesaplanır.
Disk ile ana işlem birimine ilişkin temel işlem süreleri karşılaştırıldığında (2ns/20ms) gibi, bire on milyonluk bir oran elde edilir. Başka bir deyişle, bir öbeğin disk sürücüden okunma süresinde ana işlem birimi 10 milyon makina komutluk bir programın işletimini tamamlayabilmektedir. Günümüzde işleyicilerin 2-3 GHz'lik saat imleri ile çalıştığı, disk sürücülerin erişim sürelerinin ise, yukarıdaki örnekte verilenin en çok yarısına düştüğü düşünüldüğünde, hız ayrımının, daha da derinleştiği söylenebilecektir.
• Ana işlem birimi ile ana bellek arasında da hız ayrımı sözkonusudur. Ana bellekte bir sözcüğe erişim için gerekli sürede, ana işlem birimi, onlarca/yüzlerce komut işletebilir. Bu nedenle, günümüz ana işlem birimlerinde, pipe line tekniği ile, belleğe erişim işlemi (örneğin al getir evresi), ana işlem birimi içi, özel bir işlevsel birim aracılığıyla, komut uygula evresiyle koşut yürütülür.
• Bilindiği gibi bir disk sürücü bir yada birkaç dönen plakadan oluşur. Plakalar üzerinde bilgi içiçe izler biçiminde kaydedilir. İzler belirli sayıda sektöre bölünür. Giriş/çıkış biriminden bir seferde okunup yazılabilen veri birimi kısaca öbek olarak adlandırılmıştır.
• Sürücüden okunan bilginin arabirime aktarılmasından sonra arabirimden de ana belleğe aktarılması gerekir. Giriş/Çıkış Sistemi adlı bölümde açıklanacağı gibi, bu aktarımların süreleri erişim süreleri toplamına katılmayacak kadar küçüktür.
• Ana işlem biriminin çalışma ilkesi düşünüldüğünde (Çizim 1.3), bir saat periyodunda bir makina komutunun işletilmesi fiziksel olarak mümkün değildir. Ancak, yukarıda anılan pipe line tekniği ile, komut işletiminin alt evreleri, ana işlem birimi içi, özel işlevsel birimler aracılığıyla, koşut işletilerek bu gerçekleştirilebilir. Bu durumda scalar nitelikli ana işlem birimlerinden söz edilir.
Giriş/çıkış sistemi incelenirken görüleceği üzere, bir öbek bilginin disk sürücüden okunabilmesi için, bu sürücünün bağlı olduğu arabirim düzeyinde yer alan ve genellikle komut yazmacı olarak anılan yazmaç içine, okuma işlemini belirten bir kod değerini yazmak, bunun sonrasında arabirimin, okuma işlemini tamamlayarak ana işlem birimini, bir biçimde uyarmasını beklemek gerekecektir. Bu durumda, tek iş düzeninin uygulandığı bir sistemde, ana işlem birimi, program işletimini sürdürebilmek için ilgili öbeğin ana belleğe aktarılmasını beklemekten başka birşey yapamayacaktır. Başka bir deyişle, ana işlem birimi, milyonlarca komut işletebildiği bir süre boyunca bekler (boş) durumda tutulacaktır.
Bilgisayar sistemi donanım birleşenleri arasında en önemli kaynağı oluşturan ana işlem biriminin daha verimli kullanılabilmesi, bu birimin bekler durumda kaldığı süreleri kısaltmakla olanaklıdır. Bu sürelerin kısaltılması aynı anda birden çok işi işletime almak yoluyla gerçekleştirilir. Anımsanacağı gibi, aynı anda birden çok işin işletime alınması, bir işin işletimi sonlanmadan diğer işlerin de işletimlerinin başlatılması demektir. İşletimi sürdürülen bir işin giriş/çıkış işlemi başlatması durumunda, ana işlem biriminin boş kalmasını önlemek üzere yeni bir iş işletime alınarak çok iş düzeni kurulur. Aşağıdaki çizimde, bu yolla, 3 değişik işin birlikte işletimi örneklenmiştir.
Üç Değişik İşin Birlikte İşletimi
Herhangi bir anda, işletimi birlikte sürdürülen iş sayısı, sistemin o anki çok iş düzeyini belirler. Bu düzey, bilgisayar sisteminin, kaynak kullanım ve verilen işletim hizmetinin niteliği yönlerinden ölçülen başarımını önemli ölçüde etkiler. Bu düzeyin belirlenmesi Görev Yönetimi adlı konu başlığı altında açıklanan ve İş Yönetici olarak anılan işletim sistemi kesiminin temel işlevini oluşturur. Bu yönetim kesimi, aynı anda işletime alınan iş sayısını belirlemenin ötesinde işletime alınacak işlerin ana işlem birimi ve giriş/çıkış birimlerine yönelik istemleri açısından da dengeli biçimde harmanlanmalarını sağlar. Ana işlem birimi kullanımı ağırlıklı işlerle (örneğin yoğun ana işlem birimi kullanımı gerektiren görüntü işleme türü işlerle), giriş/çıkış birimleri kullanımı ağırlıklı işlerin (örneğin kütükler üzerinde günleme yapan işlerin) birlikte ele alınmaları, aynı anda hep aynı tür kaynaklara talep yaratarak kaynak darboğazına ve sistem başarımının düşmesine neden olabilecektir. Başka bir deyişle, işlerin, ana işlem birimine gereksinim duyduğu anların çakışması, ana işlem birimini daha uzun süreler beklemelerine; giriş/çıkış sürücülerine erişim gereksinimi duyduğu anların çakışmasının artması ise ana işlem biriminin daha uzun süreler boşta kalmasına neden olacaktır.
Bunu örneklemek üzere, örnek çizimin ilk kesiminde, işlerin, ana işlem birimi kullanım sürelerinin kısa sürdüğü varsayılmış, bu durumda ana işlem biriminin, işlerin giriş/çıkış işlemlerinin tamamlanmasını beklemek üzere boşta kaldığı; çizimin ikinci kesiminde ise, bunun tersine, işlerin, ana işlem birimini uzunca süreler ellerinde tuttukları varsayılarak işlerin giriş/çıkış işlemleri sonlandıktan sonra ana işlem biriminin boşalmasını bekledikleri durum örneklenmiştir.
Böylece, programlar komut satırları olarak değil de, işletim bilgilerinin tutulduğu, görev iskeleti, denetim öbeği gibi adlarla anılan veri yapılarıyla ele alınmış olurlar. Sistem yönünden bakıldığında birlikte işletilen komut dizileri (programlar) yerine değişik görev iskeletleri ya da denetim öbekleri arasında anahtarlanan bir ana işlem birimi söz konusu olur. Programın, işletim aşamasında, iskelet adlı veri yapısı ile ele alınan biçimine görev adı verilir. Görev, özellikle, ana işlem biriminin yönetimi açısından önemli ve temel bir kavramdır. Bu kavrama, Görev Yönetimi adlı konu başlığı altında, ayrıntılı olarak yeniden dönülecektir.
Çok görevli işlem, herhangi bir kullanıcının aynı anda birden çok görev tanımlayarak işletebilmesine olanak veren bir işlem türüdür.
Çok görevli işlem, işletim sisteminin kullanıcılara sunduğu bir olanak, bir işlem türü olarak algılanmalıdır. Bu bağlamda, MS-DOS işletim sistemi kapsamında aynı anda birden çok görev çalışıyor olabilmesine rağmen kullanıcılara, aynı anda birden çok programı birlikte çalıştırma (çok görevli işlem) olanağı sunulmamaktadır. Başka bir anlatımla, MS-DOS'ta bir program ya da bir sistem komutunun işletimi sonlanmadan, ekranda imleci yeniden bularak yeni bir program ya da komut işletimi başlatma olanağı bulunmamaktadır. UNIX ve uyumlu işletim sistemleri ise çok görevli işleme olanak veren sistemlerdir. Örneğin bu işletim sistemlerinde birden çok görev tanımlayıp background adı altında, bunları birlikte çalıştırma olanağı bulunmaktadır. MS-DOS'tan türeyen Windows işletim sistemi de, çok görevli işleme olanak sunan bir işletim sistemidir.
Toplu işlem ve etkileşimli işlem, çok iş düzeninin kurulduğu bilgisayar sistemlerinde, aynı anda işletime alınan işlerin ele alınış biçimine verilen adlardır. Toplu işlemde (işletimde) işler sisteme, biriktirilerek, dönem dönem sunulurlar. Sisteme sunulan işler, sunuş anından başlayarak sonlanıncaya kadar kullanıcının her türlü müdahalesine kapalı biçimde işletilir. İşi oluşturan adımlar bir bütün olarak ele alınıp topluca işletilirler. Kullanıcılar adımlar arasında işletim akışını izleme ve denetleme (durdurma) olanaklarına sahip değildirler.
Toplu işlem bilgisayar sistemlerinin yaygın biçimde kullanılmaya yeni yeni başlandığı (altmışlı) yıllardan kalan bir işletim türüdür. Bu yıllarda kullanıcılar delikli kart destelerinden oluşan programlarını, sistem işletmenine sunarlar ve bunların kart okuyucu üzerinden okutularak işletilmesini isterlerdi. Sunulan bu kart desteleri biriktirilerek dönem dönem okutulup sisteme sırayla sunulurdu. Program kart desteleri, çoğu kez, sistem işletmenine sunulmak üzere bilgi işlem merkezinde, bu amaçla öngörülmüş kutulara bırakılıp kutular doldukça okutulup sisteme sunulduğundan bu işlem türüne İngilizce'de batch processing deyimi kullanılmıştır. Günümüz bilgisayar sistemlerinde toplu işlem dendiğinde, işlerin sisteme, bu amaçla öngörülmüş işletim sistemi bekleme kuyrukları üzerinden sunulduğu işlem türü anlaşılmaktadır.
Etkileşimli işlemde, işleri oluşturan adımlar, kullanıcının sunuş sırasında işletildiğinden işletim akışının izlenmesi sağlanır. Ayrıca işletim, toplu işlemin tersine kullanıcının denetiminde istenen herhangi bir anda, terminallerdeki özel denetim tuşları kullanılarak kesilebilir. Etkileşimli işlem, ana işlem biriminin kullanıcılar arasında kısa sürelerle paylaştırılıyor olması nedeniyle zaman paylaşımlı işlem olarak da adlandırılır.
Etkileşimli işlem, bilgisayar sisteminden terminaller aracılığıyla hizmet alan kullanıcıların işlettikleri komutlara, sistemden yalnız yararlanıyormuşcasına hızlı yanıtlar alabildikleri bir işlem türüdür. Etkileşimli işlem ortamında çalışan herkesin tanık olabileceği gibi, sistemin çok yüklü olduğu (örneğin sistemden yararlanan kullanıcı sayısının aşırı arttığı) durumlarda terminallerden girilen komutlara alınan yanıtlar, tek başına kullanım izlenimini silecek biçimde gecikebilmektedir. Etkileşimli işlemde, sistemin yanıt süresine bir üst sınır konabilmesi durumunda yapılan işlem türüne gerçek zamanlı işlem denir. Burada söz konusu üst sınır, doğal olarak saniyeler/milisaniyeler düzeninde düşünülmelidir.
Bu tür bilgisayar sistemlerinde, terminallerden girilen (sunulan) hizmet komutları yerine ısı, basınç, debi algılayıcıları gibi elektronik ölçüm birimlerinden sisteme dolaysız ulaşan ölçüm ve uyarılar sözkonusudur. Bu ölçüm ve uyarıların gerektirdiği (vanaların açılıp kapanması, alarmların kurulması gibi) güdümler sistemin yanıtlarını oluşturmaktadır. Yanıt süresi dendiğinde bu tür denetim nitelikli eylemlerin yerine getiriliş hızı anlaşılmalıdır. Buradan, sistem yanıt hızının, niçin bir üst sınırla garanti altına alınan kritik bir değer olduğu daha kolayca anlaşılacaktır.
Gerçek zamanlı işlem, genelde, çok görevli işlemle birlikte anılan bir işlem türüdür. Zira çok görevli işlem, gerçek zamanlı işlemin gerçekleştirilmesinde başvurulması gereken bir yöntemdir. Gerçek zamanlı uygulamalarda, işlemler çoğu kez, sisteme dış ortamdan gelen uyarılarla ele alınırlar. Bu uyarıların her biri için bir ya da birkaç görev tanımlanır. Bu görevler, ilgili oldukları uyarıların yanıt sürelerine dayalı öncelik sırasında ana işlem birimine anahtarlanırlar. Uyarılarla ilgili görevlerin kolayca tanımlanabilmesi ve tanımlanan bu görevlerin önceliklerine göre ana işlem birimini paylaşmaları çok görevli işlem ortamını gerektirir. Bu nedenle gerçek zamanlı işlem, genellikle çok görevli işlemle birlikte anılır ve gerçekleştirilir.
Gerçek zamanlı nitelemesi çoğu kez çevrim içi deyimi ile aynı anlama gelecek biçimde kullanılır. Çevrim içi, bilişim uygulamalarında verilerin sisteme sunuluş biçimini tanımlayan bir terimdir. Eğer işlenecek veriler bilgisayar sistemine dolaysız ve aracısız bir biçimde aktarılıyor ise yapılan uygulamanın çevrim içi bir uygulama olduğu söylenir.
Örneğin bankacılık uygulamalarında müşteriler tarafından gerçekleştirilen para çekme, para gönderme gibi değişik bankacılık işlemlerine ilişkin veriler, telefon hatları aracılığıyla, doğrudan uygulamanın yürütüldüğü bilgisayar sistemine ulaşıyorsa (dolayısıyla hemen işleme konabiliyorsa) yapılan uygulamanın çevrim içi bir uygulama olduğu söylenir. Öğrencilerin, derslere yada sınavlara özel (optik) formları doldurarak kayıt oldukları bir uygulamada ise, bilgilerin, doldurulan formların toplanması ve optik okuma işlemleri sonrasında bilgisayar sistemine dolaylı olarak aktarılması nedeniyle çevrim içi bir uygulamadan söz edilemez.
Endüstriyel süreç denetimi gibi gerçek zamanlı uygulamalarda da, uygulamanın gerektirdiği veriler sisteme, örneğin elektronik algılayıcılar tarafından dolaysız olarak aktarılır. Zira bu uygulamalarda zaman çok önemlidir. Verilerin sisteme dolaylı bir biçimde aktarılması hoşgörülemez. Bu nedenle endüstriyel süreç denetimi ile örneklenen gerçek zamanlı uygulamalar her zaman çevrim içi uygulamalardır. Ancak bir uygulamanın gerçek zamanlı uygulama olması, verilerin sisteme aktarılış biçiminden kaynaklanan bir özellik değildir. Bir uygulamayı gerçek zamanlı kılan, daha önceden de belirtildiği gibi, yerine getirilen işlem yanıt hızıdır. Gerçek zamanlı uygulamalar, aynı zamanda çevrim içi uygulamalar olabilirken her çevrim içi uygulama, mutlaka gerçek zamanlı bir uygulama olmak zorunda değildir. Bu nedene dayalı olarak, gerçek zamanlı ve çevrim içi terimlerinin ayrı anlamlar içeren terimler olarak düşünülmesi ve bu kavramlar arasında ayrım gözetilmesi gerekmektedir.
İşletim sistemi, bilgisayar sistemini oluşturan donanım ve yazılım nitelikli kaynakları kullanıcılar arasında kolay, hızlı ve güvenli bir işletim hizmetine olanak verecek biçimde paylaştıran, bunu yaparken, bu kaynakların kullanım verimliliğini en üst düzeyde tutmayı amaçlayan bir yazılım sistemidir. Bu bağlamda, işletim sisteminin, sistem kaynakları olarak ana işlem biriminin, ana belleğin ve giriş/çıkış birimlerinin, kullanıcılar arasında verimli paylaşımını sağlayan işlevleri, ana işlem biriminin yönetimi, ana belleğin yönetimi, kütük yönetimi gibi adlarla anılan değişik kesimler içinde toplanır. İşletim sisteminin yerine getirdiği işlevler, çoğu kez yönetim işlevleri olarak tanımlanır. Yönetim sözcüğü Türkçe'de, daha çok insanlar için kullanılan bir sözcük olmakla birlikte burada, anlamı, kaynakları belirlenen amaca en yüksek verimi elde edecek biçimde yönlendirme biçiminde genişletilerek kullanılmıştır.
İşletim sisteminin, kolay kullanım ilkesi gereği, özellikle sistem giriş/çıkış birimlerinin kolayca algılanabilir, yalın mantıksal modeller çerçevesinde düşünülerek kullanılabilmelerine olanak vermesi de gerekir. Örneğin disk, mıknatıslı şerit gibi ikincil belleklerde saklanan verilerin, kullanıcılara, bayt, tutanak dizileri gibi görünümler altında sunulması, bunlar üzerinde yapılacak okuma yazma gibi işlemlerin de bu yalın modele uyumlu işlemler olarak öngörülmesi gerekir. Giriş/çıkış birimleriyle ilgili bu temel işlev, işletim sistemlerinde kütük yönetimi olarak anılan kesimce sağlanır. Bunun gibi, kullanıcıların çalıştıkları bilgisayar sisteminin bağlı olduğu diğer bilgisayar sistemlerinin kaynaklarına, örneğin o sistemlerde saklanan kütüklere, ayrıntılardan arındırılmış yapılar çerçevesinde erişebilmelerini ağ yönetimi kesimi sağlar.
İşletim sistemleri, yukarıda da belirtildiği gibi, bilgisayar sistemlerinin kolayca kullanılabilmelerine olanak sağlamak üzere, sistem birleşenlerini, kullanıcıların kolayca algılayabilecekleri yalın mantıksal yapılar olarak sunmaya çalışırlar. Örneğin kullanıcılara kütüklerini, kendi uygulamalarıyla uyumlu uzunluk ve sayıda tutanaktan oluşan bir tutanaklar dizisi olarak düşünme ve ilgili işlemleri bu yapıya uyumlu olarak yürütebilme olanağı verilir. Kullanıcının düşüncesinde gerçekliği olan bu yapılar mantıksal yapılar olarak adlandırılır. Disk ortamında saklanan kütüklerin, fiziksel olarak, değişik disk yüzeylerinin, değişik izlerine dağılmış değişik sektörler üstünde saklandığı bilinir. Kolay kullanım yönünden, donanımın fiziksel ayrıntısının kullanıcılardan tümüyle gizli tutulması gereklidir. Bu amaçla işletim sistemi, kullanıcıya sunulan yalın kullanım modeli ile gerçekleştirime özgü fiziksel yapı arasında geçişi sağlamak zorundadır. Kütük kullanımı kapsamında bu geçiş, ileride ayrıntılarıyla incelenecek olan kütük yönetim kesimince ele alınır.
İşletim Sistemi Kesimleri ve Yer Aldıkları Katmanlar
Kütük kullanımının yanı sıra, ana belleğin kullanımı yönünden de benzer geçişlerin gerçekleştirilmesi gerekir. Zira kullanıcılar için ana bellek, mantıksal olarak, bir sözcükler dizisidir. Kullanıcılar programlarının, ana bellekte bitişken olarak yüklenip çalıştırıldığını düşünürler. Ancak gerek bellek alanlarının verimli kullanımı gerekse var olan bellekten daha büyük bellek sığaları yaratma gibi amaçlarla programlar, işletim sistemi tarafından sayfa ve kesimlere bölünebilir. Bu sayfa ve kesimler ana bellekte bitişken olmayan konumlara yüklenebilir. Programları üzerinde, inisyatifi dışında yapılan bu bölümlemeler kullanıcıdan gizlenmek zorundadır. Bu gizleme, sayfa ve kesimlere bölünmüş fiziksel program yapıları ile bitişken mantıksal program yapıları arasında geçiş kurularak işletim sistemi tarafından sağlanır. Bu bağlamda, mantıksal kullanım modelleri ile fiziksel gerçekleştirim modelleri arasındaki otomatik geçiş işlevi, işletim sisteminin önemli bir işlevini oluşturur.
Mantıksal yapılardan fiziksel yapılara geçiş, genellikle tek bir adımda gerçekleşmez. Değişik soyutlama düzeylerinde, birkaç adımda ele alınır. Alt soyutlama düzeylerinde donanımın fiziksel ayrıntısını taşıyan veriler üzerinde işlem yapılır. Soyutlama düzeyi yükseldikçe fiziksel gerçekliği daha az yansıtan veri yapılarına dayalı işlemler söz konusu olmaya başlar. Fiziksel ayrıntılara dayalı alt soyutlama düzeyi işlemler, donanıma yakın işlemler olarak da bilinir. Donanıma yakın işlemler, ilgili donanımların fiziksel ayrıntılarını bilmeyi gerektirir. Bu bağlamda, örneğin bir öbeğin disk sürücüden okunabilmesi için sürücünün bağlı olduğu arabirimin programlanması gereklidir. Arabirimleri programlayabilmek için, çalışma ilkeleri, içerdikleri yazmaçların işlevleri, fiziksel adresleri gibi özel ayrıntıları yakından bilmek gerekir. Bunun tersine, örneğin, üst düzey programlar içinde yer alan sıradan tutanak okuma işlemleri ise üst soyutlama düzeyi işlemleri oluşturur. Üst soyutlama düzeyi işlemler, mantıksal tutanaklar gibi kullanıcının düşüncesinde gerçekliği olan mantıksal veri yapıları üzerinde işlem yapmaya olanak verirler. Üst soyutlama düzeyi işlemler donanıma uzak işlemler olarak da bilinir.
İşletim sistemini oluşturan değişik işlevsel kesimler, kullanıcıdan donanıma inen eksende, ilgili oldukları veri soyutlama düzeyine koşut olarak değişik düzeylerde düşünülebilirler. Bu düzeylerden en altta olanı çekirdek, en üstte olanı ise kabuk olarak anılır. Kabuk düzey kullanıcıya en yakın, dolayısıyla en üst soyutlama düzeyini, çekirdek düzey ise donanıma en yakın, dolayısıyla en alt soyutlama düzeyini ifade eder. Düzeyler katman olarak da anılır. Çizimde, genel amaçlı bir işletim sisteminde bulunan işlevsel kesimler, yer aldıkları katmanlarla verilmiştir. Bunlardan giriş/çıkış sistemi, görev yönetimi ve görevler arası zamanuyumlama düzenekleri kesimi çekirdek katman içinde, ana bellek yönetimi, kütük yönetimi ve ağ yönetimi kesimleri, kabuk ile çekirdek arasında kalan ara katmanda gösterilmiştir. İşletim sisteminin kullanıcı ile dolaysız etkileşim kurduğu komut yorumlama kesimi ise, doğal olarak kullanıcıya en yakın katman olan kabuk katmanında yer almıştır.
Görevler, işletimlerinin başından sonuna değin ya ana işlem birimi üzerinde çalışır durumda, ya bu birimi kullanmaya hazır durumda ya da başlattıkları bir giriş/çıkış işleminin (örneğin diskten bir öbeğin okunması işleminin) tamamlanmasını bekler durumda bulunurlar. Görevler çalışmadıkları sürece, hazır, bekler gibi adlarla anılan kuyruklara bağlı olarak tutulurlar. Görevler ana işlem birimine hazır görevler kuyruğu üzerinden anahtarlanırlar.
Bunun yanı sıra sisteme sunulan görevlerin iskeletlerinin çatılması, önceliklerinin belirlenmesi, işletimi sonlanan görevlerin varlıklarının sonlandırılması gibi işlemler de görev yönetimi kapsamında gerçekleştirilir. Ana işlem biriminin yönetimi, Görev Yönetimi adlı bölümde, ayrıntılı olarak incelenecektir.
Örneğin, bir görev, bir yazıcı üzerinden döküm yaparken, işletimi kesilerek diğer bir görevin işletime alınması ve aynı yazıcıdan döküm almaya kalkması, dökümlerin karışmasına yol açar. Bunun gibi, aynı kütük üzerinde koşut günleme yapan görevlerden birinin, bir tutanakla ilgili günleme işlemlerini tümüyle tamamlamadan işletiminin kesilmesi ve diğer bir görevin işletime alınarak aynı tutanak üzerinde günleme yapmaya kalkması, hatalı günlemeye, dolayısıyla veri bütünlüğünün bozulmasına yol açabilir. Bu nedenle bu tür günleme işlemlerinin bölünmez biçimde gerçekleşmesi gerekir. Başka bir deyişle, bir tutanak üzerinde yürütülen işlemler tümüyle sonlanmadan bu tutanağın erişimi diğer görevlere kapalı tutulur.
Kaynak paylaşımında işlem bölünmezliği, görev yapılarına zamanuyumlama işleçleri olarak adlandırılan özel programlama araçlarıyla katılır. Kimi zaman, ana işlem biriminin makina komutları gibi ele alınan bu işleçlerle ilgili düzeneklere, doğal olarak donanım ayrıntısına en alt düzeyde açık olan çekirdek katman içinde yer verilir. İşletim sisteminin görevler arası zamanuyumlama işlevlerine Birlikte Çalışan Görevler adlı bölümde ayrıntılı olarak değinilecektir.
Yukarıda tek bir sürücü için örneklenen işlemler, çok kullanıcılı bir bilgisayar sisteminde, aynı anda birden çok sürücü üzerinde gerçekleştirilmek zorundadır. Bunun için çoğu kez, sürücü-arabirim arası aktarım işlemleri bir kez başlatıldıktan sonra, arabirimlerin, aktarım sonunda ana işlem birimini uyarması öngörülür. Bu yolla ana işlem biriminin birden çok arabirimi eşanlı olarak denetleyebilmesi sağlanır. Arabirimlerin ana işlem birimine yolladıkları işlem sonu uyarıları, kesilme uyarıları olarak adlandırılır. Değişik giriş/çıkış arabirimlerinden aynı anda ve zamanuyumsuz olarak gelen bu uyarıların, hiçbir veri kaybına yol açmadan ve bu birimlerin öncelik sırası gözetilerek ele alınması kesilmelerin yönetimi olarak bilinir. Kesilmelerin yönetimi giriş/çıkış sistemi kapsamında düşünülür.
Doğrudan bellek erişim işlemleri de giriş/çıkış sistemi kapsamında ele alınır. Giriş/çıkış sistemi kesimi, giriş/çıkış arabirimleri, ana işlem birimi, doğrudan bellek erişim denetleme birimi gibi birimlerin en alt düzeyde programlandığı, donanım ayrıntısına bağımlı işlemlerin ele alındığı bir kesim olarak çekirdek katmanda yer alır. Bu kesim Giriş/Çıkış Sistemi adlı bölümde ayrıntılı olarak incelenecektir.
Çok iş düzeninin kurulduğu bilgisayar sistemlerinde, birden çok program ana işlem birimini paylaşarak birlikte işletilir. Bir programın işletime alınabilmesi, öncelikle bu programın ana belleğe yüklenmesini gerektirir. Programların birlikte işletimi ana belleğin bunlar arasında paylaştırılmasını zorunlu kılar. Ana belleğin programlar arasında paylaştırılma zorunluluğu, işletim sistemine yeni bir yönetim işlevi yükler.
Ana bellek, programlar arasında, değişik biçimlerde bölümlenerek paylaştırılır. Belleğin bölüşülmesi, kimi sorunları da beraberinde getirir. Bu sorunlardan en önemlisi, bellekte, programlar arasında kalan kullanılamaz boşlukların yarattığı parçalanma sorunudur.
Parçalanma sorunu, programların yerlerinin işletim aşamasında değiştirilmesine olanak sağlanarak dönem dönem bitiştirilmeleri yoluyla aşılır.
Bu olanak, fiziksel adreslerin, bellek erişim aşamasında, özel bir yazmaca göreli olarak hesaplanması ve programların mantıksal adres evrenlerinin fiziksel adres evreninden bağımsızlaştırılması yoluyla yaratılır. Program bitiştirme işlemleri, dönem dönem işletimin kesilmesini gerektirdiğinden sistem başarımının düşmesine neden olur. Bitiştirme işlemlerini ortadan kaldırmak üzere programların ana belleğe bir bütün olarak yüklenmesi koşulundan vazgeçilebilir. Programlar sayfa ya da kesim olarak adlandırılan parçalara bölünür. Bu parçalar ana bellekte boş bulunan yerlere yüklenir. Bellekte bitişken olmayan kesimlere serpiştirilmiş programların işletimi, yeni adres dönüştürme ve yönetim işlevlerini ortaya çıkarır. Bu bağlamda sayfalı ve kesimli bellek yönetimlerinden söz edilir.
Bilgisayar sistemlerinde, kimi zaman kullanıcılara, sistemde var olan fiziksel bellek sığasından daha büyük sığada bellek alanları kullanabilme olanakları sunulur. Bu, görüntü bellek olanağı olarak bilinir. Bu bağlamda görüntü sayfalı, kesimli ve kesimli-sayfalı bellek yönetimlerinden söz edilir. Görüntü bellek yönetiminin uygulandığı sistemlerde program işletimi, program tümüyle ana belleğe yüklenmeden başlatılır. Ancak programın tümü diskte tutulur. Programın sayfa ya da kesim olarak adlandırılan parçaları, işletim aşamasında, gerektikçe ana belleğe yüklenir. Bellekte bulunmayan bir sayfa ya da kesime sapıldığında, öncelikle bunun ana bellekte taşınabileceği bir yer aranır. Bulunamazsa bellekten bir sayfa ya da kesim diske taşınarak yer açılır. Bu bağlamda ortaya çıkan yeni yönetim işlevleri de bellek yönetimi kapsamında sağlanır.
Bilgisayar sistemlerinde, ana bellek yönetimini desteklemek üzere, eksik sayfa, kesimden taşma, izinsiz erişim uyarıları gibi uyarıların üretilmesini, adres dönüştürme işlemlerinin gerçekleştirilmesini sağlayan özgün ekler bulunur. Ana Belleğin Yönetimi adlı bölümde, çeşitli bellek yönetim yöntemleri ayrıntılı olarak incelenirken bu özgün donanım ekleri de, yeri geldikçe açıklanacaktır.
Bu bağlamda, bir kullanıcının, üst düzey araçları kullanarak okuma, yazma gibi işlemlerden birini herhangi bir kütüğünün mantıksal bir tutanağına uygulamak istemesi durumunda, öncelikle ilgili kütük adından bu kütüğün bulunduğu sürücü kimliğinin bulunması, ilgili mantıksal tutanağın bu sürücü üzerinde hangi silindir, hangi yüzey ve hangi sektörde yer aldığının saptanması gereklidir. Mantıksal tutanak numaralarından, (silindir, okuma-yazma kafa numarası ve sektör üçlüsünden oluşan, 56-4-9 gibi) fiziksel disk öbek adreslerini hesaplayarak tutanak içeriklerinin, okuma-yazma işleminin yapılacağı ana bellek yastık alanlarına aktarılmasının sağlanması kütük yönetim kesiminin yükümlülüğündedir.
Mantıksal tutanak numaralarından fiziksel disk adreslerine geçiş, kütük yönetim sisteminin, yalın bir kullanım ortamı sağlama ilkesi çerçevesinde yerine getirdiği bir işlevdir. Bunun yanı sıra, kütük yönetim sisteminin, disk alanlarının verimli kullanımı, bu ortamlarda saklanan verilere en hızlı erişimi sağlayan düzenlemelerin yapılması gibi, sistem verimliliğine dönük başka işlevleri de vardır. Bu amaçla, disk alanlarının düzenlenmesi, buralardan kütüklere yer sağlanması, boş alanların izlenmesi, kütüklerin bu alanlar üzerindeki yerleşimlerinin, erişimin en hızlı olacağı biçimde düzenlenmesi gibi işlevler de kütük yönetimi kapsamında yerine getirilir.
Kütük yönetim sistemi, kullanıcılara kütükleri üzerinde, mantıksal yapılar çerçevesinde işlem yapabilme olanağı sağlarken sözkonusu kütüklere, prog1.c, rapor.doc gibi simgesel adlar (kimlikler) verme, bunları kılavuz, alt kılavuz gibi adlarla anılan yapılar altında gruplandırma, ayrıştırma ve düzenleme olanakları da sunar.
Kütük yönetim kesimi, çok görevli işlemin uygulandığı sistemlerde kütüklerin kullanıcılar arasında eşzamanlı paylaşım sorununa da etkin çözümler sunmak zorundadır. Bu kapsamda kütüklere erişimin, kütük, tutanak gibi değişik düzeylerde kilitlenmesini sağlayacak düzeneklerin kurulması ve bu düzeneklerin, işletim bütünlüğünü bozmadan çalıştırılması kütük yönetimi kapsamında ele alınır. Kütük yönetimi kapsamında düşünülen ve yerine getirilen bir diğer işlev de güvenli bir işletim ve saklama ortamının yaratılmasıyla ilgilidir.
Kütük yönetim sisteminin; yalın modellere dayalı kullanım ortamının yaratılmasına, disk alanlarının verimli kullanımının sağlanmasına ve kütüklerin paylaşılması ve korunmasına ilişkin temel işlevleri, Kütük Yönetimi adlı bölümde ayrıntılı olarak incelenecektir.
İşletim sisteminin kullanıcı ile iletişim kurduğu katman, kabuk katmanıdır. Kabuk katmanında sistem komut yorumlayıcısı yer alır. Sistem komut yorumlayıcısı, kullanıcıların, terminalleri başından girdikleri komutları yorumlayarak bu komutlarla tanımlanan işlemleri yerine getirir. Sistem komutları, kullanıcının bilgisayar ortamında saklanan kütüklerini düzenleme, listeleme, görüntüleme, silme, kopyalama, adlandırma, program geliştirme, iş tanımlama, iş çalıştırma, iz sürme, durum sorgulama, ileti gönderme, oturum sonlandırma gibi işlemleri yerine getirmek için kullanılır. Yerine getirilen işlemin türünü anımsatacak biçimde type, list, cd, cat, exec gibi kısaltma adlarla anılan bu komutlar, belli yazım kurallarına uygun olarak, giriş ve çıkış parametreleriyle birlikte kullanılırlar. UNIX'te komut yorumlama işlevi shell adlı kesim tarafından yerine getirilir. command, MS-DOS işletim sisteminin komut yorumlayıcısına verilen addır. Sistem komutlarını örneklemek üzere, aşağıda MS-DOS'un sıkça kullanılan, kütük işlemleriyle ilgili kimi komutlarına yer verilmiştir:
Bu komutların sağında yer alan parametreler komutun uygulanacağı kütük yada altkılavuz adlarını göstermektedir. Bu komutlardan, örneğin dir komutu adı verilen kütüğün sistemde yer alıp almadığını belirlemek üzere kullanılabilmektedir. Bu komut parametre yazılmadan girildiğinde, o an üzerinde işlem yapılan alt kılavuz altındaki tüm kütük adlarını listelemeye yaramaktadır. copy komutu ise bir kütüğün kopyasını çıkarmak üzere kullanılmaktadır. Parametre olarak verilen ilk kütük adı kopyalanacak kütüğü, ikinci ad ise, kopyanın yer alacağı yeni kütük adını belirtmektedir.
WINDOWS, X_WINDOWS gibi kullanıcı grafik arayüzü sunan işletim sistemlerinde, komutlar, ekranda bir ikon ile simgelenir. Bu durumda komutlar, ekrandaki ilgili ikon tıklanarak işletilir. Bir komutun, komut satırından adının girilmesi ile ikonunun tıklanması arasında, yürütülen işlemler açısından herhangi bir ayrım sözkonusu değildir.
Bilgisayar sistemleri açıldığında, işletim sisteminin ana belleğe yüklenmesinden sonra çalışmaya başlayan kesim komut yorumlama kesimidir. Çok kullanıcılı bilgisayar sistemlerinde, sisteme giren her kullanıcı için, komut yorumlayıcısıyla ilgili bir görev çalıştırılır. Komut yorumlayıcısının çalışması, kullanıcıların bilgisayar sistemi ile etkileşim kurdukları terminal sürücü ekranında imleç olarak adlandırılan, > , $, # gibi özel damgaların satır başına yazılmasından anlaşılır.
Komut yorumlama kesimi uygulama programlarıyla aynı düzeyde düşünülen bir kesimdir. Kullanıcı komutlarının gerektirdiği kütük işlemleri, giriş/çıkış işlemleri gibi işlemler, aynı uygulama programlarında olduğu gibi, daha alt katmanlarda yer alan kütük yönetimi, giriş/çıkış sistemi gibi işletim sistemi kesimlerinden, izleyen kesimde açıklanan sistem çağrıları aracılığıyla hizmet alınarak gerçekleştirilir. Bu nedenle MS-DOS'ta, uygulama programlarına bellekte yer açmak üzere command adlı sistem komut yorumlayıcısı bellekten çıkarılabilmektedir. UNIX'te de shell, işletim sisteminin diğer kesimlerinden bağımsız düşünülmekte ve Bourne shell, C shell, Korn shell gibi kullanıcıya özel, ayrı komut yorumlayıcılar kullanılabilmektedir.
İşletim sistemlerinde verilerin soyutlanmasına, yalın mantıksal modellere dayalı kolay kullanım hizmeti verebilmek amacıyla başvurulur. Kullanıcıların mantıksal olarak tanımladıkları işlemlerin yerine getirilebilmesi için üst soyutlama düzeyinde tanımlanmış verilerden fiziksel düzeyde tanımlı verilere geçiş sağlanması gerekir. Bu bağlamda, bir kütüğün başına göreli beşinci tutanağının okunabilmesi için bu tutanağın diskte hangi fiziksel öbek içinde yer aldığının belirlenmesi; başka bir anlatımla, kütük başına göreli mantıksal tutanak numarasından sürücü başına göreli fiziksel öbek adresine geçişin sağlanması gereklidir. İşletim sistemlerinde bu geçiş sistem çağrıları ile gerçekleştirilir.
Sistem çağrı düzeneği, genelde programlama dillerindeki yordam çağırma düzeneğine benzer. Sistem çağrı düzeneğinin kurulmasında, ana işlem biriminin bu amaçla öngörülmüş komutlarından yararlanılır. Sistem çağrısı yapmak işletim sistemine sapmak anlamına gelir. Bir işletim sistemi işlevine gereksinim duyulduğunda SVC (Supervisor Call), INT (Interrupt) gibi adlarla anılan özel makina komutları çalıştırılarak ilgili işletim sistemi kesimine sapılır. İşlem parametreleri sisteme, ana işlem birimi yazmaçları içinde aktarılır.
MS-DOS/Windows işletim sisteminde sistem çağrıları 80X86 türü işleyicilerin yazılım kesilmesi olarak bilinen int xx komutları kullanılarak gerçekleştirilmiştir. xx değeri istenen hizmetin türünü belirlemektedir. Kullanıcılar MS-DOS/Windows işletim sisteminde, int 20h ile int 40h arasındaki sistem çağrı komutlarını kullanarak hizmet alabilmektedirler. Bunlardan int 21h, en çok yararlanılan ve giriş/çıkış hizmetleriyle ilgili olan sistem çağrı komutudur. Bu komuta, yerine getirilmesi istenen işlevin kodu, giriş ve sonuç parametreleri gibi parametreler işleyici yazmaçları aracılığıyla aktarılmaktadır.
MS-DOS'ta Sistem Çağrılarının Kullanımı
Sözkonusu programda \bbm\örnküt.doc adlı bir kütüğe, 2048inci baytından başlayarak, yastık adlı bellek alanında yer alan 256 baytın yazılması konu edilmiştir. Bu amaçla, önce kütüğün simgesel adı ile fiziksel konumu arasında bağlantı kurmak üzere 3DH kodlu open, kütük açma işlemi gerçekleştirilmiştir. Bu işlem sonunda ax yazmacı içinde, handle adıyla, kütüğün fiziksel konumuna ilişkin bilgilerin tutulduğu alan göstergesi elde edilmiştir. Bunun sonrasında kütüğün başına göreli 2048inci mantıksal bayt konumundan başlayarak işlem yapılacağını belirten move-file-pointer çağrısı çalıştırılmıştır. Bunu izleyen kesimde 256 baytlık ana bellek yastık alan içeriğinin kütüğe yazılması gerçekleştirilmiştir.
Örnekteki programda yer alan int N komutu, 80X86 serisi işleyicilerin yazılım kesilmesi olarak tanımlanan bir makina komutudur. Bu komut (real mode'da) işletildiğinde, ana belleğin ilk 1KBaytlık kesimindeki N*4 ve N*4+2 adreslerinde tutulan program sayacı ve kesim yazmacının gösterdiği yordama sapılmaktadır. MS-DOS'ta sistem çağrılarından giriş/çıkışlarla ilgili olanları int 21h komutu aracılığıyla çağrılmaktadır. Alınmak istenen hizmetin türü, 21*4 ve 21*4+2 adresindeki program sayacı ve kesim yazmacı ikilisiyle sapılan yordama, ah yazmacı içinde aktarılmaktadır. İstenen hizmetin gerektirdiği giriş parametreleri bx, cx, dx gibi yazmaçlara yüklenmektedir. Yerine getirilen hizmetle ilgili, varsa durum bilgileri al, psw gibi yazmaçlar içinde geri dönmektedir. Bu bağlamda, örnekte verilen programın kullandığı çağrılardan 40h kimlikli write-to-file, kütüğe yazma çağrısına, yazma yapılacak kütük kimliği bx, yazılacak yastık uzunluğu cx yazmaçlarıyla aktarılmakta, çağrı sonucu ise, program durum yazmacının elde (carry) biti içinde döndürülmektedir.
Katmanlar, yazılımın genel yapısı içinde hiyerarşik bir sırada yer alırlar. Her katman, bir üst katmana hizmet üretirken bir alt katmandan hizmet alır. Bu yapı çerçevesinde her katman belirli bir soyutlama düzeyini temsil eder ve bir üstünde yer alan katmana, hizmeti, bu soyutlama düzeyine uygun olarak üretir. Bu yolla her alt adıma ilişkin ayrıntı ilgili katmana gömülü kalır. Katmanlar arası hizmet alış-verişi sistem çağrı düzeneğine dayalı olarak yürütülür. Katmanlı yapıda gerçekleştirilmiş işletim sistemleri de bu genel yapıya uyarlar. Başka bir deyişle,
İşletim sistemleri konusuna Girişte, son olarak, çok kullanıcılı bir bilgisayar sistemi üzerinde program geliştiren bir kullanıcının, işletim sisteminin değişik kesimlerinden doğrudan ya da dolaylı olarak nasıl yararlandığını gösteren bir örnek incelenmiştir. Bu örnekte kullanıcının varsayımsal bir işletim sistemi altında prog.pas adlı kütüğünü sed (screen editor) adlı bir metin düzenleme yazılımı ile günlediği düşünülmüştür.
Kullanıcı, oturumun başında, kendisi için tanımlanan ve işletimi başlatılan komut yorumlayıcısı görevinin ekranına yazdırdığı imlecin sağına >sed prog.pas komutunu yazarak işlemleri başlatır. Komut yorumlayıcısı, öncelikle bu komut satırının sözdizimini denetler. Komut girilirken sözdizim hatası yapılmamışsa komut işletimine geçilir. Öncelikle kütük açma sistem çağrısı çalıştırılarak prog.pas kütüğünün açılma işlemi gerçekleştirilir. sed sözcüğü, metin düzenleme programının amaç kodunu taşıyan kütük adı olduğundan bu programla ilgili yeni bir görev tanımı yapılır. Bu bağlamda kullanıcının bilgilerini içeren yeni bir görev iskeleti oluşturulur. Oluşturulan bu iskelet hazır görevler kuyruğuna bağlanıp görev yöneticinin denetimine bırakılır. Görev tanımlama, görev iskeleti kurma, görevi hazır görevler kuyruğuna bağlama gibi işlemler, hep ilgili sistem çağrıları kullanılarak yerine getirilir.
Günleme işlemleri çerçevesinde, prog.pas adlı kütüğün tutanaklarına erişmek istendiğinde mantıksal adlandırmalardan fiziksel disk adreslerine (silindir, kafa, sektör üçlüsüne) kütük yönetimi ile ilgili sistem çağrıları kullanılarak geçilir. Elde edilen fiziksel adresler, çekirdek katmanda yer alan giriş/çıkış sistemine aktarılarak ilgili tutanak içeriklerinin sürücülerden görevin (sed'in) ana bellek yastık alanına aktarılması sağlanır. Giriş/çıkışlarla ilgili bir sistem çağrısını işlettiğinde, giriş/çıkış işlemlerinin göreli yavaşlığı nedeniyle, görev, ilgili giriş/çıkış sürücüsünün bekleme kuyruğuna bağlanır. Giriş/çıkış işleminin sonlanmasıyla (örneğin ilgili sürücü tutanak içeriğinin arabirim yastığında hazır olması ya da doğrudan bellek erişim düzeneğince ana bellekteki yastık alanına aktarılması sonrasında) yeniden hazır görevler kuyruğuna, ilgili sistem çağrısı aracılığıyla eklenir. Erişilen kütük, başka görevlerce de koşut olarak kullanılıyorsa (bu görev ilgili kütük üzerinde giriş/çıkış işlemi başlatan sistem çağrısını çalıştırdığı anda başka bir görevin de aynı kütük üzerinde günleme yapıyor olduğu durumlarda) görev, zamanuyumlama düzeneğine ilişkin bekleme kuyruklarına da bağlanabilir.
Ana bellek kullanımı, ana bellek yönetiminden sorumlu sistem çağrıları tarafından gerçekleştirilir. Herhangi bir görevin ve işlediği verilerin ana bellekte yer alabilmesi, ana bellek yönetim kesimince bu göreve yer sağlanması koşuluna bağlıdır. Bir görev ancak ana bellekte ilgili programına yer sağlandığı takdirde hazır görevler kuyruğuna bağlanabilir. Sistemde yürütülen bellek yönetiminin türüne bağlı olarak sayfalama, kesimleme gibi, çok sayıda karmaşık bellek işlevi de, bu görevle ilgili olarak ve kullanıcıya yansıtılmadan işletilir.
Metin düzenleme gibi yalın bir hizmetle ilgili olarak ortaya çıkan bu sistem çağrı trafiği, çok sayıda kullanıcı (ya da program) ve bunların sistemden talep edebilecekleri çeşitli hizmetler göz önüne alındığında çok daha karmaşık bir yapıya bürünür.
Bilgisayar sistemini oluşturan donanım ve yazılım nitelikli kaynakları programlar arasında kolay, hızlı ve güvenli bir işletim hizmetine olanak verecek biçimde paylaştıran, bunu yaparken, kaynakların kullanım verimliliğini en üst düzeyde tutmayı amaçlayan işletim sistemi, var olan yazılım sistemlerinin en karmaşığıdır. Bu karmaşık sistem, temel işlevleri ve ana çizgileriyle bu kitabın izleyen konu başlıkları altında incelenecektir.
1970'li yıllara gelinceğe değin, bilgisayar sistemleri, kurumlar içinde, bilgi işlem merkezi olarak adlandırılan belirli bir mekanda yer almış, kullanıcılar bilgisayar sistemlerinden bu merkeze bizzat gelerek hizmet alma durumunda olmuşlardır. Bilgisayar sistemlerinden her türlü hizmetin alımı, verilere ve bunları işleyen programlara ilişkin delikli kart destelerinin sisteme okutulması ve sonuçların da bir yazıcı aracılığıyla elde edilmesi biçiminde olmuştur. Toplu işlem kapsamında düşünülen bu hizmet türü, 1970'li yıllarda yerini etkileşimli işlem olarak adlandırılan yeni bir işlem türüne bırakmıştır.
Etkileşimli işlemde kullanıcılar, bilgisayar sisteminden, terminal olarak adlandırılan birimler aracılığıyla yararlanmaktadırlar. Terminal, yalın ekran ve klavye ikilisine verilen addır. Verilerin ve bunları işleyen programların sisteme sunuluşu, bu işlem türünde, delikli kartlar yerine klavye aracılığıyla gerçekleşmekte, sonuçlar, yazıcı birimlerin yanı sıra ekran üzerinden de aracısız elde edilebilmektedir. Gerek toplu, gerekse etkileşimli işlemde bilgisayarın kurum içindeki konumu ve hizmet alma biçimi merkezi olmuştur.
Klasik anlamda çok kullanıcılı bilgisayar sistemi dendiğinde, birden çok kullanıcının, terminal birimleri aracılığıyla, aynı bilgisayar sisteminden, etkileşimli işleme dayalı olarak eşanlı hizmet aldıkları sistem anlaşılmaktadır. Bu kapsamda terminal birimleri, bilgisayar sistemine, sisteme özel (yıldız ya da yol gibi) topolojilerle bağlı olarak çalışmaktadır.

Çok Kullanıcılı Bilgisayar Sisteminin Evrimi - Kurum Bilgi İşlem Altyapısı (1970'ler)
Giriş/Çıkış Birimlerinin Konumu
Bilindiği gibi, giriş/çıkış birimleri giriş/çıkış sürücüleri ile bu sürücülerin ana işlem birimi-ana bellek ikilisiyle bütünleşmesine olanak veren giriş/çıkış arabirimlerinden oluşurlar. Giriş/çıkış birimi olarak terminal birimi; ekran ve klavyeden oluşan terminal sürücü ile bu sürücüye ilişkin arabirim çiftini tanımlar. Bunun gibi disk birimi, dönen plakalar ve ilgili elektronik aksamın yer aldığı disk sürücü ile ilgili arabiriminden oluşur.
Arabirimlerin programlanması, giriş/çıkışların programlanması kapsamında ele alınır.
İzleyen kesimde, giriş/çıkışların programlanmasıyla ilgili temel yaklaşımlar açıklanacaktır. Önce giriş/çıkış arabirimlerinin yapısal özellikleri incelenecektir. Bunun sonrasında giriş/çıkışların programlanmasında kullanılan yöntemler, bu yöntemlerin gerektirdiği kimi özgün donanım düzenekleriyle birlikte verilecektir. Bu bağlamda, ilk olarak seçmeli programlama yöntemi açıklanacaktır. Bunun sonrasında, zamanuyumsuz biçimde gelişen giriş/çıkış istemlerini ele almaya olanak veren ana işlem birimi kesilme düzeneği, kesilmeli giriş/çıkış programlama yöntemiyle birlikte incelenecektir. Sürücü-ana bellek arası veri aktarımlarını, ana işlem birimine başvurmadan yerine getirmeye yarayan doğrudan bellek erişim düzeneği ile doğrudan bellek erişim denetleme birimleri ve kanallar/giriş/çıkış işleyicileri incelenecektir. Açıklanan tüm programlama yöntemleri, bir ya da birkaç G/Ç birimi içeren yalın örnek sistemler taban alınarak ayrı ayrı örneklenecektir. Bu örneklerde, daha çok sözkonusu yöntemlerin ve varsa destek donanımların çalışma ilkeleri öne çıkarılacaktır. Verilen örnekler içinde yer alan sürücü, kesilme gibi yordamlar, bu aşamada, pedagojik nedenlerle işletim sisteminin bütününden ve sistem çağrı düzeneğinden bağımsız olarak sunulacaktır. Bu yordamların, günümüz işletim sistemlerinin bütünü içinde nasıl ele alındıkları, Aygıt Sürücüler başlığı altında, işletim sistemini oluşturan temel birleşenlerin tümü incelendikten sonra Sekizinci Bölüm'de açıklanacaktır.

Arabirim-Sürücü Bağlantı Biçimleri
Bilindiği gibi, giriş/çıkış birimleri giriş/çıkış sürücüleri ve giriş/çıkış arabirimlerinden oluşur. Giriş/çıkış arabirimleri, giriş/çıkış sürücülerinin ana işlem birimi-ana bellek ikilisi ile bütünleşmelerini sağlarken bu sürücülerin yalın bir biçimde programlanabilmelerine de olanak verirler. Giriş/çıkış arabirimleri, ana işlem birimi ana bellek ikilisi ile (aynı kabin, aynı dolap gibi) aynı coğrafi ortamda bulunurken giriş/çıkış sürücüleri genelde bu ortamın dışında hatta çok uzağında olabilirler.
| Örneğin terminal sürücüler bilgisayar sisteminin bulunduğu oda, bina, yerleşim biriminin dışında bulunabilirler. Ancak bunların bağlı olduğu arabirimler ana işlem birimine en çok, bütünleştikleri yolun (adres, veri ve denetim hatlarının) izin verdiği uzaklıkta yer alırlar. |
Giriş/çıkış sürücüleri ilgili oldukları arabirimlere, genelde iki biçimde bağlanırlar.

Arabirim-Sürücü Bağlantı Biçimleri
Sürücüler ile arabirimler arasında veriler, (genelde 1 bayt uzunluğundaki) damga tabanında aktarılırlar. Koşut bağlantıda aktarılan damga bitlerinin her biri için ayrı bir hat bulunur. Ardıl bağlantıda ise damgayı oluşturan bitler aynı hat üzerinden, zaman içinde sırayla iletilirler. Ekonomik nedenlerle, sürücü ile arabirimin birbirlerine göreli yakın bulunabildiği durumlarda koşut, uzak olduğu durumlarda ise ardıl bağlantı kullanılır. Ekonomik nedenlerin yanı sıra, verilerin sürücüler üzerinde saklanış biçimi de aktarım biçimini belirleyebilir. Bilindiği gibi, disk sürücülerde veri bitleri izlere, bu bitler ardarda gelecek biçimde yazılır. Mıknatıslı şerit sürücülerde ise veriler şerit üzerindeki kanallara, her kanala bir bit gelecek biçimde, koşut olarak kaydedilirler. Bu nedenle disk sürücü ve arabirimi arası bağlantı genelde ardıl türde, mıknatıslı şerit sürücü ve arabirimi arası bağlantı ise koşut türdedir.
Arabirim ile sürücü arasındaki bağlantının ardıl bağlantı olması durumunda, iletişimin başlatılması ve hatasız sürdürülmesinde kullanılan zamanuyumlama yöntemine göre zamanuyumlu ve zamanuyumsuz iletişimlerden söz edilir. Zamanuyumsuz ardıl iletişimde aktarılan damga bitlerinin başına ve sonuna başlama (start) ve durma (stop) bitleri eklenir.
Zamanuyumlu ardıl iletişimde ise, veri bitlerine ek bitler katmak yerine, gönderici ve alıcı birimlerin birbirleriyle sürekli zamanuyumlu kalmalarını sağlayan ve damgalar arasında gerektikçe iletilen, özel zamanuyumlama damgaları (SYNC) kullanılmaktadır. Bunları örneklemek üzere, aşağıdaki örnek çizimde zamanuyumlu ve zamanuyumsuz iletişim kapsamında, 3DH ve 43H (ASCII) damga kodlarının hattaki im görünümleri verilmiştir.

Zamanuyumlu ve Zamanuyumsuz Ardıl İletişimde İm Görünümleri
RS-232C standartı zamanuyumsuz ardıl iletişim kapsamında yaygın olarak kullanılan bir standarttır.
Mekanik özellikler yönünden 25 iğneli özel bir konektör ile toprak korumalı örgülü kablo kullanmayı gerektirir. Konektör üstündeki iğneler, TD ve RD adlı (transmitted data, received data) gönderilen veri ve alınan veri hatlarının yanı sıra toprak (GRD), koruyucu toprak (protective GRD) hatları ile çeşitli akış denetim imlerinin iletildiği hatlara adanmıştır.
Elektriksel özellikler yönünden, iletilen veri bitleri {*3volt,*25volt} aralığındaki gerilim değerleriyle simgelenir. Mantıksal 0 {+3,+25}volt aralığında, mantıksal 1 ise {-3,-25}volt aralığında bir değerle iletilir. RS-232C standartı, bitleri simgelemede gerilim düzeylerini kullandığından dengesiz (unbalanced) bir çevriminin oluşmasına neden olur.
RS-232C standartında alıcı ile gönderici arasında, izin verilen en büyük uzaklık yaklaşık 15 metredir. Bu uzaklıkları aşan bağlantılarda, elektriksel özellikler yönünden RS-232C standartından ayrılan ve mantıksal 0 ve 1'leri simgelemede gerilim düzeyleri yerine 4mA ve 20mA'lik akım değerlerini kullanan 20mA Courrent Loop standartı kullanılır. Bu standart kapsamında kullanılan bağlantı yöntemine akım döngüsü anlamına gelen current loop adı verilir.
RS-232C standartı kapsamında kullanılan konektör görünümü ve bu konektör üzerinde yer alan 25 iğneye ilişkin im tanımları ile bu iğnelerden sadece 6'sını kullanan örnek bir bağlantı, aşağıda gösterilmiştir. Bu çizim üzerinde yer alan 4, 5, 6, ve 20 numaralı iğnelere karşıt gelen RTS (request to send), CTS (clear to send), DSR (data set ready) ve DTR (data terminal ready) imleri, yukarıda akış denetimi diye anılan gruba giren imlerdir. İletişim protokolunu gerçekleştirmede kullanılırlar. Bu bağlamda örneğin arabirim, TD (transmitted data) hattı üzerinden verileri, kendi CTS girişine bağlı, sürücünün, DTR ile gösterilen hazır durumunu saptamadan göndermez. Bu imler modem denetim imleri diye de anılırlar. Modem, İngilizce Modulator Demodulator sözcüklerinden türetilmiş bir sözcük olup uzak bağlantılarda imlerin hatlar tarafından süzülmesini engelleyen özel iletişim gerecine verilen addır.
RS-232C Standartında İğne Tanımları ve 4 telli Bağlantı Örneği
Zamanuyumsuz ardıl iletişimde, aktarım hızları, damga bit uzunlukları, bir bitlik iletişim hatalarını yakalamaya yarayan eşlik bitinin türü, start ve stop bitlerinden stop bitinin sayısı gibi özellikler, iletişim parametrelerini oluşturmaktadır.
- Aktarım hızı için 110, 200, 400, 600, 1200, 2400, 4800, 9600, 19200 bps (bit per second, bit/saniye);
- Damga bit uzunluğu için 5, 6, 7, 8 bit;
- Stop biti sayısı için 1, 1,5, 2 bit;
- Eşlik biti için tek, çift, yok
gibi değerler, telgrafçılıktan bu yana kullanılagelen, klasikleşmiş iletişim parametre değerleridir.
Centronix Standartında Veri Aktarım Zaman Çizeneği ve İğne Tanımları
Centronix standartında mantıksal 1'in karşılığı 5 volt, mantıksal 0'ınki ise 0 volttur. Başka bir deyişle, bu standartta veri ve denetim imleri, RS-232C standartının tersine herhangi bir gerilim düzey değişikliği uygulanmadan, TTL düzeyi diye anılan {0,5} volt arabirim gerilim aralığında aktarılırlar.
Açıklanan bu imlerin yanı sıra, Centronix hat tanımları arasında pe (parity error), error gibi hata sınama hatları ile arabirimin sürücüyü denetlemesine yarayan af (autofeed), init, select, select in gibi başka özel denetim ve adresleme hatları da bulunur.

Giriş/Çıkış Arabirimi Görünümü
Bu bağlamda, bir damga, terminal ekranından görüntülenmek istendiğinde, damga kodunun terminal arabirimi çıkış yastığına yazılması yeterlidir. Arabirim yastığına yazılan damganın ekrana aktarılması (görüntülenmesi), ek denetime gerek duyulmaksızın arabirim tarafından kendiliğinden gerçekleştirilir. Bu gerekçeyle, giriş/çıkış arabirimlerinin anlayışlı birimler oldukları söylenir.
Arabirim düzeyinde bulunan yazmaçlar, genelde güdüm ve durum yazmaçları adıyla anılır.
Verilerin, sürücü ile arabirim yastığı arasında aktarım işlemleri güdüm yazmaç(lar)ının içine kimi özel kodlar yazılarak gerçekleştirilir. Bu özel kodlara karşı gelen karmaşık elektroniksel işlemler arabirim tarafından otomatik olarak yerine getirilir. Bu yolla sürücüler üzerinde yerine getirilen ve fiziksel yapılara bağımlı işlemlerin karmaşıklığı denetim yordamlarından (sistem programlarından) gizlenmiş olur. Arabirimler güdüm yazmaçları aracılığıyla programlanabilen anlayışlı birimlerdir.
Durum yazmaçları, arabirim tarafından yürütülen aktarım işlem akışının ve sonuçlarının izlendiği yazmaçlardır. Bu yazmaç ve yastıkların her birinin, genelde, ana bellek adres evreninin dışında, giriş/çıkış adres evreni olarak adlandırılan adres evreni içinde bir adresleri (kimlikleri) bulunur. Arabirim yazmaç ve yastıklarının her biri giriş/çıkış kapısı olarak da adlandırılır.
Arabirim üstünde yer alan güdüm yazmaç(lar)ı:
- Arabirimin yerine getirebildiği bir dizi işlev arasından birinin seçilmesi,
- Sürücü üzerinde yerine getirilmesi istenen işlemlerin arabirime bildirilmesi
amacıyla kullanılır.
Örneğin hem zamanuyumsuz, hem de zamanuyumlu türde iletişim yapmaya olanak veren bir arabirimin, sürücüsünün özelliğine göre iletişim türü, iletişim hızı gibi seçenekler güdüm yazmacı içeriğiyle belirlenir. Bunun gibi, bir disk sürücü için okuma yazma kafalarının izden ize hareket ettirilmesi, bir sektörün okunması, ya da yazılması gibi değişik işlemlerden (güdümlerden) birinin seçilmesi de, güdüm yazmacı aracılığıyla olur. Güdüm yazmacını oluşturan bitlerin her birinin özel anlamı bulunur ve bu anlamlar arabirim donanım başvuru elkitaplarında açıklanır. Örneğin bir terminal arabiriminin sürücüsü ile yapacağı iletişimin hızı, arabirimi düzeyinde yer alan güdüm yazmacının üç biti ile belirlenebilir. Bu üç bit ile oluşturulabilen 8 değişik koddan her biri 200, 400, 600, 1200, 2400, 4800, 9600, 19200bps gibi iletişim hızlarından birini seçmeye yarayabilir. Bu bitler üzerinde, örneğin 110b değeri, 9600bps hızını seçmeyi sağlar. Güdüm yazmaçları çoğu kez salt yazılır özellikte olurlar.
Durum yazmaçları, güdüm yazmaçları ile belirtilen işlemlerin akış ve sonuçlarına ilişkin bilgilerin tutulduğu yazmaçlardır. Bir arabirim üzerinde bir ya da daha çok durum yazmacı bulunabilir. Durum yazmacını oluşturan her bit özel bir durum bilgisini ifade eder. Bir disk sürücü arabirim durum yazmacı, örneğin, okuma-yazma kafasının istenen ize götürülmesini sağlayan güdümün sonlanıp sonlanmadığına ilişkin durum bitini içerir. Tutanakların ana bellekten disk sürücüye aktarılmasını sağlayan yordamlar, örneğin bu biti sınayarak, ize erişim sonrasında öbek yazma işlemine geçebilirler. Bunun gibi, arabirimi aracılığıyla terminal sürücüye gönderilen bir damga kodunun gönderme işleminin sonlanıp sonlanmadığı, arabirim durum yazmacının ilgili biti üzerinden gözlenir. Durum yazmaçları, işlem sonuçlarının yanı sıra işlem hatalarının izlenmesine de olanak verir. Sürücüden arabirime aktarılan verilerin örneğin eşlik bitleri, CRC(Cyclic Redundancy Check) damgaları otomatik olarak sınanıp varsa aktarım hataları, ilgili durum yazmaç bitleri kurularak belirtilir. Durum yazmaçları genelde salt okunur tür yazmaçlardır.
Arabirim veri yastıkları, verilerin, sürücü-ana bellek arası aktarımlar sırasında, arabirim düzeyinde geçici olarak tutuldukları bellek ögeleridir. Giriş/çıkış birimleri, ilgili oldukları sürücülere, bir seferde aktarılabilen veri birimi ile sınıflandırılabilirler.
Eğer bir sürücüye, bir seferde:
- bir damga aktarılabiliyorsa bu sürücüyle ilgili giriş/çıkış birimine damga tabanlı;
- en az bir öbek aktarılabiliyorsa bu sürücüyle ilgili giriş/çıkış birimine ise öbek tabanlı giriş/çıkış birimi denmektedir.
Arabirimler üzerinde yer alan veri yastık sayısı bu sınıflandırmaya koşut olarak belirlenmektedir. Damga tabanlı bir giriş/çıkış arabirimi düzeyinde en az bir damgalık, öbek tabanlı bir arabirim düzeyinde ise, en az bir öbeklik giriş/çıkış yastığı bulunur. Bu bağlamda, damga tabanlı bir giriş/çıkış birimi olan terminal biriminde, örneğin bir damgalık giriş, bir damgalık da çıkış yastığı bulunabilir. Öbek tabanlı bir giriş/çıkış birimi olan disk biriminin ise, sürücüden bir seferde okunabilen öbeğin (bir ya da birkaç sektörün) içerdiği bayt sayısı uzunluğunda giriş/ çıkış yastık alanları içerdiği düşünülebilir. RAM türü bellek yongalarının ucuzlamasına koşut olarak giriş/çıkış yastıklarının sığası da artmıştır. Arabirim düzeyinde yer alan giriş/çıkış yastıkları, gene bu ucuzlamaya koşut olarak, sürücüler üstüne eklenen, özellikle disk sürücülerinde mıknatıslı ortama erişim sayısını azaltma amacını güden sürücü ön (cache) bellekleriyle karıştırılmamalıdır.
Giriş/çıkış arabirimleriyle ilgili olarak, şimdiye değin açıklanan noktalar, varsayımsal bir terminal ve bir de disket arabirimi üzerinde örneklenmiştir.
Sözkonusu özel terminal arabirimiyle ilgili varsayımlar şunlardır:
- Terminal arabirimi, terminal sürücüye RS-232C standartında, zamanuyumsuz ve tam çift yönlü olarak bağlıdır.
(Terminal sürücü, Hiperterminal programı çalıştıran ve bu program aracılığıyla RS232C ardıl bağlantı kapısı üzerinden arabirime bağlanan bir kişisel bilgisayar (PC) sistemi olarak düşünülebilir.) - Arabirim düzeyinde birer damgalıklık bir Güdüm ve bir Durum yazmacı ile bir Giriş, ve bir Çıkış yastığı bulunmaktadır. Giriş yastığı klavyeden basılan tuş kodlarının ana belleğe aktarılmadan önce saklandığı, Çıkış yastığı ise ekrandan görüntülenmesi istenen damga kodlarının arabirim düzeyinde yazıldığı yastıklardır.
- Arabirimin yer aldığı bilgisayar sistemi giriş/çıkış adres evreninde:
- Güdüm Yazmacının A0H
- Durum Yazmacının A1H
- Giriş Yastığının A2H
- Çıkış Yastığının ise A3H fiziksel adresine atandığı varsayılmıştır.
- Arabirim - terminal iletişiminde:
- SP iletişim hızı, {19200, 9600, 4800, 2400} bps,
- CL damga boyu, {7, 8 bit},
- SB stop biti sayısı, {1, 2},
- P eşlik sayısı, {tek, çift, yok} değerlerinden birine kurulabilmektedir.
- Arabirim hem almaya hem göndermeye, ayrı ayrı kurulabilmektedir.
- Arabirim Durum yazmacı içinde, arabirim veri göndermeye hazır (TR), almaya hazır (RR), eşlik hatası (PE), aşma hatası (OE) gibi bilgiler üretilebilmektedir.
Bu durumda, ascii kodlu bir damganın, terminal ekranından görüntülenebilmesi için:
- Arabirim Güdüm yazmacına, terminal sürücü ile; bir stop bit, çift eşlik sayısı ve 9600bps hızında iletişim kurmayı sağlayan; gönderme ve alma işlemlerine arabirimi açan (10000111) değerin yazılması,
- TR durum bitiyle, arabirimin gönderime hazır olduğunu sınayıp, sözkonusu damga kodunu arabirim Çıkış yastığına yazmak gereklidir.

Örnek Terminal Arabirimi Görünümü
Özel disket arabirimiyle ilgili varsayımlar şunlardır:
- Disket arabirimi sürücüye ardıl ve standart dışı bir biçimde bağlıdır.
- Arabirimde birer baytlık bir Güdüm Yazmacı, bir Durum Yazmacı, bir Sektör Kimliği Yazmacı ile 2 bayt uzunluğunda İz Kimliği Yazmacı bulunmaktadır.
- Arabirimde, okumada giriş, yazmada da çıkış yastığı gibi davranabilen bir baytlık Giriş/Çıkış adlı bir yastık yer almaktadır.
- Arabirimin yer aldığı bilgisayar sistemi giriş/çıkış adres evreninde:
- Güdüm Yazmacının 10H
- Durum Yazmacının 11H
- Sektör Kimliği Yazmacının 12H
- İz Kimliği Yazmacının 13H
- Giriş/Çıkış Yastığının ise 15H adresine atandığı varsayılmıştır.
- Güdüm yazmacının en büyük ağırlıklı iki biti ile:
- okuma-yazma kafasının sıfırıncı ize götürülmesi,
- okuma-yazma kafasının, kimliği, İz Kimliği Yazmacı içinde bulunan ize götürülmesi,
- kimliği Sektör Kimliği Yazmacı içinde bulunan sektör baytlarının, ardarda Giriş/Çıkış yastığına okunmaya başlanması ve
Giriş/Çıkış yastığından, kimliği, Sektör Kimliği Yazmacı içinde bulunan sektöre yazmanın başlatılması işlemleri kodlanabilmektedir.

Örnek Disket Arabirimi Görünümü
Bu komutlar çerçevesinde, disket sürücü üzerinde bulunan bir sektörün okunması ya da yazılması için, önce okuma-yazma kafasının ilgili iz üstüne getirilmesi, bunun sonrasında okuma-yazma işlemine başlanması gerekmektedir.
- Güdüm yazmacının en büyük ağırlıklı iki bitini izleyen diğer iki bit ile 128, 256, 512 ve 1024 baytlık sektör boyları seçilebilmektedir.
- Güdüm yazmacının en küçük ağırlıklı biti ile disk işlem izni (E) açılıp kapanabilmektedir.
- Durum yazmacının değişik bitleri ile gösterilen:
- ZR okuma-yazma kafası sıfırıncı izde,
- SC okuma-yazma kafası, kimliği İz Kimliği yazmacında bulunan izde,
- RDY giriş/çıkış yastığı okunmaya ya da yazılmaya hazır,
- RE sürücüden arabirime aktarımda hata (CRC hatası) oluştu,
- OE aşma hatası oluştu durum bilgileri üretilmektedir.
RDY biti, okuma-yazma işleminin başlatılmasının peşisıra, ardarda (sürücüden arabirim giriş/çıkış yastığına) okunan ya da (giriş/çıkış yastığından sürücüye) yazılan baytların her birinin okuma ya da yazma işleminin gerçekleşmesi sonrasında kurulmaktadır.
- SC durum biti, okuma-yazma kafası, ilgili güdüm gereği istenen ize ulaştığında kurulmakta, arabirime yeni bir güdüm değeri yazılana değin kurulu kalmaktadır. Benzer açıklama ZR durum biti için de geçerlidir.
- Arabirim İz Kimliği yazmacı içine (n) değerinin yazılması,
- Sektör Kimliği yazmacının içine (m) değerinin yazılması,
- Güdüm yazmacının içine okuma-yazma kafasının ninci ize götürülmesini sağlayacak güdümün (01100001 değerinin) yazılması,
- İstenen işlemin gerçekleştiğinin, SC durum biti aracılığıyla algılanması,
- Bunun sonucunda, Güdüm yazmacının içine yazma işlemini başlatacak güdümün (11100001 değerinin) yazılması,
- RDY durum bitinin kurulmasıyla, sektörün ilk baytının Giriş/Çıkış yastığına yazılarak sürücüye aktarılmasının sağlanması ve bu işlemin, sektörü oluşturan diğer baytlar için de (512 kez) yinelenmesi gereklidir.
Gerek terminal arabirimi gerekse disket arabirimi örneğinde belirtildiği gibi, verilerin ana bellekten sürücüye ya da sürücüden ana belleğe aktarılabilmeleri için arabirim güdüm yazmacı ile aktarım işlemi alt adımlarını sırayla gerçekleştirmek ve bir adımdan izleyen adıma geçişi durum bitlerini kullanarak denetlemek gerekmektedir. Arabirim güdüm yazmaç içeriklerini günlemek, durum yazmacını okuyarak ilgili bitleri sınamak, giriş/çıkış yastık içeriklerini okumak ya da yazmak gibi işlemler, doğal olarak sistemde çalışan kimi yordamlar tarafından gerçekleştirilir. Bu yordamlar giriş/çıkış sürücü yordamları olarak adlandırılır.
Giriş/çıkışların programlanması, giriş/çıkış işlem akışına göre:
- Seçmeli,
- Kesilmeli ve
- Doğrudan Bellek Erişimli
diye üç değişik yöntemle ele alınmaktadır.
Bu yöntemler ve kullandıkları özel donanım düzenekleri, izleyen kesimde açıklanacak ve örneklenecektir.
Seçmeli giriş/çıkış programlamada işlem akışı, sürücü yordamın, giriş/çıkış arabirimi durum yazmaç içeriğini okuyup ilgili durum bitini sınaması yoluyla gerçekleştirilir. İlgili durum bitinin kurulu bulunduğu durumlarda, giriş/çıkış yastığı üzerinde okuma ya da yazma işlemlerinden biri yerine getirilir. İlgili bitin kurulu olmadığı durumlarda ise durum yazmacı yeniden okunarak sınama işlemleri sürdürülür. Sözlü olarak açıklanan bu denetim algoritması, yukarıda verilen terminal arabirimine bağlı klavyeden girilen bir damga kodunu, dizgi adlı bir ana bellek alanına aktaran ASM86 komut dizisi ile aşağıda örneklenmiştir:
Seçmeli giriş/çıkış programlama yöntemini kullanan ve ctrl-z damgasına kadar girilen damga kodlarını arabirimden okuyan ve bunları dizgi adlı ana bellek alanına yazan örnek program yukarıda verilmiştir. Normal koşullarda, giriş/çıkış birimlerini süren yordamlar, giriş/çıkış sisteminin üst katmanlara sunduğu sistem çağrı hizmetlerini karşılamak üzere öngörülen ve giriş/çıkış sisteminin içinde düşünülen yordamlardır.

Tek Terminal için Seçmeli Giriş/Çıkış Programlama Örneği
Yukarıda verilen program (ve izleyen bölümlerde verilen diğer örnek programlar), pedagojik nedenlerle, kullanıcı düzeyi bir program gibi düzenlenmiştir. Burada birincil amaç, giriş/çıkış sürücü yordamların giriş/çıkış sistemi içinde nasıl yeraldıklarını örneklemek yerine seçmeli giriş/çıkış programlama ilkesini, ayrıntılardan arınmış bir biçimde örneklemek olmuştur. Giriş/çıkış sürücü yordamların giriş/çıkış sistemi içinde nasıl yeraldıkları Aygıt Sürücüler başlıklı 8. bölümde açıklanacaktır.
Bu program içinde dizgi adlı alan 256 baytlık bir alan olarak öngörülmüştür. Klavyeden 256 damga girilmeden ctrl-z tuşuna basılacağı varsayılarak alan taşma denetimi ile durum yazmacı içinden sınanabilen eşlik ve taşma hata denetimleri, programı karmaşıklaştırmamak amacıyla yapılmamıştır. Programın hemen başında veri kesim yazmacını (ds) günleyen komutlar, sistemi kesilmelere kapayıp açan cli (clear interrupt) ve sti (set interrupt) komutlarıyla ayraç arasına alınmıştır. Bu komutlar ve kesilme kavramı izleyen kesimde açıklanacaktır. Bu ayracın peşi sıra güdüm yazmacı içine ilk-güdüm adlı 10000111B değeri yazılarak terminal arabiriminin 9600bps hızında, bir stop bit ve çift eşlik sayısıyla, hem göndermeye hem de almaya izinli olarak çalışmaya başlaması sağlanmıştır.
Okunan her damganın, klavye ile ilgili ekrandan da görüntülenmesi sağlanmıştır. Bunun amacı, damgaları giren kullanıcıya, girdiği damgaların sistem tarafından alındığı konusunda geri bildirim sağlamaktır. Klavyeden girilen damgaların arabirime ulaştıktan sonra arabirim tarafından, ekrandan görüntülenmek üzere sürücüye geri gönderilmesi işlemi damga yankılama olarak adlandırılır. Program içinde bu:
komutlarıyla gerçekleştirilmiştir. al yazmacı, hem damga kodunu hem de durum yazmacı içeriğini okumada kullanıldığından damga kodu önce yığıta saklanmış sonra da pop komutu ile geri alınarak çıkış yazmacına yazılmıştır. push ve pop komutlarının kullanılıyor olması programın başında yığıt kesim yazmacı (SS) ile yığıt göstergesinin (SP) günlenmesini gerekli kılmıştır.
Yukarıda da belirtildiği üzere, sayfanın başında verilen program, örnek bir giriş/çıkış arabiriminin seçmeli giriş/çıkış programlama tekniği kullanılarak denetlenmesini örneklemek üzere, giriş/çıkış sistemi dışında, kullanıcı düzeyi bir program gibi düzenlenmiştir. Bu nedenle, bu program sonlandığında, bu programın kullanıcı düzeyinde çalıştırıldığı işletim sistemine geri dönüşün de öngörülmesi gerekmiştir. ctrl-z damgasına rastlanması durumunda sapılan ve bir makro gibi düşünülen terminate komutu bu amaçla kullanılmıştır.
Seçmeli giriş/çıkış programlamanın çalışma ilkesi, şimdiye değin, sistemde tek bir giriş/çıkış birimi varmış gibi açıklanmıştır. Ancak en yalın bir bilgisayar sisteminde bile birçok giriş/çıkış biriminin yer aldığı bilinir. Giriş/çıkış birimlerinin birden çok olduğu durumlarda seçmeli giriş/çıkış programlama yönteminin temel ilkesi değişmez. Tek bir arabirime ilişkin durum yazmacını sınamak yerine sistemde yer alan tüm arabirimlerin durum yazmaçları sırayla okunarak hazır durumda olanların gerektirdikleri hizmetler (hizmet yordamlarına sapılarak) sağlanır. Arabirimlerin durum yazmaçlarının sırayla sınanması arabirimlerin taranması olarak adlandırılır.
Birden çok giriş/çıkış biriminin bulunduğu bir sistemde, bunlardan iki ya da daha çoğunun aynı anda (veri yastıklarının okunup yazılması gibi) hizmet istemleri söz konusu olduğunda, hangi birime daha önce hizmet verileceği sorunu ortaya çıkar. Bu sorun öncelik sorunu olarak bilinir. Seçmeli giriş/çıkış programlama yönteminde birimler arası öncelikler arabirim durum yazmaçlarının taranma sıra ve sıklığıyla belirlenir.
En öncelikli birim en sık taranan birimdir. Eğer bir sistemde, 0'dan (n-1)'e kadar numaralanan n adet giriş/çıkış birimi bulunduğu düşünülürse, en öncelikli olduğu varsayılan 0ıncı birimin durum yazmacı öncelikle okunur, ilgili durum bitleri aracılığıyla birimin hizmet gereksinimi bulunup bulunmadığı sınanır. Eğer birim hizmet gerektiriyorsa ilgili yordama sapılır. Yordam dönüşünde yine bu birimden başlamak üzere tarama işlemi yinelenir. Eğer birim hizmet gerektirmiyorsa bir sonraki birimin durum sınamasına geçilir. i inci birimin hizmet almak için hazır olmadığı durumda (i+1)inci birimin durum sınamasına geçilir. i inci birimin durum sınaması sonucu hizmet yordamına sapılmışsa bu yordamdan geri dönüşte sınamalara 0ıncı birimden, yeniden başlanır. Seçmeli giriş/çıkış programlama yönteminde birimler arası önceliklerin ele alınışını gösteren aşağıdaki akış çizgesindeki (a) gibidir.

Seçmeli Giriş/Çıkış Programlamada Önceliklerin Ele Alınması
Sistemde yer alan tüm birimlerin eş öncelikli oldukları varsayıldığında taramalar, yukarıdaki çizimdeki (b) akış çizgesine göre yapılır. Bu iki yaklaşım arasındaki tek ve önemli ayrım, hizmet yordamlarından geri dönüşte başa (0ıncı birime) ya da izleyen (i+1inci) birimin sınanmasına geçilmesidir.

Üç Terminal için Seçmeli Giriş/Çıkış Programlama Örneği
Seçmeli giriş/çıkış programlama yönteminde önceliklerin ele alınışı yukarıda verilen program ile örneklenmiştir. Bu örnek programda, 3 değişik terminal birimi klavyelerinden girilen damgaların, ctrl-z damgasına rastlanana değin ilgili ekrandan görüntülenmesi ve dizgi (i) olarak adlandırılan ilgili bellek alanlarına yazdırılması gerçekleştirilmektedir. Terminal arabirimleri üzerindeki yazmaç ve yastıkların, sistem giriş/çıkış adres evreni içindeki adreslerinin, i inci terminal için (i={0,2}):
Güdüm Yazmacı adresi: A0+4xi
Durum Yazmacı adresi: A0+4xi+1
Giriş Yastığı adresi: A0+4xi+2
Çıkış Yastığı adresi: A0+4xi+3 olduğu varsayılmıştır.
Terminallerin, bir önceki örnekte olduğu gibi 9600bps hızında, bir stop bit, çift eşlik sayısı ile çalıştığı varsayılmış ve arabirimlerin önbelirlemeleri buna göre yapılmıştır. Tek terminal için Seçmeli Giriş/Çıkış Sürücü Programı'nda olduğu gibi, push ve pop gibi yığıtı kullanan komutlardan yararlanılıyor olması yığıt kesim yazmacı ile yığıt göstergesinin günlenmesini gerekli kılmıştır. Program, her üç terminalin eş öncelikli olduğu varsayılarak yazılmıştır. Bu nedenle terminal arabirimlerinin durum yazmaçları sırayla okunarak almaya-hazır damga bulunup bulunmadığı sınanmakta; varsa o terminalle ilgili hizmet kesimine sapılmakta; hizmet kesiminin sonunda ise, izleyen terminalin durum sınamasının yapıldığı komuta dönülmektedir.
Hizmet kesiminde, önce, eşlik ve aşma hataları ile terminalin açık olup olmadığı sınanmaktadır. hata durumunda ilgili terminalin giriş yastığı içeriği okunarak durum bitlerinin sıfırlanması sağlanmaktadır. Klavyeden arabirime gelen damga ctrl-z damgası ise terminalin, arabirimi düzeyinde alma ve gönderme işlemlerine kapatıldığı program kesimine sapılmaktadır. Burada ilgili güdüm yazmacını, arabirimi alma ve göndermeye kapayan değerle günlemenin yanı sıra sayaç adlı bir değişken içeriği de bir artırılmaktadır. Bunun amacı, her üç terminalden de ctrl-z damgasının alınması durumunda programın işletimini sonlandırabilmektir. sayaç içeriğinin üçe ulaşması, her üç terminalde de, damga giriş işlemlerinin sonlandığını göstermektedir. Bu nedenle, terminallerin durum yazmaçlarının sırayla sınandığı kesimde sayaç '3' değeriyle karşılaştırılarak program işletiminin sonlanmasına karar verilebilmektedir.
Bilgisayar sistemlerinde verilerin, giriş/çıkış sürücülerinden sisteme sunuluşları genelde hep rasgele anlarda ortaya çıkmaktadır. Bir klavye aracılığıyla girilen damgaların sisteme hangi anlarda sunulacağını kestirmek, tuşlara ne zaman basacağını öngörmek gibi olanaksızdır. Kullanıcıların tuşlara basmaları gibi, zaman içinde rasgele anlarda oluşan eylemler, sistem açısından zamanuyumsuz gelişen eylemlerdir.
Seçmeli giriş/çıkış programlama yönteminde, rasgele gelişen olayları izlemek için arabirim durum yazmaç bitlerini sürekli sınamak gerekmektedir. Bu durum, giriş/çıkış sürücülerinden veri aktarım istemi olmadığı zamanlarda bile, bu istemin ortaya çıkış anını yakalayabilmek üzere, sürekli sınamaları zorunlu kılmaktadır. Bu sınamalar ana işlem birimi zamanının gereksiz işlemlerle yitirilmesi sonucunu doğurmaktadır.
Seçmeli giriş/çıkış programlama yönteminin bir diğer sakıncası da, sistem işlem hızını sürücünün hızına indirmesidir. Bu sakınca, dizgi adlı bir bellek alanının terminal ekranından görüntülenmesini, seçmeli giriş/çıkış yöntemiyle gerçekleştiren, aşağıdaki program kesimiyle örneklenebilir:
Ana işlem birimi kullanımındaki verimsizliği aşmanın yolu, verilmiş olan örneklerden de açıkça görüleceği üzere, durum sınamalarını ortadan kaldırmaktan geçmektedir. Bu sınamaların ortadan kaldırılabilmesi, kesilme düzeneği olarak bilinen bir ana işlem birimi uyarı düzeneğinin kullanılması ile olanaklıdır. Kesilme düzeneği ve bunun giriş/çıkışların programlanmasında kullanımı izleyen bölümde açıklanacaktır. Bu bölüme geçmeden önce, 80X86 türü işleyicilerin in ve out adlı giriş/çıkış komutlarıyla ilgili özlü açıklamalar verilecektir.
Bilindiği üzere ana işlem biriminin erişebildiği ögeler:
- Bellek adres evreninde ana bellek sözcükleri,
- Giriş/çıkış adres evreninde ise, giriş/çıkış kapıları olarak da nitelenen arabirim yazmaç ve yastıklarıdır.
Diğer işlenen ise, erişilen giriş/çıkış kapı adresidir. Giriş/çıkış kapılarının adreslenmesi komut içi ve yazmaç dolaylı olmak üzere iki biçimde yapılabilir. Yazmaç dolaylı adreslemede dx yazmacı kullanılır. Komut içi adresleme yapan giriş/çıkış komutları bir bayt uzunluğundaki adreslere izin verirken, yazmaç dolaylı adreslemeyi kullanan komutlar 16 bit üzerinden adresleme yapabilmektedir. Komut içi adresleme yapan in ve out komutları 2 bayt uzunluğunda olurken dx yazmacını dolaylı giriş/çıkış kapısı adreslemede kullanan in ve out komutları tek bayt uzunluğunda olmaktadır. in ve out komutlarının değişik türleri ve yerine getirdikleri işlemler aşağıda özetlenmiştir:
Bu tanımlar içinde kapı olarak adlandırılan bir baytlık değişmez, 0'dan 255'e kadar, komut içi bir giriş/çıkış kapı adresini temsil etmektedir.
Giriş/çıkış arabirimlerinin rasgele anlarda ortaya çıkan hizmet istemlerinin hemen ele alınabilmesi, o an işletilmekte olan programın kesilerek sözkonusu hizmetle ilgili yordama sapılması ile mümkündür.
Ana işlem biriminin, işletmekte olduğu bir programı rasgele bir anda keserek özel bir yordama sapması kesilme olarak bilinir. Kesilme, ana işlem birimine giriş/çıkış arabirimlerinden ulaşan özel imler aracılığıyla gerçekleşir. Bu imler kesilme istem imleri olarak adlandırılır. Kesilme istem imleri ana işlem birimine kesilme girişleri üzerinden uygulanır. İşleyicilerin genelde tek bir kesilme girişleri bulunur. İzleyen kesimdeki açıklamalar, ilgili ana işlem biriminin tek bir kesilme girişi içerdiği varsayılarak verilmiştir.
Giriş/çıkış arabirimlerinin kesilme istemleri, kimi durum yazmaç bitleriyle simgelenir. Kesilme istem imleri, ilgili durum bitleriyle aynı mantıksal değerleri taşırlar. Kesilme istemleri kesilme uyarıları olarak da adlandırılır. Örnek terminal arabirimindeki RR (almaya hazır), TR (göndermeye hazır) bitleriyle aynı mantıksal değerlere sahip imler, kesilme istem imlerine örnek olarak verilebilir.
Üç Terminal için Seçmeli Giriş/Çıkış Programlama Örneği
Başka bir deyişle, program sayaç içeriğini bir artırmak yerine yeni bir değerle günler. Kesilme yordamı kesilme imini üreten arabirimin hizmet istemini yerine getiren yordamdır.
Kesilme girişi denetim birimine, ana işlem birimi program durum sözcüğü adlı yazmacın özel bir bitiyle denetlenen bir anahtarlama düzeneği üzerinden bağlanır. Bu bitin kurulu olmadığı durumlarda ana işlem birimi kesilme girişine ulaşan kesilme imleri, denetim birimine ulaşamaz ve dolayısıyla komut işletim akışını değiştiremezler. Anılan bu anahtarlama düzeneği, kesilme maske düzeneği olarak bilinir.
İleride görüleceği üzere, aynı düzeneğin kesilme istemlerinin kaynaklandığı arabirim düzeyinde de bulunması nedeniyle ana işlem birimi içinde bulunan ve kesilme istemlerini genel olarak denetleyen bu maske düzeneğine genel maske, arabirimler düzeyinde yer alan düzeneklere ise yerel maske düzenekleri denir. Kesilme istemlerinin denetim birimine ulaşıp ulaşamamasını denetleyen ana işlem birimi program durum sözcüğü yazmacının ilgili biti genel maske (M) biti olarak adlandırılır. Arabirimler düzeyindeki yerel maske (YM) bitleri ise güdüm yazmaçları içinde bulunan işlem izni açma-kapama bitleridir. Genel maske bitinin denetlenmesi, genelde enable interrupt, disable interrupt; set interrupt mask, clear interrupt mask gibi makina komutlarınca sağlanır. Bu komutlar genel maske bitinin kurulmasını ya da sıfırlanmasını gerçekleştirirler. Genel maske bitinin kurulması, kesilme isteminin denetim birimine kadar ulaşmasını ve komut işletim akışını etkileyebilmesini sağlar. Bu, ana işlem biriminin ya da sistemin kesilmelere açılması işlemi olarak nitelenir. Genel maske bitinin sıfırlanması ana işlem birimini kesilmelere kapar.
Kesilme Düzeneği
Kesilme isteminin denetim birimi tarafından algılanması sonucu kesilme yordamının işletimine sapış rasgele yapılamaz. Kesilme istemi algılandığında işletilmekte olan programın işletim bütünlüğünün korunması kimi önlemlerin alınmasını gerekli kılar. Bu önlemler:
- Kesilme yordamına sapılmadan önce, ana işlem birimi tarafından kendiliğinden yerine getirilen önlemler ve
- Kesilme yordamı içinde ele alınan önlemler
olmak üzere iki sınıfa ayrılır.
Ana işlem birimi tarafından otomatik olarak ele alınan önlem, kesilme yordamının işletimi sonlandığında işletimine geri dönülecek komut adresinin saklanmasıdır. Bu adrese geri dönüş adresi adı verilir.
Geri dönüş adresi, o anda yığıt göstergesinin gösterdiği adrese saklanır. Bu, kesilme yordamına sapma işleminin ilk aşamasıdır.
Kesilme yordamına sapma bu yordamın ana işlem birimine anahtarlanması olarak da nitelenir. Anahtarlanmanın bu aşamasında geri dönüş adresinin yanı sıra, işletime özel, program durum yazmacı, görev yazmacı gibi kimi diğer yazmaçlar da, ana işlem birimince, otomatik olarak yığıta saklanabilir.
Geri dönüş adresinin saklanmasından sonra ikinci aşama kesilme yordamına sapma aşamasıdır.
Kesilme yordamına sapmada değişik işleyici mimarileri değişik yöntemler kullanırlar. Bu yöntemlerden en yalınları:
- Kesilme girişiyle eşleşmiş değişmez bir ana bellek sözcüğü üzerinden, dolaylı adresleme yoluyla kesilme yordamına sapma yöntemi ve
- Kesilme istem imini üreten sistem birleşeninin (örneğin arabirimlerin) sapılacak kesilme yordamı başlangıç adresini de sağladığı yöntemdir.
Birinci yöntemle, sistemin kesilmelere açık olduğu bir evrede, kesilme girişi üzerinde kesilme istem imi oluştuğunda, başlangıç adresi ana belleğin önceden bilinen, değişmez bir konumunda (örneğin sıfır adresli sözcüğünde) yer alan yordama sapma sağlanır. Kesilme yordamına sapmada yararlanılan ana bellek dolaylı adresleme sözcüğü vektör olarak adlandırılır ve sistem işletime açıldığında sistem programları tarafından, kesilme hizmet yordamının başlangıç adresiyle günlenir.
İkinci yöntemde ise, kesilme istem imi denetim birimince algılandığında, kesilme istemini üreten birleşene, kesilme istemi alındısı olarak adlandırılan bir geri bildirim imi gönderilir. Bunun üzerine söz konusu birleşen kendi istemiyle ilgili yordam başlangıç adresini yada bunun hesaplanmasını sağlayacak parametreyi ana işlem birimine ulaştırarak kesilme yordamına sapılmayı sağlar. İlgili yordam başlangıç adresi yada parametresi, arabirim üstünde, kesilme kimlik yazmacı diye adlandırılan bir yazmaç içinde saklanır. Kesilme kimlik yazmaçları salt okunur tür yazmaçlar değilse, içerikleri sistem işletime açıldığında, sistem programları tarafından, kesilme yordam başlangıç adresleriyle günlenir.
Kesilme yordamından geri dönüş diğer yordamlardan geri dönüşte olduğu gibi return türü komutlarla gerçekleşir. Bu komutun işlevi, kesilme istem iminin algılanmasından sonra ana işlem birimi tarafından, otomatik olarak yığıta saklanan değerlerin ilgili yazmaçlara geri aktarılmasıdır.
Kimi işleyiciler için call türü komutlarla çağrılan yordamlardan geri dönüş ile kesilme yordamlarından geri dönüşü sağlayan komutlar birbirinden ayrıştırılır. Bunun nedeni call komutunun işletiminde yığıta saklanan içerikler ile kesilmeye sapışta saklanan içeriklerin aynı olmamasıdır.
Kesilme istemi, oluşmasına neden olan durum ortadan kaldırılıncaya kadar varlığını sürdürür. Kesilme isteminin ortadan kalkması, bu isteme ilişkin yordama sapılıp gerekli hizmet işlemleri yerine getirildikten sonra gerçekleşir. Örneğin, terminal arabirimi, klavyeden girilen bir damga kodunun, giriş yastığında okunmaya hazır olduğu andan başlayarak RR (almaya hazır) bitini kurar. Arabirim RR bitini ancak arabirim giriş yastığının okunması durumunda sıfırlar. Bu nedenle, kesilme yordamına sapılması, kesilme isteminin ortadan kalkması sonucunu doğurmaz.
Yukarıda açıklandığı gibi denetim birimi, ayrıcalıksız, tüm komutlar için, komut işletiminin belirli bir periyodunda kesilme girişini sınamaktadır. Eğer sistem (ana işlem birimi) kesilmelere, kesilme yordamının birinci komutundan başlayarak açık tutulacak olursa, bu ilk komutun işletimi sırasında da varlığını sürdüren aynı kesilme istemi, aynı yordama yeniden sapılmaya, tekrar tekrar neden olacaktır. Bu durum, örneğin, ana belleğin yönetimi incelenirken açıklanacak bellek koruma düzeneklerinin bulunmadığı sistemlerde tüm ana belleğin, yığıt gibi kullanılarak geri dönüş adres değerleri ile dolması ve dolayısıyla sistemin tümüyle işlemez hale gelmesi sonucunu doğuracaktır.
Bellek koruma düzeneğinin bulunduğu sistemlerde ise yığıttan taşma hatası sonucu, işletim sonlanmadan durdurulacaktır. Bu gerekçeye dayalı olarak, kesilme imi denetim birimince algılanır algılanmaz program durum yazmacındaki genel maske biti otomatik olarak sıfırlanır. Kesilme yordamının içinde, gerekli önlemler alınarak sistem kesilmelere yeniden açılabilir. Bu önlemler, kesilme imlerinin arabirimler düzeyinde maskelenerek sıfırlanması yoluyla yerine getirilir. Arabirimler arası önceliklerin ele alınma zorunluluğu, sistemin, kesilme yordamının içinde kesilmelere yeniden açılmasını gerektirir.
Kesilme istemi algılandığında, işletilmekte olan programın işletim bütünlüğünün korunması amacıyla kimi önlemlerin alınmasının gerektiği ve bu önlemlerin, kesilme yordamına sapılmadan önce ana işlem birimi tarafından otomatik olarak yerine getirilen önlemler ile kesilme yordamı içinde ele alınan önlemler olmak üzere ikiye ayrıldığı daha önce belirtilmişti.
Bu bağlamda, kesilme yordamının hemen başında, ana işlem birimi tarafından otomatik olarak saklanmayan ve kesilme yordamı içinde kullanılarak içerikleri bozulacak ana işlem birimi yazmaçlarının yığıta saklanması gerçekleştirilmelidir. Bunun doğal sonucu olarak, kesilme yordamından kesilen programa geri dönülmeden önce de, ana işlem birimi yazmaç içeriklerinin bu programa ilişkin, yığıtta saklı içeriklerle günlenmesi gereklidir.
Bu günleme öncesi, eğer sistem kesilme hizmet yordamı içinde, daha önceden kesilmelere açılmışsa kesilmelere yeniden kapatılır. Bu yapılmadığı takdirde yazmaç içeriklerinin günlendiği bir anda ortaya çıkacak bir kesilme istemi, o ana kadar günlendiği varsayılacak yazmaç içeriklerinin ve dolayısıyla ilk kesilen programın işletim bütünlüğünün bozulmasına neden olabilir.
Kesilme istemi algılandığında işletilmekte olan programın işletim bütünlüğünün korunması amacıyla, bir kesimi ana işlem birimi tarafından otomatik olarak yerine getirilen yazmaç saklama ve günleme işlemleri, genel olarak bağlam anahtarlama işlemleri olarak adlandırılır. Bağlam anahtarlama işlemlerine görev yönetimi kapsamında da değinilecektir. Bu aşamaya kadar verilen bilgiler ışığında, kesilme yordamının genel yapısı aşağıda verildiği biçimdedir.
Kesilme-yordamı:
- aib yazmaçlarının yığıta saklanması;
- kesilme hizmeti;
- sistemin kesilmelere kapatılması (daha önce, kesilme hizmeti diye anılan kesimde açılmışsa);
- aib yazmaçlarının yığıttaki içeriklerle günlenmesi;
- kesilen yordama geri dönüş
Kesilme Yordamının Genel Yapısı
Kesilme yordamı başlangıç adresinin, ana belleğin kesilme vektörü olarak adlandırılan belirli bir sözcüğünden alındığı yöntemde, kesilme girişi üzerinde oluşan istem imi denetim birimince algılanır algılanmaz, bu girişle eşleşmiş tek bir yordama sapılır. En yalın bir bilgisayar sisteminde bile kesilme istemi üreten birden çok sistem birleşeni bulunur. Kesilme istemi üreten birleşen (arabirim) çıkışları kesilme girişine "ya da" türü mantıksal bir geçitten geçerek ulaşırlar.
Bunun sonucunda ana işlem birimi düzeyinde algılanan kesilme isteminin hangi birleşenden kaynaklandığını dolaysız çıkarabilme olanağı bulunmaz. Bu nedenle sapılan ortak kesilme yordamı içinde, ana işlem birimine kesilme istemi üretebilen tüm birleşenlerin sınanarak istemin hangi birimden geldiğinin belirlenmesi gereklidir. Kesilme istemi üreten tüm birleşenlerin sınanması ve istemin hangi birimden geldiğinin belirlenmesi kesilme istemlerinin taranması olarak adlandırılır.
Bu tarama, kesilme istem imi ile aynı mantıksal değeri gösteren durum yazmacı bitlerinin, seçmeli programlamada olduğu gibi sırayla okunması yoluyla gerçekleştirilir. Tarama sonucu istem ürettiği saptanan birleşenin özel hizmet yordamına sapılarak istemin gereği yerine getirilir. Burada kesilme yordamı biricik, kesilme isteminin gereğini yerine getiren özel hizmet yordamları ise kesilme istemi üretebilen arabirim sayısı kadardır. Bu yönteme göre, tüm birleşenlerce ortaklaşa kullanılan kesilme yordamının genel yapısı aşağıda verilmiştir.
Kesilme-yordamı:
- aib yazmaçlarının yığıta saklanması;
- kesilme girişine bağlı arabirimlerin durum yazmaçlarının okunarak kesilme istemlerinin taranması;
- kesilme istemine rastlanan ilk arabirimle ilgili özel hizmet yordamını çağırma
- aib yazmaçlarının yığıttaki içeriklerle günlenmesi;
- kesilen yordama geri dönüş
Ana Bellek üzerinden sapılan Kesilme Yordamının Genel Yapısı
Seçmeli giriş/çıkış programlama yönteminde de görüldüğü gibi, birden çok arabirimin kesilme istem imi üreterek aynı anda hizmet istemesi öncelik sorununu ortaya çıkarır.
Kesilme istem iminin algılanması sonucu sapılan kesilme yordamı içinde arabirimler öncelik sırasında taranırlar. Bu tarama sonucunda durum biti kurulu bulunan ilk arabirimin hizmet yordamı çağrılır. Bu yordamın işletiminden sonra kesilme yordamından geri dönülür. Eğer bu aşamada, daha az öncelikli arabirimlerin de taranmamış istemleri kaldı ise, kesilme girişi üzerinde varlığını sürdüren kesilme imi, kesilme yordamına yeniden sapılmayı sağlar ve tarama yordamı yeni baştan çalıştırılır. Kesilme girişinin denetim birimince sınandığı anda var olan birden çok kesilme isteminin ele alınması bu biçimde gerçekleştirilir. Bu, eşanlı kesilme istemlerinde önceliklerin ele alınışıdır.
Ancak bir arabirimle ilgili özel hizmet yordamına sapılıp bununla ilgili işlemler yürütülürken de, daha öncelikli arabirimlerin kesilme istemleri ortaya çıkabilir. Özellikle bu işlemlerin göreli uzun sürdüğü durumlarda, işletilen özel hizmet yordamına ara verilip daha öncelikli arabirimin hizmet yordamına sapmak gerekli olabilir. Bu, özel hizmet yordamları içinde, gerekli önlemler alınarak sistemin kesilmelere yeniden açılmasıyla gerçekleşebilir. Bunun yapılması, tüm kesilme istemlerini tek bir kesilme yordamıyla yanıtlayan bu yöntemle, aynı kesilme yordamına tekrar tekrar sapmayı gerektiren karmaşık bir yapı ortaya çıkarır. Bu nedenle, bu tür önceliklerin ele alınışı izleyen kesimde, diğer yöntem kapsamında açıklanacaktır.
Kesilme yordamlarına, belirli ana bellek sözcükleri üzerinden, dolaylı adresleme yoluyla sapma yönteminin kimi önemli sakıncaları vardır. Bu sakıncalardan en önemlisi, arabirimlere özgü özel hizmet yordamlarına dolaysız sapılamamasıdır. Kesilme istemi söz konusu olan arabirimin hizmet yordamına sapış, yukarıda tarama kesimi olarak adlandırılan komut dizisinin işletilmesini gerektirmektedir.
Çoğu kez bir giriş/çıkış kapısını okuma, güdüm yazmacına yeni bir güdüm değeri yazma gibi birkaç komutluk hizmet gereksinimi nedeniyle üretilen her kesilme istemi için, kesilme yordamı içinde tüm arabirimlere ortak bu kesimin işletilmesinin, zaman açısından bedeli yüksektir. Özellikle aynı kesilme girişine bağlı arabirim sayısının kabarık olduğu sistemlerde bu bedelin daha da ağırlaşacağı açıktır.
Kesilme yordamına sapma adresinin arabirimce sağlandığı yöntemde, kesilme girişi üzerinden bir istem geldiğinde ana işlem birimi, "alındı" olarak adlandırılan bir imi arabirimlere gönderir. Kesilme istemini üreten arabirim, alındı imini alır almaz kendisiyle ilgili kesilme yordamının başlangıç adresini ya da bunu hesaplamaya yarayacak parametreyi, veri yolu üzerinden ana işlem birimine ulaştırır. Bu biçimde ana bellekte kesilme vektörü kullanımına gerek kalmaz. Çoğu kez, arabirimle ilgili kesilme yordamı başlangıç adresi (ya da parametresi) arabirim düzeyinde bir yazmaç (kesilme kimlik yazmacı) içinde tutulur. Kesilme alındı imi bu özel giriş/çıkış kapısını okumada kullanılan bir denetim imi olarak da düşünülebilir.
Ana işlem birimi kesilmelere açıldığı anda, kesilme girişi üzerinde birden çok kesilme istemi bulunabilir. Kesilme alındısının, bu istemleri üreten arabirimlerden hangisine gönderileceği ve bu yolla hangi arabirime ilişkin kesilme yordamına sapılacağı arabirimlerin öncelikleri gözetilerek belirlenir. Arabirimler arası önceliklerin belirlenmesinde iki değişik donanımsal yapı kullanılır. Bunlar:
- Zincirleme Bağlantı ve
- Kesilme Önceliği Denetleme Birimi yapılarıdır.
Kesilme Alındısı Zincirleme Bağlantı Yapısı
Zincirleme bağlantı yapısında kesilme istem imleri, kesilme girişlerine, yine "ya da" türü geçitler üzerinden ulaşırlar. Bu yapıya ana işlem birimi yönünden bakıldığında, kesilme isteminin hangi arabirimden geldiği anlaşılamaz. Kesilme istemi denetim birimince algılır algılanmaz kesilme alındı imi kurulur. Bu imin kurulmasıyla veri yolu üzerinde bulunan değer, ana işlem birimince sapılacak kesilme yordamı başlangıç adresi ya da bunu hesaplamaya yarayacak parametre olarak yorumlanır. Aşağıda, kesilme alındı iminin, kesilme kimlik yazmacı içeriğini okumada nasıl kullanılabileceği gösterilmiştir.

Kesilme Alındısı Örnek Anahtarlama Düzeneği
Sistem kesilmelere açıldığı anda, birden çok arabirimin kesilme isteminin varlığı sözkonusu ise bu istemlere eşanlı istemler denir. Zincirleme bağlantı yönteminde, eşanlı kesilme istemlerinde önceliklerin yerine getirilmesi kesilme alındısının arabirimleri ardıl biçimde dolaşması yoluyla sağlanır. Kesilme istemi üreten arabirimlerden kesilme alındısı kendisine ilk ulaşan arabirimin kesilme yordamına sapılır. Böylece, eşanlı istemlerde hangi isteme daha önce yanıt verileceği sorunu aşılmış olur.
Arabirimler arası gözetilmesi gereken öncelikler eşanlı önceliklerle sınırlı değildir. Bir kesilme yordamı işletilirken daha öncelikli bir arabirimden kesilme istemi gelmesi durumunda işletilen kesilme yordamının kesilerek daha öncelikli bu arabirimin kesilme yordamına sapılabilmesi gereklidir. Bir kesilme yordamı işletilirken, bu işletimin kesilip daha öncelikli olduğu varsayılan bir diğer kesilme yordamının işletimine geçme ve bu yordam sonlandıktan sonra kesilen yordama geri dönme kesilmelerin içiçe ele alınması olarak bilinir. Öncelikler gözetilerek kesilmelerin içiçe ele alınabilmesi, yerel maske düzeneği diye adlandırılan bir düzeneğin kullanılmasını gerektirir.
Herhangi bir arabirimle ilgili kesilme yordamına sapıldıktan sonra, daha öncelikli arabirimlerden gelebilecek kesilme istemlerinin gözönüne alınabilmesi için bu yordam içerisinde, bağlam saklama işlemlerinden hemen sonra, kesilmelerin, ana işlem birimi düzeyinde yeniden açılması zorunludur. Ancak bu işlemin, öncelik sırasını bozmaması için, daha düşük öncelikli arabirimlerin, bu aşama sonrasında kesilme üretmelerinin engellenmesi gereklidir. Bu amaçla arabirimlerde kesilme istem imlerini simgeleyen durum biti çıkışları, arabirim dışına, işlem izni güdüm biti çıkışlarıyla, "mantıksal ve" türü geçitlerden geçerek taşınırlar. Arabirim işlem izni güdüm biti sıfır olduğu sürece durum bitiyle simgelenen kesilme istemi ana işlem birimine ulaşamaz. İşlem izin bitinin sıfırlanması, kesilme isteminin yerel olarak maskelenmesi diye bilinir.
kesilme-yordamı-i:
- aib yazmaçlarının yığıta saklanması;
- i, (i+1),..,(n-1) inci arabirimlerin yerel maske bitlerinin sıfırlanması;
- aib'nin kesilmelere açılması;
- (i) inci arabirimin hizmet yordamını çağırma;
- aib'nin kesilmelere kapatılması;
- i, (i+1),..,(n-1) inci arabirimlerin yerel maske bitlerinin kurulması;
- aib yazmaçlarının yığıttaki içeriklerle günlenmesi;
- kesilen yordama geri dönüş
Kesilme önceliklerinin, iç içe kesilmelere olanak verecek biçimde denetlenebilmesi için arabirim maske bitlerinin kurulma işlemleri, çoğu kez kesilme yordamlarını karmaşıklaştıran, bu yordamların işletim sürelerini uzatarak sistem başarımını düşüren işlemlerdir. Ayrıca kesilme önceliklerinin denetiminin çok sayıda kesilme yordamının içine dağılmış komutlarla yapılması, sistem yazılımlarının okunurluk ve bakılırlığını olumsuz yönde etkileyen bir husustur.
Zincirleme bağlantı yapısının sistem programlarına yansıyan bu sakıncalarının yanı sıra bir diğer sakıncası daha vardır. Bu yapıda arabirimlerin kesilme öncelikleri, sistem donanım yapısına gömülüdür. Başka bir deyişle, bir arabirimin önceliğinin değiştirilebilmesi o arabirimin, zincirleme bağlantıdaki yerinin, fiziksel olarak değiştirilmesini gerektirir. Bu, sistem kutusunun açılarak kimi tel sargıların çözülüp yerine yeni sargı ya da lehimlerin yapılması demektir.
Sistem konfigürasyonuna yeni arabirimlerin katılması durumunda da bu arabirimin önceliğinin gerektirdiği yere takılması ve diğer arabirimlerin alındı imi bağlantılarının değiştirilmesi gerekir. Sisteme yeni arabirimlerin katılması, çoğu kez müşteri ortamında gerçekleştiğinden sistemin genişletilmesindeki firma donanım desteği gereksinimi artar. Halbuki arabirim önceliklerinin sistem yazılımları aracılığıyla değiştirilebilmesi, çok daha esnek bir yaklaşımı oluşturacaktır.
(2) Kesilme Önceliği Denetleme Birimi, kesilme önceliğinin işletim içinde devingen olarak değiştirilebilmesine olanak verir. Bunun yanı sıra kesilme yordamlarının, maskeleme yükünden arındırılarak yalınlaşmasını ve kısalmasını sağlar. Kesilme önceliği denetleme birimi kullanımı durumunda arabirimler kesilme istemlerini, doğrudan ana işlem birimine göndermek yerine bu birime gönderirler.
Ana işlem birimine, arabirimler adına kesilme istem imi gönderme yükümlülüğü ise öncelik denetleme birimindedir. Ana işlem biriminin kurduğu istem alındı imi de, arabirimlere dağılacağına salt bu birime gönderilir. Alındı iminin gelmesiyle öncelik denetleme birimi, o anda en öncelikli birimin yordam başlangıç adresini (ya da parametresini) veri yolu üzerinden ana işlem birimine ulaştırır. Kesilme önceliği denetleme biriminin bir bilgisayar sistemi içindeki konumu aşağıda gösterilmiştir.
Kesilme Önceliği Denetleme Biriminin Konumu
Kesilme önceliği denetleme birimine ilişkin örnek bir yapı aşağıda verilmiştir. Bu yapı, öncelikle Kesilme İstem Yazmacı (KİY) ve Süren Hizmet Yazmacı (SHY) olarak adlandırılan iki yazmacı içerir. Bu yazmaçlar öncelik denetleme biriminin içerdiği kesilme istem girişi kadar bitten oluşurlar. Kesilme İstem Yazmacının bitleri arabirimlerden gelen istemlerle kurulmakta ve arabirim istemini çektiğinde sıfırlanmaktadır. Süren Hizmet Yazmacının bitleri ise kesilme yordamına sapılan (kesilme hizmeti süren) arabirimler için kurulmaktadır.
Öncelik denetleme biriminin içerdiği tüm kesilme girişlerinin bir önceliği bulunmaktadır. Örneğin 8 girişli bir denetleme birimi için, sıfırıncı girişin en öncelikli, yedinci girişin de en düşük öncelikli giriş olduğu bir durumda, üçüncü girişten bir istem geldiğinde, Kesilme İstem Yazmacının üçüncü biti kurulur ve ana işlem birimine kesilme istemi yollanır. Bu istemle ilgili alındı geldiğinde üçüncü girişe bağlı arabirimin kesilme yordamı başlangıç adres bilgisi (ya da parametresi) ana işlem birimine ulaştırılırken Süren Hizmet Yazmacının üçüncü biti kurulur. Bu aşamadan sonra, üçüncü girişten daha öncelikli olan ikinci girişten kesilme istemi gelirse üçüncü giriş için yerine getirilen süreç, bu kez ikinci giriş için aynı biçimde yinelenir. Bu yolla üçüncü girişe ilişkin kesilme yordamı kesilerek ikinci girişe ilişkin kesilme yordamına sapma sağlanmış olur.
Kesilme Önceliği Denetleme Birimi Örneği
Üçüncü girişle ilgili kesilme yordamı işletilirken, bu kez ikinci giriş yerine dördüncü girişten kesilme isteminin geldiği düşünülecek olursa, öncelik denetleme birimi bu istemle ilgili hiçbir girişimde bulunmaz. Zira öncelikler gereği dördüncü girişe bağlı arabirimin, işletilmekte olan üçüncü girişle ilgili kesilme yordamını kesme hakkı yoktur. Bu istemin göz önüne alınabilmesi, ancak üçüncü girişle ilgili yordamın sonlanıp Süren Hizmet Yazmacının üçüncü bitinin sıfırlanmasından sonra olanaklı olacaktır.
Yukarıda verilen açıklamalardan anlaşılacağı gibi, kesilme önceliği denetleme biriminin kullanılması ile kesilme yordamlarının, öncelik gözetim işlemlerini ele almalarına gerek kalmaz. Kesilme yordamları, arabirimler düzeyindeki yerel maskeleri açıp kapayan kesimlerinden arınarak yalınlaşırlar. Ancak kesilme yordamlarından geri dönülmeden, Süren Hizmet Yazmacının ilgili bitinin sıfırlanması, bu yordamların içinde, geri dönüş komutundan önce gerçekleştirilmesi gereken bir yükümlülük olarak ortaya çıkar. Kesilme önceliği denetleme biriminin kullanılması durumunda kesilme yordamlarının genel görünümü aşağıdaki göreli yalın biçime dönüşür.
kesilme-yordamı-i:
- aib yazmaçlarının yığıta saklanması;
- aib'nin kesilmelere açılması;
- Hizmet yordamını çağırma;
- aib'nin kesilmelere kapatılması;
- KesilmeÖnceliği denetleme biriminin i'inci bitinin sıfırlanması;
- aib yazmaçlarının yığıttaki içeriklerle günlenmesi;
- kesilen yordama geri dönüş
Kesilme Önceliği Denetleme Birimini Kullanan Yordamının Yapısı
Kesilme istemlerini öncelik sırasında işleme koyan kesilme önceliği denetleme birimi, bu işlevi nedeniyle yardımcı bir işleyici olarak düşünülebilir. Ancak bu birim, sistem programları yönünden diğer arabirimlerden farklı davranılan bir birim olarak görülmez ve diğer arabirimler gibi, giriş/çıkış adres evreni içerisinde giriş/çıkış kapılarından oluşan bir bütün olarak düşünülür ve programlanır. Bu bağlamda, kesilme önceliği denetleme birimi; yerine getirebildiği işlevler arasında seçim yapılmasına olanak veren güdüm yazmaçları, kesilme girişleriyle ilgili yordam başlangıç adres yazmaçları, giriş önceliklerini belirlemeye yarayan öncelik sırası yazmacı gibi programlanır yazmaçlar içerir. İleride, 80X86 türü işleyicilerin kesilme düzeneği açıklandıktan sonra bu düzenekle uyumlu bir kesilme önceliği denetleme birimi örneğine yer verilecektir.
Şimdiye kadar açıklanan kesimde, ana işlem birimine, salt diğer sistem birleşenlerinden ulaşan kesilme uyarılarından ve bu uyarıların ortaya çıkması durumunda yerine getirilen işlemlerden söz edilmiştir. Ancak kesilme düzeneği çerçevesinde, ana işlem birimini uyarabilen birimler ana işlem biriminin dışında yer alan birimlerle sınırlı değildir. Kesilme uyarıları:
- İç kesilme uyarıları ve
- Dış kesilme uyarıları
olarak iki sınıfa ayrılır.
Dış kesilme uyarıları, şimdiye kadar açıklanan, ana işlem birimi dışında yer alan arabirimler, yardımcı işleyiciler gibi sistem birleşenlerinin ürettiği kesilme uyarılarıdır.
İç kesilme uyarıları ise ana işlem birimi içinden denetim birimine ulaşan uyarılardır. Bir sayıyı sıfıra bölme gibi hatalı bir durum ortaya çıktığında ya da görüntü bellek düzeneği kapsamında açıklanacak, bellekte bulunmayan bir sayfaya erişim sözkonusu olduğunda, aritmetik-mantık birimi, adres dönüştürme birimi gibi ana işlem birimi birleşenlerince denetim birimine yollanan uyarılar iç kesilme uyarılarına örnek oluştururlar. Bu uyarılar aracılığıyla ana işlem birimi, işletmekte olduğu programı keserek sıfıra bölme hata uyarı yordamı, bellek yönetim yordamı gibi sistem yordamlarının işletimine geçer.
Kesilme düzeneği açıklanırken, dış kesilme uyarılarının dış ortamdan denetim birimine doğrudan bağlanmadığı; "ve" türü mantıksal geçitler üzerinden, kesilme maskesi olarak adlandırılan program durum yazmacı bitleriyle birleşerek bağlandığı belirtilmişti. Ancak kimi dış kesilme imleri denetim birimine herhangi bir maske düzeneğinden geçmeden bağlanırlar. Bu uyarılar, oluştukları anda denetim birimince algılanarak işleme konurlar. Bu bağlamda kesilme uyarıları:
- Engellenir kesilme uyarıları
- Engellenemez kesilme uyarıları
olarak sınıflandırılırlar.
Engellenemez kesilme uyarıları, ortaya çıktığı anda önlem alınmasını gerektiren, çok acil ve ertelenemez istemlere ilişkin uyarıları oluştururlar. İşleyicilerin büyük bir çoğunluğunda, engellenir uyarıların bağlandığı kesilme girişinin yanı sıra, bir de engellenemez tür uyarıların bağlandığı kesilme girişi bulunur. Bilgisayar sistemini besleyen elektrik şebekesindeki kesintilerde, bu durumu algılayan güç kaynağından gelen kesilme uyarısı, engellenemez kesilme uyarısına örnek verilebilen bir uyarıdır. Bu uyarının gelmesiyle, geriye kalan birkaç saniye içinde, önemli kütüklerin kapatılması gibi, sistem yeniden işletime açıldığında işletim bütünlüğünün korunmasını sağlayacak kimi acil önlemlerin işleme konması gerçekleştirilir. Herhangi bir maskeleme düzeneğinden geçmeden denetim birimine ulaştıklarından iç kesilme uyarıları da engellenemez kesilme uyarıları olarak düşünülürler.
Kesilme uyarıları, ana işlem biriminin, kesilme yordamı olarak adlandırılan özel bir yordamın işletimine geçmesini sağlarlar. İşleyicilerin makina komutları arasında, kesilme yordamlarına sapmada yararlanılan donanımsal düzeneği program içinden kullanmaya olanak veren komutlara da yer verilir. Altyordam çağırma komutlarına benzer bu komutlar yazılım kesilme komutları olarak bilinirler. Bu bağlamda kesilmeler bir de:
- Donanım kesilmeleri
- Yazılım kesilmeleri
olmak üzere ikiye ayrılır.
Dış uyarıların algılanmasıyla başlatılan kesilme yordamına sapma süreci, bu komutlarla komut uygula evresinde gerçekleştirilir. Sapılacak kesilme yordam başlangıç adresi, donanım kesilmelerinde arabirimce sağlanırken yazılım kesilmelerinde komut işleneni olarak yer alır.
Yazılım kesilme komutları, genellikle ayrıcalıklı komutları oluştururlar. Ayrıcalıklı komutlar sıradan kullanıcıların kullanamadığı, sistem yazılımları üzerinde günleme yapma hakkı verilen ve ayrıcalıklı kullanıcılar olarak da bilinen sistem programcılarına açık komutlardır. Ayrıcalıklı kullanıcı ve ayrıcalıklı komut kavramlarına, Koruma ve Güvenlik başlığı altında geri dönülecektir. Yazılım kesilmesi komutları, aynı zamanda, Giriş bölümünde açıklanan sistem çağrı düzeneğini gerçekleştirmede yararlanılan sistem altyapısını da oluştururlar.
80X86 türü işleyicilerde iki kesilme girişi bulunur. Bunlar INTR ve NMI kısaltmalarıyla anılan girişlerdir.
INTR (interrupt) girişi engellenir kesilme imlerinin bağlandığı varolan biricik kesilme girişidir.
NMI (non-maskable interrupt) ise engellenemez kesilme girişidir.
INTR girişine bağlı kesilme istem imleri PSW adlı program durum yazmacının IF (interrupt flag) adlı bitiyle maskelenerek denetim birimine ulaşırlar. Bu bit, sti (set interrupt flag) ve cli (clear interrupt flag) makina komutlarıyla kurulup sıfırlanır. Kesilme girişleri, denetim birimince, komut uygula evresinin son periyodunda sınanır. IF biti kurulu iken, bu son periyot süresince INTR kesilme girişinde kesilme istem imi bulunursa, izleyen komutun algetir evresi yerine kesilme yordamına sapma süreci başlatılır. Bu süreç içinde INTA (interrupt acknowledge) adlı alındı imi aracılığıyla, kesilme imini üreten arabirimden, sapılacak kesilme yordamı başlangıç adresini belirlemeye yarayacak bir baytlık tür (type) bilgisi okunur.
80X86 türü İşleyicilerde Kesilme Düzeneği
80X86 türü işleyicilerde kesilme yordamı başlangıç adresini belirlemede, az önce açıklanan yöntemlerin birlikte kullanıldığı karma bir yöntem uygulanır. INTA imi aracılığıyla, arabirimden okunan tür bilgisi (N), 4 ile çarpılarak elde edilen ana bellek adresinden kesilme yordamı başlangıç adresinin (IP'nin), bu değere 2 ekleyerek elde edilen adresten de, bu yordamın kesim (CS) başlangıç adresinin elde edileceği varsayılır.
Bu durumda, her tür değeri için 2 bayt kesim (CS), 2 bayt da kesim içi göreli adres (IP) değerini tutmak üzere ana bellekte 4 baytlık dolaylı adresleme konumu bulunur. Ana belleğin sıfırdan 3FF adresine kadar olan 1 KB'lık kesimi, 256 değişik türe ilişkin 4'er baytlık kesilme vektörlerine ayrılır. Kesilme vektörlerinden kimileri (8086 da ilk 5 tanesi, 80486 da ilk 32 tanesi gibi) engellenemez kesilme girişinin, iç kesilmelerin ya da INT, INTO gibi özel yazılım kesilmelerinin kullanımına ayrılmıştır. Geriye kalan vektörler, INTR girişinden gelen kesilme istemleriyle ya da int N komutlarıyla ilgili yordamlara sapmada kullanılır.
80X86 türü İşleyicilerde Kesilme Vektörü
80X86 türü işleyicilere INTR girişinden kesilme istemi geldiğinde:
• İstemi üreten birimden, INTA imi aracılığıyla tür bilgisi (N) okunur.
• PSW,IP yazmacları, yığıt göstergesinin (SS:SP'nin) gösterdiği yere (yığıta) saklanır:
(SP)<-- (SP)-2
((SP)+1:(SP)) <-- (PSW)
(SP)<-- (SP)-2
((SP)+1:(SP)) <-- (CS)
(SP)<-- (SP)-2
((SP)+1:(SP)) <-- (IP)
• IF genel kesilme maske biti sıfırlanır.
• IP yazmacı (N*4)adresindeki içerik ile günlenir:
(IP) <-- (N*4)
• CS/SELECTOR yazmacı (N*4+2)adresindeki içerik ile günlenir:
(CS <-- (N*4+2)
• Yeni bir komut işletim döngüsü başlatılır.
int N türü yazılım kesilmesi komutları işletilirken de, birinci adım dışında aynı işlem adımları gerçekleştirilir. N değeri komut içi işlenenden elde edilir. NMI girişinden bir istem geldiğinde ise, yine birinci adımın dışında tüm adımlar, bu kez N=2 için gerçekleştirilir.
80X86 türü işleyicilerde kesilme yordamından iret adlı komutla geri dönülür. iret komutunun işletimi aşağıdaki adımlardan oluşur:
(IP)<-- ((SP)+1:(SP))
(SP)<-- (SP)+2
(CS)<-- ((SP)+1:(SP))
(SP)<-- (SP)+2
(PSW)<--((SP)+1:(SP))
(SP)<-- (SP)+2
Kesilme vektöründe yer alan ve hem 8086 hem de 80386 türü işleyicilere ortak ilk beş vektörün anlamları aşağıda verilmiştir:
- Sıfıra bölme iç kesilmesi, DIV ya da IDIV komutları işletilirken elde edilen bölüm değerinin taşmaya neden olması durumunda, aritmetik-mantık birimi tarafından üretilmektedir. 8086 türü işleyicilerde bu hatalı durumu ele alacak yordamın kesim yazmaç (CS) içeriğinin 0ıncı (16 bitlik) sözcükte; program sayaç içeriğinin ise 2 nci sözcükte yer alması gerekmektedir. 80386 türü işleyiciler (real mode) için ise sapılacak 32 bitlik yordam başlangıç adresini oluşturan, 16şar bitlik selector ve offset adlı birleşenlerin aynı konumlarda bulunacağı varsayılmaktadır.
- Program durum yazmacı içinde bulunan TF (Trap Flag) adlı bitin kurulu olması durumunda, her makina komutunun sonunda adım adım işletim iç kesilmesi oluşturulup 4 ve 6ncı sözcüklerde yer alan adres birleşenlerinin gösterdiği yordama sapma sağlanır. Program geliştirme ve sınama amacıyla kullanılan adım adım işletim sırasında sapılan bu yordam içinde önemli yazmaç içeriklerinin görüntülenmesi gerçekleştirilerek program akışının izlenmesine ve varsa hataların giderilmesine yardımcı olmak amaçlanır.
- 80X86 türü işleyicilerde program geliştirme ve sınama amacıyla kullanılabilen tek olanak adım adım işletim değildir. Bir baytlık int komutu da bu amaçla öngörülmüştür. Bu komut program içinde, sınama amacıyla işletimin kesilmesi istenen yerlere yerleştirilir. Bu yolla değişik noktalarda denetimin 8 ve 10 uncu sözcüklerde başlangıç adresi bulunan yordama devredilmesi sağlanır. Bu yordam içinde de, adım adım işletim kesilme yordamında olduğu gibi kimi yazmaç ve göstergelerin görüntülenmesi sağlanarak program akışını izleme olanağı yaratılır. Bunun int N türü komutlarla da gerçekleştirilmesi, doğal olarak olanaklıdır. Ancak tek bayt uzunluğunda olması bu komut için önemli bir üstünlüktür.
- Aritmetiksel işlemlerde taşma olarak tanımlanan, işlem sonucunu ifade etmede sözcük bit sayısının yetersiz kaldığı durumlarla sıkça karşılaşılır. Herhangi bir aritmetiksel işlem komutunun hemen sonrasına INTO (interrupt on overflow) olarak adlandırılan özel bir yazılım kesilme komutu eklenerek taşma durumunda özel bir yordama sapma sağlanır. Bu yordamla ilgili başlangıç adresi bilgilerinin 12 ve 14 üncü bellek sözcüklerinde bulunması gerekir.
into Komutunun Kullanımı
Daha önce, seçmeli giriş/çıkış programlama yöntemiyle ele alınan, örnek terminal sürücülerinden, ctrl-z damgasına rastlanana değin girilen damgaların ana bellekte dizgi-i adlı ilgili yastık alanlarına aktarılması örneği, kesilmeli giriş/çıkış programlama bağlamında yeniden ele alınmıştır. Bu yolla hem kesilme düzeneğinin giriş/çıkışların programlanmasında kullanımı örneklenmiş hem de seçmeli giriş/çıkış programlama yöntemiyle kesilmeli giriş/çıkış programlama yöntemini karşılaştırma olanağı sağlanmıştır.
Sözkonusu örnek kapsamında, diğer birleşenlerin yanı sıra örnek terminal birimlerinden üç adedinin yer aldığı 80X86 tabanlı bir bilgisayar sisteminde, terminal klavyelerinden girilen damgaların, ctrl-z damgasına rastlanana değin ilgili ekrandan görüntülenmesi ve dizgi-i adlı ilgili bellek alanına yazılması amaçlanmaktadır.
Terminal arabirimleri üzerindeki yazmaç ve yastıkların sistem giriş/çıkış adres evreni içindeki adreslerinin, (i)inci terminal düzeyinde:
- Güdüm Yazmacı için: A0+5xi (i={0,2})
- Durum Yazmacı için: A0+5xi+1
- Giriş Yastığı için: A0+5xi+2
- Çıkış Yastığı için: A0+5xi+3
- Kesilme Kimlik Yazmacı için A0+5xi+4 olduğu varsayılmıştır.
Terminallerin, bir önceki örnekte olduğu gibi 9600bps hızında, bir stop bit, çift eşlik sayısı ile çalışacağı öngörülmüştür. Bunun yanısıra, terminal arabirimlerinin klavyelerinden herhangi bir tuşa basılması durumunda kurulan "almaya hazır" biti üzerinden kesilme istemi ürettikleri; almaya hazır (RR) bitinin, alma işlem izin (RE) bitiyle maskelenerek üç girişli bir "ya da" geçiti üzerinden işleyiciye ulaştığı varsayılmıştır.
Kesilme alındı (INTA) iminin arabirimlere zincirleme yöntemle bağlandığı durumda örnek terminal arabirim görünümü ile örneğe taban oluşturan sistem donanım ilke çizimi, sırayla aşağıda verilmiştir. İlk çizimde verilen arabirim görünümü konunun devamında bulunan programlama örneğinde verilen çizimle hemen hemen aynıdır. Açıklanan örneğin izlenmesini kolaylaştırmak amacıyla yinelenmiştir. Ancak eski çizimde gösterilmeyen kesilme kimlik yazmacı yeni çizime eklenmiştir.
Anımsanacağı üzere INTA kesilme alındı iminin arabirimlere zincirleme yöntemle bağlandığı durumlarda, kesilme kimliği (type N), işleyiciye arabirim tarafından sağlanmak zorundadır. Bu kimlikler: 0ıncı arabirim için F8H, 1inci arabirim için F9H, 2nci arabirim için FAH olacaktır.

Örnek (0 ıncı) Terminal Arabirimi Görünümü

Kesilmeli G/Ç Programlama Örneği-1 için Sistem İlke Çizimi
Kesilmeli giriş/çıkış programlama yönteminde, ana belleğin ilk 1KBaytında yer alan kesilme vektörü ile arabirim kesilme kimlik yazmaç içeriklerinin günlenmesi, arabirimlerin işlem izin bitlerinin kurulması gibi önbelirleme işlemlerinden sonra, ana işlem birimi, seçmeli giriş/çıkış programlama yönteminin tersine başka programların işletimine geçer. Bu programların işletimi sırasında, arabirimlerden gelen her kesilme istemi için ilgili kesilme yordamına sapılır ve giriş/çıkış işlemleri diğer programlarla koşut olarak yürütülür.
Aşağıda verilen örnek programda, önbelirlemelerden sonra işletimine geçileceği varsayılan diğer programlar dön: jmp dön sonsuz döngü komutu ile benzetilmiştir. Doğal olarak sistem programları arasında bu tür komutların bulunması söz konusu olmayacaktır.
Ana bellek kesilme vektörünün günlenmesi, arabirim kesilme kimlik yazmaç içeriklerinin yazılması gibi kesilme düzeneğinin sağlıklı çalışması açısından kritik olan önbelirleme işlemleri ana işlem biriminin kesilmelere kapalı olduğu bir evrede yapılır. Bu nedenle örnek programın hemen başında yer alan bu kesimler cli, sti komutlarıyla ayraç arasına alınmıştır.

Üç Terminal için Kesilmeli Giriş/Çıkış Programlama Örneği-1
Sistemde yer alan her terminal birimi için bir kesilme yordamı öngörülmüştür. Bunlar t-kes-0, t-kes-1 ve t-kes-2 olarak adlandırılmıştır.
Kesilme yordamlarının her biri: bağlam saklama, yerel maskelerin sıfırlanması, hizmet, yerel maskelerin ve bağlamın eski değerlerle günlenmesi kesimlerinden oluşmaktadır. Bu kesimlerden hizmet olarak adlandırılanı, birimler arası öncelikleri gözetmek üzere kesilmelere açık olarak çalıştırılmaktadır.
Terminal arabirimlerinin zincirleme bağlantı içerisindeki konumları gereğince, sıfırıncı terminal en öncelikli, ikinci terminal ise son öncelikli birimi oluşturmaktadır. t-kes-0 adlı sıfırıncı terminalle ilgili kesilme yordamı içinde, bu birimin en öncelikli birim olması dolayısıyla sistem kesilmelere açılmamış ve bu nedenle yerel maske sıfırlama ve günleme işlemlerine de yer verilmemiştir. En düşük öncelikli birim olan 2 numaralı terminal birimine ilişkin kesilme yordamında, yerel maskeleme bağlamında 0 ve 1 numaralı terminallerin kesilme isteminde bulunabilmelerine izin verilmiş, bu amaçla salt ikinci arabirimin maskelenmesiyle yetinilmiştir. 1 numaralı terminal kesilme yordamı içinde, 1 ve 2 numaralı terminal arabirimleri maskelenerek, bu yordamdan geri dönülene değin 2 numaralı arabirimin kesilme üretmesinin engellenmesi amaçlanmıştır. 1 ve 2 numaralı arabirim kesilme yordamlarında, kesilme maskelerinin yukarıda açıklandığı biçimde kurulmasından sonra sistem kesilmelere hizmet kesimi öncesi açılmış ve bu yolla öncelikleri gözeten bir hizmet üretimi gerçekleştirilebilmiştir.
Hizmet kesimi içinde önce hata denetimi yapılmıştır. Bu denetim kapsamında arabirim durum yazmacı eşlik ve taşma hata bitleri sınanmıştır. Hata denetimini gerçekleştiren hata sınama adlı altyordam, hatalı durumu dl yazmacı içinde 0 döndürerek belirtmektedir. Bu yordamdan dönüşte, dl yazmacının sıfır içerdiği durumlarda kesilme yordamından herhangi bir işlem yapılmadan dönülmekte, bu yolla herhangi bir geri bildirim alamayan kullanıcının girdiği son damgayı yeniden girmeye zorlanması amaçlanmaktadır.
Hatalı durumların dışında, her terminal için özel, t-hizmet-0, t-hizmet-1 ve t-hizmet-2 adlı altyordamlar çağrılmaktadır. Hizmet altyordamları içinde hatasız okunan damganın ilgili dizgi alanına aktarılma ve damga yankılama işlemleri gerçekleştirilmektedir. Okunan damganın ctrl-z damgası olması durumunda ilgili arabirim, alma izni kapatılarak işlem dışı bırakılmaktadır.
Verilen örnekteki t-hizmet-0, t-hizmet-1 ve t-hizmet-2 adlı altyordamların her birinde, aynı işlemler değişik arabirimler için aynı biçimde gerçekleştirilmektedir. Bu yordamlar içinde değişen sadece giriş/çıkış kapı adresleridir. Bu durumda doğal olarak, üç ayrı yordam yerine tüm terminal birimleri için ortak bir hizmet yordamı öngörmek ve değişen kapı adreslerini bu yordama parametre olarak aktarmak akla gelebilir. Ancak verilen örneklerde, açıklanan yöntem ve düzeneklerin kolayca algılanabilmesi için programların okunurluğu ön plana alınmış ve hizmet yordamlarının ayrı ayrı yazılması tercih edilmiştir.
Kesilme yordamları içinde, hizmet kesimlerinin kesilmelere açık olarak işletilmesi arabirimler arası önceliklerin gözetilmesini olanaklı kılar. Ancak bu olanak sözkonusu kesimin başında ve sonunda yerel maskelerin sıfırlanma ve kurulma işlemlerinin ele alınma zorunluluğunu doğurur. Arabirimler arası önceliklerin yazılım yoluyla ele alınması, özellikle arabirim sayısının çok olduğu sistemlerde kesilme yordamlarının işletim sürelerinin artmasına ve sistem başarımının düşmesine neden olur. Bu sakıncanın yanı sıra maskeleme işlevlerinin çok sayıda kesilme yordamının içine serpiştirilmiş olması sistem yazılımlarının karmaşıklaşması ve okunurluklarının olumsuz yönde etkilenmesi sonucunu da doğurur.
Bilindiği gibi kesilme önceliği denetleme birimi adlı özel donanım, arabirimler arası önceliklerin donanım yoluyla ele alınmasına olanak sağlayarak kesilme yordamlarını bu işlevi gerçekleştirme yükünden kurtarır. Aşağıdaki çizimde, terminal arabirimlerinin kesilme istemlerini doğrudan işleyiciye göndermek yerine, örnek bir kesilme önceliği denetleme birimine gönderdikleri sistemin ilke çizimi yer almıştır.

Kesilmeli G/Ç Programlama Örneği-2 için Sistem İlke Çizimi
Kesilme Önceliği Denetleme Birimi Örneği
Söz konusu öncelik denetleme biriminin, Yukarıda verilen öncelik denetleme biriminde olduğu üzere, 8 kesilme istem girişi ile birer baytlık bir kesilme istem yazmacı, bir süren hizmet yazmacı ve bir kesilme kimliği yazmacı bulunduğu düşünülmüştür. Bu birimin programlanır (okunur-yazılır) tek yazmacının süren hizmet yazmacı olduğu ve bu yazmacın giriş/çıkış evreni içinde, (süren-hiz sözcüğüyle simgelenen) adresinin B0H olduğu varsayılmıştır.
Kesilme önceliği denetleme birimi, adına kesilme istediği arabirimin kesilme kimliğini bir baytlık kesilme kimliği yazmacının en küçük ağırlıklı son üç biti üzerinden kodlamaktadır. Kodlamada yararlanılmayan 5 bit, 1 değerini taşımaktadır. Bu bağlamda, INTA imi alındığında sıfırıncı istem girişine bağlı arabirim için F8H, birinci istem girişine bağlı arabirim için F9H, ikinci istem girişine bağlı arabirim için ise FAH değerleri, kesilme kimliği olarak işleyiciye yollanmaktadır.
Bilindiği üzere, kesilme önceliği denetleme biriminin kullanılması sayesinde kesilme yordamları maske sıfırlama ve maske günleme amacını taşıyan kesimlerden arınmaktadır. Ancak bu yordamlardan geri dönüşten hemen önce, kesilme yordamına sapılırken kurulan, ilgili süren hizmet yazmaç bitinin sıfırlanması gerekmektedir. Kesilme önceliği denetleme biriminin kullanıldığı durumda, ctrl-z damgasına rastlanana değin üç değişik terminal biriminden girilen damgaları ilgili dizgi alanına aktaran sistem programı, önceden aktardığımız Üç Terminal İçin Kesilmeli G/Ç Programlama Örneği (1)'de verilenle, t-kes-0, t-kes-1, t-kes-2 adlı kesilme yordamlarının dışında aynıdır.
Bu yordamlardan, yukarıda belirtildiği gibi yerel maskeleri günleyen kesimler çıkarılmış ancak iret komutlarından hemen önce, süren hizmet yazmacı bitlerini sıfırlayan komutlar eklenmiştir. Bu nedenle aşağıdaki program örneğinde, t-kes-0, t-kes-1, t-kes-2 adlı kesilme yordamlarının yeni görünümlerinin verilmesiyle yetinilmiştir.

Kesilmeli G/Ç Prog. Örneği-2 Kesilme Yordamlarının Görünümü
Kesilme önceliklerinin gerek kesilme yordamlarının içinden yazılım yoluyla, gerekse kesilme önceliği denetleme birimi tarafından donanım yoluyla denetlendiği durumlarda kesilme yordamlarının nasıl ve hangi sırada işletime girdiği sayfada verilen çizimde örneklenmiştir. Bunun için, alma işlem izinlerinin açıldığı andan başlayarak arabirimlerin kesilme istemlerinin geliş sırası çizimde verilen zaman ekseni üzerinde gösterilmiştir.
Buna göre kesilme istemlerinden ilki 2 numaralı terminalden t0 anında gelmektedir. Bunu t1 anında 0 numaralı terminalden ve t2 anında da 1 numaralı terminalden gelen istemler izlemektedir. Zaman ekseni üzerinde 1 ve 2 numaralı kesilme yordamlarının işletimleri üç dilim üzerinden gösterilmiştir.
Bu dilimlerden ilki sti komutuna kadar olan kesilmelere kapalı kesimi, ikincisi, kesilmelere açık işletilen hizmet kesimini, üçüncüsü ise cli komutundan başlayarak iret komutuna kadar olan ve yine kesilmelere kapalı olarak işletilen son kesimi temsil etmektedir.
Kesilme Yordamlarının Önceliklerine göre İç içe İşletilmesi Örneği
Bu çizime göre 2 numaralı arabirimden gelen kesilme istemi ile, t-kes-2 adlı kesilme yordamına sapılmaktadır. Bununla ilgili hizmet kesimi işletilirken 0 numaralı arabirimin istemi ortaya çıkmaktadır. Daha öncelikli bir arabirim olması dolayısıyla t-kes-2 kesilerek t-kes-0 adlı kesilme yordamına sapılmaktadır. Bu yordam kesilmelere kapalı işletildiğinden, bu arada 1 numaralı arabirimden gelen kesilme istemi, ancak t-kes-2 adlı yordama geri dönüldükten sonra göz önüne alınabilmektedir. Zira sistemin kesilmelere açılması, t-kes-0 yordamı iret komutunun, PSW yazmacını, IF'nin kurulu olduğu eski değerle günlemesi sonucu gerçekleşmektedir.
Bir numaralı terminalden gelen kesilme istemi, t-kes-2 içinde dönülen komutun işletimi sırasında algılanabilmektedir. t-kes-2'nin bir komutu işletildikten sonra yeniden kesilerek t-kes-1'e sapılmaktadır. t-kes-1 işletildikten sonra t-kes-2'ye geri dönülmekte, bu yordam tamamlanınca da, bu işlemlerle koşut çalıştırılan programların benzetimini yapmaya yarayan bitmeyen döngü komutunun işletimine geçilmektedir.

Örnek Disket Arabirimi Görünümü
Kesilmeli giriş/çıkış programlama konusunda verilecek üçüncü örnekte, arabirim görünümü yukarıdaki çizimde verilen disket sürücü üzerinde saklanan bir öbek verinin ana belleğe aktarılması söz konusu edilecektir. Sözkonusu öbeğin 512 bayt uzunluğunda bir sektörden oluştuğu varsayılacaktır. Örnek disket arabiriminin, bir önceki örnekte açıklanan kesilme önceliği denetleme biriminin 1 numaralı girişine bağlı olduğu; RDY, SC, ZR bitleriyle simgelenen durumlarda kesilme ürettiği; arabirim düzeyinde yer alan yazmaçlardan:
Güdüm yazmacının 10H
Durum yazmacının 11H
Sektör Kimliği yazmacının 12H
İz Kimliği yazmacının 13H
Giriş/Çıkış yazmacının 15H
adreslerine atandığı varsayılacaktır. Okunacak disk öbeğinin {İZ, SEKTÖR} ikilisi ile tanımlı olduğu, ana bellekte disk-yastığı adlı yastık alanına aktarılacağı düşünülecektir.
{İZ, SEKTÖR} ikilisi ile tanımlı öbeğin ana bellekte disk-yastığı adlı yastık alanına aktarılabilmesi için:
- önce disket okuma-yazma kafası İZ'le simgelenen iz üzerine taşınacak,
- sonra da SEKTÖR'le simgelenen sektör baytlarının okuma komutu işletilecektir.
Bunun için disket arabirimi iz kimliği yazmacına İZ değeri, sektör kimliği yazmacına da SEKTÖR değeri yazılacaktır. Bu işlemin sonrasında güdüm yazmacına, okuma-yazma kafasının ilgili ize götürülmesini sağlayan 0110XXX1 güdüm değeri yazılacaktır.
Okuma-yazma kafası ilgili ize ulaştığında arabirim, SC durum bitine bağlı olarak kesilme önceliği denetleme biriminin 1 numaralı girişine kesilme istemi gönderecektir. Bu istemle ilgili kesilme yordamı içinde disket arabirimi güdüm yazmacına, bu kez 1010XXX1 değeri yazılarak SEKTÖR baytlarının okunması başlatılacaktır.
SEKTÖR baytları giriş/çıkış yastığında okunmaya hazır oldukça, bu kez RDY biti üzerinden, kesilme önceliği denetleme biriminin 1 numaralı girişine kesilme istemleri gönderilecek ve giriş/çıkış yastık içeriklerinin, ardarda disk-yastığı adlı alana aktarılması sağlanacaktır. Bu işlemlerle ilgili örnek sistem programı Disket Birimi Kesilmeli G/Ç Programlama Örneği'nde, ilgili sistem ilke çizimi de Disket Birimi Kesilmeli G/Ç Programlama Örneği Sistem İlke Çizimi'nde verilmiştir. Önceden de verilmiş olan Disket Arabirimi Görünümü izleme kolaylığı açısından aşağıda yinelenmiştir.

Örnek Disket Arabirimi Görünümü
Aşağıda verilen program önbelirleme ve disk-kes adlı kesilme yordamından oluşmaktadır. Önbelirlemeler kesiminde, kesim yazmaçları ve kesilme vektörü günleme işlemleri tamamlandıktan sonra disket arabirimi iz ve sektör kimliği yazmaç içerikleri {İZ,SEKTÖR} ikilisi ile günlenip okuma-yazma kafasının İZ'e taşınma güdümü çalıştırılmaktadır. Bunun sonrasında sistem kesilmelere açılarak 512 baytlık disk sektörünün(öbeğinin), kesilmeler yoluyla, bayt bayt, ana belleğe aktarılması sağlanmaktadır.
disk-kes adlı kesilme yordamına iki durumda sapılmaktadır. Bu durumlardan ilki, SC bitiyle simgelenen, disket okuma-yazma kafasının iz kimliği yazmacı içinde verilen ize ulaşması durumudur. İkinci durum ise RDY bitinin kurulması durumudur.
SC biti okuma-yazma kafasının ilgili ize taşınması için çalıştırılan izegit disk güdümü sonrasında bir kez kurulurken RDY biti, öbeği oluşturan baytların her biri için, 512 kez kurulacaktır. Bu nedenle bir öbeğin sürücüden ana belleğe aktarımı için disk-kes yordamı toplam 513 kez çağrılacaktır.
SC biti okuma-yazma kafasının ilgili ize taşınması için çalıştırılan disk güdümünün gerçekleşmesi sonucu kurulacak, bunun üreteceği kesilme istemi ile sapılan kesilme yordamında, bu durum sınanarak okuma güdüm kodunun arabirime yazılması gerçekleşecektir. Arabirimin çalışma ilkesi gereği SC biti, arabirime yeni bir güdüm değeri yazılana değin kurulu kalacağından okumayabaşla güdümünün arabirime yazılması ile sıfırlanacaktır. Buna dayalı olarak, disk-kes yordamına ikinci sapıştan başlayarak hep yineoku etiketi ile başlayan kesim işletilecektir.

Disket Birimi Kesilmeli G/Ç Programlama Örneği
Kesilmeli programlama yönteminde, arabirimlerin rasgele anlarda ortaya çıkan hizmet istemleri, kesilme yordamları aracılığıyla ele alınır. Arabirimler çoğu kez arabirim giriş/çıkış yastıkları ile ana bellek arası aktarım gereksinimi nedeniyle kesilme istemi üretirler. Arabirim ile ana bellek arasında veri aktarımı, kesilme yordamları içindeki bellek erişim ve giriş/çıkış komutlarının işletimiyle, başka bir deyişle ana işlem birimi aracılığıyla gerçekleşir.
Özellikle, disk ve mıknatıslı şerit birimleri gibi, sürücüden arabirime verilerin öbek tabanlı olarak aktığı giriş/çıkış birimleri için arabirim ana bellek arası veri aktarımlarının, bizzat ana işlem birimi kullanılarak yapılması, bu sonuncunun kullanım verimliliğini olumsuz yönde etkiler. Bu nedenle, sistem donanımları içinde, sözkonusu bu aktarımları, gerektiğinde ana işlem birimi yerine yapacak, Doğrudan Bellek Erişim Denetleme Birimi olarak adlandırılan yardımcı işleyiciler öngörülür. Bu durumda, Doğrudan Bellek Erişim Düzeneği ve Doğrudan Bellek Erişimli Giriş/Çıkış Programlamadan söz edilir. İzleyen kesimde bu düzenek ve ilgili giriş/çıkış programlama yöntemi açıklanacaktır.
Kesilmeli programlama yönteminde, arabirimlerin rasgele anlarda ortaya çıkan hizmet istemleri, kesilme yordamları aracılığıyla ele alınır. Arabirimler çoğu kez arabirim giriş/çıkış yastıkları ile ana bellek arası aktarım gereksinimi nedeniyle kesilme istemi üretirler. Arabirim ile ana bellek arasında veri aktarımı, kesilme yordamları içindeki bellek erişim ve giriş/çıkış komutlarının işletimiyle, başka bir deyişle ana işlem birimi aracılığıyla gerçekleşir.
Özellikle, disk ve mıknatıslı şerit birimleri gibi, sürücüden arabirime verilerin öbek tabanlı olarak aktığı giriş/çıkış birimleri için arabirim ana bellek arası veri aktarımlarının, bizzat ana işlem birimi kullanılarak yapılması, bu sonuncunun kullanım verimliliğini olumsuz yönde etkiler. Bu nedenle, sistem donanımları içinde, sözkonusu bu aktarımları, gerektiğinde ana işlem birimi yerine yapacak, Doğrudan Bellek Erişim Denetleme Birimi olarak adlandırılan yardımcı işleyiciler öngörülür. Bu durumda, Doğrudan Bellek Erişim Düzeneği ve Doğrudan Bellek Erişimli Giriş/Çıkış Programlamadan söz edilir. İzleyen kesimde bu düzenek ve ilgili giriş/çıkış programlama yöntemi açıklanacaktır.
Giriş/çıkış arabirimleri ile ana bellek arasındaki veri aktarımını, ana işlem birimini dışarıda tutarak gerçekleştirmede doğrudan bellek erişim düzeneğinden yararlanılır.
Bu düzenek çerçevesinde arabirimlerden ana belleğe, ana bellekten arabirimlere veriler, doğrudan bellek erişim denetleme birimi olarak adlandırılan bir birimin yardımıyla aktarılır. Doğrudan bellek erişim denetleme birimi, birlikte çalıştığı ana işlem biriminin bellek erişimiyle ilgili işlevlerini yüklenebilen yardımcı bir işleyicidir. Doğrudan bellek erişim denetleme biriminin yer aldığı sistemlerde ana belleğe, ana işlem biriminin yanı sıra bu birimin erişimi de söz konusu olur.
Birden çok işleyicinin aynı ana bellek birimine koşut erişimi kaynak paylaşımı sorununu ortaya çıkarır. Bu sorun, çoğu kez ana işlem biriminin efendi konumunda bulunduğu, efendi-köle ilişkisi içinde çözülür. Doğrudan bellek erişim denetleme birimi ana işlem biriminin onayı olmadan ana belleğe erişemez. Ana işlem birimi donanımı içinde yer alan bu onay düzeneği, doğrudan bellek erişim düzeneğinin bir parçasıdır. Bu düzenek, ana belleğe erişmede yararlanılan ve kullanılagelen donanım modeline göre biricik olduğu varsayılan adres ve veri yollarının kullanımını düzenler. İki ayrı işleyicinin, ana belleğe, aynı anda, aynı yolları kullanarak erişmesinin mümkün olmadığı açıktır.
Doğrudan bellek erişim düzeneğinin kullanıldığı sistemlerde arabirimler, bağlı oldukları sürücülerden ana belleğe ya da ana bellekten bu sürücülere veri aktarımı söz konusu olduğunda bu aktarımla ilgili istemlerini, ana işlem birimi yerine doğrudan bellek erişim denetleme birimine yaparlar.
Aktarım istemini alan denetleme birimi, bu istemi yerine getirebilmek için, ana işlem biriminden adres ve veri yollarının kullanım hakkını ister. Bu istem ana işlem biriminin, yol kullanım istemi girişi üzerinden yapılır. Ana işlem birimi, doğrudan bellek erişim denetleme biriminin yol kullanım isteminin bağlandığı bu girişini, kesilme istemi girişlerinde olduğu gibi, komut işletiminin belirli bir periyodunda sınar.
Giriş üzerinde istemi simgeleyen bir gerilim düzeyi saptarsa adres ve veri yolları ile okuma, yazma gibi bellek denetim hatlarıyla ilişkisini keser. Bu durumu, erişim istemini yapan denetleme birimine, yol kullanım istemi alındısı çıkışını kurarak belirtir. Bu alındı ile doğrudan bellek erişim denetleme birimi, arabirim-ana bellek arasında, doğrudan gerçekleşecek aktarımın denetimini ele geçirir.
Bu aşamadan sonra denetleme birimi, kullanım hakkını elde ettiği adres yolu üstüne, aktarıma konu olan bellek sözcük adresini koyarak bir bellek erişim döngüsü başlatır. Bunun yanı sıra, adresleme süreci başlatılan ana bellek sözcüğün içeriği, aktarım isteminde bulunan arabirim giriş/çıkış yastığından sağlanacağından bu arabirime aktarım istemi alındısını yollar. Bu alındı imi ile, aktarıma konu olan verinin arabirim tarafından, ya giriş/çıkış yastığından veri yoluna (yazma) ya da veri yolundan bu yastığa(okuma) aktarılması sağlanır.
Doğrudan bellek erişim denetleme birimi, ana bellekte erişilen sözcük adreslerini, adres yazmacı olarak nitelenen, programlanır bir yazmaç içinde tutar. Aktarım işlemlerinin başında bu yazmaç ana bellek aktarım alanı başlangıç adresini içerir. Aktarılan bayt (sözcük) sayısı bir sayaçla denetlenir. Gerçekleştirilen her doğrudan bellek erişim döngüsü için adres yazmacı otomatik olarak bir artırılırken sayaç içeriği bir eksiltilir. Aktarım işlemlerinin başında ana bellek aktarım alan boyu ile günlenen sayaç içeriği sıfırlandığında bu durum, denetleme birimince, ana işlem birimini, kesilme girişleri üzerinden uyarmada kullanılır. Bu uyarı ile adres yazmacı ile sayacın yeni bir aktarım için, yeni değerlerle günlenmesi sağlanır.
Az önce açıklanan çalışma ilkesi gereğince doğrudan bellek erişim denetleme birimi, öncelikle bir adres yazmacı ile bir sayaç içermek durumundadır. Çoğu kez doğrudan bellek erişim denetleme birimleri aynı anda birden çok arabirime doğrudan bellek erişim hizmeti sunacak biçimde üretilirler. Bu tür denetleme birimlerinin birden çok aktarım istem girişi ve istem alındısı çifti bulunur.
İstem-alındı çiftleri genellikle doğrudan bellek erişim kanalı olarak adlandırılır. Bu durumda sözkonusu denetleme biriminin her bir kanal için bir adres yazmacı ve sayaç çifti bulunmak zorundadır. Adres yazmaçları ana bellekteki fiziksel adresleri tutarlar. 16 bit uzunluğundaki bir adres yazmacı 64KB'lık bir bellek kesimini adreslemede yeterli olur. 512baytlık bir tutanağın, doğrudan bellek erişim yöntemiyle aktarımının yapılabilmesi için, 9 bitlik bir sayaç yeterlidir.
Arabirimler yönünden bakıldığında, doğrudan bellek erişim amacıyla başvurulan yardımcı bir işleyici olarak görünen doğrudan bellek erişim denetleme birimi, efendi-köle ilişkisi gereği, ana işlem birimi için, arabirim benzeri, bir dizi giriş/çıkış kapısından oluşan bir birimdir. Bu giriş/çıkış kapılarının bir kesimi, yukarıda belirtilen adres yazmaçları ve sayaçlardan oluşur. Bunların yanı sıra, denetleme biriminin, ana işlem birimi tarafından denetlenen güdüm ve durum yazmaçları da bulunur. Doğrudan bellek erişim denetleme birimi, arabirimler için işleyici, ana işlem birimi için ise bir arabirim görünümündedir.

Örnek bir Doğrudan Bellek Erişim Denetleme Birimi Görünümü
Doğrudan bellek erişim denetleme birimi güdüm yazmaçları, birimin her kanalı için işlem izin, yön (okuma/yazma), sürekli/kesikli aktarım bitleri gibi güdüm bitleri içerirler. İşlem izin biti ilgili kanal üzerinden gelen istemlerin gözönüne alınıp alınmamasına olanak verir. Yön biti aktarımın arabirimden ana belleğe mi, yoksa ana bellekten arabirime doğru mu yapılacağını belirlemede kullanılır. Sürekli/kesikli aktarım biti ise aktarımın, bayt (sözcük) ya da öbek tabanlı bir aktarım olacağını belirler.
Bayt tabanlı aktarımda arabirim aktarılacak her bayt için bir aktarım istemi üretir. Denetleme birimi de her istem için bir bellek erişim döngüsü kurar ve aktarılan baytlar arasında, ana işlem birimine yolladığı yol kullanım istem imini çeker. Öbek tabanlı aktarımda ise arabirim, aktarımın başında bir kez istemde bulunur. Denetleme birimi ilgili sayaç içeriği sıfırlanana değin, öbek uzunluğu kadar bellek erişim döngüsünü, ara vermeksizin ardarda gerçekleştirir. Aktarılan baytlar arasında ana işlem birimine yollanan yol kullanım istem imi, aktarım sonlanana değin çekilmez.
Durum yazmaçları, çoğu kez kanallarla ilgili sayaçların sıfırlanması durumunda kurulan durum bitlerinden oluşur. Bu bitlerle simgelenen "sayaç sıfırlandı" durumu aynı zamanda, kesilme istem imi biçiminde kullanılmak üzere denetleme biriminin dışına taşınır. Daha önce de belirtildiği üzere, bu uyarı ile, ilgili adres yazmacı ve sayacın yeni aktarım değerleri ile günlenmesi sağlanır.
Aşağıdaki verilen zaman çizeneğinde, Doğrudan Bellek Erişim Denetleme Biriminin Konumu çiziminde verilen sistem yapısına uygun olarak sürücüden arabirime ulaşan bir baytın, bayt tabanlı aktarım modunda ana belleğe yazılması açıklanmıştır.
Bu amaçla, giriş/çıkış yastığı okunmaya hazır olduğunda arabirimce kurulan aktarım istemi iminin, doğrudan bellek erişim denetleme birimi tarafından yol istemi imine dönüştürülmesi 1 numaralı geçişle gösterilmiştir. İşleyicinin yol istemi girişini T4 numaralı periyotta sınadığı, izleyen TH adlı periyottan başlayarak yol istemi alındısını kurduğu, 2 numaralı geçişle belirtilmiştir. Zaman çizeneği üzerinde çizimi ağırlaştırmamak amacıyla açıkça belirtilmemiş olmasına karşın, TH periyotlarının hepsinde, yol istemi girişinin ana işlem birimince sınandığı, bu giriş üzerinde istem bulunması durumunda izleyen periyotta ana işlem biriminin adres, veri, oku, yaz hatları ile ilişkisini kesik tuttuğu varsayılmalıdır. Yol istemi alındısının kurulmasından başlayarak doğrudan bellek erişim denetleme biriminin bir yandan arabirime, giriş/çıkış yastık içeriğini veri yolu üstüne aktarması için aktarım istemi alındısı yolladığı; diğer yandan da, adres yolu üstüne, yazma yapılacak sözcük adresini koyduğu, 3 numaralı geçişle gösterilmiştir.
Doğrudan Bellek Erişimi ile Arabirime Veri Aktarma Zaman Çizeneği
3 numaralı geçişle başlayan bellek erişim döngüsü zaman çizeneği, doğrudan bellek erişim denetleme birimi tarafından gerçekleştirilen belleğe yazma döngüsünü simgelemektedir.
Bu döngüyle ilgili imler ile yol istemi, aktarım istemi ve aktarım istemi alındısı imleri ana işlem birimi saat iminden bağımsız olduklarından, saat periyotlarını birbirinden ayıran ve çizeneğin üst kesiminde yer alan kesikli çizgiler bu kesime kadar indirilmemiştir.
Aşağıdaki çizimde doğrudan bellek erişim denetleme biriminin bir bilgisayar sistemi içindeki konumuna ilişkin örnek bir çizim verilmiştir. Bu çizim üzerinde yer alan doğrudan bellek erişim denetleme birimi, Doğrudan Bellek Erişim Denetleme Birimi Görünümü'nde verilen 4 kanallı denetleme biriminin aynısıdır.

Doğrudan Bellek Erişim Denetleme Biriminin Konumu
Doğrudan bellek erişim denetleme birimi içeren bilgisayar sistemleri içinde ana bellek, hem ana işlem birimi hem de denetleme birimi tarafından kullanılabildiğinden, her iki birimden ayrı ayrı gelen oku ve yaz denetim imleri, ana belleğe "ya da" mantığıyla uygulanmıştır. Bunun yanı sıra doğrudan bellek erişim denetleme birimi, hem yardımcı bir işleyici hem de (ana işlem birimi için) bir arabirim gibi işlev görebildiğinden, bu birime bağlı adres yolu iki yönlü olarak gösterilmiştir.
80X86 türü işleyicilerde doğrudan bellek erişim denetleme düzeneği, HOLD ve HLDA (HoLD Acknowledge) adlı giriş ve çıkışı içerir.
HOLD girişi işleyiciye adres ve veri yolları ile bellek denetim imlerinin taşındığı hatların kullanım isteminin yapıldığı giriştir. Bu giriş işleyici tarafından sınandığında istem belirlenirse istemin belirlendiği anda gerçekleştirilmekte olan bellek erişim döngüsü tamamlanır tamamlanmaz adres ve veri yolları ile RD, WR gibi oku, yaz denetim imi çıkışları ve diğer bellek denetim im çıkışları üzerinde yüksek empedans konumuna geçilir. Çıkışlar üzerinde yüksek empedans konumuna geçiş işleyicinin bu hatları başka birimlerin kullanımına açması anlamına gelir.
Çıkışlar üzerinde yüksek empedans konumuna geçmeye koşut olarak HLDA imi kurularak, HOLD (yol kullanım) isteminde bulunan birime alındı gönderilir. HOLD girişi üzerinde istem imi varlığını sürdürdüğü sürece ilgili yol ve denetim hatları üzerinde yüksek empedans konumundan çıkılmaz. İşleyici HLDA imini kurduğu periyottan başlayarak HOLD girişini her saat periyodunda sınar. Bu giriş üzerinde HOLD isteminin sıfırlandığını belirlediği ilk periyodu izleyen periyottan başlayarak HLDA çıkışını sıfırlar. Bunu izleyen periyottan başlayarak da komut işletimini kaldığı yerden sürdürür.
Doğrudan bellek erişim denetleme düzeneğine ilişkin genel bilgiler verildikten sonra şimdi, kesilme düzeneği incelenirken örneklenen, bir öbeklik verinin örnek disket biriminden ana belleğe aktarımı, bu kez, doğrudan bellek erişim denetleme birimi ile ele alınacaktır. {İZ,SEKTÖR} ikilisiyle tanımlı 512 baytlık öbeğin, doğrudan bellek erişim yöntemiyle disket sürücüden ana belleğe aktarılabilmesi için:
- sürücü okuma-yazma kafasının ilgili İZ üstüne götürülmesi;
- öbeği oluşturan baytlar, disket arabirimi giriş/çıkış yastığında okunmaya hazır oldukça, RDY biti aracılığıyla, doğrudan bellek erişim denetleme biriminden ardarda aktarım isteminde bulunularak aktarımların yapılması;
- aktarımın tamamlanmasından sonra ilgili aktarım kanalının kapatılması
işlemlerinin gerçekleşmesi gereklidir.
Bu işlemlerden sürücü okuma-yazma kafasının İZ üstüne taşınması disket arabirimi güdüm yazmacına ilgili güdüm kodunun (01100001) yazılması ile gerçekleşir. Bu işlem, diğer önbelirleme işlemlerinin de yerine getirildiği ana program içinde başlatılır. Sürücü okuma-yazma kafasının İZ'e ulaşması, arabirim tarafından SC bitinin kurulmasını ve ilgili disk kesilme yordamına sapılmasını sağlar.
Bu yordam içinde, arabirim güdüm yazmacına ilgili güdüm kodu (10100001) yazılarak sürücüden SEKTÖR (öbek) okuma işlemi başlatılır ve RDY bitinin bağlı olduğu doğrudan bellek erişim denetleme biriminin 0 numaralı kanalı işlemlere açılarak geri dönülür. Aktarım işlemlerinin tümü, ana işlem birimi devreye girmeden (herhangi bir yordam çalıştırılmadan), doğrudan bellek erişim denetleme birimi tarafından gerçekleştirilir.
Bunun sonrasında, Z0 bitinin ürettiği istem ile sapılan kesilme yordamı içinde doğrudan bellek erişim denetleme birimi kapatılarak işlemler son bulur. Bu durumda (İZ,SEKTÖR) ikilisiyle tanımlı öbeğin, doğrudan bellek erişim düzeneği kullanılarak disket sürücüden ana belleğe aktarılmasında, her biri birer kez çağrılan iki kesilme yordamı ile ilgili ana yordam kesiminin işletimi yeterli olur.
Örnek disket arabiriminin, RDY durumunda, Doğrudan Bellek Erişim Denetleme Birimi Görünümü'nde verilen 4 kanallı doğrudan bellek erişim denetleme biriminin sıfırıncı kanalından aktarım isteminde bulunduğu; denetleme biriminin sayaç sıfırlanması (Z0) durumunda, bir önceki örnekte kullanılan kesilme önceliği denetleme biriminin sıfır numaralı; disk arabiriminin ise SC durumunda 1 numaralı girişten kesilme isteminde bulundukları varsayılacaktır. Doğrudan bellek erişim denetleme birimi öbek tabanlı aktarım moduna ve belleğe yazma yönüne kurulacaktır.
Bu bilgi ve varsayımların ışığında sistem ilke çizimi, aşağıda verildiği biçimde olacaktır. İlke çizimi verilen bu sistemle uyumlu olarak, (İZ,SEKTÖR) ikilisiyle tanımlı öbeğin, doğrudan bellek erişim düzeneği kullanılarak disket sürücüden ana belleğe aktarılmasını sağlayan örnek sistem programı Disket Birimi DBE ile G/Ç Programlama Örneği'nde yer almıştır.

DBE Denetleme Düzeneği Kullanım Örneği için Sistem İlke Çizimi
Aşağıda verilen programın, Üç terminal için Kesilmeli G/Ç Programlama Örneği-1, Kesilmeli G/Ç Prog. Örneği-2 Kesilme Yordamlarının Görünümü ve Disket Birimi Kesilmeli G/Ç Programlama Örneği'nde verilen program örnekleriyle karşılaştırılması sonucunda, kesilme önceliği denetleme birimi ile doğrudan bellek erişim denetleme biriminin, arabirim-ana bellek arası veri aktarımlarında ana işlem birimine düşen yükün hafiflemesini; bunun sonucunda sistem programlarının yalınlaşarak kısalmasını sağladıkları kolayca görülebilir.

Disket Birimi DBE ile G/Ç Programlama Örneği
Bilgisayar sistemlerinde, önceleri ana işlem birimi tarafından, yazılım yoluyla yerine getirilen işlevler, teknolojik gelişmeye paralel olarak, ana işlem birimiyle işbirliği yapan çok sayıda özel donanım tarafından yerine getirilir olmuştur. Giriş/çıkış sistem donanımlarının teknolojik gelişimi bu konuda verilebilecek en anlamlı örneği oluşturur.
Seçmeli programlama yönteminden başlayarak doğrudan bellek erişim denetleme düzeneğini kullanan yönteme gelinceğe değin izlenen çizgide, giriş/çıkış işlevlerinin yerine getirilmesinde ağırlığın nasıl ana işlem biriminden özelleşmiş donanım birimlerine kaydığını açıkça görmek olanaklıdır.
Gelişim süreci:
1. Giriş/çıkış sürücülerinin denetiminin ana işlem biriminden arabirimlere geçmesi
2. Arabirimlerin programlanmasında, kesilme uyarı düzeneği ve bu düzenekle ilgili öncelik denetleme birimlerinin kullanımı
Bu bağlamda, sözkonusu gelişim adımlarından ilki giriş/çıkış sürücülerinin denetiminin ana işlem biriminden arabirimlere geçmesidir. Bilindiği üzere giriş/çıkış arabirimleri ana işlem birimi tarafından bir dizi giriş/çıkış kapısı olarak algılanan ve güdüm yazmaçlarının programlanması yoluyla bağlı oldukları sürücüler üzerinde işlem yapılabilen birimlerdir. Giriş/çıkış sürücülerinin denetimi, tümüyle arabirimlerinin yükümlülüğündedir.
Gelişim adımlarından ikincisi arabirimlerin programlanmasında, kesilme uyarı düzeneği ve bu düzenekle ilgili öncelik denetleme birimlerinin kullanımıdır. Kesilme uyarı düzeneği ve öncelik denetleme birimi aracılığıyla, giriş/çıkış sürücüleri ile sistem arası veri aktarım işlemlerinin ana işlem birimine yüklediği yük oldukça azalmakta ve bu yolla bu birimin kullanım verimliliği önemli ölçüde artırılabilmektedir. Tek iş düzeninden çok iş düzenine geçiş kesilme düzeneği ile olanaklı olmuştur. Doğrudan bellek erişim denetleme birimlerinin kullanımı ana işlem birimini, arabirim-ana bellek arası veri aktarımlarının sorumluluğundan da kurtarmıştır. Bu yolla ana işlem birimi, giriş/çıkış işlemlerinin başında ve sonunda devreye girmekle yetinen bir birim kimliği kazanmıştır.
Ana işlem biriminin giriş/çıkış işlemlerinden tümüyle soyutlanması:
- giriş/çıkış işleyicileri ve
- giriş/çıkış kanalları
adlı birimlerin kullanılmasıyla gerçekleşir. Giriş/çıkış işleyicisinden söz edildiğinde, genelde, bilgisayar sistemi içinde kimi giriş/çıkış arabirimlerinin bağlı olduğu, yerel bir bellekle donatılmış, ana işlem birimi ile eşgüdüm içinde ancak bağımsız çalışabilen, genel amaçlı yardımcı bir işleyici akla gelir. Bir bilgisayar sisteminde terminal sürücüler, örneğin bir mikroişleyicinin denetimine bırakılmış terminal arabirimlerine bağlı olarak çalışabilirler. Terminal sürücülerinden yapılan veri girişleri, damga yankılama işlemleri gibi işlemler bu mikroişleyicinin yükümlülüğünde gerçekleşir. Yerel bellekte saklanan veriler enter, new line. return gibi adlarla anılan damgaların girilmesi ile doğrudan, mikroişleyici yerel belleğinden sistem ana belleğine aktarılır. Ana işlem birimi ancak bu aşamada uyarılır.
Giriş/çıkış kanalları, çoğu kez doğrudan bellek erişim denetleme birimlerinin gelişmiş türleridir. Giriş/çıkış kanalları ana bellekte tutulan özel giriş/çıkış programlarını, ana işlem biriminin istemi üzerine işletebilen özel amaçlı yardımcı işleyicilerdir. Ana bellekte tutulan özel giriş/çıkış programları; aktarım yapılacak sürücüler, ana bellek aktarım alanları, öncelik, hata durumunda izlenecek yol gibi tanımları içerirler. Kanallar giriş/çıkış işlemlerini, başka bir deyişle ana bellekten sürücülere, sürücülerden ana belleğe veri aktarımlarını bu programları, ana işlem biriminin istemi üzerine çalıştırarak gerçekleştirirler. Yukarıda tanımlanan giriş/çıkış işleyicileri de, yerel bellekleri ile ana bellek arasındaki veri aktarımlarında kanallardan yararlanabilirler.
Verilen bu açıklamalarda giriş/çıkış işleyicileri ile giriş/çıkış kanalları tanım olarak ayrıştırılmıştır. Ancak yardımcı işleyici nitelikleri dolayısıyla, kanallar da, giriş/çıkış işleyicileri olarak nitelenebilmektedir. Kanal, doğrudan bellek erişim denetleme biriminin gelişmiş bir biçimi olarak düşünüldüğünden daha çok, disk, mıknatıslı şerit gibi hızlı giriş/çıkış birimlerinden veri aktarımında gerekli olan bir donanım birimi olarak algılanmalıdır. Ancak günümüz bilgisayar sistemlerinde kanallar, ana bellek ile tüm giriş/çıkış birimleri arasındaki aktarımlardan sorumlu donanım katmanını oluştururlar. Giriş/çıkış işleyicileri, burada verilen tanımları itibarıyla, ana işlem biriminden sürücüye uzanan donanımsal sıradüzen içinde kanaldan sonra gelen birleşenlerdir.
Giriş/çıkış kanallarından yaygın olarak kullanılanları iki türe ayrılır. Bunlar:
- Seçici Kanal
- Çoklayıcı Kanal
türleridir.
Birden çok hızlı giriş/çıkış arabirimine hizmet verebilen seçici kanallar bu hizmeti, aynı anda tek bir arabirime sağlayabilirler. Kanal, hizmet vereceği arabirimi bunların istem durumunu sınayarak seçer. Bir arabirimle ilgili aktarım işlemleri tümüyle tamamlanmadan diğer arabirimlerin istemleri, dolayısıyla işlemleri ele alınamaz.
Çoklayıcı kanallar aynı anda birden çok arabirime hizmet verebilen kanallardır. Bu kanallar kendi içlerinde:
- bayt çoklayıcı ve
- öbek çoklayıcı
kanallar olarak ikiye ayrılır.
Bayt çoklayıcı kanal, damga tabanlı birden çok arabirime aynı anda damga aktarabilir. Damga tabanlı 3 değişik arabirime aktarılacak a1a2a3a4a5a6a7a8a9; b1b2b3b4b5b6b7b8b9; c1c2c3c4c5c6c7c8c9 damga dizgileri kanaldan a1a2b1c1a3c2b2...... sırasında, karma biçimde akabilir. Ancak her damga ilgili arabirime ya da arabirim yastık alanına anahtarlanır. Öbek çoklayıcı kanallar ise bu çalışma ilkesini öbek tabanlı arabirimlere, öbekler için uygular. Aşağıda verilen çizimde seçici ve çoklayıcı kanalların sistem içindeki yerleri ve arabirimlere göre konumları gösterilmiştir.

Giriş/Çıkış Kanal T
Bilgisayar sistemlerinin verimli kullanımı, ana işlem birimi, ana bellek ve giriş/çıkış birimleri gibi kaynakların, programlar arasında paylaşılmasını gerektirir. Ana işlem biriminin paylaşılması, programların işletimlerinin birlikte sürdürülmesi yoluyla sağlanır. Ana işlem biriminin bir programın işletimini, ileride sürdürmek üzere, bırakıp diğer bir programın işletimine geçmesi anahtarlanma olarak adlandırılır.
Ana işlem biriminin paylaşımı, bu durumda, değişik programların bu birime belirli bir sıra ile anahtarlanması yoluyla gerçekleştirilir. Programların ana işlem birimine hangi sıra ve kurallar çerçevesinde anahtarlanacağı, ana işlem biriminin yönetimi kapsamında ele alınır. Programlar işletimleri sırasında görev olarak adlandırılırlar. Ana işlem biriminin yönetimine, paylaşılan kaynak yerine, bu kaynağı paylaşan görevler yönünden bakılarak görev yönetimi de denir.
Programların, çalışabilmek için ana işlem birimine anahtarlanmaları zorunludur. Ancak bunun yanı sıra ana belleğe yüklenmeleri, işletimleri sırasında gereksinim duyacakları giriş/çıkış türü kaynakları, diğer programlarla yarışarak elde etmeleri de gerekir. Programlar, ana işlem birimi dışındaki, ana bellek, giriş/çıkış birimleri gibi kaynakları, yine ana işlem birimi aracılığıyla tüketebilirler.
Programlarının, ana belleğe yüklenebilmeleri, giriş/çıkış birimlerinden okuma-yazma yapabilmeleri, işletimleri sırasında gereksinim duyabilecekleri ek bellek alanlarını elde edebilmeleri, işletim sistemi içinde yer alan, ilgili yönetici ve sürücü görevlerin ana işlem birimine anahtarlanarak çalıştırılmaları sonucu gerçekleşebilir. Buradan, bir bilgisayar sisteminde paylaşılan kaynaklar arasında en önemli kaynağın ana işlem birimi olduğu söylenir.
İzleyen kesimde, işletim sistemlerinde ana işlem biriminin yönetiminin nasıl ele alındığı görev yönetimi adı altında incelenecektir. Bu amaçla, önce çok önemli bir kavram olarak ortaya çıkan görev kavramı açıklanacak ve örneklenecektir. Bunu izleyen kesimde görevlerin işletim aşamaları ya da bulundukları durumlar, durumlar arası geçişleri sağlayan sistem komutları ya da sistem çağrıları açıklanacaktır. Bundan sonra görev yönetimi, görev yönetiminin diğer işletim sistemi yönetim kesimleriyle ilişkileri ve görev yönetiminin gerçekleştiriminde kullanılan algoritmalar incelenecektir.
Görev bir programın işletimi sırasında aldığı addır. İşletilen her program için en az bir görev tanımlanır. Çok kullanıcılı bilgisayar sistemlerinde yer alan metin düzenleyici gibi, aynı anda birden çok kullanıcı tarafından yararlanılan programların her kullanıcı için ayrı ayrı sürdürülen her bir işletimine ayrı bir görev karşılık gelir.
Program, içerdiği komutlar yönünden biricik iken değişik kullanıcılar için, değişik veri takımları ile yapılan birden çok işletim, başka bir deyişle birden çok görev bulunabilir. Görev, program kavramına işletim boyutunu da katan daha geniş bir kavramdır. Program durgun komut dizisini tanımlarken görev bu komut dizisinin devingen işletimine karşılık gelir.
Bilindiği üzere ana işlem biriminin verimli kullanımı birden çok işin (programın), koşut işletimiyle sağlanır. Ana işlem biriminin, koşut işletimi sağlamak üzere bir işletimi bırakıp diğer bir işletime geçmesi belirli önlemler alınmadan yapılamaz. Yarım bırakılan bir işletimin, tutarlı bir biçimde, kalınan noktadan sürdürülebilmesi, işletimin bırakıldığı andaki durum bilgilerinin saklanması yoluyla sağlanır.
Bu nedenle, her görev için işletim sistemi tarafından bir veri yapısı tutulur. Bu veri yapısı, örneğin işletimin hangi komuttan başlayarak sürdürüleceği bilgisini de içeren ana işlem birimi yazmaç içeriklerini, varsa kullanılan kütüklerle ilgili (kılavuz kütük, açık kütükler gibi) kimi bilgileri içermek durumundadır. Bu yapı, görev denetim öbeği, görev iskeleti gibi adlarla anılır. İzleyen kesimde bu adlandırmalardan iskelet adlandırması kullanılacaktır.
Görev iskeleti, genelde görev kimliği başta olmak üzere, görevin program sayacı, yığıt sayacı, diğer ana işlem birimi yazmaç içeriklerini, durum, öncelik, sayışım ve bellek atama bilgilerini, işlenen kütükler ve bunlarla ilgili kimi gösterge bilgilerini tutar. Görev iskeleti, programların sırayla ana işlem birimine anahtarlanarak çalışmaları sırasında işletim bütünlüğünün korunabilmesi, başka bir deyişle bir çalışmanın diğer bir çalışmayı bozmaması için gerekli tüm bilgileri eksiksiz içermek zorundadır.
Görev İskeleti Örneği
Birden çok görevin eşanlı işletildiği bir bilgisayar sisteminde, Gi adlı görev işletilirken, Gj adlı görev, sırası gelip ana işlem birimine anahtarlanacağı zaman, önce, o anki ana işlem birimi yazmaç içerikleri, bu yazmaçlar arasında yer alan ve "görev yazmacı" olarak adlandırılan yazmacın, ana bellekte gösterdiği (işletimi kesilen) görev iskeletine saklanır.
Bunun sonrasında görev yazmacı, Gj adlı görevin iskeletini gösterecek biçimde, işletim sistemi (görev yönetici) tarafından günlenir. Ana işlem birimi yazmaçları görev yazmacının gösterdiği iskeletteki değerlerle günlenip yeni görevin işletimi başlatılır. Görev yazmacının günlenmesi durumunda, o anki ana işlem birimi yazmaç içeriklerinin, saklanması ve yeni göreve ilişkin değerlerle günlenmesi genellikle ana işlem birimi tarafından otomatik olarak (herhangi bir işletim yordamı çalıştırılmaksızın) gerçekleşir. Bu işleme "görev anahtarlama" işlemi denir.

Görevlerin Ana İşlem Birimine Anahtarlanması
Bir de "bağlam anahtarlama" işlemi vardır. Herhangi bir altyordamın çağrılması ya da kesilme yordamına sapış gibi durumlarda da, yordamlar arası işletim bütünlüğünün korunması amacıyla, görev yazmacı dışındaki ana işlem birimi yazmaçlarının bir kesiminin saklanması ve günlenmesi de sözkonusu olabilir. Bu durumda bağlam anahtarlama işleminden söz edilir.
Görev anahtarlama, bağlam anahtarlamaya göre daha geniş, dolayısıyla zaman yönünden daha pahalı bir işlemdir. Aynı görev içinde, görev anahtarlama olmaksızın, yordam çağırma, kesilme yordamına sapma gibi nedenlerle bir dizi bağlam anahtarlama işlemi gerçekleşebilir. Buradan, görev anahtarlama ve bağlam anahtarlama kavramları arasında ayrım gözetmenin zorunlu olduğu görülür.

Görev - İşletim Sistemi Etkileşimi
Görev bir programın işletimine verilen addır. Bir program, işletimi sonlanana değin değişik işletim evrelerinden geçer. Bunlar, ana işlem biriminin kullanımı yönünden kabaca çalışma ve bekleme evreleridir. Bu evrelere durum adı verilir. Buradan görevlerin, herhangi bir anda çalışır ve bekler durumlarında bulunduğu söylenir.

Yalın Görev Durum Çizeneği
Görevlerin, işletimleri sırasında bulunduğu durumlar, durum çizenekleri ile gösterilir. Durumların her biri, bu çizenekler üzerinde bir çember ile simgelenir. Görevin bir durumdan diğer bir duruma geçmesi oklar ile ifade edilir ve geçiş olarak adlandırılır. Bir durumdan diğer bir duruma geçebilmenin gerektirdiği koşul, bu geçişi temsil eden okun üstüne yazılabilir.
Görevlerin işletimleri süresince bulunabildikleri tüm durumlar ile bu durumlar arası geçişlerden oluşan çizimlere görev durum çizeneği denir. Yukarıda gösterilen görev durum çizeneğinde yer alan çalışır durumu, görevin ana işlem birimini kullanıyor olmasını, bekler durumu ise görevin ana işlem birimini yeniden kullanabilmek üzere, başlattığı bir işlemin (örneğin diskten okuma işleminin) sonlanmasını beklemesi anlamına gelmektedir.
Oluşumunu beklediği bir koşulun gerçekleşmesi, bir göreve, ana işlem birimine anahtarlanarak çalışabilir ya da ana işlem birimine anahtarlanmak üzere seçilebilir görev özelliğini kazandırır. Ana işlem birimini kullanabilir duruma gelen görevler kısaca hazır görevler olarak anılırlar. Bu durumda, bir önceki çizimde bekler olarak tanımlanan görevler, daha ayrıntılı bir biçimde bir koşulun oluşmasını bekleyen görevler ve ana işlem birimine anahtarlanmak üzere hazır bekleyen görevler olarak ayrıştırılabilirler.
Görev Durum Çizeneği
Programlar yada daha genel olarak işler, bilgisayar sistemine çalıştırılmak üzere sunulduklarında, iskeletleri çatılarak görev yada görevlere dönüştürülürler. Tanımları yapılan bu görevler hazır görev sınıfına girerler (1). Hazır görevlerden biri, Görev Yönetimi kesiminde ayrıntılı olarak açıklanacak kıstaslara dayanılarak, Görev Yönetici diye adlandırılan özel bir sistem görevi aracılığıyla ana işlem birimine anahtarlanır ve çalışır göreve dönüşür (2). Çalışmakta olan bir görev değişik nedenlerle bu özelliğini yitirebilir. Çalışırken giriş/çıkış işlemi başlatan bir görev, bu işlem tümüyle sonlanmadan işletimine devam edemeyeceğinden bekler görev durumuna geçer ve ana işlem birimini kaybeder (ana işlem birimini bırakır) (3). Bunun gibi, Birlikte Çalışan Görevler bölümünde incelenecek p, wait, down gibi adlarla anılan, semafor olarak adlandırılan özel değişkenler üzerinde işlem yapan zamanuyumlama işleçlerini çalıştıran görevler de, ana işlem birimini bırakıp bekler durumuna geçebilirler (3). Çalışmakta olan bir görev, işletiminin bitmesi durumunda ana işlem biriminin yanı sıra genelde sistem içindeki tanımını ve varlığını da yitirir (4). Görevler ana işlem birimini kendilerinden kaynaklanmayan nedenlerle de bırakmak zorunda kalabilirler. Etkileşimli işlemin uygulandığı bir bilgisayar sisteminde görevlerin ana işlem birimini belirli süreler içinde, sırayla kullanmaları istenir. Ana işlem birimine anahtarlanan bir görev, kendine ayrılan süre sona erdiğinde, yeniden hazır görev durumuna getirilir (5). Giriş/çıkış istemi, zamanuyumlama gibi nedenlerle bekler duruma geçen görevler, istemin yerine gelmesi, zamanuyumlamanın gerçekleşmesi v, signal, up gibi adlarla anılan, semafor olarak adlandırılan özel değişkenler üzerinde işlem yapan zamanuyumlama işleçlerinin çalıştırılması) gibi hallerde de yine çalışmaya hazır görev durumuna dönerler (6). Çizim 3.5'te verilen görev durum çizeneğinde yer alan durum ve geçişlerle ilgili açıklamalardan da anlaşılacağı üzere, bekler görevlerle ilgili olarak, beklemenin niteliğine göre bekler durumunun giriş/çıkış bekler, zamanuyumlama bekler gibi çok sayıda alt duruma ayrıştırılabileceği görülür. Bu ayrıştırma, gerektiğinde bilgisayar sisteminde yer alan değişik giriş/çıkış sürücülerinin, zamanuyumlama değişkenlerinin (semaforların) adları ile anılan durumlara kadar indirilebilir.
3.2.2. Ayrıntılı Görev Durum Çizeneği
Kimi görevler, işletimleri sonlanmadığı halde, önceliklerinin düşüklüğü gereği, Ana Belleğin Yönetimi adlı bölümde açıklanacağı üzere, bellekte işgal ettikleri alanları başka görevlerin program kodlarına yer açmak üzere yitirirler. Örneğin görüntü bellek yönetiminin uygulanmadığı bir sistemde, giriş/çıkış isteminde bulunarak ana işlem birimini kullanmayı sürdüremeyecek düşük öncelikli bir görev ana bellekte gereksiz yer işgal etmemesi amacıyla bellekten çıkarılır.
Bu göreve ilişkin bellekten çıkarılan alanlar, işletime devam edileceği zaman ana belleğe yeniden yüklenmek üzere diskte saklanırlar. İşletilebilmek için ana işlem biriminin yanı sıra, bir de ana bellekte yer açılmasını bekleyen bu tür görevler için de özel bir bekler durumu tanımlanabilir. Bunlara benzer ayrıntıların durum çizeneğine yansıtılması durumunda aşağıdaki çizimdeki daha ayrıntılı görev durum çizeneği elde edilir.
Çizim üzerinde Yer Bekler adıyla yer alan bu duruma görevler, çoğunlukla bekler (G/Ç, Zamanuyumlama bekler) durumlarından geçebilirler. Bellekte kendilerine yeniden yer sağlanan görevler, bu arada bekler durumları da son bulmuşsa hazır görev niteliklerini yeniden kazanırlar. Çizimde Yer Bekler durumundan hazır görev durumuna geçiş belirtilmiş ancak bu duruma gelişi simgeleyen geçişler, çizeneği karmaşıklaştırmamak için gösterilmemiştir.

Ayrıntılı Görev Durum Çizeneği
Görevlerin işletimleri boyunca bulunabildikleri evreleri belirtmek için kullanılan durum çizeneği güçlü bir gösterim yöntemidir. Ancak varolan tek gösterim yöntemi değildir. Görevler, işletimleri sonlanana değin ana işlem birimi, ana bellek ve giriş/çıkış birimlerinden oluşan donanımsal kaynakları diğer görevlerle paylaşmak zorundadırlar. Bir bilgisayar sisteminde yer alan kaynak sayısı işletilen görev sayısından çok daha az olduğundan görevler bu kaynakları kullanırken (örneğin ana işlem birimine anahtarlanabilmek, diskte okuma-yazma yapabilmek amacıyla) belirli öncelik kıstaslarına göre sıralanmak zorundadırlar. Görevlerin kaynakları kullanmak üzere kurdukları sıralara kuyruklar denir.

Görev Kuyruklarının Gerçekleştirimi
Bahsedilen bu kuyruklar gerçekleştirim açısından bakıldığında, genellikle görev iskeletlerinden oluşan bağlı listelerdir. İşletim sistemince, görevler tarafından paylaşılan kaynakların her biri için; ana işlem birimi kuyruğu, giriş/çıkış birimi kuyruğu, semafor kuyruğu gibi bir kuyruk öngörülür.
Görevleri, işletimlerinin değişik evrelerine ilişkin olarak, bu kuyruk yapıları içinde kuyruk çizenekleriyle göstermek de olanaklıdır. Bu yapıldığında ana işlem birimi kuyruğu, görev durum çizeneğinde hazır olarak anılan görevleri tuttuğundan hazır görevler kuyruğunu, giriş/çıkış birimi kuyruğu ise giriş/çıkış bekler durumuna ilişkin görevleri kapsadığından giriş/çıkış bekler kuyruğunu oluşturur. Buradan, görev işletim evrelerinin temsiline ilişkin görev durum çizeneği ile görev kuyruk çizeneğinin özdeş gösterim biçimleri olduğu söylenebilir.

Kaynak Paylaşımının Kuyruklarla Gösterimi
Kuyruk çizeneklerinde paylaşılan kaynaklar bir çemberle, bu kaynakları kullanmak üzere bekleyen görev kuyrukları ise bir dikdörtgenle simgelenir. Yukarıda verilen çizimden de anlaşılacağı gibi, ana işlem birimi üzerinde çalışırken giriş/çıkış işlemi başlatan bir görev, (görev iskeleti göstergesi kullanılarak) giriş/çıkış işleminin yapılacağı birimin bekleme kuyruğuna (örneğin disk okuma-yazma kuyruğuna) eklenir. İşlemi sonlanan görev ise bu kuyruktan silinerek hazır görevler kuyruğuna aktarılır. Buradan bir görevin durum değiştirmesi (Örneğin giriş/çıkış bekler durumundan hazır durumuna geçmesi) ile kuyruk değiştirmesi (örneğin giriş/çıkış bekler kuyruğundan hazır görevler kuyruğuna aktarılması) arasında herhangi bir ayrım olmadığı söylenebilir.
Ayrıntılı Görev Durum Çizeneği'ne özdeş kuyruk çizeneği aşağıda verilmiştir. Görevlerle ilgili işletim komutları, sistem çağrıları ve görev yönetimi incelenirken, daha çok bu gösterim biçimi kullanılacaktır. Aşağıdaki çizimde, önceden açıklandığı üzere paylaşılan kaynaklar bekleme kuyruklarıyla birlikte gösterilmiştir.

Ayrıntılı Görev Kuyruk Çizeneği
Sistem çağrıları, gerek derleyiciler gerekse sistem programcıları tarafından, işletim sistemine ilişkin yordamları çağırmak ve bu yolla hizmet almak amacıyla programlara yerleştirilen özel komutlardır. Görevlerle ilgili, işletim sistemi çekirdek katmanında yer alan kimi hizmet yordamlarının üst katmanlardan çağrılması özel sistem çağrıları aracılığıyla olur. Bunlar, hem uygulama programları hem de işletim sisteminin kendisi tarafından kullanılırlar. Sistemden sisteme değişiklik gösteriyor olmalarına karşın, görevlerle ilgili sistem çağrılarına örnek oluşturabilen bir alt kümeyi tüm sistemlerde bulmak olanaklıdır.
Görevlerin yaratılması, sonlandırılması; işletimlerinin başlatılması, geciktirilmesi ya da kesilmesi; öznitelik bilgilerinin günlenmesi ve sorgulanması gibi amaçlarla kullanılan bu sistem çağrıları create, delete (kill), suspend, resume, delay, change-priority, change-attributes gibi İngilizce adlarla anılırlar. Bu çağrılar, birebir işletim sistemi komutlarına karşı geldiklerinde komut olarak da anılırlar.

Sistem Çağrıları ve Görev Durum Çizeneği
Bilindiği gibi, bilgisayar sistemlerimde ana bellek, işletim sistemi ve kullanıcı programları tarafından paylaşılır. Kullanıcı programlarının işletim sistemine ayrılan kesime, giriş/çıkış işlemleri gibi kimi istisnalar dışında erişim yapmaları, işletim bütünlüğünü korumak için engellenir. İşletim sistemine, istisnalar dışında, daha geniş haklarla erişim yapabilen programcılar sistem programcılarıdır. Sistem programcıları diğer programcıların yararlandığı işletim ortamını kurmaya yarayan işlemleri yerine getiren, bu nedenle de işletim sistemi üzerinde günleme yapabilen programcılardır. Programcılar arasında yapılan uygulama programcısı/sistem programcısı ayrımı, daha geniş bir bağlamda, sıradan ve ayrıcalıklı kullanıcılar olarak, kullanıcılar arasında yapılır.
Görevlerle ilgili sistem çağrı ya da komutları genelde argümanlarla kullanılır. Görev kimliği argümanlardan birini oluşturur. Görev kimliğinin yanı sıra, çağrılan işleve aktarılmak üzere süre, öznitelik, öncelik gibi başka argümanlar da bulunabilir.
Örneğin yeni bir görevin yaratılmasında kullanılan create (görev-kimliği, öznitelik-alanı) komutu, yaratılacak görevin kimliği ile bu göreve ilişkin iskeletin günlenmesinde kullanılacak özel bilgilere (öznitelik bilgilerine) göstergeyi argüman olarak taşımak durumundadır.
create komutunu çalıştıran görev (başka bir deyişle ata görev), bu işlevi yerine getirecek işletim sistemi kesiminden, yaratılacak görevin (oğul görevin) kimliğini alır. İlgili işletim sistemi çekirdek katman kesimi, boş iskeletler listesinden bir iskeleti, yeni bir görev kimliğiyle ilişkilendirir. İskelet içeriği öncelik ve ayrıcalık düzeyi, bellek boyu, yığıt sığası, erişim hakları, çalıştırılacak program gibi öznitelik bilgileri ve sistemce belirlenen diğer ek bilgilerle günlenerek hazır görevler kuyruğuna bağlanır. Böylece create komutunun gereği yerine getirilmiş olur.
Bunun gibi delete (görev-kimliği) komutu da kimliği verilen görevin iskeletini boş iskeletler listesine ekleyerek görevin sistem içindeki varlığına son vermek için kullanılır.
suspend (görev-kimliği, kuyruk-kimliği) ve resume (görev-kimliği, kuyruk-kimliği) sistem çağrıları, sırasıyla, kimliği verilen görevi, gene kimliği verilen bekler türü bir kuyruğa bağlamak ve bağlı bulunduğu bekler türü kuyruktan hazır görevler kuyruğuna aktarmak amacıyla kullanılan çağrılardır. suspend, giriş/çıkış isteminde bulunma, görevler arası zamanuyumlama gibi durumlarda görevin kendisi tarafından çalıştırılır. suspend çağrısıyla işletimi durdurulan bir görevin yeniden işletime alınabilmesi, o görevle ilgili olarak resume çağrısının çalıştırılmasını gerektirir. suspend çağrısının tersine resume çağrısı, ilgili görevin dışındaki görevler tarafından çalıştırılabilir.
delay (süre) komutu suspend komutuna benzer bir işleve sahiptir. Bu komut çalıştırıldığında ilgili görevin, argüman olarak verilen süre kadar bekler durumunda kalması sağlanır. Bu yolla, görevin işletimi belirli bir süre geciktirilir. Zaman aşımlarının denetimi, gerçek zamanlı uygulamalarda zamana bağımlı etkinliklerin pogramlanması gibi uygulamalar bu komutun kullanım örnekleri arasında sayılabilir. UNIX işletim sisteminde, delay komutu olarak sleep(n) komutu kullanılmaktadır. n, genelde saniye türünden beklenecek süreyi belirlemektedir.
change-priority (görev-kimliği), change-attributes (görev-kimliği, öznitelik-alanı) gibi komutlar, kimliği verilen görevlerin öncelik ve öznitelik bilgilerinin gözlenmesi ve günlenmesi amacıyla kullanılırlar. change-priority komutu, ilgili görevin işletim önceliğini gözlemenin yanı sıra günlemeye de olanak sağlayan bir komuttur. Bu komut gerek sistem işletmeni gerekse işletim sistemince, kendiliğinden, örneğin işletimi aşırı gecikmiş görevlerin işletimlerini, dönem dönem hızlandırmak amacıyla da kullanılır.
Görevlerin değişik durumlar ya da kuyruklar arasında geçişlerini sağlamak amacıyla gerek işletim sisteminin kendisi, gerekse işletmen ya da sistem programcıları tarafından kullanılmak üzere öngörülen ve az önce sıralanan sistem çağrılarının yanı sıra, işletim sistemlerine özgü başka çağrılar da bulunur. UNIX işletim sisteminde fork ve exec diye adlandırılan özel sistem çağrıları bunlara bir örnektir.
Genel olarak fork çağrısı (ya da komutu), içinde bulunduğu programı, bu komutu izleyen satırdan başlayıp join adlı diğer özel bir komut satırına kadar iki parçaya ayırmak ve parçaların işletimini, biri fork komutu tarafından yaratılan oğul görev, diğeri de fork komutunu çalıştıran ata görev aracılığıyla, koşut olarak yürütmek için kullanılır. Bu komutlar, birlikte çalışan görevlerin programlanmasına olanak veren programlama dillerinde yer alan (fork-join, cobegin-coend gibi) üst düzey komutlara altyapı sağlamayı amaçlar. Ancak UNIX işletim sistemi kapsamında fork komutu, yeni görevler yaratmak amacıyla, az önce açıklanan create komutunun yerine kullanılabilen tek komuttur.
UNIX işletim sisteminde yeni bir görev yaratmak amacıyla fork ve exec sistem çağrı ikilisi kullanılmaktadır. fork() sistem çağrısı, bu çağrıyı işleten görevle (kimlik bilgileri dışında) aynı görev iskeletine sahip bir diğer görevi yaratıp hazır görev durumuna getirmek için kullanılmaktadır. Bu bağlamda, fork() sistem çağrısını işleten görev, ata, atanın bir kopyası olarak yaratılan görev de oğul görev olarak tanımlanmaktadır. Bu durumda fork() sistem çağrısını izleyen program satırları (komutları), biri ata biri de oğul olmak üzere, koşut iki görev tarafından işletilir. Bu nedenle fork() sistem çağrısının üreteceği geri dönüş değeri her iki görevce de ele alınır. fork() sistem çağrısı ata ve oğul görevlere değişik değerler geri döndürür. Ata göreve yaratılan oğul görevin görev kimliği (PID), oğul göreve ise 0 değeri döndürülür. Oğul görevin ata görevin görünümünden çıkarak özelleşmesi geri dönüş değerleri arasındaki bu ayrım sayesinde olur. Oğul görev, örneğin, execlp adlı bir sistem çağrısını kullanarak görev iskeletinde, işletilen programı temsil eden instuction segment ve işlenen verileri temsil eden user data segment kesimlerini günler. execlp adlı sistem çağrısının görünümü aşağıda verilmiştir:UNIX işletim sisteminde yeni bir görev yaratmak amacıyla fork ve exec sistem çağrı ikilisi kullanılmaktadır. fork() sistem çağrısı, bu çağrıyı işleten görevle (kimlik bilgileri dışında) aynı görev iskeletine sahip bir diğer görevi yaratıp hazır görev durumuna getirmek için kullanılmaktadır. Bu bağlamda, fork() sistem çağrısını işleten görev, ata, atanın bir kopyası olarak yaratılan görev de oğul görev olarak tanımlanmaktadır. Bu durumda fork() sistem çağrısını izleyen program satırları (komutları), biri ata biri de oğul olmak üzere, koşut iki görev tarafından işletilir. Bu nedenle fork() sistem çağrısının üreteceği geri dönüş değeri her iki görevce de ele alınır. fork() sistem çağrısı ata ve oğul görevlere değişik değerler geri döndürür. Ata göreve yaratılan oğul görevin görev kimliği (PID), oğul göreve ise 0 değeri döndürülür. Oğul görevin ata görevin görünümünden çıkarak özelleşmesi geri dönüş değerleri arasındaki bu ayrım sayesinde olur. Oğul görev, örneğin, execlp adlı bir sistem çağrısını kullanarak görev iskeletinde, işletilen programı temsil eden instuction segment ve işlenen verileri temsil eden user data segment kesimlerini günler. execlp adlı sistem çağrısının görünümü aşağıda verilmiştir:
Burada path oğul görevin işleteceği amaç program'ın yer aldığı kılavuz kütüğü, arg1, arg2, ...., argn ise program'ın beklediği argümanları göstermektedir. program'ın beklediği argümanlar, C programlama dilinde, main adlı ana yordamın argv[] olarak anılan argüman dizisi üzerinden aktarılmaktadır. Her uygulamada argüman sayısı değişik olabileceğinden, satırın 0 damgası ile sonlanması gerekmektedir.
Aşağıda fork ve exec komut ikilisini kullanan 3 program örneklenmiştir. Bu programlardan prog1 prog2'yi, prog2 ise prog3'ü yaratıp başlatmaktadır. prog1 fork() komutu ile önce kendisinin kopyasını yaratmakta ve if komutu ile fork()'un döndürdüğü değeri sınamaktadır. Kendisi bu değeri sıfırdan büyük bulacağından işletimine for döngüsüyle devam etmektedir.
fork() komutuyla yaratılan kopya oğul görev ise fork()'un döndürdüğü değeri 0 bulduğundan execlp("./prog2","prog2","3",NULL) komutu ile, prog2 komutlarını argv[] üzerinden aktarılan argümanlarla çalıştırmaktadır. Aynı açıklama prog2 ve prog3 program ikilisi için de geçerlidir. Bu durumda prog1 4 kez ana, prog2 3 kez kız, prog3 ise 2 kez torun yazdırıp sonlanmaktadır.

UNIX'te her yeni görev değişik bir programı çalıştırıyor olmakla birlikte ata görevden kalan açık kütükleri, UNIX kuralları gereği sahiplendirmeyi sürdürmektedir.
Bir bilgisayar sisteminde görev, işletim sisteminin, ana işlem birimi yönetimi açısından taban aldığı varlıktır. Sistemden hizmet almak amacıyla tanımlanan işler, sunuş aşamasında bir ya da daha çok göreve dönüştürülürler. Bu aşamadan sonra sistemde bir dizi görevin bulunduğu, bunların sistem kaynaklarını kullanabilmek için değişik işletim evrelerinden geçerek birbirleriyle yarıştıkları söylenebilir.
Görevler arasında yer alan bu yarışın kuralları görev yönetimi kapsamında belirlenir. Daha önceden de belirtildiği üzere sistem kaynaklarının görevler tarafından kullanılabilmesi, ana işlem birimine anahtarlanarak çalışabilmeyi gerektirir. Bu nedenle görev yönetimi ana işlem biriminin yönetimi demektir. Görev durum çizeneğinde yer alan hazır görev durumundan çalışır görev durumuna geçişler ya da bu gösterime özdeş görev kuyruk çizeneğinde, hazır görevler kuyruğundan ana işlem birimine anahtarlanma işlemleri görev yönetimi kapsamında ele alınır.

Görev Yönetiminin Konumu
Görev yönetiminden, görev yönetici olarak adlandırılan ve işletim sistemi çekirdek katmanında yer alan özel bir yordam sorumludur.
Görev yönetici:
- Görevlerin giriş/çıkış ve zamanuyumlama istemlerinde bulunmaları, sonlanmaları gibi, görevlerin ana işlem birimini bırakmasını gerektiren durumlarda,
- Yeni bir görevin sisteme sunulması, giriş/çıkış ve zamanuyumlama istemlerinin yerine getirilmesi gibi, hazır görevler kuyruğuna yeni bir görevin eklenmesini gerektiren olaylar sonucunda, ya da,
- Etkileşimli işlem bağlamında, gerçek zaman saati vuruları sonucunda
ana işlem birimine anahtarlanarak kendisinden sonra işletilecek görevin belirlenmesini sağlar.
Görev yöneticiden sonra ana işlem birimini kullanacak görev, ya görev yöneticinin çalışabilmesi için işletimi kesilen görev ya da (kavramsal olarak) hazır görevler kuyruğunun başında yer alan diğer bir görev olacaktır. Örneğin bir giriş/çıkış işlemi başlatarak bekler duruma düşmüş bir görev, bu işlemin sona ermesi sonrasında ilgili bekler görevler kuyruğundan hazır görevler kuyruğuna bağlanacaktır. Hazır görevler kuyruğuna yeni bir görevin bağlanmış olması, bu aşamadan sonra hangi görevin ana işlem birimini kullanacağı değerlendirmesinin yeniden yapılmasını gerektirecektir. Bu nedenle, yeni bir görevin sisteme sunulması (create), giriş/çıkış ya da zamanuyumlama işlemlerinin sonlanması (resume), işletim için göreve ayrılan sürenin dolması (gerçek zaman saati vurusu) gibi olaylar sonrasında ortaya çıkan uyarılarla görev yönetici, ana işlem birimine anahtarlanacak, ilgili görevin hazır görevler kuyruğuna bağlanmasını ve bunun sonrasında da ana işlem birimini kullanacak görevin belirlenmesini sağlayacaktır.
Yukarıda anılan nedenlerin yanı sıra, bir görevin işletiminin son bulması, durdurulması (suspend), önceliğinin değiştirilmesi (change-priority) gibi, hazır görevler kuyruğuna yeni bir görev eklemeyi gerektirmeyen nedenlerle de görev yöneticinin işletilmesi ve işletime alınacak yeni görevin belirlenmesi gereklidir. Buradan, görev yöneticinin, ana işlem birimine çok sık anahtarlanan bir sistem görevi olduğu söylenebilir. Ana işlem birimine çok sık anahtarlanan bir görev olması nedeniyle, görev yöneticinin, sistem işletim hızını düşürmemek için küçük boyutlu olması gerekir.
Çok sık gündeme gelmesi nedeniyle kimi zaman, görev yönetimi, kısa dönemli planlama olarak da anılır. Bu bağlamda orta dönemli planlama ve uzun dönemli planlama kesimleri de vardır. Görev yönetici, özetle, hazır görevler kuyruğunun düzenlenmesi ve düzenleme sonucu kuyruk başında yer alan görevin ana işlem birimine anahtarlanmasını gerçekleştiren işletim sistemi kesimi olarak düşünülebilir. Görev yönetici hazır görevler kuyruğunun düzenlenmesinden sorumlu olmakla birlikte bu kuyruğa eklenecek görevleri belirleyen bir kesim değildir. Hazır görevler kuyruğuna yeni görevlerin eklenmesi işletim sisteminin diğer yönetim kesimleri tarafından sağlanır.
Sisteme toplu işlem düzeninde sunulan işler, toplu işlem kuyruğuna bağlanırlar. Bu kuyrukta bekleyen işlerin görevlere dönüştürülüp hazır görevler kuyruğuna bağlanmaları iş yönetimi kapsamında ele alınır. Toplu işlem kuyruğunda işletilmek üzere bekleyen işlerin ele alınarak görevlere dönüştürülmeleri çok sık yapılan bir işlem değildir. Bu nedenle, toplu işlem kuyruğunda bekleyen işlerin görev tanımlarının yapılarak hazır görevler kuyruğuna bağlanmalarını gerçekleştiren iş yöneticiye, kısa dönemli ile tezat oluşturacak biçimde uzun dönemli planlama kesimi de denir.
Bilgisayar sistemine işler, toplu işlemin yanı sıra etkileşimli işlem bağlamında da sunulurlar. Ancak sisteme etkileşimli işlem düzeninde sunulan işler, beklemeksizin doğrudan görevlere dönüşüp hazır görevler kuyruğuna eklenirler. Bu nedenle sisteme sunulan işlerin tümünü kapsayan iş yönetimi adlandırmasını, salt toplu işlem kuyruğunu ele alan uzun dönemli planlama olarak düşünmek yanlış olmaz.

İş Yönetiminin Konumu
İş yönetimi ana işlem birimi kullanımı ağırlıklı işlerle giriş/çıkış kullanımı ağırlıklı işlerin dengeli bir biçimde işletilebilmelerini gözetir. Zira sistem kaynaklarının verimli kullanımı buna bağlıdır. Bu amaçla iş yönetici, ana işlem birimi kullanım oranını bir ölçüt olarak alıp bu oran düştüğünde hazır görevler kuyruğundaki görev sayısını artırır; bunun tersi olduğu durumlarda ise bu kuyruktaki görev sayısını sınırlı tutmaya çalışır. Buradan iş yöneticinin, görev yönetimi girdilerini düzenleyen bir kesim olduğu söylenebilir.
Belirtildiği üzere, bu düzenlemeyi sık sık yapma gereği bulunmadığı açıktır. Bu nedenle iş yönetici sıkça işletilen bir kesim değildir. Ana işlem birimine az sıklıkta anahtarlanıyor olması, göreli çok sayıda kıstası ele alan, karmaşık algoritmalara dayalı olarak gerçekleştirilebilmesine izin verir. Görev yönetici yalın ve kısa bir yordam iken iş yönetici, genellikle, göreli karmaşık ve uzun bir işletim sistemi kesimi olarak ortaya çıkar.
Hazır görevler kuyruğuna görevler, ya sunuş kesiminden ya da bekleme kuyruklarından ulaşırlar. Sunuş kesiminden gelen görevler, etkileşimli işlem sunuş katmanı (kabuk katman) ya da toplu işlem kuyruğundan gelen görevlerdir. Hazır görevler kuyruğuna girdi üreten bekleme kuyrukları, değişik giriş/çıkış sürücülerine erişim ve zamanuyumlama değişkenlerine (semaforlara) ilişkin bekleme kuyrukları ile bellekte yer bekler görevler kuyruğudur.

Ayrıntılı Görev Kuyruk Çizeneği
Görevlerin giriş/çıkış ve semafor kuyruklarından hazır görevler kuyruğuna geçişleri, giriş/çıkış işlemlerinin sonlanması, zamanuyumlamanın gerçekleşmesi gibi nedenlerle ortaya çıkan uyarılar sonucu gerçekleşir. Başka bir deyişle, bu geçişler iş ve görev yönetiminden bağımsız, kendiliğinden gerçekleşen geçişlerdir.
Bekleme kuyrukları kapsamında düşünülen bellekte yer bekler kuyruğu, bu yönden diğer bekleme kuyruklarından ayrılır. Bellekte yer bekler kuyruğundan bir görevin hazır görevler kuyruğuna bağlanması, toplu işlem kuyruğundan olduğu gibi, değişik kıstaslara dayalı değerlendirmeleri yapacak ve aktarılacak görevi belirleyecek bir kesimin çalışmasını gerektirir. Bu kesimin gerçekleştirdiği yönetim, görev ve iş yönetimlerinin adlandırılmasında olduğu gibi, işletim sıklığı göz önüne alınarak orta dönemli planlama diye anılır.
Çalışan bir görevin bitmesi sonucu ana bellekte yer açılması, hazır görevler kuyruğunda bekleyen görev sayısının belirli bir sınırın altına düşmesi gibi durumlarda ana işlem birimine anahtarlanan bu kesim, bellekte yer bekleyen görevler kuyruğundan bir göreve, ana bellek yönetim kesimiyle eşgüdüm içerisinde bellekte yer bulunmasını sağlayarak hazır görevler kuyruğuna bağlanmasını gerçekleştirir. Bu durumda orta dönemli planlama kesimi, dönem dönem işletime girerek bellekte yer bekler kuyruğundan hazır görevler kuyruğuna girdi sağlayan bir kesim olarak düşünülür.

Orta Dönemli Planlamanın Konumu
Nasıl iş yönetici ana işlem birimi ile giriş/çıkış birimlerinin dengeli kullanımını kıstas alarak hazır görevler kuyruğuna girdi oluşturuyorsa, orta dönemli planlama kesiminin de, ana işlem birimi ile ana belleğin birlikte, dengeli kullanımını sağlamak üzere girdi oluşturan ve bu yolla görev yönetimini destekleyen bir kesim olduğu söylenebilir.
Yönettikleri kuyruklar farklı olmakla birlikte yerine getirdikleri yönetim ya da düzenleme işlevleri aynıdır. Bu nedenle, gerek iş yönetimi, gerek görev yönetimi ve gerekse orta dönemli planlama kesimlerinin kullanabildiği algoritmalar da kabaca aynıdır. İzleyen kesimde bu algoritmalar, daha çok görev yönetimi çerçevesinde açıklanacaktır. Ancak iş yönetimi ya da orta dönemli planlamanın gerektirdiği özel durumlar söz konusu olduğunda ilgili ayrıntılar ayrıca açıklanacaktır.
Bilindiği üzere, işletim sisteminin görev yönetimi kesimi, ana işlem biriminin, sistemde tanımlı görevler arasında paylaştırılmasından sorumludur. Bu paylaştırma yapılırken temel amaç sistem başarımının yükseltilmesidir. Sistem başarımı dendiğinde, bir yandan sistemden yararlanan kullanıcılara verilen hizmetin niteliğini belirleyen (toplu işlemde) iş tamamlanma süresi, (etkileşimli işlemde) yanıt süresi gibi kıstaslar göz önününde tutulurken diğer yandan, bu kıstaslarla kimi zaman çelişebilen sistem kaynaklarının verimli kullanımı akla gelir. Sistem başarımını gözeten görev yönetimi kesimi de, bu bağlamda:
- Ana işlem biriminin verimli kullanımı
- Birim sürede sonlandırılan iş sayısı
- Ortalama iş tamamlanma süresi
- Bekleme süresi
- Yanıt süresi
gibi, hem kullanıcılara verilen hizmetin niteliğine, hem de bilgisayar sisteminin verimli kullanımına ilişkin kıstasları gözeten algoritmalara dayalı olarak gerçekleştirilir.
• Ana işlem biriminin verimli kullanılmasından, bu kaynağın mümkün olduğunca çalışır durumda tutulması anlaşılır. Ana işlem birimi, çalıştığı sürelerin dışında boştadır. Boşta olan ana işlem birimi komut işletimi yapmayan (ana beleğe erişmeyen) ancak bulunduğu boşta durumundan çıkmasını sağlayacak yeniden başlatma, kesilme gibi kimi dış uyarıları bekleyen bir ana işlem birimidir. Ana işlem biriminin çalışıyor olması makina komutları işletiyor olması demektir. Bu bağlamda, işletilen komutların hizmete dönük, yararlı iş üretip üretmedikleri gözetilen bir husus değildir. Örneğin bir koşulun oluşması (örneğin klavyede bir tuşa basılması) beklenirken işletilen sınama döngü komutları, hizmet üretmeyen ancak ana işlem birimini çalışır tutan komutlardır. Bununla birlikte ana işlem biriminin büyük oranlarda çalışır tutulması, hizmete dönük yararlı iş üretebilmenin de(yeterli olmamakla birlikte) gerekli bir ön koşuludur.
• Ana işlem biriminin çalışır durumda tutuluyor olması, yukarıda da belirtildiği gibi, tek başına, üretilen hizmetin tam bir ölçüsü olamayacağından birim sürede tamamlanan ortalama iş sayısı sistem başarımının daha dolaysız bir ölçüsüdür. Yönetim yazılımlarının kullandığı algoritmalar, bu parametreye dayalı olarak öngörülebilirler.
• Birim sürede tamamlanan iş sayısı yerine, işlerin ortalama tamamlanma süreleri de sistem başarımının bir ölçüsüdür. İş tamamlanma süresi, işlerin sisteme sunuluşlarından bitişlerine(sonlanmalarına) kadar geçen sürelerin ortalamasıdır. Bir işin tamamlanma süresi, o işin sunuş kuyruğunda (örneğin toplu işlem kuyruğunda) bekleme, görev tanımlarının yapılmasından sonra işletime alınma, dönüşümlü olarak giriş/çıkış, zamanuyumlama kuyruklarında bekleme ve işletilme sürelerinin toplamıdır.
• İş tamamlanma süresi işletim ve bekleme sürelerinin toplamıdır. Bu toplamın yanı sıra, sistem kaynaklarını diğer işlerle(ya da görevlerle) paylaşmaktan kaynaklanan bekleme süresinin kendisi de, yönetimin dayanabileceği bir kıstas ve sistem başarım ölçüsüdür. Bekleme süresi, işlerin ya da görevlerin, ana işlem birimi kullanımı dışında kaynak bekleyerek geçirdikleri sürelerin ortalamasıdır.
• Etkileşimli işlem ortamında işletilen iş ve görevlerin sonlanma hızı, terminali başında sonuç bekleyen kullanıcıya hemen yansıyan bir durumdur. Bu bağlamda kullanıcının, çalıştırdığı komutlara aldığı yanıtların süreleri de verilen hizmetin niteliğinin bir ölçüsüdür. Bu sürelerin ortalaması, kısaca yanıt süresi olarak anılır. Yanıt süresinin ölçümünde genellikle aritmetik ortalama kullanılır. Ancak yanıt sürelerinin standart sapması da kullanılabilen diğer anlamlı bir ölçümdür. Standart sapmanın küçük tutulmaya çalışıldığı sistemlerde, yanıt sürelerinin işletimden işletime büyük değişiklikler göstermediği, yanıt süreleri açısından öngörülebilir bir sistem görünümü sağlanabilmektedir.• Etkileşimli işlem ortamında işletilen iş ve görevlerin sonlanma hızı, terminali başında sonuç bekleyen kullanıcıya hemen yansıyan bir durumdur. Bu bağlamda kullanıcının, çalıştırdığı komutlara aldığı yanıtların süreleri de verilen hizmetin niteliğinin bir ölçüsüdür. Bu sürelerin ortalaması, kısaca yanıt süresi olarak anılır. Yanıt süresinin ölçümünde genellikle aritmetik ortalama kullanılır. Ancak yanıt sürelerinin standart sapması da kullanılabilen diğer anlamlı bir ölçümdür. Standart sapmanın küçük tutulmaya çalışıldığı sistemlerde, yanıt sürelerinin işletimden işletime büyük değişiklikler göstermediği, yanıt süreleri açısından öngörülebilir bir sistem görünümü sağlanabilmektedir.
Görev yönetimi kapsamında, bahsedilen bu kıstaslardan bir ya da birkaçını birlikte gözeten değişik yönetim algoritmaları kullanılır. Bunlardan kimileri:
- İlk gelen önce (First Come First Served)
- En kısa işletim süresi kalan önce (Shortest Remaining Time First)
- Öncelik tabanlı (Priority Based)
- Zaman dilimli (Time Sliced, Round-Robin)
- Çok kuyruklu (Multi-level queues)
gibi adlarla anılırlar.
Bu algoritmaları, işletilmekte olan bir görevin işletimini, bu görevin iradesi dışında kesen ya da kesmeyen algoritmalar olmak üzere iki değişik sınıfta ele almak olanaklıdır.
Bilindiği gibi görev yönetici, ya giriş/çıkış isteminde bulunma, sonlanma ve zamanuyumlama gereksinimleri gibi işletilmekte olan görevlerin kendilerinden kaynaklanan nedenlerle ya da hazır görevler kuyruğuna yeni bir görevin bağlanmasını gerektiren durumlarda ana işlem birimine anahtarlanmaktadır. Hazır görevler kuyruğuna yeni bir görevin bağlanması, bileşimi değişen hazır görevler kuyruğundan hangi görevin çalıştırılacağının yeniden belirlenmesini gerektirir.
Eğer bu belirleme, o anda işletilmekte olan görevi de içerecek biçimde yapılırsa uygulanan algoritmanın kesen (preemptive) algoritma olduğu söylenir. Başka bir deyişle, bir görev, uygulanan yönetim gereği bir kez ana işlem birimine anahtarlandıktan sonra giriş/çıkış, zamanuyumlama gereksinimleri gibi, kendisinden kaynaklanan nedenler dışında (kendi istemi dışında) da ana işlem birimini bırakmak zorunda kalıyorsa uygulananan yönetim algoritması kesen algoritma olarak adlandırılmaktadır.
Doğal olarak görevlerin işletimlerinin kendi istemleri dışında kesilmediği durumlarda da kesmeyen (non-preemptive) algoritmalardan söz edilmektedir.
İlk gelen önce algoritması, adından da anlaşılacağı üzere, görevlerin eş öncelikli olarak ele alındığı ve görevlerin, hazır görevler kuyruğuna geliş sırasında işletildiği, çok yalın bir yönetim algoritmasıdır.
Bir görevin, sisteme ilk kez sunulma, başlatılan bir giriş/çıkış işleminin sonlanması, zamanuyumlamanın gerçekleşmesi gibi herhangi bir nedenle hazır görevler kuyruğuna bağlanması gerektiğinde, bu algoritma gereğince, kuyruğa sonuncu öge olarak bağlanır. İşletilmekte olan görevin, kendi istemiyle ana işlem birimini bırakması sonucu, kuyruk başında yer alan görev ana işlem birimine anahtarlanır. İlk gelen önce algoritması, görevlerin eş öncelikli olması nedeniyle kesen bir algoritma değildir.
Gerçekleştirimi çok yalın ve kısa bir biçimde yapılabilen bu algoritma, yönetimini üstlendiği tüm görevleri, niteliklerini gözetmeksizin aynı öncelikle ele alması nedeniyle, genelde yüksek başarım sağlayan bir algoritma değildir. İlk gelen önce algoritması, iş yönetimi kapsamında da aynı ad ve ilkeye dayalı olarak kullanılır. Bu bağlamda işlerin, toplu işlem kuyruğundan alınıp görevlere dönüştürülerek hazır görevler kuyruğuna aktarılmaları, sisteme sunuluş sırasında gerçekleştirilir.
En kısa işletim süresi kalan önce algoritmasında, görevlerin ana işlem birimine anahtarlanmasında göz önüne alınan kıstas, görevlerin sonlanabilmeleri için arda kalan işletim süreleridir.
En kısa işletim süresi kalan göreve öncelik sağlanarak bir an önce sistemden çıkması ve bu yolla en kısa ortalama bekleme süresinin elde edilmesi amaçlanır. En kısa işletim süresi kalan önce algoritması, var olan diğer yönetim algoritmaları içinde, kuramsal olarak, ortalama bekleme süresi yönünden en iyi sonucu veren algoritmadır. Ancak kalan işletim süresi ölçülebilen bir değer değildir. Bu değerin bir biçimde kestirilmesi gereklidir. Bu kestirim iş yönetimi kapsamında sağlıklı bir biçimde yapılabilir.
İşler, bilgisayar sistemine sunulurken, gereksedikleri ana işlem birimi zamanı (
) bilgisi, genelde kullanıcılardan alınır. Bu bilgi, algoritmanın iş yönetimi çerçevesinde kullanımı için yeterlidir. Zira her işin, işletiminin herhangi bir aşamasında ne kadar süreyle (
) ana işlem biriminden yararlandığı, sayışımın bir gereği olarak bilinir. Bu iki değer arasındaki ayrım (
-
), işin kalan işletim süresi olarak kullanılır.
Aynı bilginin görev yönetimi çerçevesinde de kullanılması düşünülebilir. Ancak bu süre, ilgili işe ilişkin görev ya da görevlerin ana işlem biriminden gereksediği toplam süredir. Bu sürenin, görev(ler) tarafından kaç anahtarlanma sonucu tüketileceği, her anahtarlanmada hangi görevin ana işlem birimini ne kadar süre işgal edeceği, bu bilgiye dayanılarak kestirilemez.
Sözkonusu algoritma görev yönetimi için kullanılacağı zaman, görevlerin her biri için, her anahtarlanmada, ana işlem birimini ne kadar süre işgal edeceklerinin başka bir yolla kestirilmesi gerekir. Bu amaçla üstel (eksponansiyel) ortalama olarak anılan bir kestirim yöntemi kullanılabilir. Bu yöntemde, bir görevin gelecek işletiminde harcayacağı ana işlem birimi süresi; o görevin bir önceki işletiminde harcadığı süre ile bir önceki kestirimden (tarihçesinden) yararlanılarak, aşağıdaki formül aracılığıyla hesaplanır:
Bu formül içinde yer alan
değişmezi {0-1} aralığında değer alan bir sayıdır.
değişmezinin 0 değerini alması durumunda
olacağından geçmişte gerçekleşen işletim süreleri göz önüne alınmaksızın, aynı görev için hep aynı kestirim değerinin kullanıldığı durum ortaya çıkar.
değişmezinin 1 değerini alması durumunda ise, bu kez
olacağından gelecek işletim süresinin kestirimi olarak, bir önce gerçekleşen işletim süresi alınmış olacaktır. Yukarıda verilen formülün açılmış biçimi aşağısında verildiği gibidir.
Bu açılımdan da anlaşılacağı üzere
değişmezinin {0-1} aralığındaki değerleri alması durumunda, gelecek işletim süresinin kestirim değeri olarak, geçmiş işletim sürelerinin
çarpımı ile dengelenen bir ortalaması kullanılır.
Görevlerin bu ya da buna benzer yöntemlerle belirlenen gelecek işletim süreleri taban alınarak ana işlem birimine anahtarlanmaları gerçekleştirilir. Örneğin herhangi bir görev hazır görevler kuyruğuna bağlanacağı zaman, işletime alındığında ana işlem birimini ne kadar süre işgal edeceği hesaplanır. Elde edilen kestirim değerine göre hazır görevler kuyruğunda ilgili yere eklenir. Bu algoritma ile, hazır görevler kuyruğunun, görevlerin, gelecek işletim sürelerine ilişkin kestirimlere göre sıralı bir düzende tutulabileceği söylenir.
En kısa işletim süresi kalan önce algoritması, görev yönetimi kapsamında hem kesen hem de kesmeyen algoritma olarak gerçekleştirilebilir. Bu algoritma, iş yönetimi (toplu işlem kuyruğunun düzenlenmesi) için kullanıldığında en kısa iş önce (Shortest Job First) olarak adlandırılmaktadır.
Öncelik tabanlı algoritma, en kısa işletim süresi kalan önce algoritmasının genelleştirilmiş biçimidir.
Bu algoritma için her görevin bir önceliği bulunur. Bu öncelik değeri görev iskeleti içinde, öncelik alt alanında tutulur. Görevler genelde, sisteme sunuluşları sırasında 0'dan N'ye kadar değişen bir öncelik değeri alırlar. Örneğin görev iskeleti içinde öncelik alt alanı bir bayttan oluşuyorsa görevler 0'la 255 değerleri arasında bir önceliğe sahip olabilirler. Bu bağlamda yüksek öncelikli ya da düşük öncelikli görevlerden söz edilir. Görev öncelikleri, ana işlem birimi kullanım süresi, ana bellek gereksinimi, giriş/çıkış kanal kullanım sıklığı gibi görevin sistem kaynaklarına ilişkin ölçülebilir taleplerine, ait olunan kullanıcı grubunun özelliklerine, sisteme sunuluş (etkileşimli-toplu işlem) biçimine dayalı olarak belirlenir.
Bu algoritmaya göre, ana işlem birimine yeni bir görev anahtarlanacağı zaman en yüksek önceliğe sahip görev seçilir. Bunun için hazır görevler kuyruğunun görev önceliği sırasında tutulması ve hep kuyruk başındaki görevin ana işlem birimine anahtarlanması bir gerçekleştirim yöntemi olarak düşünülebilir. Bu yaklaşım anlaması kolay, mantıklı bir yaklaşımdır. Ancak görevlerin, hazır görevler kuyruğa, geliş sırasında eklenmesi ve en öncelikli görevin, ana işlem birimine anahtarlama yapma aşamasında, kuyruğun taranarak saptanması da bir diğer gerçekleştirim biçimi olabilir. Buradaki tercihi, doğal olarak sıralı tutulan bir kuyruğa yeni bir öge ekleme ile kuyruk tarama maliyetlerin oranı belirleyecektir. Öncelik tabanlı görev yönetim algoritması, hem kesen hem de kesmeyen algoritma olarak gerçekleştirilebilmektedir.
Bir bilgisayar sisteminde çalışan tüm görevler, ana işlem birimine, her zaman hazır görevler kuyruğu üzerinden anahtarlanmazlar. Kimi görevler, (kesilmeler gibi) donanımdan kaynaklanan uyarılar sonucunda, görev yöneticinin denetimi dışında da ana işlem birimine anahtarlanabilirler. Ana işlem birimine bu biçimde anahtarlanan görevler, yerine getirdikleri hizmetler yönünden, çoğunlukla zamana bağımlı, gecikme tanımayan özel sistem görevleridir. Öncelik tabanlı görev yönetimi, uyarılara bağlı olarak ana işlem birimine anahtarlanan görevler için uyarı tabanlı (event driven) görev yönetimi olarak adlandırılır.
Uyarı tabanlı görev yönetiminde görev önceliği, görevlerin bağlı oldukları uyarıların ana işlem birimi tarafından ele alınma önceliğiyle belirlenir. Uyarı tabanlı görev yönetimi, daha çok süreç denetimi gibi gerçek zamanlı uygulamaların yürütüldüğü sistemlerde kullanılır.
Görevlerin öncelikleri, sunuş aşamasında bir kez belirlendikten sonra, tüm işletimleri boyunca, genellikle bir daha değişmez. Ancak özellikle çok yüklü sistemlerde, yüksek öncelikli işlerin, sistemde hiç eksik olmaması yüzünden düşük öncelikli işlerin işletimleri, aşırı boyutlarda gecikebilir. Bu sakıncayı ortadan kaldırmak üzere öncelik yaşlanması (priority aging) olarak anılan bir yöntem kullanılır.
Bu yöntemle, kimi istisnalar dışında, sistemde çalışan tüm görevlerin öncelikleri, işletim sistemi tarafından, belirli sıklıkta (örneğin her yarım saatte bir) modulo N bir artırılır. (i) öncelik değerine sahip bir görevin (i+1) öncelik değerine sahip bir görevden daha öncelikli olduğu varsayılarak, öncelik değeri N'ye ulaşan bir görevin, bu yöntemle, bir sonraki adımda 0 değeri ile en öncelikli göreve dönüşmesi gerçekleşir. Böylece düşük öncelikli görevlere de yüksek öncelik kazanarak işletilebilme şansı sağlanmış olur.
Zaman dilimli görev yönetim algoritmasıyla, hazır görevler kuyruğunda bekleyen görevler, eşit uzunluktaki zaman dilimleri içinde ana işlem birimine, sırayla anahtarlanır.
Örneğin, her 5 milisaniyede bir gelen saat uyarılarıyla ana işlem birimine anahtarlanan görev yönetici, çalışmakta olan görevi, hazır görevler kuyruğunun sonuna ekler. Kuyruk başındaki görevi de, kendisinden sonra çalışmak üzere ana işlem birimine anahtarlar. Görevlerin işletimi, giriş/çıkış ve zamanuyumlama istemi gibi nedenlerle kendilerine ayrılan zaman dilimi dolmadan sonlanabilir. Bu durumda da, yine görev yönetici ana işlem birimine anahtarlanır. Zaman aralığı sayacını sıfırlayarak kuyruk başındaki görevi, yeni bir zaman dilimi için çalıştırır.
Zaman dilimli görev yönetim algoritması, çoğunlukla, etkileşimli işlemin uygulandığı sistemlerde kullanılır. Etkileşimli işlem kapsamında işletilecek işler, görev tanımları yapılarak hazır görevler kuyruğuna bağlanırlar. Görevlere ayrılan zaman aralığının t milisaniye, sistemde aynı anda işletime alınan görev sayısının da n olduğu varsayılırsa bu sistemde her görevin (t x n) milisaniye sıklığında işletileceği söylenebilir. Yukarıda verilen örnekte olduğu gibi, görevlerin 5 milisaniye süreyle ana işlem birimine anahtarlandığı düşünülürse, sistemde aynı anda 20 görevin çalıştığı bir durumda her göreve en geç 100 milisaniyede bir (1/10 saniyede bir) sıra geleceği söylenebilir.
Zaman dilimli yönetim algoritması uygulanırken kullanılan zaman aralığının (diliminin) seçimi önemlidir. Eğer bu süre çok uzun tutulursa görevlere sıra gelme sıklığı ve etkileşimli işlem başarımı düşer. Bu sürenin çok kısa tutulması durumunda ise görev anahtarlama işlemlerine harcanan sürenin görev işletimine ayrılan süreye oranı artarak ana işlem birimi kullanım verimliliğinin düşmesine neden olunur.
Zaman dilimli görev yönetim algoritması, öncelik tabanlı görev yönetimi çerçevesinde düşünüldüğünde eş öncelikli bir algoritma olarak değerlendirilebilir. Zira görevler, başkaca hiçbir kıstas göz önüne alınmaksızın, sırayla, eşit zaman aralıklarında ana işlem birimini kullanmaktadır. Zaman dilimli görev yönetimi, şimdiye değin açıklanan diğer algoritmalardan farklı olarak, doğası gereği, salt, kesen bir algoritmadır.
Şimdiye değin incelenen görev yönetim algoritmalarında, görevlerin, ana işlem birimine anahtarlanabilmek için tek bir hazır görevler kuyruğu üstünde beklediği ve bu kuyruk üzerinde bekleyen tüm görevlere aynı yönetim algoritmasının uygulandığı varsayılmıştır. Bunun yanı sıra, sözkonusu yönetim algoritmalarının her biri için, belirgin bir işletim ortamı bulunduğu söylenmiştir. Örneğin en kısa işletim süresi kalan önce algoritmasının, görevlerin sonlanması açısından en kısa bekleme süresini sağlayan bir algoritma olduğu belirtilirken, zaman dilimli yönetim algoritmasından, etkileşimli işlem ortamının kurulmasında yararlanılan bir algoritma olarak söz edilmiştir.
Bir bilgisayar sisteminde işletime alınan görevler çok değişik niteliklerde olabilirler. Bu görevlerden kimileri, örneğin etkileşimli işlem ortamında program geliştiren kullanıcı görevleri olabilirken, kimileri de toplu işlem kuyruğundan sisteme sunulmuş ve sistem kaynaklarını boş dönemlerinde çalışır tutmayı amaçlayan işlerle ilgili görevler olabilir. Bunun yanı sıra işletilen görevler arasında hiç bekletilmeden ana işlem birimine anahtarlanması gereken çok öncelikli sistem görevleri de bulunur. Bu görevlerin hepsini aynı hazır görevler kuyruğuna bağlamak ve bunların tümüne aynı yönetim algoritmasını uygulamak tüm görevler için uygun bir yol olmayabilir. Örneğin en kısa işletim süresi kalan önce algoritmasının tüm görevlere uygulanması, etkileşimli işlem ortamını tümüyle yozlaştırabilir.
Bu nedenle, değişik yönetim algoritmalarının olumlu yanlarını biraraya getirmek ve sakıncalarını azaltmak üzere çok kuyruklu algoritma kullanılır. Çok kuyruklu algoritmada ana işlem birimine anahtarlanmayı bekleyen görevler, ortak bir hazır görevler kuyruğu yerine, görevin türüne göre ayrı kuyruklara bağlanırlar. Ortaya çıkan birden çok kuyruğun her biri için, yukarıda açıklanan algoritmalardan uygun olanı kullanılır.

Çok Kuyruklu Görev Yönetimi
Bu durumda, örneğin, sistemde etkileşimli işlem ortamında çalışmak üzere tanımlanan görevler, zaman dilimli algoritmanın uygulandığı kuyruk üzerinden, toplu işlem kapsamında sunulan işlerle ilgili görevler ise ilk gelen önce ya da en kısa işletim süresi kalan önce algoritmalarının uygulandığı diğer kuyruklar üzerinden işletime alınırlar. Bunun gibi, öncelik tabanlı algoritmanın yönetim başarımını yükselttiği görevler için de, bu algoritmanın uygulandığı ayrı bir kuyruk öngörülür.
Değişik kuyruklara bağlı olmalarına karşın, görevlerin, anahtarlanmayı bekledikleri ana işlem birimi sayısı kısıtlıdır. Bu nedenle ana işlem birimine yeni bir görev anahtarlanacağı zaman bu görevin hangi kuyruktan seçileceğinin de belirlenmesi gereklidir. Bu bağlamda izlenebilecek yollardan biri, hazır görev kuyruklarına çeşitli önceliklerin verilmesidir. Bu durumda bir görevin ana işlem birimine anahtarlanabilmesi için hem bulunduğu kuyruğun başında yer alması hem de bulunduğu kuyruktan daha öncelikli kuyrukların boş olması gereklidir. Bu yöntemin sakıncası, öncelik tabanlı algoritma açıklanırken belirtildiği üzere, çok yüklü sistemlerde, düşük öncelikli kuyruklarda yer alan görevlerin aşırı derecede gecikmesidir.
İzlenebilir diğer bir yol, değişik hazır görev kuyrukları arasında, zaman dilimli yönetim algoritmasını uygulamaktır. Bu yöntemle, sistemde bulunan değişik kuyruklara, öncelikleriyle uyumlu sayıda zaman dilimi verilir. Eğer sistemde, örneğin 3 değişik kuyruk varsa, bu kuyruklardan en önceliklisine örneğin 5, onu izleyene 3, son kuyruğa da 1 zaman dilimi ayrılır. Kuyruklara ayrılan zaman dilimleri içinde, kuyruk içi sırada, işletilebilen sayıda görev işletilir. Bu yolla kuyruk ve görevler arası öncelikler korunurken çok düşük öncelikli işlere de, dönem dönem işletim hakkı tanınarak aşırı gecikmeleri önlenir.
Çok kuyruklu görev yönetim algoritmasını da kesen algoritmalar çerçevesinde düşünmek gereklidir. Zira bu algoritma, buraya değin bilinen kesen ya da kesmeyen algoritmaların bir karmasıdır. Çok kuyruklu görev yönetim algoritması, genel amaçlı büyük boy bilgisayar sistemlerinde kullanılan bir yönetim algoritmasıdır.
Görev bir programın işletimine verilen addır. Kimi programlar, yerine getirdikleri işlev açısından koşut işletilebilecek kesimler içerirler. Bu kesimlerin tek bir program içinde yer almaları ardarda işletilmelerini zorunlu kılar. Koşut işletilebilir her kesim için ayrı bir program öngörüp bunları koşut işletmek ve bu yolla işletimi hızlandırmak ve verilen hizmetin niteliğini artırmak mümkündür.
Ancak ortak bir amaca (işleve) dönük değişik kesimlerin ayrı programlar tarafından ele alınması, bu kesimlere ana bellekte işletim sistemi tarafından ayrı adres (kod ve veri) alanları ayrılması sonucunu doğurur ve sözkonusu kesimlerin ortak verileri paylaşmalarını zorlaştırır. Bu paylaşım, çoğunlukla bir programın adres evreninden diğer bir programın adres evrenine veri aktarma yoluyla gerçekleşir.
Örneğin UNIX işletim sisteminde koşut çalışan iki ayrı programın (görevin) veri alış verişi, Birlikte Çalışan Görevler konu başlığı altında ayrıntılı olarak açıklanacağı üzere, genelde bir adres evreninden diğer bir adres evrenine veri aktarımı yapan pipe ve fifo gibi kimi görevlerarası veri iletişim araçları (sistem çağrıları) ile, işletim sistemi ve sistem kaynakları yönünden pahalı bir biçimde mümkün olabilmektedir.
Bu durum, aslında, işletim sisteminin her görevi tek bir işletim dizisi gibi görmesinden kaynaklanmaktadır. Tek bir program içinde birden çok koşut çalıştırılabilir işletim dizisi öngörülebilmesi durumunda bu dizilerin aynı adres evrenini paylaşması ve bu yolla veri alışverişinin kolaylaştırılması sağlanır. Bir program içinde yer alan koşut çalıştırılabilir kesimler işletim dizileri (threads) olarak adlandırılır.
Bu bağlamda görev, ilgili işletim dizilerinin çalıştığı ortak bir işletim ortamı olarak düşünülür. İşletim sistemi, ana bellek, giriş/çıkış (kütükler) gibi sistem kaynaklarını görevler düzeyinde atar ve o düzeyde izler. Bir görev içinde tanımlı işletim dizileri sözkonusu bu kaynakları paylaşırlar. Ancak işletim dizisi olarak tanımlanmış her kesimin kendine özgü bir program sayacı bulunur. Bu yolla ana işlem birim(ler)ine ayrı ayrı anahtarlanarak koşut bir biçimde işletilebilirler. Bir göreve ilişkin işletim dizilerinin ana işlem birimine anahtarlanmaları görev anahtarlamaya göre daha dar kapsamlı dolayısıyla daha hızlı ve daha ucuz bir yol olan bağlam anahtarlama yoluyla gerçekleşir.
İşletim dizileri, aynı görevler gibi, işletimleri sırasında hazır, bekler, çalışır gibi durumlarda bulunurlar.
İşletim dizilerinin yönetimi genelde, kullanıcı evreninde ya da işletim sistemi evreninde olmak üzere iki değişik biçimde gerçekleşir.
Eğer yönetim kullanıcı evreninde ele alınıyorsa işletim sistemi işletim dizilerinin varlığından habersizdir. Bu durumda kullanıcı evreninde çalışan bir yönetim paketi bir görev içinde tanımlanmış değişik işletim dizilerinin yönetimini üstlenir. Bir işletim dizisi herhangi bir nedenle işletimi bıraktığında, aynı görev içinde tanımlı hangi işletim dizisinin işletime alınacağını, ilgili görevle birlikte işletimde bulunan sözkonusu yönetim paketi belirler. Aynı yönetim paketi birden çok işletim dizisi içeren programlar tasarlanırken, programcılara işletim dizisi tanımlama, çalıştırma, durdurma, zamanuyumlama gibi işlevleri de sağlarlar. Başka bir deyişle bu tür programlar tasarlanırken ilgili paketin tanım ve işlevleri kullanılır. POSIX P-Threads ve Mach C-Threads, günümüzde bu tür işletim dizisi yönetim paketlerine verilebilecek iki örnektir.
Kimi modern işletim sistemleri, görevlerin yanı sıra görevler altında yer alan işletim dizilerinin yönetimini de üstlenir. Çok işletim dizili işlem (multi-threading), bu durumda işletim sisteminin bu amaçla sağladığı sistem çağrıları kullanılarak gerçekleştirilir. Windows NT böyle bir işletim sistemine verilebilecek en belirgin örnektir.
Çok işletim dizili işlemin, kullanıcı evreni yönetim paketleriyle mi yoksa işletim sisteminin sağladığı araçlarla mı ele alınması gerektiği halen tartışılan bir konudur. Her iki yaklaşımın da kendine özgü üstünlükleri ve sakıncaları sözkonusudur. Bununla birlikte UNIX gibi çok yaygın kullanımı olan işletim sistemlerinde çok işletim dizili işlemi, yukarıda anılan kimi yönetim paketleriyle gerçekleştirmenin dışında da başkaca bir seçenek mevcut değildir.
Birlikte çalışan görevler zaman içinde koşut işletilen görevlerdir. İki görevin koşut işletimi, bunlardan birinin işletimi tümüyle sonlanmadan diğerinin de işletime alınması durumunda sözkonusu olur.
Görev işletiminin koşutluğu gerçek ya da görüntü koşutluk olabilir. Birden çok işleyici içeren sistemlerde, eğer iki görev, her biri bir işleyiciye atanmış biçimde işletiliyorsa buradaki koşutluğa gerçek koşutluk denir. Tek ana işlem birimi içeren sistemlerde iki görevin koşut işletimi, bu görevlerin, zaman içinde ana işlem birimini sırayla kullanmaları yoluyla sağlanır. Buradaki koşutluk, doğal olarak görüntü koşutluktur. Zira bu durumda, mutlak anlamda, her iki görevin de aynı anda işletiliyor olması sözkonusu değildir.
Bir sistemde birlikte işletime alınan görev sayısı genelde, sistemde bulunan ana işlem birimi sayısından çok daha büyüktür. Bu nedenle koşut işletim, daha çok görüntü koşutluk kapsamında yürütülür. İster gerçek, ister görüntü olsun koşut işletim, çok önemli işletim bütünlüğü sorunlarını beraberinde getirir. İzleyen kesimde bu sorunların neler olduğu ve bunların nasıl aşılacağı incelenecektir.
Bu bağlamda, önce, koşut işletilen görevler arası etkileşimden söz edilecek ve bunun yarattığı sorunlar irdelenecektir.
Bu sorunların aşılmasına yarayan görevler arası alt düzey ve üst düzey zamanuyumlama araçları incelenecektir. Alt düzey araçlar kapsamında semaforlar ve bunlar üzerinde işlem yapan ilkel zamanuyumlama işleçleri açıklanacaktır. send ve receive ileti aktarım komutlarından, uzaktan yordam çağırma düzeneğinden ve monitor kavramından üst düzey zamanuyumlama araçları kapsamında söz edilecektir.
Son olarak, görevler arası zamanuyumlamanın yol açtığı görevler arası kilitlenme sorunu irdelenecek ve bu sorunu aşmak için kullanılan yaklaşımlar açıklanacaktır. Bu bağlamda verilen açıklamalar görev kavramı taban alınarak veriliyor olmakla birlikte görevlerin altında yer alan işletim dizileri için de, tümüyle geçerlidir.
Birlikte çalışan ya da işletimleri koşut sürdürülen görevler birbirleriyle etkileşebilirler. Bu etkileşme, görevlerin, işletimleri sırasında kimi kaynakları ortak kullanmalarından kaynaklanır.
Çıktı üreten bir kullanıcı görevi ile bu çıktıları yazıcıdan döken sistem görevi birlikte çalışan iki görevdir. Kullanıcı görevinin ürettiği çıktıların yazıcı sistem görevi tarafından dökülebilmesi, ilgili çıktıların bir görevden diğer göreve aktarılmasını gerektirir. Bu aktarım her iki görevin ortak erişebildiği bir ana bellek yastık alanı üzerinden gerçekleşebilir. Kullanıcı görevi, dökümü alınacak çıktıyı, ortak yastık alanıyla aynı boyda tutanaklar biçiminde, sırayla bu yastık alanına yazar. Yazıcı sistem görevi de, bu alandan okuduğu tutanakların yazıcıdan dökülmesini sağlar. Ortak yastık alanı üzerinden veri alış-verişi yapan görevlerden yastık alanına yazma yapan görev üretici, bu alandan okuma yapan görev ise tüketici olarak nitelenir. Verilen bu örnekte, bu nedenle, kullanıcı görevi üretici, yazıcı sistem görevi ise tüketici görev konumundadır.,

Birlikte Çalışan İki Görevin Gösterimi
Ortak bir yastık alan üzerinden veri alış-verişinde bulunan üretici ve tüketici görevler birbirlerinin işletimini etkileyen görevlerdir. Bu bağlamda, az önce verilen örnekte yazıcı sistem görevinin işletilebilmesi, kullanıcı görevinin dökülecek bir tutanağı ortak yastık alan üzerinde hazır etmesine bağlıdır. Bunun gibi kullanıcı görevinin, yeni bir tutanağı yastık alanına yazabilmesi, bir önce yazılan tutanağın yazıcı görev tarafından okunup dökülmüş olmasını gerektirir.
Birlikte çalışan görevlerin aralarındaki etkileşim, çoğu kez kaynak paylaşımından doğar. Kullanıcı ve yazıcı sistem görevleri, çıktı tutanaklarının yazılıp okunduğu ana bellek yastık alanını paylaşmaktadırlar. Paylaşılan kaynak ortak kaynak olarak adlandırılır. Birlikte çalışan görevler için ortak kaynaklar bir değişken, bir ana bellek yastık alanı, bir disk tutanağı, tümüyle bir kütük ya da bir giriş/çıkış birimi olabilir.
Bilgisayar sistem kaynaklarına, nitelikleri ne olursa olsun değişik sınıflandırmalar uygulanır.
Bu sınıflandırmalardan biri, kaynakları:
- bölüşülür kaynaklar,
ana işlem birimi, ana bellek, disk birimi gibi donanımsal kaynaklar - bölüşülmez kaynaklar
yazıcılar
olmak üzere ikiye ayıran sınıflandırmadır.
Bölüşülür kaynak, bir görev tarafından kullanımı tümüyle tamamlanmadan diğer görevler tarafından da kullanılabilen (tüketilebilen) kaynaktır. Bu bağlamda ana işlem birimi, ana bellek, disk birimi gibi donanımsal kaynaklar bölüşülür kaynaklardır. Örneğin ana işlem birimi, birden çok görev tarafından sırayla paylaşılabilen; bir görevin bu birimle ilgili kullanımı sonlanmadan bir diğer görevin kullanımına da sunulabilen bir kaynaktır. Bunun gibi, ana bellek de, birden çok amaç programı aynı anda saklayabilen bölüşülür bir kaynaktır. Birden çok programın, aynı anda ana bellekte saklanıyor olması programların işletimini etkilemez.
Bunun tersine yazıcılar bölüşülür kaynaklar değildir. Zira bir görevle ilgili döküm yapılırken bu döküm kesilerek diğer bir döküme geçilemez. Başka bir deyişle, yazıcılar bir görev tarafından kullanılmaya başlandığında, bu kullanım tümüyle sonlanana değin diğer görevlerin kullanımına sunulamaz.
Birlikte çalışan görevlerce paylaşılan değişken, yastık, tutanak, kütük, sürücü gibi kaynakların bölüşülür olup olmama özellikleri bu kaynaklar üzerinde yapılan işlemin türüne de bağlıdır. Kaynaklar üzerinde yapılan işlem türü ikidir. Bunlar okuma ve yazma işlemleridir.
Birlikte çalışan iki görev, ortak kaynağa, tüm olasılıklar gözönüne alındığında:
- okuma-okuma,
- okuma-yazma,
- yazma-okuma,
- yazma-yazma
işlem çiftlerini gerçekleştirmek üzere erişirler. Bu işlem çiftlerinden okuma-okuma çifti için kaynak her zaman bölüşülür özellik gösterir. Ancak diğer işlem çiftleri için kaynaklar bölüşülür değildir.
Bölüşülmez kaynaklar kritik kaynaklar olarak adlandırılır. Kritik kaynakların görevler tarafından paylaşılması önlem alınmadan yapılamaz. Kaynağa erişmeden önce kaynağın kullanım durumunun sınanması ve diğer görevlerin o anda kaynak üzerinde işlem yapmadıklarından emin olunması gereklidir. Bunun yapılmaması durumunda birlikte çalışan görevlerin işletim bütünlüğü korunamaz.
Kaynağın kullanım durumunun sınanması ve diğer görevlerin o anda kaynak üzerinde işlem yapmadıklarından emin olunması gerçekleştirilmez ise birlikte çalışan görevlerin işletim bütünlüğü korunamaz. Bunu örneklemek üzere sistem gerçek zaman saati kesilmelerini işleyen saat adlı bir görev ile günün saatini görüntülemeye yarayan göster ve saati kurmada yararlanılan öndeğerata adlı üç değişik görev düşünülmüştür.
Bu görevlerden saat görevi bir kesilme görevi olup her 10 ms'de bir oluşan ve sistem kesilme girişine bağlı saat vurularını sayarak saniye, dakika ve saat adlı, her üç göreve ortak değişkenleri günlemektedir. göster adlı görev bu ortak değişkenlerin içeriklerini, yerel değişkenlerinin içine aktararak görüntüleme işlemlerini gerçekleştirmektedir. öndeğerata görevi ise saniye, dakika, saat değişkenlerine öndeğer atamak (bu değerleri kurmak) için kullanılmaktadır. saat adlı görevin algoritmik görünümü çizimin a bölümündeki gibidir.
Birlikte Çalışan Görevler ve İşletim Bütünlüğü
saat, göster ve öndeğerata adlı görevlerin, herhangi bir önlem alınmadan birlikte işletimi sözkonusu olduğunda:
Saat 07:05:59 iken ve göster adlı görev yerel değişkenlerini saniye, dakika, saat genel değişkenleriyle günlerken, çizimin b bölümünde gösterildiği biçimde saat vurusu kesilme ürettiğinde; 07:06:00 yerine 07:06:59 görüntülenir.
saat:dakika:saniye değerleri 3:59:59 iken ve ilkdeğerata adlı görev saat, dakika ve saniye değişkenlerini sıfırlarken, çizimin c bölümünde gösterildiği anda saat görevi işletime alınırsa 00:00:00 öndeğeri yerine 01:00:00 öndeğeri atanmış olur.
Tek bağlı liste yapısını koşut olarak günleyen iki değişik görevin listeye, hiçbir önlem alınmadan öge eklemesi durumunda da işletim bütünlüğü kolayca bozulabilir. Sözkonusu tek bağlı listeye, {yeniöge.içerik; yeniöge.bağ} yapısındaki yeniöge,
yeniöge.bağ = ilköge;
ilköge = ¥iöge;
algoritmasıyla eklenebilir. ilköge liste başını gösteren değişkendir. Bu listeye C ve D adlı yeni ögelerin Gi ve Gj adlı görevler tarafından koşut olarak eklendiği; Gi görevi bu eklemeyi yaparken Görev Yönetici tarafından işletimi kesilerek Gj'nin işletime alındığı varsayılırsa Gj tarafından listeye eklenen D adlı ögenin listede görülemeyeceği durum ortaya çıkar.

Tek Bağlı bir Liste üzerinde Görevlerin Koşut Günleme Yapması
Verilen her iki örnekten de kolayca anlaşılacağı üzere, birlikte çalışan görevlerin kritik kaynaklara erişimi rasgele yapılamaz. Birden çok görev kritik kaynağı paylaşmak istediğinde, aralarında yalnız birinin kaynağı sahiplenmesine yol açacak önlemlerin alınması, bu görevlerin işletim bütünlüğünün korunması için gereklidir. Bunun için bir görevin kritik kaynak üzerinde işlem yaptığı bir anda diğer görevlerin de bu tür istemleri sözkonusu olursa, bu istemlerin, kaynak serbest kalana dek ertelenmesi gereklidir. Kritik kaynağa erişmeden önce, kaynağın kullanım durumunun sınanması, kaynak kullanılıyor ise amaçlanan erişimin ertelenmesi görevler arası zamanuyumlama olarak bilinir.
Kritik kaynağa erişim yapan program kesimleri kritik kesimler olarak adlandırılır. Kritik kaynağa aynı anda en çok bir görevin erişebilmesi kritik kaynağa erişim yapan görevlerden en çok birinin kritik kesimi içinde bulunm*asının sağlanmasıyla gerçekleşebilir.
Kritik kesimi içinde işlem yapan bir görevin diğer görevlerin aynı kaynağa erişim yapan kritik kesimlerine girmelerini engellemesi gerekir. Bu engelleme karşılıklı dışlama olarak tanımlanır. Başka bir deyişle görevler arası zamanuyumlama, görevler arası karşılıklı dışlama yoluyla gerçekleşir. Karşılıklı dışlama görevlerin kritik kesimlerine giriş ve çıkışlarında alınan önlemler yoluyla gerçekleştirilir.
Birlikte çalışan görevlerin işletim bütünlüğünün korunması için salt karşılıklı dışlamanın gerçekleştirilmesi yeterli olmaz. Karşılıklı dışlamanın sağlanmasının yanı sıra karşılıklı tıkanmanın da engellenmesi gerekir. Karşılıklı tıkanma, görevlerin, birbirlerinin işletimlerini karşılıklı olarak, sürekli engellemelerine verilen addır.
İşletim bütünlüğünün korunmasına yönelik önlemlerin yanı sıra sistem başarımını gözeten kıstaslar da göz önüne alındığında görevler arası zamanuyumlamada uyulması gereken kurallar ortaya çıkar. Bu kurallar özetle, aşağıdaki gibi sıralanabilir:
1. Birlikte çalışan görevlerden en çok biri, aynı anda kritik kesimine girebilmelidir (karşılıklı dışlamanın sağlanması).
2. Aynı anda ortak kaynağa erişmek isteyen görevlerden en az biri, sonlu bir süre için kritik kesimine girebilmelidir (karşılıklı tıkanmanın engellenmesi).
3. Kritik kesiminin dışındaki görevler ortak kaynağa erişmek isteyen görevleri engellememelidir.
4. Görevlerin göreli hız ve öncelikleri ile sistemde yer alan ana işlem birimi sayısı hakkında herhangi bir varsayım yapılmamalıdır.
Bu kurallar ışığında görevler arası zamanuyumlamanın ele alınışı izleyen kesimde açıklanmıştır.
Görevler arası zamanuyumlamanın gerçekleştirilmesinde kullanılan yöntemler, alt düzey ve üst düzey zamanuyumlama yöntemleri olarak iki kategoride düşünülür.
Alt düzey zamanuyumlama yöntemlerinden kimileri hiçbir özel donanım desteği gerektirmezken kimileri de, özel makina komutları ya da işletim sistemi çağrılarının kullanımını gerektirirler.
Üst düzey olarak nitelenen zamanuyumlama yöntemleri ise, genellikle alt düzey araçlar üzerine kurulurlar.
Görevler arası zamanuyumlamayı sağlamak üzere akla ilk gelen yol kesilme düzeneğinin kullanılmasıdır. Karşılıklı dışlamayı sağlamak üzere, bir görev kritik kesimine girerken sistemi kesilmelere kapayabilir. Bu yolla ana işlem birimi, bu görev tarafından, kritik kesim çıkışında yeniden kesilmelere açılıncaya kadar, görev yönetici adlı sistem görevi de dahil başka görevlere anahtarlanamaz. Böylece bu görevin birlikte çalıştığı görevlerin ana işlem birimine anahtarlanarak kritik kesimlerine girmeleri engellenmiş olur.
Birlikte Çalışan Görevler ve İşletim Bütünlüğü çiziminde verilen göster, öndeğerata ve saat adlı birlikte çalışan görevler arası karşılıklı dışlamanın sağlanması bu yolla gerçekleştirilmek istenirse göster ve öndeğerata adlı görevler içinde, ortak değişkenlere erişim yapan komut dizilerinin, disable-interrupt (di), enable-interrupt (ei) komutlarıyla ayraç arasına alınması; saat adlı görevin ise, tümüyle kesilmelere kapalı olarak işletilmesi gereklidir.
göster ve öndeğerata adlı yordamlarda sistemin, zamanuyumlama amacıyla kesilmelere kapatıldığı süreler üç aktarım komutunun işletim süresi kadardır. Bu komutların her birinin işletim süresinin yüz nanosaniye olduğu varsayılırsa sistemin kesilmelere kapalı kaldığı süreler yarım mikrosaniyeyi geçmez. Salt saat kesilmeleri yönünden bakıldığında, her 10 milisaniyede bir gelen saat vuruları için bu durum bir sakınca oluşturmaz.
Ancak, birlikte çalışan görevler arası zamanuyumlamanın gerçekleştirilmesinde kesilme düzeneğinin kullanılması genelleştirilebilir bir yöntem değildir. Sistemin zamanuyumlama amacıyla ortak kaynağa erişim yapan komut dizileri için kesilmelere kapatılması, sistemin kesilmelere kestirilemez uzunlukta kapalı kalmasına ve işletim bütünlüğünü diğer yönlerden zedeleyecek sakıncaların doğmasına neden olabilir.
Yukarıdaki örnekte yarım mikrosaniye olarak belirlenen sistemin kesilmelere kapalı kalma süresinin daha uzun olması, saat vurularının da, 10 milisaniye yerine 10 mikrosaniyede bir geldiği varsayıldığında kimi saat vurularının sayılamadığı sakıncalı durumun ortaya çıkacağı kolayca görülebilir. Bu da, sistemin, sayışım yönünden işletim bütünlüğünü tümüyle bozan bir durumdur.
Kritik kesimlerin kesilmelere kapalı olarak işletilmesi ana işlem biriminin tüm dış uyarılara kapatılması anlamına gelir. Bunun yapılması, bu uyarılar aracılığıyla ana işlem birimine anahtarlanarak çalışacak ve sistemin kesilmelere kapatılmasını gerektiren kritik kaynakla ilgisi olmayan görevlerin de işletimlerini engeller. Bu da sistemin genel başarımını olumsuz yönde etkiler. Bu durumda, zamanuyumlamayı kurmak amacıyla kesilme düzeneği ile oynamak, köktenci ve kaba bir yöntem olarak ortaya çıkar.
Bu yöntemin en önemli sakıncası, kesilme düzeneğinin denetimini sistemde çalışan çok sayıda göreve, özellikle çekirdek katman dışındaki görevlere de dağıtmasıdır. Kesilme düzeneğinin tutarlı yönetimi güvenli bir işletim için vazgeçilmez bir gerekliliktir. Sistemin kesilmelere açılıp kapatılması gibi temel bir aracı her düzeyden (ayrıcalıklı ve sıradan) görevin inisyatifine bırakmak, kesilmelerin yönetimini bu görevlerle paylaşmak anlamına gelir.
Sistemde birlikte çalışan görevleri her düzeyden kullanıcının tanımlayabileceği düşünüldüğünde bunun, güvenli işletim ve koruma ilkeleri yönünden çok sakıncalı bir yaklaşım olduğu kolayca görülür. Bu gerekçelere dayalı olarak kesilme düzeneğinin görevler arası zamanuyumlamada kullanılması, geçerli bir yol olarak benimsenemez.
Birlikte çalışan görevlerin kritik kesimlere giriş ve çıkışlarında zamanuyumlamanın, görev algoritmalarına katılan sınamalar yolu ile gerçekleştirilmesi akla gelen diğer bir yoldur. Bu bağlamda, aynı kritik kaynağa erişen görevler programlanırken, örneğin, kaynağın kullanım sırasını belirleyen bir gösterge (sıra göstergesi) öngörülür. Ortak kaynağa erişmek isteyen bir görev kritik kesimine girişte bu sıra göstergesini (değişkenini) sınar. Eğer gösterge sıranın sınayan görevde olduğunu gösteriyorsa kritik kesime girilip ortak kaynağa erişilir. Bunun tersi olduğu sürece, sürekli sınamalarla, sıranın gelmesi beklenir. Kritik kesimine giren görev, çıkışta sıra göstergesini, kendisini izleyen görevin sırasını gösterecek biçimde günler. Açıklanan bu algoritma aşağıda verilen çizimde, birlikte çalışan iki görev için örneklenmiştir.
Sıra Değişkeni ile Zamanuyumlama
Görevler arası zamanuyumlamada, uyulması gereken kurallar yönünden incelendiğinde, sıra değişkenini kullanan bu algoritmanın, karşılıklı dışlama ve karşılıklı tıkanma diye tanımlanan, işletim bütünlüğüyle ilgili kuralların gereğini yerine getirdiği ancak, yukarıda, üçüncü sırada verilen kuralı karşılamadığı görülmektedir. Zira bu algoritma ile görevler kritik kesimlerine "bir o bir bu" diye nitelenebilen değişmez bir sırada erişebilmektedirler.
Bir görev kritik kesiminden çıkışta erişim sırasını diğer görev ya da görevlere bırakmakta, bu görevler kritik kesimlerine girmedikleri sürece bir daha kritik kesimine girme hakkı kullanamamaktadır. Bu da, bir görevin kritik kesiminin dışında olmasına karşın diğer görevlerin kritik kesimlerine girmelerini engelleyen bir durum yaratmaktadır. Bir tutanaklık yastık alanı üzerinden iletişim kuran üretici ve tüketici iki görev örneğinde olduğu üzere yürütülen uygulamanın türü, değişmez sırada işletimi gerektirmiyorsa, bu durum, bu yaklaşım için önemli bir sakıncayı oluşturur.
Görevleri ortak kaynağa değişmez bir sırada erişmeye zorlayan bu yaklaşımın aşılması amacıyla, sıra değişkeni yerine kaynağın kullanım durumunu gösteren ikili bir değişkenin kullanılması düşünülebilir. Bu durumda, sözkonusu değişkenin sıfır değerini içermesi kaynağın kullanılmakta olduğunu, bir değerini içermesi ise kaynağın serbest olduğunu simgeler. Ortak kaynağa erişmek isteyen görevler kritik kesimlerine girmeden önce bu değişkeni sınarlar. Değişken içeriğinin sıfır bulunması durumunda, kritik kesim girişinde bekleme sürdürülür. Değişken içeriğinin bir bulunması durumunda ise içerik sıfırlanarak kritik kesime girilir. Kritik kesim çıkışında değişken içeriği kurularak (birlenerek) diğer görevlerin kaynağa erişebilmesi sağlanır. Aşağıdaki çizimde sözkonusu bu algoritma, iki görev için örneklenmiştir.
Çalışmayan Zamanuyumlama Algoritması
İlk bakışta sıra değişkenini kullanan algoritmaya benzeyen ve görevler arası zamanuyumlamayı sağlayacağı sanılan bu yöntem, ne yazık ki gerçekleştirime ilişkin nedenlerle karşılıklı dışlamayı sağlayamaz. C dili benzeri algoritmik bir dille, az önce verilen Çalışmayan Zamanuyumlama Algoritması'nın, ASM86 simgesel diline dönüştürülmüş (ya da derlenmiş) biçimi düşünüldüğünde aşağıda verilen örnek elde edilir. Bu örnekte durum değişkeninin sınanması cmp komutu ile yerine getirilmektedir. cmp durum, 0 komutu işletilirken durum değişkeninin içeriğinin sıfır olması (program durum yazmacı içinde sıfır bitinin kurulu olması) durumunda, kritik kesime girmek yerine sınamayı yeniden yapmak, başka bir deyişle, beklemeyi sürdürmek üzere karşılaştırma komutuna geri dönülmektedir.
durum değişkeninin içeriği bir (kaynak kullanımı serbest) iken, GÖREV1'in işletimi cmp komutunun işletiminden hemen sonra kesilip GÖREV2'nin ana işlem birimine anahtarlandığı düşünülürse, bu son görevin de, durum değişkeni içinde bir değerini bularak kritik kesimine hiç beklemeden gireceği söylenebilir. Bu kez, GÖREV2'nin işletiminin kritik kesimi içinde kesilip GÖREV1'in yeniden işletime alındığı düşünülecek olursa, bu görevin, jz bekle1 komutundan başlayarak işletileceği görülür. jz bekle1 koşullu sapma komutu bir önceki işletimde, durum değişken içeriği bir iken kurulan ve GÖREV1 ana işlem birimine anahtarlandığında program durum yazmacını günleyen sıfır durum bitine dayalı olarak uygulanır. Böylece GÖREV1 için de, bekle1 konumuna sapılmadan kritik kesime girileceği görülür. Bu, her iki görevin de kritik kesimlerini birlikte işletmeleri (ortak kaynağa eşanlı erişmeleri), başka bir deyişle karşılıklı dışlama kuralının ihlali anlamına gelir.
Bu gerekçeye dayalı olarak az önce verilen Çalışmayan Zamanuyumlama Algoritması'nda ve aşağıda verilen çizimde sunulan zamanuyumlama algoritmalarının geçerli olmadığı söylenir. Durum değişkenini sınama ve sıfırlama işlemlerinin tek bir adımda yapılamamasından kaynaklanan bu duruma, (test-and-set) "sına-ve-kur" türü komutlar açıklanırken yeniden geri dönülecektir.
Durum Değişkenini kullanan Algoritmanın Gerçekleştirimi
sıra adlı değişkeni kullanan algoritmanın birlikte çalışan görevleri değişmez sırada işletime zorlaması, durum adlı değişkeni kullanan algoritmanın ise, ilk elde aranan karşılıklı dışlamayı bile sağlayamaması birçok kişiyi yazılımsal yolla görevler arası zamanuyumlamayı, verilen dört kurala da uyarak sağlayacak algoritma arayışına itmiştir.
Bunlardan Dekker, ilk kez matematiksel doğrulukta bir algoritmayı öneren matematikçi olmuştur. Dekker'in önerdiği algoritma, birlikte çalışan iki görev için aşağıda verilmiştir. Bu algoritmaya göre birlikte çalışan iki görevin kritik kesimlerine eşanlı olarak girmeleri, koşul1 ya da koşul2'nin, ilgili görevin kritik kesimine girmesinden önce mutlaka false olmasından dolayı olanaksızdır. Karşılıklı tıkanma, sıra'nın kritik kesime girmezden önceki karar bölümünde içerik değiştirmemesi sayesinde önlenmektedir. Çizimde verilen birlikte çalışan görevler işletime alınmadan önce koşul1 ve koşul2'nin false değerine kurulması gereklidir.
Görevler arası Zamanuyumlamada Dekker Algoritması
Bir önceki sayfada açıklanan ve algoritmik diye adlandırılan yaklaşımla, karşılıklı dışlama ve karşılıklı tıkanma gibi yalın sayılabilecek kavramsal kuralları uygulamaya sokmada karmaşık, anlaşılması pek de kolay olan bir çözüme ulaşılmıştır. Bu zorlama, daha çok eldeki makina komutların yetersizliğinden kaynaklanmıştır.
Aşağıda yinelenen çizimde verilen ve çalışmayan algoritmayı çalışır kılmanın yollarını aramak, Dekker Algoritmasıyla ulaşılan zorlama ve karmaşıklığı ortadan kaldıracaktır. Daha önce de belirtildiği gibi bu çizimde verilen algoritmanın doğru çalışmaması, sınama ve sıfırlama işlemlerinin tek bir adımda yapılamamasından kaynaklanmaktadır. Anılan bu işlemleri tek bir adımda yapmayı sağlayan komutların, makina komutları arasına katılarak kullanılması, izleyen kesimde açıklanan ilk yöntem kapsamında ele alınacaktır.
Çalışmayan Zamanuyumlama Algoritması
İlk bakışta sıra değişkenini kullanan algoritmaya benzeyen ve görevler arası zamanuyumlamayı sağlayacağı sanılan bu yöntem, ne yazık ki gerçekleştirime ilişkin nedenlerle karşılıklı dışlamayı sağlayamaz. C dili benzeri algoritmik bir dille, az önce verilen 'nın, ASM86 simgesel diline dönüştürülmüş (ya da derlenmiş) biçimi düşünüldüğünde aşağıda verilen örnek elde edilir. Bu örnekte durum değişkeninin sınanması cmp komutu ile yerine getirilmektedir. cmp durum, 0 komutu işletilirken durum değişkeninin içeriğinin sıfır olması (program durum yazmacı içinde sıfır bitinin kurulu olması) durumunda, kritik kesime girmek yerine sınamayı yeniden yapmak, başka bir deyişle, beklemeyi sürdürmek üzere karşılaştırma komutuna geri dönülmektedir.
Görevlerin kritik kesimlerine, ortak bir ikili değişkeni sınayarak girmelerini ilke olarak benimseyen ve zamanuyumlama sorununa yalın bir biçimde yaklaşan yöntemin (Çalışmayan Zamanuyumlama Algoritması) doğru çalışabilmesi, bu ikili değişkeni sınama ve gerektiğinde kaynağın kullanımda olduğunu belirten değerle günleme işlemlerinin bölünmez bir biçimde, tek adımda yapılabilmesine bağlıdır. Durum Değişkenini kullanan Algoritmanın Gerçekleştirimi çiziminde, simgesel dil ile verilen algoritmada sınama ve sıfırlama işlemleri:
komut dizisi ile gerçekleşmektedir.
Bu komut dizisinin bölünmezliği, bunları içeren görevin işletiminin bu komutlar arasında kesilememesi anlamına gelmektedir. Ana işlem biriminin bir görevden alınıp diğer bir göreve atanması kesilme uyarılarına dayalı olarak yapıldığından anılan bölünmezlik ana işlem biriminin bu komutlar işletilirken kesilememesi olarak da yorumlanabilir. Sistemin, bu komutlar işletilirken kesilmelere kapatılması bölünmezlik sorununu çözebilir. Ancak kesilme düzeneğinin denetimini sıradan görevlere de bırakmak anlamına gelen bu çözüm yolu, daha önce de belirtildiği üzere benimsenen bir yol değildir. Bunun yerine, zamanuyumlama değişkenleri üzerindeki sınama ve günleme işlemlerini tek bir adımda yerine getirecek özel komutlar, sistem tasarımı aşamasında makina komutları arasına katılır. Bu komutlar (test-and-set), "sına-ve-kur" türü komutlar olarak adlandırılır.
test-and-set türü komutlar genelde iki işlenen içerirler. Bu işlenenlerden biri (durum), çoğu kez ortak kaynağın kullanım durumunu gösteren ve birlikte çalışan görevlerin hepsinin paylaştığı genel bir ana bellek değişkenidir. Diğer işlenen ise (reg) göreve özel bir yazmaç olabilir.
ts reg, durum
ts komutu durum adlı değişkenin içeriğini reg adlı yazmaca aktarırken, aynı zamanda bu değişkenin içeriğini sıfırdan farklı bir değere kurar. Bu komut sonrasında reg adlı yazmaç, durum değişkenin içeriğini taşırken durum değişkeni de, bir önceki içeriği ne olursa olsun sıfırdan farklı bir değer taşır. ts al, durum türü bir makina komutunun 80X86 türü işleyicilerin makina komutları arasında yer aldığı varsayılırsa, kullanımı aşağıda verilen biçimde örneklenebilir.
test-and-set Komutunun Kullanımı
Bu örnekte bir görev kritik kesimine girmeden önce ts al, durum komutu ile ortak kaynağın kullanımda olup olmadığını belirten durum adlı gösterge içeriğini, göreve özel al yazmacına aktarmakta, eşanlı olarak durum değişkeninin içeriğini de, örneğin ffh değerine kurmaktadır. Bu komut sonrasında al yazmacı sıfır değeriyle karşılaştırılarak ortak kaynağın kullanılıp kullanılmadığı sınanmaktadır. al içinde sıfır değerinin bulunması kaynağın kullanılmadığını göstermektedir. Bu durumda eğer al içinde sıfırdan farklı bir değer bulunursa, sınamayı yinelemek (beklemek) üzere ts al, durum komutuna geri dönülmekte, sıfır bulunması durumunda ise kritik kesime girilmektedir. Ortak kaynağın serbest olduğu bir anda, kritik kesimlerine girmek üzere durum değişkenini eşanlı olarak sınayan görevlerden sınamayı ilk başlatan görev durum içeriğini sıfır bulmakta ve bölünmez olarak hemen bunu sıfırdan farklı bir değere günlemektedir. Böylece durum değişkeni üzerinde eşanlı sınama yürüten diğer görevlerin kritik kesimlerine girmeleri önlenmektedir. Kritik kesim çıkışında durum değişkeninin içeriğinin, klasik mov türü bir komutla sıfırlanması, ortak kaynağı serbest bırakmak için yeterli olmaktadır.
ts türü komutlar ilk kez IBM System/360 serisi bilgisayar sistemlerinde, gerek işletim sistemi geliştirmeye gerekse çok işleyicili sistem mimarilerine destek verebilmek amacıyla kullanılmıştır. Günümüzde hemen hemen tüm işleyicilerde ts türü komutlara ya aynı adla ya da başka adlarla yer verilmektedir. Bunlardan örneğin Motorola 680X0 serisi işleyicilerin tas (test-and-set), Intel 80X86 serisi işleyicilerin ise xchg (exchange) komutları bulunmaktadır.
xchg dest, src komutu, ts komutu örneklenirken belirtildiği gibi, iki işleneni olan bir komuttur. Bu işlenenlerden biri mutlaka bir yazmaç, diğeri ise herhangi bir değişken ya da başka bir yazmaç olabilmektedir. Komut işletildiğinde:
temp <-- dest
dest <-- src
src <-- temp
işlemlerini bölünmez biçimde gerçekleştirmektedir. temp, işleyicinin programlanır yazmaçları arasında yer almayan ancak geçici olarak değer saklamaya yarayan bir yazmacını simgelemektedir. xchg dest, src komutunun, birlikte çalışan görevlerin kritik kesimlerine girişini denetlemede kullanımı aşağıda örneklenmiştir.
xchg Komutunun Kullanım
Bu örnekten xchg komutu ile ts komutu arasındaki tek ayrımın, ts komutunun ortak değişkeni (durum'u) kendiliğinden, sıfırdan farklı bir değere kurması olduğu görülür. xchg komutu ise durum'u, değiş tokuş edilen yazmacın içeriği ile günlemektedir. Buradan her iki komutun da özdeş işlemler gerçekleştirdikleri kolayca anlaşılır.
ts ve xchg komutlarının durum adlı genel değişken ile kullanımı, tek ana işlem birimi içeren sistemlerde görevler arası zamanuyumlamayı gerçekleştirmede yeterlidir. Ancak görevler birden çok ana işlem biriminin bulunduğu çok işleyicili bir sistemde çalışıyorsa, bu komutların örneklerde verilen biçimde kullanımları, karşılıklı dışlamayı sağlamada yetersiz kalır.
Çok işleyicili sistemlerde çoğu kez bellek, tüm işleyicilerin erişebildiği ortak bellek ve işleyicilere özel yerel belleklerden oluşan düzendedir. İşleyicilerin ortak belleğe erişimleri, adres ve veri hatları ile kimi ilgili denetim imlerinden oluşan ortak bellek yolunun kullanım istemlerini ele alan bir hakem donanımın (bus arbitration logic) denetiminde koşut biçimde gerçekleşir.
Bir işleyici ortak belleğe erişirken, (aynı doğrudan bellek erişim denetleme birimiyle olduğu üzere) diğer bir işleyici bunun erişimini bölerek aynı bellek sözcüğüne koşut olarak erişebilir. Bu durumda, ortak değişken üzerinde işlem yapan test-and-set komutunun işletim bütünlüğü bozulur. durum adlı ortak değişkenin sıfır değerini içerdiği bir aşamada bir görev, xchg komutunu işleterek bu değişkenin içeriğini temp içine aldıktan hemen sonra, bu görevin anahtarlı olduğu işleyicinin bellek erişimi bölünerek, başka bir işleyici, başka bir görev için, yine xchg al,durum komutunu işletmek üzere aynı durum değişkenine erişirse, değişik işleyiciler üzerinde çalışan her iki görev de durum içinde sıfır değerini okumuş olur. Bu, her iki görevin de kritik kesimlerine birlikte girmeleri, başka bir deyişle karşılıklı dışlama kuralının ihlali demektir.
xchg Komutunun Kullan
80386'dan başlayarak Intel 80X86 işleyicilerinde xchg komutu, 8086'dan farklı olarak lock öneki konsun ya da konmasın hep bellek erişim döngüsü bölünmeyecek biçimde işletilmektedir. Bu nedenle, bu işleyicilerde lock sözde komutu bulunmakla birlikte xchg komutu önek gerektirmemektedir. Sözkonusu önek, bellek erişim döngüsünün kilitlenmesini gerektirebilen bt (bit test), bts, btr, btc, add, xor, inc, dec gibi diğer komutlarla kullanılmaktadır.
Motorola 680X0 serisi işleyicilerde, genel değişkenleri sınama ve kurmayı tek adımda gerçekleştiren tas (test-and-set) komutu bulunmaktadır. Bu komut da, aynı xchg komutunda olduğu gibi, işleyici yol kullanım izinlerine kapalı olarak işletilmekte ve önek gerektirmemektedir.
ts komutları çoğu kez, bellek erişiminin kilitlenmesini kendiliğinden yerine getiren komutlar olarak tsl (test and set lock) bellenir simgesiyle de anılmaktadırlar. tas, xchg gibi komutların yanı sıra, işletim ve bellek erişim bölünmezliği sağlanmış örneğin increment memory gibi, görevler arası zamanuyumlamayı kurmada yararlanılabilen diğer başka komutlar da bulunur. IBM System/370 serisi bilgisayar sistemleriyle ilk kez kullanılan compare-and-swap komutu da, bu konuda verilebilen diğer bir örneği oluşturur.
1960'lı yıllarda, birlikte çalışan görevler arası zamanuyumlamayı gerçekleştirecek algoritma arayışlarının tatmin edici sonuçlar vermemesi bu zamanuyumlamayı sağlamada kullanılacak kimi ilkel işleçlerin kuramsal olarak tanımlanmasını gerekli kılmıştır. İlk kez 1965 yılında Dijkstra, iki ya da daha çok görev arasında karşılıklı dışlamayı sağlayacak, semafor (S) adlı, özel, artı tamsayı türündeki değişkenler üzerinde işlem yapan P (S) ve V (S) adlı ilkel işleçleri tanımlamıştır.
Bu yolla ulaşılan Dekker Algoritması matematiksel yönden tam doğru olmakla birlikte en çok iki görevin zamanuyumlamasında kullanılabilmekte, yalın bir biçimde ikiden çok göreve genelleştirilememektedir. Bu önemli kısıtlamadan dolayı pratikte uygulanamamıştır.
Semaphore, Latince kökenli dillerde deniz feneri anlamına gelmektedir.
Bu tanıma göre P(S); bölünmez (atomik) biçimde S değişkenini sınayan eğer S sıfırdan büyükse içeriğini bir eksilten, değilse beklemeyi sağlayan bir işleç tanımı içerir.
V(S) ise S değişkenini bir artırmayı sağlayan bir işleç olarak tanımlanır.
Bunların ilkel işleçler olmaları daha alt düzey işlemlerle ifade edilemedikleri anlamına gelir. İlkel işleçler doğal olarak bölünemezler. P(S) ve V(S)'nin algoritmik tanımları aşağıda verilmiştir:
P (S) ve V (S) işleçlerinin görevler arası zamanuyumlamada kullanımı, kritik kesimlerin bu işleçlerle ayraç arasına alınması yoluyla olur:
.
P (S);
{Kritik Kesim}
V (S);
.
Bir görev kritik kesimine girmeden önce P(S) işlecini çalıştırır. S'nin içerdiği değere göre ya kritik kesimine girer ya da bu işleç üzerinde bekler. Kritik kesim çıkışında mutlaka V(S) işlecinin çalıştırılması gerekir. Bu tanımlara göre S'nin salt 0 ve 1 değerlerini alabildiği görülür. Salt 0 (meşgul) ve 1 (serbest) değerlerini almasına izin verilen semaforlara ikili semaforlar denir.
Verilen tanımlara bakılarak P(S) işlecini, kullanım durumu S adlı ortak değişken ile simgelenen ortak kaynak serbest kalıncaya kadar beklemeyi sağlayan; V(S) işlecini ise, S değişkenini, ortak kaynağın kullanılır olduğunu belirleyecek biçimde günleyen işleçler olarak yorumlamak mümkündür.
Bu yoruma dayalı olarak, P(S) ve V(S) işleçlerinin gerçekleştirimi söz konusu olduğunda, bunun test-and-set türü komutlarla yerine getirilebileceği görülür. Bu bağlamda test-and-set Komutunun Kullanımı ya da xchg Komutunun Kullanımı çizimlerinde verilen örneklerin, P(S) ve V(S) işleçlerinin birer gerçekleştirimi olduğu söylenebilir.
Bu örneklerde, herhangi bir görev kritik kesimine girmeden önce semaforu sınamakta, ortak kaynağın meşgul olduğu durumlarda bu sınamaları yineleyerek kaynağın boşalmasını beklemektedir. Bu durumda, erişeceği kritik kaynak meşgul olan bir görev, sırası gelip ana işlem birimine anahtarlandığında kendisine ayrılan süre boyunca gerçekleşmeyecek bir koşulun oluşmasını bekleyerek, gereksiz yere ana işlem birimini meşgul edecektir. Zira kritik kaynak, onu kullanırken ana işlem birimini yitiren görevin tekrar ana işlem birimine anahtarlanarak çalışması sonucu serbest kalacaktır.
Sistem başarımını olumsuz yönde etkileyecek görevin serbest kalması durumunun ortadan kaldırılması için zaten kuramsal tanımları itibarıyla işletim sistemi işlevleri olarak düşünülen P(S) ve V(S) işleçlerinin gerçekleştiriminde, işletim sistemiyle etkileşimi taban alan bir yaklaşımın kullanılması gereklidir. Bu nedenle erişeceği kritik kaynak meşgul olan bir görevin, P(S) işlecini çalıştırması durumunda, gereksiz sınamalarla zaman öldürmek yerine bu kaynakla ilgili bir zamanuyumlama kuyruğuna bağlanarak ana işlem birimini serbest bırakması daha uygun bir gerçekleştirim biçimi olacaktır.
Bunun sonucunda V(S) işlecinin de, S'yi bir artırmanın yanı sıra S'ye ilişkin kaynağa erişebilmek üzere bekleyen bir görevi, ilgili zamanuyumlama kuyruğundan hazır görevler kuyruğuna aktarmayı sağlaması gerekecektir. Bu ilkeler çerçevesinde P(S) ve V(S) işleçlerinin uygulamaya dönük tanımları aşağıdaki çizimde, ASM86 simgesel dili ile uygulama örnekleri de P ve V İşleçlerinin Gerçekleştirim Örneği'nde verilmiştir.
P ve V İşleçlerinin Uygulamaya Dönük Tanımları
Burada verilen uygulama örneğinde, P(S) ve V(S) işleçleri birer makro biçiminde ele alınmıştır. durum ile korunan ortak kaynağın meşgul olduğu bir sırada P(durum) makrosunu çalıştıran görevin suspend adlı diğer özel bir makro ile, durum semaforuna ilişkin kuyruğa bağlanacağı; V(durum) makrosunu çalıştıran görevin ise, durum semaforuna ilişkin kuyruğun boş olmaması durumunda, kuyruk başındaki görevi hazır görevler kuyruğuna resume makrosu ile aktaracağı düşünülmüştür. Bu bağlamda int 1ch yazılım kesilmesinin, işletim sistemi için, zamanuyumlama kuyruklarıyla ilgili hizmetlere atandığı; bu kesilmenin al yazmacı içinde aktarılan:
- 05 parametresiyle, kimliği verilen görevi, yine kimliği verilen bekleme kuyruğuna bağlamayı sağladığı;
- 06 parametresiyle, kimliği verilen görevi, yine kimliği verilen bekleme kuyruğundan hazır görevler kuyruğuna aktarmayı sağladığı;
- 07 parametresiyle, kimliği verilen bekleme kuyruğunun başındaki görev kimliğini al yazmacı içinde döndürdüğü varsayılmıştır.

P ve V İşleçlerinin Gerçekleştirim Örneği
P adlı makro içinde, suspend(görev-kimliği,durum-kuyruğu) makrosunun hemen ardından jmp yine komutu ile makro başına dönülmektedir. suspend makrosunu çalıştırarak işletimini durduran bir görevin, bir sonraki işletiminde işleteceği ilk komut, bu makroyu izleyen komut olacaktır. Bu konuma jmp yine komutunun konmaması durumunda, resume makrosu ile hazır görevler kuyruğuna bağlanarak işletime alınan bir görevin, semaforu sınamadan kritik kesimine hemen gireceği görülür.
Görevlerin ana işlem birimine anahtarlanma sırası konusunda herhangi bir varsayım yapma olanağı bulunmadığından bu durum, daha önce işletime alınarak kritik kesimini işleten diğer bir görevle eşanlı olarak ortak kaynağa erişmeye, dolayısıyla karşılıklı dışlama kuralının ihlaline neden olabilir. Bu nedenle görevleri kritik kesimlerini işletmeden hemen önce semaforu sınamaya zorlamak gerekmektedir. Bu amaçla jmp yine komutu ile makro başına dönülmektedir. Bu zorlama, P ve V İşleçlerinin Uygulamaya Dönük Tanımları çiziminde, V(S) içinde, semafor kuyruğu boş değilse, kuyruktan bir görevin hazır görev kuyruğuna bağlanmasından önce S'nin yeniden eksiltilmesi yoluyla sağlanmaktadır.
Görevlerin ortak bir kaynağa erişirken, zamanuyumlama amacıyla bekledikleri kuyruklar, bu kaynağı korumada yararlanılan semafora bağlı bekleme kuyrukları olarak tanımlanır. Ancak bu kuyrukların, giriş/çıkış işlemlerinin sonlanmasının beklendiği giriş/çıkış bekleme kuyrukları ile karıştırılmaması gerekir.
Anımsanacağı üzere, görev yönetimi incelenirken bunlar, giriş/çıkış bekleme (G/Çi) ve (Si) semafor (zamanuyumlama) bekleme kuyrukları olarak ayrıştırılmıştır. Bu bağlamda, ortak kaynağa koşut biçimde erişecek görevler, aralarında zamanuyumlama sağlamak üzere kullanacakları ortak değişkeni (S) sıradan bir değişken olarak belirleyemezler. Bu değişkenin, görevleri programlamada kullanılan programlama dili derleyicisi tarafından bilinen özel tür (semafor türü) bir değişken olması gereklidir. Bu yolla, görevler derlenirken, amaç programlar içine, işletim aşamasında bu özel değişkenle ilgili zamanuyumlama bekleme kuyruğunun yaratılmasını gerçekleştirecek sistem çağrı(lar)ının konması sağlanır.
Buradan, ortak kaynağın kullanım durumunu simgeleyen değişkenin, aynı integer, real, boolean gibi özel bir adla anılan ve sistemce tanınan bir türde olması gerektiği daha kolay anlaşılacaktır. Birlikte çalışan görevleri programlamaya olanak veren Concurrent C, Concurrent Pascal, Ada, Modula gibi programlama dillerinde, bu nedenle, genelde semaphore diye anılan özel bir değişken türü bulunmaktadır.
Birlikte çalışan görevlerin içine, sıradan programcılar tarafından yerleştirilen semaforların her biri, işletim aşamasında zamanuyumlama kuyruğu tanımlarına dönüşmek durumundadır. Bu semaforların her biri için ayrı bir bekleme kuyruğunun tanımlanması, sistemde aynı anda var olan (Aşağıdaki çizimde Si olarak adlandırılan) kuyruk sayısını aşırı bir biçimde artırabilir.

Ayrıntılı Görev Kuyruk Çizeneği
Bu, işletim sisteminin, görev yönetimi kapsamında kuyruk yönetim yükünün aşırı artması anlamına gelir. Gerçekleştirim yönünden bakıldığında, kimi durumlarda, semaforların her biri için ayrı bir kuyruk öngörmek yerine semaforları (dolayısıyla kritik kaynakları) belirli kıstaslara göre gruplayarak bu gruplar için, tek bir semafor, dolayısıyla tek bir kuyruk öngörmek de düşünülebilir. Doğal olarak bu durum, birlikte çalışan görevler yönünden, işletim hızının ve sistem başarımının düşmesi sonucunu doğuracaktır.
Zira bir görev kendi kritik kaynağı serbest olmasına karşın, ortak bir semaforla korunan kendi grubundaki başka bir kaynağın kullanılıyor olması nedeniyle bekleme durumunda kalabilecektir. Bu sorun, yönetim yükü ve işletim hızı kıstasları arasında bir uzlaşma noktası bulunarak işletim sisteminin gerçekleştirimi aşamasında çözülecek bir sorundur.
Şimdiye kadar verilen kuramsal semafor tanımları ve gerçekleştirim örnekleri, ikili olarak nitelenen semaforları sözkonusu etmiştir. Dijkstra tarafından artı tamsayılar evreninde tanımlanan semafor işleçleri, eksi tamsayıları da kapsayacak işleçler biçimine dönüştürüldüğünde, ilgili semafor üzerinde bekleyen görev sayısını (kuyruk boyunu) belirleme olanağı da bulunur.
Eksi tamsayı değerleri de alabilen semaforlar sayan semaforlar ya da genel semaforlar olarak adlandırılır. Sayan semaforlar üzerinde işlem yapan P ve V işleçlerinin tanımları aşağıda verilmiştir.
Sayan Semaforlar üzerinde işlem yapan P ve V İşleçleri
Bir bilgisayar sisteminde birlikte çalışan görevler paylaştıkları ortak kaynaklara, ya okuma ya da yazma amacıyla erişirler. Daha önce de belirtildiği üzere, ortak kaynağa yazma yapan görev üretici görev, kaynaktan okuma yapan görev de tüketici görev olarak tanımlanır.
Bu durumda, ortak bir yastık üzerinden iletişimde bulunan görevlerin üretici-tüketici ilişkisi içinde bulundukları söylenir. Ürettiği çıktıları (damga dizgilerini), N tutanaktan oluşan bir yastık alanı üzerine yazan bir kullanıcı görevi ile, bu çıktıları yazıcıdan döken bir yazıcı görevi üretici-tüketici görevlere örnek olarak verilebilirler.
Sayan semaforların kullanımını örneklemek üzere, birlikte çalışan bu görevlerin programlanması ele alınmıştır. Bu bağlamda, kullanıcı görevinin ürettiği çıktıları, tutanak tutanak, yastık alanındaki boş tutanaklara yazdığı, yazıcı görevinin ise çıktı tutanaklarını, geliş sırasında bu yastık alanından alarak yazıcıdan dökeceği varsayılmıştır. Kullanıcı görevinin yastık alanı dolu olduğunda, en az bir tutanaklık yer açılıncaya kadar beklemesi; yazıcı görevinin ise, yastık alanı tümüyle boş olduğu sürece hiçbir işlem yapmadan beklemesi gerekmektedir.
Kullanıcı ve yazıcı görevlerin ortak yastık alanına tümüyle zamanuyumsuz (birbirlerinden habersiz) biçimde eriştikleri düşünülecektir. Herhangi bir anda yastık alanında bulunan boş (kullanılır) tutanak sayısı (e), döküm için bekleyen dolu tutanak sayısı ise (f) olarak adlandırılacaktır. Tutanak yazma ve tutanak okuma işlemleri için erişilen yastık alanının tümü, kritik kaynağı oluşturacaktır. Bu durumda birlikte çalışan kullanıcı ve yazıcı (üretici ve tüketici) görevler arası etkileşim ve bu görevlerin programlanması aşağıda verildiği biçimde olacaktır.

Üretici-Tüketici Görevlerin Programlanm

Üretici-Tüketici Görevlerin Programlanması
Kullanıcı ve yazıcı görevlerin programlanmasında, ikili bir semafor olan b semaforu, ortak yastığa erişimde görevler arası karşılıklı dışlamayı sağlamak amacıyla kullanılmaktadır. Bu amaçla, yastığa erişim yapan yastığayaz (f,tutanak) ve yastıktanoku (f,tutanak) işlevleri, P(b) ve V(b) işleçleriyle ayraç arasına alınmaktadır.
e ve f semaforları sayan semaforlardır. Bunlardan e, görevler işletime alınmadan önce N değerine, f ise 0 değerine kurulmaktadır.
Böylece yazıcı görev, yastık alanına herhangi bir tutanak yazılmadan ana işlem birimine anahtarlanırsa, P(f) işlecini çalıştırarak yastıkla ilgili bekleme kuyruğuna bağlanacaktır. Bu görevin bekleme kuyruğundan hazır görevler kuyruğuna aktarılması, kullanıcı görevinin V(f) işlecini çalıştırmasıyla gerçekleşecektir. kullanıcı görevi her işletiminde P(e) işleci ile, başlangıçta içeriği N olan e semaforunu bir eksiltecektir. e semaforunun bir artırılması, yazıcı görev tarafından, dökülmek üzere bir tutanağın yastık alanından alınması (okunması) sonrasında, V(e) işleci ile gerçekleşecektir. e'nin içeriği 0 olduğunda, yastıktan en az bir tutanağın dökülmesini beklemek üzere, kullanıcı görevi yastık bekleme kuyruğuna bağlanacaktır. Bu görevin yeniden hazır görevler kuyruğuna aktarılmasını, yazıcı görev içinde yer alan V(e) işleci sağlayacaktır.
kullanıcı ve yazıcı görevler içinde P(e) ile V(e), P(f) ile V(f) çapraz biçimde kullanılmıştır. P(e) kullanıcı görevi içinde bulunurken V(e) yazıcı görev içinde yer almaktadır. Bunun gibi P(f) yazıcı görev içinde bulunurken V(f) kullanıcı görevi içinde yer almaktadır.
Daha önce P ve V işleçlerinin kullanımı örneklenirken, görevlerin ortak kaynağa erişen kritik kesimlerinin bu işleçlerle ayraç arasına alınarak karşılıklı dışlamanın sağlanmasından söz edilmişti. P ve V işleçlerinin görevler içinde çapraz kullanımı, bu işleçlerin bir diğer kullanım biçimini oluşturur. Bu yolla bir görev diğer bir görevin işletim akışını denetleyebilir.
Görevler arası Akış Denetiminin Sağlanması
Birlikte çalışan görevler, kimi zaman, aralarındaki işbirliği gereği yerine getirdikleri işlemleri bozulmayan bir sırada gerçekleştirmek durumunda kalırlar. Örneğin bir iş kapsamında, P1, P2 ve P3 adlı programların K1, K2 ve K3 adlı bağımsız kütükleri üretmesi; bu işlemler tamamlandıktan sonra P4 adlı diğer bir programın K1, K2 ve K3 adlı kütükleri birleştirerek K4 adlı sonuç kütüğü elde etmesi istenebilir.
Burada P1, P2 ve P3 adlı programlar koşut çalışabilir. Ancak P4 adlı programın çalışabilmesi, bundan önceki üç programın da sonlanıp ilgili (K1, K2 ve K3 adlı) kütüklerin üretilmiş olmasına bağlıdır. Bu durum aşağıda verilen çizge ile gösterilebilir. Bu tür çizgeler, öncekilik çizgeleri olarak adlandırılır.
Birlikte çalışan görevlerin, varsa işletim sıraları öncekilik çizgeleriyle ifade edilir. Bu çizgelerle ifade edilen işletim sırasının korunmasında P ve V işleçlerinden yararlanılır. Bu, görevler içinde, P ve V işleçlerinin, yukarıda sözü edilen çapraz kullanımı ile sağlanır. Örneğin P4 adlı programa ilişkin G4 adlı görevin, K1, K2 ve K3 adlı kütükleri birleştirerek K4 adlı sonuç kütüğü elde edebilmesi için P1, P2 ve P3 adlı programlara ilişkin G1, G2 ve G3 adlı görevlerin sonlanmasını beklemesi gerekmektedir.
Bu koşulun yerine getirilmesi, G1, G2 ve G3 adlı görevlerin her birisi ile G4 görevi arasında s1, s2 ve s3 adlı ikili semaforlara dayalı zamanuyumlamanın sağlanmasını gerektirir. Bu, bir yandan G4 görevinin başına, P(s1), P(s2) ve P(s3) işleçlerinin ardarda konması; diğer yandan da G1, G2 ve G3 adlı görevlerin sonuna V(s1), V(s2) ve V(s3) işleçlerinin eklenmesi yoluyla sağlanır. Bu yolla G1, G2 ve G3 adlı görevler G4 görevinin işletime giriş sırasını başka bir deyişle işletim akışını denetim altında tutarlar.

Öncekilik Çizgesi ve İkili Semafor Kullanımı ile Gerçekleştirimi
Önceki sayfada verilen açıklamalar çerçevesinde alt düzey zamanuyumlama araçları, özde semafor olarak adlandırılan özel bir tür değişken üzerinde işlem yapan, çoğu kez işletim sistemi işlevleri olarak gerçekleştirilen, P ve V olarak adlandırılan ilkel işleçlerden oluşur. Alt düzeyli bu zamanuyum işleçleri, birlikte çalışan görevlerin yönetimine hem kuramsal hem de uygulanırlık açısından gerekli ve yeterli desteği sağlıyor olmalarına karşın azımsanamayacak tasarım ve programlama yükünü de birlikte getirirler.
Görevlerarası zamanuyumu, görevlerin içine P ve V işleçlerinin serpiştirilmesini gerektirir. Bu durum programların okunurluğu ve bakılırlığını olumsuz yönde etkiler. Bunun yanı sıra bu işleçlerin yanlış kullanımı, kimi zaman sistem kaynaklarının kilitlenmesine, dolayısıyla sistemin başarımının düşmesine ve güvenirliğinin zedelenmesine de neden olabilir.
Önceden de değinilen Üretici-Tüketici Görevlerin Programlanması örneğinde verilen kullanıcı() görevi içindeki P işleçlerinin, P(e), P(b) yerine, yanlışlıkla ters sırada, P(b), P(e) biçiminde yazıldığı düşünülürse, yastığın tümüyle dolu olduğu bir anda kullanıcı() görevinin yastığa yeni bir tutanak daha yazmaya çalıştığı andan başlayarak hem kendini hem de yazıcı() görevi, dolayısıyla işletimi kilitleyeceği durum ortaya çıkar. Bu gerekçeye dayalı olarak, görevler arası zamanuyumlamada alt düzey işleçleri doğrudan kullanmak yerine, bunlara dayalı, daha yalın ve sistemli üst düzey araçlardan yararlanmak düşünülür. İzleyen kesimde bu araçlar açıklanacaktır.

Üretici-Tüketici Görevlerin Programlanması
Birlikte çalışan görevlerin birbirleriyle olan etkileşimleri, görevler arası iletişim ve görevler arası akış denetimi olmak üzere iki genel grupta düşünülür.
Görevler, üretici-tüketici ilişkisi çerçevesinde veri alış-verişinde bulunuyorlarsa bu, görevler arası iletişim kapsamında ele alınır.
Görevlerin, birlikte yerine getirdikleri iş kapsamında yapmak zorunda oldukları işbirliği gereği, aralarında hiçbir veri aktarımı sözkonusu olmaksızın, birbirlerinin işletim akışlarını denetlemeleri, görevler arası akış denetimi kapsamında düşünülür.
Gerek iletişim, gerekse akış denetimi yönünden etkileşen görevler arasında zamanuyumlama zorunluluğu vardır. Bilgisayar sistemlerinde zamanuyumlama işlevlerinin temel kullanım nedenlerinin başında görevler arası iletişim gelir. Görevler arası iletişimin, alt düzeyli zamanuyumlama işleçleri kullanılarak gerçekleştirilmesi üretici-tüketici görevlerin programlanması kapsamında, daha önce örneklenmişti. Görevler arası iletişimi alt düzey işleçleri doğrudan kullanarak yapmak yerine, bu işleçlerden yararlanılarak gerçekleştirilen daha üst düzey tanımlara dayalı işlevlerle ele almak programlama kolaylığı sağlayan bir yoldur.
Bu amaçla, sistem çağrıları arasında çoğu kez send ve receive olarak adlandırılan işlevler öngörülür. Bu işlevler, görevler arası iletişimin yanı sıra bunun ortaya çıkardığı zamanuyum sorununu da, programcılara yansıtmadan çözerler. Bu işlevlere, üst düzeyli olma özelliğini bu olgu sağlar. İlk elde görevler arası iletişimi gerçekleştiren bu komutlar kimi düzenlemelerle görevler arası işletim akış denetimine de olanak verirler. Bu yolla, alt düzey zamanuyumlama işleçlerinin yerini tümüyle alabilirler. send ve receive komutları aracılığıyla görevler arasında aktarılan veriler ileti diye adlandırılır.
send komutu bir görevin diğer bir göreve ileti göndermesi için kullanılır. Görevler receive komutunu diğer görevlerden ileti beklemek ve almak için kullanırlar. Bu komutlar:
Hedef: hedef adlı parametre, alan ve gönderen görevlerin kimliğidir.
Kaynak: kaynak adlı parametre, alan ve gönderen görevlerin kimliğidir.
İleti: ileri, aktarılan veri öbeğini belirler.
Send: send komutu, ileti adlı veri öbeğinin hedef kimlikli alıcı göreve aktarılmasını sağlar
Receive: receive: komutu, kaynak kimlikli görevin gönderileceği ileti'nin okunmasını sağlar.
send (hedef, ileti)
receive (kaynak, ileti)
sözdiziminde, iki parametreli komutlar olarak düşünülebilirler.
İletilerin kaynak kimlikli görevden hedef kimlikli göreve aktarımı, değişik yollarla gerçekleştirilebilir. Bunlar iletinin:
- Kaynak görevin bellek alanından, doğrudan hedef görevin bellek alanına aktarılması;
- İşletim sistemine ilişkin yastık alanları üzerinden dolaylı taşınması ve
- Posta kutuları'nın kullanılması
yollarıdır.
(1) İletinin kaynak göreve özgü bellek alanından, doğrudan hedef görev ortamına aktarılması yolu benimsendiğinde send komutunu çalıştıran kaynak görev, hedef görev receive komutunu çalıştırana değin bekleme kuyruğuna konur. receive komutu çalıştırıldığında ileti, işletim sistemi tarafından gönderen ortamından alıcı ortamına doğrudan kopyalanır. Eğer receive komutu send komutundan önce çalıştırılmışsa, bu kez receive komutunu çalıştıran görev, ilgili send komutu çalıştırılana değin bekletilir. Bu yaklaşım, birlikte çalışan görevlerin programlanmasına olanak veren ADA programlama dilinde rendez-vous (randevu) düzeneği olarak bilinir.
Bu düzenek aracılığıyla görevler, veri iletişiminin yanı sıra birbirlerinin işletim akışlarını da denetleyebilirler. Gerçekleştirim kolaylığı sağlıyor olmasına karşın bu yol, özellikle görevler arası veri iletişimi için esnek olmayan, hem gönderen hem de alıcı görevlerin işletimlerini bekle-ilerle biçimiyle yavaşlatan bir yoldur.
(2) Görevlerin, send ve receive komutları üzerinde, sistemli biçimde, aktarım gerçekleşene değin beklemeleri, iletilerin, veri iletişim hizmetini üreten işletim sistemi ortamında yastıklanması yoluyla engellenebilir. Aktarılan iletilerin işletim sistemi tarafından geçici olarak yastıklanması durumunda send komutunu çalıştıran görevin bekleme kuyruğuna bağlanması gerekmez. Görevlere belirli sayıda iletiyi, beklemeden aktarma olanağı tanınır.
Bir görev, kendi kimliği ile ilgili yastıklanmış hiçbir ileti bulunmadığı durumlarda receive komutunu çalıştırırsa, doğal olarak bekleme kuyruğuna bağlanır. İletiler, işletim sistemince yastıklanacağından, veri yapıları, sistemce tanınan özel tür'de olmak zorundadır. send ve receive komutları içinde hedef ve kaynak görevlerin kimlikleri, iletinin adresi olmayı bu yöntemde de sürdürür.
(3) İletilerin işletim sistemi ortamında yastıklanacağı veri yapılarının tanımlarını kullanıcılara bırakma esnekliği posta kutusu kullanımıyla sağlanır. Posta kutuları belirli sayıda ve çoğu kez değişmez uzunlukta iletinin yastıklanmasına (saklanmasına) yarayan ve görevler programlanırken bizzat kullanıcı tarafından programlama dili olanakları ile tanımlanan özel tür yapılardır. Görevler iletileri doğrudan birbirlerine göndermek yerine bu posta kutularına aktarırlar. Bu durumda send ve receive komutlarının görünümü:
receive (posta-kutusu, ileti)
biçimine dönüşür.
Bir posta kutusu üzerinden iletişim kuracak görevler, doğal olarak bu kutunun adı (kimliği) ve yapısı üzerinde anlaşmak durumundadır. send komutu ile posta kutusuna ileti gönderen görev bunu, posta kutusu doluncaya kadar beklemeden gerçekleştirir. Posta kutusunda yazılacak boş ileti alanı bulunmadığı durumda send komutunu çalıştıran görev bu posta kutusuna ilişkin bekleme durumuna alınır. receive komutu, varsa posta kutusundan bir iletiyi okumaya yarar. Bu kutuya ilişkin, varsa bekleme durumundaki görevi hazır göreve dönüştürür. Posta kutusu boşken receive komutu ile ileti okumak isteyen görev de yine, bu kutuya ilişkin bekleme durumuna alınır.
Posta kutuları iletişim yönü açısından tek yönlü yapılardır. Posta kutularına dayalı iletişim bire-bir ya da birden-birçoğa biçiminde gerçekleşebilir. Başka bir deyişle, tek bir posta kutusu üzerinden birden çok göreve veri aktarılabilir.
UNIX işletim sisteminde görevler arası veri iletişimi pipe diye adlandırılan, FIFO yapılı posta kutuları üzerinden yapılabilir. Verilerin posta kutusuna gönderilmesi ve posta kutusundan alınması, sıradan kütükler için de kullanılan yazma ve okuma (write, read) komutlarıyla gerçekleştirilir.
Görevler pipe nitelikli bir posta kutusu yaratmak için pipe(pfd) sistem çağrısını kullanınırlar. pfd, sözkonusu posta kutusunun iki ögeli kütük belirtecidir. pfd[0] posta kutusundan okumada, pfd[1] ise posta kutusuna yazmada kullanılır.
UNIX işletim sisteminde pipe olarak adlandırılan posta kutularının kimlikleri (adları) bulunmaz. Bu nedenle bu kutular ancak ata-oğul yakınlığındaki görevler tarafından kullanılabilirler. Bu bağlamda, pipe üzerinden iletişim yapacak görevlerden biri ata, diğer(ler)i de oğul nitelikli olmak durumundadır. Ata nitelikli görev, pipe(pfd) sistem çağrısını kullanarak bir posta kutusu yarattıktan sonra, iletişim kuracağı görev(ler)i, fork() sistem çağrısı ile yaratıp, sözkonusu iletişimin yönüyle uyumlu olarak, pfd[0] ya da pfd[1] belirteçlerinden ilgili olanını, oğul görev(ler)e, execlp() sistem çağrısının argümanı olarak aktarmak durumundadır. pipe üzerinden yapılan iletişimde görevler arası zamanuyum denetimi, doğal olarak bu aracı sunan işletim sistemince sağlanır. Aşağıda, pipe üzerinden iletişim kuran ana ve kız adlı iki görev örneklenmiştir.

pipe ile İletişim Kuran Görevler Örneği
pipe adlı posta kutuları, (shell) komut yorumlama katmanında kullanıcılara, sistem komutlarıyla birlikte kullanılan (kapalı) biçimleriyle yansır. Bir sistem komutunun ürettiği çıktının diğer bir sistem komutunun giriş verilerini oluşturması istendiğinde, bu komutlar, düz bir çizgi ile ayrılmış olarak (ls|wc gibi) arka arkaya yazılıp işletime sunulurlar. Buradaki düz çizgi (|) posta kutusunu simgeler.
Bu yolla ls sistem komutu, ürettiği kütük listesini, giriş kütüğü olacak biçimde pipe (posta kutusu) üzerinden wc komutuna aktarır. Bu bağlamda, pipe nitelikli posta kutusunun yaratılması, belirteçlerin ls ve wc görevlerine aktarılması, yukarıda örneklenen işlemlere benzer biçimde, ls ve wc görevlerinin atası konumundaki shell görevi tarafından gerçekleştirilir.
pipe nitelikli posta kutularının, salt ata-oğul yakınlığındaki görevler tarafından kullanılabilir olmasının yarattığı kısıtlamayı ortadan kaldırmak üzere, UNIX System III'ten başlayarak named pipe ya da FIFO olarak adlandırılan, kullanıcılar tarafından adlandırılabilen (kimlik verilebilen) klasik posta kutuları da UNIX işletim sistemine eklenmiştir.
UNIX işletim sisteminde FIFO, pipe ile kütüğün özelliklerini birleştiren özel bir kütük yapısıdır. Örneğin, mknod("iz/ad",S_IFIFO|0666,0) sistem çağrısı kullanılarak yaratılır. open(), read(), write(), close() gibi sistem çağrıları aracılığıyla, iz/ad üzerinde anlaşan ve ata-oğul ilişkisi dışındaki görevlerce de kullanılır.
Kütüklerden farklı olarak lseek() sistem çağrısının, FIFO nitelikli özel kütüklerle kullanımı anlamsızdır. Zira, adından da anlaşılacağı üzere, bu özel kütüklerden okuma, yazma sırasında, first-in-first-out mantığıyla yapılmak durumundadır. Bu nedenle, FIFO içinde yer alan damgalara rasgele erişim olanaksızdır. FIFO nitelikli özel kütüklere koşut erişimde görevler arası zamanuyum denetimi, doğal olarak, bunu bir araç olarak sunan işletim sisteminin yükümlülüğündedir.
Üst düzey zamanuyumlama araçları olmaları itibarıyla bu posta kutularının kullanımı, işletim hızı yönünden yavaştır. İşletim hızının önemli olduğu uygulamalarda, UNIX işletim sistemine System V ile giren semaphore, shared memory gibi alt düzey araçların kullanımına geri dönülür. Zaten genellikle alt düzey araçların hızlı ancak kullanımı karmaşık, üst düzey araçların ise yavaş ancak kullanımı kolay araçlar olduğu bilinen bir gerçektir. Kullanımda sağlanan kolaylığın bedeli hızdan verilen tavizle ödenir.
send ve receive komutları aracılığıyla yapılan görevler arası veri aktarımları ya işletim sisteminin kullanıcıya saydam yastık alanları ya da kimliği bizzat kullanıcı tarafından belirlenen posta kutuları üzerinden gerçekleşir. Gerek işletim sistemi yastık alanları, gerekse posta kutuları, birden çok görevin bölüştüğü (eşanlı okuma ve yazma yapabildiği) kritik kaynaklardır.
Dolayısıyla görevlerin, bu alanlara erişimleri sırasında zamanuyumlanmaları gerekir. Bu zamanuyumlama semaforlar kullanılarak yapılabilir. send ve receive komutlarına ilişkin sistem çağrıları içinde semaforlara dayalı zamanuyum düzenekleri öngörülür. send ve receive komutları derlenirken, aktarım işlemlerinin yanı sıra aktarım alanlarına erişimde zamanuyumlamayı da sağlayan sistem çağrıları amaç kodlar arasına yerleştirilir. Bu yolla kullanıcılar, zamanuyumlamayı bizzat gerçekleştirme yükümlülüğünden kurtulmuş olur. Daha önce de belirtildiği gibi, send ve receive komutlarına üst düzey işlev olma özelliğini veren bu olgudur. Bu bağlamda, Üretici-Tüketici Görevlerin Programlanması çiziminde verilen üretici-tüketici görevlerin P ve V işleçleriyle programlanması örneği, send ve receive komutlarının kullanımıyla, aşağıdaki çizimde yeniden ele alınmıştır.
send ve receive Komutlarının Kullanımı
Bu yeni örnekte, send ve receive komutlarının, ileti adresi olarak görev kimliklerini kullandıkları; iletilerin message olarak, sistemce bilinen, eşit uzunlukta özel tür bir veri yapısında olduğu düşünülmüştür. Bir görevden diğer bir göreve gönderilen iletilerin, alıcı görev, receive komutuyla okuyuncaya değin işletim sistemince saklanacağı varsayılmıştır.
Yine Üretici-Tüketici Görevlerin Programlanması çiziminde N tutanaklık bir yastık alanı kullanıldığından burada da aynı anda N değişik iletinin bulunması öngörülmüştür. Bu amaçla yazıcı görev işletimine, N boş (anlamsız) iletiyi kullanıcı görevine göndermekle başlamaktadır. Bu, N adet ileti, doğal olarak işletim sistemince yastıklanmaktadır. kullanıcı görevi dökülecek tutanaklar hazır oldukça, receive komutu aracılığıyla boş bir iletiyi işletim sisteminden okumakta, tutanak ile yükleyerek geri göndermektedir. yazıcı görev ise aldığı iletiyi yerel tutanağına boşalttıktan sonra boş bir iletiyi tekrar kullanıcı görevine göndermektedir. Bu durumda işletim sistemince saklanan ileti sayısı hep N olarak kalmakta, böylece N tutanaklık yastıklama sığası değişmez biçimde korunabilmektedir.
send ve receive komutlarının, görevler arası zamanuyumlamaya getirdiği programlama kolaylığının yanı sıra diğer önemli bir özellikleri daha vardır. Bu komutlar, iletişim komutları olmaları itibarıyla bir ağ içinde bütünleşmiş değişik bilgisayarlar üzerine dağılmış görevler arası iletişim ve zamanuyumlamaya da olanak verirler. Semaforları kullanan alt düzey işleçler ancak, ya tek ana işlem birimi ya da ortak bir ana belleğe sahip çok işleyicili sistemler üzerinde kullanılabilirler. Ağlar içinde bütünleşmiş bilgisayar sistemlerinin ortak bellekleri bulunmadığından semafor adlı özel bellek değişkenlerine dayalı zamanuyumlama düzenekleri, bu ağ içinde yer alan bilgisayar sistemleri üstünde çalışan görevler için kullanılamazlar.
Tek bir uygulamanın, bir ağ içinde yer alan bilgisayar sistemlerinden iki ya da daha çoğunu, aynı anda kullanabilmesine olanak veren işlem türüne dağıtılmış işlem adı verilir. send ve receive komutları, dağıtılmış işlem ortamında kullanılabilen tek zamanuyumlama araçlarıdır.
Dağıtılmış işlemin yürütüldüğü bilgisayar ağlarında bir uygulamaya ilişkin veriler birden çok bilgisayar sistemi üstüne dağılmış biçimde saklanabilir. Dağıtılmış işleme olanak veren kimi işletim sistemlerinde, görevler arası iletişim, verilerin (kütüklerin), bulundukları fiziksel konumlardan soyutlanmaları amacıyla kullanılır.
Kütüklerin konumlarından soyutlanması, erişilecek kütüğün bulunduğu bilgisayar sistemi hangisi olursa olsun, hep bu kütüğe erişim yapan görevle aynı sistemde yer alıyormuş gibi davranabilmeye olanak verilerek sağlanır. Bu bağlamda bir görev, uzak bir bilgisayar sistemi üstünde bulunan bir kütüğe erişmesi gerektiğinde bunu, sanki kendi ortamındaki bir diskten yapıyormuş gibi klasik bir read komutunu kullanarak yapar. Ancak okuma istemi iletişim birimi (stub) adlı bir kesime yönlendirilir. Bu hizmet birimi kütüğün fiziksel olarak bulunduğu bilgisayar sistemindeki iletişim birimi ile iletişim kurarak kütüğün buradaki hizmet birimi (server) tarafından okunarak gönderilmesini sağlar. Aldığı kütüğü read komutunu işleten göreve yönlendirir. Açıklanan bu düzenek uzaktan yordam çağırma (remote procedure call) olarak bilinir. Bu düzeneği kullanan model, istemci sunucu modeli (client-server model) olarak adlandırılır.

Uzaktan Yordam Çağırma (RPC) Düzeneği
Bu çerçevede, read komutunu çalıştıran görev, bu komutla, normal bir işlev/yordam çağırma işlemini yerine getirmektedir. Görevin bu isteminin yerine getirilebilmesi için, okunacak kütüğün yer aldığı bilgisayar sistemiyle yapılacak gerekli ileti aktarım işlemleri, işletim sisteminin iletişim birimlerince gerçekleştirilmektedir. send ve receive türü komutları kullanan kesimler bunlardır.
Monitor, birlikte çalışan görevlerin, ortak kaynağa erişim yapan yordamlarının (kritik kesimlerinin) toplandığı kümeye verilen addır.
Görevlerin ortak kaynağa erişimlerini denetim altında tutmanın bir yolu da bunların, kritik kaynaklara merkezi bir denetim altında erişmelerini sağlamaktan geçer. Monitor kavramının temelinde bu ilke yatar. Birlikte çalışan görevler programlanırken ortak kaynağa erişim yapacak yordamlar özel bir kümede toplanır. Bu kümenin tüm görevlerce bilinen özel bir adı bulunur.
İşletim aşamasında bir görev ortak kaynağa erişmek istediğinde, ilgili yordamı bu kümeden çağırır. Programlama aşamasında bu küme özel bir tür olarak, monitor biçiminde tanımlandığından, derleme aşamasında bu kümenin başına, karşılıklı dışlamayı sağlayacak gerekli karşılıklı dışlama komutları derleyici tarafından eklenir. Bu yolla bu kümeden, aynı anda en çok bir görevin yordam çağırmasına izin verilerek ortak kaynağa aynı anda en çok bir görevin erişim yapması sağlanır.
Görevlerin monitorda yer alan bir yordamı çağırmaları monitora girmeleri olarak nitelenir. Bir görev monitor içindeki bir yordamın işletimini tümüyle tamamlamadan diğer bir görev monitor içinden yordam çağıramaz. Başka bir deyişle bir görev monitorun içinde iken başka bir görev monitora giremez. Bu amaçla, monitora ilişkin bir bekleme kuyruğu da öngörülür. Yukarıda verilen açıklamalardan da anlaşılacağı üzere monitor bir programlama dili yapısıdır.
Monitorlarla ilgili önemli bir sorun, monitora bir kez girebilmiş bir görevin burada, karşılıklı dışlama gereğinin dışında, başka bir nedenle beklemesi gerektiğinde bu beklemenin, diğer görevleri kilitlemeden nasıl gerçekleşeceği sorunudur.
N tutanaklık bir yastık üzerinden iletişim yapan iki görevin, bu yastığa erişim yapan kesimlerinin üretici-tüketici adlı bir monitor içine konduğu düşünülebilir. Bu görevlerden üretici olanının, monitora girerek, yastık dolu iken buraya yeni bir tutanak eklemeye kalkması durumunda beklemeye alınması gerekir. Bu görev, gerekli önlemler alınmadan beklemeye alınırsa, hala monitor içinde göründüğünden tüketici görevin monitora girmesi engellenir. Tüketici görev monitora girip yastıktan bir tutanak almadan üretici görevin bekleme durumu son bulamayacağından, kilitlenme olarak bilinen, görevlerin karşılıklı bekleşme durumu ortaya çıkar.
Bu önemli sakıncayı ortadan kaldırmak için kimi koşullarda, bekleme durumundaki bir görev, halen monitor içinde iken, diğer bir görevin de monitora girişinin sağlanması gerekir. Bunun için, monitorda, koşul (condition) adlı yeni bir değişken türü ile bunlar üzerinde işlem yapan wait ve signal adlı komutlar tanımlanır.
wait(koşul-değişkeni) komutu kendisini çalıştıran görevi koşul değişkeni'ne bağlı bekleme kuyruğuna koyar.
signal(koşul-değişkeni) komutu ise koşul değişkeni'ne bağlı kuyruktaki görevi hazır görev durumuna getirir.
Görevler, monitor içinde bekleme koşulu olarak sınadıkları değişkenleri koşul değişkeni olarak tanımlarlar. Monitor içinde sınanan bir koşul değişkeni bekleme yapmayı gerektiriyorsa wait komutu çalıştırılarak bekleme durumuna geçilir. wait komutu, aynı zamanda, varsa, monitora girmeyi bekleyen bir görevin monitora girmesini de sağlar. Bekleme durumundaki bir görevin hazır görev durumuna geçebilmesi, monitora bundan sonra giren görevlerden birinin, aynı koşul değişkenine ilişkin signal komutunu çalıştırmasıyla gerçekleşir.
Daha önce hem semaforlar hem de iletişim komutlarının kullanımını örneklemede yararlanılan klasik üretici-tüketici görevler, bu kez monitor yaklaşımını örneklemede kullanılmış ve elde edilen program listesi aşağıda verilmiştir. Burada kullanılan dil, C programlama dilini andırıyor olmakla birlikte, tümüyle varsayımsal bir dil olarak düşünülmelidir. N tutanaklık yastık alanına tutanak ekleme ve buradan tutanak alma işlemleri ortak kaynağa erişim yapan kritik kesimler olarak üretici-tüketici adlı monitor içine konmuştur.
Yastık alanının, dolu olduğu bir durumda tutanak eklemek isteyecek üretici görevin dolu adlı koşul değişkenine; boş olduğu durumda da, tutanak okumak isteyecek tüketici görevin boş adlı koşul değişkenine bağlı bekleme konumlarına, sırasıyla wait(dolu) ve wait(boş) komutları kullanılarak alınacağı görülmektedir. sayaç'ın 1 ve N-1 değerlerini alması durumlarında ise, boş ve dolu koşul değişkenlerine bağlı olarak bekleyen görevlerin signal komutuyla hazır görevler kuyruğuna bağlanacağı düşünülmüştür. sayaç modüloN artırılıp eksiltilmektedir.Daha önce hem semaforlar hem de iletişim komutlarının kullanımını örneklemede yararlanılan klasik üretici-tüketici görevler, bu kez monitor yaklaşımını örneklemede kullanılmış ve elde edilen program listesi aşağıda verilmiştir. Burada kullanılan dil, C programlama dilini andırıyor olmakla birlikte, tümüyle varsayımsal bir dil olarak düşünülmelidir. N tutanaklık yastık alanına tutanak ekleme ve buradan tutanak alma işlemleri ortak kaynağa erişim yapan kritik kesimler olarak üretici-tüketici adlı monitor içine konmuştur.
Yastık alanının, dolu olduğu bir durumda tutanak eklemek isteyecek üretici görevin dolu adlı koşul değişkenine; boş olduğu durumda da, tutanak okumak isteyecek tüketici görevin boş adlı koşul değişkenine bağlı bekleme konumlarına, sırasıyla wait(dolu) ve wait(boş) komutları kullanılarak alınacağı görülmektedir. sayaç'ın 1 ve N-1 değerlerini alması durumlarında ise, boş ve dolu koşul değişkenlerine bağlı olarak bekleyen görevlerin signal komutuyla hazır görevler kuyruğuna bağlanacağı düşünülmüştür. sayaç modüloN artırılıp eksiltilmektedir.

Üretici-Tüketici Görevlerin Monitor ile Programlanması
kullanıcı ve yazıcı adlı görevler içinden, monitordaki bir yordam çağırılacağı zaman bunun, monitor-adı.yordam-adı komutuyla gerçekleştiği varsayılmıştır. signal komutu, halen monitor içinde bulunan bir görevin, monitor içindeki diğer bir görevi hazır duruma sokması için kullanılmaktadır. Aynı anda birden çok görevin monitor içinde bulunmasını önlemek üzere, çoğu kez signal komutunu işleten görevin hemen monitoru terketmesi gözetilir. Bu nedenle, tutanakekle ve tutanakal monitor yordamları içinde signal komutları hep sonuncu komut olarak kullanılmıştır.
Birlikte çalışan görevler yönünden monitor, bölüşülen ortak kaynak için vardır. Bir sistemde birden çok ortak kaynak ve bunların çevresinde kümelenen birden çok birlikte çalışan görev bulunur. Koşut işlem, her görev kümesi için ayrı bir monitor tanımlanarak yürütülür. Monitor yaklaşımını kullanan sistemlerde, zamanuyumlanmaları gereken yordamlar belli kümeler içinde toplandıklarından, semaforlar ya da iletişim komutları kullanılarak gerçekleştirilenlere göre daha kolay anlaşılır ve bakılır yazılımların elde edilmesi sağlanır.
Daha önce de belirtildiği üzere, monitor bir programlama dili aracıdır. Bu aracı kullanan sistem programcıları programladıkları görevler arası ayrıntılı zamanuyumlama eklerini öngörme zorunluluğundan kurtulurlar. Zira monitor kullanımına olanak veren programlama dillerinde görevler arası zamanuyumlama işlevi, tanım gereği, derleyici ve sistem yazılımlarının yükümlülüğüne girer.
Monitor kavramını destekleyen üst düzey programlama diline verilebilecek örnek, JAVA'dır. JAVA, programların işletim dizileri içermesine olanak vermekte ve bunların zamanuyumlanmasını monitor yaklaşımıyla ele almaktadır. Bu amaçla, üretici-tüketici nitelikli işletim dizi sınıfları (classes) içinde, paylaşılan özel bir nesneye erişim yapan yordamlar (methods):
synchronized void yordam_1() {...}
synchronized void yordam_2() {...}
biçiminde, synchronized olarak tanımlanmakta ve bunun sonucunda, paylaşılan nesneyle ilgili synchronized nitelikli herhangi bir yordamı en çok bir işletim dizisinin işletmesi (karşılıklı dışlama) sağlanmaktadır. Bir işletim dizisi, paylaşılan nesneyle ilgili synchronized nitelikli bir yordamın işletimini tümüyle tamamlamadan diğer bir işletim dizisi de, aynı nesneye ilişkin synchronized nitelikli başka bir yordamı işletmeye kalktığında, bu sonuncunun, otomatik olarak bekler duruma geçmesi sözkonusu olmaktadır.
Zira JAVA'da, her nesne için bir kilit (lock) belirteci öngörülmekte ve synchronized nitelikli bir yordam bir nesne üzerinde işlem yaparken bu nesne kilitlenerek diğer synchronized nitelikli yordamların erişimine kapalı tutulmaktadır. kilit belirteci, bu niteliğiyle, paylaşılan nesnenin (zamanuyumlanması gereken) yordam kümesini belirlemekte ve monitor olarak anılmaktadır.
Kilitlenme, bekleme durumundaki görevlerin, hazır görev durumuna geçebilmek için bir diğerinin sağlayacağı koşulu karşılıklı beklemelerine verilen addır. Görevlerin her birinin bekler olması ve çalışabilmek için bir diğerinin işletilmesinin gerekmesi durumu, görevlerin hiçbir zaman gerçekleşmeyecek bir koşulu beklemeleri sonucunu doğurur.
Kilitlenen Görevler
Örneğin G1 ve G2 adlı iki görevin aynı disk birimi üzerinde yer alan kütükleri yazıcıdan dökmede kullanıldığı; sistemde yazıcının YS, disk biriminin de, bir bütün olarak DS adlı semaforlarla korunduğu ve görevlerin kaynakları P (kaynaksemaforu) komutu ile diğer görevlerin kullanımına kapayabildiği; V (kaynaksemaforu) komutu ile de serbest bıraktığı varsayılırsa, bu görevlerin, yukarıda verilen biçimde programlanmaları durumunda kilitlenebilecekleri kolayca görülür.
Bu çizime göre G1 görevi P işlecini kullanarak önce disk sonra yazıcıyı, G2 görevi de önce yazıcı sonra diski kullanmak üzere programlanmıştır. G1 görevinin işletiminin P(DS) komutundan sonra kesilmesi ve G2 görevinin işletime alınması durumunda bu sonuncunun P(YS) komutunu çalıştırdıktan sonra P(DS) komutu ile DS bekleme kuyruğuna bağlanacağı; G1 görevinin ise, yeniden işletime alınması sonrasında P(YS) komutu ile YS bekleme kuyruğuna bağlanacağı görülür.
Bu durumda G1 görevi G2 görevinin V(YS) komutunu, G2 görevi de G1 görevinin V(DS) komutunu çalıştırmasını bekler. Her iki görev de bekler durumunda olduğundan bu komutlar hiçbir zaman çalıştırılamazlar. Böylece bu görevler hiçbir zaman oluşmayacak koşulları karşılıklı bekleyerek kilitlenirler.
Görevler arası kilitlenmeyi ortaya çıkaran koşullar aşağıda verilen dört ana başlık altında toplanabilir:
- Karşılıklı Dışlama: Bir kaynağın aynı anda yalnız bir görev tarafından kullanılabilmesi.
- İstem üzerine kaynak atama: Görevin gereksediği kaynakları, teker teker, işletim aşamasında elde etmesi.
- Atanan kaynakların, görevler serbest bırakmadıkça geri alınamaması.
- Döngüsel Bekleme: Bir görevin elinde tuttuğu kaynaklardan bir yada daha çoğunun, bu görevle aynı döngüsel işletim zinciri içinde yer alan diğer görevlerce de istenmesi.
Bu koşullardan dördünün de aynı anda bulunduğu durumlarda kilitlenme oluşur.
Kilitlenmeleri önlemek üzere, bu koşullardan en az birinin oluşmasını engellemek yeterlidir. Ancak sıralanan bu koşullar, çoğu kez ekonomik ve fiziksel kısıtlamalardan kaynaklanır. Örneğin karşılıklı dışlamayı ortadan kaldırmak, hemen hemen tüm donanımsal kaynaklar için olanaksız, görevler arası iletişimde ise bir zorunluluktur. Bunun gibi, görevlerce kullanılan kaynakları gerektiğinde görevlerden geri alan bir kaynak atama yöntemini uygulamak da, örneğin ana işlem birimi ve ana bellek dışındaki çoğu fiziksel birim için her zaman olanaklı değildir. Ancak koşut işlemin yürütüldüğü işletim sistemlerinde, olanaklar elverdiği ölçüde kilitlenmelere karşı önlemler öngörülür.
Bu önlemler, genelde üç değişik yaklaşımla ele alınır. Bunlar:
- Kilitlenmelerin özdevimli olarak yakalanması ve ortadan kaldırılması,
- Kilitlenmelerden korunma,
- Kilitlenmelerden sakınma
olarak adlandırılır.
Bu yaklaşımların yanı sıra kilitlenmeler konusunda herhangi bir önlem almamak da dördüncü bir yaklaşımı oluşturabilir. Bu yaklaşım, kilitlenmelerin az rastlanan bir olgu olduğu, çok ender olarak oluşacak kilitlenmeleri çözmek üzere görevleri sistemli bir denetim altında tutmanın gereksizliği varsayımına dayanır. Ender de olsa kilitlenmelerin oluşması ve algılanması durumunda, sistem işletmeninin devreye girerek gerekli önlemleri alması öngörülür. Bu önlemler çoğu kez kilitlenmeye neden olan görevlerin yok edilmesi ya da bunlar yakalanamıyorsa tüm sistemin yeniden başlatılmasıdır. UNIX işletim sisteminin kullandığı yaklaşım budur.
Kilitlenmeler, sistem kaynaklarının görevler arasında paylaşım zorunluluğundan doğar. Bir bilgisayar sisteminde kaynaklar:
- tüketilir kaynaklar ve
- yeniden kullanılır kaynaklar
olmak üzere kabaca iki grup içinde düşünülebilir. Yeniden kullanılır kaynaklar istem üzerine, aynı anda en çok bir göreve atanan, sınırlı (sonsuz olmayan) bir süre sonunda serbest bırakılan ve başka bir görevin kullanımına verilen kaynaklardır. Ana bellek kesim ve sayfaları, ana işlem birimi, disk birimleri, mıknatıslı şerit birimleri, yazıcılar, veri tabanı kütükleri yeniden kullanılır kaynaklardır. Tüketilir kaynaklar, adlarından da anlaşılacağı üzere işletim aşamasında görevler tarafından yaratılıp kullanılan ve işletim sonunda varlığı son bulan kaynaklardır. Görevler arası iletişimde yararlanılan iletiler, posta kutuları, geçici yastık alanları bu gruba giren kimi kaynak örnekleridir. Bu grup kaynaklarla ilgili kilitlenmeler, tüketilir kaynağı paylaşan belirli sayıda görevle sınırlı kalır. Bu kilitlenmeler çoğu kez zamanuyumlamaya yönelik programlama hatalarından kaynaklanır. Birlikte çalışan görevler programlanırken tüm görevler birlikte düşünülerek tasarım yapılır. Olası kilitlenme durumları tasarım ve gerçekleştirim aşamasında bulunup ayıklanmalıdır. Bu nedenle, işletim sistemlerinde, bu tür kilitlenmelere karşı herhangi bir önlem öngörülmez. Bunların ortadan kaldırılması, programcıların sorumluluğuna bırakılır. Aşağıda açıklanan önlemler, salt yeniden kullanılır kaynaklara yönelik olanlardır.
Kilitlenmelerin oluşma koşulları, dört başlık altında belirtilmişti. Kilitlenmelerden korunma, aynı anda bu dört koşuldan en az birinin oluşmasının engellenmesiyle gerçekleşir. Bu, işletime alınan görevlere kimi kısıtlamalar getirilerek sağlanır. Sayılan bu koşullardan karşılıklı dışlama koşulunu ortadan kaldırma olanağı genelde bulunmaz. Zira bir sistemde yer alan kaynakların sayısı, işletilen görev sayısından çok daha az olduğundan, bu kaynakların zorunlu paylaşımı karşılıklı dışlamayı da birlikte getirir. Bu durumda arda kalan diğer üç koşuldan birinin kırılması kilitlenmeye karşı korunmayı sağlayabilir.
Görevlere istem üzerine kaynak atandığı durumlarda belirli sayıda kaynağı elinde tutan bir görev yeni bir kaynak gereksediğinde bunu işletim sisteminden talep eder. Bu yeni istemine olumlu yanıt alıncaya değin halen elinde tuttuğu kaynaklarla birlikte bekler duruma girer. Gereksenen kaynakların, çapraz biçimde, bekler durumdaki görevlerce tutulması kilitlenmeleri oluşturabilir.
Görevlere istem üzerine kaynak atamaktan vazgeçilebilirse kilitlenmeyi oluşturan koşullardan biri ortadan kaldırılmış olur. Bunun için, örneğin işlere, sisteme sunuş aşamasında gereksediği tüm kaynakları, iş tanım dilleri aracılığıyla bildirme zorunluluğu getirilir. Gereksediği kaynakların tümü bir çırpıda sağlanamayan işlere hiçbir kaynak ataması yapılmaz.
Başka bir deyişle, tüm kaynakları sağlanana değin işlerin görev tanımları yapılmaz. Görevler işletim aşamasında ek kaynak isteminde bulunamazlar. Bir göreve atanan kaynaklar, bu görevin işletimi sonlanana değin diğer görevlerce kullanılamazlar. Bu kısıtlamaya uyan görevler kilitlenme oluşturmazlar.
Ancak bu kısıtlamaya uymak her zaman mümkün olmayabilir. Zira kimi işler için, gereksenecek kaynakları, sunuş aşamasında belirleme olanağı bulunmayabilir. Bunu yapmaya zorlanan işler (kullanıcılar), işletim aşamasına ilişkin tüm olasılıkları düşünerek kaynak istemleri hakkında abartılı davranırlar.
Bunun yanı sıra bu kısıtlama, koşut kaynak kullanım düzeyinin düşmesine de neden olabilir. Bir veri tabanı üzerinde uzunca süre sorgulama yapıp elde edilen kimi sonuçları dökmede kullanılan bir iş ya da görev, işletiminin son aşamasında gereksinim duyacağı bir satır yazıcıyı, bu yönteme göre, işletiminin başında sahiplenerek diğer görevlerin, bu süre içinde, bu kaynağı kullanmasını engeller. Bu durum hem kaynak kullanım verimliliği hem de koşut işlem düzeyini olumsuz yönde etkileyerek sistem başarımının düşmesine neden olur.
Bahsedilen bu önemli sakıncaları ortadan kaldırmak üzere, istem üzerine kaynak atamanın kilitlenmelere yol açması başka bir yolla da engellenebilir. Bu başka yolda görevlere kaynaklar, istem üzerine yine, işletim aşamasında atanır. Ancak yeni kaynak isteminde bulunan bir görev, bu yeni kaynak kendisine atanana değin elinde tuttuğu kaynakları serbest bırakma zorunda bırakılır. Ancak bu yöntemin de uygulanması her zaman mümkün olmayabilir. İşletim sonlanmadan kimi kaynakların, örneğin günlenen kütüklerin geri verilmesi işletim bütünlüğü yönünden mümkün olmayabilir.
Açıklanan bu yaklaşıma benzer bir yaklaşım veri tabanı sistemlerinde kullanılır. Veri tabanı üzerinde günleme yapan görevlerin erişecekleri tutanaklar birer kaynak olarak düşünülür. Görevler, erişecekleri tutanakları baştan belirlerler. Bir görev, gereksediği tutanakları, sırayla kilit altına almaya çalışır. Eğer gereksenen bir tutanak başka bir görev tarafından daha önce kilit altına alınmışsa, o ana kadar kilitlenen tutanaklar serbest bırakarak işlemlere yeniden başlanır.
Bir görev, kilitlediği tutanakları her an serbest bırakabilme yolunu açık tutmak için, gereksediği tüm tutanakları kilit altına almadan bunlar üzerinde hiçbir günleme işlemi yapmaz. Günleme işlemi sonunda da, doğal olarak kilitlenen tüm tutanaklar serbest bırakılır. Bu yöntem iki aşamalı kilitleme (two phase locking) olarak bilinir.
Görevlere atanan kaynakların, görevler istemedikce geri alınamaması kilitlenmeleri oluşturan bir diğer koşuldur. Atanan kaynakların, görevlerin istemleri dışında da sistemce geri alınmasının sağlanması, kilitlenmelerden korunmada akla gelen bir diğer yöntemdir. Ancak bu yöntemi tüm kaynaklar için uygulamaya olanak bulunmaz.
Giriş/çıkış sistemi incelenirken açıklandığı üzere, bilgisayar sistemini oluşturan kaynaklar bölüşülür ve bölüşülmez kaynaklar olarak ikiye ayrılır. Ana işlem birimi, ana bellek gibi, görevlerce eşanlı biçimde paylaşılabilen birimler bölüşülür kaynakları; yazıcı, mıknatıslı şerit sürücü gibi, görevlerce ardıl biçimde kullanılması zorunlu olan birimler de bölüşülmez kaynakları oluştururlar.
Bölüşülmez kaynakların, kullanımları tümüyle sonlanmadan bir görevden geri alınarak diğer bir göreve atanmaları yapılamaz. Dolayısıyla bu tür kaynaklarda sözkonusu koşulu kırma olanağı bulunmaz.
Bir görevin elinde tuttuğu kaynaklardan bir ya da daha çoğunun, bu görevle aynı döngüsel işletim zinciri içinde yer alan diğer görevlerce de istenmesi, döngüsel beklemeyi yaratarak kilitlenmelerin oluşmasına kaynaklık eden diğer bir koşuldur. Bu koşulun kırılmasında kullanılan bir yol, sistem kaynaklarını belirli bir sıradüzen içinde atamak ve serbest bırakmaktır. Bunun için kaynaklar belirli kümelere ayrılır ve bu kümeler numaralanarak sıralanır.
- Görevler aynı kümede bulunan kaynaklar için, birden çok atama isteminde bulunmazlarsa;
- (i) sırasındaki bir kümeden kaynak sağlamış bir görev, yeni bir kaynak istemi sözkonusu olduğunda, bunu yalnız (i+1), (i+2), ..., (i+n) gibi daha üst sıralardaki kümelerden sağlarsa;
- (i)ninci kümedeki kaynaklar, (i-1)inci kümedeki kaynaklardan önce serbest bırakılmak zorunda ise
ilgili sistemde kilitlenme oluşmayacağı kanıtlanabilir.
Bu bağlamda, Üretici-Tüketici Görevlerin Monitor ile Programlanması örneğindeki disk biriminin (i)inci, yazıcı biriminin ise (i+1)inci kümede yer aldığı düşünülürse, kaynakların (i), (i+1),.. sırasında istenmesi, (i), (i-1),.. sırasında serbest bırakılması durumunda kilitlenmenin önlenebileceği görülür.
Sıradüzensel Kaynak Atama
Kilitlenmelerden sakınma, kilitlenmelere neden olan koşulları toptan kırmaya çalışmak yerine, her bir görev için, ayrı, ayrı gerekli ön incelemeleri yapmayı ve kaynak atamalarını buna göre yönlendirmeyi gerektirir.
İlke olarak, bir görev, yeni bir kaynak isteminde bulunduğunda bu kaynakla ilgili işletim sistemi kesimi devreye girer. Görevin bu isteminin potansiyel bir kilitlenmeye neden olup olmayacağını inceler. Kaynak ataması, ancak sonuç olumlu ise gerçekleştirilir. Görevlere kaynak atanırken bunun ileride bir kilitlenmeye neden olup olmayacağını belirleyebilen bir algoritma 1965 yılında Dijkstra tarafından tanımlanmıştır. Görevlere, kilitlenme oluşturmadan kaynak atayabilme, bir bankerin iflas etmeden borç verebilmesine benzediğinden Banker Algoritması olarak adlandırılmıştır.
Bu algoritmanın çözdüğü sorun, değişmez bir sermayeye sahip olup bunu müşterileri arasında bölüştüren bir bankerin iflas etmeden herkese para sağlaması olarak tanımlanır. Bankerden borç alan müşterilerin her birinin istedikleri toplam kredi bellidir. Borç alma ve geri ödeme işlemleri, her seferde bir birim üzerinden yürütülmektedir. Banker müşteriye, gereksediği toplam krediyi sınırlı bir süre içinde sağlayacağını, müşteri de tüm gereksinimi karşılandığında borcunu sınırlı bir sürede geri ödeyeceğini taahhüt etmektedir. Sermayesi 10 birim olan ve 3 müşteri ile iş yapan bir bankerin verilen bu çizimdeki durumda bulunduğu varsayıldığında borç istem toplamının 18 birim, kasanın ise 2 birim olduğu görülür.
Banker Algoritmasına ilişkin Çizelge
Bu aşamada üçüncü müşterinin 1 birimlik yeni bir borç istemi ile gelmesi durumunda bankerin bu isteme olumlu yanıt verme olanağı bulunmaz. Zira kasasında 1 birim kalacağından, geri ödeme sürecini başlatabilecek, en az borç gereksinimi bulunan birinci müşterisinin istemlerini karşılayamayacak ve kilitlenerek batacaktır.
Bu gerekçeye dayalı olarak ödünç verme algoritması, kasada, her zaman en az bir müşterinin geri kalan gereksinimini karşılayacak miktarda para kalmasını gözetecektir. Bu açıklamalardaki banker, işletim sistemi; sermaye, benzer nitelikli kaynaklar bütünü; müşteriler de görevler olarak düşünüldüğünde aynı yaklaşımın görevlere kaynak atamada da kullanılabileceği görülür.
Benzer nitelikli kaynaklardan, örneğin salt yazıcılar ya da salt mıknatıslı şerit sürücüler gibi aynı tür kaynaklar anlaşılır. Banker algoritması değişik tür kaynaklarla da kullanılabilecek biçimde genelleştirilebilir. Ancak kuramsal olarak geçerli olan bu algoritmanın, dayandığı kimi varsayımlar nedeniyle uygulamada kullanılması her zaman mümkün olmaz. Örneğin, görevlerden kaynaklara ilişkin toplam gereksinimlerini, işletimlerinin başında belirlemelerini istemek her zaman beklenemez. Bunun yapılamaması durumunda da bu algoritmayı uygulama olanağı bulunmaz.
Kilitlenmelerle başa çıkmak için uygulanan bir diğer yol da, görevlerin kaynak istemlerine ilişkin herhangi bir kısıtlamaya gitmeden kilitlenmelerin oluşmasını beklemek, bunlar oluştuğunda belirlenerek ortadan kaldırılmalarını sağlamaktır.
Bu yol kullanıldığında, işletim sistemi görevlerin kaynak gereksinimlerini, istem üzerine işletim aşamasında hiçbir kısıtlama getirmeden sağlar. Yalnız görevlere atanan ve bunlar tarafından serbest bırakılan kaynakları izleyerek ortaya çıkan kilitlenmeleri saptamaya çalışır. Bu saptama, değişik yöntemlerle yapılabilir.
Bu yöntemlerden biri, hangi kaynakların hangi görevlere atandığını gösteren kaynak çizgelerini kullanmaya dayanır. Bu çizgeler üzerinde görevler bir kare, kaynaklar da bir çember ile gösterilir. Bir kaynağın bir göreve atanmış olduğu, kaynağı simgeleyen çemberden görevi simgeleyen kareye doğru çizilen bir okla ifade edilir. Bir görevin bir kaynağa ilişkin istemi ise, görev karesinden kaynak çemberi yönünde çizilen bir okla simgelenir.
Daha önce belirtildiği gibi, görevler arası döngüsel kaynak bekleme, kilitlenmelerin oluşması için gerekli ve yeterli bir koşulu oluşturur. Döngüsel (çapraz) beklemeler kaynak çizgeleri üzerinde bir döngü olarak ortaya çıkar. Kaynak çizgeleri, matrislerle sayısal biçimde de ifade edilebilirler. Bu ifade biçimi, sözkonusu döngülerin, doğrusal cebir algoritmalarına (matrisler arası işlemlere) dayalı olarak saptanabilmesine olanak verir. Saptanan döngüler içinde yer alan görevler yok edilerek kilitlenmeler çözülür.

Kaynak Atamalarda Döngülerin Oluşması
Görevler arası kilitlenmeler başka yöntemlerle de belirlenebilir. İşletim sistemi içinde bu belirlemeyi yapacak kesim, dönem dönem çalışarak bekleyen görev kuyruklarını tarayabilir. Bu görevlerden, belirli bir sınırın üstünde (örneğin 2 saat) beklemiş görevleri, kilitlenmiş görevler olarak yorumlayıp yok edebilir. Bu yolla, bu görevler, eğer kilitlenmeye neden olan görevler ise, yok edilmeleriyle tuttukları kaynaklar serbest kalacağından varsa kilitlenmeler çözülmüş olur. Daha çok Büyük İskender'in Gordiyon Düğümü'nü çözerken kullandığı yöntemi anımsatan bu yöntem büyük boy bilgisayar sistemlerinde, çoğu kez sistem işletmeni eliyle kullanılan bir yöntemdir.
• Bölüm 1: İşletim Sistemlerine Giriş
1) Bilgisayar sistemini oluşturan bileşenler nelerdir?
- donanım
- OS
- sistem ve uygulama programları
- kullanıcılar
23) Temel donanım bileşenleri nelerdir?
- kontrol birimi
- ALU
- bellek
- I/O
2) OS'in temel hedefleri nelerdir?
- doğruluk
- verim
- rahatlık
- güvenlik
3) OS kullanıcıya hangi hizmetleri sağlar?
- program çalıştırma
- I/O işlemleri
- dosya ve klasör işlemleri
- interprocess communication (IPC)
- hata tespiti
- güvenlik
4) Batch
- Time-sharing
- Real-time
- Paralel
- Dağıtık
- Ağ OS
- Gömülü
- Mobil
- Sunucu/masaüstü
5) Sistem bileşenleri nelerdir?
- süreç yönetimi
- bellek yönetimi
- dosya sistemi
- I/O alt sistemi
- saklama yönetimi
- koruma ve güvenlik
- ağ yığını
- kullanıcı arayüzü (CLI/GUI)
10) OS'in bileşenleri nelerdir?
- süreç yönetimi
- bellek yönetimi
- dosya yönetimi
- I/O alt sistemi
- saklama yönetimi
- koruma/güvenlik
- ağ yığını
- kullanıcı arayüzü (CLI/GUI)
21) Boot nedir?
Boot, bir bilgisayarın veya cihazın işletim sistemini başlatma sürecidir. Bilgisayar açıldığında, donanımın çalışmaya başlaması ve işletim sisteminin (örneğin, Windows, Linux) belleğe yüklenmesi için yapılan işlemler bütünüdür.
22) ENIAC'ta hangi OS vardı?
ENIAC'ta işletim sistemi yoktu.
24) Bilgisayarlarda kullanıcı programlarını yürütme veya program geliştirme işlemleri için uygun ortam sağlamı amaçlayan yazılımlara ne denir?
sistem araçları
25) Başlıca uygulama programları nelerdir?
- web tarayıcısı
- metin editörü
- elektronik tablo
- hesap makinesi
- ses sistemi
- veri tabanı sistemi
- oyun
26) En temel bilgisayar programı hangisidir?
OS
27) OS nedir?
OS, bilgisayarın donanım ve yazılım nitelikli tüm kaynaklarının verimli bir şekilde yönetilmesini; donanım birimlerinin birbiriyle haberleşerek uyumlu bir şekilde çalışmasını; ve işlemlerin birbirinden korunduğu bir çalışma ortamında yürütülmesini sağlayan yazılım topluluğudur.
28) OS'ların yerine getirmesi gereken ortak servis ve görevler nelerdir?
- kullanıcı arayüzü
- işlem ve kaynak yönetimi
- hata yönetimi
- güvenlik ve erişim kontrolü
- hesap tutma
29) OS'un en temel görevi nedir?
bilgisayar sisteminde performans ve zaman verimliliği sağlayacak şekilde, işlem yönetimini ve kaynak dağıtımını sağlamak
30) Bilgisayar sistemi kaynaklarının kalbi nedir?
işlemci
31) Windows nedir?
Windows Microsoft'un geliştirdiği işletim sistemleri ailesidir.
32.) Microsoft'un geliştirdiği ilk işletim sistemi hangisidir?
MS-DOS
33) Windows ile MS-DOS'un en önemli farkı nedir?
Windows'ta aynı anda birçok programla çalışılabilir.
34) Linux'u ilk geliştiren kimdir?
Linus Torvalds
35) Unix'in ilk uyarlamasını kim geliştirmiştir?
Unix işletim sisteminin ilk uyarlaması 1969 yılında BELL laboratuvarlarına çalışan Ken Thompson tarafından geliştirildi.
36) UNIX'in tasarım ilkeleri nelerdir?
- zaman paylaşımı
- ağaç yapısı
- kullanıcıların kendi alt dizinleri
37) Android, mobil cihazlar için geliştirilmiş ... tabanlı bir işletim sistemidir.
Linux
44) Sistemin performansı hangi kriterlerle ölçülür?
- verimlilik
- güvenilirlik
- koruyuculuk
- sezdiricilik
- elverişlilik
45) Çekirdeğin görevleri nelerdir?
- işlemciye prosesleri atamak
- kesmeleri yönetmek
- prosesler arasında iletişimi sağlamak
53) İşletim sisteminin en önemli parçası hangisidir?
çekirdek
54) OS konularının ön bilgileri nelerdir?
- programlama
- bilgisayar yapısı
55) Bir işlemci saniyede kaç toplama işlemi yapabilir?
3 milyar
56) OS nedir?
Bilgisayar donanımının çıplaklığını örten; insanların kolayca bilgisayar kullanmasını sağlayabilen; işlemci, bellek gibi bilgisayar kaynaklarının kullanımını optimize edebilen, güvenlik ve güvenilirlik konusunda destek sağlayan yazılıma OS denir.
57) Bilgisayar türleri nelerdir?
- mikrobilgisayar
- server
- iş istasyonu
- süper bilgisayar
- ağ bilgisayarı
- gömülü bilgisayar
58) Çok sayıda işlemcinin bir araya gelip çalışarak tek bir problemi çözmeye çalıştığı bilgisayara ne denir?
Süper bilgisayar
59) OS hangi kaynakları yönetir?
- işlemci
- bellek
- dosyalar
- aygıtlar
65) Ana işlem biriminin bileşenleri nelerdir?
- yazmaç/sayaç takımı
- aritmetik-mantık birimi
- denetim birim
14) Kernel panic nedir?
Kernel panic, bir işletim sisteminin çekirdeğinde meydana gelen kritik ve geri döndürülemez hatayı ifade eder.
15) Kernel panic neden olur?
- donanım hatası
- sürücü sorunları
- yazılım hatası
- dosya sistemi bozulması
16) Kernel panic semptomları nelerdir?
- ekran donması
- hata mesajı
- otomatik yeniden başlatma
• Bölüm 2: Giriş/Çıkış Sistemi
o Giriş
o 2.1. Giriş/Çıkış Birimleri
19) Spooling nedir?
Spooling (Simultaneous Peripheral Operations On-Line), işletim sistemlerinde, yavaş/tekillik gösteren çevresel aygıtlarla senkron bağın koparılması amacıyla, işlerin/İ-G isteklerinin kalıcı ara belleğe, genellikle disk üstü spool alanına kuyruklanıp çevrim-içi bir art alan süreci tarafından aygıta ardışık ve tekil erişimle işlenmesi tekniğidir.
46) İşletim sistemlerinde çekirdeği oluşturan katmanın yürüttüğü en karmaşık görev hangisidir?
İşletim sistemlerinde çekirdeği oluşturan katmanın yürüttüğü en karmaşık görev giriş çıkış yönetimidir.
2.1.1. Arabirim-Sürücü Arası Bağlantı
2.1.2. Zamanuyumlu ve Zamanuyumsuz Ardıl İletişim
2.1.3. Birimler Arası İletişim Türleri
2.1.4. RS-232C Standartı
2.1.5. Centronix Standartı
2.1.6. Giriş/Çıkış Arabirimleri
2.1.7. Yazmaçlar
2.1.8. Veri Yastıkları
2.1.9. Terminal Arabirimi ile İlgili Varsayımlar
2.1.10. Disket Arabirimi ile İlgili Varsayımlar
2.1.11. Okuma-Yazma İşlemi
o 2.2. Seçmeli Giriş/Çıkış Programlama
2.2.1. Tek Terminal İçin Seçmeli Giriş/Çıkış Programlama
2.2.2. Arabirimlerin Taranması
2.2.3. Önceliklerin Ele Alınışı
2.2.4. Seçmeli Giriş/Çıkış Programlamanın Özellikleri
2.2.5. Giriş/Çıkış Kapılarına Erişim
o 2.3. Kesilme Düzeneği
12) Aşağıdakilerin ortak özellikleri nelerdir?
- kesme
- sistem çağrısı
- trap
Üçü de,
a) asenkron olabilir
b) çekirdek moduna geçişi tetikler
c) önceden tanımlanmış bir işleyiciyi tanımlar
d) context switching içerir
e) güvenlik mekanizmasıdır
f) üçü de temelde aynı işlem dizisini takip eder:
i) Olay gerçekleşir.
ii) Donanım, CPU'ya bir sinyal gönderir.
iii) CPU, mevcut işlemi durdurur ve durumu kaydeder.
iv) CPU, işletim sisteminin ilgili işleyici rutinini çağırır.
v) İşleyici, gerekli işlemi yapar ve kontrolü tekrar kullanıcı programına döndürür.
40) Kesme nedir?
İşlemcinin görevini sürdürürken, gelen işaretle yaptığı görevi bırakıp yeni bir göreve dallanmasına kesme denir.
13) Kesme türleri nelerdir?
- donanım kesmesi
- yazılım kesmesi
2.3.1. Kesilme Maske Düzeneği
2.3.2. Kesilme Yordamına Sapma İşlemi (Aşama 1)
2.3.3. Kesilme Yordamına Sapma İşlemi (Aşama 2)
2.3.4. Kesilme Yordamından Geri Dönüş
2.3.5. Kesilme Yordamı
2.3.5.1. Kesilme Yordam Adresinin Ana Bellekten Alınması
2.3.5.1.1. Öncelik Sorunu
2.3.5.2. Kesilme Yordam Adresinin Arabirimce Sağlanması
2.3.5.2.1. Kesilme Alındısı
2.3.5.2.2. Kesilme Yordamında Önceliklerin Ele Alınması
2.3.5.2.3. Kesilme Önceliklerinin Denetimi
2.3.5.2.4. Kesilme Önceliği Denetleme Birimi
2.3.5.2.5. Kesilme İstem ve Süren Hizmet Yazmaçları
2.3.5.2.6. Kesilme Önceliği Denetleme Birimini Kullanan Yordamının Yapısı
2.3.5.3. Kesilme Türleri (İç/Dış Kesilme Uyarıları)
2.3.5.4. Kesilme Türleri (Engellenir/Engellenemez Kesilme Uyarıları)
2.3.5.5. Kesilme Türleri (Donanım/Yazılım Kesilmeleri)
2.3.5.6. 80X86 Türü İşleyicilerin Kesilme Düzeneği
2.3.5.6.1. 80X86 Türü İşleyicilerde Kesilme Vektörü
2.3.5.6.2. 80X86 Türü İşleyicilerde Kesilme Yordamı
2.3.5.6.3. 80X86 Türü İşleyicilere Ortak İlk Beş Vektör
o 2.4. Kesilmeli Giriş/Çıkış Programlama
2.4.1. Zincirleme Bağlantı Yönteminin Kullanımı
2.4.1.1. Zincirleme Bağlantı Yönteminin Kullanımı (devamı)
2.4.1.2. Zincirleme Bağlantı Yönteminin Kullanımı (devamı)
2.4.2. Kesilme Önceliği Denetleme Biriminin Kullanımı
2.4.2.1. Kesilme Önceliği Denetleme Birimi
2.4.2.2. Kesilme Yordamlarının Görünümü
2.4.2.3. Kesilme Yordamlarının Önceliklerine Göre İç içe İşletilmesi
2.4.3. Disket Birimi Kesilmeli G/Ç Programlama Örneği
2.4.3.1. {İZ, SEKTÖR} İkilisi
2.4.3.2. Disket Birimi Kesilmeli G/Ç Programlama
2.4.3.3. Yardımcı İşleyiciler
o 2.5. Doğrudan Bellek Erişim Düzeneği
60) DMA neden CPU’yu hızlandırır?
Doğrudan Bellek Erişimi (DMA), esasen CPU'yu I/O veri transferi yükünden kurtararak genel sistem performansını ve dolayısıyla CPU'nun efektif hızını artırır.
CPU Kullanımının Azaltılması (Offloading): DMA'nın temel işlevi, I/O aygıtları ile bellek arasında büyük veri bloklarının transferini CPU'nun müdahalesi olmadan gerçekleştirmektir. Klasik G/Ç (Programlanmış G/Ç - PIO) yönteminde, CPU'nun her bir veri birimini okuma/yazma döngüsünü bizzat gerçekleştirmesi gerekir. DMA, bu zahmetli ve tekrarlayan görevi özel bir denetleyiciye (DMA Controller) devrederek CPU'nun uygulama ve işletim sistemi mantığını yürütmeye odaklanmasını sağlar.
Paralellik ve Eşzamanlılık: DMA transferleri, CPU'nun talimat yürütmesiyle eş zamanlı (concurrently) olarak gerçekleşir. Bu, veri transferi gecikmelerinin (latency) gizlenmesine olanak tanır. CPU, verilerin gelmesini beklemek yerine, o veriler üzerinde çalışacak veya başka görevleri yürütecek hale gelir.
Veri Yolu Etkinliği: DMA, verileri doğrudan G/Ç aygıtından belleğe taşıdığı için, verilerin öncelikle CPU'ya ve ardından belleğe taşındığı iki aşamalı transferden (PIO'da olduğu gibi) kaçınır. Bu, sistem veri yollarındaki trafiği optimize eder ve gereksiz veri yolu döngülerini önler.
2.5.1. Doğrudan Bellek Erişim Denetleme Birimi
2.5.1.1. Doğrudan Bellek Erişim Kanalı
2.5.1.2. Güdüm Bitleri
2.5.1.3. Arabirime Veri Aktarma
2.5.1.4. Doğrudan Bellek Erişim Denetleme Biriminin Konumu
2.5.2. DBE Denetleme Düzeneği Kullanım Örneği
2.5.2.1. Sistem İlke Çizimi
2.5.2.2. DBE ile G/Ç Programlama Örneği
o 2.6. Giriş/Çıkış Kanalları - Giriş/Çıkış İşleyicileri
o Bölüm Özeti
o Değerlendirme Soruları
• Bölüm 3: Görev Yönetimi
o Giriş
o 3.1. Görevin Tanımı
3.1.1. Görev Anahtarlama
3.1.2. Bağlam Anahtarlama
o 3.2. Görevlerin İşletim Süresince Bulunduğu Durumlar
47) Bir proses hangi durumlarda bulunabilir?
- running
- blocked
- ready
3.2.1. Görev Durum Çizeneği
3.2.2. Ayrıntılı Görev Durum Çizeneği
3.2.3. Görev Kuyrukları
3.2.4. Görev Kuyrukları (devamı)
3.2.5. Ayrıntılı Görev Kuyruk Çizeneği
o 3.3. Görevlerle İlgili Sistem Çağrıları
11) Bir uygulamanın doğrudan yapamayacağı bir işi işletim sistemine yaptırmasına ne denir?
sistem çağrısı
3.3.1. Görevlerle İlgili Sistem Çağrıları (süre, öznitelik, ve öncelik)
3.3.2. Görevlerle İlgili Sistem Çağrıları (fork ve exec)
3.3.3. Görevlerle İlgili Sistem Çağrıları (fork ve exec Örneği)
o 3.4. Görev Yönetimi
41) Çoklu programlaya dayalı sistemler ilk zamanlar ne için tasarlanmıştır?
Çoklu programlamaya dayalı sistemler ilk zamanlar işlemcinin boş olarak beklediği süreleri değerlendirmek için tasarlanmıştır.
43) Yönetim nedir?
Bir bilgisayar sisteminin kaynaklarının, o sistemin performansını en yüksek düzeyde tutabilecek bir şekilde paylaşımlı olarak kullanılmasını sağlayan mekanizmaya yönetim denir.
42) Bağımsız bir bütün olarak gerçekleştirilmesi istenen, işletim sisteminin de diğerleriyle ilişkilendirmeden ele alacağı hizmet kümesine ne denir?
Bağımsız bir bütün olarak gerçekleştirilmesi istenen, işletim sisteminin de diğerleriyle ilişkilendirmeden ele alacağı hizmet kümesine iş denir.
45) Çekirdeğin görevleri nelerdir?
- işlemciye prosesleri atamak
- kesmeleri yönetmek
- prosesler arasında iletişimi sağlamak
50) Çizgeleyicinin görevleri nelerdir?
- proses kuyruğundan yürütülecek prosesi seçmek
- prosese ait kullanım zaman dilimini ayarlamak
48) Unix işletim sisteminde ... komutu prosesleri işler?
ps
49) Unix işletim sisteminde ... komutu yanında kimlik numarası verilen prosesi yok eder?
kill
3.4.1. Görev Yönetici
3.4.2. İş Yönetimi
3.4.3. İş Yönetici
3.4.4. Orta Dönemli Planlama
3.4.5. Orta Dönemli Planlamanın Konumu
o 3.5. Yönetim Algoritmaları
38) Set up time nedir?
Operatörün bir iş için gereken hazırlıkları yapma süresine set up time denir.
39) Run time nedir?
Başlatılan işin bitimine kadar süreye run time denir.
44) Sistemin performansı hangi kriterlerle ölçülür?
- verimlilik
- güvenilirlik
- koruyuculuk
- sezdiricilik
- elverişlilik
3.5.1. Yönetim Algoritmaları Kıstasları
3.5.2. Algoritmalar
3.5.2.1. İlk Gelen Önce Algoritması (First Come First Served)
3.5.2.2. En Kısa İşletim Süresi Kalan Önce (Shortest Remaining Time First)
3.5.2.3. Öncelik Tabanlı Algoritma (Priority based)
3.5.2.4. Zaman Dilimli Algoritma (Time Sliced - Round Robin)
3.5.2.5. Çok Kuyruklu Algoritma (Multi-level Queues)
o 3.6. İşletim Dizileri (Threads)
18) Program, process, ve iş parçacığı arasındaki farklar nelerdir?
Program statik ve pasif varlıktır. Çalıştırılana kadar hiçbir şey yapmaz. Bellekte yer kaplamaz ve kaynak kullanmaz. Çalışan program, process adını alır. Kaynak kullanır ve yönetir. İş parçacığı, process içinde birden fazla görevin aynı anda yürütülmesini sağlar. Process'in belleğini kullanır.
o Bölüm Özeti
o Değerlendirme Soruları
• Bölüm 4: Birlikte Çalışan Görevler
o Giriş
o 4.1. Koşut İşlem ve Görevler Arası Etkileşim
61) Koherens protokolü olmadan çok çekirdekte ne bozulur?
Koherens (Tutarlılık) Protokolü olmadan bir çok çekirdekli (multicore) sistemde en temel olarak veri tutarlılığı (data consistency) bozulur ve bu durum öngörülemez (nondeterministic) program yürütülmesine yol açar.
Önbellek Tutarsızlığı (Cache Incoherence): Her bir çekirdek kendi yerel önbelleğini (L1/L2) kullanır. Bir çekirdek bir bellek bloğundaki veriyi okuyup önbelleğine alır ve sonra bu veriyi değiştirirse, diğer çekirdeklerin önbelleklerinde hala verinin eski/geçersiz (stale) kopyası kalır. Koherens protokolü (örneğin MESI, MOESI), bir çekirdek veri yazarken diğer çekirdeklerin önbelleklerindeki kopyaları geçersiz kılarak (invalidate) veya güncelleyerek bu sorunu çözer.
Yanlış Okumalar ve Yazmalar: Protokol yokluğunda, çekirdek 1 bir X değişkenini yazarken, çekirdek 2 aynı X değişkenini okuyabilir, ancak okuduğu değerin güncel olup olmadığı garanti edilemez. Bu durum, senkronizasyon mekanizmalarının (mutex, semaphore) dahi doğru çalışmasını engeller, çünkü bu mekanizmaların temelindeki bayraklar veya kilit değişkenleri doğru şekilde güncellenip okunamaz.
Programlama Modelinin İmkansızlığı: Tutarlı bir bellek görünümü (coherent memory view) olmadan, standart bir paylaşılan bellek (shared memory) programlama modelini uygulamak imkansız hale gelir. Yazılımcıların beklediği sıralı tutarlılık (sequential consistency) veya daha gevşek tutarlılık modelleri (mesela gevşek tutarlılık - relaxed consistency) sağlanamaz, bu da kritik bölge (critical section) hatalarına ve veri bozulmasına yol açar.
4.1.1. Kaynak Paylaşımı
4.1.2. Bölüşülür ve Bölüşülmez Kaynaklar
4.1.3. Birlikte Çalışan Görevler ve İşletim Bütünlüğü
4.1.4. Görevlerin Koşut Günleme Yapması
4.1.5. Görevler Arası Zaman uyumlama
o 4.2. Görevler Arası Zaman Uyumlama
6) IPC'ye örnek veriniz.
- soketler
- named pipes
- mesaj kuyrukları
- paylaşımlı bellek
7) IPC neden gereklidir?
IPC (Inter-Process Communication) mekanizmaları farklı süreçlerin güvenli, kararlı ve etkili bir şekilde birbirleriyle iletişim kurmasını sağlar. Güvenlik, veri bütünlüğü ve sistem kaynaklarının daha verimli kullanılması için vazgeçilmezdir.
8) En hızlı IPC yöntemi nedir? Neden?
En hızlı IPC yöntemi paylaşımlı bellektir, çünkü verinin kopyalanmasına gerek kalmaz. Ancak, aynı anda birden fazla işlemin aynı belleğe yazması senkronizasyon sorunlarına yol açabilir. Bu nedenle dikkatli kullanılmalıdır.
9) Paylaşımlı bellek nedir?
Paylaşımlı bellek, birden fazla işlem veya iş parçacığının aynı fiziksel bellek alanına eşzamanlı erişim sağlayarak veri alışverişi yapmasına olanak tanıyan bir bellek yönetim yöntemine verilen addır.
4.2.1. Özel Donanım Desteği Gerektirmeyen Yöntemler (Kesilme Düzeneğinin Kullanımı)
4.2.1.1. Kesilme Düzeneğinin Kullanımı (devamı)
4.2.2. Özel Donanım Desteği Gerektirmeyen Yöntemler (Algoritmik Yaklaşım)
4.2.2.1. Algoritmik Yaklaşım (devamı)
4.2.2.2. Algoritmik Yaklaşım (devamı)
4.2.2.3. Algoritmik Yaklaşım (devamı)
4.2.2.4. Algoritmik Yaklaşım (devamı)
4.2.3. Donanım Desteği Gerektiren Alt Düzey Araçlar (test-and-set türü Komutların Kullanımı)
4.2.3.1. test-and-set türü Komutların Kullanımı (devamı)
4.2.3.2. test-and-set türü Komutların Kullanımı (devamı)
4.2.3.3. test-and-set türü Komutların Kullanımı (devamı)
4.2.3.4. test-and-set türü Komutların Kullanımı (devamı)
4.2.4. Donanım Desteği Gerektiren Alt Düzey Araçlar (İlkel Semafor İşleçlerinin Kullanımı)
51) İkili semafor nedir?
En çok 1 değeri alan semafora ikili semafor denir.
4.2.4.1. İlkel Semafor İşleçlerinin Kullanımı (devamı)
4.2.4.2. İlkel Semafor İşleçlerinin Kullanımı (devamı)
4.2.4.3. İlkel Semafor İşleçlerinin Kullanımı (devamı)
4.2.4.4. İlkel Semafor İşleçlerinin Kullanımı (devamı)
4.2.4.5. İlkel Semafor İşleçlerinin Kullanımı (devamı)
4.2.4.6. İlkel Semafor İşleçlerinin Kullanımı (devamı)
4.2.4.7. İlkel Semafor İşleçlerinin Kullanımı (devamı)
4.2.4.8. İlkel Semafor İşleçlerinin Kullanımı (devamı)
4.2.4.9. İlkel Semafor İşleçlerinin Kullanımı (devamı)
4.2.4.10. İlkel Semafor İşleçlerinin Kullanımı (devamı)
4.2.5. Üst Düzey Zamanuyumlama Araçları
4.2.5.1. İleti Aktarımı, send/receive Komutları
4.2.5.1.1. İleti Aktarımı, send/receive Komutları (devamı)
4.2.5.1.2. İleti Aktarımı, send/receive Komutları (devamı)
4.2.5.1.3. İleti Aktarımı, send/receive Komutları (devamı)
4.2.5.1.4. İleti Aktarımı, send/receive Komutları (devamı)
4.2.5.1.5. İleti Aktarımı, send/receive Komutları (devamı)
4.2.5.2. Monitor Kullanımı
4.2.5.2.1. Monitor Kullanımı (devamı)
4.2.5.2.2. Monitor Kullanımı (devamı)
4.2.5.2.3. Monitor Kullanımı (devamı)
o 4.3. Görevler Arası Kilitlenme
4.3.1. Kilitlenmenin Tanımı
4.3.2. Kilitlenmenin Nedenleri
4.3.3. Sistem Kaynakları
4.3.4. Kilitlenmelerden Korunma
4.3.5. Kilitlenmelerden Korunma (İki Aşamalı Kilitleme)
4.3.6. Kilitlenmelerden Korunma (Sıradüzensel Kaynak Atama)
4.3.7. Kilitlenmelerden Sakınma
4.3.8. Banker Algoritması
4.3.9. Kilitlenmelerin Yakalanması ve Ortadan Kaldırılması
o Bölüm Özeti
o Değerlendirme Soruları
• Bölüm 5: Ana Bellek Yönetimi
o Giriş
52) Bellek yönetimi nedir?
Bilgisayarın ana belleğini belirli bir düzen içerisinde kullandıran işlevlerin hepsine bellek yönetimi denir.
o Giriş (Devamı)
o Giriş (Devamı)
o Giriş (Devamı)
o 5.1. Tek Ve Bitişken Bellek Yönetimi
o 5.2. Değişmez Bölümlü Bellek Yönetimi
5.2.1. Bölüm Tanım Çizelgesi
5.2.2. Değişmez Bölümlü Bellek Yönetiminin Geliştirilmesi
o 5.3. Değişken Bölümlü Bellek Yönetimi
5.3.1. Değişken Bölümlü Bellek Yönetimi Algoritmaları
5.3.2. Ana Belleğin Parçalanması Sorunu
5.3.3. Bitiştirme
5.3.3.1. Veriler
5.3.3.2. Fiziksel Adres Evrenine Geçiş
o 5.4. Yerdeğişir Bölümlü Bellek Yönetimi
5.4.1. Diske Taşıma (Swapping)
5.4.2. Diske Taşıma (Swapping) (Devamı)
o 5.5. Sayfalı Bellek Yönetimi
5.5.1. Adresleme Mantığı
5.5.2. Sayfa Tanım Çizelge Yazmacı
5.5.3. Ön Bellek Kullanımı
5.5.4. Adres Dönüştürme İşlemleri
5.5.5. Görevlerin Adres Evreninin Kesişmesi, Sayfa Paylaşımı
5.5.6. Koruma Düzeneği
o 5.6. Kesimli Bellek Yönetimi
5.6.1. Kesimlerin Konumları
5.6.2. Adres Dönüştürme İşlemleri
5.6.3. Kesimli Bellek Yönetiminde Erişim
5.6.4. Kod, Veri, Yığıt Kesimleri
5.6.5. Kesim Zorlama (Segment Override)
5.6.6. Kesimli Bellek Yönetiminde Koruma Düzeneği
5.6.7. Görüntü Ana Bellek Düzeni
o 5.7. Sayfalı Görüntü Bellek Yönetimi
5.7.1. Sayfalı Görüntü Bellek Yönetimi Aşamaları
5.7.2. Adres Dönüştürme Süreci
5.7.3. Sayfa Çıkarma Algoritmaları
5.7.3.1. İlk Giren Sayfayı Çıkarma
5.7.3.2. En Erken Erişilmiş Sayfayı Çıkarma
5.7.3.2.1 En Erken Erişilmiş Sayfayı Çıkarma (Devamı)
5.7.3.3. En Geç Erişilecek Sayfayı Çıkarma
5.7.4. Görevlere Sayfa Atama Politikaları
5.7.5. Trashing
5.7.5.1. Trashing (Devamı)
o 5.8. Kesimli Görüntü Bellek Yönetimi
5.8.1. Kesim Bellekte Belirteci
5.8.2. Bellek Erişim Süreci
o 5.9. Kesimli-Sayfalı Görüntü Bellek Yönetimi
5.9.1. Adres Dönüştürme Süreci
5.9.2. Adres Dönüştürme İşlemi
5.9.3. Çok Düzeyli Adres Dönüştürme
o Bölüm Özeti
o Değerlendirme Soruları
• Bölüm 6: Kütük Yönetimi
• Bölüm 7: Güvenlik ve Koruma
17) Kullanıcı Modu ile Çekirdek Modu Arasındaki Farklar Nelerdir?
a. Görev dağılımı ve uygulama tipleri: Kullanıcı modu, düşük öncelikli görevler ve genel kullanıcı uygulamaları için ayrılmıştır. Bir web tarayıcısı veya kelime işlemci gibi programlar bu modda çalışır. Çekirdek modu ise işletim sistemi çekirdeğinin çalıştığı moddur ve kesme (interrupt) ile sistem çağrıları gibi yüksek öncelikli olayları ele alır. Bu sayede sistem, donanım aygıtlarından gelen kritik sinyallere anında yanıt verebilir.
b. Amaç ve güvenlik: Kullanıcı modunun amacı, sistem kaynaklarını kısıtlayarak hatalı veya zararlı kodların tüm sistemi çökertmesini engellemektir. Çekirdek modunun amacı ise donanım, bellek ve süreç yönetimi gibi temel işlemleri güvenli ve doğrudan yönetmektir.
c. Erişim yetkileri ve donanım kontrolü: Kullanıcı modunda bellek, dosya sistemi ve donanıma doğrudan erişim yasaktır. Bu tür talepler I/O alt sistemi aracılığıyla gerçekleştirilir ve sistem çağrısı (system call) ile çekirdek moduna iletilir. Çekirdek modu ise tüm donanım kaynaklarına doğrudan erişim sağlar; disk sürücüsü veya ağ kartı gibi aygıtlara komut gönderebilir. Ayrıca CPU’nun tüm komut setine ve özel kayıtlarına erişerek sanallaştırma ve donanım denetimi gibi karmaşık görevleri yerine getirebilir.
20) Koruma ile güvenlik arasında ne fark vardır?
Koruma sistem içindeki erişim denetimidir. Güvenlik ise dış tehditlere karşı sistemin bütünlüğünü, gizliliğini ve sürekli çalışmasını sağlamayı ifade eder.
62) UEFI Secure Boot neyi garanti etmez?
Birleşik Genişletilebilir Firmware Arayüzü (UEFI) Güvenli Önyükleme (Secure Boot), sistem önyükleme zincirinin güvenliğini artırmak için tasarlanmış bir mekanizmadır, ancak koruma kapsamı sınırlıdır. Garanti etmediği temel şeyler şunlardır:
İşletim Sisteminin Çalışma Zamanı Güvenliği: Secure Boot, yalnızca önyükleme sürecini (boot loader, çekirdek ve kritik sürücüler) korur. İşletim sistemi yüklendikten sonra, çalışan bir uygulamanın güvenlik açığı içermesi, bir virüs bulaşması veya işletim sistemi çekirdeğinin kendisinin suistimal edilmesi gibi durumları engellemez veya tespit etmez.
Firmware Dışı Saldırılar: Secure Boot, UEFI firmware'in kendisi dışındaki donanım (örneğin, G/Ç aygıtları veya bir DMA saldırısı) üzerinden yapılan saldırılara karşı doğrudan koruma sağlamaz. Kötü amaçlı bir aygıtın IOMMU olmaksızın belleğe erişerek çalışmakta olan sisteme saldırmasını engellemez.
Önyükleyici Dışı Veri Bütünlüğü: Secure Boot, önyükleme bileşenlerinin bütünlüğünü garanti ederken, kullanıcı verilerinin veya önyükleme sürecine dahil olmayan diğer sistem dosyalarının bütünlüğünü garanti etmez.
Yetkili Ancak Kötü Amaçlı Kod: Secure Boot, sadece geçerli bir dijital imza ile imzalanmış yazılımların çalışmasına izin verir. Eğer bir saldırgan, bir yazılım geliştiricisinin geçerli imzalama anahtarına erişim sağlar ve kötü amaçlı yazılımı bu anahtarla imzalarsa, Secure Boot bu yazılımın çalışmasını engellemez çünkü yazılımı "yetkili" olarak kabul eder. Güvenlik anahtarlarının bütünlüğü Secure Boot'un bir garantisi değildir.
Kullanıcı Kimlik Doğrulaması: Secure Boot, kullanıcının sisteme erişmeden önce kimliğini doğrulamayı veya kullanıcı verilerini şifrelemeyi (Full Disk Encryption) garanti etmez. Bu, işletim sisteminin veya ek şifreleme yazılımlarının sorumluluğundadır.
Hiç yorum yok:
Yorum Gönder