Unix'teki işlemler, çekirdek iş parçacıkları, hafif işlemler ve kullanıcı iş parçacıkları arasındaki ilişkiler nelerdir? [kapalı]


12

Vahalia'dan Unix Internal'ın işlemler, çekirdek konuları, hafif işlemler ve kullanıcı konuları arasındaki ilişkileri gösteren rakamları var. Bu kitap SVR4.2'ye en çok dikkat çekiyor ve ayrıca 4.4BSD, Solaris 2.x, Mach ve Digital UNIX'i ayrıntılı olarak inceliyor. Linux hakkında soru sormadığımı unutmayın.

  1. Her işlem için her zaman sürecin altında yatan bir veya daha fazla hafif işlem var mı? Şekil 3.4 evet diyor.

    Şekil 3.5 (a) neden aralarında hafif işlemler olmadan doğrudan CPU'ların üstündeki işlemleri gösteriyor?

  2. Her hafif işlem için, her zaman hafif işlemin altında yatan tam olarak bir çekirdek iş parçacığı var mı? Şekil 3.4 evet diyor.

    Şekil 3.5 (b), aralarında çekirdek iş parçacığı olmadan neden doğrudan işlemlerin üstünde hafif işlemler gösteriyor?

  3. Çekirdek iş parçacıkları zamanlanabilecek tek varlık mı?

  4. Hafif işlemler, temeldeki çekirdek iş parçacıklarının zamanlanmasıyla yalnızca dolaylı olarak mı planlanıyor?

  5. Süreçler, temeldeki hafif süreçlerin zamanlanmasıyla yalnızca dolaylı olarak mı planlanıyor?

Şekil 3-4.  Hafif süreçler

Şekil 3-5.  Kullanıcı iş parçacığı uygulamaları


Güncelleme:

Linux için benzer bir soru sordum Linux'ta bir çekirdek iş parçacığına hafif bir işlem yapılıyor mu? Bunun nedeni, İşletim Sistemi Kavramları kitabının dolaylı olarak Unix kullanarak kavramları tanıtması ve Unix ve Linux'un farklı olabileceğinden olabileceğini tahmin etti, bu yüzden Unix çekirdeği hakkında okudum.

Mevcut yanıtı takdir ediyorum, ancak diğer yanıtları kabul edebilmem için gönderiyi yeniden açmayı umuyorum.


Neden böyle bir soru çok kurul olarak işaretlenir? Aslında Linux konsepti hakkında iyi bir soru. Dokümanlar genellikle yeterince ayrıntılı değildir, açıklama harika bir cevap olacaktır
德里克 薯条 德里克

Re moderatör: Saf soru sayısı değil, soruların niteliği önemlidir. Çok yakından ilişkili ve kafa karıştırıcı kavramlar arasındaki ilişkileri soruyorum. İnsanları anlamadan soru sayısının önemli olduğunu düşünebilir.
Tim

Yanıtlar:


12

Bakınız: Linux Çekirdeğini Anlamak , 3. Baskı, Daniel P. Bovet, Marco Cesati

  • Yayıncı: O'Reilly
  • Yayın Tarihi: Kasım 2005
  • ISBN: 0-596-00565-2
  • Sayfalar: 942

Girişlerinde Daniel P. Bovet ve Marco Cesati şunları söyledi:

Teknik olarak konuşursak, Linux tam bir Unix işletim sistemi olmamasına rağmen gerçek bir Unix çekirdeğidir, çünkü dosya sistemi yardımcı programları, pencere sistemleri ve grafik masaüstleri, sistem yöneticisi komutları, metin editörleri, derleyiciler vb.Gibi tüm uygulamaları içermez. üzerinde. Bu kitapta okuduğunuz ve Linux çekirdeğinde gördükleriniz, diğer Unix varyantlarını da anlamanıza yardımcı olabilir.

Bir sonraki paragraflarda, bakış açınızı "Linux Çekirdeğini Anlamak" bölümünde sunulan ve büyük ölçüde Unix'tekilere benzer gerçeklere dayanarak ele almaya çalışacağım.

Bir süreç ne anlama geliyor? :

Süreçler insan gibidir, üretilirler, az ya da çok önemli bir yaşamları vardır, isteğe bağlı olarak bir ya da daha fazla alt süreç üretir ve sonunda ölürler. Bir işlemin beş temel bölümü vardır: kod ("metin"), veri (VM), yığın, dosya G / Ç ve sinyal tabloları

Çekirdek içindeki bir işlemin amacı, sistem kaynaklarının (CPU zamanı, bellek, vb.) Tahsis edildiği bir varlık olarak hareket etmektir. Bir işlem yaratıldığında, üst öğesiyle neredeyse aynıdır. Üst öğenin adres alanının (mantıksal) bir kopyasını alır ve süreç oluşturma sistemi çağrısını izleyen bir sonraki talimattan başlayarak üst öğeyle aynı kodu yürütür. Ebeveyn ve çocuk, program kodunu (metin) içeren sayfaları paylaşabilse de, verilerin ayrı kopyaları (yığın ve yığın) vardır, böylece çocuk tarafından bir bellek konumuna yapılan değişiklikler ebeveyn tarafından görünmez (ve tersi) .

Süreçler Nasıl Çalışır?

Yürütme programı, bilgisayara ne yapması gerektiğini söyleyen ikili koddan daha fazlasına ihtiyaç duyar. Programın çalışması için bellek ve çeşitli işletim sistemi kaynaklarına ihtiyacı vardır. “İşlem”, çalışması gereken tüm kaynaklarla birlikte belleğe yüklenmiş bir program olarak adlandırdığımız şeydir. İş parçacığı, bir işlem içindeki yürütme birimidir. Bir işlem yalnızca bir iş parçacığından birçok iş parçacığına kadar her yere sahip olabilir. Bir işlem başladığında, belleğe ve kaynaklara atanır. İşlemdeki her iş parçacığı bu belleği ve kaynakları paylaşır. Tek iş parçacıklı işlemlerde, işlem bir iş parçacığı içerir. Süreç ve iplik bir ve aynıdır ve sadece bir şey oluyor. Çok iş parçacıklı işlemlerde, işlem birden fazla iş parçacığı içerir ve işlem aynı anda birkaç şeyi gerçekleştirir.

Çok işlemcili bir sistemin mekaniği, hafif ve ağır süreçleri içerir:

Ağır bir işlemde, birden çok işlem paralel olarak birlikte çalışır. Paralel olan her ağır işlemin kendi bellek adres alanı vardır. İşlemler farklı bellek adreslerine sahip oldukları için süreçler arası iletişim yavaştır. İşlemler arasında bağlam geçişi daha pahalıdır. İşlemler belleği diğer işlemlerle paylaşmaz. Bu işlemler arasındaki iletişim, soketler veya borular gibi ek iletişim mekanizmalarını içerecektir.

Hafif bir süreçte, iplik olarak da adlandırılır. Konular iş yükünü paylaşmak ve bölmek için kullanılır. Konular ait oldukları sürecin hafızasını kullanır. İş parçacıkları arası iletişim, süreçler arası iletişimden daha hızlı olabilir, çünkü aynı işlemin iş parçacıkları, ait oldukları işlemle belleği paylaşır. sonuç olarak iplikler arasındaki iletişim çok basit ve verimlidir. Aynı işlemin iş parçacıkları arasında bağlam geçişi daha ucuzdur. İş parçacıkları aynı işlemin diğer iş parçacıkları ile belleği paylaşır

İki tür iş parçacığı vardır: kullanıcı düzeyi iş parçacıkları ve çekirdek düzeyi iş parçacıkları. Kullanıcı düzeyi evreler çekirdeği önler ve işi kendi başlarına yönetir. Kullanıcı düzeyinde iş parçacığı, tek bir iş parçacığının zaman dilimini tekelleştirebilmesi ve böylece görev içindeki diğer iş parçacıklarını aç bırakması sorununa sahiptir. Kullanıcı düzeyinde iş parçacıkları genellikle kullanıcı alanında çekirdeğin üzerinde desteklenir ve çekirdek desteği olmadan yönetilir. Çekirdek, kullanıcı düzeyinde iş parçacıkları hakkında hiçbir şey bilmez ve bunları tek iş parçacıklı süreçler gibi yönetir. Bu nedenle, kullanıcı seviyesi iş parçacıkları çok hızlıdır, çekirdek iş parçacıklarından 100 kat daha hızlı çalışır.

Çekirdek düzeyindeki iş parçacıkları genellikle çekirdekte çeşitli görevler kullanılarak uygulanır. Bu durumda, çekirdek her iş parçacığını her işlemin zaman dilimi içinde zamanlar. Burada, saat işareti anahtarlama sürelerini belirleyeceğinden, bir görevin zaman dilimini görev içindeki diğer iş parçacıklarından geçirme olasılığı daha düşüktür. Kullanıcı düzeyindeki iş parçacıkları ile Çekirdek düzeyindeki iş parçacıkları arasındaki ilişki tamamen bağımsız değildir, aslında bu iki düzey arasında bir etkileşim vardır. Genel olarak, kullanıcı seviyesi iş parçacıkları dört modelden biri kullanılarak uygulanabilir: çoktan bire, bire bir, çoktan çoka ve iki düzeyli modeller. Tüm bu modeller, kullanıcı düzeyindeki iş parçacıklarını çekirdek düzeyindeki iş parçacıklarıyla eşleştirir ve her iki düzey arasında farklı derecelerde etkileşime neden olur.

resim açıklamasını buraya girin

Konular ve Süreçler

  1. Program, programlama kodunun bir metin dosyası olarak başlar,
  2. Program derlenmiş veya ikili biçimde yorumlanmış,
  3. Program belleğe yüklenir,
  4. Program bir veya daha fazla çalışan işlem haline gelir.
  5. İşlemler tipik olarak birbirinden bağımsızdır,
  6. İş parçacıkları bir işlemin alt kümesi olarak bulunurken.
  7. İş parçacıkları birbirleriyle süreçlerden daha kolay iletişim kurabilir,
  8. Ancak, iş parçacıkları aynı işlemdeki diğer iş parçacıklarının neden olduğu sorunlara karşı daha savunmasızdır

Referanslar:

Linux Çekirdeğini Anlama, 3. Baskı

Fazlası 1 2 3 4 5

...............................................

Şimdi tüm bu terimleri basitleştirelim ( bu paragraf benim bakış açımdan ). Çekirdek, yazılım ve donanım arasındaki bir arabirimdir. Başka bir deyişle, çekirdek bir beyin gibi davranır. Genetik materyal (kodlar ve türev yazılımı) ve vücut sistemleri (yani donanım veya kaslar) arasındaki ilişkiyi manipüle eder.

Bu beyin (yani çekirdek) buna göre hareket eden süreçlere sinyaller gönderir. Bu işlemlerin bazıları kaslar (yani iplikler) gibidir, her kasın kendi işlevi ve görevi vardır, ancak hepsi iş yükünü bitirmek için birlikte çalışır. Bu iplikler (yani kaslar) arasındaki iletişim çok verimli ve basittir, bu nedenle işlerine sorunsuz, hızlı ve etkili bir şekilde ulaşırlar. İpliklerin bazıları (kaslar) kullanıcının kontrolü altındadır (ellerimizdeki ve bacaklarımızdaki kaslar gibi). Diğerleri beyin kontrolü altındadır (midemizde, gözümüzde, kalbimizde kontrol etmediğimiz kaslar gibi).

Kullanıcı-alanı iş parçacıkları çekirdeği önler ve görevleri kendisi yönetir. Genellikle buna "kooperatif çoklu görev" denir ve aslında üst ve alt ekstremitelerimiz gibidir, kendi kontrolümüz altındadır ve işe ulaşmak için birlikte çalışır (yani egzersizler veya ...) ve doğrudan siparişlere ihtiyaç duymaz. beyin. Diğer tarafta, Kernel-Space iş parçacıkları, çekirdek ve programlayıcısı tarafından tamamen kontrol edilir.

...............................................

Sorularınıza yanıt olarak:

  1. Bir süreç her zaman bir veya daha fazla hafif işleme dayalı mıdır? Şekil 3.4 evet diyor. Şekil 3.5 (a) neden işlemleri doğrudan CPU'ların üzerinde gösteriyor?

    Evet, iş parçacıkları adı verilen hafif işlemler ve ağır işlemler var.

    Ağır bir işlem (buna sinyal iş parçacığı işlemi diyebilirsiniz) işlemcinin yürütülmesini sipariş etmek için daha fazla iş yapmasını gerektirir, bu nedenle Şekil 3.5 (a) işlemleri doğrudan CPU'ların üstünde gösterir.

  2. Hafif bir işlem her zaman bir çekirdek iş parçacığına dayalı mıdır? Şekil 3.4 evet diyor. Şekil 3.5 (b) neden hafif işlemleri doğrudan işlemlerin üstünde gösteriyor?

    Hayır, hafif işlemler iki kategoriye ayrılır: yukarıda belirtildiği gibi kullanıcı düzeyinde ve çekirdek düzeyinde işlemler. Kullanıcı düzeyinde işlem, görevlerini işlemek için kendi kütüphanesine dayanır. Çekirdeğin kendisi çekirdek düzeyindeki işlemi zamanlar. Kullanıcı seviyesi iş parçacıkları dört modelden biri kullanılarak uygulanabilir: çoktan bire, bire bir, çoktan çoğa ve iki düzeyli. Tüm bu modeller, kullanıcı düzeyindeki iş parçacıklarını çekirdek düzeyindeki iş parçacıklarıyla eşler.

  3. Çekirdek iş parçacıkları zamanlanabilecek tek varlık mı?

    Hayır, Çekirdek düzeyindeki iş parçacıkları, çekirdeğin kendisi tarafından oluşturulur. Çekirdek düzeyindeki iş parçacıklarının sınırlı adres alanı olmaması nedeniyle kullanıcı düzeyindeki iş parçacıklarından farklıdırlar. Sadece çekirdek alanında yaşarlar, asla kullanıcı-toprak alanına geçmezler. Ancak, bunlar normal süreçler gibi tamamen programlanabilir ve önlenebilir varlıklardır (not: önemli çekirdek eylemleri için neredeyse tüm kesintileri devre dışı bırakmak mümkündür). Çekirdeğin kendi iş parçacıklarının amacı esas olarak sistem üzerinde bakım görevleri yapmaktır. Bir çekirdek iş parçacığını yalnızca çekirdek başlatabilir veya durdurabilir. Öte yandan, kullanıcı düzeyinde süreç kendi kütüphanesine bağlı olarak kendini planlayabilir ve aynı zamanda iki seviyeli ve çoktan çok modele (yukarıda belirtilen) dayalı olarak çekirdek tarafından programlanabilir,

  4. Hafif işlemler altta yatan çekirdek iş parçacıklarının zamanlanmasıyla yalnızca dolaylı olarak mı planlanıyor?

    Çekirdek iş parçacıkları çekirdek zamanlayıcısının kendisi tarafından denetlenir. Kullanıcı düzeyinde iş parçacığı destekleme, uygulama ile bağlantılı bir kullanıcı düzeyi kitaplığı olduğu anlamına gelir ve bu kitaplık (CPU değil), iş parçacığı için çalışma zamanı desteğindeki tüm yönetimi sağlar. İş parçacığı soyutlamasını uygulamak için gereken veri yapılarını destekleyecek ve bu iş parçacıkları için kaynak yönetimi kararı vermek için gereken tüm zamanlama senkronizasyonunu ve diğer mekanizmaları sağlayacaktır. Şimdi, kullanıcı seviyesi iş parçacığı işlemlerinin bazıları temeldeki çekirdek düzeyi iş parçacıklarıyla eşleştirilebilir ve buna bire bir, bire çok ve çoktan çoğa eşleme dahildir.

  5. Süreçler, temeldeki hafif süreçlerin zamanlanmasıyla yalnızca dolaylı olarak mı planlanıyor?

    Ağır veya hafif bir işlem olup olmadığına bağlıdır. Ağır, çekirdeğin kendisi tarafından planlanan süreçlerdir. ışık işlemi çekirdek düzeyinde ve kullanıcı düzeyinde yönetilebilir.


Teşekkürler. (1) unix.stackexchange.com/questions/472354/… (2) Özellikle Linux için çok yararlı olan cevabınızı takdir etsem de LInux yerine Unix'i özellikle sordum ve umarım olduğu gibi bırakabilirsiniz.
Tim

1
"Çekirdeğin kendi iş parçacığı amacı esas olarak sistem üzerinde bakım görevleri yapmaktır" - Ayrıntılı veya referans
verebilir

@iruva "Bakım görevleri" nin doğru bir terim olmadığına inanıyorum, örneğin güç yönetimi çekirdek dişleri tarafından kontrol ediliyor ve bakım görevleriyle hiçbir ilgisi yok. Aslında, bu yazı ile birlikte verilen referanslar çekirdek konuları hakkında zengin bilgiye sahiptir. Eğer detaylandırmamı isterseniz, lütfen çekirdek konuları ve işlevleri / türleri / nasıl oluşturuldukları ... vs hakkında yeni bir soru gönderin ve açıklamaktan mutluluk duyuyorum. Bu cevap yeterince uzun ve ek bilgileri kabul edemez!

@Tim: Hangi Unix sürümünü soruyordunuz? Özellikle kitapta tartışıldığı gibi bahsettiğiniz eski sistemler? Modern BSD'ler dahil mi? Solaris 11 dahil mi? MacOS X Leopard (UNIX sertifikalı) dahil mi?
user1686

@grawity Ben kitap hakkında sordum, kitap ne kullanırsa kullanın. Diğer sürümleri biliyorsanız, bu da bilmek iyidir.
Tim
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.