🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.os.linux.programowanie
5 messages
5 total messages Started by Borneq Sun, 20 May 2012 13:04
setjmp/longjmp
#72491
Author: Borneq
Date: Sun, 20 May 2012 13:04
4 lines
1118 bytes
http://www.mkssoftware.com/docs/man3/setjmp.3.asp
"The setjmp() function does not save the calling thread's signal mask; refer 
to sigsetjmp()"
Co się dzieje gdy nie zachowa maski sygnału, do czego jest potrzebna? 
Re: setjmp/longjmp
#72492
Author: Michoo
Date: Sun, 20 May 2012 16:15
31 lines
1578 bytes
On 20.05.2012 15:04, Borneq wrote:
> http://www.mkssoftware.com/docs/man3/setjmp.3.asp
> "The setjmp() function does not save the calling thread's signal mask;
> refer to sigsetjmp()"
> Co się dzieje gdy nie zachowa maski sygnału,
Nie zostanie przywrócona w przypadku modyfikacji.

extern int foo=0;

disable_interrupt();//sekcja krytyczna
if(setjmp() == 0)
	bar();
...
enable_interrupt();//koniec sekcji krytycznej
bar(){
	...
	enable_interrupt();
	...
	if(...)
		longjmp();
}

Jak teraz bar wykona skok to w sekcji krytycznej będziesz miał 
odblokowane przerwania.

> do czego jest potrzebna?
Do obsługi przerwań.

-- 
Pozdrawiam
Michoo
Re: setjmp/longjmp
#72493
Author: Borneq
Date: Sun, 20 May 2012 17:11
14 lines
1517 bytes
Użytkownik "Michoo" <michoo_news@vp.pl> napisał w wiadomości 
news:jpb5fm$83n$1@mx1.internetia.pl...
> Jak teraz bar wykona skok to w sekcji krytycznej będziesz miał odblokowane 
> przerwania.
>
>> do czego jest potrzebna?
> Do obsługi przerwań.

Czy przerwania można obsługiwać tylko w kodzie systemowym jak kernek i może 
sterowniki? A zwykły program nie będzie miał dostępu do przerwań tak jak do 
portów? Gdyby wykonał disable_interrupt() wtedy proces mógłby zablokować 
cały system?

 Pozdrawiam
Re: setjmp/longjmp
#72494
Author: Michoo
Date: Sun, 20 May 2012 22:24
27 lines
1808 bytes
On 20.05.2012 19:11, Borneq wrote:
> Użytkownik "Michoo" <michoo_news@vp.pl> napisał w wiadomości
> news:jpb5fm$83n$1@mx1.internetia.pl...
>> Jak teraz bar wykona skok to w sekcji krytycznej będziesz miał
>> odblokowane przerwania.
>>
>>> do czego jest potrzebna?
>> Do obsługi przerwań.
>
> Czy przerwania można obsługiwać tylko w kodzie systemowym jak kernek i
> może sterowniki?
Nie. Kwestia tego jakie przerwania masz do dyspozycji.

man 2 signal

> A zwykły program nie będzie miał dostępu do przerwań
Do przerwań programowych będzie miał. Do błędów obliczeniowych cpu/fpu 
może mieć.

> tak jak do portów? Gdyby wykonał disable_interrupt() wtedy proces mógłby
> zablokować cały system?
Jeżeli by działał w dość wysokim (czy właściwie niskim) ringu.


-- 
Pozdrawiam
Michoo
Re: setjmp/longjmp
#72495
Author: Kicer
Date: Fri, 25 May 2012 05:11
37 lines
1649 bytes
Michoo wrote:

> On 20.05.2012 15:04, Borneq wrote:
>> http://www.mkssoftware.com/docs/man3/setjmp.3.asp
>> "The setjmp() function does not save the calling thread's signal mask;
>> refer to sigsetjmp()"
>> Co się dzieje gdy nie zachowa maski sygnału,
> Nie zostanie przywrócona w przypadku modyfikacji.
> 
> extern int foo=0;
> 
> disable_interrupt();//sekcja krytyczna
> if(setjmp() == 0)
> bar();
> ...
> enable_interrupt();//koniec sekcji krytycznej
> bar(){
> ...
> enable_interrupt();
> ...
> if(...)
> longjmp();
> }
> 
> Jak teraz bar wykona skok to w sekcji krytycznej będziesz miał
> odblokowane przerwania.

co także warte uwagi, nie wywołają się destruktory obiektów stworzonych 
przed longjmp (o ile powinny w związku ze zmianą scopu)

pozdrawiam

-- 
Michał Walenciak
gmail.com kicer86
http://kicer.sileman.net.pl
gg: 3729519
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads