Thursday 13 December 2007

Linux Çekirdeğini Anlamak - Süreçler 4

3.2 Süreç Açıp Kapayış (Process Switching)
Süreçlerin çalıştırılışını kontrol etmek için, çekirdek MerkeziİşlemBirimi üzerinde çalışmakta olan sürecin çalıştırılışını askıya alabilmek ve daha önce askıya alınmış başka bir sürecin çalıştırılışını kaldığı yerden devam ettirebilmek zorundadır. Bu faaliyet süreç açıp-kapayış ( process switching) , görev açıp-kapayış (task switching), ya da bağlam açıp-kapayış (context switching) olarak adlandırılır.

Aşağıdaki kısımlar Linux’ta süreç açıp-kapayış’ın unsurlarını tarif etmektedir:
• Donanım bağlamı Hardware context
• Donanım desteği Hardware support
• Linux kodu Linux code
• Yüzen nokta kayıtlarının saklanışı Saving the floating point registers

3.2.1 Donanım Bağlamı (Hardware Context)
Her süreç kendine ait bir adress alanına sahip olabildiği gibi, bütün süreçler MerkeziİşlemBirimi kayıtlarını (register) paylaşmak zorundadırlar. Dolayısıyla bir sürecin çalıştırılışına kaldığı yerden devam etmeden önce, çekirdek bunun gibi her kayıtın(register), süreç askıya alınmadan önce sahip olduğu değerle yeniden yüklendiğini
Garantiye almalıdır.

Süreç MerİşBrmi üzerinde çalışışına kaldığı yerden devam etmeden önce kayıtlara(registers) yüklenmek zorunda olan veri grubuna donanım bağlamı (hardware context) adı verilir. Donanım bağlamı süreç çalıştırılışı için ihtiyaç duyulan bütün bilgileri içeren, süreç çalıştırış bağlamının bir altkümesidir. Linux’ta, bir sürecin donanım bağlamının bir kısmı TSS bölmesine(segment), kalan kısmı da Çekirdek Çalışma Türü Yığınına (Kernel Mode stack) saklanır. TSS bölmesi süreç tanımlayıcının tss alanına den düşer.


önceki (prev) yerel değişkeninin (local variable) kapatılan sürecin süreç tarif edicisine ve sonraki (next)’in açılmakta olup onun yerine geçeni belirttiğini kabul edeceğiz. Böylece süreç açıp-kapayışı öncekinin (prev) donanım bağlamını saklamak ve onun yerine sonrakinin (next) donanım bağlamını yerleştirmek faaliyeti olarak tanımlayabiliriz. Süreç açıp kapayışları sık sık olduğundan, donanım bağlamlarını saklamak ve yeniden yüklemek için harcanan zamanı en aza indirmek önemlidir.

3.2.2 Görev Hali Bölmesi (Task State Segment)
Intel 80x86 mimarisi, donanım bağlamlarını saklamak için, Görev Hali Bölmesi (Task State Segment (TSS)) adı verilen özel bir bölme türü içerir. Her süreç en az 104 byte uzunluğunda kendi TSS bölmesini içerir. Donanım tarafından otomatik olarak kaydedilmemiş kayıtları (registers) ve G/Ç İzin haritasını (I/O Permission bitmap) depolamak için işletim sistemi ek byte’lara ihtiyaç duyar. Bu harita ioperm( ) ve iopl( ) sistem çağrıları Kullanıcı Çalışma Türündeki (User Mode) bir sürece belirli G/Ç kapılarına doğrudan erişim izni verebildiği için gereklidir.

3.2.3 Değiştir Makrosu (The switch_to Macro)
değiştir() (switch_to) makrosu bir süreç açış işlemini icra eder. Önceki (prev) ve sonraki (next) ile belirtilen iki parametre kullanır: ilki askıya alınacak sürecin süreç tanımlayıcı işaretedicisi, ikincisi MİB üzerinde çalıştırılacak sürecin süreç tanımlayıcısı işaret edicisidir. Bu makro planla() (schedule( )) fonksiyonunca MİB üzerinde yeni bir süreç çalıştırmak için plan yapılmak amacı ile harekete geçirilir. değiştir (switch_to) makrosu çekirdeğin en çok donanım-bağımlı alt-programlarından biridir.

3.2.4 Kayan Nokta Kayıtlarının Saklanışı (Saving the Floating Point Registers)
80486 ile başlayarak, AKU Aritmetik Kayan Nokta Birimi (arithmetic floating point unit (FPU)) MİB içine birleşik inşa edildi. Matematik ortakişlemcisi (mathematical coprocessor) kayan nokta hesaplarının pahalı özel amaçlı yongalarla uygulandığı günlerin anısı için hala kullanılmaktadır. Eski modellerle uyumluluğu sürdürmek için, yine de, kayan nokta aritmetiği fonksiyonları KAÇ (ESCAPE) komutlarını kullanmaya başvurarak icra edilmektedir. KAÇ komutları öncül (prefix) byteları 0xd8 ve 0xdf arasında değişen komutlardır. Bu komutlar MİB’ne dahil edilen bir küme kayan nokta kayıtı üzerinde etkili olurlar. Açıkçası, eğer bir süreç KAÇ (ESCAPE) komutları kullanıyorsa, kayan nokta kayıtlarının içerikleri onun donanım bağlamına aittir. Intel 80x86 mikroişlemcileri kayan nokta kayıtlarını TSS içine otomatik olarak saklamazlar. Yine de, çekirdeklerin bu kayıtları yalnız gerekli olduğunda saklamalarına olanak sağlayan bazı donanım destekleyicilerini içerirler.