-- Bilgisayar, Donanım, İnternet

Android İşletim Sistemi ve Teknik özellikleri

Bu yazı KTÜ Bilgisayar Mühendisliği Bölümü  İşletim sistemleri dersi için tarafımca yazılmış bir makaleden ibarettir. Makalede Android işletim sistemi birçok yönüyle incelenmiştir.

  1. 1.

    GİRİŞ : MOBİLİTE VE MOBİL İŞLETİM SİSTEMLERİ

            Teknolojinin her geçen gün gelişmesiyle teknolojik cihazlar da kişisel bilgisayarların yaptığı bir çok işi yapar duruma geldiler. İlk çıkış amacı, kişilerin sabit bir noktaya bağlı kalmadan istedikleri yerden sesli görüşmeye imkan vermek olan cep telefonları şimdilerde önü alınamayan teknolojilerle donatılmış durumdalar.

            Cihazların yetenekleri arttıkça bu yeteneklerin verimli şekilde kullanılabilmesini sağlamak da işletim sistemlerine düşüyor. Mobil işletim sistemleri olarak adlandırılan bu işletim sistemlerinin kabiliyeti arttıkça mobil piyasadaki payı da aynı şekilde artış gösteriyor.

            Mobilitenin bu denli önem kazanmasında önemli etkenlerden biri Android işletim sistemidir. Android işletim sistemi Gartner Tech. Research(1) araştırmasına göre 2011 yılının son çeyreğinde %43.4 kullanım oranıyla en çok tercih edilen mobil işletim sistemidir. Yazının devamında bu işletim sisteminin tarihçesine ve özetine kısa şekilde değinildikten sonra teknik açıdan incelemesi yapılacaktır.

1.1 : Android İşletim Sistemine Genel Bakış

            Android işletim sistemi, 2005 yılında Google Inc. tarafından Android Inc. ‘in satın alınmasıyla adını duyurmuştur. Bundan 2 yıl sonra Google’ın öncülüğünde, mobil teknoloji alanında kendini kanıtlamış şirketler Open Handset Alliance’ı kurdular. Bunu yapmakta amaç mobil teknolojilere açık standartlar getirmekti. Android de O.H.A.’nın çalışmaları sonucu gelişmiş bir mobil işletim sistemi haline gelmiştir.

            Android OS açık kaynak bir işletim sistemidir. Açık kaynak olmasındaki temel faktör işletim sistemi çekirdeğinin Linux olmasındandır. Android’in çekirdeğinde Linux Kernel 2.6 çalışmaktadır. Mobil cihazlarla birlikte gelen yeni teknolojik donanımlara ( denge sensörleri, GPS vb. ) iyi adapte olan Linux Kernel, Android’in kısa sürede bu kadar çok tutulmasında önemli rol oynamaktadır.

            Android’in öne çıkan yönlerinden biri de uygulamalardaki performansıdır. Android işletim sisteminde uygulamaların çalıştırılması görevi bir Java Sanal Makinası’na bırakılmıştır. Bu sanal makine Google tarafından Android için geliştirilmiş olan Dalvik Virtual Machine’dir. Tüm kullanıcı tanımlı uygulamaları üstlenmiş olan bu sanal makine Android Runtime başlığında ayrıntılı olarak incelenecektir.

  1. 2.      ANDROID OS MİMARİSİ – (ARCHITECTURE)

            Android mimarisi, diğer işletim sistemleri mimarisine kıyasla daha fazla görev katmanına sahip bir mimaridir. Örneğin; Win. NT mimarisinde user ve kernel olarak iki seviye vardır ve bu iki seviye net bir çizgiyle ayrılmıştır. Fakat Android mimarisinde beş katmanlı bir yapı kullanılmıştır. Bu katmanlar şu şekildedir :

Android Mimarisi

2.1 : Applications

            Applications katmanı İşletim sisteminin kullanıcıya görünen yüzüdür de denebilir. Bu katmanda kullanıcı tanımlı uygulamalar bulunur. Android uygulamalarının tamamına yakını Java programlama diliyle geliştirilir.

2.2 : Application Framework

            Android’in tercih edilmesinde uygulamalar büyük rol oynamaktadır. Bu yüzden bu tercih sebebinin, yani uygulamaların işletim sistemi tarafından kusursuz yönetilmesi gerekir. Androidde uygulamaların yönetimi Application Framework tarafında gerçekleştirilir. Bu katmanın görevleri arasında; uygulamaya ait kaynakların yönetimi, uygulamalar arası veri paylaşımının yönetimi, uygulamaların yaşam döngülerinin yönetilmesi gibi önemli uygulamalar vardır. Ayrıca uygulamanın donanım isteklerinin de yönetilmesini gerçekleştirir.

2.3 : Libraries

            Android’in çeşitli sistem bileşenlerinin kullanılabilmesi için gerekli olan C,C++

kütüphanelerinin bulunduğu katmandır. Örneğin veritabanı uygulamaları için kullanılan SQLite veritabanının kütüphanesi bu katmandadır. Yine benzer şekilde medya uygulamalarının da kütüphaneleri bu katman içindedir.

2.4 : Runtime

Android uygulamalarının tamamına yakını Java diliyle yazıldığından bu uygulamaların çalıştırılmasında bir Java Sanal Makinesi’ne ihtiyaç vardır. Mobil cihazlardaki kaynakların oldukça sınırlı olması, Android için yeni bir sanal makineye ihtiyaç duyulmasına sebep olmuştur. Google bu sebeple Android için Dalvik Sanal Makinesini geliştirmiştir.   Androidde her uygulama kendi sürecinin Dalvik VM’den aldığı bir oturumda koşar. Dalvik VM aynı anda çok sayıda sürece oturum hakkı verebilir. Yani birden fazla process zaman paylaşımlı olarak çalışabilmektedir.

Sun Microsystems’ın JVM’i Java kodunu derlerken main class ve ne kadar harici class varsa bunları ayrı .class dosyaları şeklinde oluşturur. İcraa sırasında bu .class dosyaları sırasıyla koşulur. Dalvik VM’de ise çalıştırılabilir dosya .dex dosyasıdır ve her uygulama  için tek bir .dex dosyası oluşturulur. Bunu yapmakta amaç sınırlı olan belleğe yüklenecek uygulama kaynak dosyalarının sadece gerekli olanlarını seçmektir.

Dalvik VM’ın iş parçacıklarını ve belleği yönetme fonksiyonları Linux Kernel’a dayanır.

2.5 : Linux Kernel

            Android OS, bellek yönetimi (memory management), süreç yönetimi (process management), güvenlik, sürücü hizmetleri gibi temel işletim sistemi görevlerini Linux Kernel 2.6 ile gerçekleştirmektedir. Donanım kaynaklarına erişim de Linux Kernel ile gerçekleştirilir. Android, bahsi geçen özellikleri linux kernel’dan almış olsa bile bunları mobil cihazlara uyarlamak için bazı iyileştirmelere ve geliştirmelere de gitmiştir. Bu özellikler sırasıyla devam eden başlıklarda açıklanmıştır.

  1. 1.      SÜREÇLER VE İŞ PARÇALARI  ( Process & Thread )

            Android uygulamalarında çoğunlukla farklı işlerin aynı anda yapılması ve farklı sonuçların eş zamanda üretilmesi gereklidir. Örneğin bir lokasyon uygulamasında kullanıcı uygulamanın görüntü bileşeniyle ilgilenirken, uygulamanın bir farklı bileşeni de anlık olarak sürekli GPS verisini işlemeli ve uygun değerleri kullanıcının anlayabileceği şekilde oluşturmalıdır. Aynı zamanda bu bileşenler gerekli durumlarda çalışmasını duraklatabilmeli ve devam ettirebilmelidir. Bu gereksinimlere uygun olarak bir Android uygulaması çalıştırıldığında varsayılan tek bir linux process’i başlatılır. Burada geliştiricinin seçimine bağlı olarak aynı uygulamanın bir bileşeni için farklı bir process de oluşturulabilir. Hatta iki farklı uygulamanın iki farklı bileşeni tek bir process oluşturarak çalışmalarına devam edebilirler.

Androidde kaynakların sınırlı olması, gereken durumlarda bazı süreçlerin işletim sistemi tarafından öldürülmesini gerektirebilir. Örneğin boş bellek alanının çok daralması durumunda öldürülecek süreçlerin seçiminde, kullanıcıya en az etkisi olacak şekilde bir seçim yapılır. Bunun kararı da sürecin evresine bakılarak verilir.

3.1 : Süreçlerin Yaşam Döngüsü ( Process Lifecycle )

Android bir süreci olabildiğince uzun süre aktif tutmak istese bile kaynak yetersizliği sebebiyle zamanla biriken  süreçlerden uygun olanları öldürmesi gerekecektir. Bu durumda öldürülecek olan sürecin seçilmesi kritik bir karardır. Android bu süreçlerin seçiminde “önem hiyerarşisi” yöntemini kullanır. Bu hiyerarşide her süreç önem sırasına göre kendine bir yer edinir. Sürecin önemi, o an çalışan bileşenlerinin sayısına ve durumuna bağlı olarak belirlenir. Bu hiyerarşinin en altındaki süreç ilk öldürülecek süreçtir.  Önem hiyerarşisinde 5 çeşit process için önem seviyeleri bulunmaktadır. Bunlar şöyle sıralanmıştır :

3.1.1 : Foreground Process

Kullanıcının o an yaptığı iş veya işlerde rolü olan süreçlerdir. Eğer süreç kullanıcıya o an görünür bir hizmet sunuyorsa, görünür değil fakat servis sunuyorsa (müzik çalar vb) veya kullanıcıya görünür servis sunacak fakat başlama evresindeyse Foreground Process olarak nitelendirilir ve hiyerarşik yapının en üstünde yer alırlar. Fakat aynı anda çok fazla Foreground process çalıştırılmasına da izin verilmez.

3.1.2 : Visible Process

            Daha önce bir parçası koşmuş ve duraklatılmış, fakat istenildiği anda hizmet vermeye hazır olan süreçlerdir. Örneğin mesaj yazarken kısa süreliğine başka bir uygulamaya göz atıldığında mesaj uygulaması duraklatılır fakat önemini kaybetmez.

3.1.3 : Background Process :

            Kullanıcı tarafından varlığı farkedilmeyen, aktivitesi durdurulmuş süreçlerdir. Bu süreçlerin silinmesi durumunda dahi kullanıcı bu durumu farketmez. Bu yüzden herhangi bir zamanda öldürülebilirler. Bu tür süreçlerin halen bellekte tutulmalarının sebebi Least Recently Used, yani son zamanlarda kullanılmış ve tekrar kullanılması mümkün olmasıdır. Bu sayede tekrar çağırıldığında tüm .dex dosyasını yüklemek yerine sürecin istenen aktivitesi çağırılarak süreç aktif hale getirilir.

3.1.4 : Empty process :

Tüm işini tamamlamış ve hiçbir aktif veya deaktif bileşeni olmayan süreçlerdir. Bellekte tutulmalarının amacı cache mantığına dayalıdır.

3.2 : Threads

            Bir android uygulaması çalıştırıldığında oluşturulan ilk thread ‘main thread’ olarak adlandırılır. Bu thread’in amacı uygulama arayüzünü oluşturacak bileşenleri uygulamaya dahil etmektir. Bu bileşenler Android’in widgets kütüphanesinden edinilir. Temel görevi bu olduğu için User Interface Thread olarak da anılır.

Android işletim sistemi bir bileşen için farklı thread’ler oluşturmaz. Varsayılan durumda her bileşen kendi uygulamasının süreci içindeki main thread tarafından idame ettirilir. Bu tek thread’li yapı bazen ciddi sorunlara sebep olabilmektedir. Örneğin ekranda oluşturulacak bir çizim bir uzak kaynaktan alınacaksa (örn. İnternet) ve bu alma işlemi gereğinden uzun sürerse bu thread bloklanır. Bloklanan threadin 5 saniye içinde bloğu kaldırılmazsa uygulama Not Responding gerekçesiyle sistem tarafından sonlandırılır.

Bu tek thread’li yapının neden olduğu bu tür sorunları gidermek için ‘worker thread’ gibi çözümler sunulmuştur. Worker thread uygulamanın geliştirilmesi aşamasında geliştirici tarafından bazı işleri yapması için görevlendirilmiş threadlerdir. Fakat burada oluşturulan worker thread’lerin yanlış bir sonuç üretmesi veya sonuç üretememesi main thread’in yine bloklanmasına sebep olabileceğinden tam çözüm olmamıştır. Çözüm için geliştirme aşamasına ait farklı yaklaşım ve yöntemler mevcuttur. Bunlardan en etkilisi AsyncTask denilen çözüm yoludur.

3.3 : Interprocess Communication

            Android süreçler arası iletişim (IPC) tekniği olarak Remote Procedure Calls tekniğini seçmiştir. Bu teknikte aynı kaynağı kullanan processler arasında Sunucu-İstemci ilişkisi vardır. Kaynağı elinde tutan process sunucu, ele geçirmek isteyen istemci durumundadır ve ele geçirmek için prosedür çağrıları yapmaktadır. Bu teknikte en bilinen uygulama Mesaj Geçme (Message Passing)’dir. Bu karşılıklı dışlama yönteminde ortak kullanılacak kaynak işini bitirip buna dair mesajı bekleyen sürece (istemci) gönderene dek kaynak sadece sunucunun erişimine açıktır. Böylelikle Mesaj Geçme yöntemiyle Mutual Exclusion sağlanmış olur.

3.4 : Memory Management

            Android bellek yönetimiyle doğrudan ilgilenmez. Bu iş çekirdeği olan linux kernel 2.6 tarafından gerçekleştirilir. Ayrıca Dalvik Virtual Machine süreçlerin koşulmasından sorumlu olduğu için dolaylı olarak bellek yönetiminde rol alır. Android belleği yazılımsal olarak yönetmeyi amaçlar. Bunu da daha önce bahsedildiği üzere belleği verimli kullanarak, yani süreçleri önem hiyerarşisine göre değerlendirerek yapar.

3.5 : Security

PDA, tablet gibi akıllı cihazlar kişisel kullanım için çok uygun olduklarından bir çok kişisel bilgiyi içinde barındırırlar. Android işletim sisteminde bu sebeple güvenlik önemli bir noktadır.

Sistem güvenliği Linux çekirdeğiyle gelen güvenlik uygulamalarıyla sağlanabilmektedir.Başta donanım ve dosya güvenliği olmak üzere cihaza yönelik güvenlik unsurları linux kernel  2.6 ile gerçekleştirilir.

Kişisel bilgilerin güvenliğine yönelik uygulama ise izinlere dayalıdır. Android uygulamaları kapalı kutu (sandbox) modelinde çalışırlar ve kendilerine verilen izinlerin dışına çıkamazlar. Telefon, SMS, İnternet gibi farklı izinler mevcuttur. Bir uygulamaya gerekli olan izinler geliştirilme aşamasında belirlenir ve uygulamaya izin olarak eklenir. Kullanıcılar yeni bir uygulama yükleyecekleri zaman bu uygulamanın talep ettiği izinler ekranda listelenir. Böylelikle kullanıcı uygulamanın amacıyla ters düşen bir izin istemesi durumunda kendi güvenliği için uygulamaya izin vermeyebilir. Bu şekilde kötü amaçlı yazılımların da önüne geçmek mümkündür. Örneğin; işi, çekilen fotoğraflara rötüş yapmak olan bir uygulama kamera donanım izninin yanı sıra internet izni de isterse uygulamanın iyi niyetinden şüphe edilip güvenlik için karar verebilme şansı kullanıcıdadır.

Sonuç olarak, Android yeni çağın cihazları için yeni çağın işletim sistemi olmaya adaydır. 5 yıllık bir süre zarfında bu kadar kullanım oranına ulaşması da bu tezi destekler niteliktedir.

KAYNAKÇA

 

MEIER Reto, Proffesional Android 2 App. Development, Wiley , Indianapolis 2010

TAÇ Muharrem, Android Programlama, dikeyeksen, İstanbul 2011

EHRINGER David, The Dalvik Virtual Machine

http://www.gartner.com/it/page.jsp?id=1764714

http://en.wikipedia.org/wiki/Android_(operating_system)

http://developer.android.com/guide/basics/what-is-android.html

http://electronics.howstuffworks.com/google-phone2.htm

http://technet.microsoft.com/en-us/library/cc768129.aspx

http://en.wikipedia.org/wiki/Dalvik_(software)

http://en.wikipedia.org/wiki/Linux_kernel

http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html

http://en.wikipedia.org/wiki/Remote_procedure_call

http://mobworld.wordpress.com/2010/07/05/memory-management-in-android/

http://source.android.com/tech/security/index.html

http://developer.android.com/guide/topics/security/security.html

Yorumla

Yorum