[so2] kthread creat de kthread, mostenire spatiu de memorie

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Fri May 8 19:36:05 EEST 2015


Catalin Vasile via so2 <so2 at cursuri.cs.pub.ro> writes:
> Mersi pentru detalii.
>
> La ce lucrez exista un API mai dubios, si anume exista un server in
> kernel bazat pe kthread-uri, iar la initializarea lui foloseste niste
> metode pentru a beneficia de spatiul de memorie al unui thread (al
> aplicatiei userspace care se folosea de server).
>
> Prima data nu am vazut aceste detalii, motiv pentru care am crezut ca
> si thread-urile userspace ajung sa ruleze in kernel pe un kthread =>
> credeam ca exista o metoda oneshot care sa mosteneasca spatiul de
> memorie al procesului si sa creeze kthread-ul propriu-zis.

Thread-urile în Linux au implementare "kernel-level threads". Dar nu
există legătură între kernel-level threads și kernel threads
(kthreads). Kernel-level threads sunt contexte de execuție și
planificare (fiecare are definit un struct task_struct pe post de TCB -
Thread Control Block) și partajează spațiul de adresă al procesului din
care fac parte (adică în TCB un câmp valid de tip struct mm_struct către
spațiul de adresă utilizator (user space) al procesului).

> Voiam sa aplic aceeasi metoda mai departe, pentru a crea mai departe
> alte kthread-uri care sa poate avea acces la spatiul de memorie al
> acelui user.

Nu ai cum să faci asta pentru că rularea unui kthread nu îți garantează
că pointer-ul current de atunci va pointa către un proces/thread
cunoscut. Ai mai pus o întrebare de genul ăsta. Ai nevoie de un mecanism
de comunicare kernel space / user space între thread-ul din user space
și kernel thread. Poți folosi un device și read/write sau mmap.

Răzvan


More information about the so2 mailing list