Procfs - Procfs

proc dosya sistemi (procfs) özel bir dosya sistemidir Unix benzeri hakkında bilgi sunan işletim sistemleri süreçler ve hiyerarşik dosya benzeri bir yapıdaki diğer sistem bilgileri, geleneksel olandan çekirdekte tutulan işlem verilerine dinamik olarak erişmek için daha uygun ve standartlaştırılmış bir yöntem sağlar. izleme yöntemler veya doğrudan erişim çekirdek hafıza. Tipik olarak, bir bağlama noktası isimli / proc önyükleme sırasında. Proc dosya sistemi, çekirdekteki dahili veri yapılarına bir arayüz görevi görür. Sistem hakkında bilgi almak ve çalışma zamanında belirli çekirdek parametrelerini değiştirmek için kullanılabilir (sysctl ).

Birçok Unix benzeri işletim sistemi proc dosya sistemini destekler. Solaris, IRIX, Tru64 UNIX, BSD, Linux, IBM AIX, QNX, ve Bell Labs'tan Plan 9. OpenBSD Mayıs 2015'te piyasaya sürülen 5.7 sürümünde destek düştü.

Linux çekirdeği bunu işlemle ilgili olmayan verilere genişletir.

Proc dosya sistemi aşağıdakiler arasında bir iletişim yöntemi sağlar: çekirdek alanı ve Kullanıcı alanı. Örneğin, GNU işlem raporlama yardımcı programının sürümü ps herhangi bir uzmanlık kullanmadan verilerini elde etmek için proc dosya sistemini kullanır. sistem çağrıları.

Tarih

UNIX 8. Baskı

Tom J. Killian uyguladı UNIX 8. Baskı (V8) sürümü / proc: başlıklı bir bildiri sundu "Dosya Olarak İşlemler" -de USENIX Haziran 1984'te. procfs tasarımı, ilerleme hızı süreç izleme için kullanılan sistem çağrısı. Ayrıntılı belgeler şurada bulunabilir: proc (4) kılavuz sayfası.

SVR4

Roger Faulkner ve Ron Gomes taşınan V8 / proc -e SVR4 ve adlı bir makale yayınladı "UNIX System V'deki İşlem Dosya Sistemi ve İşlem Modeli" Ocak 1991'de USENIX'te. Bu tür procf'ler, ps, ancak dosyalara yalnızca işlevlerle erişilebilir oku (), yazmak(), ve ioctl (). 1995 ile 1996 arasında Roger Faulkner, Solaris-2.6 için alt dizinleri olan yapılandırılmış / proc dosya sistemi sunan procfs-2 arayüzünü yarattı.

Plan 9

Plan 9 bir işlem dosya sistemi uyguladı, ancak V8'den daha ileri gitti. V8'in işlem dosya sistemi, işlem başına tek bir dosya uyguladı. Plan 9, bu işlevleri sağlamak için ayrı dosyalardan oluşan bir hiyerarşi yarattı ve dosya sisteminin gerçek bir parçası yaptı / proc yaptı.

4.4 BSD

4.4 BSD uygulamasını klonladı / proc Plandan 9.[kaynak belirtilmeli ] Şubat 2011 itibariyle, procfs FreeBSD'de aşamalı olarak kullanımdan kaldırılıyor.[1] Sayfasından kaldırıldı OpenBSD Mayıs 2015'te piyasaya sürülen 5.7 sürümünde, çünkü "her zaman yarış koşullarından muzdaripti ve artık kullanılmıyor".[2]

Solaris

Solaris'te / proc en başından beri mevcuttu. Solaris 2.6, 1996'da Roger Faulkner'dan procfs2'yi tanıttı.

Linux

Linux uygulaması, çalışan her işlem için bir dizin içerir. çekirdek adlı dizinlerde süreçler / proc / PID, nerede PID işlem numarasıdır. Her dizin, aşağıdakiler dahil olmak üzere bir işlem hakkında bilgi içerir:

  • / proc / PID / cmdline, işlemi başlangıçta başlatan komut.
  • / proc / PID / cwd, bir symlink için mevcut çalışma dizini sürecin.
  • / proc / PID / environ süreci etkileyen ortam değişkenlerinin adlarını ve değerlerini içerir.
  • / proc / PID / exe, orijinalin sembolik bağlantısı çalıştırılabilir dosya, hala varsa (bir işlem, orijinal yürütülebilir dosyası silindikten veya değiştirildikten sonra çalışmaya devam edebilir).
  • / proc / PID / fd, her açık için sembolik bir bağlantı içeren bir dizin dosya tanımlayıcı.
  • / proc / PID / fdinfo, her açık dosya tanımlayıcısının konumunu ve bayraklarını tanımlayan girdileri içeren bir dizin.
  • / proc / PID / mapshakkında bilgi içeren bir metin dosyası haritalandı dosyalar ve bloklar (yığın ve yığın gibi).
  • / proc / PID / memsürecin temsil eden ikili bir görüntü sanal bellek, yalnızca bir tarafından erişilebilir ilerleme hızı 'ing süreci.
  • / proc / PID / kök, süreç tarafından görüldüğü gibi kök yoluna bir sembolik bağlantı. Çoğu işlem için bu, işlem bir chroot hapishanesi.
  • / proc / PID / durum çalıştırma durumu ve bellek kullanımı dahil olmak üzere bir işlemle ilgili temel bilgileri içerir.
  • / proc / PID / göreviçeren bir dizin sabit bağlantılar bu süreçle başlatılan herhangi bir göreve (yani: ebeveyn).

(Kullanıcılar, PID gibi bir yardımcı program ile pgrep, pidof veya ps:

$ ls -l / proc /$(pgrep -n python3)/ fd # En son başlatılan `` python3 '' sürecinin tüm dosya tanımlayıcılarını listeleyintoplam 0lrwx ------ 1 baldur baldur 64 2020-03-18 12:31 0 -> / dev / pts / 3lrwx ------ 1 baldur baldur 64 2020-03-18 12:31 1 -> / dev / pts / 3lrwx ------ 1 baldur baldur 64 2020-03-18 12:31 2 -> / dev / pts / 3$ readlink / proc /$(pgrep -n python3)/exe # En son başlatılan `` python3 '' işlemini başlatmak için kullanılan yürütülebilir listeyi listeleyin /usr/bin/python3.8

)

/ proc ayrıca işlemle ilgili olmayan sistem bilgilerini de içerir, ancak 2.6 çekirdekte bu bilgilerin çoğu ayrı bir sözde dosya sistemine taşınır, sysfs altına monte / sys:

  • güç yönetimi moduna bağlı olarak (varsa), her iki dizinde, / proc / acpi veya / proc / apm, sysfs'den önce gelen ve güç yönetimi durumu hakkında çeşitli bilgiler içeren.
  • / proc / buddyinfohakkında bilgi dost algoritması bellek parçalanmasını yönetir.[3]
  • / proc / bus, bilgisayardaki çeşitli veri yollarını temsil eden dizinler içerir, örneğin PCI /USB. Bunun yerini büyük ölçüde almıştır. sysfs çok daha bilgilendirici olan / sys / bus altında.
  • / proc / fb, mevcut çerçeve arabelleklerin listesi
  • / proc / cmdlineçekirdeğe aktarılan önyükleme seçeneklerini vermek
  • / proc / cpuinfo, hakkında bilgi içeren İşlemci satıcısı (ve kullanıcıların CPU'yu tanımlamasına izin vermesi gereken CPU ailesi, model ve model adları) ve hızı (CPU saat hızı ), önbellek boyutu, kardeş sayısı, çekirdek sayısı ve CPU işaretleri. / proc / cpuinfo için bir değer içerirbogomips ", sıklıkla bir kıyaslama gibi CPU hızının bir ölçüsü olarak yanlış anlaşılır, ancak gerçekte herhangi bir mantıklı (son kullanıcılar için) değeri ölçmez. Çekirdek zamanlayıcı kalibrasyonunun bir yan etkisi olarak ortaya çıkar ve bağlı olarak oldukça değişken değerler verir CPU tipinde, eşit saat hızlarında bile.
$ cat / proc / cpuinfoişlemci: 0 vendor_id: AuthenticAMD cpu ailesi: 16 model: 6 model adı: AMD Athlon (tm) II X2 270 İşlemci adım: 3 mikro kod: 0x10000c8 cpu MHz: 2000.000 önbellek boyutu: 1024 KB ... işlemci: 1 vendor_id: AuthenticAMD cpu ailesi: 16 model: 6 model adı: AMD Athlon (tm) II X2 270 İşlemci adım: 3 mikro kod: 0x10000c8 cpu MHz: 800.000 önbellek boyutu: 1024 KB ...

Çok çekirdekli CPU'larda / proc / cpuinfo, aşağıdaki hesaplamayı temsil eden "kardeşler" ve "cpu çekirdekleri" alanlarını içerir:[4]

"kardeşler" = (CPU paketi başına HT) * (CPU paketi başına çekirdek sayısı) "cpu çekirdekleri" = (CPU paketi başına çekirdek sayısı)

Bir CPU paketi, birden çok çekirdeğe sahip olabilen fiziksel CPU anlamına gelir (tek çekirdek bir kişi için, çift ​​çekirdek iki kişilik, dört çekirdekli dört için). Bu, arasında bir ayrım sağlar hiper iş parçacığı ve çift çekirdekli, yani CPU paketi başına hiper iş parçacığı sayısı şu şekilde hesaplanabilir: kardeşler / CPU çekirdekleri. Bir CPU paketi için her iki değer de aynıysa, hiper iş parçacığı desteklenmez.[5] Örneğin, kardeşler = 2 ve "cpu çekirdekler" = 2 olan bir CPU paketi, çift çekirdekli bir CPU'dur, ancak hiper iş parçacığını desteklemez.

  • / proc / crypto, mevcut şifreleme modüllerinin listesi
  • / proc / devices, cihaz kimliğine göre sıralanmış bir karakter ve blok cihaz listesi, ancak / dev isim de
  • / proc / diskstatsmantıksal disk aygıtlarının her biri için bazı bilgiler (aygıt numaraları dahil) vermek
  • / proc / dosya sistemleri, listeleme sırasında çekirdek tarafından desteklenen dosya sistemlerinin listesi
  • / proc / interrupts, / proc / iomem, / proc / ioports ve dizin / proc / irq, çeşitli kullanarak cihazlar hakkında (fiziksel veya mantıksal) bazı ayrıntılar vermek sistem kaynakları
  • / proc / kmsg, çekirdekten çıkan mesajların tutulması[6]
  • / proc / meminfo, çekirdeğin belleğini nasıl yönettiğinin bir özetini içerir.
  • / proc / modüller, içindeki en önemli dosyalardan biri / proc, şu anda yüklü olan çekirdek modüllerinin bir listesini içerir. Bağımlılıkların bazı göstergelerini (her zaman tamamen doğru değildir) verir.
  • / proc / mounts, o anda bağlanmış aygıtların ve bunların bağlama noktalarının bir listesini (ve hangi dosya sisteminin kullanımda ve hangi bağlama seçeneklerinin kullanımda olduğunu) içeren self / mount'lara bir symlink.
  • / proc / net /özellikle ağ yığını hakkında yararlı bilgiler içeren bir dizin / proc / net / nf_conntrack, mevcut ağ bağlantılarını listeleyen (özellikle iptables FORWARD, ağ bağlantılarını yeniden yönlendirmek için kullanılır)
  • / proc / partitions, cihaz numaralarının bir listesi, boyutları ve / dev çekirdeğin mevcut olarak tanımladığı isimler bölümler
  • / proc / scsiüzerinden bağlanan cihazlar hakkında bilgi verir. SCSI veya RAID kontrolör
  • mevcut (çapraz geçiş) sürece sembolik bir bağlantı / proc / self (yani / proc / PID / nerede PID mevcut sürecinki).
  • / proc / slabinfo, Linux çekirdeğinde sık kullanılan nesneler için önbelleklerdeki istatistikleri listeliyor
  • / proc / swaps, aktif takas bölümlerinin bir listesi, bunların çeşitli boyutları ve öncelikleri
  • Dinamik olarak yapılandırılabilir çekirdek seçeneklerine erişim / proc / sys. Altında / proc / sys Çekirdeğin alanlarını temsil eden, okunabilir ve yazılabilir dizinler görünür sanal dosyalar.
    Örneğin, yaygın olarak başvurulan bir sanal dosya / proc / sys / net / ipv4 / ip_forwardçünkü güvenlik duvarları veya tünelleri yönlendirmek için gereklidir. Dosya ya bir '1' ya da bir '0' içerir: 1 ise, IPv4 yığını yerel ana bilgisayar için olmayan paketleri iletir, eğer 0 ise o zaman iletmez.
  • / proc / sysvipc, hafıza paylaşımını içeren ve arası iletişim (IPC) bilgileri.
  • / proc / ttymevcut terminaller hakkında bilgi içeren; / proc / tty / driver gibi görünüyor[orjinal araştırma? ] farklı türlerin listesi tty mevcut - her biri, her türden olanların bir listesidir
  • / proc / uptime, çekirdeğin önyüklemeden bu yana çalıştığı ve boş modda geçirdiği süre (her ikisi de saniye cinsinden)
  • / proc / version, Linux çekirdek sürümünü, dağıtım numarasını içeren, gcc sürüm numarası (çekirdeği oluşturmak için kullanılır) ve şu anda çalışan çekirdeğin sürümüyle ilgili diğer ilgili bilgiler
  • çeşitli donanım, modül yapılandırmaları ve çekirdekteki değişikliklere bağlı olarak diğer dosyalar.

Linux altında / proc kullanan temel yardımcı programlar, procps (/ proc süreçler) paketi ve yalnızca monte edilmiş bir / proc.

Tescilli Genişletmeler

Birkaç şirket ve proje, ek işlevler ekledi. / proc sistemleri için, ör. / proc / lcdön panel LCD ekranının içeriğini içeren bir dosya olabilir. Bu dosyaya yazılan metin ekranda görüntülenecektir.

Referanslar

  1. ^ "Procfs neden procstat lehine kullanımdan kaldırılıyor?". freebsd.org.
  2. ^ "OpenBSD 5.6 ve 5.7 arasındaki ayrıntılı değişiklikler". openbsd.org.
  3. ^ "3.2.2. / Proc / buddyinfo". centos.org. Arşivlenen orijinal 2 Eylül 2013 tarihinde. Alındı 23 Mayıs 2011.
  4. ^ Baron, Jason. "HT'ye karşı çift çekirdek".
  5. ^ "Linux / proc / cpuinfo'yu Anlamak". richweb.com. Arşivlenen orijinal 3 Nisan 2012'de. Alındı 21 Nisan 2015.
  6. ^ Nguyen, Binh (30 Temmuz 2004). "Linux Dosya Sistemi Hiyerarşisi". Binh Nguyen. s. 63. Alındı 18 Temmuz 2016. / proc / kmsg [:] Çekirdekten çıkan mesajlar. Bunlar ayrıca syslog'a da yönlendirilir.

Dış bağlantılar