Android Mimarisi , Linux çekirdeği geliştirmeleri ,Process & Thread Mekanizması


Ercan PINAR
080401055
ercanpinarr@gmail.com
Çanakkale On Sekiz Mart Üniversitesi
                                                                  06.12.2011
Başlıklar

    Android Nedir ?

    Neden Linux Çekirdeği ?

    Çekirdekteki geliştirmeler

    Android Kütüphaneleri

    Dalvik Virtual Machine

    Süreç & Thread --> Yaşam Döngüsü

    Runtime Android - Linux

    Mimarisel Görünüm
Android Nedir


 Android, Google ve Open Handset Allience
 tarafından kodlanmış Linux İşletim Sistemi
 tabanlı bir mobil cihaz (PDA ve cep telefonları)
 için geliştirilmiş açık kaynak kodlu bir işletim
 sistemidir.
Neden Linux Çekirdeği ?

    Bellek ve işlem yönetiminin başarılı olması.

    Temelde güvenlikli olması.

    Birtakım işlemler için izinler gerektirmesi.

    Paylaşılan kütüphaneleri desteklemesi.

    Açık kaynak kodlu olması…
Linux Çekirdeği
Android Linux çekirdeği üzerine kurulmuştur.
Fakat android Linux değildir!

Linux un glibc kütüphanesinden destek almaz.

Doğal pencereleme( windowing system) den destek almaz.

Standart olarak bulunan tüm linux hizmetlerini içermez.
Linux Çekirdeği
Standard Linux 2.6.24 Çekirdeği kullanılmıştır.
Çekirdek geliştirmeleri ile Android desteklenir hale
  getirilmiştir.
Linux Çekirdek Geliştirmeleri
Alarm

Ashmem (Android Shared Memory)

Binder (Bağlayıcı)

Power Management ( Güç yöneticisi)

Low Memory Killer (Düşük bellek öldürücüsü)

Kernel Debugger (Çekirdek hata ayıklayıcısı)

Logger (Bölümlendirme )
Binder(Bağlayıcı) Problemi
Binder mekanizmasında uygulamalar ve servisler
 işlemler çalıştırılabiliyor fakat veri iletişimi ve paylaşım
 sıkıntısından dolayı düzenlenmesi gerekmektedir.
Binder Çözümü

Sürücü süreçler arası iletişimi kolaylaştırmak için (IPC). 

 Yüksek performanslı paylaşımlı bellek sayesinde.

Her işlem  istekleri için iş parçacığı havuzu.

Süreçler için  referans sayma, nesne başvurularını haritalama.
Power Manager Problemi


Mobil cihazların pil gücü ile çalışması ve bu   güçlerin sınırlı
olması Problem olmuştur.
Android in Linux Çekirdeğine ek Kütüphaneleri
SQLite = Veritabanı

WebKit = İnternet ...
Hardware Abstraction Layer
      Donanım katmanı
Dalvik Virtual Machine
Sistemin asıl motoru DVM dir.

DVM ‘nin geliştirilme amacı minimum donanım
 konfigürasyonunda , maksimum performans elde edilebilecek
 java yazılımlarını çalıştırabilmektir.
Dalvik Virtual Machine
Uygulama taşınabilirliği ve çalıştırmasında  tutarlılık sağlar.

Optimize edilmiş dosya formatı (dex) ve Dalvik
  bytecode çalıştırır.

Java sınıf / jar dosyalarını yapısını Dex formatına
  dönüştürülür.

Gömülü ortamlar için tasarlanmıştır.

 Her süreç için ayrı bir DVM çalıştırılır.

 Belleği çok verimli kullanır.
Core Libraries
Java için çekirdek API'lerini içerir

Veri yapıları

Utilities

Dosya erişimi

Ağ Erişim

Grafik
Process
Android süreci == Linux süreci

Varsayılan olarak, aynı uygulamanın tüm bileşenlerinin aynı işlemde çalışır ve

çoğu uygulamada bu aynı şekilde olur.

Android, düşük bellekte ve başka kullanıcı isteklerine de hizmet verebilmesi için diğer
  işlemler tarafından bazı gerekli noktalarda çalışan bir süreci kapatmaya karar
  verebilir.

Hangi süreçlerin öldürülmesine karar verilirken , Android sistemi önem durumuna göre
   karar verir.

Örneğin, daha kolay görünür faaliyetleri barındıran bir süreç ile karşılaştırıldığında, artık
  ekranda görünür faaliyetleri barındıran bir süreç kapatılır.Bu nedenle, bir süreç sona
  erdirme kararı bu süreçte çalışan bileşenlerin durumuna bağlıdır.
Process

Android sistemi için bir uygulama sürecini mümkün olduğunca uzun süre korumak
için çalışır, ama sonunda, yeni ya da daha önemli eskiden var olan süreçleri
kaldırması gerekebilir.

 Hangi süreçlerin öldürüleceğini belirlemek için , sistem her işlem için sürecin içinde
çalışan bileşenleri ve bu bileşenlerin durumunu temel alan bir "önem hiyerarşisi"
belirler.

 Düşük öneme sahip işlemler ve sistem kaynaklarını kurtarmak için gerekli sonraki en
düşük öneme sahip olanlar, daha sonra ilk olarak ortadan kaldırılırlar.
Önem hiyerarşisi içinde beş seviyesi vardır. Aşağıdaki listede önem sırasına göre
(ilk sürecin en önemli ve son öldürülür) süreçlerinin farklı tipleri sunar:

1. Foreground process / önalan süreci
Kullanıcının ne yaptığına bağlı olan bir süreçtir. Kullanıcı arayüzünde aktif olan
süreç de denebilir.
2.Visible process //görünür süreç
Kullanıcının arkaplanında olan ama aniden harekete geçen (örn diyalog açılması )
gibi görünür olan süreçler.
3. Service process / hizmet süreci
Kullanıcı için çalışan fakat arka planda çalışan süreçlerdir.Örneğin müzik indirme
yada dinleme sırasında arka planda yapılan işlemler.

4. Background process/Arka plan işlemi
Bu süreçlerin kullanıcı deneyimi üzerinde doğrudan etkisi vardır ve sistem
görünür bir ön plan, ya da hizmet süreci için bellek kurtarmak için herhangi bir
zamanda onları öldürebilir.
Birçok arka plan işlemleri için kullanılır.
5.Empty Process /Boş süreç
Herhangi bir etkin uygulama bileşenlerini tutmayan bir süreçtir.
Ön belleği gelecek uygulamalara hazır durumda tutmak ve dengelemektir.

                         PROCESS LİFECYCLE
                           Süreç yaşam döngüsü

Süreç başlar.        //herhangi bir uygulama çalışması gibi
Bir Hizmet bağlama //binder services
Bir ContentProvider bağlama //içerik sağlayıcılarla haberleşilir
Gelecek uyarıları dinleyici harekete gecer
Sistem tarafından öldürülene kadar çalışmaya devam
Threads

 Bir uygulama başlatıldığında, sistem olarak adlandırılan uygulama, yürütme
“ana ” iş parçacığı oluşturur .
 Bir bileşenin her örneği için ayrı bir iş parçacığı oluşturmaz.

  Aynı işlemde çalışan tüm bileşenleri aynı iş parçacığı örneği ve her bileşen
sistem çağrıları için bu iş parçacığı gönderilir.

 Thread bloke olduğunda kullanıcı tarafında “uygulama yanıt vermiyor ” gibi bir
uyarı gösterilir daha sonradan kullanıcı isteğine bağlı olarak uygulamaya son
verebilir.
Runtime
Başlangıçta çoğu Linux tabanlı sistemlere benzer şekilde,
 bootloader Linux çekirdeğini yükler ve init işlemi başlar.
Init Linux daemons:
USB bağlantılarını yönetmek için USB Daemon (usbd)

ADB bağlantılarını yönetmek için Android Debug Bridge (adbd)

Hata ayıklama süreçlerini yönetmek için Debugger Daemon (debuggerd)
  istekleri (dump bellek, vb.)

 İletişimi yönetmek için Radyo Arayüz Katmanı Daemon (Rild)
Runtime
Init süreci zigot sürecinide başlatır :
   • Doğmakta olan bir süreç Dalvik VM örneğini (kendisine özgü)
   başlatır. 

  • Sınıfları yükler ve VM'ler spawn isteklerini dinler.
  • Forks yönetilen süreçler için istek üzerine
   VM örneğini oluşturur.
Runtime
Çalışma zamanı süreci zigot için servislerin başlatılması
  isteğini gönderir.
Runtime
Zigot forks sistemi Servis işlemi için yeni bir VM örneği ve
   hizmet başlatır.

Ana çoçuk süreç kavramı !
Runtime
Sistem Servis de dahil olmak üzere yerli sistem sunucuları
   başlatılır.
Android Mimarisi
Kaynaklar




-- developer.android.com

-- code.google.com

-- Nizar Öğütmen ANDROID Kitabı




İletişim ercanpinarr@gmail.com
Teşekkürler

Android mimari-cekirdek-binding-scheduler

  • 1.
    Android Mimarisi ,Linux çekirdeği geliştirmeleri ,Process & Thread Mekanizması Ercan PINAR 080401055 ercanpinarr@gmail.com Çanakkale On Sekiz Mart Üniversitesi 06.12.2011
  • 2.
    Başlıklar  Android Nedir ?  Neden Linux Çekirdeği ?  Çekirdekteki geliştirmeler  Android Kütüphaneleri  Dalvik Virtual Machine  Süreç & Thread --> Yaşam Döngüsü  Runtime Android - Linux  Mimarisel Görünüm
  • 3.
    Android Nedir Android,Google ve Open Handset Allience tarafından kodlanmış Linux İşletim Sistemi tabanlı bir mobil cihaz (PDA ve cep telefonları) için geliştirilmiş açık kaynak kodlu bir işletim sistemidir.
  • 4.
    Neden Linux Çekirdeği?  Bellek ve işlem yönetiminin başarılı olması.  Temelde güvenlikli olması.  Birtakım işlemler için izinler gerektirmesi.  Paylaşılan kütüphaneleri desteklemesi.  Açık kaynak kodlu olması…
  • 5.
    Linux Çekirdeği Android Linuxçekirdeği üzerine kurulmuştur. Fakat android Linux değildir! Linux un glibc kütüphanesinden destek almaz. Doğal pencereleme( windowing system) den destek almaz. Standart olarak bulunan tüm linux hizmetlerini içermez.
  • 6.
    Linux Çekirdeği Standard Linux2.6.24 Çekirdeği kullanılmıştır. Çekirdek geliştirmeleri ile Android desteklenir hale getirilmiştir.
  • 7.
    Linux Çekirdek Geliştirmeleri Alarm Ashmem(Android Shared Memory) Binder (Bağlayıcı) Power Management ( Güç yöneticisi) Low Memory Killer (Düşük bellek öldürücüsü) Kernel Debugger (Çekirdek hata ayıklayıcısı) Logger (Bölümlendirme )
  • 8.
    Binder(Bağlayıcı) Problemi Binder mekanizmasındauygulamalar ve servisler işlemler çalıştırılabiliyor fakat veri iletişimi ve paylaşım sıkıntısından dolayı düzenlenmesi gerekmektedir.
  • 9.
    Binder Çözümü Sürücü süreçler arası iletişimikolaylaştırmak için (IPC).   Yüksek performanslı paylaşımlı bellek sayesinde. Her işlem  istekleri için iş parçacığı havuzu. Süreçler için  referans sayma, nesne başvurularını haritalama.
  • 10.
    Power Manager Problemi Mobilcihazların pil gücü ile çalışması ve bu güçlerin sınırlı olması Problem olmuştur.
  • 11.
    Android in LinuxÇekirdeğine ek Kütüphaneleri SQLite = Veritabanı WebKit = İnternet ...
  • 12.
    Hardware Abstraction Layer Donanım katmanı
  • 13.
    Dalvik Virtual Machine Sisteminasıl motoru DVM dir. DVM ‘nin geliştirilme amacı minimum donanım konfigürasyonunda , maksimum performans elde edilebilecek java yazılımlarını çalıştırabilmektir.
  • 14.
    Dalvik Virtual Machine Uygulamataşınabilirliği ve çalıştırmasında  tutarlılık sağlar. Optimize edilmiş dosya formatı (dex) ve Dalvik bytecode çalıştırır. Java sınıf / jar dosyalarını yapısını Dex formatına dönüştürülür. Gömülü ortamlar için tasarlanmıştır.  Her süreç için ayrı bir DVM çalıştırılır.  Belleği çok verimli kullanır.
  • 15.
    Core Libraries Java içinçekirdek API'lerini içerir Veri yapıları Utilities Dosya erişimi Ağ Erişim Grafik
  • 16.
    Process Android süreci ==Linux süreci Varsayılan olarak, aynı uygulamanın tüm bileşenlerinin aynı işlemde çalışır ve çoğu uygulamada bu aynı şekilde olur. Android, düşük bellekte ve başka kullanıcı isteklerine de hizmet verebilmesi için diğer işlemler tarafından bazı gerekli noktalarda çalışan bir süreci kapatmaya karar verebilir. Hangi süreçlerin öldürülmesine karar verilirken , Android sistemi önem durumuna göre karar verir. Örneğin, daha kolay görünür faaliyetleri barındıran bir süreç ile karşılaştırıldığında, artık ekranda görünür faaliyetleri barındıran bir süreç kapatılır.Bu nedenle, bir süreç sona erdirme kararı bu süreçte çalışan bileşenlerin durumuna bağlıdır.
  • 17.
    Process Android sistemi içinbir uygulama sürecini mümkün olduğunca uzun süre korumak için çalışır, ama sonunda, yeni ya da daha önemli eskiden var olan süreçleri kaldırması gerekebilir. Hangi süreçlerin öldürüleceğini belirlemek için , sistem her işlem için sürecin içinde çalışan bileşenleri ve bu bileşenlerin durumunu temel alan bir "önem hiyerarşisi" belirler. Düşük öneme sahip işlemler ve sistem kaynaklarını kurtarmak için gerekli sonraki en düşük öneme sahip olanlar, daha sonra ilk olarak ortadan kaldırılırlar.
  • 18.
    Önem hiyerarşisi içindebeş seviyesi vardır. Aşağıdaki listede önem sırasına göre (ilk sürecin en önemli ve son öldürülür) süreçlerinin farklı tipleri sunar: 1. Foreground process / önalan süreci Kullanıcının ne yaptığına bağlı olan bir süreçtir. Kullanıcı arayüzünde aktif olan süreç de denebilir. 2.Visible process //görünür süreç Kullanıcının arkaplanında olan ama aniden harekete geçen (örn diyalog açılması ) gibi görünür olan süreçler. 3. Service process / hizmet süreci Kullanıcı için çalışan fakat arka planda çalışan süreçlerdir.Örneğin müzik indirme yada dinleme sırasında arka planda yapılan işlemler. 4. Background process/Arka plan işlemi Bu süreçlerin kullanıcı deneyimi üzerinde doğrudan etkisi vardır ve sistem görünür bir ön plan, ya da hizmet süreci için bellek kurtarmak için herhangi bir zamanda onları öldürebilir. Birçok arka plan işlemleri için kullanılır.
  • 19.
    5.Empty Process /Boşsüreç Herhangi bir etkin uygulama bileşenlerini tutmayan bir süreçtir. Ön belleği gelecek uygulamalara hazır durumda tutmak ve dengelemektir. PROCESS LİFECYCLE Süreç yaşam döngüsü Süreç başlar. //herhangi bir uygulama çalışması gibi Bir Hizmet bağlama //binder services Bir ContentProvider bağlama //içerik sağlayıcılarla haberleşilir Gelecek uyarıları dinleyici harekete gecer Sistem tarafından öldürülene kadar çalışmaya devam
  • 20.
    Threads Bir uygulamabaşlatıldığında, sistem olarak adlandırılan uygulama, yürütme “ana ” iş parçacığı oluşturur . Bir bileşenin her örneği için ayrı bir iş parçacığı oluşturmaz. Aynı işlemde çalışan tüm bileşenleri aynı iş parçacığı örneği ve her bileşen sistem çağrıları için bu iş parçacığı gönderilir. Thread bloke olduğunda kullanıcı tarafında “uygulama yanıt vermiyor ” gibi bir uyarı gösterilir daha sonradan kullanıcı isteğine bağlı olarak uygulamaya son verebilir.
  • 22.
    Runtime Başlangıçta çoğu Linux tabanlı sistemlere benzerşekilde, bootloader Linux çekirdeğini yükler ve init işlemi başlar.
  • 23.
    Init Linux daemons: USB bağlantılarını yönetmek için USB Daemon (usbd) ADB bağlantılarını yönetmekiçin Android Debug Bridge (adbd) Hata ayıklama süreçlerini yönetmek için Debugger Daemon (debuggerd) istekleri (dump bellek, vb.)  İletişimi yönetmek için Radyo Arayüz Katmanı Daemon (Rild)
  • 24.
    Runtime Init süreci zigot sürecinide başlatır : • Doğmakta olan bir süreç Dalvik VM örneğini (kendisine özgü) başlatır.  • Sınıfları yükler ve VM'ler spawn isteklerini dinler. • Forks yönetilen süreçler için istek üzerine  VM örneğini oluşturur.
  • 25.
    Runtime Çalışma zamanı sürecizigot için servislerin başlatılması isteğini gönderir.
  • 26.
    Runtime Zigot forks sistemi Servis işlemi için yenibir VM örneği ve hizmet başlatır. Ana çoçuk süreç kavramı !
  • 27.
  • 28.
  • 29.
    Kaynaklar -- developer.android.com -- code.google.com --Nizar Öğütmen ANDROID Kitabı İletişim ercanpinarr@gmail.com
  • 30.