[pso] Apeluri de sistem

Andrei Voinescu voinescu.andrei at gmail.com
Sat Mar 6 16:18:47 EET 2010


Salut,

Eu cred că ai putea foarte bine să faci așa ceva, dacă îți permite
arhitectura procesorului. Trebuie să ai grijă însă să se potrivească
convenția de apel de sistem din kernel cu cea din libc.
De exemplu, trebuie să te uiți în:
  * arch/avr32/kernel/common-avr32b.S în kernel
  * libc/sysdeps/linux/avr32/syscall.S în uClibc
pentru cazul în care vrei să schimbi convenția pentru arhitectura
AVR32 și să folosești apoi uClibc.

Nu pot să zic decât pentru AVR32 și ARM cu care am mai avut contact,
acolo după o întrerupere software (swi la ARM sau scall la AVR32),
ajungi să ai stivă de sistem sau stivă de supervisor, accesarea
SP-ului aplicației se face prin instrucțiuni specifice. În principiu
la arhitecturile astea două parametrii se dau prin regiștri și se trec
pe stiva de sistem imediat ce intri în kernel-space (cu o singură
instrucțiune, ceea ce e destul de rapid). Având cam 10 regiștri la
liber, nu prea ai nevoie să ajungi să trasmiți prin stivă parametri.
Dacă ai dori să trasmiți doar prin stivă, ai putea să reții locația
stivei aplicației într-un registru (sau să o obții cum am zis mai
sus), apoi să copiezi din cea a aplicație în cea a sistemului.

Uită-te pe cod ca să te convingi ;), mai ales uită-te pentru x86, că
bănuiesc că pentru arhitectura asta te interesa :D

Andrei



2010/3/6 Lucian Cojocar <cojocar at gmail.com>:
> Salut,
>
> se poate implementa un nucleu în care parametrii apelurilor de sistem vor fi
> puşi pe stivă (i.e. stiva procesului)?
>
> Am văzut că nici în linux şi nici windows nu se pun pe stivă (în Windows se
> pune un pointer într-un registru, care indică spre argumentele de pe stivă).
>
> Bănuiala mea e că nu, deoarece, la execuţia unei întreruperi (fie ea şi
> software) stiva nu este coerentă şi ar trebui să căutăm în stiva procesului
> care rula la momentul producerii întreruperii (folosindu-ne de TSS),
> operaţie care ar fi costisitoare. Greşesc în raţionament?
>
> --
> Lucian Cojocar
>
>
> _______________________________________________
> pso mailing list
> pso at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>
>


More information about the pso mailing list