Kullanıcı düzeyinde dişler ve çekirdek düzeyinde dişler arasındaki fark nedir?


33

Birkaç kaynak okuduktan sonra, kullanıcı ve çekirdek seviyesindeki iş parçacıkları hakkında hala kafam karışık.

Özellikle:

Konular hem kullanıcı düzeyinde hem de çekirdek düzeyinde olabilir.

Kullanıcı seviyesi ile çekirdek seviyesi arasındaki fark nedir?


1
Bu gerçekten Comp Sci (teori) mi, yoksa sadece programlama mı?
Mehrdad

6
@Mehrdad, İşletim Sistemleri bilgisayar bilimlerinin bir parçasıdır.
Kaveh

Yanıtlar:


28

Çok görevli bir işletim sistemi çekirdeğinin rollerinden biri zamanlamadır : ne zaman yürütülmesi gerektiğini yürütmek. Dolayısıyla böyle bir çekirdeğin bir miktar iplik veya işlem kavramı vardır . Bir iş parçacığı, yürüten sıralı bir kod parçasıdır ve kendi yığınına ve bazen başka verilere sahiptir. Bir işletim sistemi bağlamında, insanlar genelde kullanmak sürecini kendi hafıza alanı olan bir iş parçacığı anlamına gelir ve hiç iplik bir iplik anlamına diğer iş parçacığı ile paylaşır onun bellek alanı olduğunu. Bir işlem bir veya daha fazla dişe sahip olabilir.

Bazı işletim sistemleri, örneğin eski unix sistemleri, sadece süreçler sağlar: çekirdeğin yönettiği her iş parçacığının kendi bellek alanı vardır. Diğer işletim sistemleri, örneğin çoğu modern unix sistemi, işlemlerin çoklu yürütme iş parçacıkları içermesine izin verir: bunlar çekirdek düzeyinde bir iş parçacığı kavramı sağlar.

Bir sürecin kendi iş parçacığını yönetmesi de mümkündür. Gelen kooperatif çoklu kullanım, her iş parçacığı kod başka bir evreye anahtara talimatları içermektedir. Gelen önleyici çoklu kullanım, süreç periyodik istekleri asenkron farklı bir iş parçacığı geçerek bu bildirimlere çekirdekten bildirimleri ve hızla reaksiyona girerek. Bu yolla, çok iş parçacığı kullanıcı düzeyinde bir kitaplıkta çekirdek işbirliği olmadan uygulanır.

Bir sistem hem çekirdek seviyesi hem de kullanıcı seviyesi dişleri sunabilir; Bu karma diş ipliği olarak bilinir .

Kullanıcı ve çekirdek seviyesi dişlerinin her birinin yararları ve olumsuz yanları vardır. Kullanıcı düzeyinde dişler arasında geçiş yapmak genellikle daha hızlıdır çünkü çekirdek içi programlayıcıya geçmek için tekrar korumaya sıfırlama ve tekrar işleme geri dönmek gerekmez. Bu çoğunlukla, bazı yüksek seviyeli diller ( özellikle Erlang ) ve onların yeşil iplikleri gibi çok kısa ömürlü iplikler kullanan çok büyük eşzamanlı sistemler için önemlidir . Kullanıcı düzeyinde iş parçacığı, çekirdeği daha basit hale getirebilen daha az çekirdek desteği gerektirir. Çekirdek düzeyinde iş parçacığı, aynı işlemdeki başka bir iş parçacığı bir sistem çağrısında engellenirken iş parçacığının çalışmasına izin verir; Kullanıcı düzeyinde iş parçacığı olan işlemler, sistemin tüm çağrıları engellediğinden, sistem çağrıları engelleme yapmamaya özen göstermelidir. Çekirdek seviyesindeki dişliler, tamamen kullanıcı seviyesindeki dişlilerin sağlayamadığı çok işlemcili makinelerde aynı anda çalışabilir.


Son satırınız “Çekirdek dişlileri aynı anda çok işlemcili makinelerde çalışabilir, bu da tamamen kullanıcı seviyeli dişlilerin elde edemeyeceğini” söylüyor. Ancak verilen bağlantı, ULT'nin aynı anda stackoverflow.com/questions/14791801/… çalıştırabildiğini söylüyor . Yanlış bir şey mi alıyorum?
Garrick

Lütfen yukarıdaki yorumumu kontrol edebilir misiniz?
Garrick

1
@Garrick Birden fazla kullanıcı düzeyinde iş parçacığı, aynı çekirdek düzeyinde iş parçacığı içinde çalıştırılıyorsa, aynı anda farklı çekirdeklerde çalışabilir. Bir araç olarak sadece ULT'ye sahipseniz, tek bir işlemciyle sınırlısınız. KLT mevcutsa, çekirdek dişlerini birden fazla işlemciye yayabilir ve ULT'nizi mevcut çekirdek dişleri arasında gönderebilirsiniz.
Gilles 'SO- kötü olmayı bırak'

4

Çekirdek düzeyindeki iş parçacıklarını " sanal işlemciler " olarak ve kullanıcı düzeyi iş parçacıklarını yalnızca parçacığı olarak düşünün (Şimdilik bunları arayalım). Şimdi, bir iş parçacığının çalıştırılması için bir işlemciye atandı değil mi? Böylece, her iş parçacığı çalıştırılabilmesi için sanal bir işlemciye atanır.

İşte gerçekler

  • Yeni bir sanal işlemci oluşturmak biraz maliyetlidir. (Çekirdek İplik Kontrol Bloğunda bir giriş yaratmalı , yığın atamalı vb.)

  • Bir iş parçacığı oluşturmak, yeni bir sanal işlemci oluşturmaya kıyasla oldukça basittir. Bir uygulama geliştiricisi, programlama dilleri tarafından sağlanan İş Kitaplıkları'nı kullanarak iş parçacıkları oluşturabilir ve Kullanıcı Alanında yönetilebilir . Ve farklı diller okuyucuyu farklı şekillerde uygular .

Modeller

  • Eğer iş parçacığı tek bir sanal işlemciye eşlenirse, o zaman iş parçacığı engelleyici bir sistemin çağrılmaması için dikkatli olunmalıdır, çünkü diğer iş parçacığı aynı anda çalışamaz.

  • Birkaç sanal işlemci daha oluşturulabiliyorsa, bu sınırlama aşılabilir. Şimdi, iş parçacığı eşzamanlı olarak çalışabilir (eğer birden çok gerçek işlemci varsa paralel olarak). Bir iş parçacığı, diğer sanal işlemcilerle eşlenen diğer iş parçacıklarını etkilemez.

  • İkinci modelde, bir ya da daha fazla iş parçacığı sanal bir işlemciye eşlenebilir.

  • Yukarıdaki modeller sırasıyla Bire Bir, Bire Bir ve Birçoğuna Çok Dahası olarak adlandırılmıştır.

Referanslar: Galvin ve ark. Konu: Konular -> Çok Okuyucu Modeller

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.