İçeriğe atla

FIFO algoritması

FIFO algoritmasını daha iyi anlamak için resimli bir gösterim.
FIFO algoritmasının temsili resmi.

FIFO (first-in, first-out; ilk giren ilk çıkar) algoritmasının mantığı basittir. Bellek yöneticisinin yeni bir sayfaya yer açmak için, hangi sayfayı dışarıda bırakacağını karar veren algoritmalardan biridir.[1] Yönlendiriciye gelen ilk paket, iletilecek ilk pakettir.

FIFO kuyruğuna ilk gelen, ilk hizmet (first-come, first-served; FCFS) kuyruğu olarak da anıldığı unutmamalıdır.[2] FCFS aynı zamanda FIFO işletim sistemi çizelgeleme algoritması için bir jargon terimidir. Ayrıca her işlem için merkezi işlem birimi (CPU) zamanını talep edildiği sırada vermektedir.[3]

En basit algoritmalardan olan FIFO'nun uygulanması kolaydır ve yazılım tabanlı yönlendiriciler için düşük bir sistem yükü sunmaktadır. FIFO'nun tam tersi, en geç girişin veya "yığının tepesinin" ilk önce işlendiği, en son giren ilk çıkar algoritması olarak bilinen LIFO'dur (last-in-first-out).[4]

Bilgisayar bilimi

Kuyruğa koyma ve kuyruktan çıkarma işlemleriyle bir FIFO kuyruğunun temsili.
Kuyruğa koyma ve kuyruktan çıkarma işlemleriyle bir FIFO kuyruğunun temsili.

Uygulamaya bağlı olarak, bir FIFO, bir donanım kaydırma yazmacı olarak veya farklı bellek yapıları, tipik olarak dairesel bir tampon veya bir tür liste kullanarak uygulanabilmektedir. Bir FIFO kuyruğunun çoğu yazılım uygulaması iş parçacığı açısından güvenli değildir ve veri yapısı zincirinin aynı anda yalnızca bir iş parçacığı tarafından değiştirildiğini doğrulamak için bir kilitleme mekanizması gerektirmektedir.

FIFO algoritması farklı programlama dillerinde yazılabilmektedir. Örneğin;

// FIFO sayfa değiştirmenin C ++ uygulaması
// İşletim Sistemlerinde.
#include<bits/stdc++.h>
using namespace std;
  
// FIFO kullanarak sayfa hatalarını bulma işlevi
int pageFaults(int pages[], int n, int capacity)
{
    // Mevcut sayfalar kümesini temsil etmek için. 
    // Bir sayfanın kümede olup olmadığını hızlı bir şekilde kontrol etmek için 
    // unordered_set kullanıyoruz
    unordered_set<int> s;
  
    // Sayfaları FIFO tarzında saklamak için
    queue<int> indexes;
  
    // İlk sayfadan başlayın
    int page_faults = 0;
    for (int i=0; i<n; i++)
    {
        // Setin daha fazla sayfa tutup tutamayacağını kontrol edin
        if (s.size() < capacity)
        {
            // Zaten yoksa, sayfa hatasını temsil eden sete ekleyin
            if (s.find(pages[i])==s.end())
            {
                // Mevcut sayfayı sete ekle
                s.insert(pages[i]);
  
                // artan sayfa hatası
                page_faults++;
  
                // Mevcut sayfayı kuyruğa itin
                indexes.push(pages[i]);
            }
        }
  
        //Küme doluysa, FIFO gerçekleştirmeniz gerekir, 
        //yani kuyruğun ilk sayfasını kümeden kaldırın
        //ve her ikisini de sıraya koyun ve geçerli sayfayı ekleyin
        else
        {
            // Mevcut sayfanın sette zaten mevcut olup olmadığını kontrol edin
            if (s.find(pages[i]) == s.end())
            {
                // Sayfayı gruptan bulmak ve 
                // silmek için kullanılmak üzere sıradaki ilk sayfayı saklayın
                int val = indexes.front();
                  
                // Sıradan ilk sayfayı aç
                indexes.pop();
  
                // Dizinler sayfasını kümeden kaldırın
                s.erase(val);
  
                // mevcut sayfayı sete ekle
                s.insert(pages[i]);
  
                //mevcut sayfayı kuyruğa it
                indexes.push(pages[i]);
  
                // artan sayfa hatası
                page_faults++;
            }
        }
    }
  
    return page_faults;
}
  
// Kodları çalıştıralım
int main()
{
    int pages[] = {7, 0, 1, 2, 0, 3, 0, 4,
                   2, 3, 0, 3, 2};
    int n = sizeof(pages)/sizeof(pages[0]);
    int capacity = 4;
    cout << pageFaults(pages, n, capacity);
    return 0;
}
# FIFO sayfasının Python3 uygulaması
# İşletim Sistemlerinde değiştirme.
from queue import Queue 
  
# FIFO kullanarak sayfa hatalarını bulma işlevi
def pageFaults(pages, n, capacity):
      
    # Mevcut sayfaları temsil etmek için. 
    # Bir sayfanın kümede olup olmadığını hızlı bir şekilde kontrol etmek 
    # için set kullanıyoruz
    s = set() 
  
    # Sayfaları FIFO tarzında saklamak için 
    indexes = Queue() 
  
    # İlk sayfadan başlayın
    page_faults = 0
    for i in range(n):
          
        #Setin daha fazla sayfa tutup tutamayacağını kontrol edin
        if (len(s) < capacity):
              
            # Zaten yoksa, sayfa hatasını temsil eden sete ekleyin
            if (pages[i] not in s):
                s.add(pages[i]) 
  
                # Sayfa hatalarını artırın
                page_faults += 1
  
                # Mevcut sayfayı kuyruğa itin 
                indexes.put(pages[i])
  
        # Küme doluysa, FIFO gerçekleştirmeniz gerekir, 
        # yani kuyruğun ilk sayfasını kümeden kaldırın 
        # ve her ikisini de sıraya koyun ve geçerli sayfayı ekleyin 
        else:
              
            # Mevcut sayfanın sette zaten mevcut olup olmadığını kontrol edin 
            if (pages[i] not in s):
                  
                # Sıradan ilk sayfayı aç
                val = indexes.queue[0] 
  
                indexes.get() 
  
                # Dizinler sayfasını kaldırın 
                s.remove(val) 
  
                # mevcut sayfayı ekle
                s.add(pages[i]) 
  
                # mevcut sayfayı kuyruğa it 
                indexes.put(pages[i]) 
  
                # Sayfa hatalarını artırın
                page_faults += 1
  
    return page_faults
  
# Kodu çalıştırın
if __name__ == '__main__':
    pages = [7, 0, 1, 2, 0, 3, 0, 
                4, 2, 3, 0, 3, 2] 
    n = len(pages) 
    capacity = 4
    print(pageFaults(pages, n, capacity))

Disk denetleyicileri, FIFO'yu disk I/O isteklerine hizmet verilecek sırayı belirlemek için bir disk zamanlama algoritması olarak kullanabilmektedir. Burada, daha önce bahsedilen CPU zamanlamasında olduğu gibi aynı FCFS başlatması ile de bilinmektedir.[3]

Bilgisayar ağlarında kullanılan iletişim ağı köprüleri, anahtarları ve yönlendiricileri, veri paketlerini bir sonraki hedeflerine doğru yolda tutmak için FIFO'ları kullanmaktadır. Tipik olarak ağ bağlantısı başına en az bir FIFO yapısı kullanılmaktadır. Bazı cihazlarda, farklı bilgi türlerini eşzamanlı ve bağımsız olarak sıraya koymak için birden çok FIFO bulunmaktadır.[6]

Kaynakça

  1. ^ "FIFO sayfa yer değiştirme algoritması (FIFO-First in First out page replace algorithm) | omurserdar.com". www.omurserdar.com. 25 Mayıs 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 25 Mayıs 2021. 
  2. ^ Packet Queueing and Scheduling (İngilizce). Morgan Kaufmann. 1 Ocak 2018. ISBN 978-0-12-800737-2. 25 Mayıs 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 25 Mayıs 2021. 
  3. ^ a b Tanenbaum, Andrew S. (2015). Modern operating systems. Fourth edition. Boston. ISBN 978-0-13-359162-0. OCLC 870646449. 26 Ağustos 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 25 Mayıs 2021. 
  4. ^ Kruse, Robert L. (1987). Data structures and program design. 2nd ed. Englewood Cliffs, N.J.: Prentice-Hall. ISBN 0-13-195884-4. OCLC 13823328. 
  5. ^ a b "Program for Page Replacement Algorithms | Set 2 (FIFO)". GeeksforGeeks (İngilizce). 17 Haziran 2017. 20 Haziran 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 25 Mayıs 2021. 
  6. ^ Kurose, James F. (2006). Computer networking : complete package. 3rd ed. rev. Keith W. Ross. Harlow: Addison-Wesley. ISBN 0-321-41849-2. OCLC 70403052. 

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">Tam sayı</span> sıfırın sağında bulunan sayılar büyükken solunda bulunan sayılar küçüktür

Tam sayılar, sayılar kümesinde yer alan sıfır (0), pozitif yönde yer alan doğal sayılar ve bunların negatif değerlerinden oluşan negatif sayılardan oluşan sayı kümesidir.

<span class="mw-page-title-main">Doğal sayılar</span> sayma sayıları kümesine 0ın eklenmesiyle oluşan sayılar kümesi

Doğal sayılar, şeklinde sıralanan tam sayılardır ve kimi tanımlamalara göre 0 sayısı da bu kümeye dâhil edilebilir. Aralarında standart ISO 80000-2'nin de bulunduğu bazı tanımlar doğal sayıları 0 ile başlatır ve bu durum negatif olmayan tam sayılar için 0, 1, 2, 3, ... şeklinde bir karşılık bulurken, bazı tanımlamalar 1 ile başlamakta ve bu da pozitif tam sayılar için 1, 2, 3, ... şeklinde bir eşlenik oluşturur. Doğal sayıları sıfır olmadan ele alan metinlerde, sıfırın da dahil edildiği doğal sayılar bazen tam sayılar olarak adlandırılırken diğer bazı metinlerde bu terim, negatif tam sayılar da dahil olmak üzere tam sayılar için kullanılmaktadır. Özellikle ilkokul seviyesindeki eğitimde, doğal sayılar, negatif tam sayıları ve sıfırı dışlamak ve saymanın ayrık yapısını, gerçek sayıların bir karakteristiği olan ölçümün sürekliliğiyle karşıtlık oluşturmak amacıyla sayma sayıları olarak adlandırılabilir.

<span class="mw-page-title-main">PageRank</span>

PageRank, Google tarafından geliştirilen ve web sayfalarının önemini belirlemek için kullanılan bir algoritmadır. İnternet üzerindeki bağlantıların analiz edilmesiyle hesaplanan Pagerank değeri Google Arama sonuçlarında sayfaların sıralanması için kullanılan faktörlerden biridir.

ARM mimarisi RISC tabanlı bir işlemci mimarisidir. Genel itibarıyla düşük güç tüketimi, diğer RISC tabanlı işlemcilere göre yüksek performanslı oluşu ve x86-x64 işlemcilere göre daha hesaplı olmasından dolayı gömülü sistemlerde, taşınabilir aygıtlarda kullanılan yongasetlerinin dizaynında tercih edilir. 32 ve 64 bit modelleri bulunur.

Soundex, İngilizcedeki keliemelerin teleffuz biçimlerine göre hazırlanmış bir fonetik algoritmadır. Bu algoritmanın hazırlanmasındaki temel amaç; teleffuzları benzeşen kelimelerin bu yolla aynı karakter katarına (string) dönüştürülmeleri ve bu yolla benzer kelimelerin -yazımlarında fark olsa bile- tespit edilmesidir. Bunun yanında Soundex algoritması, fonetik algoritmalardan en bilineni ve en sık kullanılanı olup, bazı çevreler tarafından -yanlış bir şekilde- fonetik algoritma terimiyle aynı anlamda kullanılamaktadır.

<span class="mw-page-title-main">Kuyruk teorisi</span>

Kuyruk teorisi, bekleme sıraları ve kuyrukların matematiksel çalışmasıdır. Kuyruk teorisinde, model inşa ederek kuyruğun uzunluğu ve bekleme zamanı tahmin edilebilir. Kuyruk teorisi genellikle yöneylem araştırmasının bir branşı olarak kabul edilebilir. Çünkü sonuçlar genellikle bir hizmet sunmak için gerekli kaynaklar hakkında karar verirken kullanılır.

<span class="mw-page-title-main">Birleştirmeli sıralama</span>

Birleşmeli Sıralama, bilgisayar bilimlerinde derecesinde karmaşıklığa sahip bir sıralama algoritmasıdır. Girdi olarak aldığı diziyi en küçük hale gelene kadar ikili gruplara böler ve karşılaştırma yöntemi kullanarak diziyi sıralar.

<span class="mw-page-title-main">Seçmeli sıralama</span>

Seçmeli Sıralama, bilgisayar bilimlerinde kullanılan bir sıralama algoritmasıdır. Karmaşıklığı olduğu için büyük listeler üzerinde kullanıldığında verim sağlamaz ve genel olarak benzeri olan eklemeli sıralamadan daha başarısızdır. Seçmeli sıralama yalın olduğu ve bazı durumlarda daha karmaşık olan algoritmalardan daha iyi sonuç verdiği için tercih edilebilir.

Sanal bellek, fiziksel belleğin görünürdeki miktarını arttırarak uygulama programına (izlence) fiziksel belleğin boyutundan bağımsız ve sürekli bellek alanı sağlayan bilgisayar tekniğidir. Ana belleğin, diskin (ikincil saklama) önbelleği (cache) gibi davranmasıyla; yani disk yüzeyini belleğin bir uzantısıymış gibi kullanmasıyla gerçekleştirilir. Ancak gerçekte, yalnızca o anda ihtiyaç duyulan veri tekerden ana belleğe aktarılıyor olabilir. Günümüzde genel amaçlı bilgisayarların işletim sistemleri çoklu ortam uygulamaları, kelime işlemcileri, tablolama uygulamaları gibi sıradan uygulamalar için sanal bellek yöntemi kullanılmaktadır.

Sayfalama ya da bellek adresleme, durgun sanal bellek sayfalarının ikincil bellekte (teker) saklanarak daha sonra ihtiyaç duyulduğunda ana belleğe yüklenmesi işlemini içerir. Bir diğer anlamı, adres uzayının belli oranlarda bloklara ayrılmasıdır. Sayfalama, bellek mahallerine ulaşımı ve adreslemeyi kolaylaştırır. 6502 mikroişlemcili bir sistemde 65536'lık adres uzayı 256 adet 256 Baytlık hayalı sayfalara ayrılır. Genelde 6502 işlemcili sitemlerde 1. sayfa yığın olarak ayrılırken 0. sayfaya bakış tabloları veya veri blokları yerleştirilir.

<span class="mw-page-title-main">Küme</span> matematiksel anlamda tanımsız bir kavramdır. Bu kavram "nesneler topluluğu veya yığını" olarak yorumlanabilir.

Küme, matematikte farklı nesnelerin topluluğu veya yığını olarak tanımlanmaktadır. Bu tanımdaki "nesne" soyut ya da somut bir şeydir. Fakat her ne olursa olsun iyi tanımlanmış olan bir şeyi, bir eşyayı ifade etmektedir. Örneğin, "Tüm canlılar topluluğu", "Dilimiz alfabesindeki harflerin topluluğu", "Masamın üzerindeki tüm kâğıtlar" tümcelerindeki nesnelerin anlaşılabilir, belirgin oldukları, kısaca iyi tanımlı oldukları açıkça ifade edilmektedir. Dolayısıyla bu tümcelerin her biri bir kümeyi tarif etmektedir. O halde, matematikte "İyi tanımlı nesnelerin topluluğuna küme denir." biçiminde bir tanımlama yapılmaktadır.

<span class="mw-page-title-main">Hızlı sıralama</span>

Hızlı sıralama, günümüzde yaygın olarak kullanılan bir sıralama algoritmasıdır. Hızlı sıralama algoritması n adet sayıyı, ortalama bir durumda, karmaşıklığıyla, en kötü durumda ise karmaşıklığıyla sıralar. Algoritmanın karmaşıklığı aynı zamanda yapılan karşılaştırma sayısına eşittir.

İplik sıralaması bilgisayar bilimlerinde kullanılan bir sıralama algoritmasıdır. Sıralanacak olan dizinin, sıralanmış alt dizilerinin oluşturularak bu alt dizilerin birleştirilmesi yoluyla sonucun oluşturulması mantığına dayanır. Algoritmanın her bir aşamasında ana dizinin üzerinden geçilir ve bu diziden zaten sıralanmış olan bir dizi eleman çıkarılır. Çıkarılan bu eleman dizileri daha sonra birleştirilir.

Bilgisayar programlamada dinamik iletim, altyordam çağrılarının ilişkin altyordam başlangıç adresine dinamik olarak bağlanmasıdır. Bir diğer deyişle, dinamik iletim program metnindeki bir çağrı ile işletilen altyordamın programın çalışması sırasında birbirine bağlanması durumudur. Geri çağrı ve çokbiçimliliğin realize edilmesinde kullanılan bu bağlama yöntemi, yordamsal programlama dillerinde altyordam göstericileriyle gerçekleştirilirken, nesne yönelimli dillerde kalıtlama ve gerçekleştirme ilişkilerinin kullanılmasıyla otomatikman sağlanır. Altyordamların birinci sınıf dil öğesi olarak ele alındığı fonksiyonel programlama dillerinde ise, aynı işlevsellik altyordamların argüman olarak geçirilmesi ile sağlanabilir.

<span class="mw-page-title-main">Erişilmez kod</span>

Erişilmez kod bilgisayar programlamada programın başka yerlerinden kontrol akışı olmayan kaynak koduna verilen addır.

<span class="mw-page-title-main">Nehalem (mikromimari)</span>

Nehalem, İntel firmasının Eylül 2008'de piyasaya sürülen Core i7 işlemcisiyle birlikte kullanılmaya başlanmıştır. 2011'de Sandy Bridge mikromimarisi sunulana kadar İntel'in en gelişmiş mikromimarisi olarak piyasada kalmıştır. Selefi Core mikromimarisine göre paralelliği ve saat frekansını arttırmış, Core mikromimarisinde İntel'in kullanmadığı fakat daha önce NetBurst'de kullanılan Hyper Threading teknolojisi Nehalem ile tekrar kullanılmaya başlamıştır. Nehalem'le birlikte Core mikromimarisinde terkedilmiş olan üçüncü seivye bir önbellek de yonganın içerisine eklenmiştir. İntel, Nehalem ile ilk defa bellek denetim birimini işlemci yongasının içine koymuş ve front-side bus dan ayırmıştır.

<span class="mw-page-title-main">Apple Keynote</span>

Apple Keynote Apple Inc. tarafından geliştirilen sunum programı uygulamasıdır. Apple Pages ve Apple Numbers ile birlikte iWork yazılım paketinin bir parçasıdır. Keynote 7.0 sürümü, 20 Eylül 2016'da piyasaya çıktı ve Mac için en son sürümdür. Keynote Microsoft şirketinin Microsoft Office paketine dahil olan Microsoft PowerPoint uygulaması ile eşdeğerdir. Apple, 27 Ocak 2010 tarihinde, iPad için Keynote'nin yeni bir sürümünü yepyeni bir dokunmatik arayüzü ile duyurdu.

Merkle imzası, anahtarlama ağaçları ve sayısal imza şemalarını birleştiren bir veri doğrulama yapısıdır. Özet değeri tabanlı kriptografidir ve Merkle ağacı da denen özet değeri ağacını kullanmaktadır. Verileri Lampart imza algoritması gibi tek kullanımlık şekilde imzalar. Ralph Merkle tarafından 1970 sonu itibarıyla geliştirilmiştir ve RSA, Dijital İmza Algoritması gibi geleneksel dijital imzalara alternatif olmuştur.

Berlekamp-Massey algoritması, belirli bir ikili çıkış dizisi için en kısa doğrusal geri besleme kaydırmalı yazmacı (LFSR) bulan bir algoritmadır. Algoritma ayrıca rastgele bir alanda lineer olarak yinelenen bir dizinin minimum polinomunu da bulacaktır. Alan gereksinimi, Berlekamp-Massey algoritmasının sıfır olmayan tüm öğelerin çarpımsal bir tersi olmasını gerektirdiği anlamına gelir. Reeds ve Sloane, bir yüzüğü işlemek için bir uzantı sunar.

<span class="mw-page-title-main">A* arama algoritması</span> algoritma

A* arama algoritması, sezgisel bir çizge dolaşma ve yol bulma algoritmasıdır. Tamlığı, optimalliği ve optimal verimliliği ile bilgisayar biliminin birçok alanında kullanılmaktadır. Tüm düğümleri belleğinde tuttuğundan olan alan karmaşıklığı dezavantajıdır.