logo

.NET Ortak Dil Çalışma Zamanı (CLR)

.NET CLR, herhangi bir .NET programlama dilinde yazılmış kodu yöneten ve yürüten bir çalışma ortamıdır. CLR, .NET çerçevesinin sanal makine bileşenidir. Bu dilin derleyicisi, .NET uyumlu diller kullanılarak geliştirilen uygulamaların kaynak kodunu, CLR'nin MSIL adı verilen ara diline, yani Microsoft ara dil koduna derler. Bu kod platformdan bağımsızdır. Java'daki bayt koduyla karşılaştırılabilir. Meta veriler ayrıca derleme ve MSIL kodu sırasında oluşturulur ve Manifest dosyası olarak bilinen bir dosyada saklanır. Bu meta veriler genellikle CLR'nin MSIL kodunu yürütmek için ihtiyaç duyduğu üyeler ve türlerle ilgilidir. CLR'nin tam zamanında derleyici bileşeni, MSIL kodunu makinenin yerel koduna dönüştürür. Bu kod platforma bağlıdır. CLR belleği, iş parçacıklarını, istisnaları, kod yürütmeyi, kod güvenliğini, doğrulamayı ve derlemeyi yönetir.

c'deki ascii tablosu

Aşağıdaki şekil kaynak kodunun yerel koda dönüştürülmesini göstermektedir.

Net Ortak Dil Çalışma Zamanı

Yukarıdaki şekil kodu, CPU'nun çalıştırabileceği yerel koda dönüştürür.

CLR'nin ana bileşenleri şunlardır:

  • Ortak tip sistemi
  • Ortak dil belirtimi
  • Çöp toplayıcı
  • Tam Zamanında Derleyici
  • Meta Veriler ve Montajlar
Net Ortak Dil Çalışma Zamanı

1. Ortak tip sistemi:

CTS, çalışma zamanında veri türlerinin bildirilmesi, kullanılması ve yönetilmesi için yönergeler sağlar. Diller arası iletişim sunar. Örneğin, VB.NET bir tamsayı veri türüne sahiptir ve C#, tamsayıları yönetmek için bir int veri türüne sahiptir. Derlemeden sonra Int32 her iki veri türü tarafından da kullanılır. Dolayısıyla CTS, yönetilen kodu kullanarak veri türlerini sağlar. Ortak bir tür sistemi, dilden bağımsız kod yazmaya yardımcı olur.

İki Tür kategorisi sağlar.

    Değer türü:Değer türü, verileri bir yapıdaki yığında veya satır içi olarak ayrılan bellekte saklar. Bu Tür kategorisi veri dizinini tutar. Bir değişkenin değeri diğerine kopyalanırsa her iki değişken de verileri bağımsız olarak depolar. Yerleşik türlerde, kullanıcı tanımlı veya numaralandırma türlerinde olabilir. Yerleşik türler sayısal, Boolean, char ve tarih gibi ilkel veri türleridir. Kaynak kodundaki kullanıcılar, kullanıcı tanımlı türler oluşturur. Numaralandırma, etiketlerle temsil edilen ancak sayısal tür olarak saklanan numaralandırılmış değerler kümesini ifade eder.
    Net Ortak Dil Çalışma Zamanı Referans Türü:Referans türü, bir bellek adresinin değerine ilişkin bir referansı saklar ve yığında tahsis edilir. Yığın belleği dinamik bellek tahsisi için kullanılır. Referans Türü doğrudan gerçek verileri tutmaz ancak verilerin adresini tutar. Referans tipi bir nesne yapıldığında, gerçek verileri değil adresi kopyalar. Bu nedenle iki değişken aynı verilere atıfta bulunacaktır. Bir Referans Türü nesnesinin verileri değiştirilirse, aynı durum diğer nesneye de yansıtılır. Referans türleri, kendini tanımlayan türler, işaretçi türleri veya engelleme türleri olabilir. Kendini tanımlayan türler, kendileri hakkında meta verileri depolayan dize, dizi ve sınıf türleri olabilir.

2. Ortak Dil Belirtimi (CLS):

Ortak Dil Belirtimi (CLS), NET destekli tüm dillerin uyması gereken bir dizi kural içerir. Ortak kurallar, dil entegrasyonunun uygulanmasını kolaylaştırır ve diller arası miras ve hata ayıklamaya yardımcı olur. NET Framework tarafından desteklenen her dilin kendi sözdizimi kuralları vardır. Ancak CLS, NET dilleri kullanılarak geliştirilen uygulamalar arasında birlikte çalışabilirliği sağlar.

3. Çöp Toplama:

Çöp Toplayıcı, CLR'nin otomatik bellek yöneticisi olarak çalışan bir bileşenidir. Belleği ihtiyaca göre otomatik olarak tahsis ederek belleğin yönetilmesine yardımcı olur. Yığın belleğini nesnelere ayırır. Nesneler kullanılmadığında, onlara ayrılan belleği gelecekte kullanmak üzere geri alır. Ayrıca bir nesnenin başka bir nesnenin içeriğini kullanmasına izin vermeyerek nesnelerin güvenliğini sağlar.

4. Tam Zamanında (JIT) Derleyicisi:

JIT Derleyicisi CLR'nin önemli bir bileşenidir. MSIL kodunu yerel koda (yani makineye özgü kod) dönüştürür. .NET programı açık veya örtülü olarak derlenir. Geliştirici veya programcı, programı açık derlemede derlemek için belirli bir derleyiciyi çağırır. Örtülü derlemede program iki kez derlenir. Kaynak kodu, ilk derleme işlemi sırasında Microsoft Intermediate Language'e (MSIL) derlenir. MSIL kodu, ikinci derleme işleminde yerel koda dönüştürülür. Bu işleme JIT derlemesi denir. Üç tür JIT derleyicisi vardır: Pre, Econo ve Normal. Pre JIT Derleyicisi, yürütmeden önce MSIL kodunun tamamını yerel koda derler. Econo JIT Derleyicisi, MSIL kodunun yalnızca yürütme sırasında gerekli olan kısımlarını derler ve artık gerekli olmayan kısımları kaldırır. Normal JIT Derleyicisi ayrıca MSIL kodunun yalnızca yürütme sırasında gereken kısımlarını derler ancak bunları ileride kullanmak üzere önbelleğe yerleştirir. Zaten kullanılmış olan parçalar önbelleğe yerleştirildiğinden yeniden derlenmesini gerektirmez.

5. Meta veriler:

Meta Veriler, MSIL koduyla birlikte bir CLR Taşınabilir Yürütülebilir dosyasında (PE) veya bellekte saklanan, program hakkında ikili bir bilgidir. MSIL'in yürütülmesi sırasında, sınıfların ve ilgili sınıfların doğru yorumlanması için meta veriler de belleğe yüklenir. Kodda kullanılan bilgiler. Dolayısıyla meta veriler, kodun dilden bağımsız bir şekilde uygulanmasına veya dille birlikte çalışabilirliğin sağlanmasına yardımcı olur.

6. Meclisler:

Montaj, fiziksel kod gruplandırmanın temel birimidir. Derleme bildirimi, meta veriler, MSIL kodu ve görüntü dosyaları gibi bir dizi kaynaktan oluşur. Aynı zamanda temel bir dağıtım birimi, sürüm kontrolü, yeniden kullanım, güvenlik izinleri vb. olarak da kabul edilir.

.NET CLR İşlevleri

Aşağıda CLR'nin işlevleri verilmiştir.

  • Programı yerel koda dönüştürür.
  • İstisnaları Yönetir
  • Tip güvenliği sağlar
  • Bellek yönetimi
  • Güvenlik sağlar
  • Geliştirilmiş performans
  • Dilden bağımsız
  • Platform bağımsız
  • Çöp toplama
  • Nesne yönelimli programlar için miras, arayüzler ve aşırı yükleme gibi dil özellikleri sağlar.

CLR ile çalışan koda yönetilen kod, CLR dışında kalan koda ise yönetilmeyen kod adı verilir. CLR ayrıca hem yönetilen hem de yönetilmeyen kodların birlikte çalışmasına olanak tanıyan bir Birlikte Çalışabilirlik katmanı sağlar.

1. Yönetilen kod:

.NET çerçevesinde yazılan herhangi bir dil, yönetilen koddur. Yönetilen kod, belleği yöneterek, güvenliği yöneterek, diller arası hata ayıklamaya izin vererek vb. uygulamalarınızla ilgilenen CLR'yi kullanır. Yönetilen kod süreci şekilde gösterilmektedir:

Net Ortak Dil Çalışma Zamanı

2. Yönetilmeyen kod:

.NET çerçevesi dışında geliştirilen kod, yönetilmeyen kod olarak bilinir. CLR'nin kontrolü altında çalışmayan uygulamalara yönetilmeyen uygulamalar denir. İşletim sisteminin düşük düzeyli erişim işlevleri gibi bu tür uygulamaları yazmak için C++ gibi belirli diller kullanılabilir. VB, ASP ve COM ile arka planda uyumluluk, yönetilmeyen kod örnekleridir. Bu kod sarmalayıcı sınıfların yardımıyla yürütülür. Yönetilmeyen kod süreci aşağıda gösterilmiştir:

Net Ortak Dil Çalışma Zamanı

.NET CLR Sürümleri

CLR daha iyi performans sağlamak için zaman zaman kendini günceller.

.NET sürümü CLR sürümü
1.0 1.0
1.1 1.1
2.0 2.0
3.0 2.0
3.5 2.0
4 4
4.5 4
4.6 4
4.6 4

.NET CLR Yapısı

Ortak Dil Çalışma Zamanının bileşen yapısı aşağıdadır.

Net Ortak Dil Çalışma Zamanı

Temel Sınıf Kitaplığı Desteği

.NET uygulamasına yönelik sınıfları destekleyen bir sınıf kütüphanesidir.

Konu Desteği

Çok iş parçacıklı uygulamanın paralel yürütülmesini yönetir.

COM Sıralayıcısı

COM nesneleri ile uygulama arasındaki iletişimi sağlar.

Güvenlik Motoru

Güvenlik kısıtlamalarını zorlar.

Hata Ayıklama Motoru

Farklı türdeki uygulamalarda hata ayıklamanıza olanak tanır.

Tip Denetleyicisi

Uygulamada kullanılan türleri kontrol eder ve bunların CLR tarafından sağlanan standartlarla eşleştiğini doğrular.

Kod Yöneticisi

Yürütme çalışma zamanında kodu yönetir.

Çöp toplayıcı

Kullanılmayan belleği serbest bırakır ve onu yeni bir uygulamaya ayırır.

İstisna İşleyicisi

Uygulama hatasını önlemek için çalışma zamanında istisnayı işler.

Sınıf Yükleyici

Çalışma zamanında tüm sınıfları yüklemek için kullanılır.