1 Nisan 2014 Salı

PTHREADS ile MUTEX kullanımı gerekliliği, örnek C++ programı. Pthread ve Mutex Kullanımı Örnek

Mutex (mutual exclusion) yani diğer adı ile karşılıklı dışlama, bellekteki kritik bölgelerde işlem yapılırken threadlerin birbirini dışlaması için kullanılan bir kavramdır. Pthread ile mutex işlemini niye kullanmamız gerektiğine dair örnek vereceğim. Aşağıdaki kod misal bir banka hesabında işlem yapmaktadır. Aslında bu örnek genellikle veritabanı sistemlerinde transaction yapısına örnek vermek için kullanılır. Neyse konuya dönelim. Eğer para çekmek ve para yatırmak için ayrı ayrı threadler oluşturduğumuzu varsayalım. Bir banka hesabına aynı anda para yatırma ve para çekme işlemi yaptığımızda aşağıdaki kod parçacığı normal bir şekilde çalışması lazım.
#include <pthread.h>
#include <iostream>
#include <Windows.h>
#include <conio.h>

using namespace std;

static double vadesizHesap = 1000.00f;


void* ParaYatir(void* miktar)
{

    double para = vadesizHesap;
    Sleep(2000);
    para += *(double *)miktar;
    vadesizHesap = para;

    return NULL;
}

void* ParaCek(void* miktar)
{

    double para = vadesizHesap;
    Sleep(2000);
    para -= *(double *)miktar;
    vadesizHesap = para;

    return NULL;
}

int main(int argc, char* argv[])
{
    pthread_t thread1, thread2;
    double cekilecekMiktar = 0, yatirilacakMiktar = 0;
    cout << endl << "Hesabinizdaki para tutari:" << vadesizHesap;
    cout << endl << "Cekilecek para tutarini giriniz:";
    cin >> cekilecekMiktar;
    cout << endl << "Yatirilacak para tutarini giriniz:";
    cin >> yatirilacakMiktar;
    int sonuc = pthread_create(&thread1, NULL, ParaYatir, (void*)&yatirilacakMiktar);
    if (sonuc) _exit(-1);
    sonuc = pthread_create(&thread2, NULL, ParaCek, (void*)&cekilecekMiktar);
    if (sonuc) _exit(-1);
    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);
    cout << endl << "Hesabinizdaki para:" << vadesizHesap;
    cin >> sonuc;
    return 0;
}
Yukarıdaki programa girdileri girdiğimizde oluşan sonuç aşağıdaki gibidir.

Hesabinizdaki para tutari:1000
Cekilecek para tutarini giriniz:100

Yatirilacak para tutarini giriniz:100

Hesabinizdaki para:900

Peki neden böyle oldu? Dikkat ederseniz ParaCek ve ParaYatir fonksiyonları thread olarak çalıştırılıyor. Ve ikiside vadesiz hesabı okuyor. İkiside 1000 TL okudu. Ancak sleep komutu ile bu iki threadde uyku moduna geçti Sleep ile uyutmamın sebebi işletim sistemi her threadi her zaman çalıştırmak zorunda olmadığıdır. Bazen sistemdeki threadler beklemek zorunda kalabilir. Tam bu sırada para yatırma işlemi çalışmaya başladı 1000 TL nin üstüne 100TL daha koyup 1100TL yi belleğe yazdı ve işini bitirdi. Ancak thread2 olan para çekme fonksiyonu hala beklemedeyken bu işlem gerçekleşti. Daha sonra thread2 yani para çekme fonksiyonu kaldığı yerden devam etti. En son okuduğu vadesizHesap(1000TL) 'tan verilen 100 TL yi çekerek 900 TL yaptı ve vadesizHesap verisini bellekte yeniledi. İşte bu tür durumları engellemek için mutex kavramını kullanmak zorundayız. Bu tarz bellekte YAZMA işlemi yapılan bölgelerde farklı threadler aynı anda o bellek bölümüne ulaşmalarını engellemeliyiz. Aşağıdaki kod parçacığı üstteki programın mutex kullanılarak yazılmış halidir. Yazma bölgesine girmeden önce ilk gelen thread(thread1 ya da thread2) mutex'i kilitliyor. Ve aynı anda diğer thread ise mutex bölgesine giriş yapamıyor. Mutex kilidi açıldıktan sonra diğer thread mutex kilidini kendisi için kilitliyor ve işlemini yapıp mutex kilidini açıyor.
#include <pthread.h>
#include <iostream>
#include <Windows.h>
#include <conio.h>

using namespace std;

static double vadesizHesap = 1000.00f;
pthread_mutex_t kilit = PTHREAD_MUTEX_INITIALIZER;

void* ParaYatir(void* miktar)
{
    pthread_mutex_lock(&kilit);
    double para = vadesizHesap;
    Sleep(2000);
    para += *(double *)miktar;
    vadesizHesap = para;
    pthread_mutex_unlock(&kilit);
    return NULL;
}

void* ParaCek(void* miktar)
{
    pthread_mutex_lock(&kilit);
    double para = vadesizHesap;
    Sleep(2000);
    para -= *(double *)miktar;
    vadesizHesap = para;
    pthread_mutex_unlock(&kilit);
    return NULL;
}

int main(int argc, char* argv[])
{
    pthread_t thread1, thread2;
    double cekilecekMiktar = 0, yatirilacakMiktar = 0;
    cout << endl << "Hesabinizdaki para tutari:" << vadesizHesap;
    cout << endl << "Cekilecek para tutarini giriniz:";
    cin >> cekilecekMiktar;
    cout << endl << "Yatirilacak para tutarini giriniz:";
    cin >> yatirilacakMiktar;
    int sonuc = pthread_create(&thread1, NULL, ParaYatir, (void*)&yatirilacakMiktar);
    if (sonuc) _exit(-1);
    sonuc = pthread_create(&thread2, NULL, ParaCek, (void*)&cekilecekMiktar);
    if (sonuc) _exit(-1);
    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);
    cout << endl << "Hesabinizdaki para:" << vadesizHesap;
    cin >> sonuc;
    return 0;
}
Programın çıktısı aşağıdaki gibidir. Kolay gelsin..

Hesabinizdaki para tutari:1000
Cekilecek para tutarini giriniz:150

Yatirilacak para tutarini giriniz:100

Hesabinizdaki para:950

pthreads ile combinasyon hesabı yaptıran program.

Paralel programlamaya çalışırken yazdığım bir program. İşine yarayanlar olabilir. Kodlar aşağıdadır.


/*********************************************************************
    2009010206036
    Bilgisayar Mühendisliği
    4. Sınıf II. Öğretim
    Burak Gökalp
Editör, Ortam;
Visual Studio 2013
Windows 7 x64 SP1
C(n / r) = n! / (r! * (n-r)!)
n! thread1
r! thread2
(n-r)! thread3 olarak hesap ettiriyorum
**********************************************************************/
#include <iostream>
#include <conio.h>
#include <pthread.h>

using namespace std;

void* Faktoriyel(void* argSayi)
{
    unsigned short int sayi = *(unsigned short*)argSayi;
    unsigned long long sonuc = 1, sayac = 1;
    cout << "Thread calisiyor";
    if (sayi > 1)
    {
        do{
            sonuc = sonuc * (++sayac);
        } while (sayi > sayac);
        return (void*)sonuc;
    }
    else return (void*)sonuc;
}

int main(char* argv[], int argc)
{
    unsigned short int uiN, uiR, uiFark;
    uiN = uiR = 0;
    unsigned long long uFaktoriyelN = 0, uFaktoriyelR = 0, uFaktoriyelNR = 0;
    void* sonuc=NULL;
    pthread_t thread1, thread2, thread3;
    int hata;
    do{
        cout << "\nKombinasyonu alinacak sayiyi giriniz:"; cin >> uiN;
        cout << "\nKombinasyonu giriniz:"; cin >> uiR;
    } while ((uiR > uiN) && (uiR >= 0)); //r =< n VE r >= 0 olmalıdır combinasyonda

    cout << "\nHesaplama Basladi... Lutfen bekleyiniz";
    uiFark = uiN - uiR; //n-r farkı
    hata = pthread_create(&thread1, NULL, Faktoriyel, (void*)&uiN);
    if (hata) exit(-1);
    hata = pthread_create(&thread2, NULL, Faktoriyel, (void*)&uiR);
    if (hata) exit(-1);
    hata = pthread_create(&thread3, NULL, Faktoriyel, (void*)&uiFark);
    if (hata) exit(-1);
    pthread_join(thread1, &sonuc);            //Thread1 bitmesi bekleniyor
    uFaktoriyelN = (unsigned long long)sonuc;    //Thread1 den gelen sonuç alınıyor
    pthread_join(thread2, &sonuc);            //Thread2 bitmesi bekleniyor
    uFaktoriyelR = (unsigned long long)sonuc;    //Thread2 den gelen sonuç alınıyor
    pthread_join(thread3, &sonuc);            //Thread3 bitmesi bekleniyor
    uFaktoriyelNR = (unsigned long long)sonuc;    //Thread3 den gelen sonuç alınıyor
    unsigned long long islemSonucu = uFaktoriyelN / (uFaktoriyelR * uFaktoriyelNR);
    cout << "\n\tC(" << uiN << "/" << uiR << ")" << endl
        << "Kombinasyonunun sonucu = " << islemSonucu;
    _getch();
    return 0;
}
Ayrıca pthreads kütüphanesinin fonksiyonlarına çalışmak istiyorsanız size aşağıdaki kaynağı önerebilirim. Kolay gelsin; https://computing.llnl.gov/tutorials/pthreads/

(a|b)*abb ifadesini gösteren DFA'nın C++ kodu

Programı geçen sene yazmıştım ödev için belki birilerinin işine yarayabilir.

#include <iostream>
#include <conio.h>

using namespace std;

int durumGetir(int durum, char harf)
{
short int sonuc = -1;
switch (durum)
{
case 0: (harf == 'a') ? sonuc = 1 : sonuc = 0; break;
case 1: (harf == 'a') ? sonuc = 1 : sonuc = 2; break;
case 2: (harf == 'a') ? sonuc = 1 : sonuc = 3; break;
case 3: (harf == 'a') ? sonuc = 1 : sonuc = 0; break;
default: sonuc = -1; break;
}
return sonuc;
}


bool dfaCalistir(char girdi[], int diziBoyutu)
{
bool kabulDurumu[4] = { false, false, false, true };

int durum = 0;
for (int i = 0; i<diziBoyutu; i++)
{
durum = durumGetir(durum,girdi[i]);
}
return kabulDurumu[durum];
}

int main()
{
int girdiSayisi;
do{
cout << "Lutfen DFA'da uygulayacaginiz girdi SAYISINI yaziniz " << endl
<< "Orn: 1010101 icin 7 yaziniz:";
cin >> girdiSayisi;
char* girdiler = new char[girdiSayisi];
for (int i = 0; i<girdiSayisi; i++)
{
cout << "Lutfen " << i + 1 << ". girdinizi giriniz:";
cin >> girdiler[i];
}
cout << "Girdiginiz test degerlerinin kabul sonucu: " << ((dfaCalistir(girdiler, girdiSayisi)) ? "Kabul" : "Red!") << endl << "Yeni bir deneme icin e tusuna basin" << "Kapatmak icin e harici bir tusa basin.";
delete[] girdiler;
} while (_getch() == 'e');

return 0;
}

22 Mart 2014 Cumartesi

Debian kurulmuş paketi config dosyaları dahil sistemden kaldırmak

Normalde
apt-get install paket-adi 
şeklinde kurduğumuz paketleri kaldırırken;
apt-get remove paket-adi
şeklinde silersek, paketin config dosyaları hala sistemimizde yer alıyor. Config dosyaları dahil silmek istediğimizde yapmamız gereken --purge komutu ekleme.

apt-get --purge remove paket-adi

18 Mart 2014 Salı

Debian terminal ile wifi ağlarına bağlanmak.

Debian'ın terminali ile wifi ağlarına nasıl bağlanılır bunu anlatacağım. Eğer debian'ın kurulumunda sisteminizde boşa yer kaplamasını istemediğiniz için GUI araçlarını (gnome) yüklemediyseniz işletim sistemini tamamiyle terminalden kullanıyorsunuz demektir. Böyle durumlarda wifi ağları nasıl taranır ve nasıl bağlanılır onu anlatacağım.

Debian'a ROOT yetkileriyle giriş yapın (root yetkisi ile giriş yapmadıysanız aşağıda yazacağım komutların başına SUDO ekleyerek yapın)

root@Debian: ifconfig

yazın. Daha sonra var olan network aygıtlarınız listelenecektir. Eğer wlan0 gibi bir aygıt gözüküyorsa o interface sizin kablosuz adaptörünüzdür. Bendekinin adı wlan0

root@Debian: iwlist wlan0 s

yazarak etrafta bulunan wireless ağları listeleyin. "This interface doesn't support scanning gibi bir hata" diyorsa eğer,

root@Debian: ifconfig wlan0 up

yazarak wlan0 ı etkinleştirin ve tekrar

root@Debian: iwlist wlan0 scan

yazın. Diyelim ki gireceğiniz ağ WPA2 veya WPA şifrelemesi kullanan bir ağ ve SSID (kablosuz ağ ismi) 'nide biliyorsunuz. Bundan sonrası iki satır şey yazmaktan geçer.

root@Debian: nano  /etc/network/interfaces

yazarak içeriğin en altına şu kodları ekleyin.

#Benim Wireless Bağlantım
auto wlan0
iface wlan0 inet dhcp
           wpa-ssid SSIDismi
           wpa-psk KablosuzŞifresi


yazıp CTRL X e basın ve dosyayı kaydedin. Buradaki auto wlan0 kelimesi bilgisayar açılırken wlan0 ı otomatik etkinleştirmek için yazılmıştır isteğe bağlı kaldırılabilir.

daha sonra


root@Debian: sudo dhclient wlan0

yazın. Sisteminiz belirttiğiniz SSID ye bağlanacaktır.
Kolay gelsin.

Bununla ilgili bir döküman debian'ın sitesinde mevcut kolay gelsin..
https://wiki.debian.org/WiFi/HowToUse

15 Mart 2014 Cumartesi

AMD FGLRX sürücüleri ile desteği kesilmiş chipsetleri kullanma (kernel 3.7 ve 3.8)

Makalenin orjinali için tıklayın



After a while with headaches and constant research I finally got to install the latest ATI/RADEON legacy driver into my Vaio laptop running Debian Wheezy. FYI the video adapter is a Mobility HD 4650.

So , here you go my short tutorial:

1 - Download the driver
Download the driver from AMD (Legacy or not) and extract it to a proper folder (in this example I used amd):
Code: Select all
~$ ./amd-driver-installer-catalyst-13.1-legacy-linux-x86.x86_64.run --extract amd


2 - Download the patch:
https://aur.archlinux.org/packages/catalyst-total-hd234k/

3 - Appling the patches:
Copy all the files that contains ".patch" extension to the root of your extracted ATI/RADEON driver folder.
One by one patches, use the following command line to apply the patch at the root of your extracted driver folder:

Code: Select all
patch -p0 < ./whatever-patch-name.patch


e.g.
Code: Select all
 patch -p0 < ./arch-fglrx-3.7.patch
 patch -p0 < ./arch-fglrx-3.8.patch
 patch -p0 < ./3.5-do_mmap.patch
 patch -p0 < ./makefile_compat.patch
 patch -p0 < ./arch-fglrx-authatieventsd.patch


[b]4 - Install the driver:[b]
After apply the patches you don't need to repack into a .deb or another package you can just go straight and install the driver through the following command line:

Code: Select all
~$ sudo ./ati-installer.sh 8.97.100.7 --install


After installing proceed with the following line:

Code: Select all
~$ sudo amdconfig --initial


Just in case you are a lazzy guy and don't wanna patch by yourself, you can go straight to my already patched amd legacy driver here:

http://goo.im/devs/erickwill/drivers/amd-driver-installer-catalyst-13.1-legacy-linux-x86.x86_64.tar.gz

So you can start from the step "4 - Install the driver"

2 Aralık 2013 Pazartesi

Blogger veya Wordpress'de kod paylaşmak için HTML filtreleme


Bloggerda kod mu yayınlamak istiyorsunuz? Yayınlıyorsunuz ancak kodlarınız gönderdiğiniz gibi çalışmıyor mu? Bunun için kodlarınızda, bazı HTML kodları çalıştıran yapıları temizlemeniz lazım. Aşağıdaki form elementiyle bu işlemi buradan yapabilirsiniz. Daha sonra filtreden geçirilmiş kodlarınızı blogger veya wordpress sayfanızda HTML editörünü kullanarak yollarsanız sorununuz çözülecektir. Kolay Gelsin!










Filrelenmiş yazının bloggerdaki görünüş önizlemesi :

CSS/XHTML ile Sayfanın en altında footer yapısı oluşturmak

Sayfanın en altında footer yapısı oluşturmak için birçok yöntem bulunmaktadır.  Ama bu metodları çoğu bir çok karışık XHTML ekletisi veya javascript yapısı gerektirmektedir. Aşağıda vereceğim kodlar yalnızca 15 satır kodlar bu işi yapabilmekte.

Öncelikle yeni bir XHTML sayfa oluşturun ve CSS yapısına aşağıdaki kodları ekleyin.


 * {  
   margin: 0;  
   }  
   html, body {  
   height: 100%;  
   }  
   .wrapper {  
   min-height: 100%;  
   height: auto !important;  
   height: 100%;  
   margin: 0 auto -4em;  
   }  
   .footer, .push {  
   height: 4em;  
   }  

Aşağıdaki kodları ise XHTML yapısında kullanın. Yalnız push div'nin içine içerik eklemeyin. Zira "push" sınıfını kullanan div'in amacı footer kadar boyutundan dolayı wrapper içeriğinin margin-bottom işlevini görmektedir.

     <head>  
       <link rel="stylesheet" href="layout.css" ... />  
     </head>  
     <body>  
       <div class="wrapper">  
         <p>Your website content here.</p>  
         <div class="push"></div>  
       </div>  
       <div class="footer">  
         <p>Copyright (c) 2008</p>  
       </div>  
     </body>  
 Kolay Gelsin.

13 Mayıs 2013 Pazartesi

Özet Linux Konsol Komutları


Yardım Alma

Çoğu komut yanına -h veya –help yazıldığında küçük bir bilgi verir. Buna ek olarak linux’ta binlerce dokümanın bulunduğu manual sayfaları vardır. Yapmanız gereken tek şey man komutundan sonra bilgi almak istediğiniz komutun adını yazmak.
  • komut -h: Komut hakkında kısa bilgi
  • komut –help: Üstekinin aynısı
  • man komut: Komut hakkında detaylı doküman

Dosyaları Listeleme

Linux’ta bir dizindeki dosyaları listelemek için kullanılan komut lsdir. Ekrana sığmayan uzun listeleri göstermek için ise bu komut less ile beraber kullanılabilir.
  • ls: Bulunduğun dizinin içeriğini göster
  • ls -a: Gizli dosyaları da göster
  • ls -l: Uzun listele (sahip, izinler, boyut ve tarih dahil)
  • ls | less: Uzun listeleri kısaltmak için

Dizin değiştirme

Başka bir dizine geçmek için cd komutu kullanılır.
  • cd yol: yol dizinine geçer
  • cd ~: Sizin home dizininize geçer
  • cd -: Bir önceki dizine döner
  • cd..: Bir üst dizine geçer

Dosya ve dizin yönetimi

Bir dizini veya dosyayı kopyalamak için cp, taşımak için mv, yeni klasör oluşturmak için mkdir, dosyayı silmek için rm, dizini ve içindeki dosyaları silmek için rm -R, boş bir dizini silmek için ise rmdir kullanılır.
  • cp kaynak hedef: Kaynaktan hedefe kopyalar
  • cp -R kaynak hedef: Önyineli(recursive) kopyalar
  • mkdir dizin: Yeni dizin yaratır
  • mv kaynak hedef: Dosyaları taşımak veya adlarını değiştirmek için
  • rm dosya: Dosyayı kaldırır
  • rm -R dizin: Önyineli kaldırır
  • rmdir dizin: Boş dizini kaldırır
  • touch dosya: Dosya varsa tarihini değiştirir, yoksa yaratır
  • pwd: Çalışılan dizinin ismini verir

Dosya arama

Herhangi bir dosyayı sistemde aramak için find ve locate komutları kullanılır. find bulunduğunuz dizinden başlayarak tüm alt-dizinleri arar. locate ise tüm dosyaları bir veritabanında tutar, bunun için hayli hızlıdır. Ancak bu veritabanı günde bir yenilendiğinden son kaydettiğiniz dosyaları bulamayabilirsiniz.
  • find yol -name dosyaadı: Belirttiğiniz dizinden başlayarak dosyayı arar
  • locate dosyaadı: Dosyayı arar

Metin dosyalarıyla çalışma

Kısa bir metin dosyasını görüntülemek için cat, metin dosyasında yön tuşları-Page Up/Down ile ilerlemek için less, dosyada bir yazıyı aramak için grep, satırları sıralamak için sort, ve küçük bir editör ile açmak için ise pico kullanılır.
  • cat dosyaadı: Dosyayı ekranda görüntüler
  • grep yazı dosyaadı: Yazıyı dosyada arar, bulunduğu satırı görüntüler
  • less dosyaadı: Dosyada ilerlemek için kullanılır (Çıkış q ile)
  • pico dosyaadı: Dosyayı basit bir metin editörüyle açar
  • sort dosyaadı: Dosyadaki satırları alfabetik sıraya göre dizip gösterir

Sıkıştırılmış dosyaları açma

İnternetten indirdiğiniz dosyalar genelde sıkıştırılmıştır. Bunları açmak için dosya tipine göre araç kullanmalıyız.
  • bunzip2 dosyaadı.bz2: bzip2 dosyasını (.bz2) açar
  • gunzip dosyaadı.gz: gzipped (.gz) arşivini açar
  • unzip dosyaadı.zip: PkZip veya WinZip dosyasını (.zip) açar
  • tar -xvf dosyaadı.tar: tar (.tar) arşivini (tarball) açar
  • tar -xvzf dosyaadı.tar.gz: tar arşivini (.tar.gz or .tgz) açar

Ağ servislerini kullanma

Dosya transferi yapmak için ftp, ağ bağlantısını kontrol etmek için ping, secure shell protokolüne bağlanmak için ssh, telnet protokolü üzerinden bağlanmak için ise telnet kullanılır.
  • ftp sunucu: FTP sunucusuna bağlanır
  • ping sunucu: Sunucuya ping isteği gönderir
  • ssh -l kullanıcıadı sunucu: Uzaktaki makinaya Secure Shell protokolü ile bağlanır
  • telnet sunucu: Uzaktaki makinaya TELNET protokolü ile bağlanır

Sistem bilgisi görüntüleme

  • date: İşletim sisteminin saat ve tarihini görüntüler
  • df -h: Disk kullanımını görüntüler
  • free: Bellek kullanımını görüntüler
  • history: Kullanılan hesap için çalıştırılan komutları listeler
  • hostname: Yerel sunucu adını verir
  • rwho -a: Ağa bağlı kullanıcıları listeler
  • uptime: Bilgisayar açıldığından beri geçen süreyi verir
  • who: Makineye bağlı kullanıcıları listeler
  • whoami: Giriş isminizi görüntüler

Dosya izinlerini değiştirme

  • chown kullanıcı.grup dosyaadı: Dosyaya sahip olan grubu ve kullanıcıyı değiştirir. Tabii ki bu komutu sadece o dosyanın sahibi kullanabilir
  • chmod (augo)(+-)(rwx) dosyaadı: Dosya üzerindeki okuma-yazma-çalıştırma (read-write-execute) izinlerini (rwx) farklı seviyedeki kullanıcılar için (all-owner-group-other) artırıp azalmayı (+/-) sağlar

Kaynaklar:



Yukarıdaki makale alıntı bir makaledir. Makalenin kendi sayfası, kaynak : http://www.bilgiportal.com/zemin/yazi/1541/ozet-linux-konsol-komutlari

9 Nisan 2013 Salı

Byte-UnixBench Kurulumu

Byte-Unixbench 1984 yılından beri unix tabanlı sistemleri sınamak için kullanılan bir uygulamadır. Sistemin grafik başarım testinden, dosya kopyalamasına kadar akla gelebilecek tüm etkenlerini sınar var puanlayarak sistemin ortalama puanını hesap eder. Çoklu cpu desteği bulunan bu yazılımı çoğu sistemi test etmek için kullanabilirsiniz. Örneğin bir VPS'iniz varsa bunu test etmek için kullanabilirsiniz. (terminal tabanlı arayüz var).

Resmi web sitesi : http://code.google.com/p/byte-unixbench/

Öncelikle uygulamanın gereksinimleri olan yazılımları aşağıdaki komut ile kurun;

sudo apt-get install libx11-dev libgl1-mesa-dev libxext-dev perl  perl-modules make


Ardından uygulamayı wget yardımıyla indirip derleyip çalıştıralım.

wget http://byte-unixbench.googlecode.com/files/unixbench-5.1.2.tar.gz
tar zxvf unixbench-5.1.2.tar.gz
cd unixbench-5.1.2
./Run


işlem tamamlandığında aşağıdaki gibi bir ekran karşınıza geliyorsa sorunsuz şekilde sınama işlemi başlamış demektir. Şimdi 15dk-60dk arası sistemi yalnız bırakın zira bu sınama işlemi cidden çok ayrıntılı ve uzun sürüyor.