Yavaş sistem çağrıları ve hızlı sistem çağrıları arasındaki fark


13

Yavaş sistem çağrıları ile hızlı sistem çağrıları arasındaki fark nedir? İşlem bazı sinyalleri yakalarsa yavaş sistem çağrısının engellenebileceğini öğrendim, çünkü yakalanan sinyaller engellenen sistem çağrısını uyandırabilir, ancak bu mekanizmayı tam olarak anlayamıyorum. Herhangi bir örnek takdir edilecektir.

Yanıtlar:


20

Aslında sistem çağrılarında üç derece vardır.

  1. Bazı sistem çağrıları hemen geri döner. “Hemen”, ihtiyaç duydukları tek şeyin biraz işlemci zamanı olduğu anlamına gelir. Ne kadar süre alabileceklerine dair kesin bir sınır yoktur ( gerçek zamanlı sistemler hariç ), ancak bu çağrılar yeterince uzun bir süre için planlandığı anda geri döner.
    Bu çağrılara genellikle engellememe denir . Engellenmeyen çağrılara örnek gibi sadece sistem durumunun biraz okuyun veya sistem durumuna basit bir değişiklik yapın, telefon vardır getpid, gettimeofday, getuidveya setuid. Bazı sistem çağrıları koşullara bağlı olarak engelleme yapabilir veya engellemeyebilir; örneğin readdosya bir engelleme veya engellemeyen okumaları destekleyen başka bir türse ve O_NONBLOCKbayrak ayarlanmışsa asla engellemez .
  2. Birkaç sistem çağrısının tamamlanması biraz zaman alabilir, ancak sonsuza kadar süremez. Bunun tipik bir örneği sleep.
  3. Bazı sistem çağrıları, bazı harici olaylar gerçekleşene kadar geri dönmez. Bu çağrıların engellendiği söyleniyor . Örneğin, readbir engelleme dosya tanımlayıcı denir engelleme ve böylece wait.

“Hızlı” ve “yavaş” sistem çağrıları arasındaki ayrım, engellememeye karşı engellemeye yakındır, ancak bu kez çekirdek uygulayıcısı açısından. Hızlı bir sistem araması, engellemeden veya beklemeden tamamlanabildiği bilinen bir sistemdir. Çekirdek hızlı bir sistem çağrısı ile karşılaştığında, sistem çağrısını hemen yürütebildiğini ve aynı işlemi zamanlanmış tutabileceğini bilir. ( Önleyici olmayan çoklu görev içeren bazı işletim sistemlerinde , hızlı sistem çağrıları önleyici olmayabilir; normal unix sistemlerinde durum böyle değildir.) Öte yandan, yavaş bir sistem çağrısı potansiyel olarak başka bir görevin tamamlanmasını beklemeyi gerektirir, bu nedenle çekirdek arama işlemini duraklatmaya ve başka bir görevi yürütmeye hazırlanmalıdır.

Bazı durumlarda biraz gri bir alan vardır. Örneğin, bir disk okuması ( readnormal bir dosyadan) normalde engellemesiz olarak kabul edilir, çünkü başka bir işlem beklemez; yalnızca normalde yanıtlanması biraz zaman alan, ancak sonsuza dek sürmeyecek olan diski bekler (yani yukarıdaki 2. durum). Ancak çekirdeğin bakış açısından, işlemin disk sürücüsünün tamamlanmasını beklemesi gerekir, bu yüzden kesinlikle yavaş bir sistem çağrısıdır.


çok teşekkürler! ancak dosya bir kanal ise, dosya okuma engellemiyor mu? bkz. www2.hawaii.edu/~esb/2007spring.ics612/apr10.html
KayKay

"yavaş okuma / yazma (örneğin bir boru veya terminalde)" anlamına gelir.
KayKay

@KayKay: Bir boru için, O_NONBLOCKbayrağın durumuna bağlı olarak her ikisine de sahip olabilirsiniz . Bayrak ayarlanırsa, sistem çağrısı başka bir şey beklemeden tamamlanabilir, bu nedenle engellemez ve çekirdek hızlı bir sistem çağrısı olarak davranabilir.
Gilles 'SO- kötü olmayı bırak

Yani O_NONBLOCK bayrağına bağlı!
KayKay

3

Yavaş bir sistem çağrısı, TCP soketi read () gibidir; O_ASYNC (veya herhangi bir şey) ayarlanmamışsa, sonsuza kadar bekleyebilir.

Hızlı bir sistem çağrısı gettimeofday () veya getpid () gibi bir şeydir, her ikisi de çekirdeğin hemen kullanılabilir olduğu sürece bilgi döndürür.

Disk okumaları yavaş sistem çağrıları kategorisine girer. Bir işlem, gerçek bir disk dosyasında, dosya tanımlayıcısında bir read () yaparsa, okumayı karşılamak için çekirdeğin bir veya daha fazla disk bloğunda okuması gerekebilir. Temel dosya sisteminin disk üzerindeki yapısına bağlı olarak, bu, "dolaylı bir bloğun" disk bloğu numarasını almak için diskteki inode'u okumak, veri bloğunu almak için dolaylı bloğu okumak ve sonra veri bloğunun kendisini okumak anlamına gelebilir. . En azından disk erişimi başına CPU döngüleri açısından, günümüzde Büyük Eski Günlerden daha kötü olabilir.

Bunu çağlarda görmedim, ancak eski Unix disk sürücüsü aygıt sürücüsü kodunun "alt yarısı", diskler üzerinde dosya sistemi bütünlüğünü korumak daha kolay olacak şekilde sinyalleri / kesintileri engelleyecektir. Bazen, bir sürücü veya arızalı bir disk asla bir işlemin istediği disk bloğunu teslim etmez ve süreç sonsuza kadar uyurdu. Bir ölüm -9 bile hiçbir şey yapmadı.

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.