Jaettu muisti ja sen standardit

Miten kaksi ohjelmaa saadaan käyttämään samaa vectoria tai c-taulukkoa ja miten data saadaan pysymään muistissa ohjelman lopetusten, ehkä uudelleen kääntämisten ja käynnistysten välillä, jotta samaa tiedostoa ei tarvitse lukea sisään montaa kertaa?

Ja miten se tehdään standardilla tavalla, jotta eri tekijöiden ohjelmat voivat lukea toistensa muisteja (tai toistensa luomia, jaettavaksi tarkoitettuja muistialueita) helposti, eli siis tavallaan voivat kommunikoida standardin mukaisella tavalla? Onko tälle olemassa standardia, ehkä jopa ISO-standardia?

Ja miten yhteiset muistialueet saadaan L1 tai L2 cacheen eli nopeampiin muisteihin?
5442
Äänestä

Muut lukivat myös

Vastaukset 5

Vanhimmat

> Miten kaksi ohjelmaa saadaan käyttämään samaa vectoria tai c-taulukkoa ja miten data saadaan pysymään muistissa ohjelman lopetusten, ehkä uudelleen kääntämisten ja käynnistysten välillä, jotta samaa tiedostoa ei tarvitse lukea sisään montaa kertaa?

Tee kolmas ohjelma, joka luo jaetun muistin, käynnistyy bootissa eikä kuole pois.

> Onko tälle olemassa standardia, ehkä jopa ISO-standardia?

Parempaa. POSIX standardi. man shmget; man shmat.

> Ja miten yhteiset muistialueet saadaan L1 tai L2 cacheen eli nopeampiin muisteihin?

Ne varmaan menevät sinne, kun käytät muistialuetta. Ja varmaan pysyvät siellä, jos et aja mitään muita prosesseja ja käytät muistialuetta jatkuvasti (eli: unohda se). Voit sentään estää niiden sivutuksen levylle. man mlock.

Äänestä

"Ja miten yhteiset muistialueet saadaan L1 tai L2 cacheen eli nopeampiin muisteihin?"

Tuohon toiseen saitkin vastausta mutta tätä voisin tarkentaa, että ohjelmoijalla ei ole mahdollisuutta vaikuttaa muuten kuin suunnittelemalla algoritmit niin, että huomioidaan cachen toiminta. Cache toimii niin, että se mikä menee ensimmäiseksi sisään, lähtee ensimmäiseksi ulos. Koodi sitten kannattaa suunnitella niin, että jos vaikka L1 cache olisi 16kt niin käsittelee dataa esimerkiksi 8kt paloissa ettei vahingossa tyhjennä sitä pois sieltä tarpeettomasti. Tekniikka on nimeltään strip mining. Valgrind on sitten kätevä ohjelmisto analysoimaan cachen käyttöä mutta se toimii vain x86 arkkitehturilla.

Tietysti prosessien vaihdot yms. tyhjentää cachen, mutta se tapahtuu suhteellisen harvoin ottaen huomion, että prossu jauhaa miljardeja kelloja sekunnissa.

Äänestä
  • Ulkopuolinen koodi ruiskutetaan sovelluksen varaamaan muistialueeseen siten, että ei ruiskuteta yhteenkään niistä muistialueen kohdista joita sovellus, jota vaklataan, jo käytää.

    Äänestä

  • Ei oo vaikeeta kirjoitti:

    Ulkopuolinen koodi ruiskutetaan sovelluksen varaamaan muistialueeseen siten, että ei ruiskuteta yhteenkään niistä muistialueen kohdista joita sovellus, jota vaklataan, jo käytää.

    Koodin ruiskutuksen jälkeen vaklattava sovellus eikä rosessien eikä palveluittenkaan hallinta tiedä mitään siitä, että siellä pyörii itse asiassa ulkopuoleinen rosessi järjestelmässä, mutta se rosessi tietää kaikki, mitä sillä sovelluksella tehdään ja muillakin, koska se rosessi voi komentoluupista lukea senkin, mitä muutkin rosessit ja palvelut tekevät.

    Äänestä

Voisiko esimerkiksi tehdä tekstieditorin kanssa toimivan erillisen ikkunan, joka piirtää vaikka kaaviota tekstin perusteella ( varsinkin jos "teksti" on jotain formaalia koneen tulkittavaksi tarkoitettua, kuten c :aa tai html:ää ), ja siitä huolimatta, että tekstieditorin tekijä ei ole huomioinut mitään laajennusmahdollisuuksia ja plug-inien sovittamista, niinkö? Entä jos kirjoittaa editorilla raakaa html:ää ja se pitäisi saada näkymään samaan aikaan reaaliajassa firefoxin ikkunassa oikein tulkittuna?

Joissain nettitaistelupeleissä on ongelmana se, että jotkut pelaajat fuskaavat käyttämällä ns. aimbotteja, eli automatisoitua tähtäystä ja laukaisua. Tätä ongelmaa torjumaan on kehitetty punk-buster ohjelma. Perustuvatko aimbotit pelin muistialueen sivusta lukemiseen vaiko "vain" pelin nettiviestinnän kopiointiin ja analysointiin? Aimbotit ja punk buster voivat olla valaiseva esimerkki.

Miten saa lueteltua koko käyttöjärjestelmän laajuisesti mitkä ohjelmat lukevat minkäkin toisen ohjelman muistia ja jaettua muistia? Ehkä hyvinkin lyhyt c ohjelma voi sen tehdä, en tiedä...

Entä jos on fyysisesti viallisia muistipaikkoja (vaikkapa gammasäde tai kosminen säde on vaurioittanut transistoria), niin miten edes oma ohjelma saadaan jättämään sellaisen muistipaikan käyttö väliin? Voiko jossain linux-versiossa tai windowsissa laittaa koko käyttöjärjestelmän välttämään tiettyä muistipaikkaa?

Äänestä

Kommentoi aloitusta


Harrastaja591 kirjoitti:

Miten kaksi ohjelmaa saadaan käyttämään samaa vectoria tai c-taulukkoa ja miten data saadaan pysymään muistissa ohjelman lopetusten, ehkä uudelleen kääntämisten ja käynnistysten välillä, jotta samaa tiedostoa ei tarvitse lukea sisään montaa kertaa?

Ja miten se tehdään standardilla tavalla, jotta eri tekijöiden ohjelmat voivat lukea toistensa muisteja (tai toistensa luomia, jaettavaksi tarkoitettuja muistialueita) helposti, eli siis tavallaan voivat kommunikoida standardin mukaisella tavalla? Onko tälle olemassa standardia, ehkä jopa ISO-standardia?

Ja miten yhteiset muistialueet saadaan L1 tai L2 cacheen eli nopeampiin muisteihin?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu