Archive for January 2014

Android Internals Part I

Android Internals Part I
Ibrahim BALİÇ

Hemen hemen tüm kaynaklarda Mobil İşletim sistemi olarak anılan Android’in sadece mobil cihazlar ile sınırlanmaması gerektiğini, hemen hemen her yazımızda belirtiyoruz. Genel olarak mobil cihazlar üzerinde kullanılıyor olsada Android işletim sisteminin gelecekte farklı endüstriel cihazlar içerisinde karşımıza çıkacağı kaçınılmazdır.

Günümüzde farklı örnekler ile Akıllı Tvler, Tabletler hatta otomotiv sektöründe otomobil otomasyonlarında kullanıldığı gözükmektedir. Buna istinaden yeni bir yazı dizimizde Android İşletim sistemi temellerine göz atacağız. Android işletim sisteminde bir donanım nasil kullanılıyor, bir işlem başlatıldığında işletim sistemi üzerinde neler olup bitiyor veya bir uygulama gerçekte nedir gibi soruları Bu kaynak ile göreceğiz. Android İşletim sistemi temellerine inerek işletim sistemi mimarisine göz atacağız.

Android

Android Linux kernel temeline kurulmuş bir işletim sistemidir. Linux, Windows gibi işletim sistemlerine göre yapısal olarak farklılar gösterdiği için daha az cpu ve ram karşımızda daha hızlı ve mini bir işletim sistemi görürürüz. Android linux kernel üzerine kurulu olsada linux değildir veya linux işletim sistemi üzerinde alışı gelindik bir çok araç içerisinde bulunmamaktadır. Alışı gelindik araçlara değinmişken Linux ve Windows gibi yapılarda aşina olduğumuz stack yapısı Android işletim sistemi üzerinde farklılık göstermektedir. Windows, Linux vs gibi işletim sistemleri stack-based yapıya sahip iken Android işletim sisteminde bu yapı register-based olarak karşımıza çıkıyor.

Android Mimarisi

Android-Mimarisi[1]

Yukarıdaki görmüş olduğunuz görselde Android işletim sistemi mimarisinin katmanları gösterilmektedir. Android işletim sisteminin temelinde yukarıda gözüktüğü gibi 5 ana katman bulunmaktadır.

Bunları başlık olarak açıklamak gerekir ise;

  • Applications Katmanı
  • Application Framework Katmanı
  • Libraries Katmanı
  • Android Runtime Katmanı
  • Kernel Katmanı

Bu 5 katmanın mantık olarak daha iyi anlaışması için bir örnek verelim, Bizim Android üzerine yüklediğimiz herhangi bir uygulamayı (skypefacebook ve UNdroid vs) işletim sistemi üzerinde Application katmanında ele alırız.

Skype uygulaması işletim sistemi üzerinde çalıştırılacağı zaman biz bu olayı Runtime katmanında ele alırız,Yine aynı uygulama üzerinden yola çıkarsak; Skype uygulaması işletim sistemi üzerinde bize notification yollayacağı zaman işletim sistemi üzerinde Application Framework katmanında bulunan Notification Manager‘ı kullanır ve biz bu olayı Application Framework katmanında ele alırız.

Aynı uygulama(skype) bize gönderdiği Notification‘ı işletim sistemi üzerinde, Libraries katmanında bulunan SQLite ile Internal Stroage alanına kayıt ettiği zaman biz bu olayı SQLite’a eriştiği için Libraries katmanında ele alırız. Skype uygulaması tüm bu işlemleri yapar iken cihaz üzerinde donanımlara ( cpu, camera vs) erişirken ve yönetirken kernelkatmanında ele alıyoruz.

İşletim sisteminin genel hatlarıyla çalışma yordam ve prensipleri bu şekilde işlemekte ve ele alınmaktadır.

Ø – Application Katmanı

Android işletim sistemi mimarisinde en üst katman olarak bilinir ve Uygulama katmanı olarak adlandırılır.Temel cihaz uygulamaları Android işletim sistemi ile birlikte gömülü olarak gelmektedi veya daha sonra kullanıcı tarafından kurulurlar. Gömülü olarak Android ile birlikte gelen uygulamalar sürümüne göre değişiklik gösterebilsede örnek vermemiz gerekirse bu üç uygulama gömülü olarak gelir ve işletim sistemi içerisinde applications katmanında yer alır;

Phone Uygulaması

Web Browser Uygulaması

Contacts Uygulaması

 

Ø – Applications Framework Katmanı

Android işletim sistemi mimarisinde 2. katman olarak  gözümüze çarpmakta olan Application Framework katmanı adındanda anlaşılacağı üzere uygulamaların işletim sistemi ile etkileşimini sağlayacak olan servislerin bulunduğu(aracılığını yapan) katmanıdır.Burada örnek vermemiz gerekirse eğer; Seneryomuza göre bir uygulama geliştireceğiz ve bu uygulama ile cihaz içerisine yüklü olan diğer uygulamaları görüntülemek istiyoruz.bu işlem içerisinde Application Framework Katmanında bulunan Package Manager’ı aracı kılarak gerçekleştirebiliriz. Bu katmanda bulunan servisler android işletim sistemi içerisinde bazı yetki ve sınırları bulunmaktadır. Bu yetki ve sınırlar ilgili servisin durumuna göre Android Uygulaması içerisindekiAndroidManifest.xml dosyasında uygulama geliştirilirken belirtilmektedir.

Activity Manager : Acvitiylerin durumdan ve yönetiminden soumludur. Aktivity çalıştırılması, durudurulması vs gibi durumlarından sorumludur.

Window Manager : Tüm Uygulamaların görüntülenen ekranlarının oluşuturulmasından ve yönetilmesinden sorumludur. Android’teki Activity kavramı öğrenildikten sonra daha iyi anlaşılacaktır ve Window Manager ve Window Manager farkta Activity manager Activity’nin durumunu (çalışıyor çalışmıyor gibi) yönetir. Window Manager ise Activity’nin oluşturulmasını sağlar.

Content Providers : Uygulamalar arasında data paylaşımı ve erişimi yapmaktan sorumlu olan servistir.

View System:  User Interface (UI) oluşuturulmasından ve yönetilmesinden sorumlu olan servistir.

Package Manager: Cihaz içerisine kurulu Uygulama-Package (apk dosyaları ) lardan sorumlu olan servistir. Yukarıda belirttiğimiz gibi bir uygulama geliştirerek, cihaz içerisinde kurulu diğer uygulamaları görüntüleyebilir veya yönetebiliriz(silmek vs gibi)

Telephony Manager: Cihaz yönetiminden sorumlu olan servistir. Uygulama içerisinde cihaz ile alakalı bir işlevle aracılık eder. Örnek olarak gelen aramanın anlaşılması gibi. cihazın gelen aramada “telefon çalıyor” durumu gibi.

Location Manager: Uygulamaların Cihaz içerisinde bulunan Location(GPS) erişimini sağlar ve yönetir.

Resource Manager : Uygulamalar içerisine dahil edilen diğer kaynakların(resim, dosya vs) yönetiminden sorumlu olan servistir.Yine örnek vermemiz gerekirse, Uygulamamız içerisine yerleştirilen bir logo’yu uygulama içerisinde kullanılacağız veya yönetileceğiz zaman Resource Manager aracılığı ile gerçekleştirmektedir.

Notificaiton Manager: Cihaz üzerindeki bilgi mesajlarından sorumlu olan servistir. Örnek vermemiz gerekirse facebooktan yeni bir yorum geldi gibi bilgi mesajları Notification Manager’ın yönetimindedir.

 

Ø – Libraries Katmanı

Android işletim sistemi mimarisinde 3. katman olarak göze çarpan Libraries katmanı (native-libraries olarakta karşımıza çıkabilir) Android işletim sistemi içerisine yerleştirilmiş diğer araç kütüphanelerini bulunduran katmandır.Application Katmanında bahsetmiş olduğumuz Android ile gömülü olarak gelen Web Browser uygulamasından örnek verecek olursak eğer, Burada internet sayfası görüntülemeye çalıştığımızda Android işletim sisteminde uzakbilgisayar(remote server yani website sunucusu) tarafına istek yaptıktan sonra geri dönen (response) içerik (html kodları vs) yorumlanması Android içerisine dahil edilen WebKit kütüphanesinin işi veya Uygulamamız içerisinde bir database oluşturmamız gerekiyor. Kişilerin adlarını ve soyadlarını kayıt edip sorgulayacağız burada android işletim sisteminin Libraries katmanında bulunan SQLite kütüphanesinden faydanılmaktadır.

Ø – Android Runtime Katmanı

Core Libraries 

Çekirdek Kütüphanesi olarak Türkçeleştirebileceğimiz Core Libraries veya Java Libraries olarakta karşımıza çıkabilir. Bu kütüphane bizlere uygulamaların hariciJava kütüphanesinden faydalanmasını sağlamaktadır.i Android işletim sistemi üzerine dahil edilen bu kütüphane sayesinde uygulamalar içerisinde Java Libraies kullanabilmekteyiz.

Dalvik VM 

Dalvik VM(Dalvik Virtual MachineDan Bornstein tarafından Android işletim sistemi için özel olarak geliştirilmiş bir sanal makinadır. Java olarak yazılan uygulama kodları (.class) derleyiciler tarafından Dalvik VM’in okuyabileceği bytecodelara çevrilerek toplanır ve .dex uzantılı dosyada dönüştürülürler. Bu .dex uzantılı dosyalar Dalvik VM’in çalıştırılabilir(executable) dosya uzantılarıdır.

Dalvik VM düşük hafıza kullanımından dolayı sevilmektedir. Dalvik VM için ön görülen min RAM kapasitesi 64 MB olarak belirtilmektedir. İşletim sistemi başladıktan sonra 20 MB RAM kapasiti bulundurmaktadır.

Dalvik VM, Android 2.2 ile birlikte Just-In-Time derleyici olarak yoluna devam etmiştir. JIT olarak bilinen ve çalışma zamanlı derleme yapısı Android 4.4 ile yerini Ahead-of-Time derleyiciye bırakmaya başlamıştır. Çalışma öncesi derleme yapısı AOTGoogle firması tarafından ART olarak sunulmuştuır.

ART Android RunTime ile yoluna devam eden Android  işletim sistemi için performans kazandırılacağı düşünülmektedir.Çünkü JITyani çalışma zamanlı derleme, Uygulamaların çalışma zamanında ele alarak bytecodelarının okunup, işlemci üzerinde yorumlanmasıyla çalışmakta iken AOT yani çalışma öncesi derleme ile bu yapı Uygulamaların kurulma aşamasında derlenip çalışma esnasında derlenme ile zaman kaybetmemesi sağlamaktadır. Buda Android için daha az işlemci ve ram anlamına gelmektedir.

Ø – Linux Kernel Katmanı

Android işletim sisteminde 5. Katman olarak Linux-Kernel gözümüze çarpıyor olsada geçrek anlamda en alt katman işletim sisteminin 0. seviyesidir. İşletim sistemi ile donanım ( hardware ) arasındaki iletişimi sağlayan tabiri yerinde ise android işletim sisteminin kalbidir. Linux-Kernel, Linux olarak adlandırıyor olsakta bilinen linux kernelden bağımsız olarak Android için özel olarak geliştirilmiştir. Yani bilinen linux çekirdeğinden çalışma prensipleri olarak aynı olsada yapısal olarak farklıdır.

Donanımların Yönetimi

Güvenlik Politikaları Yönetimi

Güç Yönetimi ( Power Management )

Kütüphane Paylaşımı 

Gibi önemli görevleri üstlenmiştir. Yapısal olarak android sürümlerine göre göstermiş olduğu farklılıklar aşağıdaki gibidir.

Android 1.0 Sürümü ile Linux Kernel 2.6.25
Android 1.5 Sürümü ile Linux Kernel 2.6.27
Android 1.6 Sürümü ile Linux Kernel 2.6.29
Android 2.2 Sürümü ile Linux Kernel 2.6.32
Android 2.3 Sürümü ile Linux Kernel 2.6.35
Android 3.0 Sürümü ile Linux Kernel 2.6.36
Android 4.0 Sürümü ile Linux Kernel 3.0.1
Android 4.1/4.2 Sürümü ile Linux Kernel 3.0.31

Linux çekirdeğine eklenen özellikler arasında;

Alarm Driver : Zamanlayıcı(timer) ve Cihaz uyandırmayı sağlar.

Shared Memory Driver: ashmem olarak bilinen hafıza paylaşımını sağlar.

Binder: Bir veya daha fazla process arasında bağlantıyı sağlar.

Power Management: Güç yönetimini sağlar.

Low Memory Killer: 

Kernel Debugger and Logger: Logcat olarak kullandığımız cihaz loglarını sağlar.

USB Driver: ADB yani Android Debug Bridge ile diğer cihazlarla bağlantı sağlar.

Android İşletim sistemi katmanlarına yönelik anlatacaklarımız şimdilik bu kadar, Android Internals Part II ‘de Applications Anatomisine Process, Thread kavramına ve Application Internals başlığı altında uygulama mimarisine değineceğiz.