mardi 11 mai 2010

Arhitectura iPhone OS

Sistemul de operare al echipamentului iPhone este construit pe o structura UNIX BSD. Nucleul/Kernel sistemului de operare Darwin iPhone este un micro nucleu/kernel bazat pe XNU (X is Not Unix). El este si un hibrid al micro-nucleului MACH cu componente din BSD. XNU este un nucleu/kernel de sistem de operare ce a fost achizitionat de Apple si dezvoltat pentru realizarea sistemului de operare Mac OS X. Astfel Apple se lansea în lumea softului liber, avand un sistem de operare Darwin.
XNU are in componenta cod dezvoltat pe arhitectura legendara MACH. Aceasta a fost creata in cadrul unui proiect de cercetare de la Universitatea Carnegie Mellon la mijlocul anilor 1980. Aceasta arhitectura provine la randul ei de la sistemul de operare Accent, de asemenea, dezvoltat la CMU. Primele versiuni de MACH au avut nuclee/kernel-e monolitice, cu o mare parte din codul nucleului/kernel-ului BSD. MACH 3.0 a fost prima implementare a unui micro-nucleu.
Nucleul/kerne-lul sistemului de operare Mac OS X, numit si XNU, este compus din trei elemente: MACH, BDS si I/O-Kit. Nucleul iPhone pastreaza cele trei componente dar nu este acelasi (ceea ce este si normal) cu un nucleu/kernel Mac OS X 10.x.x.

MACH

MACH numeste spatiul de adresse "tasks", si un task poate contine zero sau mai multe threads. La iPhone exista un singur task, cel principal, al aplicatiei si mai multe threads-uri.

BSD

Partea BSD a nucleului/kerne-lului XNU implementeaza procese UNIX peste task-urile MACH, semnalizari UNIX peste exceptiile MACH si IPC (Inter Process Communication) MACH. Sunt implementate aici si semanticile sistemului de fisiere UNIX cum ar fi cele legate de retea TCP/IP. Componenta VFS (Virtual File System) permite cuplarea sistemului de fisiere BSD. Infrastructura /dev se cupleaza direct in I/O Kit. BSD exporta toate tipurile de semantici prin interfata apelurilor system, "syscall". Spre exemplu acestea pot fi :"open()" si "fork(). Aceste semantici trebuie sa fie compatibile ca la orice sistem de operare UNIX/BSD/POSIX.
Fiind practic doua nuclee/kerne-luli in XNU (MACH cu mesajele sale ce trec prin API si BSD cu POSIX API) exista doua tipuri de apeluri sistem/syscalls. In timp ce ambele utilizeaza singurul punct de intrare int 0x80/sysenter/sc, apelurile sistem cu numere id negative vor fi rutate spre MACH, pe cand cele pozitive spre BSD.

Aucun commentaire:

Enregistrer un commentaire