Kopyaladığım tüm veriler mi geçiyor yoksa daha doğrudan bir yol var mı?
Kopyaladığım tüm veriler mi geçiyor yoksa daha doğrudan bir yol var mı?
Yanıtlar:
Zor biri! Veriler gerçekte CPU'dan geçmiyor.
Veriler ve kritik 1'ler ve 0'lar yonga setinden veya özel G / Ç çiplerinden ve belleğinden geçer, ancak dosyaları kopyalarken, kopyalama yapma komutu işlemci tarafından çalıştırılır.
Önünüzde bir veri (veri), kollarınız (Chipset / I / O çipi) ve beyninizin (CPU) olduğunu hayal edin. Aslında nesneyi hareket ettirmek için beyninizi kullanmazsınız, beyniniz nesneyi hareket ettirmek için kollarınıza "komutu" uygular.
interrupt
bir bir IO komut zaman block device
böyle bir USB bellek gibi gelmiştir tamamlandı . CPU daha sonra kopyalamayı yürütmeye devam eder. Aslında, CPU'nun yaptığı şey ioctl
kopyalanacak aygıt sürücülerine chunks
(gerçek ad) arabirim oluşturan çekirdek kodunu çalıştırmaktır DMA
. CPU ayrıca bir çekirdek kodu yürütme perspektifinden işler asynchronous IO
ve sync IO
biraz farklıdır.
Akıllı kanallara sahip bir ana bilgisayarda cpu, kanallara sadece kopyayı yapmasını söylerdi. Çok verimlidir ve CPU ek yükü ile hızlı büyük yedeklemeler sağlar.
Ne yazık ki, akıllı kanallarımız yok, bu yüzden CPU aşağıdakine benzer bir döngüye giriyor:
her dosya için (dev1); yapmak CreateFile (dev2); copyfilecontent (dev1, dev2); son;
Çok fazla küçük dosya, özellikle aynı dizinde çok fazla dosya olmadığı sürece CPU yükü o kadar yüksek değildir. Dosya oluşturma işlemi genellikle en yüksek ek yüke sahiptir. Diskten diske kopyalama, her diske önceden var olan bir dosya gibi davranır.