home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #31 / NN_1992_31.iso / spool / de / comp / os / unix / 2539 < prev    next >
Encoding:
Text File  |  1992-12-27  |  2.1 KB  |  65 lines

  1. Newsgroups: de.comp.os.unix
  2. Path: sparky!uunet!utcsri!skule.ecf!torn!spool.mu.edu!nigel.msen.com!math.fu-berlin.de!news.netmbx.de!news.Hamburg.Germany.EU.net!oops.zigzag.hanse.de!fs
  3. From: fs@oops.zigzag.hanse.de (Frank Seitz)
  4. Subject: Re: Teile des Heaps r/o machen? Aufsetzen nach SIGSEGV?
  5. Message-ID: <1992Dec27.013809.25893@oops.zigzag.hanse.de>
  6. Organization: OOPS (Netzwerke/Datenbanksysteme/Sprachverarbeitung)
  7. X-Newsreader: TIN [version 1.1 PL6]
  8. References: <1992Dec26.104939.11407@omega.ssw.de>
  9. Date: Sun, 27 Dec 1992 01:38:09 GMT
  10. Lines: 53
  11.  
  12. Andreas Vogel (av@omega.ssw.de) wrote:
  13. : Eine Seite holt man sich mit mmap(),
  14.  
  15. Hmm, kenn ich zwar nicht, wird aber sicher in den SVR4 Manpages
  16. zu finden sein, right?
  17.  
  18. : und den SIGSEGV behandelt man in einem Signal Handler.
  19. : Nach Abarbeitung des Handlers geht die Programmausfuehrung ganz normal weiter,
  20. : wo ist da das Problem?
  21.  
  22. Das ist nach meiner Erfahrung nicht richtig. Ein Return aus einem
  23. SIGSEGV-Handler fuehrt zu einem erneuten SIGSEGV, nicht aber zur
  24. Fortsetzung des Programms. Das gilt selbst dann, wenn man
  25. den korrupten Speicherzugriff im Handler "korrigiert".
  26. Folgendes Programm fuehrt (unter SVR3.2) zu einer "Totschleife",
  27. in der der der SIGSEGV-Handler h() unendlich oft aufgerufen wird.
  28. Zur Ausfuehrung der Anweisung ,,printf("byebye...\n")'' kommt es
  29. nie:
  30.  
  31. #include    <signal.h>
  32.  
  33. #define BADADDR 0xfffffff
  34. int *i = (int *)BADADDR, j, h();
  35.  
  36. main()
  37. {
  38.     signal(SIGSEGV, h);
  39.     *i = 4711;
  40.     printf("byebye...\n");
  41. }
  42.  
  43. h(n)
  44. int n;
  45. {
  46.     printf("sigsegv!\n");
  47.     i = &j;
  48.     signal(SIGSEGV, h);
  49. }
  50.  
  51. : Ich habe diese Art von Demand Paging in meinem System Monitior svr4mon
  52. : implementiert und es funktioniert sehr gut. Der Code, der das Demand Paging
  53. : behandelt ist ca. 50 Zeilen lang. Wenn du Interesse hast, dann schau ihn dir
  54. : einfach mal an (paging.c). Svr4mon wurde vor einiger Zeit in alt.sources
  55. : geposted.
  56.  
  57. Danke fuer den Hinweis. Allerdings ging es mir mehr um einen
  58. lockeren Gedankenaustausch. Weniger um die Suche/Exegese von
  59. "irgendwelchem" (also nicht direkt diskussionsbezogenem) Sourcecode...
  60.  
  61. Gruss,
  62. -- 
  63. Frank Seitz, Hamburg, +49-40-7927569, {fs,root,postmaster}@oops.zigzag.hanse.de
  64.                            Wilder muss es sein.
  65.