Sistem Programlama

SİSTEM PROGRAMLAMA
Sistem Programlama
Sistem programlama kavramı temel olarak, uygulama geliştiricinin sistemle daha alt seviye bir katman üzerinden iletişim kurduğu dolayısıyla geliştirmelerin sisteme daha yakın bir noktada yapıldığı yazılım geliştirme modelini tarif eder. Bununla birlikte herkesin bu kavramı ilk duyduğunda kafasında canlanan senaryo az çok farklılık gösterebilir ve muhtemelen bunların tümü de doğrudur. Sistem programlamadan günümüzde pratik olarak, yüksek seviyeli dillerde uygulama geliştirmek yerine (Java, Ruby vb.) daha alt seviye dillerde (C vb.), işletim sistemi çekirdeği ile standart C kitaplığındaki fonksiyonlar ve sistem çağrıları yoluyla iletişim kurulmasını, nadiren de olsa daha spesifik ve performans gerektiren konular için işin içerisine biraz da platform spesifik makine dili kodlarının karıştırıldığı programlama metodunu algılıyoruz. Sistem programlama eforunun daha alt seviyeli dillerde yapılıyor olması, bu konuda kazanılan deneyimlerin yüksek seviyeli dillerde işe yaramayacağı anlamına gelmez. Aksine pekiştirici bir etki yaratır. Bununla birlikte yüksek seviyeli bir dille çalışırken sistem programlama kısımları bizim için çoğunlukla görünmez veya zor görünür olur.

Windows Sistemleri
Microsoft Windows, kullanıcıya grafik arabirimler ve görsel iletilerle yaklaşarak, yazılımları çalıştırmak, komut vermek gibi klavyeden yazma zorunluluğunu ortadan kaldıran, Microsoft şirketinin geliştirdiği dünyada en çok kullanılan bir işletim sistemi ailesidir. İlk Windows 20 Kasım 1985 tarihinde satışa sunulmuştur. Windows, masaüstü pazarında en yaygın kullanılan işletim sistemidir. 2002 yılında, Windows dünya çapında masaüstü piyasasında yaklaşık %97.46'lık bir pay sahibiydi.[2]2006 Nisan ayı istatistiklerinde bu oranın %89, 2007 Aralık ayında ise %87.8 seviyesinde olduğunu gösteriyor. Ayrıca 2007 Aralık ayındaki payın %6.5'i Windows Vista işletim sistemidir.[3] Bu alanda en ciddi rakibi şu anda Mac OS'tur. Microsoft Windows ailesinin son üyesi 1 Ekim 2014'te piyasaya çıkan Windows 10'dur. Windows Vista'dan sonra Microsoft, Windows 7 ile başarıyı yakalamış bu başarıyı Windows 8 ile devam ettirmektedir.
Microsoft Windows işletim sistemleri ailesi, daha eski IBM PC için olan MS-DOS ortamının üzerine bir grafik katmanı olarak başlamıştır. Modern sürümleri daha yeni olan Windows NT çekirdeği üzerine kuruludur.

Linux Sistemleri
Linux, bilgisayar işletim sistemlerinin en temel parçası olan çekirdek yazılımlarından bir tanesidir. GNU Genel Kamu Lisansı ile sunulan ve Linux Vakfı çatısı altında geliştirilen bir özgür yazılım projesidir. Linux ismi ilk geliştiricisi olan Linux Torvalds tarafından 1991 yılında verilmiştir. Günümüzde süper bilgisayarlarda, akıllı cihazların ve internet altyapısında kullanılan cihazların işletim sistemlerinde yaygın olarak kullanılmaktadır. Bunlardan en popüler olanı Google tarafından geliştirilen Android işletim sistemidir. Ayrıca Linux ismi, bu çekirdek kullanılarak oluşturulan işletim sistemlerini genel anlamda tanımlamak için yaygın bir kısaltma olarak da kullanılmaktadır. Örneğin Linux çekirdeği ve GNU araçları bir araya getirilerek tam bir işletim sistemi olarak sunulduğunda GNU/Linux dağıtımı olarak adlandırılır, ancak konuşma dilinde kısaca Linux olarak ifade edilmektedir. Linux kelimesinin bu iki farklı kullanımının yol açabileceği karışıklıktan kaçınmak için çekirdek yazılım hakkındaki teknik bilgiler Linux çekirdeği maddesinde, dağıtımlar hakkındaki bilgiler Linux dağıtımları maddesinde verilmiştir.

UNIX Sistemleri
UNIX türevi işletim sistemleri çok işlemcili çok pahalı makinalardan, tek işlemcili basit ve çok ucuz ev bilgisayarlarına kadar pek çok cihaz üzerinde çalışabilen esnek ve sağlamlığı çok değişik koşullarda test edilmiş sistemlerdir. Fakat özellikle kararlı yapısı ve çok kullanıcılı-çok görevli yapısıyla çok işlemcili sunucularda adeta standard haline gelmiştir ve özellikle akademik dünyada iş istasyonları üzerinde çok yaygın bir kullanım alanı bulmuştur.
Unix işletim sistemi 1969 yılında AT&T Bell Laboratuvarları'nda ABD de Ken Thompson, Dennis Ritchie, Brian Kernighan, Douglas McIlroy, Michael Lesk ve Joe Ossanna tarafından tasarlanıp uygulamaya konmuştur. İlk olarak 1971'de yayınlandı ve başlangıçta tamamen bilgisayar programlarının yazılmasında kullanılan alt seviyeli bir çevirme dilinde yazılmıştı. Daha sonra 1973'te Dennis Ritche tarafından C programlama dili ile tekrar yazıldı. Üst düzey bir dilde yazılmış bir işletim sisteminin geçerliliği diğer farklı bilgisayar platformlarına kolayca taşınabilirlik için olanak sağlar. Lisans için AT&T'yi zorlayan yasal bir aksaklık nedeniyle, UNIX hızlıca büyüdü ve öğretim kurumları ve işletmeler tarafından kabul edilir oldu.
UNIX, 1969 yılında, Ken Thompson, Dennis Ritchie, Brian Kernighan, Douglas McIlroy, Michael Lesk ve Joe Ossanna tarafından Bell Laboratuvarları'nda geliştirilmiş, çok kullanıcılı, çok görevli yapıyı destekleyen bir bilgisayar işletim sistemidir. Komut yorumlayıcı yazılımlar aracılığı ile kullanıcı ve bilgisayar sisteminin iletişimi sağlanır.
Linus Torvalds tarafından temelleri atılan Linux, UNIX olmayıp bir UNIX türevidir. UNIX'ten ilham alan, bir grup bağımsız yazılımcı tarafından geliştirilen bir işletim sistemi çekirdeğidir.

C/C++
Programlama dillerinde tasarım yönünden eksiklikler olabilmektedir. Şu ana kadar 1500 civarında programlama dilinin varlığından söz ediliyorsa bunun en önemli nedeni dillerin daha çok spesifik amaçlar için tasarlanmasıdır. C++ dilinin ortaya çıkışını bu bağlamda ele alabiliriz. C++ dili C dilinden türemiştir. Yani C++ dili; C'deki eksiklikler giderilerek ve C' de olmayan birçok ek özellik getirilerek ortaya çıkmıştır diyebiliriz.
C++' ın en başta gelen farklılığı ise Nesne Yönelimli olmasıdır. Buna karşın C fonksiyonel bir dildir. Peki tam olarak nedir Nesnel Yönelimli Programlama? Kısaca değinecek olursak; C dilinde (veya fonksiyonel herhangi bir dilde) program yazarken programımızı fonksiyonlara parçalar ve tasarlardık. Yani programımızın temel parçası fonksiyonlar idi. C++ da ise programlarımızın temel birimi nesnelerdir. Örneğin bir satranç oyununu simule eden programı yazdığımızı düşünelim. Programda bazı nesnelerin Satranç tahtası, Piyon, Vezir, vs. olacağını düşünebiliriz. Bu şekilde program yazmak hepimizin fark edeceği gibi daha kolay ve en önemlisi de gerçeğe daha uygundur. Zaten nesne yönelimli programlamanın ortaya çıkışında yatan ilham kaynağı da diyebileceğimiz en önemli unsur gerçek dünyayı modelleyebilmektir.

Sistem API Kullanımı
İnternette görmüş olduğumuz web sitelerinin nasıl tasarlandığı ve nelerin kullandığı hakkında bilginiz var mı? Açıkçası API denilen kavram internet sitelerinin baştan aşağıya tüm içeriklerini kapsayan proje yönetimi ve tasarlama sürecini kapsamaktadır. Genellikle proje yöneticileri API kullanımını teorik olarak bilmek zorundadırlar. İnternet dünyasının olmazsa olmazlarından birisi haline gelen API sistemi (Application Programing Interfaces - Uygulama Programlama Arayüzleri) en kısa hali ile iki yazılımın veya veri tabanının birbiri ile sorunsuz çalışabilmesini ve en sağlıklı bir şekilde birbiri ile iletişime geçmesini sağlayan yapılara verilen isimdir. 
API her hali ile kullanıcıları ve ziyaretçileri memnun etmek zorundadır. İyi kurgulanmış API sistemi sorunsuz çalışacağı gibi, müşterileri ve ziyaretçileri de elde tutmadaki en büyük roldür.

Sistem Çağrıları
Bir sistem çağrısı bir yazılımın çekirdekten bir hizmet isteği yapması için kullanılır. Hizmet genellikle, G/Ç işlemleri gibi sadece çekirdeğin ayrıcalığında olan şeylerdir. Yazılım geliştirenlerin genellikle bu sistem çağrılarını bilmeye ihtiyacı olmaz. Çünkü GNU C kütüphanesi sistem çağrılarının yaptığı hemen her şeyi sanal olarak sağlayan işlevler içerir. Örneğin, bir dosyanın erişim izinlerini değiştiren bir sistem çağrısı vardır, ama GNU C kütüphanesinin chmod işlevi zaten bu işlemi yaptığından bu sistem çağrısını kullanma ihtiyacı ortaya çıkmaz.
Sistem çağrılarına kimi zaman çekirdek çağrıları dendiği de olur.
Her ne kadar doğrudan sistem çağrıları yapma ihtiyacı duyulmasa da GNU C kütüphanesi bunu yapabilmeniz için syscall işlevini içerir. Syscall kullanımı zordur ve chmod gibi işlevleri kullanmak daha taşınabilirdir, ama sistem çağrılarını makine kodu komutları ile kodlamaktan daha kolay ve daha taşınabilirdir. Syscall çağrıları, henüz GNU C kütüphanesinde bulunmayan özel sistem çağrıları ile çalışacağınız zaman oldukça kullanışlı olacaktır. Syscall tamamen soysal bir yöntemle gerçekleşmiştir; işlev belli bir sistem çağrısının ne yaptığıyla, hatta geçerli olup olmadığıyla bile ilgilenmez.

I/O Programlama
Giriş/çıkış, bilgi işlem sistemin değişik fonksiyonel birimleri arasındaki iletişimi veya bu arayüzlere doğrudan bilgi sinyallerini göndermeyi sağlar. Girişler, değişik birimlerden alınan sinyallerdir. Çıkışlar ise bu birimlere gönderilen sinyallerdir. G/Ç cihazları bir kullanıcı (veya başka sistemler) tarafından bilgisayar ile bağlantı kurabilmek için kullanılır. Örnek olarak, klavye ve fare bilgisayarın giriş aygıtlarıdır. Ekran ve yazıcı ise bilgisayarın çıkış cihazlarıdır. Değişik cihazlar bilgisayar ile bağlantı gerçekleştirebilmeleri için giriş ve çıkış sinyallerini kullanırlar. Modem ve bağlantı kartları örnek olabilir. Klavye ve fare kullanıcıların fiziksel hareketlerini giriş olarak alırlar ve bu fiziksel hareketleri bilgisayarların anlayabileceği seviyeye getirirler. Çıkış birimleri ise giriş sinyali olarak bilgisayarın ürettiği çıkış sinyallerini alırlar ve bu sinyalleri kullanıcıların görebileceği ve okuyabileceği çıktılara çevirir. Bilgisayar mimarisinde Merkezi işlem birimi (CPU) ve ana bellek bilgisayarın kalbini oluşturmaktadır. Çünkü bellek kendi talimatları ile merkezi işlem birimindeki verileri doğrudan okuyabilir ve merkezi işlem birimine doğrudan veri yazabilir. Örnek olarak, bir disket sürücüsü I/O sinyallerini dikkate alır. Merkezi işlem biriminin G/Ç metotlarını sağlaması alt düzey bilgisayar programlamacılığında aygıt sürücülerinin tamamlanmasına yardımcı olur. Üst düzey işletim sistemleri ve üst düzey programlamacılık ideal G/Ç kavramlarını ve temel ögeleri ayırt ederek çalıştırmaya olanak sağlamaktadır. Mesela C programlama dili programların G/Ç'lerini düzenlemek için içerisinde fonksiyonlar bulundurmaktadır. Bu fonksiyonlar dosyalardan veri okunmasını ve bu dosyaların içerisine veri yazılmasını sağlar.

Process ve Threadler
Process
Bilgisayar bilimlerinde işlem (process) terimi, belleğe yüklenmiş ve işlemcide (CPU) yürütülmekte olan bir program olarak tanımlanmaktadır. Uygulamalar diskte çalışmaz halde bulunurken ise program olarak tanımlanır. Bir program kendi başına pasif komut yığınıdır ve işlem ise bu komutların aktif olarak yürütülmesidir. Eski bilgisayar sistemleri sadece bir programın hafızaya yüklenip işlemcide yürütülmesine izin vermekteydi ve bütün sistem kaynaklarının erişimi bu yürütülmekte olan programın kontrolü altındaydı. Günümüzdeki bilgisayar sistemleri ise birçok programın aynı anda belleğe yüklenilmesine ve ardı ardına işlemcide yürütülmesine olanak sağlamaktadır. Bu evrim çeşitli programların bir grup altında toplanmasıyla ve daha güçlü kontrol sistemlerin kullanılmasıyla gerçekleşmiştir. Modern sistemler işlem koleksiyonlarından meydana gelmektedir ve her bir işlem koleksiyonu değişik görevlere sahiptir

Thread
İş parçacığı, bilgisayar biliminde, bir işin eş zamanlı olarak işlenen her bir bölümüdür. İş parçacığı ve işlem arasındaki fark bir işletim sisteminden diğerine değişmekle birlikte genel olarak iş parçacığının oluşturuluşu ve kaynakların paylaşılmasıdır. İşlemler, birçok iş parçacığı oluşturup sonlandırabilir, iş parçacıkları da ortak hafıza kullanabilirler. Çoğu durumda iş parçacıkları işlemlerin içinde yer alır, onları oluştururlar. Çoklu iş parçacıkları paralel olarak pek çok bilgisayar sisteminde uygulanabilir. Tek işlemci kullanıldığında çok iş parçacıklı uygulama, zaman dilimlemesiyle gerçekleştirilir; tek işlemci, farklı iş parçacıkları arasında çok hızlı geçiş yapar ve bu durumda işlemler gerçekte olmasa da eş zamanlı çalışıyormuş gibi görünür. Çok işlemcili sistemlerde farklı iş parçacıkları, farklı işlemciler üzerinde eş zamanlı olarak çalışabilir. Pek çok modern işletim sistemi bir iş düzenleyicisi yardımıyla hem zaman dilimleme, hem de çok işlemcili iş parçacığı kullanımını desteklemektedir. İşletim sistem çekirdeği sistem çağrıları vasıtasıyla programcıya iş parçacıklarını kontrol etme olanağı sağlamaktadır. Bunun yokluğunda programlar, zamanlayıcılar, sinyaller veya diğer yöntemleri kullanarak kendi çalışmalarını sonlandırabilirler. Bunlara kullanıcı uzayı iş parçacıkları denir.

Bellek Kullanımı ve Yönetimi
Bellek Kullanımı
Bellek bilgisayarı oluşturan 3 ana bileşenden biridir. (merkezi işlem birimi – bellek – giriş/çıkış aygıtları). İşlemcinin çalıştırdığı programlar ve programa ait bilgiler bellek üzerinde saklanır. Bellek geçici bir depolama alanıdır. Bellek üzerindeki bilgiler güç kesildiği anda kaybolurlar. Bu nedenle bilgisayarlarda programları daha uzun süreli ve kalıcı olarak saklamak için farklı birimler (sabit disk - CD - DVD) mevcuttur. Belleğe genellikle random access memory (rastgele erişimli bellek) ifadesinin kısaltması olan RAM adı verilir. Bu ad bellekte bir konuma rastgele ve hızlı bir şekilde erişebildiğimiz için verilmiştir. RAM' de sadece işlemcide çalışan program parçaları tutulur ve elektrik kesildiği anda RAM' deki bilgiler silinir. Bilgilerin kalıcı olarak saklandığı yer teker(disk) ’dir. Bu iki kavram bilgisayarı kullanmaya yeni başlayan insanlar tarafından genellikle karıştırılır. Bu kavramları açıklamak için en güzel benzetme; bir dosya dolabı ve çalışma masası olan ofistir. Bu örnekte dosyaların kalıcı olarak saklandığı tekeri dosya dolabı, üzerinden çalışılan verilerin bulunduğu belleği ise çalışma masası temsil etmektedir. Bir ofiste dosyalar dosya dolapları içinde saklanır ve çalışanlar üzerinden çalışmak istedikleri dosyayı dolaptan alarak kendi çalışma masaları üzerinde çalışırlar. Bilgisayarda da işlemci üzerinde çalışacağı veriler tekerden belleğe getirilir. Dosya dolabınız ne kadar büyükse, o kadar çok dosyayı saklayabilirsiniz ve masanız ne kadar büyükse aynı anda o kadar çok dosyayı masaya alıp üzerinde çalışabilirsiniz. Bilgisayar ortamında da işler tam olarak böyledir. Teker kapasitesi ne kadar büyükse o kadar çok veri saklayabiliriz ve bellek kapasitesi ne kadar büyükse işlemci o kadar çok dosya üzerinde çalışabilir. Bu benzetmenin bilgisayarın çalışma şeklinden farkıysa belleğe getirilen dosyaların tekerdeki dosyaların bir kopyası olmasıdır. Gerçek dosyalar tekerde saklanmaya devam eder. Bunun sebebiyse belleğin güç kesildiği anda verileri kaybetmesidir. Eğer bellekteki dosya değiştirilirse değişiklerin kaybolmaması için teker üzerinde değişikliklerin kaydedilmesi gerekir.

Bellek Yönetimi
Ana belleğin işlemler arasında paylaştırılmasına ana bellek yönetimi ya da bellek yönetimi (Memory Management) adı verilir. İşletim sisteminin bu amaçla oluşturulan kesimine de bellek yöneticisi (Memory Manager) adı verilir. Bellek yöneticisinin görevi, belleğin hangi parçalarının kullanımda olduğunu, hangi parçalarının kullanılmadığını izlemek, süreçlere bellek tahsis etme, tahsis edilen belleği geri almak ve bellek ile disk arasındaki takas işlemlerini gerçekleştirmektir.

Bir işletim sisteminin bellek yönetiminin sonuçları şunlardır:
·         Bellekteki herhangi bir işlemi başka bir yere aktarabilmelidir.
·         Birden fazla işlem veya kullanıcı olduğunda bir kullanıcını diğer kullanıcını alanlarına girmeleri önlenmelidir.
·         Kullanıcılar arası kaynak paylaşımını sağlamalıdır.
·         Belleğin mantıksal alanlara bölünmesini sağlayarak bilgiye erişimi kolaylaştırmalıdır.
·         Belleğin yetmediği durumlarda fiziksel başka bellek alanlarını yani hard diskleri kullanabilmelidir.



Kabuk (Shell) Programlama
Linux 'un türetildiği UNIX sistemlerinde komutları yorumlamak ve yönetmek için kullanılan programa kabuk denir. Bir başka değişle bilgisayar ekranımızın yönetimini pencereler ve simgeler ele geçirmeden önce bilgisayarlarımızı çalıştırmak için kullandığımız komutları yazdığımız bir tür paneldir.
Bütün LINUX dağıtımlarında bir kabuk bulunur. Bir başka değişle Kabuk bir LINUX sistemin olmazsa olmazıdır.
 
Peki kabukla ne yapabiliriz?
 
Programları, Dosya sistemlerini çalıştırabilir, Bilgisayar kodunu derleyebilir, Bir sistemi işletebiliriz. Kısacası bilgisayarımızı en etkili şekilde yönetebiliriz.
 
Kabuk yaygın kullanıcı arabiriminden (GUI) daha az sezgiseldir. Ancak doğru komutlar ve ne yaptığını bilenler için GUI den çok daha etkili kullanılabilir. Bu noktadan baktığımızda Kabuk basit şekliyle bir komut dili yorumlayıcısıdır.
 
Microsoft işletim sistemlerindeki DOS komutlarını çalıştırabilmek için kullandığımız yorumlayıcıya        (cmd.exe) benzer. Fakat çok daha etkilidir. Şöyle ki; Microsoft işletim sistemlerinin kendine has bencilliğini çoğu zaman fark etmesek de sistemimizi sınırlı bir çerçevede kullanmamıza müs
ade eder. 
Kabuk ise LINUX 'u LINUX yapan en temel etmendir. Kabuk yardımıyla işletim sistemimizin çekirdeğine kadar etkiyip, sistemimizi kendi ellerimizle yapılandırabiliriz.
 


Yorumlar

Bu blogdaki popüler yayınlar

VLSI Devre Tasarımı

Yapay Sinir Ağlarına Giriş

İnsan Bilgisayar Etkileşimi