02 July 2009

Yerelleştirme çalışmaları listesi yenilendi


Geçtiğimiz yıl Eylül-Ekim ayında yoğun bir çalışmayla dernek üyeleri, www.linux.org.tr web sitesinde bulunan Destek ve Eğitim Kurumları, Yerel Özgür Yazılımlar, Kitaplar listelerini yenilemişti.

O sırada el atılmayan “Yerelleştirme Çalışmaları” listesine birkaç gün önce dernek üyelerinden Samed Beyribey el attı; tek tek yerelleştirme çalışması yapan grupları araştırarak onlarla yazıştı ve listeyi yeniden oluşturdu. Yeni katılanlar olduğu gibi, web sitesi / e-posta adresi değişenler de oldu.

Her zaman olduğu gibi listede yer alması gerektiğini düşündüğünüz yerelleştirme gruplarını, bilgileri ile beraber bize e-posta ile iletebilirsiniz.



Özgürlükİçin E-Posta Listeleri


maillisteleriÖzgürlükİçin.com, kullanıcılarına sunduğu hizmetlere bir yenisini daha ekledi. Özgürlükİçin.com altında yerel iletişimi arttırmak maksadıyla aynı illerde yaşayan kullanıcıların iletişime geçmesi için e-posta grupları kuruldu. Başlangıç olarak İzmir, Ankara, Bursa ve İstanbul e-posta listeleriyle başlayan bu oluşum, istek olması halinde diğer iller için de uygulanacak. Bu grupların önceden var olan e-posta gruplarına üye olanlar, yeni listelere otomatik olarak üye oldu.

Bugünden itibaren Özgürlükİçin gruplarının iletişimi bu listeler üzerinden sağlanacak. E-posta listelerine buradan üye olabilirsiniz. Eğer siz de bulunduğunuz şehirde Özgürlükİçin grubu oluşturmak istiyorsanız, bizlerle irtibata geçebilirsiniz.

Haydi, Özgürlükİçin e-posta listelerine!



C Dilinde Volatile Anahtar Kelimesi


C Dilinde Volatile Nedir



Volatile tanım olarak derleyicinin volatile olarak tanımlanan alana (değişken, bellek alanı, struct alanı vb.) yapılan yazma ve okumaları optimize etmemesinin istendiğini belirtir. Optimizasyon hız üzerinde ve kod boyutu üzerinde önemli bir etkiye sahip olduğu için hata ayıklama süreci dışında her zaman istenilen bir özelliktir. Optimizasyon tekniklerinden bir tanesi, derleyecinin değişkenler ve alanlara yapılan yazma ve okumalardan gereksiz olanlar için kod üretmemesi ve bu işlemleri uygun gördüğü şekilde sonucu değiştirmeyecek şekilde yeniden sıralamasıdır (mesela pipeline'ı verimli kullanmak için). Örneğin bir değişkenin değeri bir register'ın içerisine okunduysa programda aynı değişkenin tekrar değerini okumayı gerektiren bir durumda okuma işlemi yeniden yapılmaz ve register'daki hazır değer kullanılır. Yazma durumu da derleyicinin uygun gördüğü bir ana kadar ertelenebilir veya tekrar aynı değerin yazıldığı tespit edilebiliyorsa yazma işlemini bir kez yapılacak şekilde kod üretebilir. Normal durumlarda bu hızlandırma tekniklerini istesek de aşağıda belirilen amaçlarla bazı alanların programda belirtildiği anlarda ve sırada yeniden okuma/yazma yapılmasına gerek duyarız.

Volatile Nerelerde Kullanılır


Gelenekse olarak volatile'ın kullanılmasını gerektiren durumları aşağıda listeledim. Neden volatile'ın modern mimarilerde yetersiz kaldığını öğrenmek için ise okumaya devam edin.

  • Interrupt servis rutinleri içerisinde değiştirilen bir alan kesme dışındaki kodda okunuyorsa (ya da tam tersi) söz konusu alanın değeri programın çalışması süresince her an değişebilir. Derleyici bundan haberdar olmadığı için bir kere değeri okuyup/yazdıktan sonra tekrar aynı işlemi yapmayabilir. Bu tip alanların bu yüzden volatile olarak tanımlanması gerekir (ve haliyle atomik olarak okunup/yazılabilmesi gerekir).


  • Unix/POSIX signal handlerlar interruptlara benzerler: keyfi bir anda akışı kesebilirler. Bu yüzden handler içindne çağırdığınız fonksiyonların en azından reenterant olması gerekir ve handler içerisinde blocking bir çağrı yapamazsınız. Interrupt servis rutinlerinde olduğu gibi handler içersinde ve kodda paylaşılan alanların volatile olarak tanımlanması gerekir.


  • Memoy mapped IO için söz konusu hafıza alanının volatile olarak tanımlanması gerekir. Hafıza olarak görülen alan aslında donanım registerına veya örneğin donanım üzerindeki belleğe karşılık geldiği için okuma ve yazma her zaman pogramda istenildiği yerde ve istenen sayıda yapılmalıdır.


  • Multi thread programlamada doğrudan paylaşılan (örneğin mutex ile kritik bölge içerisinden erişilmeyip doğal haliyle atomik olarak olarak okunup yazılan) bir alanın da volatile olarak tanımlanması gerekir.


  • C standart kütüphanesindeki setjmp/longjmp komutlarının kullandıldığı durumlarda setjmp çağırıldıktan sonra değiştirilen alanların longjmp çağırılıkdıktan sonra değerleri undefined olacaktır. Volatile olarak tanımlanmaları halinde son değerlerini korurlar.



Örnek


Aşağıdaki C kodunu "gcc -O -S volatile.c" komutu ile derleyeceğiz:


volatile int g_val = 42;

int main(void)
{
int f;
f = g_val;
f = g_val;
f = g_val;
return 0;
}


Kodda dikat çeken nokta, global değişkeni okuyarak değeri f değişkenine yazıyoruz, ancak f değişkenindeki değer hiç kullanılmıyor. Volatile anahtar kelimesini silersek derleyicinin main fonksiyonu için ürettiği kod şu:


main:
mov r0, #0
bx lr


Yani sadece 0 değerini döndüren (return 0) ve başka bir iş yapmayan bir fonkisyon. Derleyici optimizasyon yaptı ve hiç bir işe yaramdığını tespit ettiği işlemler için komut üretmedi.


Şimdi de volatile anahtar kelimesi varken derleyelim:


main:
ldr r3, g_val
ldr r2, [r3, #0]
ldr r2, [r3, #0]
ldr r3, [r3, #0]
mov r0, #0
bx lr


Bu kez volatile ile optimizasyonu engellediğimiz için üç ldr komutu ile üç kez g_val'ın gösterdiği adresten okuma yapıldı.


Bu durumda okuma işlemleri hiç bir işe yaramıyor görünüyor ama g_val'ın bir donanım registerını gösterdiğini düşünelim. Donanım register'ları normal hafızadan farklı davranışlar gösterebilirler. Örneğin sadece okuma işlemi bile donanımın durumunda bir değişiklik yaratabilir.

Volatile'ın Modern Mimarilerdeki Yetersizliği


Yazdığımız programın modern çok işlemcili mimarilerde optimizasyon ve mimari nedeniyle tam olarak yazdığımız gibi çalışmamasının ana nedenleri şunlar. 1. Derleyici komutların sıralarını ve okuma yazma işlemlerini değiştirebilir 2. işlemci komutların çalışma sıralarını değiştirebilir 3. Bir işlemcinin hafızaya yazdığı değer önbelleğinde kaldığı için o anda farklı bir işlemci tarafından görülemez ve eski değer okunur (visibility). Volatile kelimesi sadece 1 numaralı optimizasyonu engeller ancak standart diğer durumlardan bahsetmez. gcc bu yüzden kendisinden istenilenden fazlasını yapmaz ve volatile kullanılsa da 2 ve 3 numaraları sorunlar devam eder.
Çözüm işlemcilerin "memory barrier" olarak isimlendirilen komutlarını kullanmaktır. Bu komutlar ön belleği boşaltır ve okuma yazma işlemlerini sıralar. Ancak C kodu içerisinde bunları çağırmanın doğrudan bir yolu yoktur ve bu güzel bir çözüm de olmaz (çok düşük seviyeli). Not: Java dilindeki volatile kelimesi Java 5.0'dan beri memory barrier komutlarını kullanır.


Uygulama seviyesinde sorunun çözümünü pthread kütüphanesi sağlar. Örneğin paylaşılan bir alana mutex ile koruduğumuz bir kritik bölge içinden eriştiğimizi düşünelim. Mutex'i kilitleyip açtığmız pthread çağrıları hem derleyici seviyesinde hem de işlemci seviyesinde (memoy barrier komutları ile) gerekeni yapacaktır. Bu yüzden multi thread programlama yaparken paylaşılan alanları volatile yapmak gerekmez ve yetmez. Bunun yerine alana erişimi gerekli pthread ya da kullanılan daha üst seviyeli kütüphane çağrıları ile kontrol etmeliyiz.


Memory barrier'lerle ilgili güzel bir belge Linux kernel dökümantasyonu içerisinde geliyor. Bu dökümana göre desteklenen mimariler içerisinde bu konuda baz alınan mimari agresif optimizasyonları nedeniyle Alpha mimarisiymiş.



OpenOffice için yardımcı iki araç


OpenOffice 3 kullanıyorsanız bazı eklentilerle kapasitenizi genişletebilirsiniz. OpenOffice.org web sitesine baktıysanız birçok eklentinin bulunduğunu görmüşsünüzdür. Bunların içinden iş hayatında kullanabileceğiniz 2 eklentiyi sizin için seçtik.

Professional Template Pack II – English

İngilizce ve Almanca dillerini destekleyen bu şablon paketi Writer, Calc ve Impress uygulamalarında kullanmak üzeri 120 adet profesyonel kalitede şablon sunuyor. Paketin içinde iş yazışmaları, bütçe, proje planı, posterler, fatura, notlar, sunumlar, mektuplar ve kartvizit şablonları bulunuyor. Eklentiyi bir kere kurduktan sonra şablonları File>New>Templates And Documents altında bulabilirsiniz.

OOoDesignedLabels

Eminim sizde benim gibi birçok defa postalamak istediğimiz zarflara etiket yaratmak için yada yaka kartları oluşturmak ve ölçüyü tutturmak için tablolarla boğuşmuşsunuzdur. Designed Labels bu soruna kolay bir çözüm sunuyor. Eklentiyi bir kere kurduktan sonra şablonları File>New>Templates And Documents altında bulabilirsiniz.

Bu yazıyı beğendiyseniz, diğer yazılarımıza da Linuxipuclari.com adresinden ulaşabilirsiniz.



Enixma Temmuz '09 Sayısı Çıktı


enixma_temmuzAçık kaynak kodlu özgür işletim sistemleri ve programlarının tanıtılmasını misyon edinen e-dergi EniXma'nın temmuz 2009 sayısı çıktı. Her sayıda olduğu gibi, EniXma yine dopdolu bir içerikle karşımıza çıkıyor.

Bu sayıda OpenOffice.org Hesap Tablosu ile liste oluşturmayı anlatılırken, Linux ve özgür yazılımda kelime işlemci denilince akla ilk gelen uygulama olan OpenOffice.org Writer, KDE masaüstü ortamının ofis takımı KOffice'in kelime işlemcisi KWord ve çok hafif bir uygulama olan AbiWord ele alınmış.

Özgün ve kaliteli içeriğiyle bu zamana kadar ilgiyle izlenen EniXma'nın temmuz 2009 sayısının içeriğiyse şu şekilde:

  • Linux'ta Sürpriz Yumurtalar
  • AcidRip
  • Kelime İşlemciler
  • Calc İle Hücre Listesi
  • vi Editörü - V
  • Astromenace
  • TinyCore Linux
  • Bsd - VII

EniXma e-dergiyi buradan indirebilirsiniz.



01 July 2009

İşletim Sistemleri 01.3 – İşlemler


Önceki Yazılara Buradan ulaşabilirsiniz.

İşlem Hiyerarşisi:

İşlemler belirli bir hiyerarşi içinde çalışırlar. Bazı işlemler alt işlemler oluşturarak bunların da çalışmasını sağlarlar. Böylelikle bir uygulamaya ait farklı görevler üstlenen işlemler eşzamanlı olarak çalışabilirler.

Resimde görüldüğü üzere, bazı işlemler başka işlemlerin ebeveyni olarak konumlanmış durumdalar.

Özellikleri:

  • Ebeveyn işlem, çocuk işlem ile eşzamanlı çalışabilir yada çocuk işlemin bitmesini bekleyip daha sonra kaldığı yerden çalışmaya devam edebilir.
  • Çocuk işlem, ebeveyn işlemin tüm değişkenlerini veya bir kısmını kullanabilir.
  • Ebeveyn işlemin sonlanması, çocuk işlemlerin sonlanmasına neden olur.
  • Çocuk işlemler, ebeveyn çalıştığı sürece çalışabilir veya aralıklarla çalışabilir.

Türleri:

  • Bağımsız: Çocuk işlemler, diğer işlemleri etkilemeden çalıştırılabilir ve sonlandırılabilirler, Sonucu kesindir, başka işlemlerin çalışması sonucunun değişmesine neden olmaz.
  • İşbirlikçi: Çocuk işlemler, birbirleri ile ortak çalışırlar, çalışma sıraları değiştiğinde sonuç değişebilir. Uygulamanın çıktısı her zaman aynı olmayabilir. Sonuç dış etmenlere de bağlıdır.

İşlemler Arası İletişim:

İşlemlerin birbirleri ile iletişim kurmasıdır. 2 temel iletişim metodu vardır.

  • Bellek Paylaşımı (Shared memory): Bu yöntemde veri iletimi yoktur. Birden fazla işlem aynı paylaşılan bellek bölgesini kullanarak değişkenler üzerinden iletişim kurarlar.
  • Mesaj Gönderme Arayüzü (Message Passing Interface): Bu yöntemde veri iletimi vardır. Bir işlem veriyi “send” metodu ile gönderirken, diğer işlem veriyi “receive” metodu ile alır.

Mesaj Gönderme Arayüzü, Uygulama Yöntemleri:

  • Direkt veya Dolaylı iletişim
  • Simetrik veya Asimetrik iletişim
  • Arabellek (Buffer) Mekanizması
  • Sabit Boyutlu veya değişken boyutlu mesajlar

Direkt İletişim:
Bu yöntemde bir işlem, göndereceği veriyi direkt olarak bir işleme gönderir. Bu yöntemde gönderici ve alıcı isimleri bilinmelidir. Mekanizma aşağıdaki gibidir.

send(tuketici_islem, veri);
receive(uretici_islem, veri);

Üretici/Tüketici Problemi: Standart bir problemdir. Bir işlem veri üretir, diğer işlem üretilen veriyi tüketir. Direkt iletişime uyarlanmış şekli şöyledir.

Üretici:

repeat
    uret item;
    send (tuketici, message);
until false

Tüketici:

repeat
    receive (uretici, message);
    tuket item;
until false

Özellikleri:

  • Bağlantı otomatik olarak sağlanır.
  • Yalnızca 2 işlem iletişimde bulunabilir.
  • 2 işlem için 1 bağlantı gerekir.
  • Genellikle tek yönlüdür.
  • Tuketici, iletişim sırasında üreticinin kimliğine ihtiyaç duymayabilir.
  • Her iki işlemin kimliği bilinmelidir, kodun bakımı zordur.

Dolaylı İletişim:
Bu iletişim yönteminde, işlemler posta kutusu denen yapı yardımı ile iletişim kurarlar. İşlem aşağıdaki gibidir.

open (posta_kutusu_adi);
send (posta_kutusu_adi, message);
receive (posta_kutusu_adi, message);
  • Ancak eğer bir posta kutusu varsa iletişim sağlanabilir. İşlemler arası iletişimin kurulabilmesi için öncelikle posta kutusu ile iletişim kurulmalıdır.
  • İkiden fazla işlem aynı posta kutusunu kullanabilir.
  • Birden fazla alıcı olduğunda işler karışabilir. Posta kutusuna mesa gelince kimin alacağı belirlenemeyebilir.

Simetrik İletişim:
Bu iletişim metodunda üretici ve tüketici eşit hızlarda çalışır, çoğu zaman ara belleğe gerek yoktur.

Asimetrik İletişim:
Bu iletişim metodunda üretici ve tüketici farklı hızlarda çalışırlar. Ara belleğe ihtiyaç duyulur.

Ara Bellek:

  • Sıfır: Üretici, tüketicinin veriyi almasını bekler.
  • Sınırlı Ara Bellek: Eğer ara bellekte n taneden fazla mesaj varsa üretici bekler.
  • Sınırsız Ara Bellek: Üretici hiç bir zaman tüketiciyi beklemez.

RPC (Remote Procedure Call, uzak prosedür çağrısı):
Ağ üzerinden bağlı bilgisayarlardaki uygulamaların birbirleri ile iletişim kurmaları için bir soyutlmadır.

Gelecek Bölüm:

  • Bellek Yönetimi


Mozilla Firefox 3.5 Duyuruldu


VHS videoları kullanmıyorsunuz, o halde neden Internet Explorer?İndirilme rekorları kıran 3.0 sürümünden sonra Mozilla Firefox topluluğu, 30 Haziran 2009 tarihi itibariyle Firefox 3.5'i kullanıcıların beğenisine sundu. Daha hızlı, daha güvenli ve tamamen özelleştirilebilir sloganı ile çıkan yeni sürüm, özellikleri ve hızıyla dikkat çekiyor. Mozilla Firefox geliştiricileri, 3.5 sürümünün Mozilla Firefox 3.0'dan iki, 2.0'dan ise tam 10 kat hızlı olduklarını belirtiyorlar.

Mozilla Firefox 3.5, daha yüksek performans, kullanım kolaylığı ve artan güvenlik önlemleriyle birlikte pek çok yeniliği de kullanıcılarına sunuyor.

Yeni sürüm 70'ten fazla dili destekliyor. Özel bilgilerinizin güvenliğini sağlayan araçlar geliştirilerek uygulama güvenliği arttırıldı. Firefox artık HTML5 <video> ve <audio>  kodlarını destekliyor. TraceMonkey adındaki JavaScript motoruyla İnternet sayfaları çok daha hızlı açılabilecek. Bulunduğunuz bölgeyi web siteleriyle paylaşarak daha özel aramalar yapabilmenizi sağlıyor. Ayrıca gizli gezinme modu sayesinde gezinilen sitelerin bilgisayara kalıntı bırakması da engellenebilecek.

Yeni sürüm için Mozilla Firefox'un topluluk sitesi SpreadFirefox'un önderliğinde büyük bir gerilla pazarlama kampanyası yürütülüyor. Televizyon, dergi, billboardlar gibi geleneksel ve pahalı reklam mecralarını kullanmak yerine; bloggerların ve sosyal ağları oluşturan milyonların gönüllü desteğini almayı hedefleyen gerilla pazarlama kampanyaları, Mozilla cephesinde uzun bir süredir kullanılıyor.

Bugün Mozilla Firefox'a Destek Verin!

Mozilla Firefox'un gerilla pazarlama kampanyalarından en bilineninin adı, Shiretoko Shock. Mozilla Firefox 3,5'un geliştirilme süreçlerindeki  kod adı olan "Shiretoko" adının kullanıldığı bu kampanyada, kullanıcılardan içinde "Shiretoko" geçen bir cümleyi Twitter ya da Facebook içinde kullanması isteniyor. Bunun için tek yapmanız gereken, bu sayfadaki hazır mesajlardan birine tıklamak .

Mozilla Firefox 3.5'un yeni banner ve düğmeleri de epey eğlenceli. "VHS kullanmıyorsunuz... Peki neden Internet Explorer?" gibi esprili bannerlar, yakın bir gelecekte blog sitelerini süslemeye aday :).

Mozilla Firefox 3.5'a destek olmanın çok fazla biçimi var. Bunlardan biri size uygun olabilir.



E-Dergi Çıktı



Sonunda dergimiz yayınlandı. Güzelde oldu :) Bir sonraki sayı Pardus 2009 özel sayısı olacak. Editör kim olacaksa şimdiden kolay gelsin diyelim. Bu sayıda bir hatamız olduysa affola, destek veren herkese teşekkürler. Eminim attığımız bu adımların devamı gelecektir. Türkiye de özgür yazılımın tanıtılmasında emeği geçen arkadaşlar insanların ön yargılarıyla çarpışırken Özgürlükiçin gibi toplulukların arkalarında olduklarını bildikleri zaman daha şevkle çalışacaklardır. İyi ki varsınız. İşte bu sayının içeriği ve adresleri:


Özgürlükİçin e-dergi Temmuz 2009 - Sayı: 15
Editör: Ceyhun ALYEŞİL

İndir:
300 dpi (24.1 MB) 96 dpi (5.0 MB)

Haberler
Özgür Pençe (Aydın GÜNDÜZ)
İş Modelleri Açısından Özgür Yazılım Lisansları (Erkan TEKMAN)
Deluge ile İnternet'i Keşfedin (Ceyhun ALYEŞİL)
Mount Manager ile Sabit Disklerinizi Bağlayın (Serkan SEÇKİN)
Stopmotion (Şaban KUŞ)
Ağınızı denetim altında tutun: WireShark (Utku ULUŞAHİN)
Geleceğin Parlak Standardı: SVG (Anıl ÖZBEK)
Inkscape Dersleri - 2 (Ali Erkan İMREK)
Komut Sistemi - Temel Programlar ve Komutlar (Muratcan ŞİMŞEK)
Algoritma ve Akış Diyagramları (Mehmet PEKGENÇ)
OpenOffice.org Veritabanı: Hesaplanabilir Alan Oluşturmak (Mehmet PEKGENÇ)
OpenOffice.org ile Üç Boyutlu Çizimler (Mehmet PEKGENÇ)
Basit ve Kullanışlı Gimp Bilgileri (Şaban KUŞ)
Üç Boyutlu Silah Oyunu: Nexuiz (Fahri DÖNMEZ)
TeeWorlds ile Eğlenceye Zıplayın (Tha Doğan GÜNEŞ)
Tarayıcı Oyunları (Ceyhun ALYEŞİL)
Bir Simge Setinin Hazırlanışı (Işıl POYRAZ)
Röportaj: "Pardus'un bir kültürü ve iddiası var." (Banu ÖNAL)
Özgür Bir Adamın Hikâyesi (Ceren ÇALICI)
Son Sayfa


Grub “/boot” Bölümünü Bulamadığında Grub Kurmak…


Herhangi bir şekilde grub MBR’den silindikten sonra tekrar kurmak istediğiniz zaman

localhost ~ # grub-install /dev/sda1
df: Warning: cannot read table of mounted file systems: No such file or directory
df: Warning: cannot read table of mounted file systems: No such file or directory
Could not find device for /boot: Not found or not a block device.

şeklinde bir hata veriyorsa bu hata /boot bölümünün ayrı bir partitionda olmamasından kaynaklanır.

Bunu

 localhost ~ # grub-install --recheck --root-directory=/mnt/xxx /dev/sda

komutunu vererek /boot bölümünün içinde bulunduğu partition’ın, /mnt/xxx klasörüne bağlı(mounted) olduğunu ve boot bölümünün burada olduğunu kontrol etmesini sağlıyoruz.

Bu sayede hatasız grub kurulumu yapmış oluyoruz.

Yardımlarından dolayı ras0ir’e teşekkürlerimi sunarım.

Bu yazıyı beğendiyseniz, diğer yazılarımıza da Linuxipuclari.com adresinden ulaşabilirsiniz.



Assembly Dili


Linux çalıştıran ARM işlemcili bir cihazınız veya sanal makineniz varsa aşağıdaki kodu ".S" uzantılı bir dosyaya kaydedip "gcc -o hello dosya.S" komutu ile derleyebilir ve "./hello" komutu ile çalıştırabilirsiniz.


#include <syscall.h>
.text
.global main
main:
stmfd sp!, {r7, lr}
ldr r0, =hello_string
ldr r1, =strlen
blx r1
mov r2, r0
mov r0, #0
ldr r1, =hello_string
ldr r7, =__NR_write
svc 0
ldmfd sp!, {r7, lr}
mov r0, #0
bx lr

hello_string:
.string "Merhaba Dünya!\n"


Neden Assembly


Günümüzde Assembly ile programlama büyük ölçüde tarihe karışmış durumda. Sistem programlamada, o da belirli ve küçük rutinlerin yazılmasında (boot kodu, context değiştirme, işlemcinin hafıza yöneticisini programlama, atomik primitiflerin yazılması vb. gibi) kaçınılmaz olarak kullanılıyor. Assembly ile optimize edilen kodlar sadece işlemci hızının yetersiz olduğu gömülü sistemler veya işlemcinin ekstra özelliklerini (Intel işlemcilerdeki SIMD komutları gibi) kullanmanın gerekli olduğu yerlerde gündeme geliyor. Bu tür işlerle uğraşmıyorsanız da Assembly öğrenmenin sağlayacağı faydalar var:

  • Assembly bilen birinin optimize C kodu yazmanın püf noktalarını öğrenmesi ve anlaması daha kolaydır.

  • İşletim sistemi olmayan veya çok minimal bir işletim sistemi olan gömülü bir sistemle uğaşıyorsanız açlış rutininin ne yaptığı, işlemcinin çalışma modları gibi önemli bilgileri iyi anlamanın tek yolu işlemcinin Assembly dilini bilmekte yatıyor.

  • Sadece zevk veya daha iyi anlamak için. Assembly doğrudan işlemci üzerinde çalıştığı için yüksek seviyeli dillerden sonra ilginç ve öğretici bir deneyim sağlayabilir.



Neden ARM Assembly


Benim ARM Assembly öğrenme sebeplerim şunlar:

  • Yaygın kullanılan 32-bit bir işlemcinin Assembly dilini öğrenmek istiyordum. ARM assembly hem basit hem de ilginç özelliklere sahip.

  • ARM7TDMI mimarili mikro kontrolcü üzerinde işletim sistemi olmadan veya sadece scheduler ve gerçek zamanlı programlama için gerekli temel yapıları (semaphore, message queue, priority inheritance mekanizmalı mutex) sağlayan FreeRTOS ile programlama yaptığımdan.

  • ARM mimarisi güç tüketimi açısından verimli olduğu için mobile uygulamalarda çok kullanılıyor (örneğin iPhone). İşin aslı sayı olarak dünyanın en çok satan işlemcisi ünvanına sahip. Cortex A8 ve A9 gibi versiyonları ile artık nispeten yüksek hızlara da erişmeye başladı. ARM tabanlı netbooklar belki başta biraz yavaş kalacaklar ama ileride ciddi bir pazar payına ulaşma ihtimali var.

  • Bu sayede "ARM System Developer's Guide" isimli nasıl optimize C kodu yazılacağından interrrupt servis rutini yazma metodlarına kadar değişen konuları ayrıntılı bir şekilde açıklayan bir kitabı okuyup anlamam mümkün oldu.


30 June 2009

Mozilla Firefox 3.5 Kararlı Sürüm Duyuruldu


Mozilla Firefox LogoÖzgür İnternet tarayıcısı Mozilla Firefox'ın 3.5 kararlı sürümü duyuruldu. Mozilla Firefox 3.5 ile gelen yenilikler :
  • 70 farklı dil desteği (Türke henüz beta aşamasında indirilebilir.)
  • Ogg Theora ve Vorbis dahil HTML5 <görüntü> ve <ses> nesneleri için destek.
  • Private Browsing Mode (Kişisel Gezinti Modu) ile özel verileri kontrol etmek için gelişmiş araçlar.
  • TraceMonkey JavaScript motoru ile daha iyi başarım.
  • Location Aware Browsing ile konum paylaşım olanağı
  • JSON and web worker threads desteği
  • Gecko motorunda iyileştirmeler
  • Yeni web teknolojileri : indirilebilir yazı tipleri, CSS ortam sorguları, yeni dönüşümler ve özellikler, JavaScript sorgu seçicileri, HTML5 yerel depolama ve çevrimdışı uygulama depolama, <canvas> yazı, ICC profilleri, ve SVG dönüşümleri.
Dahası için : http://www.mozilla.com/en-US/firefox/3.5/releasenotes/

VirtualBox 3.0 Duyuruldu


vbox logoSanallaştırma uygulaması VirtualBox'ın 3.0 sürümü duyuruldu. Simetrik Çokluişlem ve gelişmiş 3B desteği sunan VirtualBox 3.0, oyun ve uygulamalarda Direct3D 8/9 ve OpenGL 2.0 kullanma ve SMP (Simetrik Çokluişlem) ile 32 taneye kadar sanal işlemci ile çalışma imkanı sağlıyor. Detaylar için : http://www.virtualbox.org/wiki/Changelog İndirmek için : http://download.virtualbox.org/virtualbox/3.0.0/

E-Dergi 15: Pardus ve Milky


e-dergi 15 kapakÖzgürlükİçin Topluluğu'nun her ay düzenli olarak yayınladığı e-derginin 15. sayısının teması, Pardus 2009 ile birlikte gelecek olan yeni simge seti Milky.

Bu sayıda özgür BitTorrent istemcisi Deluge ile İnternet'i keşfederken, sabit disklerimizi Mount Manager ile nasıl yöneteceğimizi öğreneceğiz.

Her zamanki gibi dizi yazılarımıza devam ediyoruz. Gimp dizisinin yazarı Şaban KUŞ bu sayıda, Gimp ile ilgili kullanışlı bilgiler veriyor. Aynı zamanda Stopmotion yazılımı kullanılarak nasıl animasyon yapılacağı da bu sayımızda anlatılıyor. Görsel tasarım araçlarının geniş bir yer bulduğu bu sayımızda, Inkscape derslerimiz de devam ediyor.

Her zamanki gibi OpenOffice.org Türkiye ekibinin hazırladığı yazılar da e-dergide mevcut. Pardus Proje Geliştirme bölümünden Işıl POYRAZ, TÜBİTAK'ın Yıldız Teknik Üniversitesi İnteraktif Medya Ana Bilim Dalı ile birlikte gerçekleştirdiği Milky simge seti verimlilik ölçütleri araştırma projesiyle ilgili ayrıntılı bilgiler veriyor.

Bu sayıda Pardus 2009 için Milky simge setini hazırlayan sevgili grafikerimiz Banu ÖNAL ile keyifli bir röportaj yaptık. Kendisiyle grafik tasarımını ve Pardus'un ikinci simge setini konuştuk.

Paket tanıtımı, oyun incelemeleri ve nasıl belgelerinin de yer aldığı ve Pardus topluluğundan Ceyhun ALYEŞİL editörlüğünde hazırlanan 66 sayfalık e-derginin içeriğiyse şöyle:

  • Haberler
  • Özgür Pençe (Aydın GÜNDÜZ)
  • İş Modelleri Açısından Özgür Yazılım Lisansları (Erkan TEKMAN)
  • Deluge ile İnternet'i Keşfedin (Ceyhun ALYEŞİL)
  • Mount Manager ile Sabit Disklerinizi Bağlayın (Serkan SEÇKİN)
  • Stopmotion (Şaban KUŞ)
  • Ağınızı Denetim Altında Tutun: Wireshark (Utku ULUŞAHİN)
  • Geleceğin Parlak Standardı: SVG (Anıl ÖZBEK)
  • Inkscape Dersleri - 2 (Ali Erkan İMREK)
  • Komut Sistemi- Temel Programlar ve Komutlar (Muratcan ŞİMŞEK)
  • Algoritma ve Akış Diyagramları (Mehmet PEKGENÇ)
  • OpenOffice.org Veritabanı: Hesaplanabilir Alan Oluşturmak (Mehmet PEKGENÇ)
  • OpenOffice.org ile Üç Boyutlu Çizimler (Mehmet PEKGENÇ)
  • Basit ve Kullanışlı Gimp Bilgileri (Şaban KUŞ)
  • Üç Boyutlu Silah Oyunu: Nexuiz (Fahri DÖNMEZ)
  • TeeWorlds ile Eğlenceye Zıplayın (Taha Doğan GÜNEŞ)
  • Tarayıcı Oyunları (Ceyhun ALYEŞİL)
  • Bir Simge Setinin Hazırlanışı (Işıl POYRAZ)
  • Röportaj: "Pardus'un bir kültürü ve iddiası var." (Banu ÖNAL)
  • Özgür Bir Adamın Hikayesi (Ceren ÇALICI)
  • Son Sayfa


E-dergiyi ve geçmiş sayıları e-dergi sayfasından indirebilirsiniz.



İzmir Buluşması Nasıl Geçti?


Özgürlükİçin topluluğu büyüyor!Daha önce duyurusunu yaptığımız İzmir’deki Pardus kullanıcılarının buluşması, ilan edildiği gün olan 27 Haziran 2009 Cumartesi günü Konak’ta Kızlarağası Hanı’nda gerçekleşti.

İzmir’de Pardus kullanıcılarının ilk etkinliği olma özelliğini taşıyan buluşma, katılımcıların birer birer gelerek  “Pardus değil mi?” sorusu ve yüzlerde oluşan tebessümle birer tabure çekip muhabbete katılmalarıyla başladı.

Beklenenin aksine yüksek bir katılımın (20 kişi) olduğu buluşmada genel olarak Pardus, özgür yazılım ve geleceği üzerine görüşler dile getirildi. Topluluk yöneticimiz Akın ÖMEROĞLU, Pardus Göç Ortaklığı ve 2009’a geçişle ilgili bazı bilgiler verdi. Katılımcılar, İzmir ve çevresinde Pardus için neler yapılabileceğine dair fikir ve taleplerini dile getirdiler. Pardus'un tanıtımı ve kullanımının yaygınlaşması için seminer çalışmalarına hız verilmesi gerektiği konusunda fikir birliğine varıldı. Seminer çalışmalarında yapılabileceklerle Özgürlükiçin'in bu konuda vereceği destek hakkında konuşuldu.

KDE Türkiye (çeviri) sorumlusu Serdar SOYTETİR, katılımcılara KDE çevirilerindeki durumumuz hakkında bilgi verdikten sonra çevirinin nasıl yapıldığını uygulamalı olarak anlattı. İki katılımcı çevirilere destek vermeye hazır olduklarını söylediler.

Yeni İletişim Kanalları

Buluşmada, İzmir ve diğer illerdeki Pardus kullanıcılarının daha iyi iletişim kurmalarını sağlamak amacıyla yeni iletişim kanalları oluşturulmasına (e-posta listesi, web sayfası), bir sonraki buluşmanın bu iletişim kanallarıyla duyurulmasına karar verildi. 2009 sürümünün hazırlıkları yüzünden bu iletişim kanallarının oluşturulması, temmuz ayının ikinci yarısına sarkabilir.

İzmir’de yapılan ilk buluşmada bir araya gelen ve İzmir’deki diğer Pardus kullanıcılarının da katılımıyla daha da artacağı beklenen bu oluşumun “Özgürlükiçin İzmir Topluluğu” olarak anılmasına, çalışmaların bir bütünlük içinde gerçekleşmesi ve verimliliğinin artması amacıyla Özgürlükiçin ile işbirliği içinde çalışılmasına, diğer illere örnek olacak ve yardımcı olacak çalışmalar yapılmasına ve 2009'a geçişle beraber nasıl belgelerinin güncellenmesi ile belgeleme ve çeviri çalışmalarına destek olunmasına karar verildi.

Bir sonraki Özgürlükİçin İzmir buluşmasında görüşmek üzere...



Ubuntu Default Browserını Nasıl Değiştiririm?


Ubuntu sisteminizde herhangi bir http bağlantısına tıkladığınızda açılan browserı değiştirmek için System \ Preferences \ Prefered Applications menu seçeneklerinden Prefered Applications uygulamasını çalıştırın.

Karşınıza aşağıdaki gibi ekran çıkacak. Bu uygulama aracılığıyla varsayılan browserınızı veya email uygulamanızı değiştirebilirsiniz.

defaultapps

Bu yazıyı beğendiyseniz, diğer yazılarımıza da Linuxipuclari.com adresinden ulaşabilirsiniz.



29 June 2009

İşletim Sistemleri 01.2 – İşlemler ve Zamanlayıcı


Tekrar merhaba, bu yazımızda sırasıyla:

  • Context Switching (İçerik Değiştirme)
  • Zamanlayıcı Çeşitleri
  • Zamanlama Algoritmaları

kavramlarına değineceğiz.

Context Switching (İçerik Değiştirme):

Preemption: Genel amaçlı modern işletim sistemlerinde bulunan bir yapı olan preemption mekanizması, bir işlemci üzerinde bir işleme t kadar bir zaman aralığı verilmesini sağlar. Eğer bir işlem t sürede tamamlanır ve “çalışıyor” durumundan “sonlandırıldı” durumuna geçerse, herhangi bir sorun olmaz, “hazır” kuyruğunda bekleyen sıradaki uygulama “çalışıyor” durumuna geçer. Fakat bir işlem t zaman aralığında sonlanmazsa “preemption” mekanizması devreye girer ve bu işlemi işlemciden (”çalışıyor” durumundan) alarak “hazır” kuyruğuna gönderir.

Context Swtichin (İçerik değiştirme) ise t zaman aralığında bitmemiş işlemin “hazır” kuyruğuna gönderilmesi sırasında gerçekleşen tüm olayları kapsar. Bu işlem sırasında gerçekleşen olaylar ise şu şekildedir.

  • Çalışan işleme ait PCB (Process Control Block, İşlem Kontrol Bloğu) veri yapısı belleğe yazılır.
  • Zamanlayıcının belirli algoritmalara dayanarak seçtiği yeni işleme ait PCB işlemciye gönderilir.
  • İşlemci PCB verilerine göre durumunu değiştirir. (Registerlar, program counter vs)
  • İşlemi çalıştırır.
  • t kadar süre geçtikten sonra durumunu belleğe gönderir, yeni işlemin gelmesini bekler.

Burada görüldüğü üzere bir işlem sonlanmadan, diğer bir işleme geçiş yapılmaktadır. Bu olaya Context Switching denir.

Context Switching’in yararları:

  • Çok işlemli işletim sistemlerinin tasarımını sağlar. Aynı anda birden fazla uygulama çalıştırılabilir.
  • Çok kullanıcılı işletim sistemlerinin tasarımını sağlar. Birden fazla kullanıcı sisteme bağlanabilir.
  • Bir işlem çalışırken, diğer işlemlerin de devam etmesini sağlar.
  • Herhangi bir uygulama çalışırken işletim sistemi de çalışmakta olduğundan işletim sistemi kontrolü sürekli elinde tutar.
  • Deadlock (daha sonra ayrıntılı olarak ele alınacaktır, bir uygulamanın kilitlenmesi olarak düşünebilirsiniz.) durumunda, sadece deadlock olmuş uygulamanın sonlandırılmasını sağlar.

Zamanlayıcı ve Çeşitleri:

Sıradaki işlemlerden hangisinin işlemcide çalıştırılacağını belirleyen mekanizmadır. Bu işlemi gerçekleştirmek için farklı algoritmalar kullanabilir.

Uzun Dönemli Zamanlayıcı (Long Term Scheduler):

  • İşlemleri iş kuyruğundan seçer.
  • Seçilen işlemleri çalıştırılmak üzere belleğe yükler.
  • Hazır kuyruğunu günceller.
  • Çokluprogramlamanın derecesini kontrol eder. (Ana bellekte kaç adet işlem olacağı)
  • Kısa dönemli zamanlayıcıdan daha seyrek çalışır.
  • Seçtiği işlemlerin işlemci kullanımı ve girdi/çıktı miktarı arasında bir oran oluşturmaya çalışır. Örnek olarak sürekli g/ç yapan işlemleri seçmez bunun yerine 1 adet g/ç, 1 adet hesaplama yapan işlem çalıştırır.
  • Bazı işletim sistemlerinde bulunmayabilir.

Kısa Dönemli Zamanlayıcı (Short Term Scheduler):

  • İşlemleri “hazır” kuyruğundan seçer.
  • İşlemciyi seçilen işlem için hazır duruma getirir (kaynak ayırır.)
  • İşlemi, işlemciye gönderir.
  • Çok kısa aralıklarla tekrar tekrar çalışır. (bir kaç milisaniyede bir)
  • Çok hızlı karar vermek zorundadır.

İyi Bir Zamanlayıcının Özellikleri:

  • Adalet: Her bir işlem, işlemciyi adil bir şekilde paylaşmalıdır.
  • Verimlilik: İşlemci yükü %100′e yakın olmalıdır, unutmayın ki kullanılmayan işlemcinin kimseye yararı yoktur.
  • Tepki Zamanı: İnteraktif kullanıcılar yaptıkları işlemlerin etkilerini çok kısa sürede görebilmelidirler. Kimse yazı yazmaya başladıktan belirli bir süre sonra ekranda harflerin belirmesinden hoşnut olmaz.
  • Geri Dönüş Süresi: Bir işlemin çıktı verene kadar geçen süresini minimuma indirmelidir.
  • Çıkış: 1 saat içinde yapılan işlem sayısını maksimize etmelidir.

Zamanlama Türleri:

1. Preemptive:

  • Süren bir işlemi kısa zaman aralıklarında çalıştırır, çalışmadığı zamanlarda işlemci’de çalışacağı zamanı bekler.
  • İşlemcideki kayıp zaman non-preemptive’e göre fazladır.
  • Interrupt (bir olayın sonucuna bağlı olarak), trap (hata veya exception’a bağlı olarak), Supervisor Call (kernel’den özel bir çağrıya bağlı olarak) nedeniyle işlem, duraklatılabilir.

2. Non-Preemptive

  • İşlem sonlanana kadar işletim sistemi işleme müdahale etmez.

Zamanlama Algoritmaları:

  • İlk Giren İlk Çıkar: Bu algoritmada işlemlerin işlemciye geliş sırasına göre işlemci bunları çalıştırır. En basit zamanlama algoritmasıdır. Uygulaması kolay olduğundan ve bazı sistemlerde gelen olaya göre sıralı tepki verilmesi gerektiğinde kullanılır. Ortalama bekleme süresi uzundur. Günümüz kullanım alanı genellikle gömülü sistemlerdedir. Preemptive değildir.
  • Son Giren İlk Çıkar: Bu algoritmada, ilk örneğin tersidir. Son gelen işi ilk sıraya alır. Pek fazla kullanım alanı yoktur. Preemptive değildir.
  • En Kısa İşlem Önceliği: Bu algoritmada sıradaki en kısa iş en önce yapılır. Böylece birim sayıda yapılan işlem sayısı artırılarak tepki zamanı düşürülmeye çalışılır. Genelde toplu işlemlerin yapılmasında kullanılır. (Bankadaki haftalık hesapların arkaplanda yapılması gibi) Preemptive değildir.
  • En Uzun İşlem Önceliği: Burada en uzun işlem ilk önce yapılarak işlemcideki iş yükünün sürekli yüksek olması amaçlanır. Böylece işlemciden daha çok verim alınabilir. Yüksek performanslı bilgisayarlarda sıkça kullanılmaktadır. Preemptive bir algoritmadır.
  • En Az İşlem Zamanı Kalan İşlem Önceliği: Bu algoritma en kısa işlem önceliği algoritmasının preemptive halidir. Bir işlemin ne kadar süre daha çalıştırılacağını belirleyip kalan zamanı en az olan işlemi çalıştırır. Günümüzde genel amaçlı bazı bilgisayarlarda kullanılmaktadır. Amacı tepki zamanını azaltmaktır. Preemptive bir algoritmadır.
  • Round Robin: En adil algoritmadır. Tüm işlemlerin önceliği aynıdır ve eşit zaman aralıklarında çalışırlar. Süresi dolan işlem preemtive edilir. bir sonraki işlem çalışır. Hazır kuyruğu olarak dairesel kuyruk veri yapısını kullanır. Preemptive bir algoritmadır.
  • Çok Kademeli Geri Beslemeli Zamanlama: Bu algoritma günümüzde genel amaçlı bilgisayarlarda en fazla kullanılan algoritmadır. Bu algoritmada Context Switch’den kaybedilen zamanı azaltmak için çalışan işlemlerden geri besleme alınır ve zaman aralığı artırılabilir. Ayrılan zamanı arttırmak CPU yükünü yüksek tutacağı gibi boş geçen zamanı düşürür bu da performans artışı sağlar. Tabii ki diğer taraftan starvation (bir işlemin yeterli kaynağı bulamaması durumunda kilitlenmesi) ihtimaline karşı önlem alınır ve belirli bir zaman periyodundan sonra context switching gerçekleşir.

Gelecek Bölüm:

  • İşlem akrabalıkları
  • İşlemler arası iletişim


Ubuntu’da ters videoyu düzeltme


Geçenlerde arkadaşlar komik bir video çekmişler bana geldiler ve youtube a yüklemek istediklerini söylediler. Ama fotografçılıkta da yapılan o makinayı dik tutup çekme olayını videoya da uyarlamışlar ve videoyu çalarken 90 derece eğik izlemek zorunda kalmışlar. Bu şekilde de yüklemek olmaz deyip bana sordular.

Küçük bir sorun ama çözüm bilinmediği zaman cansıkıcı olabiliyor. Bunu ubuntuda yapmak oldukça kolaymış. Şu şekilde;

Avidemux isimli ücretsiz video düzenleyici programı kuruyoruz. Sözkonusu yamuk videoyu bu programla açıyoruz. Hemen sol taraftaki açılır menüden formatı seçip, süzgeçler kısmına geçiyoruz ve rotate süzgecini seçip, 90 dereceye ayarlıyoruz. Sonra videoyu kaydediyoruz. Hepsi bu kadar.

Ekran Görüntüsü-1



Cave Canem : Bekçi Köpeğinizi Başı Boş Bırakmayın


Günün erken saatlerinde derneğin web sitelerine bağlanmak isteyenler muratlarına eremediler. Web sunucusu yanıt vermiyordu.

Derneğin sunucularını yöneten üyeler makinaya ulaşmaya çalıştılar ama makina ilginç biçimde kapalı duruyordu. Öğlen saatlerinde Uğur (Karatay) Bilkent’in sunucu odasına gitti. Karanlık bir ekran dışında bişi bulamayınca makinayı tekrar başlatmakta buldu çareyi.

Aradan bir saat geçtikten sonra makinanın yine kapandığı uyarısı geldi. Fakat sistem yöneticileri ilk anda bunu ciddiye almadılar çünkü baktıklarında makina çalışıyordu. Israrlar üzerine farkedildi ki makina kendiliğinden açıp/kapanıp duruyordu. Ümit (Ezerçe), Necati (Demir) ve Kerem (Ersoy) seferber olup ne olduğunu araştırmaya başladılar. 11 dakikalık aralıklarla açılıp/kapandığı keşfedildi ama neyin buna yol açtığına akıl ermedi. 8 işlemcinin sıcaklığında da bir problem yoktu. RAM arızası da olsa bu kadar kesin periyotlarla olmazdı.

Kerem alet çantasını alıp makinanın başına gitmeye hazırlanırken, “en kötü senaryo” planları yapılıyordu — web servislerinin bulunduğu sanal makinayı başka bir makinaya kopyalayıp, çalışır hale getirip, açılıp/kapanan makinayı koltuğun altına alıp götürmek gibi.

Tam o sırada Kerem (koltuğunun altında o kasayı hayal etmenin verdiği motivasyonla da olsa gerek) bunun neden kaynaklandığını buldu. Sunucuda hardware watchdog timer’ı açmıştı, bunun çekirdeğe desteği eklenmediği için de “watchdog” makinada problem olduğunu zannedip makinayı resetliyordu. Watchdog kapatıldı ve hayat normale döndü.

Futbol derbilerinde gol atmayanı gerçek takımlı saymadıkları gibi, dernekte de sunucularda bir kez ciddi bir arızaya yol açmayan sistem yöneticisi sayılmıyor. Artık Kerem de bu hamleyle “milli” oldu ve sunucu ekibindeki yerini sağlamlaştırdı :)



Fedora 11, Nvidia ekran kartları ve olası ses sorunları


Fedora 11'e geçişimde (bununla ilgili yazı ayrıca gelecek)donanım ile ilgili iki sorun yaşadım. Biri ses kartı ile ilgiliydi.Fedora 9'dan güncelleme yaptıktan sonra laptop sesi az geliyordu. Menülerde görebildiğim tüm şeylere baktım ama hepsi en üst seviye sesi gösteriyordu.


Google'a bakındım. Sorunun Fedora 11 ile karşılaşılabilen bir sorun olduğunu gördüm. İlgili madde burada. Sizin de başınıza gelirse gst-mixer paketini yükleyip sesi arttırabilirsiniz.


 ikinci sorun ise Nvidia ile ilgiliydi. Sorunun yarısı benden kaynaklandı: Elimde 2-3 ay önce indirdiğim Nvidia sürücüsü vardı. Çekirdek ile ilgili hatalar verdi. Ben ilk anda ısrar ettim ama sonra Nvidia'nın 185.18.14 sürümünü çıkardığını gördüm. Changelog'daki ilk madde şu idi:



  • Improved compatibility with recent Linux kernels.


Güncel sürücüyü indirince kurulum bitti -- ama bu sefer de X başlamıyordu. Mesajlar çok açık değildi; o yüzden Google'a danıştım yine.


Sorun açık kaynak kodlu nouveau sürücüsü ile ilgili imiş. nouveau Nvidia için AKK sürücü -- ve aynı zamanda nvidia modülünün yüklenmesini *engelliyormuş*.  Çözmek için /etc/modprobe.d/blacklist.conf içine


blacklist nouveau


yazdım. Reboottan sonra derdim çözüldü. :-)



T-Mobile'dan İkinci Android


T-Mobile_HTC_my_touch_3GT-Mobile, 3G ağı müşterileri için geliştirilen Android tabanlı yeni bir cep telefonu olan HTC Magic - MyTouch 3G'yi 8 Temmuz'da Amerika'da ön satışa çıkaracağını duyurdu. Magic, kişiselleştirme özellikleri ve aksesuarlarıyla Avrupa'da Vodafone tarafından pazara sunuluyor. BusinessWeek'e göre telefonun ön sipariş verenlere teslimatı 29 Temmuz'da başlayacak ve telefon iki yıllık sözleşmeyle birlikte 200 dolara satılacak.

eWEEK'e göre MyTouch 3G; temel olarak Vodafone tarafından satılan yeni HTC Magic'in donanımı ve Android yazılımındaki birkaç küçük değişikliğini içeren hali. T-Mobile'ın önceki Android tabanlı telefonu HTC G1 bir milyondan fazla satarak ciddi bir başarı elde etmişti. Aslında iPhone'a karşı T-Mobile ile Tayvan firması HTC piyasada ikinciliği ellerinde tutuyorlar. BusinessWeek'teki bir habere göre, firma MyTouch 3G'nin pazarlaması üzerinde yoğunlaşacak.

MyTouch 3G'nin gösterişli tasarımı, uzun pil ömrü ve geliştirilmiş kişiselleştirme özellikleri G1'e karşı üstünlük sağlıyor. T-Mobile da şu ana kadar telefondaki birkaç detayı İnternet sitesinde yayınlamaya ve teslim tarihiyle ilgili detaylı açıklamalarda bulunmaya başladı.

MyTouch 3G'nin Teknik Özellikleri:

  • 3G şebeke desteği
  • Dokunmatik ekran ve sanal klavye
  • Kişiselleştirilmiş programcık özelliği ve pek çok tema ve stil
  • Özelleştirilebilir menüler, simgeler ve duvar kâğıtları
  • Google Search, Google Maps ve Gmail erişimine daha iyi entegrasyon
  • 3.2 megapiksel kamera, video yakalama desteğiyle
  • E-posta ve müzik için gelişmiş tek tuşla erişim
  • Ses ile arama

HTC Magic ile karşılaştırmalı donanım özelliklerinin ve "HTC Magic'in özelliklerinin sihri"nin tanıtıldığı detaylar, BusinessWeek tarafından hazırlanmış durumda. MyTouch 3G tüm özelliklerine bakıldığında HTC G1'i yeniyor, 3.2 inç, dokunmatik Q klavyesiyle, 320 x 480 ekran dikey ve yatay olarak kullanılabiliyor. Aynı zamanda cihaz, G1'den daha ince ve hafif. Ek olarak, MyTouch 3G 512 MB hafıza içeriyor (G1'in iki katı).

BusinessWeek yazarı Olga KHARİF'e göre, edindiği MyTouch 3G, 6 saat sabit konuşma hakkıyla birlikte sunulacak. Siyah, beyaz ve şampanya renk seçenekleri ve 40 kadar seçimlik aksesuvar mevcut.

Telefon, Geodelic'in GPS kaynaklı "Sherpa" uygulamasının özel bir sürümünü içeriyor. Bu sürümde T-Mobile firmasına konum tabanlı hizmetler desteği sağlatmış. Sherpa'nın T-Mobile sürümünde, GPS bağlantısıyla bulunulan noktanın koordinatlarının gösterilmesine ek olarak; etraftaki lokanta, sinema, bar, alışveriş merkezleri hakkında bilgiler sunuyor ve bu mekânları kullanıcının oylamasına sunarak, diğer kullanıcıları da bilgilendiriyor.

 

Kaynak: LinuxDevices



Dinamik Bağlanma (Dynamic Linking) ve Hata Çözümleme


Önceki yazımda verdiğim örnek programı yazının başlığından da gelen ipucuyla bir iki arkadaşım çözmeyi başardı. Ama sorun kokeksibir’in yorumundakinden daha farklı. (Onu da anlatacağım ama sonra) Programı derleyip çalıştırdığınızda 1022 defa “Unable to connect to database” hatası vererek sonlandığını göreceksiniz. (Denemeyenler şimdi ortaya çıkacak :) ) İlginç, hiç bir yerde döngü yok aslında. (İlk ipucu, iç içe çağrılar var ama nerede?) Programa baktığımıza hiç sorun görünmüyor. Bir şeyleri yanlış yapıp yapmadığımızı anlamak için yine de bir iki sefer kodu kontrol ediyoruz.

Sonucun değişmemesi, çalışma zamanında yanlış giden bir şeylerin olduğu konusunda şüphelendiriyor. Hemen GDB’yi çalıştırıyoruz.


	gdb ./mysql_bug
	break connect

connect() metodunun çıktısını gördüğümüzden oraya bir breakpoint ekledim. run diyerek çalıştırıyoruz ve breakpoint’e takılıyor. Adım adım işletelim.

	next
	n
	<enter>

O da ne?? Tekrar connect()’e geldi. hmm, bt ile bir stack trace alalım.

	(gdb) bt
	#0  connect () at mysql_bug.c:16
	#1  0xb7e6f766 in my_connect () from /usr/lib/libmysqlclient.so.15
	#2  0xb7e70338 in mysql_real_connect () from /usr/lib/libmysqlclient.so.15
	#3  0x080485f0 in connect () at mysql_bug.c:16
	#4  0xb7e6f766 in my_connect () from /usr/lib/libmysqlclient.so.15
	#5  0xb7e70338 in mysql_real_connect () from /usr/lib/libmysqlclient.so.15
	#6  0x080485f0 in connect () at mysql_bug.c:16
	#7  0x08048644 in main () at mysql_bug.c:34

İlginç bir şekilde mysql_real_connect()’ten sonra, tekrar connect() metodumuza geliyor. MySQL kütüphanesi bizim yazdığımız bir fonksiyonu neden çağırsın? Artık mesele anlaşılmış gibi olsa da biraz daha debug etmeye devam edelim. “ignore 1 1010″ komutuyla GDB’nin breakpoint’imizi 1010 kez gözardı etmesini sağlıyor ve devam (cont) ediyoruz. Tekrar breakpoint’e takıldığımızda bir bt komutuna bakın.. Artık problem daha da kendini belli ediyor. Tüm stack tekrar tekrar çağırılmaktan dolmuş:

	#3034 0xb7e6f766 in my_connect () from /usr/lib/libmysqlclient.so.15
	#3035 0xb7e70338 in mysql_real_connect () from /usr/lib/libmysqlclient.so.15
	#3036 0x080485f0 in connect () at mysql_bug.c:16
	#3037 0xb7e6f766 in my_connect () from /usr/lib/libmysqlclient.so.15
	#3038 0xb7e70338 in mysql_real_connect () from /usr/lib/libmysqlclient.so.15
	#3039 0x080485f0 in connect () at mysql_bug.c:16
	---Type <return> to continue, or q <return> to quit---
	#3040 0x08048644 in main () at mysql_bug.c:34

Dinamik Bağlanma (Dynamic Linking)

Artık bulmacanın cevabını verebiliriz. Bir şekilde fonksiyonumuza verdiğimiz masum “connect” ismi, MySQL kütüphanesinde de tanımlanmış ve mysql_real_connect() fonksiyonu tarafından kullanılıyor. Biz mysql_real_connect’i çağırdıkça o da bizi tekrar çağırıyor. Bu iç içe durum 1022 kez tekrarladıktan sonra mysql_real_connect hata dönüyor ve o ana kadar çağırılan tüm metodlar hata vererek tek tek çıkıyor.

Peki, bizim kendi yazdığımız bir fonksiyon nasıl olur da MySQL kütüphanesi tarafından çağırılabilir? (Bence esas yanıtlanması gereken soru bu, yoksa problemi deneme yanılma yaparak çözmek ve bir daha arkanıza bakmadan kaçmak mümkün. Ama gerçek bir coder kaçmaz, üzerine gider.)

Programımız MySQL kütüphanesine dinamik olarak bağlanarak derleniyor. Dinamik bağlanma yönteminde çalıştırılan program hangi kütüphaneleri kullandığını bir tabloda ve bu kütüphanede kullandığı metodları da başka bir tabloda tutar. Bu listeyi görmek için “ldd” komutunu kullanabiliriz. Mesela bizim programımız için ldd çıktısı şu şekilde olmaktadır:

	# ldd mysql_bug
	linux-gate.so.1 =>  (0xb8092000)
	libmysqlclient.so.15 => /usr/lib/libmysqlclient.so.15 (0xb7e96000)
	libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7d33000)
	libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7d19000)
	libcrypt.so.1 => /lib/tls/i686/cmov/libcrypt.so.1 (0xb7ce7000)
	libnsl.so.1 => /lib/tls/i686/cmov/libnsl.so.1 (0xb7cce000)
	libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7ca8000)
	libz.so.1 => /lib/libz.so.1 (0xb7c92000)
	/lib/ld-linux.so.2 (0xb8093000)

Programımızı çalıştırdığımızda Linux altında ld-linux.so kütüphanesi bu tablodaki kütüphaneleri bağlamaya başlar ve programımızı çalıştırır. (Aynı shell scriptlerinin ilk satırında hangi interpreter tarafından çalıştırılacağının yazması gibi, tüm çalıştırılabilir dosyaları da aslında ld-linux.so “çalıştırır”. /lib/ld-linux.so’ya programınızın adını parametre verin ve olanları görün :) ) Öncelikle tüm kütüphaneler araştırılır. ld-linux, /etc/ld.so.config dosyasındaki sıralamaya göre kütüphaneleri arar. Bulunamayan bir kütüphane olduğunda program çalışması hata ile sonlanır (hatta teknik olarak hiç başlamaz..) Genelde aksi belirtilmedikçe fonksiyonlar tembel (LAZY) bağlanır. Yani bir fonksiyon kullanılmadıkça performans açısında bu arama/bağlama işlemi masraflı bir işlem olduğu için bağlanmaz.

Program çalışması sırasında daha önce bağlantısı sağlanmamış bir fonksiyon kullanımı ile karşılaşıldığında hemen bir dinamik bağlanma işlemi başlar. Aşağıdaki sırayla fonksiyon bulunmaya çalışılır:

  1. mevcut program içinde
  2. LD_LIBRARY_PATH çevre değişkeniyle verilmiş olan kütüphaneler arasında
  3. programın dinamik bağlı olduğu kütüphaneler arasında (ld.so.cache’e bakarak)
  4. programın dinamik bağlı olduğu kütüphanelerin önce /lib’te sonra /usr/lib’te bulunanları arasında

Gördüğümüz gibi, bilinmeyen bir fonksiyon hangi kütüphaneye ait olursa olsun, bu sırayla araştırılıyor. MySQL kütüphanesine ait mysql_real_connect fonksiyonu bağlandıktan sonra, çalıştırıldığında içindeki connect() fonksiyonu için arama başlatılıyor ve ilk sırada bizim programımız içinde bir aday bulunduğu için bağlantı burada sonlanıyor. Ondan sonrası yukarıda karşılaştığımız duruma neden oluyor.

Yukarda kendi programımızı debug edebilmiştik. Peki, bu dinamik bağlantı işlemini nasıl görebiliriz ve hataları tespit edebiliriz? Kütüphanenin çevre değişkenleri sayesinde çalışmasının etkilenebildiğini LD_LIBRARY_PATH’ten biliyoruz. Aynı şekilde LD_DEBUG çevre değişkeniyle de debug çıktısını açabilmek mümkün. Burada kullanılabilecek çeşitli parametreleri man ld-linux ile veya LD_DEBUG=help <herhangi_bir_komut> ile görebilirsiniz. Şimdilik LD_DEBUG=all ./mysql_bug diyerek programımızı çalıştıralım ve yukardaki paragrafta anlattığımız süreci canlı canlı görebilirsiniz. Çok uzun bir çıktı veriyor ama ilk satırlarını okumak fikri anlamanız açısından çok öğretici ve faydalı.

MySQL kütüphanesinde neden böyle çok yaygın kullanılabilir bir fonksiyon ismi vardır, kim bilir? Ama özensiz alınan kararlar maalesef böyle sorunlara neden olabiliyor. Fonksiyonlara, değişkenlere isim vermek sorumluluk ister.

Aslında bu yöntem çok yaygın olarak programların hafıza tahsis (memory allocation) hatalarını tespitte kullanılabilmekte. Örneğin malloc/realloc/free fonksiyonlarını yeniden tanımladığımız bir kütüphane yazarak, diğer programları test etmek mümkün (üstelik tekrar derlemek gerekmeksizin..)

Sonuç: Ufak gibi görünen bir sorun, üzerine düşüldüğünde farklı kavramların tekrar üzerinden geçmemizi ve hafiften paslanmış debugging marifetlerimizi hatırlamamızı sağladı.

Bunun üzerine fonksiyon ismini my_connect() yaparak tekrar denedim. Bahtsızlığın bu kadarı, bu seferde derleme aşamasında bir hatayla karşılaştım. :) Bu fonksiyon yine (!!) MySQL tarafından tanımlanmış. Başlık dosyalarında daha farklı tanımlandığı için daha derleme aşamasında hatayı görmek mümkün olabildi. Bu sorun kokeksibir’in yorumunda bahsettiği durum..) Neyse bunu geçebilmek en azından daha kolay.

Keyifli kodlamalar..



28 June 2009

İşletim Sistemleri 01.1 – İşlemler ve Zamanlayıcı


İşlem (Proccess) Nedir?

İşlem bir uygulamanın çalışmakta olan (aktif olan) durumuna verilen isimdir.  Bir işlem tarafından tutulan özellikler aşağıdakilerdir.

  • Donanım durumu
  • bellek durumu ve adresleri
  • işlemci
  • ilerleme durumu

İşlemlerle çalışmak

  • kaynak paylaştırma (mantıksal (dosyalar) ve fiziksel (bellek, işlemci vs))
  • hesaplamaların hızlanması (paralel programlamanın avantajlarının kullanımı)
  • güvenliğin artması

gibi özellikler sağlar.

Bir İşlemin Durumları:

scheduler

  • Yeni: İşlemin henuz yeni oluşturulduğu durumdur.
  • Çalışıyor: işlemi oluşturan kodların çalıştırıldığı durumdur. Bu durumdaki işlem işlemcide tutulur.
  • Bekliyor: Bir olay veya girdi/çıktı işlemi için işlemin beklediği durumdur.
  • Hazır: Bir işlem için gereken tüm kaynakların ayrıldığı, işlemcide çalıştırılması için işlemin beklediği durumdur.
  • Sonlandırıldı: İşlemin bittiği durumdur.

PCB (Process Control Block, İşlem Kontrol Bloğu):

Her bir işlem ile ilgili bilgi içeren veri yapısıdır. İçerdiği bilgiler şunlardır:

  • PC (Program Counter, programın çalışması sırasında çalışmanın hangi aşamada olduğunu saklar.)
  • Bellek yönetim bilgileri
  • Kullanılan Zaman
  • İşlem Numarası
  • Girdi/Çıktı durumu
  • Zamanlayıcı verileri, öncelik
  • İşlem Durumu (bekliyor, çalışıyor vs)

Zamanlama (Scheduling):

Zamanlayıcının görevi aktif çalışan bir işlemi, işlemciden alıp yerine başka bir işlem atamaktır. Bu işleme Context Switching (CS) denir. CS yapılırken önceki işleme ait PCB alınıp belleğe yazılır ve yeni işlemin PCB’si işlemciye gönderilir.

Zamanlayıcı Kuyrukları:

Zamanlayıcı yapısında iki adet kuyruk vardır. Bunlardan bir tanesi Hazır kuyruğu, diğeri ise girdi/çıktı kuyruğudur. Hazır kuyruğunda işlemciye gönderilecek, kaynak tahsis edilmiş işlemler beklerken, girdi/çıktı kuyruğunda işlemcide çalışmış ancak bir kaynağa erişmesi gereken ve henuz kaynak tahsil edilmemiş işlemler beklerler. Bu listeler tekli bağlı liste olabileceği gibi çiftli bağlı liste de olabilir.

Gelecek Bölüm:

  • Zamanlayıcı (Devam)
  • İşlemleri Zamanlama
  • İşlemler Arası İletişim


Linux ile Rapidshare’den Dosya İndirme


  • aria2 programını yükleyin. bknz: Ubuntu’da program yükleme
  • İndireceğiniz dosyaların bağlantılarını, her satıra bir bağlantı gelecek şekilde bir txt dosyaya yazınız. (örnek: foo.txt)
aria2c --http-user=KULLANICI_ADI --http-passwd=SIFRE -i foo.txt

komutu ile foo.txt dosyasında bağlantısı bulunan tüm dosyaları sırasıyla indirebilirsiniz.

Bu yazıyı beğendiyseniz, diğer yazılarımıza da Linuxipuclari.com adresinden ulaşabilirsiniz.



İşletim Sistemleri 00.1 – İşletim Sistemi Nedir?


İşletim sistemleri teorisi ile ilgili yazmaya başladığım bu yazı dizisinin öncelikle içeriğinden bahsedip sonra genel olarak işletim sisteminin ne olduğuna değineceğiz. Çok fazla derine inmeden anlatacağım konular, genel bilgi sahibi olmak isteyenlerin işine yarayacaktır. Tabii ki daha ayrıntılı bilgi almak isteyenlere Andrew S. Tanenbaum’un “Modern Operating Systems” kitabını edinmelerini öneririm.

Başlıklar:

  • İşlem Yönetimi
  • Ana Bellek Yönetimi
  • Dosya Yönetimi
  • Girdi/Çıktı Yönetimi
  • İkincil Bellek Yönetimi

İşletim Sistemi Nedir?

İşletim Sistemi (İS) gerçekleşen olayları düzenleyen ve yöneten, bilgisayarın kaynaklarını uygulamalara dağıtan, kullanıcı ve donanım arasında bir arayüzdür. İS bilgisayarda çalışan uygulamalar için ev sahipliği görevini üstlenir. Bu görevin bir parçası olarak programların  donanımla ilgili işlemlerini yürütür. Böylece programcı donanım ile ilgilenmeden, donanım bağımsız uygulamalar yazabilir. Bu sayede farklı bilgisayarlarda aynı işletim sistemi çalıştığı müddetçe aynı uygulama da çalışabilir. Nerdeyse her bilgisayar, robotlar, beyaz eşyalar, dvd playerlar, mp3 playerlar birer işletim sistemi sayesinde işlemlerini yürütürler.

İşletim sistemleri, uygulama yazılımlarına ve kullanıcılara bir takım hizmetler sunarlar. Uygulamalar bu hizmetlere API (Application Programming Interfaces, uygulama geliştirme arayüzü) ve System Call (Sistem çağrısı) ile ulaşırlar. Bu yöntemle uygulama almak istediği hizmeti ve parametrelerini işletim sistemine gönderir ve cevabı bekler. Burada gerçekleşen işlemler programcıyı ilgilendirmez. Daha sonra işletim sistemi, verilen hizmeti tamamlayıp sonucunu uygulama programına gönderir.

Kullanıcılar işletim sistemleri ile birden fazla şekilde etkileşim içinde bulunabilirler. Bu etkileşim CLI (Command Line Interface, komut satırı arayüzü) veya GUI (Graphical User Interface, grafiksel kullanıcı arayüzü) olabilir. Kullanıcı arayüzü genelde ufak ve masaüstü sistemler için geliştirilmiş işletim sistemlerinde işletim sisteminin bir parçasıyken, Unix gibi geniş ölçekli, çok kullanıcılı işletim sistemlerinde işletim sisteminin üstünde çalışan bir uygulamadır (kurulum aşamasından önce işletim sistemine paket olarak dahil edilmesi bu gerçeği değiştirmez.).

Gelecek Bölüm:

  • İşlem Nedir?
  • Zamanlayıcı Nedir?


Flash Mobil Cihazlara Geliyor, Peki Türkiye Bunun Neresinde?



Bugünlerde çıkan haberlere göre Adobe, mobil cihazlarda Flash 10'u çalıştırmak için var gücüyle çalışıyormuş. Normalde insan bu "mobil cihazların" iPhone, Blackberry vb. olmasını bekliyor ancak görünüşe bakılırsa tam tersi bir durum söz konusu. Flash 10'un şu anda yalnızca Android, Symbian ve Windows Mobile platformlarında çalışacağı belirtiliyor. Zira Adobe'un kendi sitesinde, tanıtım amacıyla henüz yeni piyasaya sürülen HTC Hero adlı telefonu kullanmaları da dikkat çekiyor.

Apple'ın, App Store'daki satışları olumsuz etkilememesi amacıyla bir süre daha Flash desteğini telefona eklemek için çaba sarfetmeyeceğini de göz önüne alırsak Android, sıçramasını ikiye katlayabilmek için iyi bir fırsat yakalamış gibi görünüyor. Öte yandan Flash'ın mobil cihazlara içerik ve uygulama yönünden yeni bir soluk getireceği de kesin gibi...

Peki Türkiye bu güzel haberlerin neresinde yer alıyor? Cevap: Hiç bir yerinde.... Maalesef  bu telefonlar, Türkiye'ye yakın gelecekte gelecek gibi görünmüyor. TBMM'nin telefonlara (haklı olarak) Türkçe karakter zorunluluğu getirdiği günümüzde bu tarz telefonların Türkiye pazarına girmesi için daha epey bekleyeceğe benziyoruz.

* Yukarıdaki resim Engadget adlı sitedeki bu haberden alınmıştır.