logo

Napaka segmentacije Core Dumped Ubuntu

Kaj je napaka segmentacije?

Napaka segmentacije oz kršitev dostopa ( segfault skratka) je stanje okvare ali napaka, ki jo povzroči strojna oprema z zaščito pomnilnika, ki opozori operacijski sistem, ki ga je programska oprema poskusila dostopati do območja z omejenim pomnilnikom (kršitev dostopa do pomnilnika).

To je splošna oblika napake zaščite na standardnih sistemih x86. Kot odgovor bo jedro operacijskega sistema običajno izvedlo nekaj popravnih operacij, ki običajno prenesejo to napako na proces, ki je kršil, tako da prenese signal procesu.

V nekaterih primerih lahko procesi namestijo upravljalnik signalov, ki jim omogoča samostojno obnovitev, sicer pa se uporabi privzeti upravljalnik signalov operacijskega sistema, kar na splošno vodi do nenormalne prekinitve procesa in včasih do izpisa jedra.

  • Napake segmentacije so osnovni razred napak v programih, določenih v številnih jezikih, kot npr C jezik, ki ponuja dostop do pomnilnika na nizki ravni in nekatere varnostne preglede.
  • Predvsem nastanejo zaradi številnih napak v kazalcih, ki se uporabljajo za naslavljanje navideznega pomnilnika, zlasti nedovoljenega dostopa.
  • Druge vrste napak pri dostopu do pomnilnika so a napaka vodila , ki vključuje tudi več vzrokov.
  • Te se pojavijo predvsem zaradi netočnega naslavljanja fizičnega pomnilnika ali napačnega dostopa do pomnilnika.
  • To je nekaj referenc na pomnilnik, ki jih strojna oprema ne more obravnavati, namesto referenc, ki jih postopek ne sme obravnavati.
  • Več programskih jezikov lahko uporablja mehanizme, ustvarjene za izogibanje napakam pri segmentaciji in razvoj varnosti pomnilnika. Na primer, the Rja programski jezik uporablja model, ki temelji na lastništvu, za zagotavljanje varnosti pomnilnika. Še en jezik kot Java in Lisp uporablja zbiranje smeti, ki ignorira številne razrede napak pomnilnika, ki bi lahko povzročili napake pri segmentaciji.

Pregled napake segmentacije

  • Napaka segmentacije se pojavi, ko kateri koli program poskuša dostopati do pomnilniške lokacije, do katere nima dovoljenja, ali poskuša dostopati do pomnilniške lokacije na način, ki ni dovoljen (na primer poskus pisanja na lokacijo samo za branje ali prepisovanje del operacijskega sistema).
  • V računalništvu slov 'segmentacija' ima več uporab. Na način napake segmentacije, beseda, ki se uporablja od leta 1950, definira naslovni prostor programa, samo naslovni prostor programa je berljiv z zaščito pomnilnika, od tega pa samo sklad in segment podatkov za branje in pisanje. programa je zapisljiv. Zato poskus branja zunaj naslovnega prostora programa ali pisanje v del naslovnega prostora, ki je samo za branje, povzroči napako segmentacije.
  • Napaka segmentacije se pojavi, če strojna oprema najde poskus sklicevanja na neobstoječ segment, lokacijo zunaj meja segmenta ali lokacijo v slogu, ki ga dovoljenja, podeljena za segment, ne dovoljujejo v sistemih, ki uporabljajo segmentacijo pomnilnika strojna oprema za zagotavljanje virtualnega pomnilnika.
  • Na splošno napaka neveljavne strani povzroči napako segmentacije v sistemih, ki uporabljajo samo ostranjevanje. Napake strani in napake segmentacije so napake, ki izhajajo iz sistema za upravljanje navideznega pomnilnika. Prav tako se lahko napaka segmentacije pojavi neodvisno od napak strani; nelegitimen dostop do katere koli veljavne strani je napaka segmentacije. Napaka segmentacije se lahko pojavi na sredini strani. Znotraj a prelivanje medpomnilnika ki se nahaja na strani, vendar na primer nezakonito prepisuje pomnilnik.
  • Na začetku je napaka posledica MMU ( enota za upravljanje pomnilnika ) o nedovoljenem dostopu, kot segment vidika zaščite pomnilnika, ali napaka neveljavne strani na ravni strojne opreme. Če težava ni neveljaven logični naslov, temveč neveljaven fizični naslov, se prej pojavi napaka vodila. Torej se ti ne razlikujejo vedno.
  • Ta napaka je najdena in proces, ki je kršil, pošlje signal, ki vklopi obdelovalca procesa za ta signal na ravni operacijskega sistema. Različne vrste operacijskih sistemov imajo različna imena signalov, ki označujejo, da se je pojavila napaka segmentacije.
  • Signal, znan kot SIGSEGV (okrajšava za kršitev segmentacije ) se prenese v proces, ki je kršil operacijske sisteme, podobne Unixu. Postopek kršitve dobi izjemo, tj. STATUS_ACCESS_VIOLATION v sistemu Microsoft Windows.

Vzroki napake segmentacije

Okoliščine, v katerih se pojavi napaka segmentacije in kako se kaže, so specifične za operacijski sistem in strojno opremo. Različna strojna oprema povzroči različne napake zaradi različnih okoliščin in različni operacijski sistemi jih pretvorijo v različne signale, ki se pošljejo procesom.

Prihodnji vzrok je lahko kršitev dostopa do pomnilnika, čeprav je osnovni vzrok nekaj vrst napak programske opreme. Odpravljanje napak pri napaki ali ugotavljanje temeljnega vzroka je lahko enostavno v nekaj primerih, v katerih bo program dosledno vodil do napake segmentacije. Vendar je lahko vrečko težko reproducirati in se v drugih primerih zanaša na dodelitev pomnilnika pri vsakem zagonu.

tostring metoda java

Sledi nekaj tipičnih vzrokov za napako segmentacije:

  • Poskus dostopa do neobstoječega pomnilniškega naslova (zunaj naslovnega prostora procesa)
  • Poskus dostopa do pomnilnika, za katerega program nima pravic (npr strukture jedra znotraj konteksta procesa)
  • Poskus zapisovanja v pomnilnik samo za branje (npr segment kode )
  • Te pa pogosto nastanejo zaradi številnih programskih napak, ki so posledica neveljavnega dostopa do pomnilnika:
  • Poskus izvajanja programa, ki se ne prevede pravilno. (Nekaj ​​prevajalnikov bo povzročilo izvršljivo datoteko ne glede na obstoj napak v času prevajanja.)
  • Prelivanje sklada
  • Presežek medpomnilnika
  • Dodeljevanje ali dereferenciranje sproščenemu kazalcu (a viseči kazalec , ki označuje pomnilnik, ki je bil izbrisan/razdeljen/sproščen)
  • Dodeljevanje ali dereferenciranje na neinicializiran kazalec (a divji kazalec , ki označuje naključen pomnilniški naslov)
  • Odstranjevanje sklicevanja na a ničelni kazalec običajno označuje naslov, ki ni del naslovnega prostora procesa

Napake v segmentaciji se pogosto pojavijo zaradi napak pri uporabi kazalca, zlasti pri C dinamična dodelitev pomnilnika v kodi C. Odstranjevanje sklicevanja na a ničelni kazalec , ki ima za posledico nedefinirano vedenje, bo povzročilo napako segmentacije. To je posledica ničelnega kazalca, ki ne more biti veljaven pomnilniški naslov. The viseči kazalci in divji kazalci označujejo pomnilnik, ki bi lahko obstajal ali pa ne bi obstajal in je lahko zapisljiv ali berljiv ali pa tudi ne, kar lahko povzroči prehodne napake.

Odpravite napako segmentacije v Ubuntuju

Ta napaka lahko kadar koli prizadene naš sistem Ubuntu. Napaka segmentacije je, ko naš sistem poskuša dostopati do katere koli strani pomnilnika, ki ne obstaja. Jedro zavrženo definira, kdaj poskuša del kode izvesti operacijo pisanja in branja na prosti lokaciji ali lokaciji samo za branje. Na splošno segfaults so povezani z datoteko z imenom core in se zgodijo v času nadgradnje.

Med izvajanjem nekaj ukazov v času izpisa jedra lahko naletimo na 'Zaklenjene datoteke ni mogoče odpreti' napaka. Razlog za to je, da sistem poskuša vzeti del bloka, ki ne obstaja. To je zaradi zrušitve binarnih datotek nekaj posebnih programov.

dva proti ena multiplekser

Morda odpravljamo napake ali sledimo nazaj, da bi jo rešili, vendar je rešitev, da popravimo pokvarjene pakete z izvajanjem nekaj korakov, ki so omenjeni kot sledi:

1. Odstranite datoteke zaklepanja, ki so na voljo na različnih lokacijah.

 $ sudo rm -rvf /var/lib/apt/lists/lock /var/cache/apt/archives/lock /var/lib/dpkg/lock and restart our system 

Napaka segmentacije Core Dumped Ubuntu

2. Odstranjevanje predpomnilnika repozitorija.

 $ sudo apt-get clean all 

Napaka segmentacije Core Dumped Ubuntu

3. Nadgradite in posodobite predpomnilnik našega skladišča.

 $ sudo apt-get update 

Napaka segmentacije Core Dumped Ubuntu
 $ sudo apt-get upgrade 

Napaka segmentacije Core Dumped Ubuntu

4. Zdaj nadgradite našo distribucijo, to bo posodobilo naše pakete.

kat timpf teža
 $ sudo apt-get dist-upgrade 

Napaka segmentacije Core Dumped Ubuntu

5. Preiščite pokvarjene pakete in jih na silo odstranite.

 $ sudo dpkg -1 | grep ^..r | apt-get purge 

Odličen način, ki bo vedno deloval, je poleg ukazne vrstice naslednji:

... v javi
  1. V zagonskem načinu zaženite Ubuntu tako, da kliknete Esc ključ po ponovnem zagonu.
  2. izberite ' Napredne možnosti za Ubuntu
    Napaka segmentacije Core Dumped Ubuntu
  3. V načinu za obnovitev zaženite Ubuntu in omenili bomo več možnosti.
  4. Najprej izberite 'Popravi pokvarjene pakete'
    Napaka segmentacije Core Dumped Ubuntu
  5. Nato izberite »Nadaljevanje običajnega zagona«
    Napaka segmentacije Core Dumped Ubuntu

Zdaj imamo dva načina za razrešitev napake segmentacije GUI in CLI. Včasih se lahko tudi zgodi, da ukaz, tj. apt, ne deluje zaradi segfault , zato metoda CLI ne bo implementirana. V tem primeru ne skrbite, ker bo metoda GUI vedno delovala za nas.

Obravnava napake segmentacije

Privzeta naloga za napako vodila ali napako segmentacije je nenormalna prekinitev procesa, ki je naletel na to. Za pomoč pri odpravljanju napak se lahko izdela jedrna datoteka, izvajajo pa se lahko tudi druge naloge, odvisne od platforme. Na primer, številni sistemi Linux, ki uporabljajo grsecurity popravek se lahko prijavi signali SIGSEGV za spremljanje morebitnih poskusov vdora s prekoračitvijo medpomnilnika.

V nekaj sistemih, kot sta Windows in Linux, je mogoče, da program sam upravlja napako segmentacije. Program, ki se izvaja, ne more le upravljati dogodka, ampak lahko izlušči nekaj podrobnosti o njegovem statusu, kot so vrednosti registra procesorja, pridobivanje sledi sklada, vrstica izvorne kode, ko je bil odkrit, pomnilniški naslov, do katerega je bil dostop neveljaven, in ali je bila naloga pisanje ali branje, odvisno od operacijskega sistema in arhitekture.

Vendar pa napaka segmentacije opredeljuje, da ima program napako, ki jo je treba popraviti, prav tako je mogoče takšno napako povzročiti namerno za namene testiranja, odpravljanja napak in tudi za posnemanje platform, v katerih je potreben neposreden dostop do pomnilnika. Sistem bi moral imeti možnost dovoliti izvajanje programa tudi po tem, ko se v slednjem primeru pojavi napaka.

V tej situaciji, ko sistem dopušča, je mogoče upravljati dogodek in izboljšati števec programa procesorja 'skok' na neuspešno navodilo za nadaljevanje izvršitve.

razčlenjevanje niza v int

Primeri segmentacijske napake

Napaka segmentacije Core Dumped Ubuntu

Pisanje v bralni pomnilnik

Pojavi se segmentacijska napaka. Pojavi se, ko program piše v del svojega segmenta kode ali del segmenta podatkov, ki je samo za branje, na nivojih napak kode, ker se te preko operacijskega sistema naložijo v pomnilnik samo za branje.

Dereferenca ničelnega kazalca

V C in drugih C-ju podobnih jezikih se za pomen uporabljajo ničelni kazalci 'kazalec na noben predmet' in kot indikator napake je dereferenciranje v ničelnem kazalcu (pisanje ali branje iz ničelnega kazalca) zelo osnovna programska napaka.

Standard ne pravi, da je ničelni kazalec podoben kazalcu na pomnilniški naslov 0, čeprav bi lahko bilo tako. Skoraj vsi operacijski sistemi preslikajo naslov ničelnega kazalca tako, da njegova uporaba povzroči napako segmentacije.

Tega vedenja ne jamči noben standard C. V C je dereferenciranje ničelnega kazalca nedefinirano vedenje , in skladni izvedbi je dovoljeno domnevati, da kazalec, ki je dereferenciran, ni nič.

Presežek medpomnilnika

Preobremenitev