İŞLETİM SİSTEMLERİ GİRİŞ İŞLETİM SİSTEMİNİN TANIMI 1.1. İşletim Sisteminin Tanımı : Yazılım, bilgisayara ne yapmasını söyleyen kurallar manzumesidir. Bir bilgisayarın çalışabilmesi için üzerinde mutlaka bir programın çalışması gereklidir. Bilgisayarın kullanım amacına bağlı olarak bu programın işlevleri ve boyutları da değişir. Genellikle yazılım ve program kavramları birbirlerinin yerine kullanılsa da temel olarak bir program belli işlevleri yerine getirmek üzere yazılmıştır ve komut satırlarından oluşur. Yazılım ise programlar bütününe verilen isimdir. Bir bilgisayar üzerinde bulunan yazılımları iki ana kategoride toplamak mümkündür: a) Sistem Yazılımları b) Uygulama Yazılımları Bir önceki sayfadaki şekilde görüldüğü gibi, sistem yazılımları donanımın hemen üzerinde uygulama yazılımları ile donanım arasındaki bağlantıyı oluşturmaktadır. Aynı şekilde, uygulama yazılımları da kullanıcı ile bilgisayar arasındaki iletişimi sağlamaktadır. Uygulama yazılımları, bilgisayarın okuyabildiği dillerle, yani programlama dilleriyle geliştirilirler. Sistem yazılımları ise, bilgisayar sisteminin genel işlerini yaparlar. Bir anlamda, uygulama yazılımlarının çalışabilmesi için gerekli altyapıyı sağlarlar. Sistem yazılımlarını da kendi aralarında iki gruba ayırabiliriz : 1. İşletim Sistemleri 2. Sistem Yazılımları İşletim sistemleri sistem yazılımlarının en önemlisidir. En birincil görevi kaynak yöneticisi olmasıdır. Yönettiği kaynakların en önemlisi de donanımdır. Bu anlamda işletim sisteminin ana kaynakları genel olarak merkezi işlem birimi, bellek, giriş/çıkış aygıtları ve veri olarak sınıflandırılabilir. Yardımcı yazılımlar ise, işletim sisteminin yeteneklerini ve işlevlerini genişleten bir bakıma tamamlayan yazılımlardır. Örneğin bilgisayarı kurmaya yarayan ancak işletim sisteminin içerisinde olmayan yazılımları bu sınıf girer. Disk formatlama, dosya kopyalama, modemle haberleşme ve veri iletişim aktiviteleri yardımcı yazılımlarla gerçekleştirilir. İşletim Sistemlerini İşlevleri Donanım bilgi-işlem gücü sağlarken, işletim sistemi bu güce uygulama programlarının dolayısıyla kullanıcıların erişimini sağlar. Donanımın kullanıcılar arasında paylaşılmasını sağlar. Kullanıcılara programları ve verileri paylaşma olanağı sağlar. Kullanıcılara verileri koruma olanağı sağlar. Kaynakların kullanımını düzenler. Giriş-çıkış işlemleri ve ikinci belleğe erişim olanağı sağlar. İşletim Sisteminin Mimarisi İşletim sistemlerini genel olarak kontrol programları ve işlem programları olarak iki grupta toplayabiliriz. Kontrol programları, bilgisayar sisteminin işlemlerini kontrol ederler. Kaynakların atanması, işlevlerin sıraya konması, giriş-çıkış işlemlerinin yerine getirilmesi gibi görevleri yerine getirirler. İşlem programları ise kullanıcıların sisteme erişmesini ve sistem olanaklarını kullanmasını sağlar. 1 - Kontrol Programları : Bilgisayar ilk açıldığında genellikle "kernel" adı verilen bir işletim sistemi programı bilgisayar belleğine aktarılır. Bu program gereksinim duyulan diğer işletim sistemi parçalarını ikincil bellekten ana belleğe yükler. Bellekte sürekli kalan program parçalarına yerleşik işletim sistemi programları denir.Yerleşik işletim sistemi programlarına denetleyici ya da gözetleyici de diyebiliriz. Bu program işletim sisteminin tüm diğer birimlerinin işlemlerini yönetir. İşletim sisteminin yerleşik olmayan parçaları gerektikçe belleğe aktarılır. Kontrol programlarının beş tane görevi vardır. Kaynak yönetimi, kesmelerin ele alınması, işlem yönetimi, veri kontrolü ve sistem durum denetimi görevleri. Kontrol Programlarının İşlevleri a) Kaynak Yönetimi : Kaynak yönetimi hangi kaynağın, hangi kullanıcı tarafından ne zaman kullanılacağını kontrol eden işlevdir. Özellikle çok kullanıcılı sistemlerde önem kazanan bu işlev aynı anda kaynaklara erişmek isteyen kullanıcıların erişimini en iyi şekilde düzenler. b) Kesmelerin Ele Alınması : Kesmeler çalışmakta olan bir programın daha acil bir işleme hizmet vermek üzere kısa süreli durdurulmasıdır. c) Sistem Durum Denetimi : Bir işletim sisteminin önemli görevlerinden birisi de sürekli olarak sistemi denetlemek ve oluşan hataları az sorun yaratarak çözmektir. d) İşlem Yönetimi : Yürütülmekte olan programa verilen isimdir. Birden fazla programı aynı anda çalıştırabilen işletim sistemlerinde her bir program birden fazla parçadan oluşur. Aslında işlemci aynı anda sadece bir programı çalıştırmaktadır. İşlemcinin zamanı değişik programlar arasında paylaştırması aynı anda birden fazla işlemi çalıştırdığı izlenimini uyandırır. İşletim sistemi içinde işlem yönetimini kernel'ın bir parçası olan program yöneticisi ve program dağıtıcısı yürütmektedir. Program yöneticisi bilgi sisteminde mevcut olan işlerin listesini tutar. Yani işleri devreye sokar ve sona eren işleri devreden çıkarır. e) Veri Kontrolü : Veri girişinin sağlanması, girilen verilerin ana belleğe ve oradan da ikincil belleğe aktarılması ve verilerin çıkış birimlerine yazılması uygulama programları tarafından işletim sistemine bildirilir. Veri kontrol yazılımları genellikle giriş/çıkış ve depolama birimlerini kontrol eden alt düzey programlardır. Bu alt düzey etkinliklerin yanı sıra bir işletim sisteminin veri kontrol programları tampon, veriyolu ve havuz yöneticilerini de kontrol eder. Tampon, değişik hızlarda çalışan ya da değişik öncelikleri bulunan donanım aygıtları ve program işlemleri tarafından paylaşılan veri alanıdır. Tampon her aygıtın ya da işlemin diğer bir aygıt ya da işlem tarafından engellenmeden çalışabilmesini sağlar. Bir tamponun etkili olabilmesi için tamponun giriş/çıkışı ve tamponu yöneten algoritmalar vardır. Tamponlar, bellekler arasındaki hız farkını ortadan kaldırmak için kullanılır. Tampon, ön bellek gibi bir depolama bölgesidir. Fakat tampon bellek, bir işlemin hızını arttırmaktan çok farklı işlemlerin güvenli bir şekilde ve işlemciyi meşgul etmeden yönetilmesi için kullanılır. Havuz yönetimi, birden fazla kullanıcı programın aynı anda yazıcıya çıktılarını gönderebilmelerini ve bu sırada da çalışmalarını sürdürebilmelerini sağlayan işlemlerdir. Programlar önce sabit diske gönderilir. Buradan alınıp yazıcıya aktarılır. 2- İşlem Programları : Bu programlar kullanıcıların bilgisayar sistemlerinde sıkça kullandıkları işlevlerin gerçekleştirilmesini sağlayan programlarıdır. Bunların en önemlisi Shell adı verilen ve kullanıcının işletim sisteminin parçaları arasındaki iletişimi sağlayan yazımlardır. 1.2. İşin Tanımı Kullanıcılar bilgisayar sistemlerinden ilgili programlarını çalıştırarak yararlanırlar. Bir programın çalıştırılması, işletim sisteminin kabuk katmanınca yorumlanan run, execute gibi kimi sistem komutları aracılığıyla ya da sadece bu programın saklandığı kütük adı verilerek sağlanır. Kullanıcılar, kimi zaman ya değişik programları arka arkaya ya da aynı programı değişik veri takımlarıyla, belirli bir mantıksal sırada işlemek gereksinimini de duyabilirler. Örneğin A programını çalıştırmak, bu programın oluşturduğu K1 kütüğünü B programı ile işlemek ve K2 kütüğünü elde etmek istenebilir. Bu örnekte sıralanan işlemler bir işi oluşturur. Bu durumda iş, kullanıcıların sistemden bir bütün olarak ele alınmasını istedikleri işlem takımına verilen ad olarak tanımlanır. İş, program kavramını genişleterek içeren bir kavramdır. Bu bağlamda, tek bir program da bir iş olarak adlandırılabilecektir. 1.3. Tek ve Çok İş Düzeni : Tek 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 sistemlerini kısıtlı kaynaklara sahip olduğu ilk yıllarda kullanılmış, sonradan bilgisayar sistemlerinin ucuzlamasıyla 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şlaması 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. Tek iş düzeninden çok iş düzenine, sistem kaynaklarını işler arasında paylaştırarak, bir yandan bu kaynakların kullanım verimliliğini, diğer yandan, birim zaman süresi içinde daha çok iş sonlandırıp işletim hızlarını artırma k amacıyla geçilir. 1.4. Görev ve Çok Görevli İşlem : Çok iş düzeninin uygulandığı bilgisayar sistemlerinde, aynı anda birden çok işin ele alınabilmesi, sistem kaynaklarının değişik işler ya da programlar arasında paylaştırılmasını gerektirir. Ana işlem biriminin de, önemli bir kaynak olarak programlar arasında paylaştırılması, işletilmekte olan bir programın kesilerek diğer bir programın işletime alınmasını gerektirir. İşletimi kesilen programın işletimine, ileride kalınan yerden devam edilebilmesi ve işletim bütünlüğünün korunabilmesi için işletimin kesildiği konuma ilişkin durum bilgilerinin saklanması gereklidir. Bu amaçla, işletilen her program için, bu bilgilerin saklandığı bir veri yapısı öngörülür. İlgili programın her kesilişinde program sayacı, yığıt sayacı gibi programın kullandığı ana işlem birimi yazmaç içerikleri, programın saklandığı kütük kimliği, programca açılmış kütüklerin bulunduğu altklavuz kimlikleri gibi bilgiler bu veri yapılarına saklanır. Bir program işletime alınacağı zaman ise ana işlem birimi yazmaç içerikleri ve diğer işletimle ilgili değişkenler bu bilgilerle güncellenerek işletimin kalınan yerden sürdürülmesi ve işletim bütünlüğünün korunması sağlanır. 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 adı verilen yapısı ile ele alınan biçimine görev adı verilir. 1.5. Toplu ve Etkileşimli İşlem : 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 olanaklarına sahip değildirler. Kullanıcıların iş adımlarını adım adım işletebildiği, adımlar arasında işletim akışını izleyebildiği ve işletim akışına müdahale edebildiği işlem türü etkileşimli işlem olarak adlandırılmaktadır. Etkileşimli işlemde kullanıcılara sistemle terminaller aracılığıyla etkileşim kurarlar. Bu işlem türünde ana işlem birimi, kısa zaman dilimleri içinde (örneğin her 10 ms'de bir) kullanıcılara sırayla dönerek atanır. Bu zaman dilimlerinin bir ya da birkaçında, terminallerin başında oturan kullanıcıların, terminallerinden girdikleri işletim komutları çalıştırılabildiğinden kullanıcılar, komutlarına anında yanıt alırlar. Böylece kullanıcılar sistem tümüyle kendileri için çalışıyormuş izlenimini elde ederler. Etkileşimde 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. 1.6. Gerçek Zamanlı İşlem : Gerçek zamanlı işlem, genelde, çok görevli işlemle birlikte anılan bir işlem türüdür. Çünkü, ç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 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 yapılan uygulamanın çevrim içi bir uygulama söylenir. 1.7. İşletim Sistemini Oluşturan Kesimler İş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 sistemi olacak şekilde 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ının, ana işlem biriminin, ana belleğin, giriş/çıkış birimlerinin kullanıcılar arasında verimli paylaşımını sağlayan işlemleri ana belleğin yönetimi, ana işlem biriminin yönetimi, kütük yönetimi gibi değişik kesimler içinde toplanır. a ) Ana İşlem Biriminin Yönetimi : Ana işlem birimi bir bilgisayar sisteminin en önemli kaynağını oluşturur. Bu önemli kaynağın kullanıcılar arasında paylaştırılması ana işlem biriminin yönetimi kapsamında ele alınır. Ana işlem birimi, kullanıcı programlarının birlikte işletilmesiyle paylaştırılır. Bir program tümüyle sonlanmadan bir diğerinin de işletime alınması, bu programların birlikte işletilmesi olarak bilinir. Programlar, birlikte işletimin gereği olarak zaman zaman kesilerek ana işlem birimini diğer programlara bırakmak zorunda kalırlar. Bu biçimde kesilen bir programın, işletimini sorunsuz sürdürebilmesi için kesildiği andaki işletim ortamının saklanması gereklidir. Bu amaçla işletime alınan tüm programlar için iskelet adı verilen özel veri yapıları tutulur. Bir program işletime alınacağı zaman, işletim ortamını belirleyen ana işlem birimi yazmaçları bu program iskeletindeki bilgilerle güncellenir. Program işletimi, bu biçimiyle görev olarak adlandırılır. Ana işlem birimi yönetimi, bu nedenle görev yönetimi olarak da adlandırılır. Şekil - Görev Durum Düzeneği 1: İşlem hazır görevlerden biri, 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şletiminde devam edemeyeceğinden bekler görev durumuna geçer ve ana işlem birimini bırakır. 3 : Özel değişkenler üzerinde işlem yapan zaman uyumlama işleçlerini çalıştıran görevler de, ana işlem birimini bırakıp bekler durumuna geçebilirler. 4 : Görevler, ana işlem birimini kendilerinden kaynaklanmayan nedenlerden dolayı da bırakmak zorunda kalabilirler. 5 : Giriş/çıkış istemi, zaman uyumlama gibi nedenlerle bekler konuma geçen görevler yine çalışmaya hazır görevler haline dönerler. 6 : Bekler konumda bulunan bir görev işletime hazır hale gelmektedir. b ) Zaman Uyumlama İşlevleri : Bir bilgisayar sisteminde tüketilen kaynak sayısı aynı anda işletime alınan görev sayısından her zaman çok daha küçüktür. Görevler, örneğin yazıcılar gibi kimi kaynakları bu nedenle paylaşmak zorunda kalırlar. Görevlerin kaynakları gerekli önlemler almadan rastgele paylaşması işletim bütünlüğünün bozulmasına yol açar. Bu nedenle kaynak paylaşımında işlem bölünmezliği, görev yapılarına zaman uyumlama işlevseli olarak adlandırılan özel bir programlama araçlarıyla katılır. c ) Giriş / Çıkış Sistemi : Giriş / çıkış birimleri verileri hem bilgisayar sistemiyle dijital ortam arasına iki yönlü aktarımını sağlayan hem de bunların bilgisayar ortamlarında saklanmasına yarayan bölümlerdir. Giriş / çıkış komutları, giriş/çıkış sürücüleri ve arabirimlerinden oluşur. Bilgisayar sistemi aynı anda birden çok giriş/çıkış birimini kontrol etmektedir. Bunun için çoğu kez sürücü – arabirim arası aktarım işlemleri bir kez başlatıldıktan sonra ara birimlerin aktarım sonunda ana işlem birimini uyarması öngörülür. Bu yolla ana işlem biriminin birden çok arabirimi eş zamanlı olarak denetleyebilmesi sağlanır. Arabirimler iş bittiğinde ana işlem birimine kesilme uyarıları gönderir. Değişik giriş/çıkış arabirimlerinden aynı anda ve zaman uyumsuz olarak gelen bu uyarılar hiçbir veri kaybına yol açmadan ve birimlerin öncelik sırası gözetilerek ele alınması, kesilmelerin yönetimi olarak bilinir. Kesilmelerin yönetimi giriş/çıkış kapsamında düşünülür. Verilerin giriş/çıkış birimleriyle ana bellek arasında aktarılması her zaman kesilme düzeneğine dayalı olarak yapılmaz. Özellikle disk gibi hızlı giriş/çıkış birimlerinden veriler doğrudan bellek erişimi olarak adlandırılan bir başka yöntemle aktarılırlar. d ) Ana Belleğin Yönetimi : Programların birlikte işletimi, ana belleğin bunlar arasında paylaştırılmasını zorunlu kılar. Ana bellek programlar arasında değişik biçimlerde bölümlenerek paylaştırılır. Belleğin bölünmesinden parçalanma sorunu ortaya çıkar. Parçalanma sonucu belleğe programların yeniden yerleştirilirken dönem dönem birleştirilmeleri yoluyla açılır. e ) Kütük Yönetimi : Kütük yönetimi kullanıcılara ana bellek dışında saklanan verileri üzerinde kolay ve hızlı işlem yapabilme olanağı veren işletim sistemi kesimidir. Kütükler üzerinde yapılan temel işlemler okuma-yazma, açma-kapama işlemleridir. f ) Sistem Komut Yorumlayıcısı : İşletim sisteminin kullanıcıyla iletişim kurduğu katman kabuk katmanıdır. Kabuk katmanında yer alan sistem komut yorumlayıcısı kullanıcıların girdikleri komutları yorumlayarak, bu komutlarla tanımlanan işlemleri yerine getirirler. İŞLETİM SİSTEMLERİ TÜRLERİ 2.1. Mainframe İşletim Sistemleri Mainframe bilgisayarlar oda büyüklüğünde bilgisayarlardır ve büyük data merkezlerinde hala bulunmaktadırlar. Bu bilgisayarlar, kişisel bilgisayarlardan giriş / çıkış kapasiteleri bakımından ayırt edilirler. Bir mainframe bilgisayar 1000 disk ya da binlerce gigabyte veriye sahip olabilir, ancak bir kişisel bilgisayarın bunlara sahip olması çok rastlanılan bir durum değildir. Mainframe bilgisayarlarda kullanılan işletim sistemleri aynı anda birden çok işi yapmak için bir hayli yavaştır. Onlar tipik olarak üç farklı iş sunarlar: küme, işlem yapma ve zaman paylaşımı. Bir küme sistemi halihazırda etkin bir kullanıcı olmadan rutin işlemleri yapar. Bir sigorta şirketinde oluşan istekler veya bir mağazalar zincirinin satış raporları küme modunda yapılır. İşlem yapma sistemleri küçük istekleri büyük numaraları kullanarak sağlarlar, örneğin bir bankada ya da uçak rezervasyonlarındaki kontrol işlemlerinde. Her bir iş küçük ünitelere ayrılmıştır, fakat sistem saniyede yüzlerce ya da binlercesini tutmalıdır. Eş zamanlı sistemler büyük veritabanlarındaki sorgu işlemleri gibi, aynı anda bilgisayarda çok sayıda uzaktaki kullanıcıya çalışmaları için izin verir. Mainframe işletim sistemlerine örnek olarak OS/390 ve OS/360 verilebilir. 2.2. Server İşletim Sistemleri Bir diğer işletim sistemleri türü server işletim sistemleridir. Bu sistemler, çok büyük kişisel bilgisayarlarda, iş istasyonlarında veya hatta mainframe bilgisayarlardaki serverlarda çalışırlar. Bu sistem aynı anda çok sayıda kullanıcının ağa bağlanmasına ve kullanıcıların donanım ve yazılım kaynaklarını paylaşmasına izin vererek onlara yardım eder. Serverlar, yazıcı servisleri, dosya servisleri veya Web servislerini sağlayabilir. Internet sağlayıcıları onların müşterilerinin kullanabilmesi için birçok server makinesinde çalışır ve Web siteleri Web sayfalarını saklamak ve gelen talepleri tutmak için serverları kullanırlar. Tipik server işletim sistemleri UNIX ve Windows 2000’dir. 2.3. Çok İşlemcili İşletim Sistemleri Gittikçe çok yaygınlaşan bir durum da bir basit sistemin içerisine bir çok CPU bağlayarak çok önemli hesaplamaları yapmaktır. Bu sistemler nasıl bağlandığına ve neyi paylaştığına bağlı olarak paralel bilgisayarlar, çoklu bilgisayarlar veya çok işlemcili diye adlandırılır. Bu bilgisayarlar özel işletim sistemlerine ihtiyaç duyarlar, fakat server işletim sistemlerinde iletişim ve bağlantı için ekstra özellikler eklenerek de kullanılabilirler. 2.4. PC İşletim Sistemleri : Bir sonraki kategori PC işletim sistemleridir.Onların işi kullanıcılara güzel bir arayüz sağlamaktır. Kelime işlemcileri, hesaplama tabloları ve internete giriş için geniş bir alanda kullanılırlar. Bu sistemlere örnekler, Windows 98, Windows 2000, Macintosh işletim sistemi ve Linux. PC işletim sistemleri çok yaygın olarak kullanılırılar. 2.5. Gerçek Zamanlı İşletim Sistemleri : İşletim sistemlerinin bir diğer çeşidi gerçek – zamanlı işletim sistemleridir. Bu sistemler, çok önemli bir zaman parametresine sahip olarak nitelendirilir. Örneğin endüstriyel kontrol sistemlerinde , gerçek - zamanlı bilgisayarlar üretim işlemleri hakkındaki bilgileri toplar ve o bilgileri fabrikadaki kontrol makinelerinde kullanırlar. Sıkça çok önemli olan son üretim tarihiyle ilgili karşılaştırmaları yapmalıdır. Örneğin eğer bir araba fabrikadan çıkarılacaksa, zamanın belli bir anında belirli hareketleri yapabilmelidir. Eğer kaynak yapan robot çok erken ya da çok geç kalırsa bu bir felaket olacaktır. Yapılan faaliyet tümüyle zamanın belirli bir aşamasında meydana geliyorsa biz buna hard gerçek zamanlı sistem diyoruz. Diğer bir gerçek zamanlı sistem ise arada sırada hataların yapılabildiği soft gerçek zamanlı sistemlerdir. Digital ses veya multimedya sistemleri bu kategoriye girerler. VxWorks ve QNX bilinen gerçek zamanlı işletim sistemlerindendir. 2.6. Gömülü İşletim Sistemleri : Daha küçük sistemlere doğru ilerlemeye devam ediyoruz. Şimdi de avuç içi bilgisayarlar ve gömülü sistemlere geldik. Bir avuç içi bilgisayar elektronik adres defteri ve not defteri gibi küçük fonksiyonları yapabilen ve bir gömlek cebinde taşınabilen küçük bilgisayarlardır. Gömülü sistemler genellikle bilgisayarlardan farklı olarak kontrol aygıtlarında bulunan bilgisayarlarda çalışırlar. Bunlar TV setleri, mikrodalga fırınlar ve mobil telefonlardır. Gömülü işletim sistemleri, gerçek zamanlı sistemlerin bazı özelliklerine sahiptir, ancak boyut, bellek ve güç sınırlamaları onları özel kılmaktadır. PalmOS ve Windows CE bu tür sistemlere örnek olarak verilebilir. 2.7. Akıllı Kart İşletim Sistemleri : Küçük işletim sistemleri kredi kartı büyüklüğünde, bir çip içeren akıllı kartlarda çalışırlar. Onlar çok kısıtlı işlem gücüne ve belleğe sahiptir. Bu sistemlerin bazıları elektronik ücret ödeme gibi yalnızca tek fonksiyonu yerine getirirler, fakat diğerleri benzer smart kartta bir çok fonksiyonu kullanabilir. Bunlar tescilli sistemlerdir. Bazı akıllı kartlar java tarafından yönlendirilir. Bunun anlamı java sanal makinesi için akıllı karttaki ROM’da bir yorumlayıcı tutulur. Java apletleri (küçük programlar) JVM yorumlayıcısı tarafından karta yüklenir ve yorumlanır. Bu kartların bazıları aynı anda çok sayıda Java apletlerini kullanabilir. 2.6. Gömülü İşletim Sistemleri : Daha küçük sistemlere doğru ilerlemeye devam ediyoruz. Şimdi de avuç içi bilgisayarlar ve gömülü sistemlere geldik. Bir avuç içi bilgisayar elektronik adres defteri ve not defteri gibi küçük fonksiyonları yapabilen ve bir gömlek cebinde taşınabilen küçük bilgisayarlardır. Gömülü sistemler genellikle bilgisayarlardan farklı olarak kontrol aygıtlarında bulunan bilgisayarlarda çalışırlar. Bunlar TV setleri, mikrodalga fırınlar ve mobil telefonlardır. Gömülü işletim sistemleri, gerçek zamanlı sistemlerin bazı özelliklerine sahiptir, ancak boyut, bellek ve güç sınırlamaları onları özel kılmaktadır. PalmOS ve Windows CE bu tür sistemlere örnek olarak verilebilir. 2.7. Akıllı Kart İşletim Sistemleri : Küçük işletim sistemleri kredi kartı büyüklüğünde, bir çip içeren akıllı kartlarda çalışırlar. Onlar çok kısıtlı işlem gücüne ve belleğe sahiptir. Bu sistemlerin bazıları elektronik ücret ödeme gibi yalnızca tek fonksiyonu yerine getirirler, fakat diğerleri benzer smart kartta bir çok fonksiyonu kullanabilir. Bunlar tescilli sistemlerdir. Bazı akıllı kartlar java tarafından yönlendirilir. Bunun anlamı java sanal makinesi için akıllı karttaki ROM’da bir yorumlayıcı tutulur. Java apletleri (küçük programlar) JVM yorumlayıcısı tarafından karta yüklenir ve yorumlanır. Bu kartların bazıları aynı anda çok sayıda Java apletlerini kullanabilir. BİLGİSAYAR DONANIMI 3.1. Mikro İşlemciler : İşlemci, bilgisayarın beynidir. Bellekten komutları getirerek onları çalıştırır. İlk olarak bellekten komut alma, sonra tipine ve operandına karar vererek çözme ve çalıştırma ve sonra tekrar bu işlemlerin yapılması her işlemcinin sahip olduğu temel çevrimdir. Tüm programlar bu yolla çalıştırılırlar. Her işlemci kendisinin çalıştırabileceği özel bir komut setine sahiptir. Bu nedenle Pentium, Sparc programını çalıştıramayabilir ve Sparc programı da Pentium işlemcide çalışmayabilir. Çünkü belleğe gelen komutlar ya da veri kümeleri komut setinin çalıştırabileceğinden daha uzun olabilir. Bütün işlemciler önemli değişkenleri ve geçici sonuçları tutmak için bazı kaydedicilere sahiptir. Komut setleri genellikle, kaydediciye bellekten yüklenen bir bilgi ve belleğe kaydediciden bir bilgi depolamak için gerekli komutları içerir. Diğer komutlar kaydediciler, bellekler veya her ikisinden gelen sonuçları iki operantla birleştir için kullanılırlar. Bu bellekte veya kaydedicideki sonucun birbirine eklenerek depolanmasına benzemektedir. Genel kaydedicilere ek olarak değişkenleri ve geçici sonuçları tutmak için, birçok bilgisayar programcının görebileceği bir takım özel kaydedicilere sahiptirler. Bunlardan biri bir sonraki komutun getirilmesi için gerekli adresi içeren program sayacıdır. Komut alınıp getirildikten sonra program sayacının değeri 1 arttırılır. Diğer bir kaydedici, bellekte bulunan yığının üzerindekileri gösteren yığın işaretçisi (stack pointer)’dır. Stack her bir işlem için o işleme girildiğinde görülen, çıkıldığında görülmeyen bir iskelet içerir. Bir işlemin yığını kaydedicilerde tutulmayan, giriş parametreleri, yerel değişkenler ve geçici sonuçları tutarlar. Bir diğer kaydedici de program durum kelimesidir. Bu kaydedici komutları karşılaştırarak işlemci önceliği, mod ve diğer çeşitli kontrol bitlerini ayarlayan durum kod bitlerini içerir. Kullanıcı programları genelde tüm program durum kelimesini okuyabilir, ancak tipik olarak onun sadece bazı alanlarına yazabilir. Program durum kelimesi sistem çağrılarında ve giriş – çıkışlarda çok önemli bir rol oynar. İşletim sistemi tüm kaydedicilerden haberdar olmalıdır. İşlemci birçok işlem yapacağı zaman, işletim sistemi sık sık bir programı durdurup, diğerini çalıştıracaktır. Her zaman çalışan bir program işlemci tarafından durdurulabilir, bu nedenle işletim sistemi programa daha sonra tekrar çalıştırılacağı zaman dönebilmek için tüm kaydedicilerdeki bilgileri kaydetmelidir. İşlemci tasarımcıları uzun süreden bu yana kullanılan aynı anda tek komut alıp getiren, çözen ve çalıştıran basit modelden vazgeçerek işlemci performansını arttırmaktadırlar. Modern işlemcilerin birçoğu aynı anda birden çok daha fazla sayıda komutu çalıştırabilmek için birtakım özelliklere sahiptir. Örneğin bir işlemci, alıp-getirme, çözme ve çalıştırma ünitelerine ayrılabilir, bu şekilde n adet komut çalıştırılabilirken, ayrıca n+1 sayıda komut çözülebilir ve n+2 komut alınabilir. Bu organizasyon biçimi pipeline olarak adlandırılır. Bir pipeline üç safha içermektedir. Genel olarak uzun pipeline’lar kullanılır. Birçok pipeline dizaynında bir komut pipeline’a getirildiği zaman, bir önceki alınan komuta bağlı olsa bile çalıştırılır. Pipeline’lar derleyici yazanlara ve işletim sistemi yazanlara büyük baş ağrılarına sebep olurlar, çünkü pipeline’lar makinenin karmaşıklıklarını açığa vururlar. Şekil a) Pipeline İşlemci Şekil b) Superscalar İşlemci Daha çok gelişmiş bir pipeline dizaynı şekil b’de görülen superscalar işlemcidir. Bu dizaynda, çok sayıda icra (yapma) ünitesi vardır, örneğin integer sayılar için bir, kayan noktalı sayılar için bir ve boolean operatörleri için iki tane icra ünitesi vardır. İki ya da daha çok sayıda komut aynı anda alınıp-getirilir, çözülür ve çalıştırılabilinceye kadar buffer belleğin içerisine atılır. İşlem ünitesi boşalır boşalmaz, işlemci buffer belleğe bakar ve eğer orada kullanabileceği bir komut varsa, buffer bellekten o komutu alır ve çalıştırır. Bu dizaynın önemi program komutları çoğunlukla düzenin dışında çalıştırılır. Birçok işlemci , gömülü sistemlerde kullanılan çok basit olanları hariç olarak, kernel ve kullanıcı modu adında iki moda sahiptir. Bu modlar genellikle program durum kelimesindeki bitlerle kontrol edilir. İşlemci, kernel modda çalışıyorken komut setindeki her komutu çalıştırabilir ve donanımın tüm özelliklerini kullanır. İşletim sistemi kernel modda çalışır ve kernel mod işletim sistemine donanıma giriş izni verir. 3.2. Bellekler Herhangi bir bilgisayarda ikinci önemli parça bellektir. İdeal olarak bir bellek, çok hızlı, çok büyük ve çok ucuz olmalıdır. Şu andaki teknoloji buna yaklaşmış, ancak tam olarak gerçekleştirememiştir. Bellek sistemi şekil 1’de gösterilen katmanların hiyerarşisi gibi inşa edilmiştir. Kaydediciler Cache Bellek Ana Bellek Manyetik Disk (Sabit Disk) Manyetik Teyp Şekil 1 - Bellek Hiyerarşisi İlk katman, CPU'nun kendi üzerinde yer alan kaydedicilerden oluşmaktadır. Kaydediciler, CPU ile aynı maddeden yapılmışlardır ve bu nedenle CPU kadar hızlıdırlar. Sonuç olarak, CPU onlara ulaşmak için herhangi bir bekleme yapmaz. Onların depolama kapasiteleri 32 bitlik bir CPU'da 32*32 bit ve 64 bitlik bir CPU'da 64*64 bittir. Her iki durumda da 1 KB'den daha az bir kapasiteye sahiptirler. Yazılımda programlar kaydedicileri kendileri yönetmelidir. Bir sonraki katman çoğunlukla donanım tarafından kontrol edilen cache bellektir. Ana bellek tipik olarak 64 byte’lık cache dizilerine bölünmüştür, 0 ile 63 adres arasında cache dizisi 0, 64 ile 127 adres arasında cache dizisi 1 olarak adlandırılmakta ve bu şekilde devam etmektedir. Cache bellekler çoğunlukla yüksek hızda aranılan bilgiye ulaşmada veya işlemciye iletmede kullanılmaktadır. Program bir bellek kelimesini okumaya ihtiyaç duyduğunda, cache donanımı ihtiyaç duyulan bilgiyi cache’in içerisinde arar. Eğer cache’in içerisinde bulunursa cache hit olarak adlandırılır ve bilgi isteği cache bellekten giderilir, ana belleğe herhangi bir istek gönderilmez. Cache normal olarak iki saat çeviriminde bilgiye ulaşır. Cache hataları, belleğe gitme ile büyük zaman kayıplarıdır. Cache bellek fiyatı pahalı olduğundan kapasitesi sınırlıdır. Bazı makineler iki veya daha fazla cache belleğe sahiptir, her biri bir öncekinden daha yavaş ve daha büyüktür. Bir sonraki katman olan ana belleğe geldik. Ana bellek çoğunlukla RAM olarak da adlandırılır. Eskiden ana bellek öz bellek olarak da adlandırılırdı, çünkü 1950 ve 1960’larda ana bellek için mıknatıs parçaları kullanıldı. Şimdi, bellekler, onlarca megabyte’den yüzlerce megabyte’a doğru sürekli gelişmektedir. Cache belleğin karşılayamadığı tüm bilgi istekleri için ana belleğe gidilir. Hiyerarşide bir sonra gelen manyetik disklerdir (Hard disk). Disk depolama bit başına RAM’den daha ucuzdur ve aynı zamanda çoğunlukla büyüklüğü iki tabaka halindedir. Problem sadece veriye random olarak ulaşmanın yavaş olmasıdır. Bu düşük hız bir diskin mekanik olmasından kaynaklanmaktadır. Bir disk 5400, 7200 veya 10800 rpm hızlarında dönebilen bir ya da daha çok plakadan oluşmaktadır. Eski 33 rpm’lik gramofonlardaki kayıtları çalmak için kullanılan pickup kola benzer mekanik kol, köşeden itibaren plakanın üzerinde bir eksen çevresinde döner. Bilgi eş merkezli dairelerin üzerindeki disklere yazılmıştır. Her bir track , tipik olarak her biri 512 byte kapasiteye sahip sektörlere ayrılmıştır. Modern disklerde, dış taraftaki silindirler, iç taraftaki silindirlerden daha çok sayıda sektör içerir. Kolun (kafa), bir silindirden diğerine taşınması 1 msec. süre almaktadır. Tipik olarak kolun random olarak bir silindire gitmesi sürücüye bağlı olarak 5 ile 10 msec. arasında değişmektedir. Kol yanlış track üzerinde olduğu zaman, sürücü, kafanın ihtiyaç duyulan sektör üzerinde dönmesi için sürücünün rpm hızına bağlı olarak 5 ile 10 msec. arasında bir süre beklemelidir. Sektör kafanın altında olduğu zaman, okuma veya yazma en yavaş diskte saniyede 5 Mb, en hızlı diskte ise 160 Mb olur. Bellek hiyerarşisinde son katman manyetik teyplerdir. Bu ortam çoğunlukla disk depolama için yedekleme gibi ve çok büyük miktarlardaki bilgiyi tutmada kullanılır. Bir teypi kullanmak için, bir kişi veya robot tarafından ilk olarak teyp okuyucunun içerisine teypi koymalıdır. Sonra makaraların istenen bloğa ulaşmak için ileriye doğru dönmesi gerekir. Bu işlem dakikalar alabilir. Teyp’in en büyük artısı, bit başına müthiş ucuz olması ve silinebilmesidir ki bu yedekleme üniteleri için çok önemlidir. Bunlar yangınlar, sellerden ve depremlerden korunmak için depolanmalıdır. Yukarıda ele aldığımız bellek çeşitlerine ek olarak, birçok bilgisayar değişken olmayan bir belleğe sahiptir. RAM’den farkı, onun içeriği güç kesildiği zaman kaybolmamasıdır. ROM bellekler fabrikalarda programlanmıştır, sonradan değiştirilemez. O hızlı ve ucuzdur. Bazı bilgisayarlarda ROM, bilgisayarı başlatmak için gereken boot kaydını içermektedir. Ayrıca bazı giriş-çıkış kartları düşük seviyeli aygıtları kontrol için ROM’la birlikte gelir. EEPROM ve Flash RAM de değiştirilemez, fakat ROM’dan farklı olarak sonradan silinebilir ve yeniden programlanabilir. Bununla beraber, onların üzerinde yazmak, RAM belleğe yazmaktan çok daha fazla bir zaman alır. Diğer bir bellek çeşidi ise değişken olan CMOS’tur. Birçok bilgisayar zamanı ve tarihi tutmak için CMOS belleği kullanır. CMOS bellek ve saat çevrimi küçük bir batarya tarafından sağlanan güç ile çalışmaktadır. Bu şekilde zaman doğru bir biçimde yenilenmektedir, hatta bilgisayar kapalı olduğunda bile saat çalışmaya devam etmektedir. CMOS bellek aynı zamanda disk boot edildikten sonra, konfigürasyon parametrelerini tutabilir. CMOS bellekler çok az güç tükettiğinden dolayı, orijinal fabrika bataryalarıyla birkaç yıl çalışabilirler. Belleğin aynı anda birçok programı tutması sıklıkla arzu edilen bir durumdur. Eğer bir program bellekte, diskteki okumanın tamamlanması için bekliyorsa, diğer program işlemciyi kullanabilir ki işlemci daha iyi bir kullanım sağlar. Bununla birlikte, aynı anda bellekte iki veya daha fazla program çalıştığında şu iki problem çözülmelidir: 1 – Programları diğer programların ve kernel’ı tüm programların etkisinden nasıl kurtarabiliriz ? 2 – Bunları nasıl tutacağız ?. Birçok çözüm yolu mümkün. Bununla beraber, onların tamamı, özel bir donanımla işlemciyi karıştırır. Birinci problem açıktır, fakat ikincisi biraz zor algılanan bir problemdir. Bir program derlendiği ve bağlandığı zaman, derleyici ve bağlayıcı programın fiziksel bellekte çalıştırıldıktan sonra yükleneceği yeri bilmez. Bu nedenle, derleyici ve bağlayıcı çoğunlukla belleğin 0. adresten başladığını varsayar ve ilk komutu oraya yerleştirir. İlk komutun 10000. adresten alınıp getirildiğini düşünelim. Şimdi de tüm program ve verilerin 50000. adreste bulunduğunu varsayalım. İlk komut çalıştırıldığı zaman, 60000. adresteki bir bilginin yerine 10000. adresteki veri referans olacağı için bir hata meydana gelecektir. Bu problemi çözmek için, program yüklendiğinde yer değiştirmek, tüm adresleri bulmak ve onları düzenlemek ya da çalışma sırasında yer değiştirme durumlarının ikisinden birini ihtiyaç vardır. Bu basit çözüm yolu yandaki şekilde görülmektedir. Bu şekilde iki özel kaydediciyle donatılmış bir bilgisayar görüyoruz, bunlar base register ve limit registerdir. Program çalışmaya başladığı zaman, base register program metninin başlayacağı yeri ayarlar ve limit register da birleştirilen program metni ve verinin ne kadar büyük olduğunu söyler. Komut alınıp getirildiğinde, donanım, program sayacının limit register’dan daha küçük olup olmadığını kontrol eder, ve eğer daha küçük ise, base register’a ekler ve belleğe bu toplamı gönderir. Benzer şekilde, program bir veriyi alıp getirmek istediğinde, donanım otomatik olarak verinin adresini base register’ın içeriğine ekler ve bu toplamı belleğe gönderir. Base register kendisinin altında belleğin herhangi bir parçası referans olarak verebilir. Ayrıca limit register kendisinden daha yukarıda belleğin herhangi bir parçası referans olarak verebilir. Böylece bu şema koruma ve yer değiştirme problemlerinin her ikisini de çözer. Program tarafından oluşturulan adresler kontrol ve haritalama sonucunda fiziksel adres olarak adlandırılan, bellek tarafından kullanılan adresten sanal adrese dönüştürüldü. Kontrol ve bellek haritasını çıkaran bu aygıt bellek yönetim ünitesi (MMU) olarak adlandırılır. MMU işlemci üzerinde veya kapalı bir halde bulunur, fakat mantıksal olarak işlemci ile bellek arasındadır. Çok gelişmiş bir MMU yandaki şekilde görülmektedir. Burada program ve veri için bir çift base ve limit register’a sahibiz. Program sayacı ve tüm diğer programlara olan başvurular için çift 1 ve veri referansları için çift 2 kullanılır. Sonuç olarak, sadece bellekte bulunan bir kopya ile aynı program birçok kullanıcı arasında paylaştırılabilir, ancak birinci şema ile bu mümkün değildir. Program 1 çalışmaya başladığı zaman, şeklin solundaki oklarla dört kaydedicinin aldığı durum görülmektedir. Program 2 çalıştığında, onlar şeklin sağındaki oklarla gösterilen durumdadırlar. MMU yönetimi bir işletim sistemi fonksiyonudur, çünkü kullanıcılar doğru olarak güvenilir bir şekilde MMU’yu yönetemeyebilirler. Bellek sisteminin iki yönü performansta çok önemli etkilere sahiptir. Birinci olarak belleğin oldukça yavaş olan hızını cache bellekler gizler. Program belli bir süre için çalışacağı zaman, programın tamamı cache belleğe alınır, bu iyi bir performans elde edilmesini sağlar. Bununla beraber, işletim sistemi bir programdan diğerine geçtiği zaman, cache bellekte sadece ilk olarak yüklenen programın tamamı bekler. yeni programın ihtiyaç duydukları aynı anda fiziksel bellekten yüklenmelidir. Bu işlem, çok sık okuyorsa, çok önemli bir performans artışı sağlayabilir. İkinci olarak, bir programdan diğerine geçildiğinde, MMU kaydedicileri değişmelidirler. Şekil 1-9b’de sadece dört kaydedici resetlenebilir, bu bir problem değildir, fakat gerçek MMU’lar çok daha fazla kaydediciye sahip olduklarından bu işlemleri gerçekleştirmek daha zordur. Her iki yol da zaman alır. Sonuç olarak bir programdan diğerine geçiş bağlama anahtarı olarak adlandırılır ve pahalı bir iştir. 3.3. Giriş/Çıkış Aygıtları : İşletim sisteminin yönetmek zorunda olduğu tek kaynak bellek değildir. Giriş-çıkış aygıtları da işletim sistemiyle sıkı bir ilişki halindedir. Giriş-çıkış aygıtları genel olarak iki kısımdan oluşmaktadır: bir kontrolör ve aygıtın kendisi. Kontrolör, anakart üzerinde takılı olan bir veya daha çok çipten oluşan fiziksel aygıttır. İşletim sisteminden gelen komutları örneğin, aygıttan veri okuma ve verileri dışarıya gönderme işlemlerini kabul eder. Diğer parça aygıtın kendisidir. Aygıtlar oldukça basit bir arayüze sahiptirler. IDE, Pentium ve diğer bazı bilgisayarlarda kullanılan bir disk standardıdır. Kontrolörler, gerçek aygıtın arkasına gizlendiğinden bu yana, tüm işletim sistemleri aygıttan aygıta farklılık gösteren ara yüzler görürler. Çünkü, her bir kontrolörün tipi farklıdır, bu da her birinin farklı yazılımları kullanmasına neden olur. Yazılım, bir kontrolöre söyler, komutları verir ve gelen yanıtları kabul eder. Bu yazılıma aygıt sürücüsü de denir. Her bir kontrolör imalatçısı her işletim sistemi için sürücü sağlamalıdır. Bu nedenle örneğin, bir tarayıcı Win98, Windows 2000 ve Unix için sürücüleri ile birlikte gelmelidir. Aygıtı kullanabilmek için sürücü işletim sisteminde kurulu olmalıdır, böylece sürücü kernel modda çalışabilir. Teorik olarak, kernel modun dışında da çalışabilir, fakat bir kaç sistem bunu yapabilir. Kernel'ın içerisine sürücüyü yerleştirmenin üç yolu vardır. Birinci yol, sistem boot edildiği zaman kernel ile sürücüyü birbirine bağlamaktır. Birçok UNIX sistemi bu şekilde çalışır. İkinci yol sistem yeniden boot edilirken ihtiyaç duyulan sürücünün işletim sistemi dosyasına giriş yapılarak bildirilmesidir. Boot ederken işletim sistemi sürücüleri arayarak bulur ve onları yükler. Windows bu şekilde çalışır. Yeniden boot etmeye ihtiyaç duyulmaksızın, sürücüleri çok hızlı bir biçimde yükler ve sistem çalışıyorken yeni sürücüleri kullanan yol işletim sistemleri için üçüncü yoldur. Bu yol nadir olarak kullanılır, fakat, şimdi çok daha fazla kullanılmaya başlanmıştır. Takılabilir aygıtlar USB ve IEEE 1394 aygıtları gibi genellikle dinamik olarak yüklenen sürücülere ihtiyaç duyarlar. Her kontrolör, aygıt sürücüsü ile iletişim kurmak için küçük kaydediciler kullanırlar. Örneğin, çok küçük bir disk kontrolörü disk adreslerini, bellek adreslerini, sektör sayılarını ve okuma veya yazma işlemlerini belirtebilmek için kaydedicilere sahiptirler. Kontrolör, işletim sisteminden bir komut alarak harekete geçer, sonra kontrolör sürücü kaydedicisinin içerisine uygun değerleri değiştirerek yazar. Bazı bilgisayarlarda, aygıt kaydediciler işletim sisteminin adres alanının içerisine dökülürler, böylece onlar sıradan bellek bilgilerini okuyabilir ve yazabilirler. Bu tip bilgisayarlarda, özel giriş-çıkış komutlarına ihtiyaç duyulmaz. Diğer bilgisayarlarda aygıt kaydedicilerin her biri, port adresiyle birlikte özel giriş-çıkış port alanına yerleştirilirler. Bu makinalarda kaydedicilere okumak ve yazmak için sürücülere özel in ve out komutlarının kernel modda kullanılabilmesine izin verilir. Her iki sistem de oldukça geniş bir kullanım ağına sahiptir. Giriş ve çıkış üç farklı yolla yapılabilir. En basit metotta, bir kullanıcı programı sistem çağrısı gönderir, kernel bu sistem çağrısını sürücüye uygun bir prosedür çağrısına dönüştürür. Daha sonra sürücü, giriş / çıkış işlemlerini başlatır. Giriş-çıkışın yüklenmesi tamamlandıktan sonra, sürücü ihtiyaç duyulan yere veriyi yerleştirir ve geri döner. İşletim sistemi sonra kontrolü çağırana döndürür. Bu metot meşgul bekliyor diye adlandırılır ve sürücünün işi bitinceye kadar CPU’ya bağlı kalması dezavantajına sahiptir. Sürücü için ikinci metot aygıtı çalıştırmak ve işlem sona erdiğinde bir kesme vermektir. Burada sürücü bir değer döndürür. İşletim sistemi, eğer diğer bir işi yapmaya ihtiyaç duyarsa o zaman arayanı engeller. Kontrolör transferin sonlanmasıyla birlikte, bir kesme işareti meydana getirir. Giriş-çıkış işlemlerini gerçekleştirmek için üçüncü yol özel DMA (Direct Memory Access) chipini kullanmaktır. Bu çip, işlemci araya girmeden bellek ve birkaç kontrolör arasındaki bit akışını kontrol eder. 3.4. Yollar : Orijinal IBM bilgisayarlarda ve minibilgisayarlarda yıllarca aşağıdaki organizasyon kullanılmıştır. Bununla birlikte, işlemciler ve bellekler gibi yüksek hız gerektiren elemanlarda bu tekli yollar bütün bu trafikte bir hayli zorlanarak tıkanmaktadırlar. Sonuç olarak hızlı I/O aygıtları ve işlemci ile bellek arasındaki trafik için yeni yollar eklendi. Bu gelişimin bir sonucu olarak bir sonraki sayfadaki şekilde gösterilen Pentium sistemleri geliştirilmiştir. Bu sistem her biri farklı veri transfer hızlarına ve fonksiyonlarına sahip sekiz tane yola sahiptir. İşletim sistemi bütün bunların hepsinin konfigürasyon ve yönetimi için bunların farkında olmalıdır. Orijinal IBM PC’de iki ana yol vardır: ISA yolu ve onun takipçisi olan PCI yolu. ISA yolu, orijinal IBM PC/AT kasalarda 8.33 Mhz hızında çalışır ve aynı anda 2 byte veri transferi yapabilir, maksimum hızı saniyede 16.67 Mb’dır. Şekil - Bir Pentium Sisteminin Yapısı PCI yolu Intel tarafından ISA yolunun halefi olarak geliştirilmiştir. PCI yolu 66 Mhz hızında çalışır ve saniyede 8 byte veri transferi yapar. Şimdi çok yüksek hızlı I/O kartları kullanılıyor. Hatta bazı Intel olmayan bilgisayarlar onlar için kullanılabilir I/O kartlarının büyük numaraları nedeniyle PCI yolu kullanırlar.Bu konfigürasyonda, işlemci yerel lokal yolun üzerinden PCI köprüsüne söyler, ve PCI köprüsü belleğe ayrılmış yol üzerinden belleğe komutu söyler, bu sistem genelde 100 mhz hızında çalışır. Pentium sistemler cache yolları ile işlemciye bağlanmış, chipin üzerindeki cache 1 ve chipin uzağında çok daha büyük cache 2 belleğe sahiptir.Ek olarak, bu sistem üç tane uzmanlaşmış veri yolu içerir: IDE, USB ve SCSI. IDE yolu, sisteme disk ve CD-ROM gibi ikincil aygıtları takmak (bağlamak) içindir. IDE yolu, PC/AT kasalarda disk kontrol arabiriminin doğal bir sonucudur ve şu anda hemen hemen tüm Pentium tabanlı sistemler için hard diskler ve cd-rom’lar IDE yollarını kullanırlar. Bu sistem PCI ve ISA yollarına ek olarak IDE, USB ve SCSI gibi üç özel yola daha sahiptir. IDE yolu, sisteme CD-ROM'lar ve diskler gibi ikincil aygıtları bağlamak için kullanılırlar. Bu yol, PC/AT kasalarda disk kontrol arabiriminin gelişmesinin bir sonucudur ve şu anda hemen hemen tüm Pentium tabanlı sistemler için hard diskler ve CD-ROM'lar IDE yollarını kullanırlar. USB (Universal Serial Bus), bilgisayara klavye ve mouse gibi yavaş olan tüm I/O aygıtları bağlamak için geliştirildi. USB dört küçük konnektör kullanır, bunların ikisi USB aygıta elektrik gücü sağlar.USB saniyede toplam 1,5 MB veri yükleyerek tutabilir. Tüm USB aygıtları tek bir USB aygıt sürücünü paylaşırlar, her bir yeni USB aygıt için yeni bir sürücü yüklemeye ihtiyaç yoktur. Bu nedenle, USB aygıtları yeniden boot etme olmaksızın bilgisayara eklenebilir. SCSI, hızlı diskler, tarayıcılar ve büyük bant genişliğine ihtiyaç duyan diğer aygıtlar için tasarlanmış, yüksek performans sağlayan yoldur. Saniyede 160 MB’a kadar çalışabilirler. SCSI’ler geliştirildiğinden bu yana Macintosh sistemlerde ve ayrıca popüler UNIX sistemleri ile bazı Pentium tabanlı sistemlerde görüldüler. Şekilde görülmeyen diğer bir veriyolu IEEE 1394'tür. IEEE 1394, seri bir yoldur fakat saniyede 50 MB'a kadar veri transferleri için tasarlanmıştır. Bilgisayara dijital aygıtları ve multimedya aygıtlara benzer aygıtları bağlamak için çok kullanışlıdır. SCSI ve IEEE 1394, USB’nin gelişmesiyle birlikte daha hızlı versiyonlar için rekabet ediyorlar. Bu tip çevre birimleriyle çalışmak için, işletim sistemi onların nerede olduğunu ve nasıl konfigüre edildiğini bilmelidir. Bu ihtiyaç, ilk olarak Apple Macintosh'un geliştirdiği sistem örnek alınarak Intel ve Microsoft tarafından Tak ve Çalıştır (Plug and Play) adı verilen PC sistemi geliştirilmesine yol açtı. Tak ve Çalıştır’dan önce her bir I/O cardı, onun I/O kaydedicileri için sabit adresler ve değişmez kesme isteklerine sahipti. Örneğin klavye kesme 1'di ve 0*60 ile 0*64 arasındaki I/O adresini kullanırdı. Kullanıcı, bir ses kartı ve bir modem satın aldığında ve bunların her ikisini kullandığında kesme 4’ü kullandığı zaman, bir takım zorluklar ortaya çıkacaktır. Ses kartı ve modem çakışacaklardır ve birlikte çalışamayacaklardır. Çözüm yolu, her I/O kartı için DIP anahtarları veya jumperlar kullanmaktır, böylece kullanıcı sisteminde herhangi bir aygıt diğerleriyle çakışmadan çalışabilecektir. Tak ve çalıştır I/O aygıtları hakkında otomatik olarak bilgi toplayan bir sisteme sahiptir, merkezi olarak I/O adresleri ve kesme türleri aygıtlar arasında paylaştırılır ve sonra her bir karta onun numarasını kullanarak ne yapacağını söyler. Çok kısa olarak, tak ve çalıştır Pentium’un yolundan giderek onun gibi çalışmaktadır. Her Pentium bilgisayar bir anakartta sahiptir. Anakart üzerinde BIOS diye adlandırılan bir program bulunur. BIOS, klavyeden okuma işlemi, ekrana yazma işlemlerinin de olduğu diğer düşük seviyeli I/O yazılımlarını içeren bir programdır. Şimdilerde, BIOS değişken olmayan flash RAM’de tutulmaktadır, fakat BIOS’ta bir virüs bulunduğunda işletim sistemi tarafından update edilebilir. Bilgisayar boot edildiği zaman, BIOS çalıştırılır. BIOS ilk olarak, ne kadar RAM’in hazır olduğunu ve klavye ve diğer temel aygıtların kurulu olup olmadığını ve doğru olarak yanıt verip vermediğini kontrol eder. ISA ve PCI veri yolları tarafından tüm aygıtlar taranarak bulunanlar birbirine bağlanır ve BIOS onları çalıştırır. Bu aygıtların bazıları tak ve çalıştırdan daha önce geliştirilmişlerdir ve sabit kesme seviyelerine ve I/O adreslerine sahiptir. Bu aygıtlar kaydedildikten sonra, tak ve çalıştır aygıtları da kaydedilerek yükleme tamamlanır. BIOS, CMOS bellekte saklanan çalışan aygıtların bir listesini kullanarak hangi aygıttan boot edileceğini belirler. Kullanıcı sistem boot edildikten sonra bir BIOS programını kullanarak bu listedeki sıralamayı değiştirebilir. Tipik olarak, bu girişim floppy diskten boot etme şeklinde olacaktır. Eğer bunu başaramazsa CDROM denenir. Eğer ne floopy ne de CDROM’dan hiçbiri olmazsa, sistem hard diskten boot edilir. Boot aygıtından birinci sektör belleğe okunarak çalıştırılır. Bu sektör hangi bölümün aktif olduğuna karar vermek için boot kaydının sonundaki tabloyu inceleyen bir programı içermektedir.Sonra bu bölümden ikincil boot yükleyicisi okunur. Bu yükleyici aktif bölümden işletim sistemine okur ve işletim sistemini başlatır. İşletim sistemi BIOS’un denetlemesinden sonra konfigürasyon bilgilerini alır. Her bir aygıt için, işletim sistemi eğer o aygıtın aygıt sürücüsüne sahip olup olmadığını kontrol eder. Değilse, kullanıcıya sürücüyü içeren bir disket ya da CDROM takmasını söyler. İşletim sistemi tüm aygıtların aygıt sürücülerine sahip olduğu zaman, onları kernel’ın içerisine yükler. Sonra işletim sistemi tablosunu başlangıç durumuna getirir, arka planda ihtiyaç duyulan işlemleri oluşturur ve terminaller için GUI veya bir login programıyla sistemi başlatır. İŞLETİM SİSTEMLERİ KAVRAMLARI 4.1. İşlemler İşlem, tüm işletim sistemlerinde çok önemli bir kavramdır. İşlem, basit anlamıyla çalışmakta olan bir programdır. Her işlem, işletim sisteminin adres alanıyla ilişkilidir. Adres alanı, çalıştırılabilir programları, programların verilerini ve yığınlarını içermektedir. Her bir işlem ayrıca programı çalıştırmak için ihtiyaç duyulan tüm diğer bilgiler ve program sayacı, yığın göstergesi ve diğer donanım kaydedicileriyle de ilişkilidir. Periyodik olarak, işletim sistemi çalışan bir işlemi durdurmak ve diğer bir işlemi çalıştırmak için karar vermektedir. Bir işlem geçici olarak durdurulduğu zaman, işlem durdurulduğunda sahip olduğu durumda doğru bir şekilde yeniden başlatılmalıdır. Bunun anlamı işlem hakkındaki tüm bilgiler erteleme esnasında doğru bir şekilde kaydedilmelidir. Örneğin, işlem aynı anda okumak için birkaç dosyaya sahip olabilir. Bu dosyaların her biri bulundukları pozisyonu bir işaretçi ile bildirir. İşlem geçici olarak durdurulduğu zaman, tüm bu işaretçiler kaydedilmelidir. Bir çok işletim sisteminde, her bir işlem hakkındaki tüm bu bilgiler, onun kendi adres alanından başka işlem tablosu diye adlandırılan tabloda saklanmaktadır. Askıya alınan bir işlem, genelde core image olarak adlandırılan işlemin adres alanı ve üzerinde işlemin kaydedicilerini ve diğer bilgilerini tutan işlem tablo girişini içermektedir. Önemli bir işlem yönetimi sistem çağrısı, işlemin başlatılması ve sonlandırılmasıyla ilgilidir. Bir örnek üzerinde düşünelim. Bir işlem, terminalden komut yorumlayıcısı veya shell komutlarını okur. Kullanıcı yalnıza programın derlenmesini isteyen bir komut yazar. Shell bu komuttan sonra, yeni bir işlem oluşturacak ve derleyicide bunu çalıştıracaktır. İşlemin derlenmesi sona erdiğinde, işlem kendisini sonlandırmak için bir sistem çağrısını çalıştırır. Bir işlem, bir veya daha çok sayıda child (çocuk) işlem olarak adlandırılan işlemler oluşturabilir. Diğer işlem sistem çağrıları, daha fazla bellek isteği ve çocuk işlemin sonlandırılması için beklemek gibi işler için kullanılabilmektedir. Bazen, çalışan bir işleme bilgi iletmeye gereksinim duyulur. Örneğin, bir işlem farklı bir bilgisayardaki işlemle bir bilgisayar ağı üzerinden uzaktaki işleme bir mesaj yollayarak iletişim kurar. .2. Kilitlenmeler : İki veya daha fazla işlem birbirleriyle karşılıklı etkileşime girdiklerinde bazen içerisinden kurtulamayacakları bir duruma girerler. Bu gibi bir durum kilitlenme olarak adlandırılır. Kilitlenmeler, herkesin çok iyi bildiği trafikteki kilitlenme örneğiyle açıklanabilir. Yandaki şekil üzerinde düşünelim. Burada görüldüğü gibi dört tane otobüs bir kavşağa yaklaşıyor. Her birinin arkasında şekilde görülmeyen çok sayıda otobüs bulunmakta. Kötü bir şansın da yardımıyla bu dört otobüs aynı anda kavşağa varabilir. Bu durumda otobüsler çıkmaza girer, çünkü onların ileriye gidebilme ihtimalleri yoktur. Diğer otobüsler nedeniyle arkaya doğru da gidemezler. Dışarıya çıkacak herhangi bir yol yoktur. Buna benzer bir durum bilgisayarlarda da yaşanabilir. Örneğin iki işlem aynı anda aynı veriyi elde etmek isteyebilir. Bu durumda tıpkı trafikteki çakışma gibi bir kilitlenme meydana gelecektir ve bilgisayar bu durumdan herhangi bir yere kıpırdayamacaktır. 4.3. Bellek Yönetimi : Her bilgisayar, çalışan programları tutmak için kullandığı bir miktar ana belleğe sahiptir. Çok basit işletim sistemlerinde bellekte aynı anda sadece bir programın bulunmasına izin verilir. İkinci bir programı çalıştırmak için, bellekte bulunan ilk program silinmeli, ilk programdan boşalan yere ikinci program yüklenmelidir. Çok gelişmiş işletim sistemlerinde aynı anda bellekte çok sayıda programın bulunmasına izin verilir. Bu programları diğerlerinin etkisinden korumak için bir koruma mekanizmasına ihtiyaç duyulur. İşletim sistemi tarafından kontrol edilen bu mekanizma donanımda mutlaka bulunmalıdır. Normal olarak her işlem, tipik olarak 0. adresten başlayarak yukarıya doğru giden bir adres alanını kullanabilmektedir. Bu basit durumda, bir işlemin sahip olduğu maksimum adres alanının büyüklüğü ana bellekten daha azdır. Bu yolla, bir işlem adres alanının tamamını kullanabilir ve ana bellekte işlem için yeterli bellek alanı olacaktır. Bununla birlikte, birçok bilgisayarlarda adresler 232 , 264 adres veren 32 veya 64 bitliktir. Eğer bir işlem bilgisayarın sahip olduğu ana bellek alanından daha fazla belleğe ihtiyacı varsa bu durumda ne yapmalıdır ?. İlk bilgisayarlarda bunun bir çözüm yolu yoktu. Günümüzde bu sorunu çözen teknik sanal bellek olarak adlandırılır. Bellek yönetimi ile ilgili daha geniş bilgi ilerde verilecektir. 4.4. Giriş / Çıkış : Tüm bilgisayarlar girdi elde etmek ve çıkış sağlamak için fiziksel aygıtlara sahiptir. Tüm bunlardan sonra, eğer kullanıcılar bilgisayara neyin yapılacak olduğunu ve istenen çalışma yapıldıktan sonra sonuçları alınamasaydı ne olacaktı?. Aralarında klavye, monitör, yazıcının da olduğu birçok giriş – çıkış aygıt çeşitleri vardır. Bu aygıtlar işletim sistemi tarafından yönetilmektedir. Sonuç olarak her işletim sistemi I/O aygıtlarını yönetmek için I/O alt sistemlerine sahiptir. I/O yazılımlarının bazıları bağımsız aygıtlardır. 4.5. Dosyalar : Diğer bir önemli kavram neredeyse tüm işletim sistemleri tarafından kullanılan dosya sistemidir. İşletim sisteminin önemli bir fonksiyonu, diskler ve I/O aygıtlarının özelliklerini saklamak ve onları güzel bir şekilde programcıya sunmaktır. Sistem çağrılarına açıkça dosya oluşturmak, dosya silmek, dosya okumak ve dosyalara yazmak için ihtiyaç duyulur. Bir dosya okunmadan önce diskte yeri öğrenilmeli ve açılmalıdır, okunduktan sonra kapatılmalıdır, sistem çağrıları bu şeylerin yapılmasını sağlar. Birçok işletim sistemi dosyalara bir yerde korumak için dosya gruplarının bir arada bulunduğu bir yol olan klasör (directory) düşüncesine sahiptir. Directory oluşturmak ve silmek için sistem çağrılarına ihtiyaç duyulur. Sistem çağrıları aynı zamanda directory’de var olan dosyaları getirir ve directory’den dosya siler. Directory girişleri dosyalar veya diğer directorylerden biri olabilir. İşlem ve dosya hiyerarşisinin her ikisi de ağaç şeklinde organize edilmiştir, ancak bu benzerlik orada kalmaktadır. Dosya hiyerarşileri genellikle dört, beş hatta daha çok dallanmalara sahipken işlem hiyerarşileri genellikle çok fazla dallanmaya sahip olmaz. Directory hiyerarşileri yıllarca varolabilirken, işlem hiyerarşileri tipik olarak çoğunlukla genelde birkaç dakikadır. Ayrıca işlemler ve dosyalar için sahiplik ve koruma da farklı olmaktadır. Tipik olarak, sadece bir ana işlemi ya da bir alt işlem olan girişi kontrol edebilir, fakat mekanizmalar hemen hemen tüm dosyaları kullanmaya izin verir ve directoryler daha geniş bir grup tarafından kullanıldığından okunur. 4.6. Güvenlik : Bilgisayarlar kullanıcılar korumak istedikleri çok büyük miktarlarda veri içermektedirler. Bu bilgi, bir elektronik posta, vergi iadeleri ve daha bir çok şeyi içerebilir. Dosyalar bazında sistem güvenliğini sağlamak işletim sisteminin görevleri arasındadır. Örneğin dosyalara yalnızca izin verilen kullanıcıların erişmesini işletim sistemi sağlamalıdır. Basit bir örnek olarak, güvenliğin nasıl sağlandığı hakkında bir fikir elde etmek için UNIX işletim sistemini ele alalım. UNIX’te dosyalar, her bir dosyaya 9 bitlik koruma kodu vererek korunur. Bu koruma kodu, üç farklı bit alanından meydana gelir, biri kullanıcının kendisi, bir diğeri kullanıcı grubunun diğer üyeleri ve geri kalanlar için ayrılmış kod. Her bir alan giriş, okuma ve yazma için birer bite sahiptir. Bu üç bit rwx biti olarak da bilinir. Örneğin koruma kodu rwxr-x- - x ise bunun anlamı; kullanıcı dosyaları okuyabilir, yazabilir veya çalıştırabilir, diğer grup üyeleri okuyabilir ve çalıştırabilir ama yazamaz, ve geri kalanlar ise sadece çalıştırabilir. Bir directory için x işareti arama izninin olduğunu gösterir. Bir kısa çizgini anlamı ise uygun izin yoktur. 4.7. Shell : İşletim sistemi sistem çağrılarını gerçekleştiren kodlardır. Editörler, derleyiciler, toplayıcılar, bağlayıcılar ve komut yorumlayıcılar çok önemli ve faydalı olsalar da işletim sisteminin kesinlikle bir parçası değildirler. Bu bölümde kabuk olarak adlandırılan UNIX’in komut yorumlayıcısına kısaca bir değineceğiz. İşletim sisteminin bir parçası olmamasına rağmen, kabuk birçok işletim sistemi özelliğini kullanır ve böylece sistem çağrılarının nasıl kullanıldığının güzel bir örneğidir. Kabuk ayrıca, kullanıcı bir grafik arabirimi kullanmadıkça terminalde bulunan bir kullanıcı ve işletim sistemi arasındaki ilk arayüzdür. Birçok kabukta, sh, csh, ksh ve bash vardır. Herhangi bir kullanıcı sisteme giriş yaptığı zaman, kabuk çalıştırılır. Herhangi bir kullanıcı sisteme giriş yaptığında Shell çalıştırılır. Shell standart giriş ve çıkış terminallerine sahiptir. Shell, bir dolar işareti gibi bir karakterle, komutu kabul etmeyi beklediğini gösteren bir prompt’u yazarak dışarıdan çalıştırır. Eğer kullanıcı örneğin date yazarsa, Shell bir child işlem oluşturur ve bir child işlem olarak date programını çalıştırır. Child işlem çalıştığı zaman, onu sonlandırmak için bekler. Child sona erdiği zaman, Shell tekrar prompt’u yazar ve bir sonraki girilen komutu okumaya çalışır. 4.8. Özet Bilgisayar bilimi, birçok alan gibi, teknolojiyle birlikte ilerledi. Eski Romalılar arabasızlık çektiklerinden dolayı yürümeyi çok severlerdi. Çünkü onlar arabanın nasıl yapılacağını bilmiyorlardı. PC’ler yoktu, çünkü milyonlarca insan bir bilgisayara sahip olma düşüncelerini bir yere kapatmışlardı, fakat şimdi onların bir bilgisayarı ucuza mal etmeleri mümkündür. Çoğunlukla teknolojinin ne kadar fazla bizim sistemler görüşümüzü etkilediğini unuturuz ve zamandan zamana bu değerler farklılaşır. Özellikle, bilgisayar teknolojide eskimiş fikirleri değiştirir ve çabucak onları kaybeder. Bununla beraber, başka bir değişim yeniden eskiye dönüş olabilmektedir. Bu gerçek, sistemin farklı parçalarının performansıyla ilgili bir değişim yapıldığında doğru olacaktır. Örneğin, işlemciler belleklerden çok daha hızlı olduğu zaman, cache bellekler yavaş belleğe kadar hızlı ulaşmada önemli oldular. Eğer yeni bellek teknolojileri birkaç dönem içinde işlemcilerden daha hızlı olurlarsa, cache bellekler ortadan kaybolacaktır. Ve eğer yeni işlemci teknolojisi onları yeniden belleklerden daha hızlı yaparlarsa, cache bellekler yeniden ortaya çıkacaklardır. Biyolojide, soyun tükenmesi sonsuza kadardır, fakat bilgisayar biliminde, bazen sadece birkaç yıldır. İlk bilgisayarlar çok ağır bir komut setine sahipti. Bu komutlar donanım tarafından doğrudan çalıştırılırdı ve değiştirilemezdi. Daha sonra yazılımda yer alan komutların alttaki yorumlayıcıda icra edildiği mikro programlama geliştirildi. Hardwired çalışma eskimiş oldu. Ondan sonra RISC bilgisayarlar geliştirildi ve mikro programlama eskidi, çünkü doğrudan çalıştırma daha hızlıydı. Şimdi yeniden Java uygulamaları formunda yorumlamanın yeniden güçlendiğini görüyoruz. Çalışma hızı çoğu zaman önemli değildir, çünkü ağ için bekleme değil yönetmek daha önemlidir. SİSTEM ÇAĞRILARI 5.1. Sistem Çağrıları İşletim sistemi ile kullanıcı programları arasında, işletim sistemi tarafından sağlanan sistem çağrıları aracılığıyla bir arayüz tanımlanır. İşletim sisteminin gerçekte ne yaptığını anlamak için, bu arayüzü açıkça incelememiz gerekir. Sistem çağrıları işletim sisteminden işletim sistemine farklı arayüzler kullanabilir. Bu bölümde UNIX işletim sisteminde kullanılmakta olan POSIX sistem çağrılarından bahsedeceğiz. POSIX’in dışında System V, BSD, Linux, MINIX gibi daha birçok modern işletim sistemleri detay farklılıkları dışında benzer fonksiyonları gerçekleştirirler. Bir sistem çağrısı yapmanın gerçek mekaniği iyi bir makineye bağlıdır ve çoğunlukla çağrılar assembly kodunda belirtilmelidir. Assembly dilinin haricinde C programlarından ve buna benzer diğer dillerden de sistem çağrıları yapmak mümkündür. Sistem çağrıları bir sonraki işlemi akılda tutmak için çok yararlıdır. Herhangi bir tek işlemcili bilgisayar aynı anda sadece bir komut çalıştırabilir. Eğer kullanıcı modunda bir kullanıcı programı bir işlem gerçekleştiriyorsa ve bir dosyadan veri okuma gibi bir sistem hizmetine gereksinim duyarsa, trap komutunu veya kontrolü işletim sistemine devretmek için bir sistem çağrısını çalıştırmak zorundadır. İşletim sistemi sonra sistem çağrısının parametrelerini gözden geçirerek işlemin neyi istediğini anlar. Daha sonra sistem çağrısı gerçekleştirilir ve kontrol bir sonraki sistem çağrısına döndürülür. Bir sistem çağrısı yapmak özel bir prosedür çağrısı yapmak gibidir, aradaki fark sadece sistem çağrıları kernel’a girer, prosedür çağrıları ise giremez. Bir sistem çağrısı üç tane parametreye sahiptir : birincisi dosyayı bildirir, ikincisi buffer belleğe dosyanın yerini bildirir ve üçüncüsü ise verinin kaç byte uzunluğa sahip olduğunu bildirir. C programından bir sistem çağrısı aşağıdaki şekilde yapılabilir : Count = read(fd, buffer, nbytes) Eğer sistem çağrısı yanlış bir parametre ya da disk hatası nedeniyle çalıştırılamıyorsa, sayaç ( count ) -1’e ayarlanır ve hata numarası errno global değişkenine yerleştirilir. Programlar, eğer bir hata meydana geldiyse bu hatayı görmek için her zaman sistem çağrılarının sonuçlarını kontrol etmelidirler. Sistem çağrısı bir dizi adımlarla gerçekleştirilir. Read sistem çağrısını gerçekleştirmek için yapılması gereken ilk şey şekilde de 1 ile 3. adımlar arasında görüldüğü gibi stack üzerine parametreleri yerleştirmektir. Birinci ve üçüncü parametreler bir değerdir, fakat ikinci parametre buffer’ın adresidir, içeriği değildir. 4. adımda kütüphane prosedürüne asıl sistem çağrısı gelir. Bu komut tüm prosedür çağrılarında kullanılan normal bir prosedür çağrısıdır. İmkan dahilinde assembly dilinde yazılan kütüphane prosedürü, tipik olarak işletim sisteminin kaydedici gibi olmasını istediği bir yere sistem çağrı numarasını yerleştirir(5.Adım). Daha sonra, işletim sistemi kullanıcı moddan kernel moda geçmek için TRAP komutunu çalıştırır ve kernel içerisinde belirlenmiş adresler üzerinde çalışma başlatılır (6.Adım). Kernel sistem çağrı numarasını inceler ve sonra doğru sistem çağrısını gönderir (7.Adım). Burada sistem çağrısı çalışır (8.Adım). Sistem çağrısının çalışması sona erdiğinde, kontrol kullanıcı-alan kütüphane prosedürüne dönebilir (9.Adım). Bu prosedür daha sonra her zaman prosedür çağrılarının dönmesi gibi kullanıcı programa döner (10. Adım). İşin sona ermesi için, kullanıcı programı stack’i boşaltmalıdır (11.Adım). POSIX, 100 civarında prosedür çağrısına sahiptir. Bu çağrılar, işlem yönetimi, dosya yönetimi, dizin ve dosya sistem yönetimi ve çeşitli çağrılar olarak gruplandırılabilir. İşlem Yönetimi Sistem Çağrıları Çağrı Tanımı pid = fork () Ana işlemle hemen hemen aynı olan çocuk işlemi oluşturur. pid = waitpid (pid,&statloc,options) s = execve (name, argv, environp) Bir çocuk işlemi sonlandırmak için bekler. Çalışan işlemi sonlandırır ve başlangıç durumuna döner. exit(status) Dosya Yönetimi Sistem Çağrıları Çağrı Tanımı fd = open (file, how,......) s = close (fd) n = read (fd,buffer,nbytes) n = write (fd,buffer,nbytes) position = iseek(fd,offset,whence) s = stat (name, &buf) Bir dosyayı okuma, yazma ya da her ikisi için açar. Açık olan bir dosyayı kapatır. Buffer belleğin içerisine dosyadan veri okur. Bir dosyanın içerisine buffer bellekten yazar. Dosya işaretçisini taşır. Bir dosyanın durum bilgisini alır. Dizin ve Dosya Yönetimi Sistem Çağrıları Çağrı Tanımı s = mkdir (name, mode) s = rmdir (name) Yeni bir dizin oluşturur. Boş olan bir dizini siler. Name2 adında yeni bir dosya oluşturur ve name1'e bağlar. Boş olan bir dizini siler. s = link (name1, name2) s = unlink (name) s = mount (special, name, Bir dosya sistemi ekler flag) s = unmount (special) Bir dosya sistemi siler. Çeşitli Sistem Çağrıları Çağrı Tanımı s = chdir (name) Aktif dizini değiştirir. s = chmod (name,mode) s = kill ( pid,signal) seconds = time (&seconds) Dosyanın koruma bitini değiştirir. İşleme bir sinyal gönderir. Sistemin zamanını gösterir. 5.2. İşlem Yönetimi İçin Sistem Çağrıları : Fork, UNIX’te yeni bir işlem oluşturmak için kullanılan sadece bir yoldur. Fork, tüm dosya tanımlayıcıları ve kaydedicilerin dahil olduğu orijinal işlemin bir kopyasını oluşturur. Fork’tan sonra, orijinal işlem ve kopyası (ana ve çocuk işlem) farklı yollara giderler. Fork çağrısı boyunca hemen hemen tüm değişkenler aynı değerlere sahiptir, fakat ana işlemin verileri child işlem oluşturmak için kopyalandığında, ana işlem veya çocuk işlemde yapılan bir değişiklik diğerini etkilemeyecektir. Fork sistem çağrısı, çocuk işlemde sıfır olan ve çocuk işlemin tanımlayıcısına veya ana işlemde PID değerine sahip bir değer döndürür. PID kullanılarak değer döndürüldüğünde, biri ana işlem ve diğeri de çocuk işlem olmak üzere iki işlem görülebilir. (Ana ve çocuk işlem) Birçok durumda, bir fork çağrısından sonra, çocuk işlem ana işlemden farklı kodlar çalıştırmak isteyecektir. Bu durumda shell, terminalden bir komut okur, bu sırada çocuk işlem komutu çalıştırmak için bekler ve sonra çocuk işlem sona erdiğinde, shell terminalden bir sonraki komutu okur. Çocuk işlemin sona ermesi için beklerken, ana işlem sadece çocuk işlem sona erene kadar varolan waitpid sistem çağrısını çalıştırır. Waitpid sistem çağrısı, ilk parametreyi -1’e ayarlayarak özel bir çocuk işlem veya herhangi çocuk işlem için bekler. Waitpid çağrısı tamamlandığında, ikinci parametre olan ve çocuk işlemin çıkış durumunu (normal veya normal olmayan sonlandırma ve çıkış değeri) ayarlayacak olan statloc ile adres işaretlenir. Ayrıca üçüncü parametre yoluyla bir takım seçeneklerde sağlanır. Şimdi shell tarafından fork sistem çağrısının nasıl kullanıldığında bakalım. Bir komut yazıldığında shell yeni işlemi ikiye ayırır. (Çocuk ve ana işlem) Bu çocuk işlem kullanıcı komutunu çalıştırmalıdır. Çocuk işlem execve sistem çağrısını kullanarak bu komutunu çalıştırır. Bir çok durumda execve sistem çağrısı genel olarak üç parametreye sahiptir: çalıştırılacak dosyanın ismi, ikincisi işlem dizisi için bir işaretçi ve üçüncüsü de bulunulan ortama ilişkin bir işaretçidir. Execve’nin genel formatı ; s = execve (name, argv, environp) Bir başka işlem yönetimiyle ilgili sistem çağrısı exit’tir. Exit sadece bir parametreye sahiptir ve bu parametre waitpid sistem çağrısındaki statloc komutu ile ana işleme dönmeyi sağlayan çıkış durumudur. UNIX işletim sisteminde işlemler belleği üç segmente bölmüşlerdir: text segment, data segment ve stack segment. Şekilde de görüldüğü gibi data segment yukarıya doğru, stack segment ise aşağıya doğru büyür. Bu ikisinin arasında kullanılmamış adres alanı olan gap yer alır. Stack segment, ihtiyaç duyduğu için gap bölgesine doğru otomatik olarak büyür, fakat data segmentinin genişlemesi brk denilen bir sistem çağrısıyla yapılır. 5.3. Dosya Yönetimi Sistem Çağrıları : Dosya sistemiyle ilgili olarak UNIX’te bir çok sistem çağrısı bulunmaktadır. Bu bölümde biz tek dosyalarda çalışan sistem çağrılarına bakacağız. Bir dosyayı okumak ya da onun üzerine yazmak için ilk önce dosya open çağrısı ile açılmalıdır. Bu çağrı dosyanın doğrudan ismini verir ve sadece okuma, sadece yazma veya her ikisini de sağlayan O_RONLY, O_WRONLY veya O_RDWR kodlarından biri kullanılır. Yeni bir dosya oluşturmak için O_CREAT çağrısı kullanılır. Dosya tanımlayıcısı geri dönerek, dosya okuma veya yazma için kullanılabilir. Daha sonra dosya close komutuyla kapatılabilir. Close çağrısı açık olan bir dosya için dosya tanımlayıcısı yapabilir. Dosya yönetimi için sistem çağrılarının çoğunluğu okuma ve yazma için kullanılır. Bunlardan en önemlileri de read ve write çağrılarıdır. Bu iki çağrı da benzer parametrelere sahiptir. Burada read çağrısını biraz daha ayrıntılı olarak inceleyelim. Birçok program dosya okumak ve yazma için kullanılmasına karşın, bazı uygulama programları random olarak dosyanın herhangi bir parçasına girmek isterler. Her dosya bir pointer ile ilişkilidir ki bu pointer dosyanın bulunduğu pozisyonu belirtmektedir. Ardışık okuma olduğu zaman, pointer normal olarak bir sonraki byte’ı gösterecektir. Iseek çağrısı, pointer pozisyonunun değerini değiştirir. Böylece dosyanın herhangi bir yerindeki okuma ya da yazma işlemi başlatılabilir. Lseek çağrısı üç tane parametreye sahiptir: birincisi dosya için dosya tanımlayıcısıdır, ikinci olarak dosya pozisyonu ve üçüncü olarak dosyanın başlangıcı ile bulunulan pozisyonu karşılaştırarak dosya sonu olup olmadığını anlar. Pointer değiştikten sonra, dosyanın bulunduğu pozisyonu belirtmek için Iseek tarafından bir değer döndürülür. UNIX her dosya için, dosya modunu (normal dosya, özel dosya, directory vb.), boyutunu, son yapılan değişikliğin zamanını ve diğer bilgileri tutar. Birinci parametre incelenecek dosyaları bildirir, ikinci parametre bilginin yerleştirildiği yeri bildiren pointer’dır. 5.4. Directory Yönetimi İçin Sistem Çağrıları Bu bölümde bir bütün olarak directory sisteminde yer alan bazı sistem çağrılarına bakacağız. İlk olarak boş bir klasör oluşturmak için veya silmek için kullanılan mkdir ve rmdir olmak üzere iki çağrı vardır. Bir sonraki çağrı ise link’tir. Link çağrısının amacı farklı directorylerde bulunan iki veya daha çok isim altında gözüken dosyalara izin verir. Tipik bir kullanımı ortak bir dosyayı paylaşmak için aynı programlama grubunun üyelerine izin vermesidir. Onların her biri farklı isimler altında olması mümkün olan kendi dizinlerinde gözüken dosyalara sahiptir. Paylaşma grubun her üyesine özel bir kopya vermeye benzemez, çünkü paylaşılan bir dosyaya sahip olmanın anlamı takımın üyelerinden herhangi birinin yaptığı değişikliğin anında diğerlerine gözükmesidir. Bir dosyanın kopyası yapıldığı zaman, sonradan yapılan değişiklikler bir diğer dosyayı etkilemez. Şekil a’da durum bir link’in nasıl çalıştığı görülmektedir. Burada iki kullanıcı vardır, ast ve jim, her biri birkaç dosyayla birlikte kendi directory’lerine sahiptir. Eğer ast aşağıdaki sistem çağrısını içeren bir programı çalıştırırsa, Link(“/usr/jim/memo”,“/usr/ast/note”); Jim’in directory’sinde bulunan memo dosyası Ast’ın directory’si içindeki note ismi altında girilir. Bundan sonra, /usr/jim/memo ve /usr/ast/note dosyaları aynı dosyalar olacaktır. Bir ek bilgi olarak, kullanıcı dizinlerinin /usr, /user, /home veya başka dizinlerde tutulup tutulmadığı yerel bir kullanıcı tarafından basitçe bir kararla yapılır. UNIX’de her dosya tek bir numaraya sahiptir ki bu numara onu tanıtan i-numarasıdır. Bu i-numarası her dosya başına, i-düğümlerinin bir tablosunu içeren indekslerdir. Onun disk bloklarının bulunduğu dosyaya kimin sahip olduğunu söyler. Bir directory bir çift eleman içeren basitçe bir dosyadır. UNIX’in ilk versiyonlarında, her bir directory i-numarası için 2 – 16 byte ve isim için 14 byte’lık bir giriş vardır. Şekil a'da mail 16 i-numarasına sahiptir. Link çağrısı basitçe var olan bir dosyanın i-numarasını kullanarak, yeni bir isim girerek yeni bir directory oluşturur. Şekil b’de iki giriş aynı inumarasına sahiptir ve bu nedenle ikisi de aynı dosyadır. Eğer daha sonra unlink sistem çağrısını kullanarak ikisinden biri silinirse diğeri kalır. Eğer her ikisi de silinirse, UNIX diskte var olan dosya silindiği için herhangi bir dosya göremez. Mount sistem çağrısı iki dosyayı bir dosya olarak birleştirmeye izin verir. Genel bir durum root dosya sistemi genel komutların ve hard disk’te diğer çok kullanılan komutların çalıştırılabilir versiyonlarını içermelidir. Kullanıcı bir disk yerleştirdiği zaman floopy disk sürücüsündeki verileri okuyabilir. 5.5. Diğer Sistem Çağrıları : Biz burada UNIX’de kullanılan dört sistem çağrısına daha göz atacağız. İlk çağrımız chdir çağrısı. Bu çağrı, aktif directory’i değiştirmek için kullanılır. Bu sayede uzun dosya isimleri yazmaksızın istenilen dosyaya kolayca ulaşılabilir. UNIX’te her dosya koruma için bir moda sahiptir. Mod, kendisi, grup ve diğerleri için okuma, yazma, çalıştırma bitlerine sahiptir. Chmod sistem çağrısı dosyanın modunu değiştirmeyi gerçekleştirir. Örneğin, bir dosya sahibinden başka herkes için sadece okunur yapılabilir. Kill sistem çağrısı kullanıcılara ve kullanıcı işlemlerine sinyaller gönderen bir yoldur. POSIX zamanla ilgili olan birkaç prosedür tanımlamıştır. Örneğin, zaman sadece aktif zamanda saniyelerde ilerler. 32 bitlik bilgisayarlarda maksimum zaman değeri 2 32 -2 saniyedir. Bu değer 136 yılın biraz fazlasına denk gelir. Bu nedenle 2106 yılında, 32 bitlik UNIX sistemleri karışacak, meşhur Y2K problemi ortaya çıkacaktır. Eğer 32 bitlik bir UNIX sisteme sahipseniz, 2106 yılından önce 64 bitlik bir sisteme geçmenizde fayda vardır. 5.6. Windows Win32 API Sistem Çağrıları : Windows işletim sistemi de UNIX gibi birtakım sistem çağrılarına sahiptir. UNIX’deki sistem çağrılarıyla aralarında neredeyse tam bir benzerlik vardır. Her iki sistemde de aynı işlevi getiren çağrılar konunun sonundaki tabloda gösterilmektedir. Microsoft Win32 API ( Uygulama Program Arayüzü )olarak adlandırılan işletim sistemi hizmetlerinden faydalanmayı sağlayan bir prosedür grubu tanımladı. Bu arayüz, Windows 95’ten bu yana tüm Windows versiyonları tarafından desteklenmekte. Aktif sistem çağrılarından arayüzün ayrılması yoluyla Microsoft, çalışan programları geçersiz kılmadan gerçek sistem çağrıları değiştirme yeteneğine sahiptir. Önceden kullanılamayan bir çok yeni çağrıya sahip olan Windows 2000’den bu yana Win32’i neyin oluşturduğu biraz belirsizdir. Bu bölümde, Win32 Windows’un tüm versiyonları tarafından desteklenen arayüzü ifade etmektedir. Win32 API çağrılarının sayısı binlerle ifade edilecek kadar çoktur. Üstelik onların birçoğu sistem çağrılarını isterlerken, çok sayıda işlem bütünüyle kullanıcı alanında gerçekleştirilir. Sonuç olarak, Windows ile neyin bir sistem çağrısı olduğunu ve basit bir kullanıcı-alan kütüphane çağrısı olduğunu görmek imkansızdır. (Bunlar kernel tarafından yapılır). Gerçekte, neyin bir Windows çağrısı olduğu, Windows’un farklı bir versiyonunda kullanıcı alanında yapılabilir. Win32 API Windows’u , geometrik şekilleri, yazıları, fontları, kaydırma çubuklarını, diyalog kutularını, menüleri ve diğer GUI özelliklerini yönetmek için çok sayıda sistem çağrısına sahiptir. Şimdi bu çağrıların bir kısmına bakalım. CreateProcess çağrısı yeni bir işlem oluşturur. UNIX’te execve ve fork çağrılarının yaptığı işi yapar. Yeni oluşturulan bir işlemin özelliklerini bildirmek için birçok parametreye sahiptir. Windows, UNIX’in sahip olduğu gibi ana ve çocuk işlem kavramlarının bulunduğu bir işlem hiyerarşisine sahip değildir. Bir işlem oluşturulduktan sonra, oluşturucu ve oluşan eşitlenir. WaitForSingleObject, bir olay için beklemede kullanılır. Birçok olası olay için beklenebilir. Eğer parametre bir işlemi açıkça bildirirse , o zaman arayan belirtilen işlemden çıkılması için bekler ki bunu da ExitProcess çağrısı yapar. Sonraki altı çağrı dosyalarda çalışır ve fonksiyonel olarak UNIX’in tam bir kopyası olmasına rağmen, bu çağrılar parametrelerde ve ayrıntılarda farklıdır. Yine de, dosyalar UNIX’de olduğu gibi çok iyi bir biçimde açılabilir, kapanabilir, okuyabilir ve yazabilir. SetFilePointer ve GetFileAttributeEx çağrıları dosya pozisyonunu ayarlar ve dosyanın bazı özelliklerini elde eder. Windows klasörlere sahiptir ve klasörler CreateDirectory komutu ile oluşturulmuş ve RemoveDirectory ile silinir. Orada aktif directory’nin bir bilgisi de vardır ve SetCurrentDirectory tarafından ayarlanır. Şu andaki zaman GetLocalTime çağrısı kullanılarak elde edilir. Win 32 arayüzünün UNIX’dekine benzer şekilde mounted dosya sistemleri, güvenlik veya sinyallere dosyalarına bağlantıları bulunmamaktadır. Tabi ki ,Win32 özellikle GUI yönetimi için UNIX’in sahip olmadığı çok fazla sayıda çağrıya sahiptir ve Windows 2000 ayrıntılı güvenlik sistemine sahiptir. UNIX ve WIN32 SİSTEM ÇAĞRILARI UNIX Win32 Tanımı fork CreateProcess Yeni bir işlem oluşturur. waitpid WaitForSingleObject Bir işlemden çıkmak için bekleyebilir. İşlem oluşturur. (CreateProcess = fork + execve ( none ) execve) exit ExitProcess Çalışmayı sona erdirir. Bir dosya oluşturur ya da varolan bir dosyayı open CreateFile açar. close CloseHandle Dosyayı kapatır. read ReadFile Dosyadan veri okur. write WriteFile Dosyaya veri yazar. UNIX ve WIN32 SİSTEM ÇAĞRILARI UNIX Win32 Tanımı Iseek SetFilePointer Dosya işaretçisini taşır. stat GetFileAttributesEx Çeşitli dosya özelliklerini alır. mkdir CreateDirectory Yeni bir dizin oluşturur. rmdir RemoveDirectory Boş olan bir dizini siler. link ( none ) Win32 bu özelliği desteklemez. unlink DeleteFile Varolan bir dosyayı siler. mount ( none ) Win32 mount özelliğini desteklemez unmount ( none ) Win32 unmount özelliğini desteklemez chdir SetCurrentDirectory Aktif dizini değiştirmek için kullanılır. chmod ( none ) Win32, chmod özelliğini desteklemez. (WinNT destekler) kill ( none ) Win32, kill özelliğini desteklemez. time GetLocalTime Zamanı verir. İŞLETİM SİSTEMLERİNİN YAPISI 6.1. Monolitik Sistemler : İşletim sistemleri, birçok prosedürün bir araya toplanması sonucunda meydana gelmektedirler. Bu prosedürlerin her biri ihtiyaç olduğunda diğer prosedürlerin herhangi bir çağrısı olabilmektedir. Bu teknik kullanıldığında, parametreler bakımından iyi tanımlanmış bir arayüze sahip olan sistemde her prosedür, diğer prosedürleri çağırabilir. Bu yaklaşım kullanıldığında işletim sisteminin gerçek nesne programını inşa etmek için ilk olarak prosedür içeren dosyalar derlenir ve sonra sistem bağlayıcısını kullanarak onların tamamını birlikte tek bir nesne dosyasının içerisinde birleştirir. Sistem çağrıları, parametreleri kullanarak işletim sisteminin isteklerini yerine getirir ve daha sonra bir sonraki komutu çalıştırır. Bu komut, bilgisayarı kullanıcı moddan kernel moda çevirir ve kontrolü işletim sistemine devreder. İşletim sistemi daha sonra sistem çağrılarının getirdiği parametreleri alır ve hangi sistem çağrılarının gerçekleştirileceğine karar verir. Son olarak işletim sistemi, bu çağrıları bir tablonun içerisine indeksleyerek, ilgili prosedüre bir işaretçi gönderir ve sistem çağrısı gerçekleştirilir. Bu organizasyon biçimi işletim sistemi için basit bir yapı önerir : 1. Ana program bir hizmet prosedürü ister. 2. Hizmet prosedürlerinin bir grubu sistem çağrılarını gerçekleştirir. 3. . Yararlı prosedürlerin bir grubu hizmet prosedürlerine yardım eder. Bu modelde, her sistem çağrısının onunla ilgili olan bir prosedürü vardır. Faydalı prosedürler, kullanıcı programlarından veri alma gibi çeşitli hizmet (servis) prosedürlerinin ihtiyaç duyduğu işleri yaparlar. Prosedürlerin bu paylaşımı şekilde görülmektedir. 6.2. Katmanlı Sistemler : Monolitik sistemlerdeki şekli genellersek, işletim sistemleri katmanların hiyerarşisi şeklinde organize edilmişlerdir. Bu düşüncedeki ilk sistem olan THE sistemi Hollanda’daki Eindhoven Yüksek Okulunda 1968 senesinde E.W.Dijkstra ve onun öğrencileri tarafından inşa edilerek yapıldı. THE sistemi bir Hollanda bilgisayarı için geliştirilmiş basit bir batch sistemidir. Katman 5 4 3 2 1 0 Fonksiyonu Operatör Kullanıcı programları Giriş / çıkış yönetimi Operatör – işlem haberleşmesi Bellek yönetimi İşlemcinin programları arasında paylaşımı ve çoklu programlama Tabloda da görüldüğü gibi bu sistem altı katmana sahiptir. İlk katman olan 0.katman bir kesme meydana geldiğinde ya da süre dolduğunda işlemler arasında geçiş yapmak için işlemcinin ayrılmasıyla ilgilidir. 1. katman, bellek yönetimi ile ilgilidir. Bu katman işlemler için ana bellekte bir yer ayırır ve işlem parçaları için ana belleğin bir parçası olmayan 512 K’lık bir bellek kullanır. 1. katman yazılımı ihtiyaç duyulduğunda belleğin içerisinden gerekli sayfaları getirme görevinin gerçekleştirir. 2. katman işlem ve operatör arasındaki haberleşmeyi sağlar. Bu katmanın yukarısında her işlemin kendi operatör konsolu vardır. 3. katman giriş / çıkış aygıtlarının yönetimi ile ilgilidir. Bu katmanın yukarısında da her bir işlem, aygıtları birçok özelliğiyle uğraşmak yerine, iyi tanımlanmış özelliklerle giriş/çıkış aygıtlarıyla ilgilenir. 4. katman, kullanıcı programlarının bulunduğu yerdir. Kullanıcı programları işlem, bellek, konsol veya giriş/çıkış yönetimi için endişelenmez. 5. katmanda ise sistem operatör işlemi gerçekleştirilir. Katmanlama düşüncesinin daha fazla genelleşmiş bir biçimi MULTICS sistemlerde görülmektedir. MULTICS sistemler, katmanların yerine, içerde olanları dışarıdakilerden daha fazla ayrıcalığa sahip olduğu eş merkezli sistemler olarak tanımlanır. Dış halkalarda yer alan bir prosedür, daha iç halkadaki bir prosedürü çağırmak istediğinde, dış halkadaki prosedür, bir TRAP komutunun yaptığı gibi çağrının gerçekleşmesine izin vermeden önce onun doğruluğu için parametreleri dikkatli bir şekilde kontrol etmelidir. Yani bir sistem çağrısının yaptığını yapmalıdır. Bu halka mekanizmasının avantajı, kullanıcı alt sistemlerinin yapısına kolaylıkla ulaşılabilmesidir. Örneğin, bir profesör öğrencilerin yaptığı programları test etmek için bir program yazabilir ve bu program n. halkada çalışırken, öğrenci programları n+1. halkada çalışır, böylece öğrenciler yapmış oldukları hataları değiştiremezler. 6.3. Sanal Makinalar : OS/360 işletim sisteminin ilk hali bir batch sistem uygulamasıydı. Bununla birlikte, pek çok OS/360 sistemi kullanıcısı, zaman paylaşımına sahip olmak istedi. IBM bunu göz önüne alarak, ilk zaman paylaşımlı işletim sistemi olan TSS/360’ı geliştirdi. TSS/360’ın geliştirilmesi bir hayli uzun zaman aldı ve sona erdiğinde hem çok büyük, hem de çok yavaş bir sistemdi. Bu yüzden yaklaşık 50 milyon $ harcandıktan sonra bu sistemin geliştirilme çalışmalarından vazgeçildi. Sadece IBM’in Massachusets’deki Cambridge Üniversitesindeki bilim merkezinde bu sistem üzerinde çalışmalar yapılmaya devam edildi. Bu çalışmalar sonunda TSS/360 üzerinde köklü değişiklikler yapılarak bugün mainframe bilgisayarlarda kullanılan işletim sistemleri geliştirildi. Geliştirilen bu sistemin adı önce CP/CMS idi, fakat daha sonra VM/370 olarak değiştirildi. VM/370, çoklu programlama ve uzatılmış makine sağlayan bir zaman paylaşımlı sistem ile birlikte yalın donanımdan çok daha etkili bir arayüz sağlamaktadır. VM/370 sisteminin özü iki fonksiyonda toplanmıştır. Sistemin kalbi, sanal makine monitörü olarak bilinir. Sanal makine monitörü yalın donanım üzerinde çalışır ve çoklu programlamayı yapar. VM/370 işletim sistemi, tüm diğer işletim sistemlerine benzemezler, sanal makinalar dosyalar ve diğer özellikleri kullanarak makineye erişemezler. Onun yerine, sanal makinalar donanımın bire bir kopyasını elde ederek, gerçek makinanın sahip olduğu kernel/kullanıcı mod, giriş/çıkış, kesmeler ve diğer her şeyi içermektedirler. Her sanal makine gerçek bir donanıma benzer, sanal makinaların her biri herhangi biri işletim sistemi üzerinde çalışabilir. Farklı sanal makinalar, farklı işletim sistemlerinde çalışabilirler. OS/360 işletim sistemi ailesinden gelen bazı sistemler,batch ya da transaction sistemlerde de çalışabilirler, diğerleri ise zaman paylaşımlı sistem olan CMS sisteminde çalışırlar. CMS programı bir sistem çağrısını çalıştırdığı zaman, çağrı işletim sisteminin kendi sanal makinesi üzerinde tuzağa düşürülür, böylece çağrı gerçek makinanın yerine sanal makine üzerinde çalışacaktır. Daha sonra CMS programı, işletim sisteminin sanal diskinde veya çağrının gerçekleştirilmesi için ihtiyaç duyulan yerde bulunanları okuma için normal giriş/çıkış komutlarını gönderir. Bu giriş/çıkış komutları donanımın gerçek bir parçası gibi hareket eden VM/370 tarafından kandırılır. Makineye erişim sağlandığında çoklu programlama alanlara ayrılır ve bu alanların her biri basit, çok esnek ve çok kolay bir kullanıma sahip olabilir. Bir sanal makine düşüncesi bugünlerde çok yoğun bir şekilde farklı bir anlamda kullanılmaktadır: Bir Pentium sistem üzerinde çalışan eski MSDOS programlarında. Pentium işlemci ve bu işlemcinin yazılımı tasarlandığında, Intel ve Microsoft firmaları yeni donanım üzerinde eski programların çalışması için büyük bir talep olacağını anladılar. Bu nedenle, Intel firması Pentium işlemcide sanal 8086 modunu geliştirdi. Bu modda, makine 16 bit adres hattı ile 1 MB’lık bellek sınırı ile 8086 işlemcilere benzer. Bu mod, Windows ve diğer işletim sistemleri tarafından eski MSDOS programlarını çalıştırmak için kullanıldı. MSDOS programları sadece basit komutları çalıştırırlar ve yalın donanım üzerinde çalışırlar. Bir MSDOS programı bir sistem çağrısı yapmak istediğinde ya da doğrudan doğruya giriş/çıkış işlemleri yapmak istediğinde, sanal makinede bir trap çağrısı meydana gelir. Bu dizaynda iki durum mümkündür. Birinci durumda, MSDOS programının kendisi sanal 8086’nın adres alanına yüklenir, böylece sanal makine monitörü gerçek bir 8086 işlemcide meydana geldiği gibi MSDOS programına yalnızca trap çağrısını yansıtır. MSDOS daha sonra, giriş/çıkış komutlarını çalıştırmayı denediğinde, bu işlem 8086 sanal makinesi tarafından gerçekleştirilir ve tutulur. Diğer durumda, sanal makine sadece ilk trap çağrısını tutar ve giriş/çıkış komutlarını gerçekleştirir. Çünkü tüm MSDOS çağrılarının ne olduğunu bilir ve böylece her trap’in ne yapacağını tahmin edebilir. Bu durum, ilk durumdan daha yalındır, çünkü birinci durumdaki gibi program sanal makineye yüklenmez, sadece doğru bir şekilde taklit edilir. Diğer yandan ikinci durum birinci duruma göre çok daha hızlıdır. Sanal makine modunda çalışan MSDOS programlarının en önemli dezavantajı, kesme yaparken önemli bir zaman kaybının yaşanmasıdır. Bu yaklaşımlardan hiçbiri gerçek bir VM/370 sanal makinesi gibi değildir. VM370 sistemiyle, ,kendi sanal makinasında, VM370 üzerinde çalışması mümkündür Ancak VM/370’in Pentium’la çalışması mümkün değildir, çünkü 8086 işlemcide çalışan Windows versiyonu yoktur. En eski Windows versiyonunu çalıştırmak için bir 286 gerekir ki, o da bunu sağlayamaz. Sanal makinaların farklı bir şekilde kullanıldığı diğer bir alan da çalışan Java programları içindir. Sun Microsystem tarafından Java programlama dili geliştirildiğinde, aynı zamanda JVM (Java Virtual Machine) olarak adlandırılan java sanal makinesi de geliştirildi. Java derleyicisi, JVM için kod üretir ve sonra bir JVM yorumlayıcı yazılımı tarafından bu kodlar çalıştırılır. Bu yaklaşımın avantajı, JVM yorumlayıcısına sahip herhangi bir bilgisayara internet üzerinden JVM kodlarının gönderilebilmesidir. Eğer derleyici, SPARC veya herhangi bir Pentium programını derlemiş olsa, SPARC ve Pentium programları kolayca gönderilip, çalıştırılmayabilir. JVM kullanmanın diğer bir avantajı da, eğer yorumlayıcı önemsiz şeyler hariç, diğer işleri tam olarak gerçekleştirdiğinde, gelen JVM programları güvenlik için kontrol edilebilir ve sonra korumalı bölgede çalıştırılabilir. Böylece herhangi bir verinin çalınması da önlenmiş olur. 6.4. Dış Çekirdekler (Exokernels) : VM/370 sanal makinesiyle her bir kullanıcı işlemi, bilgisayarın bir kopyasını alır. Pentium işlemcilerdeki 8086 moduyla, her bir kullanıcı işlemi farklı bir bilgisayarın kopyasını alır. Bir adım daha ileriye gidersek, M.I.T.’de araştırmacılar her kullanıcıya kısıtlı kaynaklarla bilgisayarın bir kopyasını veren sistem geliştirdiler. Bu nedenle bir sanal makine 0 ile 123. disk bloklarını alabilir, bir sonraki 1024 ile 2047 arasındaki disk bloklarını alabilir ve böylece devam eder. En alt katmanda, kernel modda çalışan program dış çekirdek (exokernel) olarak adlandırılır. Görevi sanal makinanın kaynaklarını ayırmaktır. Her kullanıcı-seviyeli sanal makine VM/370 ve Pentium’daki sanal 8086’da olduğu gibi kendi işletim sistemi üzerinde çalışabilir. Dış çekirdeğin avantajı, eşleştirmenin bir katmanını saklar. Diğer dizaynlarda ise her sanal makine, kendi sanal diskine sahip olduğunu düşünür. Dış çekirdek, sadece sanal makinenin hangi kaynağının ayrıldığı bilgisinin tutulduğu bir işarete gereksinim duyar. 6.5. Client – Server Modeli : Bu modelde, server’lar ve client’lar arasındaki iletişim tüm kernel’da tutulmaktadır. İşletim sistemi dosya servisi, işlem servisi, terminal servisi veya bellek servisi gibi her birinde sistemin sadece bir yönünün tutulduğu parçalara ayrılır, bu parçaların her biri küçük ve yönetilebilir olmaktadır. Bundan başka tüm server’lar kernel modda çalışmazlar, kullanıcı modda çalışırlar, onlar donanıma doğrudan bağlanamazlar. Sonuç olarak, eğer bir virüs dosya server’da ortaya çıkarsa, dosya server çökebilir, fakat bu genellikle makinanın tamamını etkilemeyecektir. Client – server mimarisinin diğer bir avantajı, onun şekil 28’de sınıflandırılan sistemlere kullanılmak için kolay uyum sağlamasıdır. Eğer bir client mesaj göndererek bir server ile iletişim kurarsa, client kendi makinasında mesajın yerel olarak tutulup tutulmadığını veya uzaktaki makinede server’a bir ağ üzerinden gönderilip gönderilmediğini bilmeye ihtiyaç duymaz. Client’ı ilgilendirdiği kadarıyla, benzer şeyler iki durumda meydana gelir: bir istek yollandı ve yanıtlandı. Kernel sadece client’tan server’a iletilen mesajları tutar. Bazı işletim sistemi fonksiyonlarını gerçekleştirmek oldukça zordur. Bu zorluğun giderilmesi için iki yol vardır. Birinci yol, tüm donanımın yüklenmesiyle, aslında kernel modda çalışan bir server işlemine sahip olmaktır. Ancak yine de diğer işlemlerle normal mesaj mekanizmasını kullanarak iletişim sağlanır. İkinci yol, kernel’ın içerisine mekanizmanın küçük bir kısmını inşa etmektir. Ancak önemli kararlar yine server’a bırakılır. Örneğin, bir mesaj belirli bir adres yoluna mesajın içeriğini gönderir ve bazı diskler için giriş/çıkış aygıt kaydedicilerine onu yükler, diskten okuyarak çalıştırır. Kernel bu işlemi tanıyabilir. Bu örnekte, kernel eğer byte’lar geçerli veya anlamlı ise mesajdaki bilgileri incelemeyecekti; onları diskin aygıt kaydedicisinin içerisine bilinçsizce kopyalayacaktı. 6.6. Özet : İşletim sistemlerine iki açıdan bakılabilir : kaynak yönetimi ve makinaya erişim. Kaynak yönetiminde işletim sisteminin görevi sistemin farklı parçalarını hızlı bir şekilde yönetmektir. Makinaya erişmede sistemin görevi, gerçek makinayı kullanmaktan çok daha kolay olan sanal makinayı kullanıcılara sağlamaktır. İşletim sistemleri operatörlerin yerini aldığı zamandan başlayarak modern çok programlamalı sistemlere kadar uzun bir tarihe sahiptir. En önemlileri batch sistemleri, çoklu programlama sistemleri ve kişisel bilgisayar sistemlerini içermektedir. İşletim sistemleri açıkça donanımla birbirini etkilediğinden bu yana, bilgisayar donanımının bazı bilgilerini öğrenmek isterler. Bilgisayarlar işlemciler, bellekler ve giriş/çıkış aygıtları bir araya gelecek şekilde inşa edilirler. Bu parçalar yollar aracılığıyla birbirlerine bağlanırlar. Tüm işletim sistemlerinde temel düşünce işlem, bellek yönetimi, giriş/çıkış yönetimi, dosya sistemi ve güvenlik olarak kurulmuştur. Herhangi bir işletim sisteminin kalbi, onun kullanabileceği sistem çağrılarının hazırlanmasıdır. Bunlar gerçekten işletim sisteminin ne yaptığını söyler. Biz UNIX için, sistem çağrılarına dört grupta baktık. Sistem çağrılarının birinci grubu, işlem oluşturma ve sonlandırma ile ilgiliydi. İkinci grup dosyalara okuma ve yazma içindir. Üçüncü grup directory yönetimi içindir. Son grup ise çeşitli sistem çağrıları içindir. İşletim sistemleri çeşitli yollarda tasarlanmış olabilir. En yaygın olanlar, monolitik sistemler, katmanlı sistemler, sanal makinalar, exokernel ve client – server modelidir. GİRİŞ ÇIKIŞ SİSTEMİ 7.1. Giriş / Çıkış Birimleri Giriş/çıkış birimleri, verilerin, kullanıcı ile bilgisayar ortamı arasında aktarılmasına ya da bu ortamda saklanmasına yarayan birimlere verilen isimdir. Terminal, yazıcı gibi giriş/çıkış birimleri veri aktarma; disk gibi giriş/çıkış birimleri ise veri saklama birimleridir. 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 sağlarlar. Giriş/çıkış arabirimleri, ana işlem birimi-ana bellek ikilisi ile aynı ortamda bulunurken, giriş/çıkış sürücüleri genelde bu ortamın dışında hatta çok uzakta olabilirler. Veriler, kullanıcı ortamı olarak da tanımlanan dış ortamdan ana işlem birimi-ana bellek ikilisine giriş/çıkış sürücüleri aracılığıyla aktarılırlar. İşlem sonucu elde edilen sonuçlar da, yine giriş/çıkış sürücüleri aracılığıyla kullanıcılara iletilirler. Giriş/çıkış arabirimleri, verilerin sürücülerin ile ana bellek arasında aktarılmasında kullanılır. Bir bilgisayar sisteminde yer alan giriş/çıkış sürücüleri tür, hız gibi değişik özellikleri yönünden çok büyük farklılıklar gösterirler. Değişik türdeki sürücüleri aynı ana işlem birimi-ana bellek ikilisi ile bütünleştirmek ve sürücü-sistem arası veri aktarımlarını benzer kalıplar içinde ve sürücülerin karmaşık fiziksel yapılarını gizleyerek yürütmek gibi giriş/çıkış arabirimlerinin temel işlevini oluşturur. 7.1.1. Arabirim – Sürücü Arasındaki Bağlantı : Giriş/çıkış sürücüleri ilgili oldukları arabirimlere iki şekilde bağlanmaktadırlar. Bu bağlantılar seri ve paralel bağlantılardır. Seri bağlantıda her bir verinin iletimi farklı bir yol üzerinden gerçekleştirilirken, paralel bağlantıda her veri aynı yoldan sırayla aktarılmaktadır. Ekonomik nedenlerden dolayı, sürücü ile arabirimin birbirlerine yakın olduğu durumlarda paralel, uzak olduğu durumlarda ise seri bağlantı kullanılır. Arabirim ile sürücü arasındaki bağlantı seri bağlantı ise, iletişimin başlatılması ve hatasız sürdürülmesinde kullanılan zaman uyumlama yöntemine göre zaman uyumlu ve zaman uyumsuz iletişimlerden söz edilir. Zaman uyumsuz seri iletişimde aktarılan verinin başına ve sonuna start ve stop bitleri eklenir. Start biti, gönderici birimin alıcı birimi aktarma işleminin başladığı konusunda haberdar etmesini sağlar. Stop biti ise aktarılan verinin sonunu gösterir. Zaman uyumlu seri iletişimde ise veri bitlerine ek bitler eklemek yerine, gönderici ve alıcı birimlerin birbirleriyle sürekli zaman uyumlu kalmalarını sağlayan ve veriler arasında gerektikçe iletilen, özel zaman uyumlama bitleri kullanılmaktadır. İki birim arasında yapılan iletişim, radyo yayınlarında olduğu gibi hep göndericiden alıcıya doğru gerçekleştirilirse yapılan iletişime tek yönlü (simplex), her iki yönde de gerçekleşiyorsa çift yönlü (duplex) iletişim denir. Çift yönlü iletişim, telefonda olduğu gibi aynı anda her iki yönde olabiliyorsa tam çift yönlü ( full duplex), telsiz iletişimde olduğu gibi, aynı anda yalnız bir yönde, ancak zaman içinde her iki yönde de olabiliyorsa, bu kez yarı çift yönlü (half duplex) olarak adlandırılır. Sürücüler ile arabirimler arasındaki veri alış-verişi genelde tam çift yönlüdür. 7.1.2. Giriş/Çıkış Arabirimleri Veriler, kullanıcı ortamı olarak da tanımlanan dış ortamdan ana işlem birimi-ana bellek ikilisine giriş/çıkış sürücüleri aracılığıyla aktarılırlar. İşlem sonucu elde edilen sonuçlar da, yine giriş/çıkış sürücüleri aracılığıyla kullanıcılara iletilirler. Giriş/çıkış arabirimleri, verilerin sürücülerin ile ana bellek arasında aktarılmasında kullanılır. Bir bilgisayar sisteminde yer alan giriş/çıkış sürücüleri tür, hız gibi değişik özellikleri yönünden çok büyük farklılıklar gösterirler. Değişik türdeki sürücüleri aynı ana işlem birimi-ana bellek ikilisi ile bütünleştirmek ve sürücü-sistem arası veri aktarımlarını benzer kalıplar içinde ve sürücülerin karmaşık fiziksel yapılarını gizleyerek yürütmek gibi giriş/çıkış arabirimlerinin temel işlevini oluşturur. 7.2. Kesmeler Bilgisayarlarda yürütülmekte olan bir bilgisayar programının veya bir başka işlemin ani veya bir istisna karşısında ortaya çıkan durma olayına denir.Bir bilgisayar,kendisine bağlı çevre birimleriyle uyumlu bir şekilde çalışması ve onlarla sağlıklı bir iletişim kurabilmesi için bazı araçlara gerek duyar örneğin ,klavyeden bir karakter girilirken, bilgisayarın, girilen bu karakterin ne zaman basılacağım bilmesi gerekir. Bir başka örnek verilecek olursa, yazıcıdan her hangi bir çıktı alınması gerekirken,bilgisayar her hangi bir karakteri yazıcıya göndermeden Önce, yazıcının hazır olup olmadığını bilmesi gerekir. Giriş/Çıkış araçları hazır oluncaya kadar bilgisayarlar başka işler yapabilirler. Bu işlemlerin yapılabilmesi için bilgisayarın hazır olup olmadığının bildirilmesi gerekir. Bütün bunlar için kesmeler kullanılır. Bu kesmelerin ne şekilde yürütüleceğini ve bunların nasıl yanıtlanacağını "Interrupt servise .. " kesme servisi belirler. Kesme işlemi çıktığında işletim sistemi hemen o anda çalıştırdığı komutu veya program askıya alarak saklar. Kesme bittikten sonra kesme düzeltme programını "Interrupt handler" çağırır, saklanmış olan ( kesme işi gerçekleşen ) program veya minstruction kesildiği yerden tekrar devam etmeye başlar. Bu durum : - Kesmenin aniden ortaya çıkışı; - Program yürütülmekteyken kesme olayının ortaya çıkışı; - O andaki (current psw) program "Store PSW komutuyla" korumaya alınır. Bu işlerin tümü interrupt handler tarafından düzenlenir. 7.2.1. Kesmenin Aktif ve Pasif Hale Getirilmesi MİB,çevre birimlerinden gelen kesmelere her zaman anında yanıt vermek zorunda değildir. Bazen çevreden gelen bu kesmeleri önemsemeyebilir.Mesela, bir yazdırma olayında yazıcıdan gelen kesme sinyalleri ancak, MÎB 'da yazdırılacak bir yazı varsa göz önünde tutulur. Eğer yazdırılacak yazı kalmamışsa , yazıcıdan gelen "hazırım" sinyalinin her hangi bir anlamı kalmayacaktır. Örnek: MÎB, çok önemli bir iş yaparken,çevreden gelen kesmelerle rahatsız edilmesi istenmez. Bu nedenle kesmelerin aktif ve pasif hale getirilmesi gerekir. Bunu yapmanın en basit yolu, "interrupt enable" ve "interrupt disable"ın harekete geçmesidir. Kesme sinyalinin işleyişini biraz daha derinden incelemeye alınacak olunursa; çevre biriminden gelen kesme sinyali, kesme işleminin "interrupt service routine" tarafından yanıtlanana kadar aktif kalır. MİB tarafından yanıt verilir verilmez başka gelebilecek kesmelere karşı önlem alınması gerekir. Bir birimden gelen kesme işlemi yanıtlandıktan sonra "pasif hale getirilmezse, MİB daha sonra aynı yerden gelecek kesmeye bir kez daha yanıt vermek isteyecek ve MİB sonsuz bir döngüye girmiş olacaktır. Bu problemi ortadan kaldırmak için 3 ayrı mekanizmanın işlemesi gerekecektir. 1- Kesme servisi programın ilk komutu çalışana kadar çevreden gelecek kesmelerin "disable:Pasif edilmesi ,veya MİB’nin bunları önemsememesi gerekir. Bu durum ise kesme servisinin ilk komutunu kesmeyi pasif yap olması gerekir. Kesme programı çalıştıktan sonra bu programın son komutu olan "return from interrupt : kesmeden çıkış " tan önce, kesmeyi yeniden aktif hale getiren "interrupt enable" komutunu kullanmaktır. 2- MİB'nin otomatik olarak kesme servisi routinini çalıştırmadan önce kesmeleri pasif hale getirmesidir. Bu durum ise : Kesme geldiği anda MlB, pc ( processor status ) PS 'u istif halde tutarak interrupt disable olur. Bu da PS kaydedicisinde kesmenin pasif veya aktif olduğunu gösteren bitin kullanılmasıyla ortaya çıkar. 3- Donanım tarafından ortaya çıkarılabilen çözüm yoludur. Bu çözüm yolunda özel devreler kurularak sadece belli bir yerden veya belirli bir konumdaki kesmeleri yanıtlar. 7.2.2. Kesme Çeşitleri Kesme durumlarının çok çeşitli olmasına rağmen bazıları aşağıdaki şekillerde açıklanabilirler; a ) Program Kesmesi b) Giriş / Çıkış Kesmeleri c) İşletim Sistemi Kesmeleri d) Dıştan Kesme 7.2.2.1. Program Kesmesi ( Program Interrupt ) Program kesmesi aşağıdaki sebeplerden herhangi birisinden dolayı ortaya çıkabilir, a) Geçersiz MİB komutu (Invalid MİB instruction): işlemci komutlarındaki hatadan ortaya çıkan bir kesme olayıdır. Bu hata yazımdan (dilden) olduğu kadar Syntax veya verilmesi gereken şifre hatasından da ortaya çıkar. b) Aritmetik işlem fazlasından meydana gelen hata (Overflow Error): Bilgisayardaki sayısal işlemler (Binary Codes) denilen ikili sayı koduyla temsil edilirler. Bu şekilde temsil edilirken, bunun uzunluğu bilgisayara özgü kelime uzunluğunu geçmemelidir. Eğer bilgisayardaki kelime uzunluğu geliyorsa ,yani sayısal değer, kelime uzunluğunu geçiyorsa, bu durumda aritmetik işlem fazlası olduğu görülür. c) Korumayı Delme Hatası ( Storage Protection Violation): Bu hata, programın herhangi bir komutunda ana veya yardımcı bellek üzerinde yazma izni olmayan bir yere (yazılmaması gereken bir yere) bilgi saklamak istenmesi durumunda ortaya çıkar. Bu tür hatalar hem yazma hem de okuma durumunda ortaya çıkabilir. Eğer MİB , okumanın mümkün olmadığı bir adresten bilgi okumak isterse yine aynı hala görülür. 7.2.2.2. Giriş/Çıkış Kesmeleri (I/O Interrupt) Bu tip kesmeler giriş/çıkış kanallarında ortaya çıkarlar. Bunun nedeni ise aşağıdakilerden her hangi birisi sonucu olabilir. a) Giriş çıkış komutundan ortaya çıkabilen her hangi bir hata ;örneğin : Kullanılan dilde girdi veya çıktı komutu olarak geçerli olmayan bir komutun kullanılması; ikili sayı şifresinde meydana gelen hatadan; Girdi/ Çıktı ve kanal numaralarının yanlış veya tespit edilememesinden ortaya çıkan hatalar sonucunda bu tür kesmeler gelebilir. b) Giriş/Çıkış programının yürütülmesinin bitmesiyle (kanal programında kanal komut kelimesinin son deyimi yürütüldükten sonra) işletim sistemleri kanal programını durdurmak için (H I/O) ile emir verir ve ani kesme olur. Bilgisayarın diğer kısımları çalışmasına devam eder. c) Giriş/Çıkış ünitelerinin verileri geçiş yolundan taşıması sonucunda ani kesme olayı sonucunda ortaya çıkabilir. 7.2.2.3. İşletim Sistemi Kesmeleri (Supervisor Cali Interrupt) Kullanıcının hiçbir ilişkisi olmadan, bilgisayar içindeki işlemlerin yürütülmesi için işletim sistemi kesme emri verebilir. 7.2.2.4. Dıştan Kesme (External Interrupt) Bu kesme şekli iki sebepten dolayı ortaya çıkabilir: a) Kullanıcının zorunlu olarak çalışmakta olan bir programdan çıkmak için yapılan kesme olayıdır. Örneğin; kısır döngü durumlarının meydana gelmesi durumlarında; kullanıcının makinayı kiraladığı sürenin dolması durumlarında meydana gelebilir. Elde olmayan nedenlerden dolayı makinanın durdurulmasının gerektiği durumlarda yapılan kesmelerdir. b) Zamanlayıcılardaki bozukluktan dolayı ortaya çıkan kesmelerdir. Zaman paylaşımına bağlı çalışmalarda veya zamanlayıcının (+) değerinin (-) değere dönüşmesi durumunda ortaya çıkan kesmelerdir. Bu kesmeler bilgisayar aksamının birbirleriyle bağlanamaması sırasında ortaya çıkabilir. Mesela, işlemci işlemciyle veya ana belleğin kanallara bağlanması durumlarında ortaya çıkabilir. 7.2.2.5. Makinanın Test Kesmesi ( Machine Check Interrupt) Bilgisayarın ilk açıldığında, işletim sistemi bilgisayara bağlı olan üniteleri kendiliğinden test eder. Bu test yapılıp doğruluğu kontrol edilmeden bilgisayar çevre birimlerini tanıyamaz ve işlevini yerine getiremez. 7.3. Doğrudan Bellek Erişimi Düzeneği 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şimi 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. 7.3.1. Doğrudan Bellek Erişim Denetleme Birimi 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 biriminde 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 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ı işaretiyle, 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çerisinde 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 arttırılırken sayaç içeriği bir eksiltilir. Aktarım işlemlerinin başında ana bellek aktarım alan boyu ile güncellenen 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üncellenmesi sağlanır. 7.4. Giriş / Çıkış Kanalları Giriş ve çıkış kanalları, yapıları itibariyle işlemci işlemlerinden daha farklı değillerdir. Tek farkı giriş veya çıkış işlemlerinde bilgilerin bilgisayar aksamına ( ana bellek, yardımcı bellek, işlemci, giriş/çıkış üniteleri gibi ) geçişini sağlamaktır. Bilgilerin bilgisayar aksamına geçiş kanalları olarak bilinir. Giriş / çıkış kanalları ile bilgisayar aksamı arasındaki bağlantı üç şekilde ortaya çıkar : a ) Kanalla bellek arasında direk bağlantı. b ) İşlemci ile kanal arasındaki direkt bağlantı. c ) Giriş / çıkış üniteleriyle kanal arasındaki bağlantı. Bu giriş / çıkış kanallarının birbirlerinden olan üstünlükleri ise : a ) Aynı anda bir giriş/çıkış ünitesi veya daha fazla üniteye hizmet verebilme gücünün olup olmadığı. b ) Giriş / çıkış kanalları arasındaki ulaşım ile birimler arası hizmet dağıtım gücünün olması. c ) Bilgilerin, muhtelif bilgisayar aksamına taşınma hızına göre değişmesi. 7.4.1. Giriş/Çıkış Kanallarının Çeşitleri a) Selector : Bu kanal aynı zamanda bir giriş veya bir çıkış ünitesine hizmet verir. Genellikle de yüksek hızlı giriş/çıkış ünitelerine bağlı olur. b) Multiplexer Channel ( Çoğaltıcı Kanallar ) : Aynı anda birden fazla giriş/çıkış ünitesine hizmet verir. Orantılı olarak kısa zaman içerisinde üniteler arasında hızlı hareketiyle tanınan bir kanaldır. Buna bağlı olarak 256 giriş/çıkış ünitesi çalışabilir. c) Blok Multiplexer : Yukarıdaki iki kanalın dezavantajlarını gideren bir kanal olarak görev yapan ve giriş/çıkış kanalları arasında hızlı hareket eden bir kanal tipidir. 7.4.2. Giriş Ve Çıkış Programlarının Özel Komutları Giriş/çıkış işlemleri aşağıdaki noktalardan herhangi birisini veya birden fazlasını yerine getirir. a) Veri transferi ( Data Transfer): Bu giriş ünitelerinden okuma işlemlerini ve çıkış ünitelerinden de bilgilerin çıkış işlemlerinin yapılması durumudur. b) Giriş/çıkış ünitesinin kontrolü ( Device Kontrol ): Okuyucu ve yazıcı başlarının mekanik hareketlerinin kontrol altına alınmasıdır. c) Kontrollü Taşıma ( Branching ): Giriş/çıkış programlarının kısımları arasında taşınan özel emirlerdir. Bu işlemlerin hiç biri ( program channel ) kanal programı olmadan yerine getirilemez. Bu program, kanal emirler (komutlar) topluluğundan oluşur (channel command words : ccws) Bu program kanalı yardımıyla yürütmeye getirilir. Bu kelime ccw 64 bitten oluşan kanal komut kelimesi olup bir sonraki sayfadaki şekille açıklanabilir: Operation Data Code Address 8 bit 24 bit 1- Flags Unused Count 6 bit 11bit 15 bit İşlem kodu(şifresi) (operation code) : Doğrudan olan(direkt) komutu taşır.Örneğin input, move, store gibi. 2- Veri adresi (data address) : Ana bellekte işlem gören verilerin yerini tespit eden rakamı taşır. 3- İşaretler (Özel karakterler)(flags) : İkili sayı şifreler topluluğundan oluşur.Bunlar: a- Kanal programının çalıştığını veya bittiğini gösterir. b- Küçük veya uzun formatlı verilerin alan uzunluklarını gösterir. c- Ana bellekte belirli yerlere erişim mekanı arar. 4- Sayaç Alanı (count) : İşlemci içerisinde yürütülmekte olan veri alanının uzunluğunu gösterir. Herhangi bir giriş/çıkış programının yürütülmesi için iki özel komuta ihtiyaç vardır : 1. Kanal durumunu tespit emri 2. Adres tespit komutu 1- Kanal durumunu tesbit emri: İstenen bir zaman süresi içerisinde kanal durumunu tesbit eder.Bu işlem ise: a) Program işler halde ise (bussy) giriş/çıkış programının yürütülmesi b) Program işlemez halde ise (not bussy) giriş / çıkış programının bitirilmesi c) Yürütmede bir hatanın ortaya çıkması "korumayı delme veya bilgilerin yetersizliği gibi" yani bilgilerin giriş/çıkış için yetersiz olduğu hallerde dahi kanal durumu tesbit edilebilir. Bütün alanlarıyla bu kelime (csw) aşağıdaki şekilde vasıflandırılır: Protection Next ccws Key Address 8 bit 24 bit Status 16 bit Residual Counts 16 bit a) Birinci alan (koruma anahtarı) : Ana bellekte uygun kilit'i arayarak korumayı kaldıran alandır. b) İkinci alanda ise kanal programından gelecek ikinci komutun adresini tesbit eder. c) Üçüncü alan , kanalın çalışıp çalışmadığını veya herhangi bir hatanın meydana gelebileceği kanal tesbit eder d) Dördüncü alan, yürütülmekte olan, deyimin yürütülmemiş olan ikili hücre sayılarını tesbit eder 2- Adres tesbit komutu (channel address word): Yürütülmekte olan kanal programı komutlarının ilkinin yerini tesbit etmekle görevlendirilmiştir.Genellikle bu komut işletim sistemleri alanı içerisinde yer alır. Bu komut iki alanı kapsar, birincisi koruma anahtar alanı ve ikincisi ise kanal komutlarının birincisinin adres alanıdır. 7.4.3. Giriş/Çıkış Kanallarının Bilgisayarla Bağlantıları (Communication of channels) : Kanalların bilgisayarla olan bağlantıları üç şekilde ortaya çıkar; 1-Ana bellek ile doğrudan bağlantı: Bellek yöneyim yazılımları giriş/çıkış trafik kontrolleri ile bağlantı kurarak giriş/çıkış kanallarının açılmasını sağlar (eğer açık değilse) bununla birlikte ana ve yardımcı belleğe veya giriş/çıkış ünitesine doğru ve tersine bilgi geçişi sağlanır.Bilgilerin geçişini sağlayan bu işleme "spooling system" geçiş düzeni denir. 2- İşlemcilerle kanallar arasındaki doğrudan bağlantı (Communication between MİB and I/O channels):Bu bağlantı iki yönde gerçekleşebilir; a) İşlemciden kanal'a olan bağlantı, işlemcinin kanaldan veri istemesiyle başlar. b) Kanaldan işlemciye olan bağlantı yan bellek veya giriş/çıkış ünitelerinde işlemciye doğru bilgilerin geçişi anlamını taşır. İki yönde olan bu bağlantı bir sonraki sayfadaki adımlarla yapılır; 1- Yürütülmekte olan değim giriş/çıkış ünitesi ile bilgilerin geçeceği yolun numaralarım taşırlar. 2- Bu numaralar, yürütmeyi başlatma emri içerisinde yer alarak bunlarla kanal programının yeri tespit edilir. 3- Daha sonra program statüsüne bağlanarak yürütme anındaki komut şifresi kontrol edilir. 4- Bu kontrol işlemi ise giriş / çıkış komut testiyle yapılır. 5- Eğer yürütülmekte olan komut giriş / çıkış komutu ise adres tespiti için kanal programının ilk komutunun yerinin edileceğine geçilir (CAW ile). 6- Eğer yürütülmekte olan komut giriş / çıkış komutu değilse, bir kesme şifre ilanı ortaya çıkar. Bu kesme şifre alanı gizlemeye elverişli ise komut test emri, yapmakta olduğu işe devam eder ve bu arada kanalla işlemci arasındaki bağlantı kesilir. (Halt I/O: HIO). 7- Giriş / çıkış başlama komutu (SIO) tarafından tespit edilen kanal durumu ile CSW) ile gözden geçirilir. 8- Eğer kanal çalışıyorsa (bussy) başka bir şekilde bir kesme ortaya çıkararak ile PSW) içerisinde saklanır. Gizleme alanı ise burada kesmeyi, ya erteler veya anında kesmeyi gerçekleştirir. 9- Eğer kanal çalışmıyorsa (not bussy) kanal program komutlarının ilkini yürütmeye çalışır. Bu arada kanal durumunu belirleyen komut tamamen yeni işe göre yenilenir ve (TIO) yürütmeye tabi tutulan bütün komutları kontrol etmeye devam eder. 10- Komut emri değiştiğinde ise kanal programı (HIO) emriyle durur ve kanallarla işlemci arasındaki bağlantı kesilmiş olur. Burada bir başka kesme türü ortaya çıkar buna (I/O program ends) G/Ç programının sonu olarak bilinir. 3- Giriş / çıkış üniteleriyle kanal arasındaki bağlantı : Bu bağlantı tamamen yol vericiyle ilgili olan bir kanal bağlantısıdır. GÖREV YÖNETİMİ GÖREVİN TANIMI 8.1. Giriş : Bilgisayar sisteminin verimli kullanımı merkezi işlem birimi, ana bellek ve giriş/çıkış birimleri gibi kaynakların programlar arasında paylaşılmasını gerektirir. Merkezi işlem biriminin paylaştırılması programların işletimlerinin birlikte sürdürülmesi yoluyla sağlanır. Merkezi işlem biriminin bir programın işletimini bırakıp diğer bir program işletimine geçmesi “anahtarlama” olarak adlandırılır. Merkezi işlem biriminin paylaşımı bu durumda değişik programların bu birime belirli bir sırayla anahtarlanması yoluyla gerçekleştirilir. Programların merkezi işlem birimine hangi sıra ve kurallar çerçevesinde anahtarlanacağı merkezi işlem birimi yönetimi kapsamında ele alınır. Programlar işletimleri sırasında “görev” olarak adlandırılırlar. Merkezi işlem biriminin yönetimine paylaşılan kaynak yerine bu kaynağı paylaşılan görevler yönünden bakarak “görev yönetimi” de denir. Programların çalışabilmesi için merkezi işlem birimine anahtarlanmaları gerekir. Bunun yanı sıra ana belleğe yüklenmeleri işletimleri sırasında gereksinim duyacakları giriş/çıkış türü kaynakları diğer programlarla yazışarak elde etmeleri gerekir. Programlar merkezi işlem birimi dışındaki ana bellek, giriş/çıkış gibi kaynakları yine merkezi işlem birimi aracılığıyla tüketebilirler. Bu işlemlerin yapılabilmesi için işletim sistemi içinde yer alan ilgili yönetici ve sürücü görevlerin ana işlem birimine anahtarlanarak çalıştırmaları sonucu gerçekleştirilir. Görev bir programın işletimi sırasında aldığı isimdir. İşletilen her program için en az bir görev tanımlanır. Merkezi işlem biriminin verimli kullanımı birden çok programın işletimiyle sağlanır. Merkezi işlem biriminin bir programı bırakıp, diğer bir programa geçmesi belirli önlemler alınarak yapılır. Yarım bırakılan bir programın tutarlı bir biçimde kaldığı yerden çalıştırılması işletimini 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ı en azından işletimin hangi komuttan başlayarak sürdürüleceği bilgisini, merkezi işlem birimi yazmaç içeriklerini varsa kullanılan kütüklerle ilgili bilgileri içermek zorundadır. Bu yapı görev iskeleti olarak adlandırılır. Görev iskeleti genelde görev birliği başta olmak üzere görevin program sayacı, yığıt sayacı, diğer işlem birimi, yazmaç içerikleri, durum, öncelik, bellek atama bilgileri, işlenen kütükler ve bunlarla ilgili gösterge bilgilerini tutar. Görev iskeleti programların sırasıyla merkezi işlem birimine anahtarlanarak çalışmaları sırasında işletim bütünlüğünün korunabilmesi başka bir deyişle bir programın diğer bir programı bozmaması için gerekli tüm bilgileri eksiksiz içermek zorundadır. Bir görev merkezi işlem birimine anahtarlanıp çalıştırılmadan önce merkezi işlem birimindeki yazmaçların görev iskeletinde yer alan içeriklerle güncellenmesi görev iskeletinin herhangi bir nedenle kesilmesi durumunda ise bunların içeriklerinin görev iskeletindeki ait alanlara saklanması gereklidir. 8.2. Görevlerin İşletim Süresince Bulunduğu Durumlar : Bir program işletimi sonlanana kadar değişik işletim evrelerinden geçer. Bunlar merkezi işlem biriminin kullanımı yönünden genel olarak çalışma ve bekleme evreleridir. Bu evrelere “durum” adı verilir. Görevlerin işletimleri sırasında bulunduğu durumlar, durum çizenekleriyle gösterilir. Görevlerin işletimleri süresince bulunabildikleri tüm durumlar ile bu durumlar arsı geçişler arası durumlardan oluşan çizeneğe “görev-durum çizeneği” denir. Şekilde gösterildiği gibi çalışır durum, görevin merkezi işlem birimini kullanıyor olmasını, bekler durum ise görevin merkezi işlem biriminin yeniden kullanabilmek üzere başlattığı bir işlemin (örneğin diskten okuma) sonlanmasını beklemesi anlamındadır. Oluşumunu beklediği bir koşulun gerçekleşmesi bir göreve, merkezi işlem birimine anahtarlanarak çalışabilir veya merkezi işlem birimine anahtarlanmak üzere seçilebilir görev özelliği kazandırır. Merkezi işlem birimini kullanabilir duruma gelen görevler “hazır görev” olarak adlandırılır. Hazır görevlerden biri görev yönetimi kesiminde açıklanacak kıstaslara dayanılarak görev yönetimi diye adlandırılan özel bir sistem görevi aracılığıyla merkezi işlem birimine anahtarlanır ve çalışır göreve dönüşür. Çalışmakta olan görev, giriş-çıkış işlemi başlattığında tümüyle sonlanmadan işletimine devam edemeyeceği için bekler durumuna geçer ve merkezi işlem birimini bırakır. Çalışmakta olan bir görev işletiminin bitmesi durumunda merkezi işlem biriminde ve sistem içindeki tanımı da yitirerek bitiş aşamasına geçer. Görevler merkezi işlem birimini kendilerinden kaynaklanmayan nedenlerle de bırakmak zorunda kalabilirler. Etkileşimli işlemin uygulandığı bilgisayar sistemlerinde görevlerin merkezi işlem birimini belirli süreler içinde sırayla kullanmaları istenir. Kendine ayrılan süre sona erdiğinde görev yeniden hazır görev durumuna getirilir. 8.3. Görevlerle İlgili Sistem Çağrıları : Sistem çağrıları gerek derleyiciler, gerekse sistem programları tarafından işletim sistemine ilişkin yordamları çağırmada ve bu yolla hizmet almak için 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ıyla olur. Bunlar hem uygulama programları hem de işletim sisteminin kendisi tarafından kullanılırlar. Görevlerin yaratılması, sonlandırılması, işletimlerinin başlatılması, geciktirilmesi ya da kesilmesi, öz nitelik bilgilerinin güncellenmesi ve incelenmesi gibi amaçlarla kullanılırlar. 8.4. Görev Yönetimi : Bir bilgisayar sisteminde görev, işletim sisteminin yönetim açısından taban aldığı en küçük varlıktır. Sistemden hizmet almak amacıyla tanımlanan işler sunuş aşamasında bir ya da daha çok görev 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 duruma geçişler hazır görevler kuyruğundan merkezi işlem birimine anahtarlanma işlemleri görev yönetimi kapsamında ele alınır. Görev yöneti minde n görev yöneti ci olarak adland ırılan işletim sistem i çekirdek katmanında yer alan özel bir yordam sorumludur. Görev yönetici görevlerin, giriş-çıkış ve zaman uyumlama işlemlerinde bulunmaları, sonlanmaları gibi görevlerin ana işlem birimini bırakmasını gerektiren ya da yeni bir görevin sisteme sunulması giriş-çıkış ve zaman uyumlama istemlerinin yerine getirilmesi, gerçek zaman saati vuruları (kesmeler) gibi hazır görevler kuyruğuna yeni bir görevin eklenmesini gerektiren olaylar sonucunda merkezi işlem birimine anahtarlanacak kendisinden sonra işletilecek görevin belirlenmesini sağlar. Görev yöneticiden sonra merkezi işlem birimini kullanacak görev ya görev yöneticisinin çalışabilmesi için işletimi kesilen görev ya da 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 ermesiyle 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 merkezi işlem birimini kullanacağı değerlendirmesinin yeniden yapılmasını gerektirecektir. Görev yönetici özetle hazır görevler kuyruğunun düzenlenmesi ve düzenleme sonucu kuyruk başında yer alan görevin merkezi işlem birimine anahtarlanmasını gerçekleştiren işletim sistemi kesimidir. 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 yani görevler eklenmesi işletim sisteminin diğer yönetim kesimleri tarafından sağlanır. Kullanıcılar olmayı istedikleri hizmetleri iş tanımlarına dönüştürerek ya etkileşimli ya da toplu işlem düzeyinde bilgisayar sistemine sunarlar. Sunulan işler görev tanımları yapılarak görevlere dönüştürülürler. Oluşturulan bu görevler belirli sıklıkta hazır görevler kuyruğuna bağlanarak işletilmek üzere görev yöneticinin yönetimine bırakılır. İş Yönetimi : Toplu işlem dengesiz kaynak talebinde bulunan, örneğin salt merkezi işlem birimini kullanan ya da giriş/çıkış kanallarına aşırı yükleyen düşük öncelikli işlerin ele alındığı bir işletim düzenidir. Bu düzen daha çok öncelikli işlere ilişkin etkinliklerin azaldığı işletim dönemlerinde sistem kaynaklarının kullanılır tutulmasını gözetir. 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. Bilgisayar sisteminde 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öreve dönüştürülüp, hazır görevler kuyruğuna eklenir. İş yönetici, toplu işlem kuyruğunun düzenlenmesinden ve dönem dönem bu kuyruğun başındaki işleri görevlere dönüştürerek hazır görevler kuyruğuna aktarmaktan sorumlu bir işletim sistemi kesimidir. İş yönetimi merkezi işlem birimi kullanımı ağırlıklı işlerde, 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ı bunu bağlıdır. Bu amaçla iş yönetici merkezi 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ı arttırır. Bunun tersi olduğu durumda ise kuyruktaki görev sayısını düşük tutmaya çalışır. Buradan iş yöneticinin görev yönetimi girdilerini düzenleyen bir kesim olduğu söylenebilir. 8.5. Yönetim Algoritmaları : İşletim sistemlerinin kullandığı yönetim algoritmaları genel hatlarıyla hem uzun dönemli (iş yönetimi) hem de kısa dönemli (görev yönetimi), hem de orta dönemli planlamaların tümü için kullanılabilir. İş yönetimi toplu işlem kuyruğunun, görev yönetimi hazır görevler kuyruğunun, orta dönemli planlama kesimi ise bellekte yer bekler kuyruğunun düzenlenmesinden sorumludur. Bilindiği üzere işletim sisteminin görev yönetimi kesimi merkezi 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ı denildiğinde bir yandan sistemden yararlanan kullanıcılara verilen hizmetin niteliğini belirleyen iş tamamlanma süresi (toplu işlemde), yanıt süresi (etkileşimli işlemlerde) gibi kıstaslar göz önünde tutulurken diğer yandan bu kıstaslarla kimi zaman çalışabilen sistem kaynaklarının verimli kullanımı akla gelebilir. Sistem başarımını gözeten görev yönetimi bölümü bu bağlamda merkezi işlem biriminin verimli kullanımı, birim sürede sonlandırılan iş sayısı, ortalama iş tamamlama süresi, bekleme süresi ve 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. Merkezi işlem biriminin verimli kullanılmasından, bu kaynağın mümkün olduğunca çalışır durumda tutulmasından anlaşılır. Merkezi işlem birimi çalıştığı sürelerin dışında baştadır. Merkezi işlem biriminin çalışıyor olması makine komutlarını işletiyor olmasıdır. Örneğin bir koşulun oluşması beklenirken, işletilen sınama döngü komutları merkezi işlem biriminin çalışır tutan komutlardır. Merkezi işlem biriminin çalışır olması tek başına üretilen hizmetin tam bir ölçütü olamayacağından birim sürede tamamlanan ortalama iş sayısı sistem başarımının bir ölçüsüdür. Yönetim algoritmalarının kullanıldığı algoritmalar bu parametreye dayalı olarak öngörülebilir. Birim sürede tamamlanan iş sayısı yerine işlerin ortalama tamamlama süreleri de sistem başarımının bir ölçüsüdür. İş tamamlanma süresi işlerin sisteme sunuluşlarından bitiş sürelerine kadar geçen ortalama süreçtir. İş tamamlama süresi, işletim ve bekleme sürelerinin toplamıdır. Bu toplamın yanı sıra sistem kaynaklarını diğer işlerle paylaşmaktan kaynaklanan bekleme süresinin kendisi de yönetimin dayanabileceği bir kıstas ve sistem başarım ölçüsüdür. Görev yönetimi kapsamında bu kıstaslardan bir ya da birkaçını birlikte gözeten değişik yönetim algoritmaları kullanılabilir. Bu algoritmalar şunlardır : a) İlk gelen önce algoritması b) En kısa işletim süresi kalan önce c) Öncelik tabanlı d) Zaman dilimli e) Çok kuyruklu a) İlk Gelen Önce Algoritması : İlk gelen önce algoritması, 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. b) En Kısa İşletim Süresi Kalan Önce Algoritması : Bu algoritmada görevlerin merkezi 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 biran önce sistemden çıkması ve bu yolla en kısa ortalama bekleme süresinin elde edilmesi amaçlanır. c) Öncelik Tabanlı Algoritma : Yukarıda açıklanan algoritmaların genişletilmiş 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örev öncelikleri merkezi işlem birimini 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ş biçimine dayalı olarak belirlenir. Bu algoritmaya göre işlemciye yeni bir görev anahtarlanacağı zaman en yüksek önceliğe sahip görev seçilir. d) Zaman Dilimli Algoritma : Zaman dilimli görev yönetiminde görevler eşit uzunluktaki zaman dilimlerinde merkezi işlem birimine sırayla anahtarlanırlar. Örneğin her 5 milisaniyede her gelen saat uyarılarıyla işlemciye anahtarlanan görev yönetici çalışmakta olan görevi hazır görevler kuyruğunun sonuna ekleyerek kuyruk başındaki görevi de işlemciye anahtarlar. e) Çok Kuyruklu Algoritma : Bir bilgisayar sisteminde işletime alınan görevler çok değişik niteliklerde olabilir. 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 işlemciye anahtarlanması gereken çok öncelikli sistem görevleri de bulunur. Bu görevlerin hepsini aynı hazır görevler kuyruğunda bağlamak ve bunların tümüne ayrı yöntem algoritmasını uygulamak tüm görevler için uygun olmayabilir. Bu nedenle değişik yönetim algoritmalarının olumlu yönlerini biraraya getirerek ve sakıncalarını azaltarak çok uyruklu yönetim algoritması kullanılır. Bu algoritmada görevler ortak bir hazır görevler kuyruğa, yerine getirilen türüne göre ayrı kuyruklara bağlanırlar. Ortaya çıkan birden çok kuyruğun her biri için bu algoritmalardan en uygunu seçilir. ANA BELLEK YÖNETİMİ 9.1. Ana Bellek Yönetim Yöntemleri Belleği yöneten işletim sistemi bölümüne bellek yöneticisi denir. Görevi, belleğin hangi bölümünün izi kullanıyor veya hangisi kullanılmıyor onları saklamak (tutmak), belleği, ona ihtiyaç olduğu zaman işlemlere ayırmak, işlemler yapıldığı zaman onun eski haline bırakmak ve bellek bütün işlemleri tutmak için yeterli derecede büyük olmadığı zaman ona bellek ve disk arasındaki değiş tokuş etmeyi (swapping) yönetmektedir. Mümkün olan en basit bellek yönetimi planı, bellekte bir işleme sahip olmak ve bu işlemi belleğin tümünü kullanmasına izin vermektir. Kullanıcı diskten veya teypten bir programla bütün belleği yükler ve bu bütün makine üzerinde olur. Basit mikrobilgisayarlarda kullanılan alışılagelmiş teknik, şekil 1’de gösterilmiştir. Bellek, işletim sistemi ve tek bir kullanıcı işi arasında bölünmüştür. İşletim sistemi şekil 1 (a)’da gösterildiği gibi RAM’in altında olabilir, veya şekil 1 (b)’de gösterildiği gibi belleğin en üstünde ROM’da olabilir, veya aygıt sürücüsü bir ROM’da belleğin üstünde olabilir. İşletim sisteminin kalanı şekil 1 (c)’de gösterildiği gibi RAM’ da belleğin altında olabilir. IBM PC örneğin, 1 MB adres boşluğunun 8 bloğunun en yükseğine yerleşmiş ROM aygıt sürücüsü ile, şekil 1 (c) modelini kullanır. Sistem bu yolda organize edildiği zaman, bir zamanda sadece bir iş çalışabilir. Kullanıcı terminalde bir komut yazar, işletim sistemi istenilen programı diskten belleğe yükler ve onu işletir. İş tamamlandığı zaman işletim sistemi terminalde prompt karakterini yazar ve sonra terminalden başka iş yüklemesini, ilkinin üzerine yazarak, bir komut bekler. Ana bellek yönetim yöntemlerinin çeşitleri, bilgisayar tiplerinin; ana bellek sığası, teknolojisi, çoklu programlamaya uyumluluğu ve ana bellek yazılımlarının düzenlenme gücüne bağlı olarak değişir. İşletim sistemlerinde, ana bellek yönetimi için değişik yöntemler kullanır. Sistem başarımını yükseltmek için ödenen bedelle orantılı olarak bu yöntemler değişik yetkinlik ve dolayısıyla karmaşıklık düzeyinde olabilirler. Bu yöntemler; · Tek ve bitişken bellek yönetimi · Değişmez bölümlü bellek yönetimi · Değişken bölümlü bellek yönetimi · Yeri değişir bölümlü bellek yönetimi · Sayfalı bellek yönetimi · Bölümlü bellek yönetimi · Bölümlü Sayfalı Bellek Yönetimi Yukarıda verilen sıralamada, her yöntem, kendinden bir önce gelen yöntem önemli bir sakıncasını ortadan kaldırmak üzere düşünülmüş ve tanımlanmıştır. Ana belleğin yönetiminde kullanılan yöntemler, çeşitli kıstaslara dayalı olarak gruplandırılır. Programlara atanan alanların, işletim sırasında yer değiştirmesine imkan sağlanıp sağlanmasına göre bu yöntemler: · Durgun yöntemler · Devingen Yöntemler olarak iki grupta düşünülürler. Bu bağlamda, yukarıda sıralanan ilk üç yöntemin birinci gruba diğerleri ise ikinci gruba girer. Devingen yöntemler kendi aralarında programların mantıksal adres evrenlerinin bitişken bir bütün ya da sayfa, kesim gibi parçalarla ele almalarına göre iki değişik alt gruba ayrılırlar. Buna göre; · Bitişken bellek yönetimi · Parçalı bellek yönetimi alt yöntem gruplarından söz edilir. İlk dört yöntem bitişken bellek yönetimi grubuna girerken diğerleri parçalı bellek yönetimleri olarak bilinirler. Parçalı bellek yönetimleri de kendi içlerinde; · Gerçek bellek yönetimi · Görüntü (sanal) bellek yönetimi olarak, iki alt grupta toplanırlar. Gerçek bellek yönetimleri kapsamında bir program, tümü ana belleğe yüklenmeden işletime alınamaz. Hem bu koşulun kırılması, hem de programlara ana belleğin fiziksel boyunu aşma olanağının verilmesi, görüntü bellek yöntemleri ile sağlanır. 9.2. Tek ve Bitişken Bellek Yönetimi : Tek ve bitişken bellek yönetiminde ana bellek, işletim sisteminin yüklendiği kesim dışında tümüyle tek bir işe atanır. Ana bellekte aynı anda tek bir programın yer alıyor olması tek iş düzenini, doğal bir sonuç olarak ortaya çıkarır. Tek ve bitişken bellek yönetiminin uygulandığı sistemlerde, aslında bellek yönetiminin varlığından da pek söz edilemez. Tek ve bitişken bellek yönetiminde ana bellek, aynı anda, işletim sitemi ile tek bir kullanıcı programı tarafından paylaşılır. Çoğu kez, işletim sisteminin ana belleği paylaştığı kullanıcı programı tarafından bozulmasını önlemek üzere kimi önlemler alınır. Bunu gerçekleştirmek için kullanıcı programına, ana bellekte erişebileceği alanın ataması yapılır. Adresleme süreci içinde de, programın kendine atanan sınırlar içinde kalıp kalmadığı denetlenir. Bir sonraki sayfadaki şekilde görüldüğü gibi ana bellek düz bir sözcük dizisi olarak düşünüldüğünde, işletim sistemi, genellikle bu dizinin alt (adres) kesimine yüklenir. Bu durumda kullanıcı programına belli bir sınır değerinin altında adresleme yapma yasağı getirilir. Bunun için merkezi işlem birimi içinde sınır yazmacı olarak adlandırılan bir yazmaç öngörülür. Kullanıcı programı işletime alınmadan önce, kullanıcı alanı başlangıç adresi bu yazmaç içine yüklenir. İşletim boyunca sınır yazmacının çıkışları, erişilen sözcüklerin adresleriyle sürekli karşılaştırılarak kullanıcı programının, işletim sistemi alanına erişimi denetim altında tutulur. Böyle bir durum ortaya çıktığında, kesilmeler işlenirken sözü edilen bir iç kesilme ile kullanıcı programının işletimi sonlandırılıp işletim sistemine geri dönülür. Açıklanan bu denetim düzeneği bellek koruma düzeneği olarak bilinir. Tek ve bitişken bellek yönetimi, tek iş düzeni ve tek görevli işlem ortamlarında kullanılabilen, bu nedenle de, artık kişisel bilgisayar sistemleri için bile yetersiz kalan bir bellek yönetimi A n a B e le k İş le tim S is te m i K u lla n ıc ı P ro g ra m ı yöntemin biçimidir. Bu A n a İş le m B irim A d re s Y a z m a c ı İş le m iz n i B o ş A la n S ın ır Y a z m a c ı K a r ş ıla ş t ır ıc ı K o r u m a İç K e s ilm e s i D e n e t im B ir im i dezavantajları; 1. Gelen işlerin tümü ana belleğin ön kısmında yürütülmeye hazır bekleme durumunda olmaları, kalan kısmın boş beklemesine neden olması kullanıcı alanının tümünün kullanılmaması anlamına gelir. 2. İş hacmi ana bellek hacmine bağlı olur. 3. Bir işin başlamasından bitimine kadar bilgisayar kaynaklarının her hangi bir iş yapmadan çalışır halde kalır. 9.3. Değişmez bölümlü bellek yönetimi Bu yöntemde ana bellek, işletim sistemi alanı ve kullanıcı alanı olmak üzere salt iki bölüme ayrılmak yerine, işletim sistemi ile birden çok kullanıcı programı arasında paylaşılır. Bölümlenmiş bellek yönetimine geçmeden önce bilgisayarda çoklu programlamanın bilinmesi gerekir. Çoklu programlama Çoklu programlama, bir bilgisayarın bir seferde birden çok işi ele alabilme yeteneğidir. Çoklu programlamayla yapılan işlemlerle işin zamanı kısaltılmış olur ve bellekteki alanlar tam kapasiteyle çalışabilir. Bilgisayar belleğinden en fazla verimi almak için bellek birden fazla program için bölümlenir. Çoklu programlamada amaç merkezi işlem birimini mümkün olduğu kadar meşgul etmektir. Yani merkezi işlem biriminin bekleme süresini azaltmaktır. Merkezi işlem birimi bellekte bir takım işler yaptıktan sonra verileri diske yazmak için veya başlangıçta diskten okuma için uzun süre beklemek zorunda oluşu MİB’in başka işler için kullanılabileceğini gösterir. A görevi VDU1 MİB DİSK MİB VDU1 B görevi VDU2 MİB DİSK VDU2 MİB Zaman ® Şekil 1 - (a) Gerek duyulan sıralı işlemler olarak iki görev. Kaynak Etkinlik VDU1 A görevi A görevi VDU2 B görevi B görevi DİSK MİB A görevi A görevi B görevi B görevi A görevi B görevi Şekil 1 - (b) İki görevin zamanlanması Şekil 1’de A ve B adlı iki görev ile çoklu programlamanın avantajlarını göstermektedir. Bu görevlerin yürütülmesi sırasında bir grup farklı işin (örneğin VDU giriş çıkış, disk erişimi vs.) yerine getirilmesine ihtiyaç duyar. Bu iki görevin her biri tarafından yapılan işlerin sırası yürütüldükçe, şekil 1 - (a)’da verilmiştir. Eğer B başlatılmadan önce, A’nın tamamlanıncaya kadar çalışmasına izin verilseydi, merkezi işlem birimi (MİB) ile ilgisi olamayan işler yapılırken değerli bir işlem zamanı boşa gidecekti. Şekil 1 - (b)’de kaynakların daha verimli bir kullanımını sağlamak için görevlerin nasıl zamanlandırılacağı gösterilmiştir. Kutucuklar, verilen bir kaynağın belli bir görev için ayrıldığı zaman periyodunu gösterir. Örneğin A görevi merkezi işlem birimini ilk defa kullandıktan sonra, diske erişir. Diske, A görevi tarafından erişilirken, B görevi işlemcinin kontrolünü alabilir. Şekil 2 - (a) Her bölme için ayrı giriş kuyruklu sabit bellek bölümleri . (b) Tek giriş kuyruklu sabit bellek bölümleri Çokulu giriş Kuyruğu Bölüm 4 Bölüm 4 700 K Tekli giriş Kuyruğu Bölüm 3 Bölüm 3 400 K Bölüm 2 Bölüm 1 İşletim sistemi Bölüm 2 200 K 100 K 0 (a) Bölüm 1 İşletim sistemi (b) Değişmez bölümlü bellek yönetiminde ana bellek, işletim sistemi ve kullanıcı alanları olmak üzere bitişken, irili ufaklı, birden çok bölüm olarak düzenlenir. En kolay yol basitçe belleği n bölümlere (eşit olamayacak şekilde) ayırmaktır. Sisteme bir iş geldiği zaman, onu tutmak için yeterli derecede geniş olan en küçük bölüm için sıraya konulur. Şekil 2 - (a)’da sabit bölümlerin ve giriş kuyruklarının görünüşleri gösterilmektedir. İçeri gelen işler büyüklüğüne göre kuyruklarda tutulması boş bölüm olsa dahi sırada bekler. Şekil 2 - (b)’de alternatif organizasyonda gösterildiği gibi tek bir kuyruğu korumaktır. Ne zaman bir bölme serbest olursa, kuyruğun önüne en yakın olan ve en uygun iş boş bölmeye yüklenir ve çalıştırılır. Şekil 3 Değişmez - Bölümlü Bellek Yönetimi A n a B e lle k A n a İ ş le m B ir im i İş le tim S is te m i T aban Y azm acı T avan Y azm acı A d res Y azm acı 1 . B ö lü m 2 . B ö lü m 3 . B ö lü m K a r ş ıla ş tır ıc ı İş A la n ı B e lle k K o r u m a İç İş le m İz n i B o ş A la n 4 . B ö lü m K e s ilm e s i D e n e tim B ir im i Şekil 3 - de bir iş, işletime alınmadan önce, ana bellekte kendisine, boyuyla uyumlu bir bölüm atanır. İş, kendisine atanan bu bölümü, işletimi başlamadan önce belirlenen boylarını sistem işletime kapanana değin korurlar. Başka bir deyişle ana belleğin düzeni, işletimin başındaki görünümünü, işletim sürecinde korur. Bu görünüm gerektiğinde sistem işletmeni tarafından, işletimin başında yeniden düzenlenebilir. Bu düzenleme bölümlerin boyları ve sayıları değiştirilerek yapılır. Tek ve bitişken bellek yönetiminde olduğu gibi, bu yöntemde de, kullanıcı programlarının işletim sistemine ayrılan alanı bozmalarının engellenmesi gereklidir. Ancak burada bir de, kullanıcı programlarının birbirlerine karşı korunması gerekir. Bu amaçla, merkezi işlem biriminde bir taban, bir de tavan yazmacı öngörülür. Bu yazmaçlar, çok iş düzeni çerçevesinde, MİB’i kullanan işin, ana belleğe erişimde aşmaması gereken alt ve üst adres değerlerini tutarlar. Her bellek erişim döngüsünde, erişilen bellek sözcük adresi bu iki değerle karşılaştırılarak taşma denetlenir. Taşma durumunda, bir önceki yöntemde olduğu gibi, ilgili işin işletimi sonlandırılır. Taban ve tavan olarak iki sınır yazmacının kullanılması, bu yönteme çift yönlü koruma imkanı sağlar. MİB’in her yeni göreve (işe) anahtarlanışında bu yazmaçlar, işletim sistemi tarafından, ilgili işin taban ve tavan değerleriyle günlenmek zorundadır. 9.4. Değişken bölümlü bellek yönetimi Bu yöntemin temel ilkesi, bölümlerin, konum ve boyları itibarıyla, işlerin görevlere dönüştürülüp sisteme sunuluşları aşamasında, devingen olarak yaratılmasıdır. Bu yöntemle bir görev hazır görevler kuyruğuna ilk kez bağlanacağı zaman, gerektirdiği büyüklükte bir alanın, ana bellekte kullanılmayan boş alanlar içinde bulunması ve yeni bir bölüm olarak bölüm tanım çizelgesine katılması gerçekleşmiştir. Görev iskeleti bu bölümle ilgili (bölüm başlangıç adresi, boyu gibi) değerlerle günlenir. Bu yöntemde görevlere atanan bölümlerin yanı sıra, bu bölümler arasında kalan boş alanların da izlenmesi gereklidir. Bu nedenle, bölüm tanım çizelgesinin yanı sıra, bir de boş alan çizelgesi tutulur. Bölüm tanım çizelgesi bölümlere atanan bölümlerin bilgilerini, boş alan çizelgesi de bölümler arasında boş bitişken alanlara ilişkin konum, boy gibi bilgileri tutar (Şekil 1). Yeni bir görev hazır görevler kuyruğuna bağlanacağı zaman bellek yönetici devreye girer. Boş alan çizelgesi taranarak görevin gerektirdiği büyüklükte boş bir alan bulunmaya çalışılır. Böyle bir alan bulunduğunda, bölüm tanım çizelgesi bu alanın başlangıç adresiyle günlenir. Bu alandan arda kalan kesimin başlangıç adresi ise, boş alan çizelgesindeki yeni boş alan başlangıç adresini oluşturur. Bölüm Böl. Baş. Adresi 0 1 2 3 4 5 6 0000H 80000H 90000H F0000H Boş Bölüm Ana Durum Alan Boyu Bellek Boyu 128 K 0000H 256 B 20000H 256 64 K 256 K 80000H B B 64 K 90000H Boş Alan Baş.Adresi 20000H D0000H - 7 8 9 - - B B B F0000H FFFFFH - Şekil 1 - a) Değişken Bölümlü Bellek Yönetimi Bölüm Böl. Baş. Adresi 0 1 2 3 4 5 6 7 8 9 0000H 20000H 80000H 90000H F0000H - Boş Bölüm Ana Durum Alan Boyu Bellek Boyu 128 K 20000H 128 128 K 40000H 256 64 K 256 K 80000H B 90000H B 64 K 90000H B B F0000H B FFFFFH - Boş Alan Baş.Adresi 40000H D0000H - Şekil 1 - b) Değişken Bölümlü Bellek Yönetimi Şekil 1 - (a)’da, sistemde 3 değişik görevin çalıştığı örnek bir durum gösterilmiştir. Buna göre toplam fiziksel sığası 1 MB olan ana bellekte işletim sistemine ilişkin 128 KB’lık bölümün yanı sıra, toplam sığaları (64+256+64) 384 KB olan, bu 3 göreve ilişkin 3 değişik bölüm yer almıştır. İşletim sistemi ve bölümlerden arda kalan (1024512) 512 KB’lık boş bellek kesimi ise, 256 KB’lık iki bitişken alandan oluşmuştur. 0 numaralı bölümün işletim sistemine; 2,3 ve 6 numaralı bölümlerin ise görevlere atandığı varsayılmıştır. Bu aşamada, 128 KB’lık yere ihtiyaç duyan yeni bir görevin sisteme sunulduğu düşünülmüştür. Şekil 1 (b)’de boş alan çizelgesi taranarak ilk 256 KB’lık boş alanın ilk 128 Kb’lık kesiminin, 1 numaralı bölüm olarak bu yeni göreve atandığı; bunun sonucunda, bölüm tanım çizelgesinin boş işaretli 1 numaralı satırı ile boş alan çizelgesinin kullanılan boş alana ilişkin ilk satırının yeni değerle günlendiği gösterilmiştir. Değişken bölümlü bellek yönetiminde yeni bir görev hazır görevler kuyruğuna bağlanacağı zaman, bu görevin gerektirdiği yer, boş alan çizelgesinden seçilirken çeşitli algoritmalar kullanılır. Bunlar genelde 3 tanedir. İlk ikisi, daha önce değişmez bölümlü bellek yönetimini kapsamında açıklanan ve göreve, ana bellek alanı olarak ya ilk uyan ya da en uygun boş alanın atanmasını sağlayan algoritmalardır. Boş alan çizelgesinin düzenleniş biçimi bunlardan hangisinin kullanılacağını belirler. Örneğin bu çizelge boy sırasında tutuluyorsa kullanılan algoritma en uygun alan (best fit) algoritmasıdır. Şekil 1’de boş alan çizelgesi boy sırasında tutuluyor olarak gösterilmiştir. İlk uyan (first fit) algoritmasından en uygun alan algoritmasına geçiş, belleğin parçalanma problemini hafifletmeyi amaçlar. Kimi durumlarda görevlere, gereksedikleri yere karşılık en büyük boş alanı atama yaklaşımı da kullanılır. Bu yolla, zaten engellenemeyen parçalanmanın diğer görevler için kullanılabilir büyüklükte bitişken boş parçalar yaratması amaçlanır. Bu algoritma en büyük alan (worst fit) atama algoritması olarak bilinir. 9.5. Yeri Değişir Bölümlü Bellek Yönetimi Yeri değişir bölümlü bellek yönetimi kapsamında, mantıksal adreslerden fiziksel adreslere geçişi işletim aşamasına taşıyabilmek amacıyla, MİB’e yer değiştirme taban yazmacı olarak adlandırılan özgün bir yazmaç eklenir. Yeri değişir amaç programlar ana bellekte kendilerine atanan bölümlere oldukları gibi hiçbir değişiklik yapılmadan yüklenirler. Başka bir deyişle, konuma duyarlı öğeler yükleme sonrası program başına (sıfıra) göreli adres değerlerini içermeyi sürdürürler. Her bellek erişim döngüsünde, bu adres değerleri, yer değiştirme taban yazmacı içeriğine eklenerek erişilen fiziksel adresler elde edilir. Bir görev ana işlem birimine anahtarlanacağı zaman yer değiştirme taban yazmacının içeriği, ilgili bölüm başlangıç adresiyle günlenir. Böylece işletim sırasında program başına göreli içerikler, bölüm başlangıç adreslerine eklenerek bellek başına göreli saltık değerler elde edilmiş olur. Program başına göreli mantıksal adreslerden fiziksel adreslere geçiş adres dönüştürme işlemi olarak bilinir. Yeri değişir bölümlü bellek yönetiminde bellekte parçalanmayı önlemek üzere bitiştirme işlemi, ya her görevin işletiminin bitiminde ya da işletime sunulan işlere bellekte yer bulunamadığı durumlarda gündeme gelebilir. Bitiştirme işlemlerini her işletim bitişinde yinelemek, ana belleği çok verimli kullanmayı amaçlarken işletimi sık sık durdurarak sistem hızının ve kullanılabilirliğinin aşırı düşmesine neden olur. Bitiştirme işlemlerine, ana bellekte yer ihtiyacı oluştukça başvurmak daha anlamlıdır. Bu ihtiyacın ortaya çıkışı bellek yöneticisi tarafından belirlenir. Diske taşıma (Swapping) : Bazı durumlarda bitiştirme işlemleri de bellekte gerekli büyüklükte boş bitişken alan yaratmak için yeterli olmaz. Sisteme sunulan iş, o an sisteme işletimde olan işlerden daha öncelikli ise, görev tanımlarını yaparak hemen işletime alınmasını gerektirir. Kimi az öncelikli görevlerin, işletimleri sonradan tamamlanmak üzere geçici olarak diske taşınması boş bellek alanı oluşturmak için başvurulan bir yol olabilir. Bu yolla açılan boş bellek alanları yeni görevlerin tanımlanabilmesine ve öncelikli işlerin çalışmasına olanak sağlar. İşletimi tamamlanmamış bir görevin, daha öncelikli görevlere ana bellekte yer açmak üzere, geçici olarak diskte, bu amaçla öngörülen alanlara taşınmasına diske taşıma denir. Ana bellekte yer açmak için diske taşınacak görevin belirlenmesi gerekir. Bu belirleme doğal olarak öncelikle, değişik bekleme kuyrukları üzerinde bekleyen görevler arasından yapılır. Bu durumda, gerekli yeri sağlayabilen en düşük öncelikli görev bellekten çıkarılacak görev olarak seçilir. Diske taşınan görev yeniden ana belleğe döneceği zaman, kendisine atanan alana taşınmak zorundadır. Bellek yönetim yöntemlerinin hepsinde bu tip değişme olayı gerçekleşir. Anacak bu işlem zaman paylaşımı kavramıyla çokça ortaya çıkabilir. 9.6. Sayfalı Bellek Yönetimi Sayfalı bellek yönetiminde görevlerin mantıksal adres evrenleri, birbirini izleyen, eşit uzunlukta parçalardan oluşur. Bu parçalar program sayfası olarak adlandırılır. Kullanıcı gerçek bellek alanını gizleyen ve oldukça büyük bir ana bellek izlenimi veren durumla (Sanal Bellek) karşı karşıyadır. Sanal bellek alanı ve gerçek bellek alanı için ayrı adresler kullanılır. Bellek adresleri gerçek (reel) adres ve program tarafından üretilen adreslerde sanal adres olarak adlandırılırlar. Sanal sayfa adreslerini gerçek sayfa adresine dönüştürmek için 3 temel donanım tekniği kullanılır. Bunlar; direk haritalama, birleşik haritalama ve küme-birleşik haritalama teknikleridir. Gerçek ve sanal bellek alanlarının ikisi de sayfalar olarak beliren kelime bloklarına bölünmüşlerdir. Tüm sayfalar aynı boyutta olup dizayna bağlı olarak 64 byte ile 4 KB arasında değişebilir. Her bir sanal ve reel bellek adresi “sayfa alanı” diye ve sayfa alanı içerisinde “satır alanı” diye bir kelimeye bölünür. İşlemci tüm belleğin direk olarak adreslenebileceğini kabullenen program bağımlı sanal adresler üretir. Her hangi bir anda, her bir sanal adres ya ana bellekte yada ikincil bellekte karşılığı olan bir adrese karşılık gelir ve “sayfa tabloları” sanal ve reel sayfalar arasındaki karşılıkları kaydetmek amacıyla tutulurlar. Yandaki şekilde ana bellekte 32 ve ikincil bellekte 192 sayfalı bir sistemin fotoğrafını (şeklini) göstermekte dir (Yeni sistemlerde daha fazla sayfalar olabilir fakat kavram aynıdır). İkincil bellek sayfa adresleri 32’ den başlayarak gösterilmiştir. Sayfa tabloları sistemde sayfaların olası dağılımıyla birlikte gösterilmiştir. Sanal sayfaların reel sayfalarla eşlenmesinde bazı sanal sayfalar eşlenmemiştir (yani kullanılmamıştır). 31 nolu reel sayfa, yani ana bellekteki son sayfa, şu an boştur. Örneğin 3 nolu sanal sayfa işlemci tarafından işlenmiş olsun önce donanım harekete geçer ve söz konusu sayfanın ana bellekte olup olmadığını kontrol eder. Donanım sayfanın o an 1 nolu reel sayfada bulunduğunu ortaya çıkarır ve dolayısıyla sayfaya erişebilir. Fakat 7 nolu sanal sayfa işlemci tarafından istenirse arama adı geçen sayfanın o an ana bellekte bulunmadığını gösterir ve dolayısıyla yazılım rutini sayfanın yerini ikincil bellekte bulmak için harekete geçer. Bu durumda sayfa ikincil bellekte 34 nolu sayfada bulunur. Sayfa ana bellekteki 31 numaralı boş (reel) sayfaya transfer edilebilir ve bundan sonra bu sayfaya erişebilir. Bu aşamadan sonra şu an bellek doludur. Eğer ikincil bellekteki diğer bir sayfaya ihtiyaç duyulursa bu yeni sayfa ana belleğe getirilmeden önce ana bellekte var olan bir sayfa ikincil belleğe gönderilmelidir. Eğer ikincil belleğe gönderilecek o sayfanın geçerli bir kopyası ikincil bellekte zaten varsa buna gerek yoktur. Bundan sonra ana bellek üzerine kolayca yeni bilgi yazılabilir. Sanal sayfa numarasını ona karşılık gelen reel sayfa numarasına dönüştüren ve daha sonra üzerinde duracağımız birtakım olası yollar vardır. Buna ek olarak eğer gerekliyse ikincil bellekten gelecek sayfaya ana bellekte yer açmak için ana bellekten çıkarılacak bir sayfayı seçmek amacıyla bir “sayfa yer değiştirme algoritması” kullanılır. 9.6.1. Sayfa boyutu : Sayfanın boyutu çarpı TLB’nin (Dönüşüm Arama Tamponu) boyu TLB tarafından direk olarak işlenebilecek hafıza miktarını verir. Mesela sayfa boyutu 4 KB ve TLB’de 256 giriş var ise bellek kaplama alanı 1 MB olur. Sayfalama sistemlerinde farklı sayfa boyutları kullanılmıştır. En çok ortak kullanım için 4 KB sayfa boyutu kullanılır. 64 KB’lık sayfa kodlar için uygun olabilirken 512 KB büyük sayfa boyutları veriler için uygun olabilir. Çok büyük sayfa boyutu örneğin 4 MB’lık bir sayfa boyutu grafik uygulamalarına uyabilir. Intel Pentium işlemcilerde ya 4 KB’lık yada 4 MB’lık iki sayfa boyutu seçilebilir. Eğer küçük sayfa boyu seçilirse, sayfaların ana bellek ve disk bellek arasında transfer süreleri az olur ve değişik programlardan seçilmiş çok sayıda sayfa aynı anda bellekte bulunabilir. 9.6.2. Yer değiştirme algoritmaları : Başvurulan sayfa o an ana bellekte değilse yani geçerli sayfa girişi adres dönüştürücüde (hem TLB hem de ana bellek sayfa tablolarında) bulunmamışsa bir “sayfa hatası” oluşur. Bu oluştuğunda arzu edilen sayfa, disk bellek sayfa tabloları kullanılarak disket üzerinde bulunmalı ve ana bellekte yer yoksa ana bellekten çıkarılacak bir sayfa belirlenmelidir. Disk bellek/ana bellek veri transferleri oldukça yavaştır ve ayrı bir direk bellek erişim (DMA) kontrolörü veya I/O işlemcisi vasıtasıyla yapılır. Gelen sayfaya yer açmak için ana bellekten çıkarılacak sayfayı belirlemede kullanılabilecek çok değişik yer değiştirme algoritmaları vardır. Aşağıda isimleri verilen bu algoritmalar işletim sistemi ve ek donanım desteği ile kullanılır. · Rassal yer değiştirme Algoritması · İlk Giren İlk Çıkar yer değiştirme Algoritması · Saat Yer Değiştirme Algoritması · Son Zamanda En Az Kullanılan Yer Değiştirme Algoritması · Çalışma Kümesi yer değiştirme Algoritması Ana bellekte tutulan sayfa tanım çizelgesine yapılan ek erişimin süresini kısaltmak için bu çizelge ana bellekten daha hızlı olan ön bellekte tutulur. Sayfa tanım çizelgelerinin hızlı bellek birimleri üzerinde saklanması, bu çizelgelere yapılan ek erişimin, sıradan sayfalara yapılan erişiminden daha hızlı olmasını sağlar. 9.7. Kesimli Bellek Yönetimi Sayfalı bellek yönetiminde, programların mantıksal adres evrenlerini eşit uzunlukta sayfalara ayırmak ve bu sayfaları ana bellekte bitişken olma zorunluluğu bulunmayan fiziksel sayfalarla eşleştirmek ilkesi, görevlere atanacak bitişken bellek parçalarını küçülterek kullanılmayan en küçük parçayı bile değerlendirebilmeyi amaçlar. Görevlere atanacak bitişken bellek parçalarını küçültmenin bir yolu da program adres evrenlerini bölümlere ayırmaktır. Bölümlemenin amacı, programları bellekte organize ederek, işletim sisteminin programları ana ve disk bellekte yerleştirip, yetkisiz erişim/çalıştırmadan koruma sağlamaktır. Bellek hiyerarşisini otomatik bir yolla yönetmek için donanım güdüsüne sahip sayfalamanın amacından bu amaç farklıdır. Komple programların yeniden yerleştirilebilmesi için programlar bölümlerin içine yerleştirilmişlerdir. Bir bölüm ardışık yerleşimlerden oluşan bir bloktur. Her bölümün uzunluğu 0’dan izin verilen herhangi bir maksimum değere kadar olabilir. Programlar farklı boyutlarda olduklarından bölümlerde farklı boyutlarda olabilirler. Merkezi işlem birimi tarafından üretilen her bir adres, bir bölüm (segment) numarası ve o bölüm içindeki yerleşimden meydana gelir. Bölümler, programlar içinde, içerikleri yönünden mantıksal bütünlüğü bulunan parçalara verilen addır. Programlar, örneğin ana yordamın bulunduğu bölüm; alt yordamların bulunduğu bölüm; değişken, dizi, dizgi gibi, verilerin topluca tutulduğu bölüm gibi değişik türde bölümlerden oluşmuş biçimde düşünülebilir. Programları oluşturan bu bağımsız bölümlerin birbirleriyle bitişken olarak düşünülmeleri de gerekmez. Bölümlerden oluşan programlar içindeki adresler, sayfalama yöntemine benzer biçimde bölüm kimliği ve bölüm içi adres olarak, iki bileşenden oluşur. Sayfalı ve kesimli bellek yönetimleri birbirlerine çok benzerler. Ancak bu iki yönetim biçimi arasında önemli temel ayrımlar vardır; · Programların mantıksal adres evrenleri: sayfalı bellek yönetiminde eşit uzunlukta sayfalara, Bölümlü bellek yönetiminde ise değişik uzunlukta, mantıksal bütünlüğü taban alan bölümlere ayrılmaktadır. · Bölümlü bellek yönetiminde bölümler, sistem programcılarının programlarını oluştururken doğrudan kullandıkları, sayılarını ve adlarını özgürce tanımlayabildikleri, üst düzey kullanıcıların ise amaç programlarına, derleyiciler tarafından yerleştirilen, bu yolla programların mantıksal adres evrenlerini bölümler biçiminde düşünmeyi gerektiren nesnelerdir. Sayfalı bellek yönetiminde sayfa kavramı, her düzeyden kullanıcıya saydam bir kavramdır. Sayfalama, derleme aşamasında otomatik olarak yapılan, programın mantıksal adres evrenini mekanik biçimde eşit uzunluktaki parçalara bölen bir işlemdir. 9.7.1. Bölüm uzunluğu Farklı bölümler farklı uzunluğa sahip olabilirler. Bölümler genelde 64 KB uzunluğundadır. Bölüm içindeki her hücreyi göstermek için 2 Byte’lık tamsayılar kullanılır. Bu şekilde bölüm (segment) içindeki hücreleri adreslemek için kullanılan sayılara offset adı verilir. Programların belirli bir bölümün bitiminin ötesinde bir adrese başvurusunu engellemek için her bölümün uzunluğu bölüm tablo girişinde uzunluk alanlarında saklanmıştır. Eğer sanal adresteki offset değeri depolanan uzunluktan (sınır) büyükse, yani bölümün bitiminin ötesinde bir adrese başvuru yapılmışsa, genellikle sistem kesmesi formunda bir hata sinyali üretilir. Maksimum bölüm uzunluğu sistem içine dizayn edilir, yani uzunluk alanı belirli sayıda bitlere sahip olacaktır. Maksimum bölüm uzunlukları küçük adres alanlı ilk sistemler için 64 KB’dan 32 bit adres alanları için 4 GB’a kadar bir aralıktadır. Ana belleği yönetmek için işletim sistemi kullanılır ve kullanılmayan alanı listeler halinde tutar. Yeni bir program yüklenmeden önce işletim sistemi bu listeyi tarar ve boş alanları tespit eder. Bir sonraki sayfadaki şekilde görüldüğü gibi işletim sisteminin tutuğu bu tablo, programların neresinde olduğunu değil, yeni yüklenecek programların nereye yükleneceğini hesaplamak için de kullanılır. Başlangıç Adresi Uzunluk Durum 0 KB 16 KB Kullanılıyor 16 KB 8 KB Boş 24 KB 16 KB Kullanılıyor 40 KB 4 KB Boş 44 KB 12 KB Kullanılıyor 66 KB 10 KB Boş Şekil - İşletim Sistemi tarafından bölüm listesi Bölümleme çoğu işlem arasında programların veya verilerin paylaşımına izin verir. Bu işlemin bir örneği paylaşılmış kütüphanelerdir. Windows sistemlerini kullanan çalışma istasyonları hemen hemen her programda yeniden derlenen son derece büyük grafik kütüphanelerine sahiptirler. Bölümlenmiş bir sistemde grafik kütüphanesi bir bölüme (segmente) koyulabilir ve tüm işlemlerce kullanılabilir. Böylece her işin adres alanında bulunması ihtiyacı ortadan kaldırılmış olur. 9.8. Bölümlü sayfalı bellek yönetimi Her iki sisteminde avantajlarından kazanç sağlamak için bölümleme ve sayfalama birleştirilebilir ve genelde de birleştirilirler. Yani bölümlemenin mantıksal yapısıyla sayfalamanın ana ve disk bellek arasındaki donanım haritalaması birleştirilir. Sayfalama, yalnızca bölümleme sisteminin bellek dağıtım problemini basite indirger. Bölümlemenin ve sayfalama birleştirildiğinde ve mantıksal birimler olarak bölümler kavramı muhafaza edildiğinde bölümleme “ sembolik bölümleme” veya “bölümleme isimli uzay” olarak görülür. Her bölüm eş boyutlu birtakım sayfalara bölünür ve ana bellekle disk bellek arasında temel transfer birimi sayfa olur. Sadece bölümle metodunda olduğu gibi komple bölümü ana belleğe transfer etmek şart değildir, sadece ihtiyaç duyulan sayfalar transfer edilmelidir. DOSYA YÖNETİMİ DOSYA SİSTEMLERİ Dosya sistemlerine geçmeden önce, sabit disklerle ilgili bazı tanımlamaları bilmekte fayda var. Kafa (Head) : Sabit disklerde okuma/yazma işlemini yapan mekanik parça. Plaka (Plate) : Bilgilerin yazıldığı parça. Bir sabit disk, birden çok diskten oluşur. Üste üste gelmiş bu diskler plaka olarak adlandırılır. İz (Track) : Sabit diskte bulunan plakaların üzerinde gözle görülmeyecek eş merkezli daireler vardır. İşte bu dairesel çizgilere track (iz) denir. Sektör (Sector) : İz yapısının bölünmesiyle oluşan ve sabit disk üzerinde adreslenebilir en küçük alana denk gelen parçaya sektör adı verilir. Küme (Cluster) : Sektörler üzerinde tanımlanmış en küçük küme olarak tanımlanabilir. Normalde FAT 16, FAT 32 ve NTFS dosya sisteminde, hard diskteki bölümün kapasitesine göre formatlama sırasında standart olarak belirlenmiş boyutta kümeler oluşmaktadır. Cluster'ların boyutunu, cluster'ları kullanan dosya sistemi ve bölümün kapasitesi belirlenir. Ancak cluster'ların boyutu formatlama sırasında (/Z:n) parametresi ile elle de ayarlanabilir. Arayüz (Interface) : Sabit disklerin hangi ara birimi kullandığını belirtir. Şu anda, EIDE/ATAPI ya da SCSI arabirime sahip olan arabirimler kullanılmaktadır. RPM (Rotation Speed Moment) : Disklerin dakikadaki dönme hızlarını belirtir. Şu anda piyasada bulunan IDE sürücüler, 5400 rpm ve 7200 rpm hızlarındayken, SCSI sürücülerdeki diskin dönme hızı 10000, 15000 rpm hızlarında dolaşmaktadır. Veri Erişim Hızı (Data Access Time) : Sabit diskteki kafanın, bir veriye erişebilmesi için bir izden diğer bir ize geçerken kaydettiği zamandır. Kullanılan zaman birimi milisaniyedir. Bu süre ne kadar kısa olursa o kadar iyidir. Dosya Yerleşim Tablosu ( FAT ) : Bir diskte bulunan dosyalara ait bilgilerin kayıtlı olduğu alanları belirtmeye yarar. Bir başka deyişle FAT, bir diskin haritası gibidir. 10.1. Dosya Sistemleri FAT: Bu tarz dosya sistemleri File Allocation Table - Dosya Atama Tablosu - adli bir sistem kullanırlar. Bu sistemde partisyon her biri belli miktarda sektör içeren "cluster" isimli parçalara ayrılır ve hangi dosyaların bu cluster parçalarından hangilerine yerleştiği, hangi cluster parçalarının bos, hangilerinin dolu olduğu gibi bilgiler FAT üzerine yazılır. İşletim sistemi de herhangi bir dosyaya erişim yapmak istediğinde dosyayı bulmak için FAT üzerine yazılan bu bilgilerden faydalanır. FAT 16: DOS, Windows 3.1 ve OSR2 sürümü öncesi Windows 95 işletim sistemlerinin kullandığı dosya sistemidir. Eski bir dosya sistemi olduğundan dolayı bir takım eksikleri ve dezavantajları bulunmaktadır. Bunlardan ilki kök dizininin (root) sınırlandırılmış olmasıdır. FAT16 sisteminde açılıştaki primary bölüme ait root dizini, FAT tablosu ve partisyon boot sektörü cluster içinde yer almazlar ve sayısı belli olan sıralı sektörlerde tutulurlar. Bu sayının belli olması kök dizine yapılacak eklentilerin belli bir siniri olması sonucunu doğurur. Kısaca alt dizinleri istediğiniz kadar uzatabilmekle birlikte Birincisi FAT16 bölümlerdeki kök dizinde belli uzunlukta girişle sınırlandırabilirsiniz. İkincisi, FAT16 dosya sisteminde adresleme, adi üstünde 16 bit olduğundan adreslenebilen maksimum cluster sayısı 65525’tir ve bu cluster’larin maksimum boyutu 32KB olabilir (aslında cluster sayısı 65536 olmalıdır ama bazıları özel amaçlar için tutulur). Bu da bizi FAT16 kullanan bir disk ya da partisyonun 2GB’dan daha büyük olamayacağı sonucuna götürür. Üçüncüsü, FAT16 elindeki bos sabit disk ya da partisyon alanını bir şekilde elindeki bütün cluster’lara dağıtmak zorundadır. Bu nedenle sabit diskin boyutu büyümeye başladıkça cluster boyutu da büyür. Cluster’lar bölünemezler ve ancak tek bir dosya yahut dosya parçasını taşıyabilirler. FAT 32: Windows 95 OSR2, Windows 98, Windows 2000 ve Linux tarafından tanınıp kullanılabilen ve FAT16’dan daha gelişmiş bir dosya sistemidir. İlk olarak FAT32’de herhangi bir kök dizin sınırlaması yoktur. İkinci olarak FAT32, FAT16’daki 16 bit adresleme yöntemi yerine 32 bit adresleme yöntemi kullanır. Bu sayede herhangi bir disk ya da partisyon FAT32 altında 2 TerraByte (yaklaşık 2000 GB) uzunluğunda olabilir. Üçüncü olarak ise FAT32 cluster boyutlarını ufak tutarak bos alan israfını azaltır. FAT32 altında tek bir dosyanın erişebileceği maksimum boyut 4 GB ile sinirlidir. NTFS (NT File System): Windows NT ve devamı olan Windows 2000 tarafından desteklenen bir dosya sistemidir. NTFS, dosya konumlarını FAT sistemindeki gibi bir ana indeks olarak saklamakla birlikte (MFT, Master File Table) dosyanın yerleştiği konumları ve diğer bilgileri her cluster’in içinde ayrıca saklayarak daha güvenilir bir yapı sunar. Ancak bu arada oldukça geniş bir disk haritası oluşturur ve bu bilgiler önemli bir yer kapladığından dolayı 400MB’den ufak disk yahut partisyonlarda NTFS kullanılması önerilmez. NTFS, sunucu olarak görev yapan Windows NT ve Windows 2000 işletim sistemlerine ait bir dosya sistemi olmasının gerektirdiği ihtiyaçlar doğrultusunda daha çok disk güvenliği, stabilitesi ve performansıyla ilgili iyileştirmeler içerir ve özetle su artı özelliklere sahiptir: 1. Dosya konumlarıyla ilgili bilgileri cluster içlerinde de saklayarak daha güvenli bir dosya sistemi yapısı sunar. 2. Cluster boyutu partisyon boyutuyla sinirli değildir ve 512 byte değerine kadar ayarlanabilir. Bu da disk üzerinde dosyaların parçalanmasını azaltarak hem bos alanın verimli kullanılmasını, hem de özellikle yüksek kapasiteli sabit disklerde performans artışını beraberinde getirir. 3. Yaklaşık 16 GB’a kadar uzunlukta olan tek parça dosyaları destekler. 4. ACL (Access Control List, Erişim kontrol listesi) özelliği sayesinde sistem yöneticileri tarafından hangi kullanıcıların hangi dosyalara erişebileceği ile ilgili kısıtlamaların koyulabilmesini sağlar. 5. Bütünleşik dosya sıkıştırma özellikleri içerir. 6. Uzun dosya isimlerini ve Unicode kaynaklı dosya isimlerini destekler. Unicode, dosya isimlendirilmesi sırasında karakterlerin tanımlanması için ikilik sistemde kodlar kullanılmasını öngören bir standarttır. Bu standarda göre Unicode kullanılarak verilmiş olan dosya isimleri Unicode kullanabilen dosya sistemleri tarafından tam olarak nasıl hazırlanmışlarsa şekilde görünürler (örneğin Japonca yahut Arapça gibi). NTFS dosya sistemi kullanan Windows NT ve Windows 2000 sürümleri FAT sürücüleri görebilir ve bu sürücülerdeki dosyaları okuyabilirler (Windows NT FAT16’yi, Windows 2000 FAT16 ve FAT32’yi görür). Ancak FAT kullanan Windows 95, 98 ve DOS gibi işletim sistemleri NTFS bölümlerini göremezler, dolayısıyla dosya sistemi NTFS olan disk yahut partisyonlara ait verileri okuyamazlar. Bu nedenle sisteminizde örneğin FAT32 altına kurulmuş bir Windows 98 ve NTFS partisyona kurulmuş olan bir Windows 2000 varsa Windows 2000 FAT32 partisyona kurulu olan Windows 98’e ait dosyaları görebildiği ve bu sürücüye bir isim verebildiği halde, Windows 98 NTFS altındaki Windows 2000 dosyalarını göremeyecek ve bu partisyonu bir disk gibi algılayamayacaktır. Bu nedenle bu sürücüye herhangi bir sürücü ismi vermez. HPFS (High Technology File System): OS/2 işletim sistemi ve eski NT sürümleri tarafından kullanılan bir dosya sistemidir. NetWare File System: Novell, NetWare işletim sisteminin kullandığı dosya sistemidir. Partition Magic programı NetWare 3.x ve 4.x bölümlerini görebilir. Ancak üzerlerinde hiçbir işlem yapmaz. Bu nedenle bu konuya çok fazla eğilmeyeceğim, çünkü herhangi bir işlem deneme imkanım olmayacak. Linux Ext2 ve Linux Swap: Linux Second Extended Filesystem (Linux Ext2) ve Linux Swap dosya sistemleri, Unix bazlı işletim sistemi olan Linux’un kullandığı dosya sistemleridir. Özet olarak Ext2 dosya sisteminin desteklediği özellikler arasında 4 TerraByte disk yahut partisyon desteği, gerektiğinde 1012’ye yükseltilebilen 255 karakter uzunluğunda dosya isimlerinin desteklenmesi, 2 GB büyüklüğüne kadar olan dosyalarla çalışabilme sayılabilir. Linux Swap ise Linux işletim sisteminin takas dosyasını yerleştirmek için kullandığı dosya sistemidir. Linux yapısı gereği kurulum sırasında takas dosyası için ayrı bir partisyon açılmasını ve bu partisyona takas özelliği verilmesini gerektirir. Linux bölümleri Linux dışındaki işletim sistemleri tarafından görünmezler ve dolayısıyla bulundukları sürücü yahut partisyona Linux dışındaki bir işletim sisteminde isim verilmez. 10.2. Dosya Yönetimi : Ana bellek dışında kalan veri kümeleri kütük (dosya) olarak adlandırılır. Bu nedenle ikincil bellekler daha geniş anlamıyla giriş/çıkış birimleri üzerinde tutulan verilerin yönetimi kütük yönetimi kapsamında ele alınır. Kullanıcılar, kaynak ve amaç programlar, veriler, yazılı metinler gibi veri kümelerini tutan kütüklerinin doğrusal bir tutanak veya byte dizisi olarak düşünürler. Ancak bunlar ikincil bellekler üzerinde kaynak kullanım verimliliği yönünden fiziksel olarak değişik silindir, sektör hatta sürücü ve sistemler üzerinde yer alabilirler. Bu durum kullanıcıların programlarını mantıksal olarak ard arda gelen sayfalardan oluşuyormuş gibi düşünmelerine, ancak bu sayfaların ana bellekte bitişken olmayan boş bellek sayfalama serpiştirilmesine benzer. Bunun gibi kullanıcılar kütüklerini oluşturan tutanakların konumlarını kütük başına görevli olarak düşünürken, bunların yer aldığı disk öbeklerinin kütüğün bulunduğu sürücü başına göreli silindir, kafa, sektör üçlüsünden oluşan mutlak bir adresi bulunur. Kullanıcılara kütükleri üzerinde düşüncelerinde gerçekliği olan, mantıksal yapılar çerçevesinde işlem yapma olanağı, mantıksal yapılarla fiziksel yapılar arasında geçişi sağlayan kütük yönetim sistemince verilir. Bu işlem kullanıcılara dosyaları üzerinde kolay işlem yapma olanağı sağlarken, bu kütüklerin saklandığı ikincil bellekleri de verimli bir şekilde kullanmayı amaçlar. Bu amaçla ikincil belleklerin düzenlenmesi, buralardan kütüklere yer sağlanması, boş alanların izlenmesi, kütüklerin ikincil bellek üzerinde yerleşimlerinin erişimin en hızlı olacağı biçimde düzenlenmesi vb. kütük yönetimi kapsamında ele alınır. Bunun yanında sistemde saklanan kütüklerin güvenliğinin gözetilmesi de zorunludur. Bu bağlamda, kütüklere erişim ve paylaşım haklarının belirlenmesi ve bunların denetlenmesi lazımdır. Yukarıda açıklandığı biçimiyle kütük yönetim sisteminin temel işlevleri üç maddede toplanmıştır : 1 - Mantıksal kütük yapılarından fiziksel yapılara geçişin sağlanması. 2 - İkincil belleklerin verimli kullanılmasını sağlanması. 3 - Kütüklerin paylaşılması, korunması ve kurtarılması ile ilgili araçların sağlanması. 10.3. Kavramsal Kütük İşlemleri : İşletim sistemi kullanıcıların düşüncesinde gerçekliği olan yalın kütük modelleri üzerinde kavramsal işlem yapmaya olanak verir. Kavramsal kütük işlemleri kullanıcılara işletim sistemince değişik katmanlarda, değişik soyutlama düzeyleriyle sunulurlar. Kavramsal kütük işlemleri, işletim sistemleri komutları ve sistem çağrıları olmak üzere ikiye ayrılırlar. Sistem Komutlarıyla Gerçekleştirilen Kavramsal İşlemler Kütük ( Dosya ) İşlemleri : Create, Delete, Rename, Attributes, Copy, Type, Mounth, Dismount, Compose, Backup, Restore Kılavuz Dizin İşlemleri : Listeleme, Oluşturma, Silme, Dizinler Arası Geçiş, Dir a ) Sistem Çağrılarıyla Gerçekleştirilen Kavramsal İşlemler Kabuk katmanının görevi kullanıcıların girdiği komutların yorumunu yaparak istenilen işlemi belirleme ve bu işlemle ilgili çağrıları çalıştırmaktır. Sistem komutlarının işletilmesinde kullanılan düzenek sistem çağrı düzeneğidir. Sistem çağrılarının doğrudan kullanımı sistem programlarını içeren özel bir kullanıcı sınıfına açıktır. Sıradan programcıların üst düzey programlama dilleriyle tanımladıkları kütük işlemleri ise derleme aşamasında derleyiciler tarafından sistem çağrılarına dönüştürülür. Kütük işlemlerinde en çok kullanılan sistem çağrıları; open, close, sequaltiolread, sequentiolwrite, random read, random write, seek. b ) Klasik Kütük İşlemleri Şekilde görüldüğü gibi herhangi bir kütük üzerinde, herhangi bir işlem yapmadan önce, kütük açma işleminin gerçekleştirilmesi başka bir deyişle program içinde geçen simgesel kütük kimliğinin, fiziksel kütükle eşleştirilmesi gereklidir. Bu işlem bir kere gerçekleştikten sonra ilgili kütüğün belirli sayıda tutanağı sıradan okunup yazılabilirler. b: Mantıksal tutanak nosu istenene değere güncellenerek rastgele okuma-yazma işlemi gerçekleştirilebilir. c : Mantıksal tutanak nosu sıfırlanarak sıradan okuma-yazma işlemleri yinelenebilir. 10.4. Diskin Fiziksel Yapısı : Kütük yönetimi sisteminin temel işlevlerinden biri, kütüklerin, kullanıcıların düşüncesinde gerçekliği olan mantıksal yapılarının, ikincil bellekler üzerindeki fiziksel varlıklarıyla eşleştirilmesidir. Disk birimleri, tüm giriş/çıkış birimlerinde olduğu gibi, arabirim ve sürücülerden oluşur. Disk sürücüleri bir ya da birkaç dönen plaka ,okuma-yazma kafaları ve bunları denetleyen elektronik ve elektromekanik aksamdan oluşmaktadır. Veriler diskte plakaların yüzeylerindeki mıknatıslı ortama, iz olarak adlandırılan iç içe çemberler biçiminde yazılıp okunmaktadır. Plakalar üzerindeki verilerin okunup yazılması, okuma-yazma kafaları aracılığıyla gerçekleştirilmektedir. Disk birimlerinde, genellikle birden çok kafa bulunmaktadır. Okuma-yazma kafaları hareketli ve hareketsiz olmak üzere iki biçimde olabilmektedir. Plakalar üzerinde her ize bir kafa öngörülmesi durumunda, kafaların hareket etmesine gerek duyulmaz. Bu tür disk sistemlerinde okuma-yazma kafaları hareketsizdir. Her yüzeye ilişkin kafa sayısının iz sayısından küçük olması durumunda ise kafaların izler arasında, yatay olarak hareket etmesi gerekir. Çoğu disk sisteminde, ekonomi nedenlerle kafa sayısı iz sayısının çok altındadır. Bu sistemler hareketli kafalara sahip sistemlerdir. Disk sürücüleri, ana işlem birimi ve ana bellek ikilisiyle, arabirimler ya da kanallar aracılığıyla bütünleşmektedir. Bu yapılarda sürücü-arabirim ikilisi sisteme SCSI ( Small Computer System Interface ) gibi standart bağlantılarla bağlanmaktadır. Bu gibi sistemlerde, arabirim düzeyinde cache olarak adlandırılan, çoğu kez birkaç izlik veriyi saklayabilen bellek birimleri de bulunmaktadır. Disk sürücüden, örneğin okuma işlemlerinde, okunmak istenen veri öbeği, arabirim tarafından önce bu bellekte aranmakta bulunamazsa diske erişim yapılmaktadır. Ortalama erişim süreleri, bu bellek sayesinde, büyük oranlarda düşmektedir. Diskte herhangi bir sektör içeriğine erişim süresi, ilgili okuma-yazma kafasının sektörün bulunduğu iz üzerine taşınma süresi, sektörün kafa altından geçmesinin beklendiği süre ve verinin sürücüden ana belleğe aktarım süresi toplanarak bulunur. Sektörlerin sürücü üzerindeki fiziksel adresleri silindir-kafa-sektör üçlüsü ile belirlenir. 10.5. Dosya Yönetimi Sisteminin Ele Alınışı Kütük yönetimi iki kısımda ele alınır. Kılavuz kütükler ve kütüklere diskte yer atama yöntemleri. a) Kılavuz Kütükleri : Disk biriminde bir seferde okunup yazılabilen veri birimi öbek olarak adlandırılır. Çoğu kez birden çok sektör içerir. Kütükleri oluşturan mantıksal tutanaklar disk içerisine serpiştirilmiş bu fiziksel öbekler içinde saklanır. Kılavuz kütükler, kullanıcılar tarafından verilen simgesel kütük kimlikleri ile bu kütüklerin fiziksel öbeklerini ilişkilendirmeye yarayan yapılardır. Kılavuz kütükler bu bağlamda kütük adları ve bunlarla ilgili fiziksel öbek adresleri listesi olarak düşünülebilir. Bu listede her kütüğe ilişkin bir satır vardır.Her satırda ilgili kütük adı ve öbek adresinin yanı sıra kütük türü, öz nitelik bilgileri, oluşturulma ve günleme tarihi gibi bilgiler bulunur. Kullanıcılar sistem komutlarını kullanarak sistemde saklanan kütükleri görüntülemek istediklerinde bu kılavuz kütüğünün dökümünü alırlar. Bu dökümde doğal olarak öbek adresleri gibi kullanıcıyı ilgilendirmeyen fiziksel erişim bilgileri yer almaz. Bu bilgiler kütüklere fiziksel olarak erişmek gerektiğinde sistem tarafından kullanılır. Kütük Adı Kütük Türü Öznitelik Bilgisi Oluşturulma Tarihi Günleme Tarihi Cluster Adresl. b ) Kütüklere Diskte Yer Atama Yöntemleri : Kütük yönetim sisteminin temel görevlerinden bir tanesi de sistemde disk alanlarının verimli kullanmasının sağlanmasıdır. Kütüklere diskte yer atamalar cluster ya da cluster kümesi tabanında yapılır (öbek=cluster). Bu durum sayfalı bellek yönetiminde belleğin sayfalar dizisi biçiminde ele alınmasına ve görevlere de sayfa atanmasına benzer. Kütüklere diskte yer atanırken en çok gözetilen kıstas erişim hızıdır. Bir dosyaya ilişkin tüm cluster’ların aynı silindirde yer alması bu cluster’lara ard arda yapılan erişimlerde yatay kafa hareketi gerekmez. Kütüğe erişim hızı artar. Bunun tersine cluster’ları diskin birbirine uzak silindirlere serpiştirilmiş bir kütükten yapılacak sırada okuma işleminin hızının düşük olacağı açıktır. Diskte dosyalar yer atama yöntemleri ; 1. Bitişken Yer Atama Yöntemi 2. Zincirli Yer Atama Yöntemi 3. Dizinli Yer Atama Yöntemi olarak üçe ayrılır. 1 - Bitişken Yer Atama Yöntemi : Bir kütüğün gereksediği tüm alan fiziksel adresleri ard arda gelen bitişken disk cluster’ları ile karşılaşır. Kütük oluşturulurken gereksenen toplam alan boyu belirlenerek atama yapılır. 2 - Zincirli Yer Atama Yöntemi : Zincirli yer atama yönteminde bir kütüğün sahip olduğu öbek ya da öbek kümeleri birbirlerine zincirleme olarak bağlıdır. Kütüklere atanan öbeklerin bitişken olma zorunluluğu yoktur. 3 - Dizinli Yer Atama Yöntemi : Dizinli yer atama yönteminde kütüklere ilişkin öbek adresleri, dizin öbeği olarak anılan bir öbek içinde toplanır. Kütüğün kılavuz kütük satırı, dizin öbeğinin adresini tutar. Kütüklere erişmede önce dizin öbeği okunur. İlgili öbeğin adresi buradan elde edilerek, ikinci aşamada öbeğin kendisine erişilir. 10.6. Dosya Yönetimi Sisteminin Başarımı ve Güvenirliği Dosya yönetimi sisteminin başarımı, mantıksal kullanım modeline dayalı işlemlerin yerine getirilişinde ortaya konan hızla ilgilidir. Dosya yönetim sistemleri, genelde, ana belleğin yönetiminde yararlanılan, ön bellek kullanımı gibi kimi başarım arttırıcı yöntemleri dosyaların yönetimine de uyarlarlar. Bu yolla diske yapılan erişimleri azaltarak ortalama erişim hızlarını yükseltmeyi amaçlarlar. Kullanıcılar, nitelikli bir bilgisayar hizmeti kapsamında, sistemde sakladıkları dosyalarının korunacağına ve bunların bilgi bütünlüğünün, kendi hataları dışında bozulmayacağına inanmak ve güvenmek isterler. Bu güven ortamının oluşturabilmesi için, dosyaların, kullanıcıların istemi dışında, elektrik kesilmeleri, sistem hataları gibi nedenlerle bozulmalarına karşı kimi önlemler alınır. Bu önlemler dosya yönetim sisteminin güvenirliği kapsamında düşünülür. 10.6.1. Disk Ön Bellek Alanlarının Kullanımı : Dosya yönetim sisteminin başarımını yükseltmenin yolu diske yapılan erişimleri hızlandırmaktan geçer. Disk biriminden bir öbeğin okunması gerektiğinde, ilgili öbek bu yastık alanında ise sürücüye erişime gerek kalmadan istem yanıtlanır. Bu düzenek sürücüye (mıknatıslı plakalara) erişim sayısını azaltarak diske ortalama erişim hızını yükseltmeye katkı verir. Arabirim düzeyinde yer alabilen bu yastık belleklerin yanı sıra, bir de ana bellek düzeyinde disk öbeklerini yastıklamaya yarayan ve bu yolla disk birimine erişimi azaltmayı hedefleyen düzenekler bulunur. Diske ön bellek alanının yönetiminden, genelde dosya yönetim sistemi sorumludur. Diske ilişkin okuma ve yazma istemleri bu yönetim katmanına yönlendirilir. Eğer erişilmesi istenen öbek ön bellek alanında ise istem, bellekten belleğe aktarımla hızla karşılanabilir. Öbeğin ön bellekte bulunmadığı durumlarda ise diske erişilir. Okunan öbek, aynı zamanda ön belleğe de yazılır. Diske erişimde ön bellek tekniğinin kullanılmasının en önemli sakıncası veri bütünlüğünün bozulma riskidir. Kimi öbeklerin, üzerlerinde yazma işlemi yapılmış olsa bile, ön bellek alanında belirli süre tutuluyor olmaları, istem dışı elektrik kesimlerinde yitirilme risklerini arttırır. Diske erişimde ön bellek tekniğinin kullanılması kullanıcılara saydam bir husustur. Bu nedenle, üzerinde güncelleme yapılan kimi dosya öbeklerinin, ilgili dosya kapatılmış, güncellemeleri gerçekleştiren görev sonlanmış olsa bile, bir süre, ön bellek alanında kalmaları, başka bir anlatımla diske yazılmalarının gecikmesi olasıdır. Bu aradaki elektrik kesilmeleri, sözkonusu öbeklerle birlikte, kullanıcılara açıklaması zor, veri ve işlem kayıplarına neden olur. Hele kaybedilen öbeklerin, örneğin dizin öbekleri olması durumunda bu kayıpla çok ciddi boyutlara ulaşır. Bu gerekçeye dayalı olarak, ön bellek tekniğinin kullanıldığı sistemlerde kimi önlemler alınır. Bu bağlamda, UNIX işletim sisteminde, sync olarak adlandırılan bir sistem çağrısı öngörülmüştür. Sync çağrısının işlevi disk ön belleğinde bulunana günlenmiş öbekleri diske yazmaktır. Sistem işletime açıldığında, update ya da benzeri bir adla anılan özel bir sistem görevi de işletime alınır. Bu görev, 30-40 saniye gibi bir sıklıkla ana işlem birimine anahtarlanarak sync çağrısını çalıştırır. Böylece günlenmiş öbeklerin ön bellekte yitirilme riski azaltılmış olur. Aynı işlev shutdown olarak adlandırılan sistem kapama komutu ile de yerine getirilir. Bu komut çalıştırılmadan sistemin kapatılması durumunda da, yine, kimi günlenmiş öbekler yitirilebilir. MSDOS'ta kullanılan önlem ise başkadır. Burada herhangi bir öbeğe yazma yapılması durumunda bu öbek hemen diske aktarılır. Bu tür önlemler, ingilizce write-throughcache adı verilir. Güncellenen öbeklerin diske yazılması, doğal olarak, UNIX'in kullandığı gecikmeli yaklaşıma göre diske daha çok erişim gerektirir. 10.6.2. Dosya Yönetim Sisteminin Güvenilirliği : Bir bilgisayar sisteminde saklanan dosyaların, kullanıcıların istemleri dışında ortaya çıkabilecek bozulmalara karşı korunması dosya yönetim sisteminin güvenilirliği açısından çok önemlidir. Bu güvenirlik, en yaygın biçimde yedekleme işlemleri ile sağlanır. Bu yolla, sistemde saklanan verilerin birden çok kopyası (yedeği) oluşturulur. Bir dosya üzerinde ortaya çıkabilecek bozulmaların diğer kopyalardaki bilgilerle düzeltilebilmesi amaçlanır. Yedekleme işlemlerinin ortaya çıkardığı zaman darboğazını aşmak üzere bir disk birimi, başka bir disk birimi üzerinde de yedeklenebilir. Bu değişik biçimlerde gerçekleşir. Bunun bir yolu, disk birimlerinin eşlenip ikiye bölünerek kullanılmasıdır. Bu yolla birimin kopyası, eşi olan diğer birim üzerinde saklanır. Bir birimin bozulması durumunda eşi üzerinde saklanan verilere başvurulur. Bilgisayar sistemlerinde herhangi bir anda, disklerde saklanan verilerin bütünlüğü, tutarlılık sınaması yapılarak denetlenir. Tutarlılık sınamaları özel sistem programları aracılığıyla yerine getirilir. Bu tür programlar, genelde tüm disk öbeklerini dosya atama çizelgeleri ile boş öbek çizelgeleri içinde izlerler. İşletim sırasında, çeşitli nedenlerle, kimi disk öbekleri birden çok kütüğe atanmış görünebilir. Kimi öbekler de, ne boş öbek ne de atama çizelgelerinde yer almayabilirler. Bu tür öbekler dosya sisteminin bütünlüğünü bozan öbeklerdir. Bu nedenle bu öbeklerle ilgili gerekli düzeltmeler yapılır. WİNDOWS 2000 İŞLETİM SİSTEMİ WIN 2000 BELLEK YÖNETİMİ 11.1. Temel Kavramlar Win2000 işletim sisteminde, her kullanıcı işleminin kendi sanal adres alanı vardır. Sanal adres alanları 32 bit uzunluğundadır, böylece her işlem 4 GB'lık bir sanal adres alanına sahip olur. 2 GB'ın altındaki 256 MB'lık kısım işlem kodları ve verileri için, kernel bellek üzerindeki 2 GB'lık üstündeki kısım ise, korumalı bir yolda kullanılabilir. Sanal adres alanı, sabit bir sayfa boyutu ile sayfalanmış olmak isterler. ( Pentium işlemcilerde bu sayfa boyutu 4 KB'dır. ) Üç tane kullanıcı işlemi için sanal adres alanı düzenlemesi basit olarak yandaki şekilde görülmektedir. Her işlemin en alt ve üstten 64 KB'lık kısmı genelde haritalanmaz. Bu seçim, programlama hataları yakalamaya yardım etmek amacıyla bilerek yapılmıştır. Win2000'de bu alanları kullanmaya çalışmak bazı hatalara sebep olacaktır. Bununla beraber eski MSDOS programları emulation modda çalıştığı zaman, bu alanlar haritalanıp, kullanılabilir. Kullanıcının özel kod ve verileri 64 KB sınırından sonra başlar. Bu alan aşağı yukarı 2 GB'a kadar uzanmaktadır. 2 GB'ın hemen altında yer alan kısım, bazı sistem sayaçlarını ve tüm kullanıcılar arasında zaman paylaştıran zamanlayıcıları içermektedir. 2 GB'ın üzerindeki kısımda kod, veri ve sayfalanmış ve sayfalanmamış bölgeleri içeren işletim sistemi yer almaktadır. 2 GB'ın üzerindeki kısım, her işlemin sahip olduğu sayfa tablosu hariç olmak üzere tüm kullanıcı işlemlerinin arasında paylaştırılmıştır. Bellek alanının 2 GB'ın üzerindeki kısmı yazılabilir değildir ve hatta çoğunlukla kullanıcı-modlu işlemler için bile okunamayabilir. Her sanal sayfa şu üç durumdan birinde olabilir: boş, tutulmuş veya kendini adamış. Bir boş sayfa, güncel olarak kullanımda değildir ve bu sayfaya bir başvuru yapılması halinde sayfa hatası meydana gelir. Bir işlem başlatıldığı zaman, onun sayfalarının tamamı, program ve ilk veri işlemin adres alanında yer alıncaya kadar boş durumdadır. Kod veya veri sayfa üzerinde haritalandığında, sayfa kendini adamış olarak adlandırılır. Kendini adamış halde bulunan sayfaya başvuru yapıldığında, sanal bellek donanımı kullanılarak sayfa haritalanır ve eğer sayfa ana bellekte ise başarıya ulaşılır. Eğer sayfa ana bellekte değilse, sayfa hatası meydana gelir ve işletim sistemi bu hatayı bularak, doğru veriyi diskten bulup getirir. Bir sanal sayfa aynı zamanda, rezerve edilmiş durumda da olabilir, bunun anlamı rezervasyon kaldırılıncaya kadar bu sayfa haritalanamaz. Örneğin yeni bir işletim dizisi ( thread ) oluşturulduğunda, işlemin sanal adres alanında yığın alanının 1 MB'ı tutulur, fakat yalnızca bir sayfa kendini adamıştır. Bu tekniğin anlamı, yığın ( stack ) 1 MB'a kadar büyüyebilir, diğer işletim dizileri sanal adres alanının altında ihtiyaç duyulan bölümü ayıracaktır. Sayfalar boş, tutulmuş ve kendini adamış özelliklerine ek olarak okuyabilme, yazabilme ve çalıştırabilme gibi diğer niteliklere de sahiptir. Win2000, aynı anda, aynı dosyanın aynı parçası üzerinde bir veya daha çok işlemi haritalamak için izin verir, bir sonraki sayfadaki şekilde de görüldüğü gibi bu durum farklı sanal adreslerde mümkün olabilmektedir. Bellek kelimelerini okuma ve yazma yoluyla, işlemler diğer işlemlerin her biriyle haberleşebilirler ve çok yüksek bant genişliği sayesinde veriler üzerinden ileri geri hareket edebilirler. Farklı işlemler, farklı giriş izinlerine sahip olabilirler. Burada dikkat edilmesi gereken bir problem vardır. Eğer iki program bir DLL dosyasını paylaşırsa ve bu programlardan biri dosyanın sabit verisini değiştirse ne olacaktır ?. Eğer özel bir işlem yapılmazsa, diğeri muhtemelen istenmeyen bu değişikliği görecektir. Bu problem tüm sayfaların haritalanması yoluyla çözüldü. 11.2. Bellek Yönetimi Sistem Çağrıları : Win32 API çağrıları, bir işleme sanal bellek alanını yönetmesi için izin veren birkaç fonksiyona sahiptir. Bu fonksiyonların en önemlileri aşağıdaki tabloda listelenmiştir. Bu fonksiyonların tamamı, sanal bellekte ard arda gelen iki veya daha fazla sayfanın bir dizisi ya da tek bir sayfadan oluşan bir bölgede çalışırlar. Bu fonksiyonlar aşağıdaki tabloda görülmektedir. Win32 API Fonksiyonu Tanımlama VirtualAlloc Rezerve edilmiş ya da çalışan bir bölge VirtualFree Serbest bırakılmış ya da çalışmayan bir bölge VirtualProtect Bölge üzerinde okuma/write/çalıştırma korumalarını değiştirir. VirtualQuery Bölgenin durumu hakkında sorgulama yapar. VirtualLock Bellekte kilitlenmiş bir bölge oluşturur. VirtualUnlock Olağan biçimde bölgeleri sayfalayabilir. CreateFileMapping Dosya haritalama nesnesini oluşturur. MapViewOfFile Adres alanının içerisine bir dosyayı haritalar. UnmapViewOfFile OpenFileMapping Adres alanının içerisinde haritalanmış dosyayı siler. Önceden oluşturulmuş bir dosya haritalama nesnesini açar. İlk dört API fonksiyonu, sanal bellek alanının ayırma, serbest bırakma, koruma ve sorgulama bölgelerinde kullanılır. Ayrılmış bölge, 64 KB sınırından başlar. Ayrılmış adres alanının gerçek büyüklüğü 64 KB'den daha az olabilir, fakat sayfa boyutunun bir katı olmalıdır. Sonraki iki fonksiyon haritalanana bölgeleri kilitleyip, kilidi kaldırmaya yeteneğine sahiptir. Gerçek zamanlı bir program bu yeteneğe ihtiyaç duyabilir. İşletim sistemi tarafından konulacak olan bir sınırla, işlemlerin fazla bellek kullanmalarının önüne geçilebilir. Aslında sayfalar bellekten silinebilir, fakat sadece tüm işlem dışarıda değiştirildiyse bu mümkün olur. Tabloda görülmemesine rağmen, Win2000 sanal belleğe sahibi olan işlemden başka işlemlerin de girebilmesi için veren fonksiyonlara sahiptir. Son dört API fonksiyonu bellek-haritalama dosyaları için kullanılır. Bir dosyayı haritalamak için, ilk olarak CreateFileMapping ile bir dosya haritalama nesnesi oluşturulur. Bu fonksiyon, dosya haritalama nesnesine bir değer döndürür ve opsiyonel olarak dosya sistemi için bir isim girer, böylece diğer işlem onu kullanabilir. Sonraki iki fonksiyon haritalama ve haritayı silme dosyalarıdır. 11.3. Bellek Yönetiminin Gerçekleştirilmesi : Win2000, işlem başına 4 GB’lık sayfalanmış bir adres alanını destekler. Segmentleme herhangi bir biçimde desteklenmez. Teorik olarak, sayfa boyutları 64 KB’a kadar ikinin katları şeklinde olabilir. Pentium’larda sanal sayfa boyutları 4 KB ile sınırlandırılmıştır; Itanium işlemcilerde 8 ya da 16 KB olabilirler. Bunlara ek olarak, işletim sisteminin kendisi sayfa tablo alanının tüketilmesini azaltmak için 4 MB’lık sayfaları kullanabilirler. Bellek yöneticisi, çalışmak için işlem parçacıklarını seçen ve işlemin kendisiyle çok fazla ilgilenmeyen programcıya benzemez, o tamamen işlemler ilgilenir ve işlem parçacıkları onu ilgilendirmez. Tüm bunlardan sonra işlemler kendi adres alanlarına sahiptirler ve bellek ve yöneticisi bu işlemlerle ilgilenir. Şekil 2'deki işlem A için görülen dört durumda olduğu gibi, sanal bellek alanının bir bölgesi ayrıldığı zaman, bellek yöneticisi işlem için bir VAD ( Virtual Address Descriptor - Sanal Adres Tanımlayıcısı) oluşturur. a ) Sayfa Hatası : Win2000, önceki işletim sistemlerinin kullandığı herhangi bir sayfalama biçimini kullanmaz. Bir işlem başlatıldığında, işlem sayfalarının hiçbirisi bellekte değildir. Sayfa hatalarının meydana gelmesi gibi, sayfalar da belleğe dinamik olarak getirilirler. Her sayfa hatası meydana geldiğinde, kernel'a bir tuzak kurulur. Kernel, yürütmenin bellek yönetici parçasına geçmesi için bir bağımsız makine tanımlayıcısı inşa eder. Sonra bellek yöneticisi işlemin geçerliliğini kontrol eder. Eğer kendini adamış veya rezerve edilmiş bölgede bir hataya rastlanırsa, VAD'ların listesindeki adreslere bakar, buna göre sayfa tablosunu bulur veya oluşturur. Sayfa tablosu girişleri farklı mimariler için farklı olmaktadır. Haritalanmamış sayfalar da, girişlere sahiptirler, fakat onların formatları biraz daha farklıdır. Örneğin haritalanmamış sayfa kullanılmadan önce sıfırlanmış olmalıdır ve bu durum sayfa tablosuna not edilmelidir. Sayfa hataları beş kategoride ele alınırlar : 1. Sayfa başvurusu gerçekleşmedi. 2. Bir koruma ihlali meydana geldi. 3. Paylaştırılan bir sayfaya yazıldı. 4. Yığının büyüme isteği. 5. Sayfa başvurusu gerçekleşti ancak geçerli bir şekilde haritalanamadı. Birinci ve ikinci durumlar, hatalı yapılan işlem için geri dönüşün mümkün olmadığı tehlikeli durumlardır. Üçüncü durum, ikinci durum gibi aynı bulgulara sahiptir, fakat gerçekleşmesi biraz daha farklıdır. Çözüm yolu sayfayı, yeni bir fiziksel sayfa yapısına kopyalamak ve haritalamaktır. Dördüncü durum ise, yeni bir sayfa yapısı tahsis edilmesini ve onun haritalanmasını gerektirir. Bununla birlikte, güvenlik kuralları sayfanın bir önceki sahibinin işe karışmasını engellemek için sayfanın sadece sıfırları içermesini ister. Böylece bir sayfada sıfırlar bulunmalıdır veya eğer biri kullanılabilir durumda değilse başka bir sayfa yapısı derhal ayrılmalı ve sıfırlanmalıdır. Son olarak, beşinci durum normal sayfa hatasıdır. Çözüm için sayfa belirlenir ve haritaya dökülür. b ) Sayfa Yenileme Algoritmaları : Sayfa yenileme algoritmasının çalışması şuna benzer. Sistem, bellekteki boş sayfaların önemli bir kısmını korumak için çeşitli teşebbüslerde bulunur, böylece bir sayfa hatası meydana geldiğinde, bir boş sayfa bellekte yer talep edebilir. Bu stratejinin sonucu olarak, çok sayıdaki disk hatası tek bir işlemle giderilebilir. Gerçek sayfa yenileme algoritmaları, sayfaların işlemlerden nasıl uzağa alındığı ve dört boş listeden birine nasıl yerleştirildiğiyle ilgilidir. Biz şimdi Win2000 boş sayfalarının nasıl işlediğine bakacağız. Tüm sayfalama sisteminin yoğun olarak kullandığı çalışma seti kavramının kullanımıyla başlayalım. Her işlem bir çalışma setine sahiptir. Bu set bellekte haritalanmış sayfalardan meydana gelir ve böylece bir sayfa hatası meydana gelmeden kullanılabilir. Her işlemin çalışma seti, iki parametre ile tanımlanırlar: minimum boyut ve maksimum boyut. Bu sınırla kesin (değişmez) değildir, bir işlem bellekte minimum değerden daha küçük veya maksimum değerden daha fazla sayfaya sahip olabilirler. Her işlem, aynı maksimum ve minimum sayfa sayısıyla başlar, fakat bunlar zaman içerisinde değişebilirler. Ana belleğin büyüklüğüne bağlı olarak, minimum boyutun default değeri 20 - 50 arasında, maksimum değerin default değeri ise 45 - 345 aralığında yer alır. Bununla birlikte sistem yöneticisi bu değerleri değiştirebilir. Eğer bir sayfa hatası meydana gelir ve çalışma setinin değeri minimum değerden daha küçük olursa, bir sayfa eklenir. Yine, bir sayfa hatası meydana gelir ve çalışma setinin sayfa sayısı maksimum değerden daha büyük olursa, çalışma setinden o sayfalar çıkarılır. (Bellekten değil). Win2000’nin kullandığı bu yerel algoritmanın anlamı, daha çok bellek sağlayarak işlemi, diğer işlemlerin etkisinden korumaktır. Bununla birlikte sistem kendi büyüklüğünü ayarlamaya çalışır. Örneğin, sistem bir işlemin çok büyük bir bellek istediğini görürse, onun maksimum çalışma setinin büyüklüğünü arttırabilir, böylece bu algoritma lokal ve globalin bir bileşimi olur. Çalışma setinin büyüklüğünün de bir sınır olduğu unutulmamalıdır. Bir başka yönetim seti, denge seti yöneticisidir. Denge seti yöneticisi bellekte yeteri kadar boş sayfa olup olmadığını kontrol eder. Eğer yeterli boş sayfa yoksa, denge seti yöneticisi çalışma setini incelemek ve birçok sayfayı kurtarmak için çalışma seti yönetici parçasını çalıştırır. Çalışma seti yöneticisi ilk olarak işlemleri kontrol etmek için bir kural belirler. Bu kurala göre işlemler, büyük işlemler, hareketli küçük işlemler ve ön işlem olarak ayrılırlar. Daha sonra çalışma seti yöneticisi, seçilen düzende denetleme işlemlerini başlatır. Eğer bir işlemin çalışma seti onun minimum değerinden daha az ise veya sayfa hatalarının belirli bir sayısından daha çoğuna maruz kalırsa, işlemin ilerlemesi durdurulur. Aksi taktirde bir ya da daha fazla sayfa silinir. Silinecek sayfaların sayısının belirlenmesi, toplam RAM büyüklüğünün karmaşık bir görevidir. Bir tek işlemcili bilgisayar üzerinde, eğer bir sayfanın başvuru biti açıkça belliyse, sayaç, sayfanın artışıyla ilgilenir. Eğer ilk bit ayarlanmışsa, sayaç sıfıra ayarlanır. İncelemeden sonra, sayfalar sayaçlarla birlikte çalışma setinden silinirler. Çalışma seti parçası (thread) yeteri kadar sayfa yeniden elde edilinceye kadar işlemlerin sınanması devam eder, sonra thread durur. Bir çok işlemcili bilgisayarda, başlangıç bitinde çalışmaz, çünkü aktif işlemci son zamanlarda sayfaya dokunmuş olmamasına rağmen, diğer bazı işlemciler dokunmuş olabilir. Diğer CPU’nun başvuru bitini sınamak çok pahalıdır. Sonuç olarak, başvuru biti incelenmez ve eski sayfalar silinmez. d ) Fiziksel Bellek Yönetimi : Daha önce, dört tane boş liste bulunduğundan bahsetmiştik. Şimdi bu dört listeyi göreceğiz. Bellekteki her sayfa bir veya daha çok çalışma seti veya tamamen bu dört listenin ikisinden birinin üzerindedir. Bu listeler şunlardır: 1. Değiştirilmiş Sayfa Listesi ( Modified Page List ) 2. Yedek Sayfa Listesi ( Standby Page List ) 3. Boş Sayfa Listesi ( Free Page List ) 4. Sıfırlanmış Sayfa Listesi ( Zeroed Page List ) 5. Bozulmuş RAM Sayfa Listesi (Bad RAM Page List) Yedek (temiz) ve değiştirilmiş sayfa listeleri, çalışma setinden yeni çıkarılmış, ancak hale bellekte bulunan sayfaları tutarlar ve bu sayfaları kullanarak işlemle ilişki kurarlar. Yedek ve değiştirilmiş sayfa listeleri arasındaki fark şudur: değiştirilen sayfalar disk üzerinde bir kopyaya sahip değildir, oysa yedek sayfaların disk üzerinde bir kopyası bulunmaktadır. Boş listeler, herhangi bir işlemler ilgilisi olmayan yedek (temiz) sayfaların tutulduğu listelerdir. Sıfırlanmış liste üzerinde sayfalar herhangi bir işlemle ilişkili değillerdir ve bu listeler 0'larla doldurulmuştur. Beşinci liste olan bozulmuş RAM sayfa listesi ise, ana bellekteki hatalı sayfaların listesini tutar. Sayfalar, çalışma setleri ve çeşitli listeler arasında, çalışma seti yöneticisi ve diğer kernel yöneticileri tarafından taşınırlar. Biz bu taşınma işleminin nasıl gerçekleştiğini ele alacağız. . Çalışma seti yöneticisi, çalışma setinden bir sayfa sildiğinde, sayfa temizlik durumuna bağlı olarak yedek (temiz) veya değiştirilen (kirli) listenin altına gider. Bu geçiş şekilde 1 ile gösterilen durumdaki gibidir. Her iki listede bulunan sayfalar hale geçerlidir, dolayısıyla bir sayfa hatası meydana gelirse ve bu sayfalardan birine gereksinim duyulursa, sayfalar listeden silinir ve herhangi bir disk giriş/çıkış işlemi yapılmadan çalışma setinin içerisine geri gönderilerek hata bulunur. Varolan bir işlemin, paylaştırılmamış sayfaları hatalı olamaz, bu nedenle paylaştırılmamış bulunan sayfalar boş listeye giderler (3). Bu sayfalar uzun süre herhangi bir işlemle ilgilenmeden beklerler. Diğer geçişler, diğer kernel yöneticileri tarafından taşınırlar. Her dört saniyede değiştirici parça çalışarak, saniyenin belirli bir anında tüm tüm işletim parçacıklarının işlemlerine bakar. Eğer değiştirici thread işlemler gibi herhangi bir şey bulursa, onların kernel yığınları şekil 4’de 1.adımda gösterildiği gibi sıkıştırılmaz ve sayfaları yedek veya değiştirilen listeye taşınır. Diğer iki thread, haritalanan sayfa yazarı ve değiştirilen sayfa yazarıdır. Bu iki thread periyodik olarak eğer yeteri kadar temiz (yedek) sayfa varsa, yukarıya bunu bildirirler. Eğer yoksa, onlar değiştirilen dosyanın en üstünden sayfaları alır, onları diske yazar ve sonra temiz sayfaya doğru onları taşır (4). Önceki kollar, haritalanan dosyalara yazar ve sonrakiler sayfalama dosyasına yazar. Bu yazmaların sonucu, temiz sayfaları listelenmiş sayfalara dönüştürmektir. Eğer bir işlem bir sayfaya listelenmezse, işlem sayfa ile uzun süre ilgilenmez ve boş listeye gider (5). Bir sayfada hata meydana geldiğinde, sayfada okunanları tutmak için eğer mümkünse boş listeden sayfa yapısı alınır (6). Sayfanın gizli bir bilgiyi içerebilmesi önem taşımaz. Bu durumda boş bir sayfa yapısına ihtiyaç duyulur ve güvenlik kuralları sıfırlardan oluşmuş bir sayfa gerektirir. Bu nedenle, başka bir kernel thread’ı olan sıfır sayfa thread’ı düşük öncelikte çalışır, boş listede bulunan sayfaları siler ve onları sıfırlanmış sayfa listesine koyarlar (7). Her ne zaman işlemci boşsa ve orada boş sayfalar varsa, onlar sıfırlanmış olabilir, çünkü sıfırlanmış bir sayfa potansiyel olarak boş sayfadan daha yararlıdır. 11.2. Win2000'de Giriş/Çıkış Win2000’nin amacı, çok çeşitli giriş – çıkış aygıtlarını çalıştırmak için bir yapı sağlamaktır. Güncel giriş aygıtları, klavye, mouse, joystick, tarayıcılar, hatta kameralar, televizyon kameraları, bar kod okuyucuları ve laboratuar farelerinin çeşitli türlerini içerir. Güncel çıkış aygıtları, monitörler, yazıcılar, çiziciler, ışıldayıcılar, CDKaydediciler ve ses kartlarını içermektedir. Depolama aygıtları, floppy diskler, IDE ve SCSI hard diskler, CDROM’lar, DVD’ler, Zip sürücüleri ve teyp sürücülerini içermektedir. Son olarak, diğer aygıtlar, saatler, ağlar ve telefonları içermektedir. Şüphesiz gelecek yıllarda birçok yeni giriş – çıkış aygıtları geliştirilecektir, böylece Win2000 yeni aygıtları kolayca bağlayabilmek için genel bir yapı geliştirir. İlerleyen bölümlerde giriş – çıkışla bazı olayları inceleyeceğiz. 11.2.1. Temel Kavramlar : IO yöneticisi, tak ve çalıştır idarecisiyle sıkı bir ilişki halindedir. Tak ve Çalıştır’ın ardında yatan temel düşünce, yolların sıralanmasıdır. Birçok yollar, PC kartı, PCI, USB, IEEE 1394 ve SCSI’yi kapsayacak biçimde tasarlanmıştır, böylece tak ve çalıştır yöneticisi her slota bir istek yollayabilir ve orada aygıt kendini tanıtır. Tak ve Çalıştır yöneticisi kesme seviyeleri olarak donanım kaynaklarını ayırır, uygun sürücüleri belirler ve onları belleğe yükler. Her birinin yüklendiği gibi, onun için bir sürücü nesnesi oluşturulur. SCSI gibi bazı yollar için, teker teker sayma sadece boot sırasında olur, USB ve IEEE 1394 gibi diğer yollar için herhangi bir anda olabilir, tak ve çalıştır yöneticisi, yol sürücüsü ve IO yöneticisi arasında kapalı bir bağlantı ister. IO yöneticisi de açık bir şekilde güç yöneticisiyle bağlanır. Güç yönetici şu altı durumdan birine bilgisayarı yerleştirebilir. 1. Tamamen çalışır halde 2. Sleep – 1 : CPU gücü azaltılır, RAM ve cache çalışır; acil kalkma 3. Sleep – 2 : CPU ve RAM çalışır, CPU cache’i çalışmaz; Geçerli PC’den devam et. 4. Sleep – 3 : CPU ve cache çalışmaz, RAM çalışır; belirlenmiş adresler yeniden başlatılır. 5. Hibernate : CPU, cache ve RAM çalışmaz; disk dosyası kaydedilerek bilgisayar yeniden başlatılır. 6. Off : Hiçbir şey çalışmaz; yeniden başlatma gereklidir. Biraz şaşırtıcı da olsa, teknik olarak tüm dosya sistemleri teknik olarak giriş/çıkış sürücülerdir. Kullanıcı işlemlerinden veri blokları için yapılan istekler ilk olarak cache bellek yöneticisine ulaşır. Eğer cache bellek yöneticisi bu istekleri karşılayamazsa, giriş/çıkış yöneticisi, kullanıcının ihtiyaç duyduğu veri bloğunu diskten alıp getirmek için dosya sistem sürücüsünü çağırır. Win2000'in ilgi çekici bir özelliği de, dinamik diskleri desteklemesidir. Dinamik diskler, çok sayıda bölme ve hatta çok sayıda disk üzerinde hızla dönebilirler ve yeniden boot edilmeye ihtiyaç olmadan sistem yeniden konfigüre edilebilir. Win2000’in ilgi çekici başka bir yönü giriş – çıkış senkronizasyonunu sağlamasıdır. Bir işletim dizisinin bir IO işlemini başlatması ve sonra IO ile paralel bir şekilde çalıştırması bu özellik sayesinde mümkündür. Bu özellik, bilhassa server’larda çok önemlidir. 11.2.2. Giriş / Çıkış API Çağrıları : Win2000, fareler, ses kartlar, telefonlar, teyp sürücüler vb. gibi çok geniş bir alandaki IO aygıtları için 100'ün üzerinde API çağrılarına sahiptir. Binlerce Win32 API çağrılarının içinde en önemlisi grafik sistem çağrılarıdır. Win32 çağrıları, pencereleri oluşturur, yok eder ve yönetir. Pencereler, başlıkları, kenarları, renkleri, boyutları ve kaydırma çubuklarını da içeren çok geniş bir alanda seçenekler sunabilen bir yapıya sahiptir. Pencereler, sabitlenebilir veya taşınabilir. Pencerelerin özellikleri sistem çağrılarını kullanılarak değiştirebilir. Birçok pencere, menüleri içerir, burada menü oluşturma, silme ve menü çubukları için Win32 çağrıları vardır. Dinamik menüler popup menülerdir ve silinebilirler. Menü parçaları, parlak, sönükleşmiş ya da taşmış olabilir. Tablo - Win32 API Çağrı Kategorileri API Grup Pencere Yönetimi Menüler Tanımlama Pencereleri oluşturur, kaldırır ve yönetir. Menü ve menü çubukları oluşturur, siler ve yönetir. Diyalog Diyalog kutusu oluşturur Kutuları Boyama ve Noktalar, çizgiler ve geometrik şekilleri Çizme gösterir. Metin Metin rengi, boyutu ve rengini ayarlar. Bitmap'ler ve Ekran üzerindeki ikonları ve bitmap'leri İkonlar yerleştirir. Renkler ve Kullanılabilen renk gruplarının yönetir. Paletler Bir uygulamadan diğerine bilgi geçirmek Clipboard için kullanılır. Giriş Mouse ve klavyeden bilgi alır. Diyalog kutuları, bazı olayları kullanıcıya bildiren veya soru soran popup menülerdir. Onlar, butonları, kaydırma çubuklarını veya doldurulması için text alanlarını içerebilir. Ayrıca diyalog kutularıyla ilgili sesler de olabilir, örneğin hata mesajları için olan sesler. Giriş/çıkış API çağrılarının içinde çizim ve doldurma fonksiyonları için kullanılabilen binlerce çağrı vardır. Birçok çağrı, kapalı geometrik şekiller ve satırlar için dokumalar, renkler, genişlikler ve diğer birçok özelliğin ayrıntılı kontrolünü birlikte sağlamaktadır. Çağrıların diğer bir grubu metinlerin görüntülenmesiyle ilgilidir. Aslında metin görüntüleme çağrısı olan TextOut gayet açıktır. TextOut, renklerin, yazı büyüklüklerinin, karakter genişliklerinin ve diğer tip ayarlarının detaylı olarak yönetimleriyle ilgilidir. Tüm bu işlemlerin tamamı, kullanıcıya ihtiyaç olmadan işletim sistemi tarafından otomatik olarak getirir. Bitmap’ler küçük dikdörtgen nokta bloklarıdır, bu bloklar BitBlt Win32 çağrısını kullanarak ekranda görülebilir. Onlar ikonlar ve bazen de textler için kullanılırlar. Değişik çağrılar, ikon nesneleri oluşturmayı, silmeyi ve yönetmeyi sağlamaktadır. Birçok görüntü her bir pixel’i göstermek için 224 tane rengin kullanılabildiği sadece 256 veya 65536 renklik renk modunu kullanır. Bu durumda, bir renk paletine, 256 veya 65536 renk arasında seçim yapabilmek için ihtiyaç vardır. Bu gruptaki çağrılar, paletleri oluşturma, yok etme ve yönetme çağrılarıdır, verilen bir renge en uygun rengi seçer ve ekran renk göstergesinde, ekran renklerine benzer renkleri oluşturmayı dener. Birçok Win2000 programı kullanıcıların bazı verileri seçip, kesmesine ve daha sonra diğer bir uygulamanın içerisine yapıştırmasına izin verir. Kesme tahtası (clipboard), genellikle bu iletim için kullanılmaktadır. Text, bitmapler, nesneler ve dosyalar için birçok clipboard biçimi tanımlanmıştır. 11.3. Giriş / Çıkış İşleminin Gerçekleştirilmesi : Şimdi giriş – çıkış aygıtlarının grafikleri nasıl meydana getirdiğine ve diğer giriş – çıkış fonksiyonlarına bakacağız. Giriş – çıkış yöneticisinin ana fonksiyonu, farklı giriş – çıkış aygıtlarının çalışabileceği bir çalışma iskeleti oluşturmaktır. 11.3.1. Aygıt Sürücüler : Microsoft, aygıt sürücülerinin uymak zorunda olduğu bir Windows Sürücü Modeli tanımlamıştır. Bundan başka, Microsoft, sürücü yazarlarının ürettiği conformant sürücülere yardım etmek için bir araç kiti dizayn etmiştir. Conformant sürücüler aşağıdaki ihtiyaçların tamamını karşılamalıdır : 1. Standart biçimde gelen giriş – çıkış isteklerini tutma. 2. Windows 2000’nin haricinde nesne tabanlı olma. 3. Dinamik bir şekilde eklenmek ya da silmek için tak ve çalıştır aygıtlarına izin vermek. 4. Uygun yerde güç yöneticisine izin vermek 5. Kaynak kullanımının ayarlanabilir olması 6. Çok işlemcili bilgisayarlarda kullanmak için giriş kabul etmesi 7. Win98 ve Win2000 üzerinden taşınabilir olması. Her bir sürücü onun servislerini kullanmak için çağrılabilen prosedürlerin bir setini sağlamalıdır. Bu prosedürlerden ilki DriverEntry olarak adlandırılan sürücüye giriş prosedürüdür. Bu prosedür, yalnızca sürücü yüklendikten sonra çağrılır. Tablolar ve veri yapıları oluşturabilir, ama aygıta dokunamaz. Bu prosedür, aynı zamanda sürücü yüklendiğinde I/O yöneticisi tarafından oluşturulan sürücü nesnesinin alanlarının bazılarını doldurur. Sürücü nesnesinde alanlar, diğer tüm prosedürlerde sürücülerin sağlamak zorunda olduğu işaretçileri kapsamaktadır. Bunlara ek olarak, her bir aygıt, sürücü tarafından kontrol edilir, bir aygıt nesnesi oluşturulur ve sürücü nesnesine gösterilir. Bu sürücü nesneleri özel bir klasörün içerisine girilir. Verilen bir aygıt nesnesi kolayca sürücü nesnesini saptayabilir ve bundan sonra onun metotları çağrılabilir. İkinci gerekli prosedür bir defa her aygıta eklenmek için çağrılan AddDevice’dir. Bu başarıldığı andan itibaren, sürücü ilk IRP ile çağrılır. Sürücülerin içermesi gereken diğer prosedürler, kesme servisi prosedürleri, çeşitli zamanlama yönetimi prosedürleri, hızlı bir giriş – çıkış yolu olan DMA kontrolüdür. Tek kelimeyle Win2000 sürücüleri çok kompleksdir. 11.3. Win 2000 Dosya Sistemi Win2000, birkaç dosya sistemini destekler. Bunların en önemlileri, FAT-16, FAT-32 ve NTFS dosya sistemleridir. FAT-16, eski MSDOS işletim sistemlerinde kullanılan dosya sistemidir. Bu dosya sistemi 16 bitlik dosya adreslerini kullanır. Kapasiteleri 2 GB'dan daha fazla olamaz. FAT-32, 32 bitlik disk adreslerini kullanır ve 2 TB'a kadar disk bölümlerini destekler. NTFS ise, WinNT için geliştirilen ve Win2000'e de taşınan özel bir dosya sistemidir. NTFS dosya sistemi, 64 bitlik adres kullanır ve teorik olarak 264'e kadar disk adreslerini destekler. Win2000, aynı zamanda CDROM'lar ve DVD'ler için de sadece okunabilen dosya sistemlerini destekler. 11.3.1. Genel Kavramlar : NTFS dosya sisteminde, dosya isimleri 255 karakterle sınırlandırılmıştır; en yüksek yol isimleri ise 32767 karakterle sınırlandırılmıştır. Dosya isimleri Unicode (onaltılık düzende) olarak yazılırlar, insanlara doğal dillerinde dosya isimlerini yazmak için Latin alfabesini kullanmaya izin vermez. Örneğin Ǿίλέ kusursuz bir dosya ismidir. Ancak NTFS bunun bir dosya ismi olmasına izin vermez. Kısaca NTFS, dosya isimlerine karşı duyarlıdır. (örneğin foo ismi için Foo ve FOO birbirinden farklıdır.). Ne yazık ki Win32 API fonksiyonları, dosya isimleri için hassas durumları desteklemez ve ancak klasör isimleri için bu desteği sağlar. NTFS dosya , FAT-32 ve UNIX dosyalarında olduğu gibi yalnızca byte'ların doğrusal bir şekilde sıralanmasından meydana gelmez. Onun yerine, bir dosya, bir çok özellikten oluşur. Bu özelliklerin her biri, byte'ların akışı şeklinde gösterilirler. Birçok dosya, dosya ismi ve dosyanın 64 bitlik nesne ID'si gibi kısa bir akıntıya sahiptir. Bununla birlikte, bir dosya iki veya daha fazla ve uzun veri akışına sahip olabilir. Her dosya, bir isim, kolon ve akıntı isminden oluşmaktadır. (foo:stream1). Her akıntı, kendinin olan bir boyuta sahiptir ve diğer akıntılardan bağımsız olarak kilitlenebilir. Maksimum akıntı büyüklüğü 264 byte'dır. NTFS, çok akıntılar fikrini Apple Macintosh'dan almıştır. Dosya ve klasör yönetimi için kullanılan Win32 API fonksiyonları birçok parametreye sahip olma ve güvenlik modelinin farklı olması haricinde aşağı yukarı UNIX’dekinin tam bir kopyasıdır. Açılış dosyası, dosyaya okuma ve yazma için kullanılan bir handle getirir. Grafiksel uygulamalar için, hiçbir dosya ilk olarak tanımlanmaz. Eğer ihtiyaç duyulsaydı, standart giriş, çıkış ve hata açıkça elde edilmek zorundaydı. Win32’nin ayrıca UNIX’de bulunmayan ekstra çağrılara sahiptir. 11.3.2. Win 2000'de Dosya Sistemi API Çağrıları Win2000'de kullanılan başlıca sistem çağrıları aşağıdaki tabloda listelenmiştir. Gerçekte bu çağrıların sayısı daha fazladır. Ancak burada sadece önemli olanlarına değineceğiz. Tablo - Giriş/Çıkış İçin Başlıca Win32 API Fonksiyonları Win32 API Fonksiyonu UNIX CreateFile open DeleteFile CloseHandle ReadFile WriteFile unlink close read write SetFilePointer Iseek GetFileAttributes LockFile UnlockFile stat fcntl fcntl Tanımlama Bir dosya oluşturur veya varolan bir dosyayı açar. Varolan bir dosyayı siler. Bir dosyayı kapatır. Bir dosyadan veri okur. Bir dosyaya veri yazar. Dosya üzerinden özel bir alana dosya işaretçisini konumlandırır. Dosya özelliklerini döndürür. Dosyanın bir bölgesini kilitler. Dosyanın bir bölgesindeki kiliti kaldırır. CreateFile yeni bir dosya oluşturmak ve dosyaya bir değer döndürmek için kullanılır. Bu API fonksiyonu aynı zamanda var olan dosyaları açmak için de kullanılmaktadır. Tablodaki sonraki altı API fonksiyonu UNIX’deki sistem çağrılarına benzemektedir. Son ikisi dosyaları kilitlemek ve kilidi açmak için kullanılır. Win2000 NTFS dosya sistemi, UNIX dosya sistemine benzeyen hiyerarşik bir dosya sistemidir. Yine de dosya isimleri arasındaki işaret MSDOS kalan / ‘nın yerine \’dır. Win2000'de güncel çalışma klasörü düşüncesi vardır ve yol isimleri nispi veya tam olabilir. Zor ve sembolik bağlantılar desteklenmektedir. Bunlara ek olarak, sıkıştırma, şifreleme ve hata toleransı da ayrıca desteklenmektedir. Bu özellikler ve onların yönetimini ilerleyen konularda ele alacağız. UNIX’deki karşılıklarıyla beraber önemli directory yönetimi API fonksiyonları aşağıdaki tabloda verilmiştir. Win32 API Fonksiyonları UNIX Tanımlama CreateDirectory RemoveDirectory mkdir rmdir FindFirstFile opendir FindNextFile MoveFile readdir rename SetCurrentDirectory chdir Yeni bir klasör oluşturur. Boş olan klasörü siler. Klasörde yer alan dosyaların ilkini açar. Bir sonraki klasörü okur. Bir dosyayı klasörün içine taşır. Aktif klasörü değiştirmek için kullanılır. 11.3.3. Win2000'in Dosya Sisteminin Uygulanışı NTFS çok karmaşık ve gelişmiş bir dosya sistemidir. Eski MSDOS dosya sistemini geliştirmekten daha ziyade, yeni baştan dizayn edilmiştir. Bu bölümde NTFS dosya sisteminin özelliklerinin bir kısmını ele alacağız. a) Dosya Sistemi Yapısı : Her bir NTFS yığını; dosyaları, klasörleri, bitmapleri ve diğer veri yapılarını içermektedir. Her bir yığın, yığının büyüklüğüne bağlı olarak, 512 byte’tan 4 KB’a kadar belirlenmiş bir blok büyüklüğüyle birlikte, blokların doğrusal sıralanması olarak organize edilmişlerdir. Birçok NTFS diski 4 KB’lık blokları kullanırlar. Her bir yığında ana veri yapısı 1 KB büyüklüğündeki kayıtların doğrusal olarak sıralandığı MFT (Baş Dosya Tablosu)’dir. Her MFT kaydı bir dosya ya da klasörü tanımlar. MFT, dosyanın ismi ve oluşturulma zamanı gibi dosyanın özelliklerini ve onun bloklarının bulunduğu yerdeki disk adreslerinin listesini içermektedir. Eğer bir dosya aşırı büyükse, yığının tüm blokların bir listesini içeren bir veya daha fazla MFT kaydı kullanması gereklidir, bu durumda birinci MFT kaydı, diğer MFT kayıtlarına bir işaret olması için temel MFT olarak adlandırılır. Bir bitmap MFT girişlerinin boş olduğu yolları korumaktadır. Bir MFT dosyası yandaki şekilde görülmektedir. Her MFT kaydı çiftlerin sıralanmasından meydana gelmektedir. Her özellik, özelliğe neyin atfedildiğini ve ne kadar uzun bir değere sahip olduğunu bildiren bir header’la başlar, çünkü bazı özellikler, örneğin dosya adı ve veri gibi değişken uzunlukta olurlar. Eğer özellik değeri MFT kaydında kullanmak için yeteri kadar kısaysa, değer oraya yerleştirilir. Eğer değer çok uzunsa, disk üzerinde başka bir yere yerleştirilir ve MFT kaydına yerleştirildiği yer için bir işaret konulur. Bir önceki sayfadaki şekilde görüldüğü gibi, ilk 16 MFT kaydı NTFS meta dosyaları için ayrılmıştır. Kayıtların her biri özelliklere ve veri bloklarına sahip normal dosyaları tanımlar. Bu dosyaların her biri, onların bir meta dosyası olduğu göstermek için dolar işareti ile başlayan bir isme sahiptir. İlk kayıt MFT dosyasının kendisini tanımlar. Özellikle, MFT dosya bloklarının bulunduğu yeri belirler, böylece sistem MFT dosyasının bulabilir. Win2000 kesinlikle sistem bilgisinin dışında kalan MFT dosyalarının ilk bloğunu bulmak için bir yola ihtiyaç duyar. Win2000’nin MFT dosyasının ilk bloğunu bulmak için kullandığı yol, sistem yüklendiği zamanda onun adresinin yüklendiği boot bloğuna bakmaktır. Kayıt 1, MFT dosyasının ilk bölümünün bir kopyasıdır. Bu bilgi, MFT dosyasında herhangi kötü bir olay meydana geldiğinde MFT dosyasının ikinci bir kopyasına sahip olduğundan çok önemlidir. Kayıt 2, kütük dosyasıdır. Yeni bir klasör ekleme veya var olan bir klasörü silme gibi dosya sisteminde yapısal değişiklikler yapıldığında, bu işlem icra edilmeden önce, çalışma esnasında bir başarısızlık olması halinde bu değişikliği doğru bir şekilde geri almak için kütüğe kaydedilir. Dosya özelliklerinde yapılan değişiklikler de buradaki kütüğe kaydedilir. Gerçekte, burada değişiklikler sadece kütüğe kaydedilmez, kullanıcı verisine de kaydediciler. Kayıt 3, dosyanın boyutu, etiketi ve versiyonu gibi miktarı hakkında bilgileri içerir. Daha önce bahsedildiği gibi, her bir MFT kaydı çiftlerin sıralanmasını(özellik ve değeri) içermektedir. $AttrDef dosyası, özelliklerin nerede tanımlandığını belirtir. Bu dosya hakkındaki bilgi MFT’nin 4.kaydında bulunmaktadır. Bir sonraki kayıt, kendisi de bir dosya olan ve rastgele büyüyebilen root directory’dir. Root directory MFT’de 5.kayıtla tanımlanır. Yığında (volume) boş alan, bir bitmap’la yol tutulması ile sağlanılır. Bitmap’in kendisi bir dosyadır ve disk adresleri MFT’nin 6.kaydından verilir. Sonraki MFT kaydı bootstrap yükleyici dosyasını gösterir. Kayıt 8, hatalı blokların bir dosyada asla meydana gelmediğine emin olmak için tüm hatalı dosyaları bir araya getirmek için kullanılır. Kayıt 9, güvenlik bilgisini içerir. Kayıt 10, durum (harf) karşılaştırması için kullanılır. Son olarak, 11.kayıt disk kontenjanları, nesne tanımlayıcıları vb. gibi şeyler için bir klasör içerir. Son 4 MFT kaydı, gelecekteki kullanımlar için ayrılmıştır. NTFS dosya sistemi, MFT kaydında gözükebilen 13 özellik tanımlamaktadır. Bunlar bir sonraki sayfadaki tabloda listelenmiştir. Her MFT kaydı, her birinin çeşitli bayraklar ve diğer bilgiyle beraber değer alanının uzunluğunu verdiği ve yönettiği özellik başlıklarının sıralanmasından meydana gelmektedir. Genellikle, özellik değerleri doğrudan onların ilk değerlerini takip eder, fakat eğer değer MFT kaydına yerleştirilmek için çok uzunsa, disk bloğunda ayrılarak yerleştirilebilir. Bu gibi özelliklerden, sakin olmayan özellikler olarak söz edilmektedir. Veri özelliği buna kesin bir şekilde girmektedir. İsim gibi bazı özellikler, defalarca tekrar edilebilir, fakat tüm özellikler MFT kaydında belirlenmiş bir düzende gözükmelidir. Sakin (sabit) özellikler için başlıklar 24 byte uzunluğundadır; onlar sabit olmayan özellikler için daha uzundur çünkü sabit olmayan özellikler, diskte kendisi hakkındaki niteliği bulmak için gereken bilgiyi içerirler. Tablo - MFT Kaydında Kullanılan Özellikler Özellik Tanımlama Bayrak bitleri, zaman işaretleri vb. Onaltılık sistemde dosya ismi; MSDOS ismi için dosya Dosya İsmi ismi tekrar edilebilir. Güvenlik Artık kullanılmıyor. Şimdi $Extend$Secure güvenlik Tanımlayıcı bilgisi için kullanılmakta. Özellik Listesi Eğer ihtiyaç duyulursa MFT kaydına ek yollar ilave eder. Nesne ID Nesneye özel 64 bitlik dosya tanımlayıcı. Reparse Point Bağlantı ve sembolik linkler için kullanılır. Yığın Adı Yığının ismi. Yığın Bilgisi Yığının versiyonu. Kök İndeksi Klasörler için kullanılır. İndeks Ayırma Çok büyük klasörler için kullanılır. Bitmap Çok büyük klasörler için kullanılır. Yararlı Akıntı Kontroller, $LogFile'e kaydedilir. Kütükleri Veri Akıntı verisi; tekrar edilebilir. Standart Bilgi Standart bilgi alanı, POSIX tarafından ihtiyaç duyulan dosyanın sahibi, güvenlik bilgisi, oluşturulma zamanı gibi bilgileri içermektedir. Bu sabit uzunlukta bir alandır ve her zaman verilir. Dosya ismi Unicode (onaltılık sistem)’de değişken uzunluktadır. MSDOS dosya ismine sahip olmayan isimler ile, eski 16 bitlik programlara erişebilmek için, dosyalar ayrıca 8+3 karakter uzunluğunda MSDOS dosya ismine sahip olabilir, ikinci bir MSDOS ismi kullanılmaz. NT 4.0’da, güvenlik bilgisi bir özelliğe yerleştirilmiş olabilir, fakat Win2000’de tamamen güvenlik bilgisi tek bir dosyadadır, böylece bir çok dosya aynı güvenlik tanımlamalarını paylaşabilir. Özelliklerin MFT kaydındakine uymaması durumunda, bir özellik listesine ihtiyaç duyulur. O zaman bu özellik ek kayıtları bulmak için onların nerede olduğunu bildirir. Özellik listesindeki her bir giriş MFT’ye ek kaydın nerede olduğunu bildirmek ve uzatma kaydı ile yukarıdaki asıl kaydı doğrulamak için 48-bitlik bir indeks içerir. Nesne ID özelliği, dosyaya benzersiz bir isim verir. Buna ara sıra içerden ihtiyaç duyulur. İki yığın (volume) özelliği sadece yığın tanımlaması için kullanılır. Sonraki üç özellik dizinlerin nasıl gerçekleştirildiği ile ilgilidir. Küçük olanlar sadece dosyaların listeleridir, fakat büyük olanlar B+ ağaçlarını kullanarak gerçekleştirilir. Kütüğe kaydedilen yararlı stream özelliği şifrelenen dosya sistemiyle kullanılır. Son olarak her şeyin onun için beklediği niteliğe geldik : Veri. MFT kaydının içine gerçek dosya verisini yerleştirmek çabuk dosya olarak adlandırılır. Kesinlikle, veri çoğu zaman MFT kaydında yer almaz, bu özellik genelde yabancıdır. Şimdi NTFS dosya sisteminin özellikle veri için sabit olmayan niteliklerin konumlarının nasıl korunduğuna bakalım. Disk bloklarının korunması için kullanılan bir model şudur: disk blokları daha iyi çalışma için nerede mümkünse orada ardışık disk bloklarına ayrılır. Örneğin, dosyanın ilk mantıksal bloğu, disk üzerinde 20. bloğa yerleştirilmişse, o zaman sistem ikinci mantıksal bloğu, 21.bloğa üçüncüsü ise 22.bloğa yerleştirmeyi deneyecek ve bu böyle devam edecek. Bir dosyada bloklar, kayıtların sıralanmasıyla tanımlanırlar, blokların her biri birbirine mantıksal olarak komşu bloklar olarak tanımlanırlar. Dosyalar tüm kategorilere uygun olarak başlangıçtan sona kadar belli bir düzende yazılırlar. Blokta bir dosya ile delik olduğu için, orada iki kayıt olacaktır. Böyle bir dosya, ilk 50 bloğa yazma yoluyla oluşturulabilir, sonra ilerideki 60.mantıksal bloğa bakar ve diğer 20 bloğa yazar. Her kayıt, dosyanın içerisindeki ilk bloğun ofset adresini veren bir başlıkla başlar. İlk bloğun sonraki ofset adresi kayıt tarafından karşılanmaz. Yukarıdaki örnekte, ilk kayıt 0,50 aralığında bir başlığa sahip olacak ve bu 50 blok için disk adreslerini sağlayacaktır. İkinci kayıt 60 ve 80 arasındaki bloklara sahip olacaktı ve bu 20 blok için disk adreslerini sağlayacaktır. Her kay ıt baş lığı bir vey a da ha fazl a çift ler yoluyla izlenilir, her biri disk adresini ve çalışma uzunluğunu verir. Disk adresleri, onun bölünmesinin başlamasından itibaren disk bloklarının ofset adresleridir; çalışma uzunluğu, çalışma sırasında blokların sayısıdır. Bir çok çift olarak çalışma kaydından ihtiyaç duyulacaklardır. Bu düzenin 3 sınıf ve dokuz bloktan oluşan bir kullanımı yandaki şekilde görülmektedir Bu şekilde, kısa bir dosya için bir MFT kaydına sahibiz. Buradaki MFT kaydı, disk üzerinde üç sınıf ve dokuz bloktan meydana gelmektedir. İlk sınıf 20-23 bloklardır, ikinci sınıf 64-65 bloklar ve üçüncü bloklar ise 82-82. bloklardır. Bu sınıfların her biri bir çift olarak MFT kaydında kaydedilir. MFT kaydı sayısı, n blokluk bir dosya için, 1'den başlayıp n'e kadar herhangi bir sayıda olabilir. Burada farklı yorumlar yapılmaktadır. İlk olarak, dosyanın boyutuyla ilgili bir üst sınır yoktur, bu yolla dosyalar temsil edilebilirler. Adres sıkıştırması burada mümkün olmadığı için, her bir kayıt çifti iki tane 64 bitlik numaralar gerektirir, böylece toplam 16 byte'lık bir yere gereksinim duyulur. Bununla birlikte, bir çift ard arda 1 milyon ya da daha fazla disk bloklarından meydana gelebilir. Örneğin 20 MB'lık bir dosya, MFT kaydında her biri 1 KB büyüklüğünde olan, 1 milyon tane bloğa ayrılmış, 20 adet sınıftan meydana gelmektedir. İkinci bir yorum, her dosyanın MFT kaydında gösterilebilmesi için 16 byte yeterlidir, hatta bir sıkıştırma metodu kullanılarak bu büyüklük 16 byte'ın daha da aşağısına çekilebilir. Birçok disk adresleri, pratikte kullanılmayan çok sayıda 0 byte dizilerine sahiptir. Bunlar ihmal edilebilir. Veri başlığı, gerçekte adres başına ne kadar byte kullanılacağını ve ne kadarının ihmal edileceğini söyler. Sıkıştırmanın diğer türleri de kullanılır. Kayıt çiftleri, pratikte çoğunlukla 4 byte büyüklüğünde olurlar. Eğer bir dosya çok büyükse veya çok parçalanmışsa yani blok bilgisi bir MFT kaydına yerleştirilemiyorsa ne olur ?. Cevabı çok basittir: iki veya daha çok MFT kaydı kullanılır. Eğer bir çok MFT kaydımız varsa ve temel MFT kaydının içerdiği indeksleri listelemek için herhangi bir yer bulunmadığında bir problem ortaya çıkar. Bu problemin de bir çözüm yolu bulunmaktadır. Ek MFT kayıtlarının listesi, yabancı bir kaynak üzerinde örneğin disk üzerinde depolanır. Böylece MFT kayıt listesi, istediği kadar büyüyebilir. Dosya İsmi : Bir kullanıcı programı bir dosyayı açmak istediği zaman, tipik olarak aşağıdakine benzer bir çağrı yapar. CreateFile ("C:\maria\web.htm",...) Verilen bu isim, NtFileCreate sistem çağrısına bir parametre olarak iletilir. Daha sonra işletim sistemi, nesne yöneticisinin isim alanının root dizininde dosyayı aramaya başlar. Sonra C sürücüsüne bakar ve sonunda aradığı dosyayı bulur. Bu dosya, nesne yöneticisinin isim alanının başka bir parçasına yapılan sembolik bir bağlantıdır. Bağlantı tipik olarak ismi \Device\HarddiskVolume1 gibi bir isme benzeyen nesne adında sonlanır. Bu nesne ilk hard diskin birinci bölümüne uygun olur. Bu nesneden hangi MFT kaydının kullanılacağına karar vermek mümkündür Dosya Sıkıştırma : NTFS dosya sistemi, dosya sıkıştırmayı desteklemektedir. Bir dosya sıkıştırılmış modda oluşturulabilir, bunun anlamı NTFS blokları otomatik olarak sıkıştırır. NTFS bir dosyayı yazdığı zaman, blokların ne kadar bölgeyi işgal ettiğine bakmadan dosyadaki ilk 16 bloğu inceleyerek, diske sıkıştırma işlemi için bir işaret verir. NTFS daha sonra blokların üzerinde bir sıkıştırma algoritmasını uygular. Eğer sonuç verileri 15 veya daha az blokta depolanmış olabilirse, mümkünse tercihen bir bölgede diske yazılır. Eğer sıkıştırılmış veriler 16 bloktan biraz fazla yer tutuyorsa, 16 blok sıkıştırılmamış biçimde yazılırlar. Sonra, 16 ile 31. bloklar arası 15 blok veya daha az blok olarak sıkıştırılabilip sıkıştırılabilmediğine bakılır ve bu böyle devam eder. Dosya geriye doğru okunduğunda NTFS, hangi bölgelerin sıkıştırıldığını ve hangi bölgelerin sıkıştırılmadığını bilmelidir. NTFS, disk adreslerinde esas alınanı görür. 0’ın bir disk adresi, onun sıkıştırılmış blokların son 16 parçası olduğunu gösterir. Belirsizlikten kaçınmak için, 0.disk bloğu veri depolama amacıyla kullanılamaz. Çünkü o, bir veri için kullanmanın neredeyse imkansız olduğu boot sektörü içerir. Sıkıştırılan dosyalara random olarak erişim mümkündür, fakat bunu gerçekleştirmek biraz zordur. Farzedelim ki, bir işlem 35. bloğu arasın. NTFS, sıkıştırılmış olan bir dosyada aranan bloğun yerini nasıl öğrenebilir ?. Bunun yanıtı şudur: ilk olarak tüm bölge okunur ve bloklar açılır. Böylece, NTFS 35. bloğun nerede olduğunu bilir ve diğer işlemin isteğini gerçekleştirmek için ona yönelebilir. Dosya Şifreleme : Bilgisayarlar şu günlerde sahiplerinin herhangi bir kimsenin görmesini istemediği şirket planları, vergi bilgileri ve aşk mektuplarını da içeren çok özel verilerini depolamak için kullanılmaktadırlar. Bir laptop bilgisayar kaybolduğunda veya çalındığında, bir masaüstü sistemi Win2000 güvenliğini pas geçmek için bir MSDOS disketini kullanarak sistem yeniden boot ettiğinde veya bir hard disk fiziksel olarak bir bilgisayardan silindiğinde ve güvenli olmayan bir işletim sistemiyle birlikte başka bir bilgisayara yerleştirildiğince bilgi kaybı meydana gelebilir. Bu problemin olduğu Win2000 adresleri, dosyaları şifrelemek için bir seçeneğe sahiptir, böylece bilgisayar çalınma veya MSDOS’u kullanarak yeniden boot etme durumlarında, dosyalar okunamayacaklardır. Win2000 şifrelemesini kullanmak için normal bir yol, belirli dizinleri işaretleyerek şifrelemektir. Gerçek şifreleme ve çözme NTFS’in kendisi tarafından yapılmaz, fakat EFS olarak adlandırılan ve NTFS ve kullanıcı işlemi arasında yer alan bir sürücü yardımıyla yapılır. Bu yolda, uygulama programları şifrelemeden habersizdir ve NTFS kısmen kendini bu işe bulaştırır. Şimdi biz Win2000’nin dosyaları nasıl şifrelediğine bakacağız. Kullanıcı bir dosyayı şifrelemek istediğinde, random olarak 128 bitlik dosya şifresi oluşturulur ve bu şifre yoluyla simetrik algoritma parametrelerini kullanarak blok olarak dosyalar şifrelenir. Her yeni dosya şifrelendiğinde farklı bir 128 bitlik dosya şifresi alınır, böylece iki tane dosya aynı dosya şifresini kullanamaz. Güncel şifreleme algoritması DES’in değişik türleridir, fakat EFS mimarisi gelecekteki yeni algoritmaları desteklemektedir. Dosya şifresi bir yerde saklanmak zorundadır, böylece dosya daha sonra bu şifreyi çözebilir. Eğer dosya şifresi sadece disk üzerinde saklanırsa, o zaman bilgisayarı çalan veya bulan bir kimse kolaylıkla dosya şifresini çözebilir, dosyaların şifrelenmesi amacına ulaşmamış olur. Bu nedenle, dosyalar disk üzerinde depolanmadan önce, dosya anahtarları tamamen şifrelenmiş olmalıdır. Genel-anahtar kriptografisi bu amaç için kullanılır. Dosya şifrelendikten sonra, register’daki bilgi kullanılarak kullanıcının genel şifresinin yerine bakılır. Register’da kullanıcının genel şifresinin depolanmasının herhangi bir tehlikesi yoktur, çünkü eğer bir hırsız bilgisayarı çalar ve genel şifreyi bulursa, bu genel şifreden özel şifresi çıkarmasının herhangi bir yolu yoktur. 128 bitlik random dosya anahtarı şimdi genel anahtarla şifrelenir. Bir dosyanın şifresini çözmek için, şifrelenmiş 128 bitlik dosya anahtarı diskten alınıp getirilir. Bununla birlikte, onu çözmek ve dosya şifresini yeniden elde etmek için, kullanıcı özel şifreyi vermelidir. İdeal olarak, özel şifre bilgisayara harici olarak takılan bir akıllı kartta depolanmış olabilir ve sadece dosya çözülmek zorunda olduğunda bir okuyucu üzerinde yerleştirilir. Win2000 akıllı kartları desteklemesine rağmen, onların üzerinde özel şifreyi saklamaz. Onun yerine, bir kullanıcı EFS’yi kullanarak bir dosyayı şifrelediği ilk zaman, Win2000 bir çift oluşturur (özel şifre, genel şifre) ve bir simetrik şifreleme algoritmasını kullanarak özel şifreyi disk üzerinde şifreleyerek saklar. Kullanıcının giriş şifresini veya akıllı kartta depolanan bir şifreyi ile simetrik algoritma için bir şifre elde eder, eğer akıllı kart login’e imkan tanırsa. Bu yolda, EFS login sırasında özel şifreyi çözebilir ve bu işlem sırasında kendi sanal adres alanını korur, böylece EFS daha fazla disk girişine ihtiyaç duymadan 128 bitlik dosya şifresini çözebilir. Bilgisayar kapatıldığı zaman, özel şifre EFS’nin sanal adres alanından silinir, böylece herhangi biri bilgisayarı çalmaya çalıştığında özel şifreye sahip olamayacaktır. Çok sayıda kullanıcı aynı şifrelenen dosyaya girmeye ihtiyaç duyduğu zaman bir karışıklık meydana gelir. Güncel olarak bir çok kullanıcı tarafından şifrelenen dosyaların ortak kullanımı desteklenmez. Bununla beraber, EFS mimarisi yetki verilen her bir kullanıcının genel anahtarıyla birlikte, gelecekte her bir dosya şifresinin çeşitli zamanlarında şifrelenmesiyle paylaşımı destekleyebilir. Bu dosya anahtarının şifrelenen tüm versiyonları dosyayla ilişkilenmiş olabilirdi. Şifrelenen dosyaları paylaşmak için potansiyel gereksinim niçin bu iki şifreli sistemin kullanıldığıdır. Eğer tüm dosyalar onların kendileri tarafından şifrelenseydi, orada herhangi bir dosyayı paylaşmak mümkün olmayacaktı. Her bir şifrelenen dosya için farklı şifre kullanılarak, bu problem çözülebilir. 11.4. Win 2000 İşletim Sisteminde Güvenlik : Win NT, Amerikan Savunma Bakanlığının güvenlik ihtiyaçlarını karşılamak amacıyla geliştirilmişti. Bu standart, ordunun güvenliği sağlama gibi çeşitli görevleri için belirli özelliklere sahip işletim sistemleri gerektirir. Win 2000, Win NT'den birçok güvenlik özelliklerini devralmıştır. Bu özellikler aşağıda sıralanmaktadır: 1. Antispoofing ölçülerle güvenli giriş. 2. Karar vermeyi sağlayan giriş kontrolleri. 3. Ayrıcalıklı giriş kontrolü. 4. İşlem başına adres alan koruması. 5. Yeni sayfalar haritalanmadan önce sıfırlanmış olmalı. 6. Güvenlik kaydı tutma. Şimdi bu özellikleri kısaca inceleyelim. Güvenli girişin anlamı şudur : Sistem yöneticisi, tüm kullanıcıların sisteme giriş yapabilmeleri için bir şifreye sahip olmalarını isteyebilir. Karar vermeyi sağlayan giriş kontrolleri, dosyanın sahibine veya diğer nesnelere onu hangi yolda ve nasıl kullanacağını söylemek için izin verir. Ayrıcalıklı giriş kontrolleri, sistem yöneticisine dosyaların gereksinimlerini görmezden gelmesi için izin verir. Adres alan korumasının basitçe anlamı şudur: her işlem kendi korumalı adres alanına sahiptir ve herhangi diğer bir işlem tarafından bu alana erişilemez. Bir sonraki maddenin anlamı ise, stack dolduğu zaman, sayfalar başlangıç durumuna(sıfıra) haritalanır, böylece işlemler bir önceki sahibi tarafından konulan eski bilgileri bulamayabilir. Son olarak, güvenlik kayıt defteri, güvenlikle ilgili olayları göstermek için sistem yöneticisine izin verir. Temel Kavramlar Her Win2000 kullanıcısı bir SID (Güvenlik ID) tarafından tanınır. SID’ler uzun random parçalarla takip edilen kısa başlıklar ile ikili sayılardır. Her bir SID, dünya çapında tek olacak biçimde tasarlanmıştır. Bir kullanıcı bir işlemi başlatacağı zaman, işlem ve onun işletim dizileri kullanıcının SID’inin altında çalışır. Güvenlik sistemlerinin birçoğu her nesnenin sadece yetki verilen SID’ler ile işletim dizileri tarafından girilebildiğine emin olmak için tasarlanmışlardır. Her işlem, kendisinin SID ve diğer özelliklerini bildiren bir giriş işaretine sahiptir. SID ve diğer özellikler ileride GetTokenInformation komutuyla değiştirilebilmesine rağmen, winlogon tarafından login sırasında normal bir şekilde oluşturulur.Oluşturulan bu giriş işaretinin yapısındaki alanlar ve yaptığı görevler şunlardır : Başlık, yönetimle ilgili bilgileri içermektedir. Bitiş süresi, işaretin makul bir şekilde duracağı zamanı belirtir, fakat şu günlerde bu özellik kullanılmaz. Gruplar alanı, işleme uygun grupları bildirir; buna POSIX uyumu için ihtiyaç duyulur. Default DACL, işlem tarafından oluşturulan nesneler giriş kontrol listesinde bir yer ayırmak için kullanılır. Sınırlı SID'ler alanı, güvenilir işlemlerle iş üzerindeki parçaları almak için güvenilir olmayan işlemlere izin verir, fakat zarar verme ihtimalinden dolayı düşük güçte çalışır. Son alanda ise, işlemle ilgili ayrıcalıklar listelenir.Kullanıcı sisteme giriş yaptığı zaman, winlogon tarafından ilk işlemi giriş işaretinden alır. Sonraki işlemler ise normal olarak sırayla alınırlar. Bir işlemin giriş işareti, işlemdeki tüm işlem parçalarında kullanılır. Bununla birlikte, bir işlem parçacığı çalışma sırasında farklı bir giriş işareti kazanabilir. Diğer bir temel kavram, güvenlik tanımlayıcısıdır. Her nesne, nesne üzerinde hangi işlemlerin yapılabileceğini bildiren bir güvenlik tanımlayıcısına sahiptir. Bir güvenlik tanımlayıcısı, DACL tarafından izlenen bir başlık ile bir veya daha fazla giriş kontrol elementlerinden (ACEs) oluşmaktadır. Elementlerin iki önemli çeşidi, Allow ve Deny'dir. Allow elementi, nesne üzerinde yapılabilecek işlemleri bildiren bir SID ve bir bitmap tanımlar. Deny elementi ise, benzer şekilde çalışır, nesne üzerinde hangi işlemlerin gerçekleştirilemeyeceğini bildirir. Bir güvenlik tanımlayıcısı DACL' ek olarak, ayrıca SACL (System Access Control List) sahiptir. DACL'e benzer, ancak nesnenin nasıl kullanılacağını bildirmeyebilir, fakat nesne üzerinde hangi işlemlerin gerçekleştirilebileceğini bildirir. Güvenlik API Çağrıları Win 2000 giriş kontrol mekanizmalarının çoğu, güvenlik tanımlayıcısı tabanlıdır. Olağan bir örnek şöyledir: bir işlem, bir nesne oluşturduğu zaman, CreateProcess, CreateFile veya diğer nesne oluşturma çağrıları gibi bir güvenlik tanımlayıcısı sağlar. Win 32 API çağrılarının çoğunluğu, güvenlik tanımlayıcısının yönetimiyle ilgilidir,bu nedenle biz bu noktaya odaklanacağız. Bir güvenlik tanımlayıcısı oluşturmak için, ilk olarak güvenlik tanımlayıcısını depolamak için bir yer ayrılır ve sonra InitializeSecurityDescriptor çağrısı kullanılarak oluşturulur. Bu çağrı, başlıkta yerine getirilir. Eğer kullanıcı SID'i bilinmiyorsa, LookupAccountSid çağrısını kullanarak SID öğrenilebilir. Daha sonra SID güvenlik tanımlayıcısının içerisine yerleştirilebilir. Benzer işlem Grup SID'i için de yapılır. Normal olarak bunlar, kullanıcının SID'i ve diğer kullanıcı gruplarının SID'leri olacaktır, fakat sistem yöneticisi herhangi bir SID'de kullanacaktır. Güvenlik tanımlayıcısının DACL'ı InitializeAcl. çağrısı kullanılarak ilk kez oluşturulabilir. ACL girişleri, AddAccessAllowedAce ve AddAccessDeniedAce çağrıları kullanılarak eklenebilir. DeleteAce çağrısı, bir girişi silmek için kullanılır. ACL hazır olduğunda, SetSecurityDescriptorDacl çağrısıyla güvenlik tanımlayıcısına bağlanmada kullanılabilir. Win32 API Fonksiyon Tanımlama InitializeSecurityDescriptor Yeni bir güvenlik tanımlayıcısı hazırlar. LookupAccountSid Verilen bir kullanıcı ismi için SID'e bakar. Güvenlik tanımlayıcısında kendi SID'ini SetSecurityDescriptorOwner girer. Güvenlik tanımlayıcısında grup SID'ini SetSecurityDescriptorGroup girer. InitializeAcl DACL veya SACL'ı başlatır. DACL veya SACL allow girişine yeni bir AddAccessAllowedAce ACE ekler. DACL veya SACL deny girişine yeni bir AddAccessDeniedAce ACE ekler. DeleteAce DACL veya SACL'dan ACE'i siler. SetSecurityDescriptorDacl Güvenlik tanımlayıcısına bir DACL bağlar. 11.5. Win 2000 İşletim Sisteminde Cache Win 2000 cache yöneticisi, performans sebebiyle cache işlemini gerçekleştirir. Win2000 cache'i kavramsal olarak, diğer işletim sistemlerindeki cache belleklere benzemektedir. Bununla birlikte, Win2000 cache'i diğerlerinde ender olarak görülen özelliklere de sahiptir. Bu bölümde bu özelliklere kısaca değineceğiz. Cache yöneticisinin işi, herhangi sonraki bir işlemin giriş süresini azaltmak için bellekte son zamanlarda kullanılan dosya sistem bloklarını saklamaktır. Win2000, tek bir entegre cache belleğe sahiptir. Bu cache bellek, NTFS, FAT-32, FAT-16 ve hatta CDROM dosya sistemlerinin hepsi için kullanılabilir. Bu dizaynın hedefi, birçok dosya sistemlerinin orada bulunmasına rağmen, tek bir entegre cache sahip olmalıdır. Cache yöneticisi, sistem üzerinde alışılmamış bir durum olduğunda aranılan bilginin yerini öğrenir. Cache yöneticisi, dosya sisteminin bir parçası değildir. Win2000 cache belleği, fiziksel bellek değil de, sanal bellek tarafından organize edilmiştir. Bunun anlamı, dosyaları tutmak için bölüm ve blok numarası değil de, dosya adı ve offset adresi tutulur. Şimdi cache belleğin nasıl çalıştığına bakalım. Bir dosyaya başvuru yapıldığı zaman, cache yöneticisi, dosya üzerindeki kernel sanal adres alanının 256 KB'lık büyük bir miktarını haritalar. Eğer dosya 256 KB'dan daha büyükse, sadece dosyanın bir bölümü haritalanır. Sanal adres alanının toplam büyüklüğüne, cache yöneticisi boot sırasında karar verebilir ve bu büyüklük RAM'in büyüklüğüne bağlı olarak değişir. Bir dosya haritalandığı zaman, cache yöneticisi disk blokları için yapılan istekleri karşılayabilir. Eğer blok fiziksel belleğe kopyalanmazsa, bir sayfa hatası meydana gelecek ve bellek yöneticisi bu hatayı giderecektir. Hatta cache yöneticisinin hangi blokların cache bellekte olup olmadığından haberi bile olmayacaktır. Dolayısıyla kopya her zaman başarıya ulaşır. Cache yöneticisinin aşağıdaki şekilde, bir SCSI disk üzerinde NTFS dosya sisteminde ve IDE disk üzerinde FAT-32 dosya sistemi üzerinde çalışma adımları görülmektedir. Bir işlem, bir dosya üzerinde okuma işlemi yapacağı zaman, istek doğrudan cache belleğe iletilir. Eğer cache bellek üzerinde dosya bloğuna ihtiyaç duyulursa, blok derhal kullanıcıya kopyalanır. Eğer bellek cache bellek üzerinde değilse, cache yöneticisi bloğu kopyalamayı denediğinde bir sayfa hatasıyla karşılaşacaktır. Sayfa hatası kontrol altına alındığında, blok kendisi çağıran işleme kopyalanır. Bu dizaynın önemi, cache yöneticisi fiziksel bellek üzerinde ne kadar sayfanın haritalanacağını, hatta cache belleğin büyüklüğünü dahi bilmez. Sadece bellek yöneticisini bilir. Bu yöntem, belleğe karşı cache belleğin büyüklüğünü dinamik olarak ayarlamaya izin verir. .6. Özet Win2000 işletim sistemi, HAL (Hardware Abstraction Layer)'da planlanmıştır. Kernel, yönetici ve küçük sistem hizmetleri katmanı burada bulunmaktadır. HAL bunlara ek olarak, değişik aygıtlar için dosya sistemleri ve GDI (Graphics Device Interface)'ı da içermektedir. HAL, donanımdaki farklılıkları daha üst katmanlardan saklar. Kernel, makineden tamamen bağımsız olmak için yöneticiden bazı farklılıkları saklamaya çalışır. Yönetici, bellek nesnesinde bulunmaktadır. Kullanıcı işlemleri onları oluşturur ve daha sonra onları ustaca yönetir. Yönetici elemanları ayrıca nesneler oluşturabilir. Nesne yöneticisi, nesne içerisindeki isim alanına bakar. Win2000, işlemleri, işleri, işlem parçacıklarını ve fiberleri destekler. İşlemler, sanal adres alanlarına sahiptir ve kaynaklar için kullanılan kaplardır. İşlem parçacıkları, işlemin üniteleridir ve işletim sistemi tarafından planlanırlar. Fiberler, düşük güçte çalışan işlem parçalarıdır ve tamamen kullanıcı alanında planlanırlar. İşler, işlemlerin biraraya toplanmış halidir ve kaynak paylarının ayrılması için kullanılır. Tüm bunları planlamak, öncelik algoritması kullanılarak yapılmaktadır. KAYNAKLAR Andrew S.TANENBAUM (2001), Modern Operating Systems Ali SAATÇİ (2000), Bilgisayar İşletim Sistemleri Fazıl DEMİRCİ (1995), İşletim Sistemleri Mustafa KÜÇÜKALİ, Bellek Yönetimi Yüksek Lisans Tezi Mustafa KÜÇÜKALİ (2002), İşletim Sistemleri Ders Notları