Unix Spell'in 64 kB RAM'de nasıl çalıştırıldığı
64 kB RAM'e bir sözlük nasıl sığdırılır?
- Unix mühendisleri, veri yapıları ve sıkıştırma tekniklerinden yararlanarak 250 kB'lık bir sözlüğü 64 kB RAM'e sığdırma sorununu çözdü.
- 1970'lerde Douglas McIlroy, AT&T'nin Unix yazım denetleyicisini uygularken bu sorunla karşılaştı.
- Verinin özelliklerinden yararlanarak, teorik sıkıştırma sınırına yaklaşan bir sıkıştırma algoritması geliştirdi.
TL;DR
- Unix yazım denetleyicisi, 1970'lerde AT&T'de Steve Johnson'ın bir prototipiyle başladı.
- McIlroy, sözlüğü 25.000 kelimeye indiren, dil temelli bir kök bulma algoritması geliştirdi.
- Hızlı arama için Bloom filtresi kullanıldı ve uygulamayı Dennis Ritchie sağladı.
- Sözlük 30.000 kelimeye çıkınca Bloom filtresi yaklaşımı verimsiz hale geldi ve sıkıştırılmış hash tekniği benimsendi.
- 27 bitlik hash kodları çakışma olasılığını düşürmek için kullanıldı ve Golomb kodu ile kelime başına 13,60 bitlik sıkıştırma elde edildi.
Unix yazım denetimi komutunun kökeni
- Unix, AT&T'nin patent bölümüne bir metin işleme sistemi olarak önerildi ve bir yazım denetleyicisine ihtiyaç vardı.
- İlk sürüm Steve Johnson tarafından 1975'te yazıldı, ancak doğruluğu düşüktü.
- Douglas McIlroy, doğruluğu ve performansı artırmak için projeyi yeniden yazdı.
Önek kaldırma algoritması
- McIlroy, sözlüğe bakmadan önce kelimelerden ortak önek ve sonekleri çıkaran bir algoritma geliştirdi.
- Bu yöntem %100 doğru değildi, ancak o dönemde kabul edilebilir bir düzeydeydi.
Bloom filtresi tabanlı arama
- Bloom filtresi, bellek tasarrufu sağladı ve hızlı aramayı mümkün kıldı.
- 25.000 kelimelik sözlüğü 64 kB RAM'e yüklemek için kullanıldı.
- Bloom filtresi, düşük yanlış pozitif oranını koruyacak şekilde ayarlandı.
Sözlük araması için sıkıştırılmış hashing tekniği
- Sözlük boyutu 30.000 kelimeye çıkınca daha bellek verimli bir veri yapısına ihtiyaç duyuldu.
- McIlroy, bellekten tasarruf etmek için hash kodları arasındaki farkları saklayan bir yöntem kullandı.
- Bu hash farklarını sıkıştırmak için Golomb kodu kullanıldı.
Sonuç
- Unix yazım denetimi komutu, PDP-11'in bellek kısıtlarından doğan ilginç bir mühendislik tarihi sunuyor.
- Bloom filtresi, bilgi kuramı, olasılık kuramı ve sıkıştırma algoritmalarını birleştiren zarif bir çözüm sağladı.
- Kaynakların kısıtlı olduğu durumlarda derinlemesine problem çözmenin mümkün olduğunu gösteriyor.
1 yorum
Hacker News yorumu
Bloom filtresi başlangıçta "superimposed code scheme" olarak adlandırılıyordu; bu da belirli bir superimposed code türüdür
Harici bellek kullanan bir yazım denetleyicisi az RAM ile uygulanabilir
Bellek bant genişliği ile disk bant genişliği benzerdi ve iş birden fazla geçişle yapılabiliyordu
1980'lerde IBM PC için donanım tabanlı bir yazım denetleyicisi vardı
Unix, AT&T'ye bir metin işleme sistemi olarak önerildi ve bir yazım denetleyicisine ihtiyaç vardı
1980'lerin başındaki bir Byte makalesi, Unix'in yazım denetleyicisinin nasıl yapılacağını açıklıyordu
Hashing nedeniyle kaçırılan yaygın yazım hataları olabilir
1980'lerin ortalarında veriler, 640KB RAM ile 64KB heap ve stack kullanılarak işleniyordu
1983 civarında CP/M üzerinde Grammatik 64k'den az bellekle çalışıyordu; dilbilgisi denetimi ve uzman sistem kuralları içeriyordu
UNIX'in ilk sürümü 24kB gerektiriyordu ve bunun yarısını çekirdek kaplıyordu