Sonunda bir makale buldum! Temel bilgisayarın çalışma prensibini basit bir şekilde açıklayın

Unsplash'tan

Yeterince derin olduğu sürece hiçbir teknik sihirden ayırt edilemez.

Arthur Clark

İnsanlar çeşitli sorunları çözmek için sayısız makine icat etti. Mars gezginlerine gömülü bilgisayarlardan nükleer denizaltıların navigasyon sistemini manipüle eden bilgisayarlara kadar birçok bilgisayar türü vardır. Von Neumann ilk hesaplama modelini 1945'te önerdi. İster dizüstü bilgisayar ister telefon olsun, neredeyse tüm bilgisayarlar bu modelle aynı çalışma prensibini izler. Peki bilgisayarların nasıl çalıştığını biliyor musun? Bu makale şunları tartışacak:

Bilgisayar mimarisinin temellerini anlayın

Kodu, bilgisayarın çalıştırabileceği talimatlara dönüştürmek için derleyiciyi seçin

Bellek hiyerarşisine göre veri depolama hızını artırın

Sonuçta, programcı olmayanların gözünde programlama sihir kadar büyülü ve biz programcılar öyle düşünmüyoruz.

Mimari

Bilgisayar, verileri talimatlara göre işleyen bir makinedir ve esas olarak bir işlemci ve bir bellekten oluşur. Belleğe ayrıca, yönlendirilecek talimatları ve verileri saklamak için kullanılan RAM (Rasgele Erişim Belleği) denir. İşlemci ayrıca bellekten talimatları ve verileri alan ve ilgili hesaplamaları yapan CPU (Merkezi İşlem Birimi) olarak da adlandırılır. Sonra, bu iki bölümün nasıl çalıştığını tartışacağız.

Hafıza

Bellek birçok birime bölünmüştür ve her birim, dijital bir adresle tanımlanan az miktarda veriyi depolar. Hafızadaki verileri okurken veya yazarken, bir seferde bir ünite çalıştırılır.

Belirli bir depolama birimini okumak ve yazmak için, birimin dijital adresinin bulunması gerekir.

Hafıza elektriksel bir bileşen olduğu için, birim adresi sinyal hattı üzerinden ikili sayı olarak iletilir.

İkili sayılar 2 tabanı ile temsil edilir ve çalışma prensipleri aşağıdaki gibidir:

Her sinyal hattı, Şekil 7-1'de gösterildiği gibi, yüksek voltaj gösterge sinyali "1" ve düşük voltaj gösterge sinyali "0" ile bir bit iletir.

Belirli bir birim adresi için bellek iki işlem gerçekleştirebilir: Şekil 7-2'de gösterildiği gibi değerini almak veya yeni bir değeri saklamak. Hafıza, çalışma modunu ayarlamak için özel bir sinyal hattı içerir.

Her depolama birimi genellikle bayt adı verilen 8 bitlik bir ikili sayı depolar. "Okuma" moduna ayarlandığında, bellek ünitede depolanan baytları alır ve bunları Şekil 7-3'te gösterildiği gibi 8 veri iletim hattı üzerinden verir.

"Yazma" moduna ayarlandığında, bellek veri iletim hattından bir bayt alır ve bunu Şekil 7-4'te gösterildiği gibi karşılık gelen birime yazar.

Aynı veriyi ileten bir grup sinyal hattına veriyolu adı verilir. Adresleri iletmek için kullanılan 8 sinyal hattı bir adres veriyolu oluşturur ve bellek hücreleri arasında veri iletmek için kullanılan diğer 8 sinyal hattı bir veri yolu oluşturur. Adres veriyolu tek yönlüdür (yalnızca veri almak için), veri yolu ise çift yönlüdür (veri göndermek ve almak için).

Tüm bilgisayarlarda, CPU ve RAM her zaman veri alışverişi yapar: CPU, sürekli olarak RAM'den talimat ve veri alır ve bazen çıktıyı ve hesaplamaların bir kısmını Şekil 7-5'te gösterildiği gibi RAM'de depolar.

İşlemci

CPU, bu yazmaçlarda depolanan sayılar üzerinde basit matematiksel işlemler gerçekleştirebilen ve ayrıca RAM ve yazmaçlar arasında veri aktarabilen yazmaç adı verilen bir dizi dahili depolama birimi içerir. CPU'ya aşağıdaki tipik işlemleri gerçekleştirmesi talimatı verilebilir:

Kayıt yeri 220'den kayıt 3'e veri kopyalayın;

3. sicil ve 1. sicildeki numaraları ekleyin.

CPU'nun gerçekleştirebileceği tüm işlemlerin setine komut seti denir ve komut setindeki her işleme bir numara atanır. Bilgisayar kodu, temelde RAM'de sayılar biçiminde saklanan CPU işlemlerini temsil eden bir sayı dizisidir. Giriş / çıkış verileri, bazı hesaplamalar ve bilgisayar kodunun tümü RAM'de saklanır.

Kodun bir bölümünü RAM'de yeniden yazma talimatlarını ekleyerek, kod kendi kendini bile değiştirebilir; bu, bilgisayar virüslerinin virüsten koruma yazılımı tarafından algılanmasını önlemenin yaygın bir yoludur. Benzer şekilde, biyolojik virüsler, konağın bağışıklık sisteminden kaçınmak için kendi DNA'larını değiştirir.

Şekil 7-6, Intel 4004 kullanım kılavuzundan alınmıştır ve bazı CPU talimatlarını sayılarla eşleştirme yöntemini gösterir. Üretim süreçlerinin gelişmesiyle birlikte CPU giderek daha fazla işlemi desteklemektedir. Modern CPU'ların komut seti son derece büyüktür, ancak en önemli talimatlar onlarca yıl önce mevcuttur.

CPU'nun çalışması sonsuzdur, sürekli olarak bellekten talimatlar alır ve yürütür. Bu döngünün özü PC kaydıdır PC (program sayacı) "program sayacı" nın kısaltmasıdır. PC, yürütülecek sonraki komutun saklama adresini kaydetmek için kullanılan özel bir kayıttır. CPU'nun iş akışı aşağıdaki gibidir:

(1) PC tarafından belirtilen depolama adresinden talimat alın;

(2) PC otomatik olarak artar;

(3) Talimatların yürütülmesi;

(4) 1. adıma dönün.

CPU açıldığında PC varsayılan değere sıfırlanır Bu, bilgisayarda yürütülecek ilk talimatın adresidir. Bu talimat genellikle bilgisayarın temel işlevlerini yükleyen değişmez yerleşik bir programdır.

Birçok kişisel bilgisayarda bu programa BIOS (Temel Giriş Çıkış Sistemi) denir.

CPU açıldıktan sonra, kapanana kadar bu "çalıştır-çalıştır" döngüsünü yürütmeye devam edecektir. Bununla birlikte, CPU yalnızca sıralı, sıralı bir işlem listesini takip edebiliyorsa, süslü bir hesap makinesinden farklı değildir. CPU'nun büyüsü, bilgisayara yeni değerler yazması, böylece yürütme sürecini dallara ayırması veya bellekteki diğer konumlara "atlaması" talimatı verilebilmesidir. Bu şube şartlı olabilir. Örnek olarak aşağıdaki CPU talimatını alın: "Kayıt 10'a eşitse, PC'yi adres 200'e ayarlayın". Bu talimat şuna eşdeğerdir:

x = 0 ise compute_this () Başka compute_that ()

Bu kadar. İster bir web sitesi açın, ister bir bilgisayar oyunu oynayın veya bir elektronik tabloyu düzenleyin, ilgili hesaplamalar aynıdır.Bunlar, hafızadaki verileri yalnızca toplayabilen, karşılaştırabilen veya taşıyabilen bir dizi basit işlemdir.

Karmaşık bir süreci ifade etmek için çok sayıda basit işlem birleştirilebilir. Örnek olarak klasik "Space Invaders" oyununu ele alalım.Kodu yaklaşık 3000 makine talimatı içerir.

CPU saati 1980'lerin başlarında, "Uzay İstilacıları" çok popülerdi. Bu oyun 2 MHz CPU ile donatılmış bir atari makinesinde çalışır. "2 MHz", CPU'nun saniyede gerçekleştirebileceği temel işlemlerin sayısı olan CPU saatini temsil eder. Saat frekansı 2 megahertz (2 MHz) olan bir CPU, saniyede yaklaşık 2 milyon temel işlem gerçekleştirebilir. Bir makine talimatını tamamlamak 5 ila 10 temel işlem gerektirir, bu nedenle eski atari makineleri saniyede yüz binlerce makine talimatı çalıştırabilir.

Modern teknolojinin gelişmesiyle, sıradan masaüstü bilgisayarlar ve akıllı telefonlar genellikle saniyede yüz milyonlarca makine talimatı yürütebilen 2 GHz CPU ile donatılmıştır. Bugün, çok çekirdekli CPU'lar büyük ölçekli uygulamalara yerleştirilmiştir.Örneğin, dört çekirdekli 2 GHz CPU'lar saniyede yaklaşık 1 milyar makine talimatını yürütebilir. İleriye bakıldığında, CPU'larla donatılmış çekirdek sayısı artabilir.

CPU mimarisi Okuyucular, PlayStation oyun CD'lerinin neden masaüstü bilgisayarlarda çalışamayacağını düşündüler mi? İPhone uygulamaları neden Mac'te çalışmıyor? Nedeni basit, çünkü CPU mimarileri farklı.

X86 mimarisi artık bir endüstri standardı haline geldi, bu nedenle aynı kod çoğu kişisel bilgisayarda yürütülebilir. Ancak güç tasarrufu için gereklilikler dikkate alındığında, cep telefonunun benimsediği CPU mimarisi farklıdır. Farklı CPU mimarisi, farklı CPU komut setleri anlamına gelir ve ayrıca komutları sayılara kodlamanın farklı yolları anlamına gelir. Masaüstü bilgisayarın CPU'sunun talimatları cep telefonu CPU'sunun geçerli talimatları değildir ve bunun tersi de geçerlidir.

32 bit ve 64 bit mimari İlk CPU türü, 4 bit mimari kullanan Intel 4004'tür. Başka bir deyişle, bu tür bir CPU, bir makine talimatında 4 ikili sayıya kadar toplama, karşılaştırma ve hareket işlemleri gerçekleştirebilir. Intel 4004 yalnızca 4 veri yoluna ve adres yoluna sahiptir.

Çok geçmeden, 8-bit CPU'lar popüler hale geldi.Bu tip CPU, DOS çalıştıran ilk kişisel bilgisayarlarda kullanıldı. 1980'lerde ve 1990'larda, ünlü taşınabilir oyun konsolu Game Boy, 8 bit işlemciler kullandı. Bu tür bir CPU, bir komutta 8 bitlik ikili sayılar üzerinde çalışabilir.

Teknolojinin hızlı gelişimi 16 bit ve daha sonra 32 bit mimarilere yol açtı. 32 bitlik sayıları barındırmak için CPU kayıtları buna göre artar. Daha büyük yazmaçlar doğal olarak daha büyük veri yollarına ve adres yollarına yol açar: 32 sinyal hatlı adres veriyolu 232 bayt (4 GB) belleğe hitap edebilir.

İnsanların bilgi işlem gücüne duydukları susuzluk hiç durmadı. Bilgisayar programları giderek daha karmaşık hale geliyor ve giderek daha fazla bellek tüketiyor, 4 GB bellek artık yeterli değil. 4 GB'den fazla belleği adreslemek için 32 bitlik kayıtlar için uygun sayısal adresler kullanmak zordur ve bu, şu anda baskın olan 64 bit mimarilerin yükselişinin sebebidir. 64 bitlik bir CPU, tek bir talimatta son derece büyük sayılar üzerinde çalışabilirken, 64 bitlik kayıtlar adresleri büyük depolama alanlarında depolar: 264 bayt, 17 milyar gigabayttan (GB) fazlasına eşittir.

Big-endian ve little-endian Bazı bilgisayar tasarımcıları, sayıların soldan sağa RAM ve CPU'da depolanması gerektiğine inanırlar.Bu modele little-endian denir. Diğer bilgisayar tasarımcıları, verileri belleğe sağdan sola sırayla yazma eğilimindedir.Bu modele big-endian denir. Bu nedenle, 1-0-0-0-0-0-1-1 ikili dizisi ile temsil edilen sayılar da "endianness" a göre farklıdır.

Büyük endian düzeni: 27 + 21 + 20 = 131

Küçük endian: 20 + 26 + 27 = 193

Mevcut CPU'ların çoğu küçük endian modunu benimsiyor, ancak aynı zamanda big-endian modunu benimseyen birçok bilgisayar da var. Big-endian CPU'nun little-endian CPU tarafından üretilen verileri yorumlaması gerekiyorsa, sonsuzluk uyumsuzluklarını önlemek için önlemler alınmalıdır. Programcılar, özellikle ağ anahtarlarından gelen verileri ayrıştırırken doğrudan ikili sayılar üzerinde çalışır. Çoğu bilgisayar şu anda küçük endian modunu kullansa da, ilk ağ yönlendiricilerinin çoğu big-endian CPU'lar kullandığından, İnternet trafiği hala büyük endian bazında standartlaştırılmıştır. Little-endian modunda big-endian verilerini okurken bozuk karakterler görünecek veya tam tersi.

Öykünücü Bazı durumlarda, iPhone uygulamalarını iPhone olmadan test etmek veya popüler eski Süper Nintendo oyunlarını oynamak için bilgisayarda farklı CPU'lar için tasarlanmış belirli kodların çalıştırılması gerekir. Bu, simülatörler adı verilen yazılım aracılığıyla gerçekleştirilir.

Simülatör, hedef makineyi taklit etmek için kullanılır ve aynı CPU, RAM ve diğer donanıma sahip olduğunu varsayar. Simülatör programı komutların kodunu çözer ve bunları simüle edilmiş makinede yürütür. İki makinenin mimarileri farklıysa, diğer makineyi bir makinede simüle etmenin kolay olmadığı düşünülebilir. Neyse ki, modern bilgisayarlar önceki makinelerden çok daha hızlıdır, bu nedenle simülasyon imkansız değildir. Bilgisayarda sanal bir Game Boy oluşturmak için Game Boy emülatörünü kullanabiliriz ve ardından oyunu gerçek bir Game Boy gibi oynayabiliriz.

çevirmen

Bilgisayarı programlayarak, nükleer manyetik rezonans görüntüleme, ses tanıma, gezegen keşfi ve diğer birçok karmaşık görev tamamlanabilir. Bilgisayar tarafından gerçekleştirilen tüm işlemlerin, sonuçta, sayıların toplamına ve karşılaştırılmasına kadar özetlenen basit CPU komutlarıyla tamamlanması gerektiğine dikkat etmek önemlidir. Ve Web tarayıcıları gibi karmaşık bilgisayar programları, bu tür milyonlarca hatta milyarlarca makine talimatı gerektirir.

Ancak CPU komutlarını nadiren doğrudan program yazmak için kullanırız ve bu şekilde gerçekçi bir üç boyutlu bilgisayar oyunu geliştiremeyiz. Komutları daha "doğal" ve kompakt bir şekilde ifade etmek için insanlar programlama dilleri yarattılar. Bu dillerde kod yazıyoruz ve ardından komutları CPU'nun yürütebileceği makine komutlarına dönüştürmek için derleyici adı verilen bir program kullanıyoruz.

Derleyicinin amacını açıklamak için basit bir matematiksel analoji kullanıyoruz. Birine bir soru sorduğumuzu ve ondan 5'in faktöriyelini hesaplamasını istediğimizi varsayalım.

5! =?

Ancak katılımcı faktöryel öğenin ne olduğunu anlamıyorsa, böyle sorular sormak anlamsızdır. Sorunu yeniden formüle etmek için daha basit işlemler kullanmalıyız.

5 × 4 × 3 × 2 × 1 =?

Ancak, yanıtlayan yalnızca ekleme yaparsa ne olur? Sorunun formülasyonunu daha da basitleştirmeliyiz.

5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 =?

İfade hesaplama şekli ne kadar basitse, o kadar fazla işlemin gerekli olduğu görülebilir. Aynısı bilgisayar kodu için de geçerlidir. Derleyici, bir programlama dilindeki karmaşık komutları eşdeğer CPU komutlarına dönüştürür. Güçlü harici kitaplıklar ile birleştirildiğinde, milyarlarca CPU talimatı içeren karmaşık programları, nispeten az kod satırı ile ifade etmek mümkündür ve bu kodların anlaşılması ve değiştirilmesi kolaydır.

Bilgisayarların babası Alan Turing, basit makinelerin hesaplanabilen her şeyi hesaplayabileceğini keşfetti. Makine genel bilgi işlem gücüne sahipse, aşağıdakileri yapmak için talimatları içeren bir programı takip edebilmelidir:

Hafızadaki verileri okuyun ve yazın;

Koşullu dalı çalıştır: Depolama adresi belirli bir değere sahipse, programdaki başka bir noktaya atlayın.

Bu genel bilgi işlem gücü Turing'e sahip makineleri tamamladık. Hesaplamanın karmaşıklığına veya zorluğuna bakılmaksızın, basit okuma / yazma / dal talimatları ile ifade edilebilir. Yeterli zaman ve depolama alanı tahsis edildiği sürece, bu talimatlar her şeyi hesaplayabilir.

İnsanlar yakın zamanda MOV (Veri Transferi) adlı bir CPU talimatının Turing tamamlandığını keşfettiler. Bu, yalnızca MOV komutlarını çalıştırabilen bir CPU'nun işlevsel olarak tam bir CPU'dan farklı olmadığı anlamına gelir: başka bir deyişle, herhangi bir tür kod kesinlikle MOV komutları aracılığıyla ifade edilebilir.

Bu önemli kavram, basit olsun ya da olmasın, bir program bir programlama dilinde kodlanabiliyorsa, herhangi bir Turing-complete makinesinde yeniden yazılabilir ve çalıştırılabilir. Derleyici, kodu karmaşık bir dilden basit bir dile otomatik olarak dönüştürebilen büyülü bir programdır.

işletim sistemi

Esasen, derlenen bilgisayar programı bir dizi CPU talimatından oluşur. Daha önce belirtildiği gibi, bir masaüstü bilgisayar için derlenen kod, ikisi farklı CPU mimarileri kullandığı için bir akıllı telefonda çalıştırılamaz. Ancak, programın çalışması için bilgisayarın işletim sistemiyle iletişim kurması gerektiğinden, derlenen program aynı CPU mimarisini paylaşan iki bilgisayarda kullanılamaz.

Dış dünya ile iletişim kurmak için, programın dosya açma, ekranda mesaj görüntüleme ve ağ bağlantılarını açma gibi giriş ve çıkış işlemlerini gerçekleştirmesi gerekir. Ancak farklı bilgisayarlar farklı donanım kullanır, bu nedenle program tüm farklı ekran türlerini, ses kartlarını veya ağ kartlarını doğrudan destekleyemez.

Bu nedenle program çalıştırılacak işletim sistemine bağlıdır. İşletim sistemi sayesinde program farklı donanımları zahmetsizce kullanabilir. Program, işletim sisteminden gerekli giriş / çıkış işlemlerini gerçekleştirmesini istemek için özel sistem çağrıları oluşturur. Derleyici, girdi / çıktı komutlarını uygun sistem çağrılarına dönüştürmekten sorumludur.

Bununla birlikte, farklı işletim sistemleri genellikle uyumsuz sistem çağrıları kullanır. Örneğin, macOS veya Linux ile karşılaştırıldığında, Windows ekranda bilgi yazdırmak için farklı sistem çağrıları kullanır.

Bu nedenle, Windows'ta x86 işlemcileri kullanılarak derlenen programlar, x86 işlemcileri kullanan Mac'lerde çalışamaz. Derlenen kod, belirli bir CPU mimarisini hedeflemenin yanı sıra belirli bir işletim sistemini de hedefleyecektir.

Derleme optimizasyonu

İyi derleyiciler, ürettikleri makine kodunu optimize etmeye adanmıştır. Derleyici, kodun bir kısmını değiştirerek yürütme verimliliğinin iyileştirilebileceğini düşünürse, bununla ilgilenecektir. Derleyici, ikili çıktı oluşturmadan önce yüzlerce optimizasyon kuralı uygulamaya çalışabilir.

Bu nedenle, mikro optimizasyonu kolaylaştırmak için kodun okunması kolay hale getirilmelidir. Derleyici sonunda tüm ince optimizasyonları tamamlayacaktır. Örneğin, bazı insanlar aşağıdaki kodu eleştiriyor.

fonksiyon faktöriyel (n) eğer n > 1 faktöriyel dönüş (n-1) * n Başka dönüş 1

Aşağıdaki değişikliklerin yapılması gerektiğine inanıyorlar:

fonksiyon faktöriyel (n) sonuç 1 n iken > 1 sonuç sonuç * n n n-1 dönüş sonucu

Özyineleme kullanmadan faktöryel işlevi yürütmenin daha az bilgi işlem kaynağı tüketeceği doğrudur, ancak bu nedenle kodu değiştirmek için hala bir neden yoktur. Modern derleyiciler, aşağıda gösterildiği gibi, basit özyinelemeli işlevleri otomatik olarak yeniden yazar.

i x + y + 1 j x + y

İki x + y hesaplamasından kaçınmak için, derleyici yukarıdaki kodu şu şekilde yeniden yazar:

t1 x + y i t1 + 1 j t1

Açık ve açıklayıcı kod yazmaya odaklanın. Performans sorunları ortaya çıkarsa, koddaki darboğazları bulmak için analiz araçlarını kullanabilir ve sorunlu kodu hesaplamak için daha iyi bir yöntem kullanmaya çalışabilirsiniz. Ek olarak, gereksiz mikro işlemlerle çok fazla zaman kaybetmekten kaçının.

Ancak bazı durumlarda, daha sonra tartışılacak olan derlemeyi atlamak istiyoruz.

Komut dosyası dili

Bazı diller çalıştırıldığında doğrudan makine koduna derlenmez. Bu dillere JavaScript, Python ve Ruby dahil komut dosyası dilleri denir. Bir komut dosyası dilinde kod, CPU yerine bir yorumlayıcı tarafından yürütülür ve yorumlayıcının kodu çalıştıran makineye yüklenmesi gerekir.

Yorumlayıcı kodu gerçek zamanlı olarak yorumlar ve yürütür, bu nedenle çalışma hızı genellikle derlenen koddan çok daha yavaştır. Öte yandan, programcı herhangi bir zamanda derleme işlemini beklemeden kodu hemen çalıştırabilir.

Çok büyük projeler için derleme birkaç saat sürebilir.

Google mühendisleri, programcıların çok fazla zaman "kaybetmesine" neden olacak şekilde büyük miktarda kod derlemeye devam etmelidir (Şekil 7-9). Derlenen ikili dosyaların daha iyi performansa sahip olmasını sağlama ihtiyacı nedeniyle, Google bir komut dosyası diline geçemez. Şirket bu amaçla, yüksek performansı korurken son derece hızlı derleyen Go dilini geliştirdi.

Demontaj ve tersine mühendislik

Derlenmiş bir bilgisayar programı verildiğinde, kaynak kodu derlemeden önce geri yüklenemez. Ancak ikili programları çözebilir ve CPU komutlarını kodlamak için kullanılan sayıları insan tarafından okunabilir komut dizilerine dönüştürebiliriz. Bu işleme demontaj denir.

Ardından, bu CPU talimatlarına bakabilir ve kullanımlarını analiz etmeye çalışabilirsiniz Buna tersine mühendislik denir. Sistem çağrılarını ve yaygın olarak kullanılan işlevleri otomatik olarak algılayabilir ve bunlara açıklama ekleyebilirler. Demontaj araçlarının yardımıyla, bilgisayar korsanları ikili kodun her yönünü iyi bir şekilde kavrar. En iyi BT şirketlerinin çoğunun, rakiplerin yazılımlarını incelemek için gizli ters mühendislik laboratuvarlarına sahip olduğuna inanıyorum.

Yeraltı korsanları, kodun hangi bölümünün yazılım lisanslarını doğrulamaktan sorumlu olduğunu belirlemek için genellikle Windows, Photoshop ve Grand Theft Auto gibi yetkili programlardaki ikili kodu analiz eder. Bilgisayar korsanı ikili kodu değiştirdi, ona bir talimat ekledi ve lisansı doğruladıktan sonra kodun çalıştırılan kısmına doğrudan atladı. Değiştirilmiş ikili kodu çalıştırırken, lisansı kontrol etmeden önce enjekte edilen JUMP komutunu alır, böylece para ödemeden yasa dışı korsan kopyaları çalıştırabilir.

Gizli devlet istihbarat kurumlarında, güvenlik araştırmacıları ve mühendislerinin iOS, Windows ve Internet Explorer gibi popüler tüketici yazılımlarını incelemeleri için laboratuvarlar da vardır. Siber saldırılara veya yüksek değerli hedeflere izinsiz girişlere karşı savunma yapmak için bu programlarda olası güvenlik açıklarını ararlar. Bu tür saldırılar arasında en bilineni, Amerika Birleşik Devletleri ve İsrail istihbarat teşkilatları tarafından geliştirilen bir siber silah olan Stuxnet virüsüdür. Stuxnet, yeraltı füzyon reaktörlerindeki bilgisayarları enfekte ederek ve kontrol ederek İran'ın nükleer programını erteledi.

Açık kaynaklı yazılım

Daha önce de belirtildiği gibi, programın orijinal talimatlarını ikili çalıştırılabilir dosyaya göre analiz edebiliriz, ancak ikili dosyayı oluşturmak için kullanılan orijinal kaynak kodunu kurtaramayız.

Orijinal kaynak kodu olmadan, ikili dosya daha küçük bir şekilde kırılacak şekilde biraz değiştirilebilse bile, programda herhangi bir büyük değişiklik yapmak (yeni özellikler eklemek gibi) aslında imkansızdır. Bazı insanlar işbirliği içinde kod oluşturma yöntemine hayranlık duyarlar, bu nedenle başkalarının değiştirmesi için kaynak kodlarını açar. "Açık kaynak" kavramının ana kavramı şunun içinde yatmaktadır: herkesin özgürce kullanabileceği ve değiştirebileceği yazılım. Linux tabanlı işletim sistemleri (Ubuntu, Fedora ve Debian gibi) açık kaynak iken, Windows ve macOS kapalı kaynaktır.

Açık kaynak işletim sistemleriyle ilgili ilginç bir şey, herkesin güvenlik açıklarını bulmak için kaynak kodunu kontrol edebilmesidir. Devlet kurumlarının, günlük tüketici yazılımlarındaki yamalanmamış güvenlik açıkları yoluyla milyonlarca sivili sömürdüğü ve izlediği doğrulandı.

Ancak açık kaynaklı yazılımlar için kod daha fazla ilgi gördü, bu nedenle kötü niyetli üçüncü şahısların ve devlet kurumlarının gözetleme arka kapılarını yerleştirmeleri zor. MacOS veya Windows kullanırken, kullanıcılar Apple veya Microsoft'un kendi güvenlikleri için bir tehlike oluşturmayacağına inanmalı ve ciddi güvenlik ihlallerini önlemek için ellerinden geleni yapmalıdır. Açık kaynak sistemi kamu gözetimine alınır, böylece güvenlik açıklarının göz ardı edilme olasılığı büyük ölçüde azalır.

Bellek hiyerarşisi

Bir bilgisayarın işleyişinin, CPU'nun yalnızca CPU kayıtlarında depolanan veriler üzerinde çalışabilen basit komutlar yürütmesini sağlamak için kaynatılabileceğini biliyoruz. Ancak, yazmaçların depolama alanı genellikle 1000 bayttan daha azdır, bu da verilerin CPU yazmaçları ve RAM arasında sürekli olarak aktarılması gerektiği anlamına gelir.

Bellek erişim hızı çok yavaşsa, CPU, RAM'in veri aktarımını tamamlamasını beklemek için boşta kalmaya zorlanacaktır. CPU'nun hafızadaki verileri okuyup yazması için gereken süre, doğrudan bilgisayarın performansı ile ilgilidir. Bellek hızını artırmak, bilgisayarın çalışmasını hızlandırmaya yardımcı olabilir ve ayrıca CPU'nun verilere erişme hızını artırabilir. CPU, yazmaçlarda depolanan verilere neredeyse gerçek zamanlı hızda (bir döngü içinde) erişebilir, ancak RAM'e erişim çok daha yavaştır.

Saat frekansı 1 GHz olan bir CPU için, bir döngünün süresi yaklaşık olarak saniyenin milyarda biridir, bu kitaptan okuyucunun gözlerine ışığın girmesi için geçen süredir.

İşlemci ve bellek arasındaki boşluk

Son yıllardaki teknolojik gelişmeler CPU hızının katlanarak artmasına neden oldu. Bellek hızı da artmış olsa da, çok daha yavaştır. CPU ve RAM arasındaki bu performans boşluğuna "işlemci ve bellek arasındaki boşluk" denir. Çok sayıda CPU talimatı çalıştırabiliriz, bu yüzden bunlar "ucuz" ve RAM'den veri almak daha uzun sürüyor, bu yüzden "pahalıdırlar." İkisi arasındaki boşluk giderek arttıkça, bellek erişim verimliliğini artırmanın önemi giderek daha belirgin hale geliyor.

Modern bilgisayarlar, RAM'den veri almak için yaklaşık 1000 CPU döngüsüne (yaklaşık 1 mikrosaniye) ihtiyaç duyar. Bu hız inanılmazdı, ancak CPU kayıtlarına erişme süresine kıyasla hala yavaş. Hesaplama için gereken RAM işlemlerinin sayısını azaltmak, bilgisayar bilimcilerinin izlediği amaçtır.

Ses dalgalarının birbirine bakan iki insan arasında dolaşması yaklaşık 10 mikrosaniye sürer.

Zamansal yerellik ve mekansal yerellik

RAM'e erişimi en aza indirmeye çalışırken, bilgisayar bilimcileri iki gerçeği fark etmeye başladılar.

Zaman konumu: Belirli bir depolama adresine erişilirken, adrese kısa süre sonra tekrar erişilebilir.

Uzamsal konum: Belirli bir depolama adresine erişilirken, bitişik adrese yakında erişilebilir.

Bu nedenle, bu depolama adreslerini CPU kayıtlarında depolamak, RAM üzerindeki "pahalı" işlemlerin çoğundan kaçınmaya yardımcı olur. Bununla birlikte, CPU yongalarını tasarlarken, endüstri mühendisleri yeterli dahili kayıtları barındırmanın uygun bir yolunu bulamadılar, ancak yine de zaman yerelliğini ve uzay yerelliğini nasıl etkili bir şekilde kullanacaklarını keşfettiler. Bu daha sonra tartışılacaktır.

Seviye 1 önbellek

Birinci seviye önbellek olan CPU'ya entegre çok hızlı bir yardımcı hafıza oluşturmak mümkündür. Verileri L1 önbelleğinden yazmacıya okumak, verileri doğrudan kayıttan almaktan yalnızca biraz daha yavaştır.

Birinci seviye önbelleği kullanarak, CPU kaydına erişilebilen bellek adresinin içeriğini kopyalar, böylece verileri CPU kaydına son derece hızlı bir hızda yükleriz. Verileri birinci seviye önbellekten kayıt defterine okumak sadece 10 CPU döngüsü alır, bu da RAM'den veri almaktan neredeyse yüz kat daha hızlıdır.

Yaklaşık 10 KB'lık bir 1. seviye önbellek ve zaman konumunun ve alan konumunun makul kullanımıyla, RAM erişim çağrılarının yarısından fazlası yalnızca önbellek aracılığıyla gerçekleştirilebilir. Bu yenilik, bilgi işlem teknolojisinde devrim yarattı. İlk seviye önbellek, CPU'nun bekleme süresini büyük ölçüde kısaltabilir ve CPU'nun boşta kalmak yerine gerçek hesaplamalara daha fazla zaman harcamasına izin verir.

İkincil önbellek

Birinci seviye önbelleğin kapasitesinin artırılması, RAM'den veri alma işlemini azaltmaya yardımcı olur ve böylece CPU'nun bekleme süresini azaltır. Bununla birlikte, birinci seviye önbelleği artırmak da hızını düşürecektir. İlk seviye önbellek yaklaşık 50 KB'ye ulaştığında, kapasitesini artırmaya devam etmek son derece maliyetli olacaktır. Daha iyi bir çözüm, ikinci seviye önbellek adı verilen bir önbellek oluşturmaktır. İkinci düzey önbellek biraz daha yavaştır, ancak kapasitesi birinci düzey önbellekten çok daha büyüktür. Modern CPU'ların ikinci düzey önbelleği yaklaşık 200 KB'dir ve verileri ikinci düzey önbellekten CPU kayıtlarına okumak yaklaşık 100 CPU döngüsü alır.

En olası adresleri birinci düzey önbelleğe ve daha olası adresleri ikinci düzey önbelleğe kopyalıyoruz. CPU, birinci seviye önbellekte bir depolama adresi bulamazsa, yine de ikinci seviye önbellekte arama yapmayı deneyebilir. CPU'nun RAM'e yalnızca adres ne birincil önbellekte ne de ikincil önbellekte olmadığı zaman erişmesi gerekir.

Şu anda, birçok üretici L3 önbelleğe sahip işlemcileri piyasaya sürdü. Üçüncü düzey önbelleğin kapasitesi, ikinci düzey önbelleğin kapasitesinden daha büyüktür, ikinci düzey önbellek kadar hızlı olmasa da, yine de RAM'den çok daha hızlıdır. Seviye 1 / Seviye 2 / Seviye 3 önbellekler çok önemlidir, CPU yongasının içindeki silikon alanın çoğunu kaplarlar. Şekil 7-11'e bakın.

Düzey 1 / Düzey 2 / Düzey 3 önbelleğinin kullanılması bilgisayarın performansını önemli ölçüde artırabilir. 200 KB L2 önbellek ile, CPU tarafından verilen depolama isteklerinin% 10'undan daha azı doğrudan RAM'den alınmalıdır.

Okuyucular ileride bir bilgisayar satın aldıklarında, lütfen seçilen CPU için birincil / ikincil / üçüncül önbelleğin kapasitesini karşılaştırmayı unutmayın. CPU ne kadar iyi olursa, önbellek o kadar büyük olur. Genel olarak konuşursak, daha düşük saat frekansı ancak daha büyük önbellek kapasitesine sahip bir CPU seçmeniz önerilir.

Birinci seviye hafıza ve ikinci seviye hafıza

Daha önce bahsedildiği gibi, bilgisayarlar hiyerarşik bir yapıda düzenlenmiş farklı bellek türleriyle donatılmıştır. En iyi performans gösteren belleğin kapasitesi sınırlıdır ve son derece pahalıdır. Hiyerarşinin aşağısında, gittikçe daha fazla depolama alanı mevcuttur, ancak erişim hızı gittikçe yavaşlamaktadır.

Bellek hiyerarşisinde, CPU kayıtları ve önbelleği altında, şu anda çalışan tüm işlemlerin verilerini ve kodlarını depolamaktan sorumlu olan RAM bulunur. 2017 itibariyle bilgisayarların RAM kapasitesi genellikle 1 GB ile 10 GB arasındadır. Ancak çoğu durumda RAM, işletim sisteminin ve çalışan tüm programların ihtiyaçlarını karşılamayabilir.

Bu nedenle, bellek hiyerarşisine girmeli ve RAM altındaki sabit diski kullanmalıyız. 2017 itibariyle, bilgisayarlarla donatılmış sabit disklerin kapasitesi, şu anda çalışan tüm program verilerini tutmaya yetecek kadar genellikle yüzlerce gigabayttır. RAM doluysa, mevcut boş veriler, bellek alanının bir kısmını boşaltmak için sabit diske taşınacaktır.

Sorun, sabit diskin hızının çok yavaş olmasıdır, genellikle disk ve RAM arasında veri aktarmak için 1 milyon CPU döngüsü (1 milisaniye) a gerektirir. Diskten verilere erişim hızlı görünebilir, ancak RAM'e erişimin yalnızca 1.000 döngü sürdüğünü, diske erişimin ise 1 milyon döngü gerektirdiğini unutmayın. RAM genellikle birinci düzey bellek olarak adlandırılır ve programları ve verileri depolayan diske ikinci düzey bellek denir.

Standart fotoğraflar ışığı yaklaşık 4 milisaniyede yakalar.

CPU, ikincil belleğe doğrudan erişemez. İkinci seviye hafızada saklanan programı çalıştırmadan önce, birinci seviye hafızaya kopyalanmalıdır. Aslında, bilgisayar her başlatıldığında, işletim sisteminin bile diskten RAM'e kopyalanması gerekir, aksi takdirde CPU çalışamaz.

RAM'in asla kurumayacağından emin olun Tipik faaliyetler sırasında, bilgisayar tarafından işlenen tüm verilerin ve programların RAM'e yüklenmesini sağlamak önemlidir, aksi takdirde bilgisayar disk ve RAM arasında veri alışverişine devam eder. Bu işlemin aşırı yavaş hızı nedeniyle, bilgisayarın performansı ciddi şekilde düşecek ve hatta kullanılamaz hale gelecektir. Bu durumda, bilgisayarın veri aktarımını beklemek için daha fazla zaman harcaması gerekir ve gerçek hesaplamaları yapamaz.

Bilgisayar diskten RAM'e sürekli olarak veri okuduğunda, jitter modunda olduğu söylenir. Sunucu sürekli izlenmelidir.Sunucu RAM'e yüklenemeyen verileri işlemeye başlarsa, seğirme tüm sunucunun çökmesine neden olabilir. Bankaların veya yazar kasaların önünde uzun kuyruklar olacak ve garsonların gergin bilgisayar sistemini suçlamaktan başka seçenekleri yok. Yetersiz bellek, sunucu arızasının ana nedenlerinden biri olabilir.

Harici bellek ve üçüncül bellek

Bellek hiyerarşisini analiz etmeye devam ediyoruz. Ağa bağlandıktan sonra bilgisayar, diğer bilgisayarlar tarafından yönetilen depolamaya erişebilir. Ya yerel ağda ya da İnternette (yani bulutta). Ancak bu verilere erişmek daha uzun sürer: yerel diski okumak 1 milisaniye, ağdan veri almak ise yüzlerce milisaniye alabilir. Bir ağ paketinin bir bilgisayardan diğerine iletilmesi yaklaşık 10 milisaniye sürer İnternet üzerinden iletilirse, göz açıp kapayıncaya kadar 200 ila 300 milisaniye sürer.

Depolama hiyerarşisinin en altında, her zaman çevrimiçi olmayan ve erişilebilir olmayan üçüncü depolama düzeyi bulunur. Milyonlarca gigabayt veriyi bir kaset veya CD'de saklamak daha ucuzdur, ancak bu tür medyadaki verilere erişmek için medyayı dakikalar hatta günler sürebilecek bir tür okuma cihazına yerleştirmeniz gerekir. (BT departmanının Cuma gecesi kasetteki verileri yedeklemesini sağlamaya çalışın ...). Bu nedenle, üçüncül depolama yalnızca nadiren erişilen verileri arşivlemek için uygundur.

Depolama teknolojisinin gelişme trendi

Bir yandan "hızlı" bellek (bellek hiyerarşisinin tepesinde) için kullanılan teknolojiyi önemli ölçüde geliştirmek zordur, öte yandan "yavaş" belleğin hızı gittikçe daha hızlı ve ucuzlamaktadır. Sabit disk depolamanın maliyeti on yıllardır düşüyor ve bu eğilim devam edecek gibi görünüyor.

Yeni teknolojiler de disklerin hızını artırdı. İnsanlar dönen disklerden, hareketli parçaları olmayan ve dolayısıyla daha hızlı, daha güvenilir ve daha fazla güç verimli olan katı hal sürücülerine (SSD'ler) geçiyor.

SSD teknolojisini kullanan diskler daha ucuz ve daha hızlı hale geliyor, ancak yine de pahalılar. Bunun ışığında, bazı üreticiler hem SSD hem de manyetik teknolojiyi kullanan hibrit diskler piyasaya sürdü. İkincisi, daha sık erişilen verileri SSD'de ve daha az sıklıkla erişilen verileri daha yavaş diskte depolar. Sık erişilmeyen verilere sık sık erişmeniz gerektiğinde, verileri hibrit sürücüdeki daha hızlı SSD'ye kopyalayın. Bu, CPU'nun RAM erişim hızını artırmak için dahili önbelleği kullanma tekniğine oldukça benzer.

özet

Bu bölüm bazı temel bilgisayar çalışma ilkelerini tanıtır. Hesaplanabilen her şey basit talimatlarla temsil edilebilir. Karmaşık hesaplama komutlarını CPU'nun yürütebileceği basit talimatlara dönüştürmek için, derleyici adı verilen bir program gereklidir. Bilgisayar yalnızca karmaşık hesaplamalar yapabilir çünkü CPU birçok temel işlemi gerçekleştirebilir.

Bilgisayarın işlemcisi hızlı, ancak bellek nispeten yavaştır. CPU, belleğe rastgele erişmez, ancak uzamsal yerellik ve zamansal yerellik ilkelerini izler. Bu nedenle, daha yüksek erişim frekansına sahip veriler daha hızlı bir bellekte önbelleğe alınabilir. Bu ilke, birden çok önbellek düzeyine uygulanmıştır: birinci önbellek düzeyinden üçüncü bellek düzeyine, vb.

Bu makalede tartışılan önbelleğe alma ilkeleri birçok senaryoya uygulanabilir. Uygulamaların sıklıkla kullandığı verileri tespit etmek ve verilerin bu kısmına erişim hızını artırmaya çalışmak, bilgisayar programlarının çalışma süresini kısaltmak için en çok kullanılan stratejilerden biridir.

-Bu makale "Bilgisayar Bilimi Özü" nden seçilmiştir

Bu, önemli bilgisayar bilgi noktaları için bir başvuru kılavuzudur. Kuzey Amerika kolejlerinde ve üniversitelerinde, bazı sınavların kopya kâğıtları taşımasına izin verilir (Çince'ye "kopya kağıtları" veya "hızlı kontrol kağıtları" denilebilir) ve öğrenciler önemli olduğunu düşündükleri formüller veya bilgi noktaları yazabilirler. Bir bakıma, "Bilgisayar Biliminin Özü" çok iyi bir kitap. Turingin "Algoritma Şeması" na benzer şekilde bu kitap, bilgisayar bilimi alanındaki önemli bilgi noktalarını sıralıyor ve soyut teorileri somutlaştırmaya ve karmaşık sorunları basitleştirmeye çalışıyor. Tabii ki, bazı önerilerde bulunmak istiyorum ve okuyucuların bilgisayar bilimine ilgisini uyandırdıktan sonra diğer materyalleri derinlemesine okuyabileceğimi umuyorum.

içindekiler

Charles Babbage'ın analitik makinesinin şematik diyagramı

Bölüm 1 Ön Bilgi

Bölüm 2 Karmaşıklık

Bölüm 3 Strateji

Bölüm 4 Veriler

Bölüm 5: Algoritmalar

Bölüm 6 Veritabanı

Bölüm 7 Bilgisayar

Bölüm 8 Program Tasarımı

ek

Sonuç

postscript

Yeni yıl ve yeni atmosfer! Yılbaşı Günü hangi ev aletlerini almaya değer?
önceki
"Lütfen Buzdolabı" nın beşinci sezonu geri dönüyor! Kalpleri ısıtan anılar, öldürme, iyileştirme ve gözyaşları
Sonraki
"Altın İnci Mami", Chongqing Tanıtım Konferansı'nda yer aldı, başrol oyuncuları rol atılımından bahsetti
Son zamanlarda en popüler 55 inç akıllı TV önerisi olan Yeni Yıl Günü'nde satın alın
Liu Wen, spot ışığını çalmak için yetenekli bir takım elbise ve uzun bacaklar giyiyor
Kitap Listesi // Bu BT kitaplarının, 9.0 Programlama Dili'nin üzerinde Douban puanıyla süper iyi bir üne sahiptir.
"Harika Noel Şirketi" nihai posteri yayınladı
Xiaomi, BAIC, stratejik işbirliği, gençlerin ilk arabası; JD.com ile kanlı bir savaş, Suning bir kurye festivali düzenledi; Meizu yöneticisi Yang Zhe: Cep telefonu alırken neden sadece konfigürasyona
"Game of the Brave" 12 Ocak'ta başlıyor, Dashi Johnson, canavarlar grubuyla savaşmak için en güçlü karakteri getiriyor
Infineon, STMicroelectronics'i satın aldığını duyurdu, Avrupa dünya çapında bir yarı iletken devi doğuracak
Famicom puanı: "The Crew 2" için 33 puan
Xiao Ai hoparlörleri 5 milyardan fazla kez uyandı ve Xiao Ainin sınıf arkadaşları 8 milyarı aştı
İz arayan kişi bizim göremediklerimizi görebilir
"Prens uyuyakalırsa" en güzel aşkı yorumlamak için Chen Bolin ve Lin Yun'un son afişini el ele gösterdi.
To Top