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.
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.
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.
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üsade 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.
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üsade 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
Yorum Gönder