[pso] intrebari tema 2 linux

Alexandru Tudose alexandru.tudose at gmail.com
Wed Apr 18 00:34:23 EEST 2007


Nu prea inteleg separarea intre functia de write/read si handlerele de
intrerupere:

 - pentru testul de scriere com1 -> com2 banuiesc ca se poate folosi ceva de
genul echo "xxx" > /dev/com1
 - asta va apela pe rand functiile open, write si close din driverul meu
 - in write (din cate am inteles...) pun datele in bufferul de write, sau ma
blochez daca nu am loc
 - cand cineva va face read pe com2, se apeleaza read care va returna ceva
din buffer-ul de read, sau se va bloca daca nu este nimic disponibil

dar unde intra intreruperile aici? trebuie sa fac din write-ul meu din com1,
direct outb pe i/o porturile lui com2 ceea ce va declansa o intrerupere pe
com2 si se vor pune astfel in handler date le in bufferul de read?
in ce caz s-ar declansa o intrerupere de interes pentru bufferul de write?

In legatura cu presupunerea legata de CN si PM, pentru cei care se uita
putin cam stramb la pagina beyondlogic... mi-ai mai putea recomanda niste
resurse?

PS: driverul trebuie sa fie SMP safe?

scuze pentru miile de intrebari, dar daca nu intreb raman in ceata...
Multumesc mult,
Alex.

On 4/9/07, Mihai Florian <my_mihai_florian at yahoo.com> wrote:
>
> Buna,
>
> Cred ca problema este ca nu ai inteles ca datele trebuie scrise/citite
> pe portul serial (folosind outb si inb), nu doar retinute in memorie.
>
> Portul serial este folosit pentru comunicatia intre doua entitati
> (calculatoare, dispozitive), doua capete ale aceleiasi conexiuni. Ce se
> scrie la un capat va fi receptionat la celalt. In testul nostru am
> facut o conexiune intre com1 si com2 folosind pentru ele acelasi pipe
> in configuratia masinii virtuale. Asa ca ce va fi scris pe com1 poate
> este receptionat pe com2 si invers. Cu alte cuvinte. Testul nostru
> scrie pe com1 si citeste de pe com2, dupa care testeaza ca ceea ce s-a
> receptionat este acelasi lucru cu ce s-a transmis. Nu trebuie sa
> folosesti un buffer comun pentru cele 2 porturi, ci cum am spus mai
> devreme trebuie sa scrii si sa citesti datele (de)pe porturi folosind
> outb si inb. Ai nevoie de doua buffere care se folosesc in felul
> urmator:
> 1. bufferul pentru operatia read: scrii in acest buffer datele primite
> pe portul serial (luate cu inb in handlerul de intrerupere) si le iei
> din acest buffer si le scrii in bufferul din userspace (in functia
> mread in cazul tau).
> 2. bufferul pentru operatia write: scrii in el din bufferul din
> userspace (in cazul tau din functia mwrite) si iei din el in handler-ul
> de intrerupere si scrii pe port (cu outb).
> Nu vad cum ai putea folosi acelasi buffer pentru ambele operatii avand
> in vedere ca se refera la date diferite, unul la datele scrise pe port
> si altul la datele citite de pe port, date care de obicei sunt
> diferite. Nu prea te intereseaza sa citesti de pe portul serial ce
> tocmai ai scris pe el, ci ce s-a scris la celalalt capat.
>
> Tema presupune ca esti familiarizat cat de cat cu portul serial (cel
> putin de la CN si PM) si ca stii cam la ce se foloseste. Pentru restul
> detaliilor tehnice am inclus in enuntul temei un link
> http://www.beyondlogic.org/serial/serial.htm unde este explicat portul
> serial in detaliu.
>
> Formularea din enunt: "pentru citirea/scrierea datelelor în/din porturi
> nu trebuie să folosiţi funcţii amânabile (puteţi
> să faceţi totul din întrerupere)" inseamna ca ai voie sa faci
> outb si inb din handlerul de intrerupere si nu trebuie sa programezi o
> actiune amanabila care sa faca citirile/scrierile.
>
> Ce inseamna functii blocante am explicat intr-un alt mail. Pe scurt:
> read trebuie sa se blocheze daca nu exista date citite de pe
> port(bufferul pentru read este gol) pana cand vin date, si write
> trebuie sa se blocheze daca nu ai spatiu de scris in bufferul de write
> pana cand se elibereaza o parte din el prin scriere pe port.
>
> Mihai
>
>
>
>
> ____________________________________________________________________________________
> Sucker-punch spam with award-winning protection.
> Try the free Yahoo! Mail Beta.
> http://advision.webevents.yahoo.com/mailbeta/features_spam.html
> _______________________________________________
> pso mailing list
> pso at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://cursuri.cs.pub.ro/pipermail/pso/attachments/20070418/247e38da/attachment.htm


More information about the pso mailing list