Perşembe, Haziran 30, 2005

Sun Ne Kullanıyor ?


Sun research sitesinde gezinirken yukarıdaki durumla karşılaştım php (jsp zor mu geldi acaba :) belki yakında ruby on rails ile yapılmış bir sun siteside görürüz...)+ mysql kullanan sitenin hangi işletim sistemini kullandığına bakmadım ama o da linux olabilir mi acaba :)

Çarşamba, Nisan 20, 2005

Bill Amca Kızarsa

Bir yazı okudum hayatım değişti. Bu adresteki arkadaş windowzunda java ile program yazmaya çalışırken biraz zorlanmış ve klavyesinden şu cümleleler dökülmüş;

.NET'te böyle miydi? Açıyordun Visual Studio.NET i, sürükle bırak ile ekranı tasarlayıp, sonra onlara çift tıklayıp kod yazıyordun, run edip kullanıordun...

Bir gün gelecek Bill amca artık dayanamayacak :
-tamam ulen, yeter zaten kazandığım para, siliorum piyasadan tüm Microsoft ürünlerini, bakem ne halt etceksiniz, diyecek, işte o zaman JAVA'cılar Linux'cular görecekler dünyanın kaç buçak olduğunu... Anlayacaklar Bill amcanın kıymetini...

Yazıyı okuduğumdan beri halen korkmakdayım. Lütfen yardım ediniz...

Cumartesi, Nisan 16, 2005

Java ile Tasarım Modelleri

Bana kalırsa Java'nın .Net e karşı en büyük üstünlüğü geniş ve çok seçenekli yapısı. Bu sayede Hem geniş bir kullanıcı ve döküman desteğine sahip oluyor hem de geliştiriciler için pek çok alternatif sağlıyor.

Ancak bu yapı öyle bir kavram karmaşasına sebep oluyor ki insan bazen bir java sözlüğüne ihtiyaç duyuyor.

Java ile web tabanlı yazılım geliştirme konusunu araştırırken karşıma sürekli "Model 1" ve "Model 2" olarak adlandırılan kavramlar çıkıyordu. Bu kavramların ne olduğuna dair açıklama burada , hangi modelin ne zaman kullanılması gerektiğini anlatan kısa not ise burada mevcut.

Ayrıca jsp ile web tabanlı uygulama geliştirmeyi planlayanların mutlaka gözatması gereken güzel ipuçları içeren bir diğer belge de burada bulunuyor.

Çarşamba, Nisan 13, 2005

Gezegen'e İnmişim

Bu gün ne zamandır göz atmadığım gezegen e bakarken haftalar önce atmış olduğum mail neticesinde (ben umudu kesmiştim) günlüğümün gezegene eklendiğini fark ettim. Tüm camiaya hayırlı uğurlu olsun :)

Cuma, Ocak 21, 2005

Uygulamalar Çekirdekle Nasıl İletişim Kurar

Uygulamalar ve çekirdek arasıdaki iletişim sistem çağrıları ile sağlanır. Çekirdek çağrı isteyenin bu çağrıdan yararlanıp yararlanamayacağına karar verir. Örneğin her isteyenin sabit diske veri yazmaması sağlanır.

Linux’ta strace komutu ile, çalıştırılan programların kullandığı sistem çağrılarını görebilirsiniz.

void main()
{
printf("Denemen");
}

Derleyip, strace ile inceleyelim.

siseci:~/kernel# make 1

siseci:~/kernel# strace ./1

execve("./1", ["./1"], [/* 32 vars */]) = 0

...

...

write(1, "Denemen", 7)= 7

....



execve ile yeni bir process başlatılıyor. write ile 1 ile gösterilen dosyaya 7 bayt uzunluğunda "denemen" yazılıyor.

Şimdi yukarıda anlatılanları burada somut olarak görmekteyiz. Uygulamamız çalıştığında write çağrısını kullanıyor. Çekirdek ise burada programın isteğini değerlendiriyor ve eğer uygunsa izin veriyor.

Burada bir noktayı hatırlatmak istiyorum. Biz direk makine koduyla (assambler) çalışıyor dahi olsak. Uygulamamız ve işlemcinin arasında çekirdek bulunduğundan sistem çağrılarını kullanmamız gerekir. Biraz daha açmak gerekirse çekirdeğin yüklenmiş olması işlemcinin artık meşhur protected mode safhasına geçmiş olması demektir. Bu noktadan sonra bizim uygulamamızın çekirdeğin izini olmadan aygıtlara direk erişimi söz konusu değildir.

Konunun daha açıklayıcı olması açısından sistemin başlama anına geri dönelim ve neler olduğuna bir bakalım:

Linux çekirdeği sadece standart bir C programıdır aslında. Yalnızca iki önemli farklılık vardır. C dilinde
yazılan programların başlangıç noktası main(int argc,char **argv) yordamıdır. Linux çekirdeği start_kernel(void) kullanır. Sistem baslarken ve çekirdek yüklenecekken daha program çevresi mevcut değildir. Yani ilk C yordamı çağrılmadan önce bir kaç şey daha yapılmalıdır. Bu isi gerçekleştiren donanım kodu arch/i386/asm/ dizini altında yer alır.


Assembler dili yordamı çekirdeği tam olarak 0x100000 (1 Mbyte) bellek adresine yükler, ardından da başlatma süreci esnasında dışlamalı olarak kullanılan kesme hizmet yordamlarını (interrupt servicing routines), genel dosya tanımlayıcı çizelgeleri (global file descriptor tables) ve kesme tanımlayıcı çizelgeleri (interrupt descriptor tables) yükler. Bu noktada işlemci korunurlu moda girer. Çekirdeği başlatmak için gereksiniminiz olan her şey init& dizini altındadır. Burası çekirdeği doğru düzgün başlatmakla görevlendirilmiş, geçirilen tüm açılış (boot) parametrelerini dikkate alan start_kernel() yordamıdır. İlk süreç sistem çağrıları kullanılmadan oluşturulur (daha henüz sistemin kendisi yüklenmemiştir).


Ayrıca Aşağıdaki tablo'da işlerin genel olarak nasıl yürüdüğünü anlamamıza yardımcı olacaktır. [En kısa zamanda türkçeleştireceğime söz :) ].

Buradaki gösterim basit ve anlaşılabilir olması için yalnızca temel öğeleri içermektedir. Ancak temel yapıyı kavramak için oldukça yeterlidir.




Yukarıda printf fonksiyonun sebep olduğu write çağrısını basitçe gördük. Ancak iş sistem çağrısı gerçekleştiğinde bitmiyor.

Aşağıda read çağrısı ve ardından gerçekleşen olaylar gösterilmiştir.




Şimdi burada neler olduğunu adım adım inceleyelim.

read çağrısın işlevi basitçe herhangi bir veriyi kaynağından alıp, onu isteyen programın bu iş için ayırdığı belleğe kopyalamaktır.

Bir sistem çağrısının çekirdeğe iletilmesi belirli bir "yazılım kesmesi" tarafından gerçekleştirilir. Bu kesme (aynı zaman da "kapı" da denir) x86 işlemcili Linux sistemler için 0x80 kesmesidir.

0x80 kesmesi hakkında not: Programcının işletim sistemi çekirdeğinden sistem servisi alması için kullanılır. Dosya açma, dosya kapama, aygıtlara erişim, terminal'e çıktı gönderme, yeni süreç yaratma gibi işlemleri yaparken çekirdek bize servis sağlar. Bu yapı, her programcının aygıtlar için kendi erişim kodunu tekrar tekrar yazması gibi bir zorluktan kurtarır bizi (ve tabi zaman kazandırır).Birçok programcı 0x80 kesmesini kullanmaz, hatta çoğu hayatında bir yada birkaç kez sadece ismini duymuş olabilir. Bunun nedeni ise bu tür servislerin üst seviye dillerde (HLL) programcının kolay kullanımı için önceden yazılmış fonksiyonlar tarafından yapılıyor olmasıdır. 0x80 kesmesinin direkt olarak kullanılmak zorunda olduğu tek dil Assembly Programlama dilidir.

İstediğiniz sistem çağrısını "EAX" yazmacına (yazmaç=register) atarsınız. Çağrının kabul ettiği parametreleri de geriye kalan yazmaçlara (EBX, ECX gibi) atayarak "0x80" kesmesini çağırırsınız. Şekilde direk olarak görünmese de aslında atanan __NR_read değil buna karşılık gelen çağrı kodudur. Söz konusu çağrı kodu ve __NR_read in alabileceği diğer parametreler /usr/include/asm/unistd.h dosyasında tanımlanmıştır.Ayrıca read ile ilgili man sayfasına "man 2 read" komutuyla ulaşabilirsiniz.

Buraya kadar yapılan işlemler "user space" de (user mode) da gerçekleşti. Basitçe read adlı sistem çağrısını 0x80 kapısını kullanarak "kernel space" e aktardık.
Şimdi bundan sonra kernel space'de (kernel mode da) olanlara bir bakalım.

Çekirdek ilk olarak bütün yazmaçları kaydeder (SAVE_ALL). Bir sonraki adımda EAX yazmacı tarafından yapılan isteğin bellek sınırlarını aşıp aşamdığı kontrol edilir (Check Limit of EAX) [1]. Daha sonra system çağrıları tablosuna bakıp (EAX yazmacındaki isteği kullanarak) uygun fonksiyonu çaliştırır. ( syscall_tab[EAX]() ). Burada çalıştırılacak fonksiyon sys_read fonksiyonudur.

Bir sonraki aşamada dosyaya ilişkin parametreler ve izinler kontrol edilir, eğer herşey uygunsa dosyadaki veri alınır (kopyalanır). Sonuç uygulamanın istediği belleğe kopyalanır ve sonuca dair onay değeri uygulamaya gönderilir.

Bu aşamadan sonra işlem tekrar user mode da devam eder. Uygulama kontrol değerine bakar hatasız ise işlemine devam eder. Artık uygulama istediği verinin hatasız biçimde geldiğini ve hafızadaki yerini bilmektedir.

Bu yazıda sizlere bir uygulamanın çekirdekle olan iletişimini elimden geldiğince sade ve basit bir biçimde anlatmaya çalıştım.
Umarım faydalı olmuştur.


Serbülent ÜNSAL
serbulentunsal (et) meds.ktu.edu.tr

Not: Bu belgedeki bilgiler GNU/Linux sistemler için olmasına karşın genel olarak diğer pek çok sistem içinde doğrudur.

[1]:İşlemcilerdeki hafıza oruma mekanizması ile ilgili daha ayrıntılı bilgi için (http://www.cs.ucsb.edu/~cs170/notes/memory/)

Kaynaklar:

http://www.acikkod.org/yayingoster.php?id=30
http://www.linuxfocus.org/Turkce/January1998/article19.html
http://www.core.gen.tr/Security/Documents/12.html
http://www.freebsd.org/doc/en_US.ISO8859-1/books/design-44bsd/overview-kernel-service.html
http://plg.uwaterloo.ca/~itbowman/CS746G/a1/
http://www.linux-mag.com/2000-11/gear_01.html

Salı, Ocak 18, 2005

User mode ve Kernel mode nedir ?

Daha önce kulağıma çalınan ancak ne olduğunu tam olarak bilmediğim bu iki terim hakkında ne yazik ki tam ve açıklayıcı bir Türkçe kaynağa rastlayamadım. Bu yüzden öğrendiklerimi özetleyen kısa bir bilgi notu yazmaya karar verdim. Bu notun bir kopyasını tr.wikipedia.org adresinde User mode ve Kernel mode başlıkları altında bulabilirsiniz.


Önce birkaç terime açıklık getirelim.

Protected mode: x86 (286 ve üstü intel ailesi ve uyumlu (amd,via vb.) ) işlemcilerde bellek adreslerine erişim belirli kısıtlamar çerçevesinde olur. Yani her uygulama her istediği bellek adresini istediği gibi kullanamaz. Her bellek bölgesinin erişim hakları descriptor denen kayıtlarla saklanır. Bu kayıtların arka arkaya dizilimi ile hafızanın tamamen adreslendiği bellek haritası ( memory map ) oluşturulur.

CPL: Code Privilege Level (Kod Yetki Düzeyi). x86 işlemcilerde descriptor tarafından ayarlanan ve o kodun çalıştığı yetki seviyesini (privilage level) gösteren 2 bitlik değer. 0 en yüksek yetki seviyesidir, ring 0 diye geçer. 3 ise en düşük değerdir, ring 3 olarak geçer. Arada ring 1 ve ring 2 diye tanımlanan başka seviyeler olmasına karşın işletim sistemlerinin çoğu yalnızca ring 0 ve ring 3 seviyelerini kullanırlar.

Kernel Mode

Linux işletim sistemi açılışta kernel mode’da ( ring 0 ) baslar. Sistem açılışı sırasında kernel yüklenir yüklenmez işlemci Protected Mode'a geçer ve bunun ardından çalıştırılan tüm programlar User Mode'da çalışır ( bazı donanım sürücüleri hariç ). Kernel mode'da çalışan uygulamalar bütün hafıza adreslerine ve Giriş-Çıkış (harddisk ve benzeri) aygıtlarına tam yetki ile erişirler. Ayrıca bu mode'da iken tüm sistem fonksiyonlarına erişilebilir, hafıza yeniden adreslenebilir.

User Mode

Linux sistemi açılışta kernel mode’da baslar. Sistem açılışı sırasında kernel yüklenir yüklenmez işlemci Protected Mode'a geçer. Bu mode’da uygulamalar sistem için kullanılan fonksiyonları güvenlik açısından direkt olarak kullanamaz. Kullanıcı sadece kendi başlattığı uygulamaların adres alanları içerisinde kalmak suretiyle işlerini yürütebilir. Sistemin güvenli bir şekilde çalışabilmesi için kullanıcıya kısıtlı izinler tanınmıştır. Bu mode'da çalışan uygulamalar sistem kaynaklarına erişmek istediklerinde ring 3 seviyesinde çalışmakta olan çekirdek servisleri aracılığı ile çekirdeğe istek gönderirler. Sistem çekirdeği de eğer uygunsa isteği yerine getirir.


Not 1: Yukarıda yazılanlar Linux işletim sistemi referans alınarak yazılmıştır. Ancak diğer pek çok işletim sisteminde de geçerlidir.

Not 2: Bu belge'yi Tonguç Yumruk'un uyarıları doğrultusunda yeniden gözden geçirdim, kendisine teşekkür ederim. Ayrıca bu gözden geçirme işlemi sırasında bu belgeye rastladım. Konu ile ilgili daha ayrıntılı bilgi isteyenler için oldukça faydalı.



Pazartesi, Ocak 17, 2005

CNN LIVE vs IRAK LIVE

Irak'tan yazan bir kızın günlüğü, internette dolaşırken tesadüfen buldum. Söylenecek fazla birşey yok. Link burda.

Amerikan Özel Birlikleri İran'da

BBC NEWS sitesindeki bu habere göre Amerikan özel birlikleri İran'da bulunuyormuş. Daha Irak'tan çıkamayan Amerika İran'da ne yapacak merakla bekliyorum doğrusu.

Debian Postası

www.Debian-tr.org daki günlüğümüde buraya taşımaya karar verdim. Debian postası ile başlayacak olan bu dizide yaşadığım sorunları ve çözüm yollarını yazarak yeni başlayanlara yol gösterici olmaya çalışacağım.

1- Nerde benim Firefox'um

Yanlis Çözüm: " apt-get install firefox "
Dogru Çözüm: " apt-get install mozilla-firefox "

2-Kurulum dilini Türkçe seçtigim halde þðÝý karakterleri niye yazmiyor ? ve alt_gr tusu niye calismiyor. Bu tuslar hem X serverda hemde terminalde sorunlu.

Çözüm: Herhangi bir metin editörü ile /etc/XF86Config-4 dosyasını açıp "Input Device" kısmında "keyboard" yazan bölümü buluyoruz. Bu bölümde Option "Xkbmodel" "pc105" olarak ve "Xkblaout" "tr" olarak değiştiriyoruz. Kurulumu türkçe ayarlarla yapmama ve klavye olarakta trq seçmeme rağmen nedense "us" idi, öntanımlı değer.

3-firefox'u nasil türkce yapacagim.

Bu sorunun yanıtını debian türkçe listesinde buldum.

Onceki iletide mozilla-firefox-locale-tr paketini bir yabanci
gelistiriciye: Cesar Martinez Izquierdo'ya devrettigim belirtmistim.
Paketin Debian arsivlerine gonderilmesi icin kendisiyle gorusuyorum.
Asagidaki bagda bu calismanin bir urununu bulabilirsiniz. Paketi
hizlica test ettim. Gayet sorunsuz gorunuyor.

http://users.evtek.fi/~k0400388/debian/mozilla-firefox-locale-all/mozilla-firefox-locale-tr-tr_1.0-3_all.deb

Bu paketi kurmak icin once normal bir mozilla-firefox kurulumu yapin:

apt-get install mozilla-firefox

Daha sonra da paketi indirip dpkg ile kurun:

dpkg -i mozilla-firefox-locale-tr-tr_1.0-3_all.deb

--
roktas


4-Gnome'dan Kde ye nasil gececegim.

Soruma 2 yanıt aldım fcn ve Emre'ye teşekkürler. Yanıtlar aşağıda...

"gnome'dan kde'ye nasıl geçeceğim?" sorunuz bende soru işaretleri yarattı. eğer x açılışında nasıl seçim yapacağınızı soruyorsanız, http://ordiluc.net/selectwm adresinde ufak bir program var. incelerseniz işinize yarayabilir. ayrıca benim kullandığım desktop manager programım (gdm) hangi masaüstü yöneticisiyle açılacağını seçme fırsatı veriyor.

kolay gelsin.

Gnome dan kde ye update-alternatives --config x-window-manager komutuyla ya da kdm paketini yukleyip dpkg-reconfigure kdm den kdm yi secip masaüstünü kde olarak seçip login olarak geçebilirsiniz



Pazar, Eylül 12, 2004

Yediğimiz hurmalar, neremizi tırmalar?

BİR akıl hastanesine yeni bir başhekim atanmış. Başhekim, hastaneyi dolaşırken, aşağıdaki mutfağa da inmiş.Bir de bakmış ki, mutfağın ortasında yere tebeşirle çizilmiş koskocaman beyaz bir daire: dairenin de içinde yere yatmış yüzükoyun, sırtüstü kıvranıp duran 7 - 8 deli...Bir başka deli de, yemek masasına tek başına oturmuş; reçeli, tereyağı, zeytini, peyniri, rafadan yumurtasıyla, yerde kıvrananlara bakıp bakıp gülerek bir güzel kahvaltı ediyor.Başhekim, masada oturana sormuş:
- Yerdeki beyaz dairenin içinde; bir yüzükoyun, bir sırtüstü uzana döne, ne yapıyor bunlar? Masadaki deli:
- Tebeşirle o beyaz daireyi ben çizdim, demiş. İçindekilere de dedim ki:"- O beyaz dairenin altından geçerseniz, ancak kahvaltı edebilirsiniz benim gibi...
- Neden öyle kıvranıyorlar ki?
- Yere çizilmiş dairenin altından geçmeye çalışıyorlar da, ondan.Başhekimin gözleri hayretle açılmış ve yine sormuş masadaki deliye:
- Senin adın ne?
Hiç beklemediği bir yanıt gelmiş:
- Günter Verheugen...

Cuma, Haziran 18, 2004

Uludağa Tırmanış

Uludağ ( Ulusal Linux Dağıtımı Projesi ) duyduğumdan beri beni heyecanlandıran bir olay. Murat EREN'in cesaretlendirmesiyle ilk gününden beri takip ettiğim projenin bir ucundan tutmaya karar verdim. Öğrenilecek ne çok şey var. Üstelik öğrendikçe de ne kadar az bildiğimi görüyorum. Belki de Sokratın dediği gibi " Tek bildiğim hiçbirşey bilmediğimdir "
......................................................................................................................................

Çarşamba, Haziran 16, 2004

Modern Toplum Sorunsalı

Modern hayatın getirdiği zorunluluklar bazen aklımı karıştıryor. Birileri bize birşeyler mi dayatıyor yoksa bana mı öyle geliyor. Toplumun (daha doğrusu toplumun kurallarını belirlediklerini söyleyen insanların) belirledikleri kuallar çerçevesinin dışına çıkarsanız. Mutlaka damgalanıyorsunuz. Damganın ne olduğu o kadar da önemli değil. Irak a asker gönderilmesine karşı çıkarsanız hayalci romantik, birilerinin bazı değerlerin ardına sığınıp ülkeyi bölmeye çalışmalarına karşı çıkarsanız şoven milliyetçi. Bu ülkenin milli servetleri satılırken yahu biz bunarı üç otuz paraya satıyoruzda kime satıyoruz en azından onu bilelim derseniz, eski kafalı devletçi. Bırakın insanlar istediklerini giysin isteyen açsın isteyen kapasın derseniz gerici.

İşin en güzel yanı da aslında bu adamların gazına gelen ve kendileri farklı düşündükleri halde bunu söyleyemeyen veya zaman zaman kendileride damgalanan insanların hep birlikte hareket edip bu linç güruhuna katılmaları.

Bunun iki nedeni var birincisi malum toplumsal hastalığımız hoşgörüsüzlük. Çocukluğumuzdan beri kimse bizi affetmeyip insan değilde bir hayvan gibi ödül ceza yöntemiyle yertiştirilince farklılıkları hoşgörmeyi bilmiyoruz. Aslında yabancılara ve onların farklılıklarına karşı gayet hoşgörülüyüz. Bu sayede üç dinin barış içinde yaşadığı tek yer anadolu. Ama farklı olan bizdense seyreyleyin gümbürtüyü. Birbirimizi çekememezliğimizi şu küçük fıkra güzel anlatır:

“ Adamın biri cehenneme gitmiş bakmış yüzlerce dev kazan altında yanan devasa odunlar ve her kazanın başında birer zebani. Kazandan birileri başını çıkardıkça zebani vuruyor adamın kafasına elindeki odunu, adam içeri düşüyor. Yalnız bir kazanın başında kimse yok. Merak edip soruyor baş zebaniye “ Nedir bu hal ” diye. Zebani gülüyor kıs kıs ve cevap veriyor. “ O kazan mı ? onun başında kimseyi bulundurmaya lüzum yok, Birisi yukarı çıkmaya kalktımı diğerleri aşağı çeker onu. O kazan Türkiye kazanı ”

Hal böyleken başka söze gerek yok sanırım. Birbirimize olan tahamülsüzlüğümüz konusunda.

İkinci neden kendi kişiliğimizi ortaya koyamıyor olmamız. Malum bazı diziler, misal son günlerde Kurtlar Vadisi çok popüler. Bir psikolog bunun sebebinin kendi kişiliğimizi ortaya koyamamamızdan dolayı, dizideki kendi kişiliğini yaşamasının önünde hiçbir engel tanımayan kahramanlardan biriyle kendimizi özdeşleştirmemiz ve onu model almamız olduğunu söylüyordu.

Kendini toplum bilimci sanan bazı cahiller o dizi yasaklansın bu çizgi film kaldırılsın diyeceklerine. Toplumun çocukluktan itibaren nasıl daha kişilikli yetiştirileceğine kafa yorsalar herkes televizyonun yalnızca bir eğlence aracı olduğunu kavrar, orada ki kahramanları kişilik modeli olarak seçmezlerdi.

Salı, Haziran 15, 2004

Duy Şikayet Etmede Her An Bu Ney

Duy şikayet etmede her an bu ney,
Anlatır hep ayrılıklardan bu ney.

Der ki feryadım kamışlıktan gelir,
Duysa her kim, gözlerinden kan gelir.

Hiç değil feryadıma sırrım uzak,
Nerde bir göz, nerde bir candan kulak?

Mevlânâ'nın bu güzel şiirinin tamınını okumak için buraya bakın.

Her Şey Sende Gizli

Yerin seni çektiği kadar ağırsın,
Kanatların çırpındığı kadar hafif..
Kalbinin attığı kadar canlısın,
Gözlerinin uzağı gördüğü kadar genç...
Sevdiklerin kadar iyisin,
Nefret ettiklerin kadar kötü..
Ne renk olursa olsun kaşın gözün,
Karşındakinin gördüğüdür rengin..
Yaşadıklarını kar sayma:
Yaşadığın kadar yakınsın sonuna; ne kadar yaşarsan yaşa,
Sevdiğin kadardır ömrün..
Gülebildiğin kadar mutlusun.
Üzülme bil ki ağladığın kadar güleceksin
Sakın bitti sanma her şeyi,
Sevdiğin kadar sevileceksin.
..........
..........

Can YÜCEL

Merhaba Dünya

Hemen her programlama dilinde ilk öğrenilen örnektir bu çıktı. Bende böyle başlamak istedim sayfama. Haydi bakalım cümle aleme hayırlı olsun.