android mimari-cekirdek-binding-scheduler

Post on 22-Nov-2014

1.430 Views

Category:

Automotive

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Android mimarisinin linux çekirdeğine extradan yaptığı bazı değişiklikler anlatıldı ayrıca android de linux un init fonksiyonunun çalışma mantığı ve yaşam döngüsü anlatıldı.

TRANSCRIPT

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

Ercan PINAR080401055ercanpinarr@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ştirmeleriAlarm

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 MachineUygulama 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 LibrariesJava için çekirdek API'lerini içerir

Veri yapıları

Utilities

Dosya erişimi

Ağ Erişim

Grafik

ProcessAndroid 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üreciKullanı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şlemiBu 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ı gibiBir Hizmet bağlama //binder servicesBir ContentProvider bağlama //içerik sağlayıcılarla haberleşilir Gelecek uyarıları dinleyici harekete gecerSistem 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)

RuntimeInit 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

top related