Kopier-på-skriv

Den såkalte kopi-på-skriv- strategien ( engelsk uttrykk kan grovt oversettes som "kopi ved skriving") er en datamaskinoptimaliseringsteknikk som tar sikte på å redusere duplisering av systemressurser (vanligvis datastrukturer eller minneområder ) gjennom eliminering av unødvendige kopier.

Operasjonsprinsipp

Under normal drift av et program eller et operativsystem er det mulig at duplisering av en ressurs kan være nødvendig, eller opprettelse av en ny ressurs som har det opprinnelige innholdet (eller mer generelt starttilstanden ) identisk med det opprinnelige innholdet. .

Umiddelbart etter dupliseringen og så lenge ingen av de to ressursene er modifisert, er de faktisk umulige å skille; i løpet av denne tidsperioden er den virkelige eksistensen av to uavhengige kopier ikke strengt nødvendig: systemet kan begrense seg til å simulere dupliseringsoperasjonen, opprettholde eksistensen av en enkelt kopi og administrere gjennom den, på en helt gjennomsiktig måte for forespørsler, alle leseoperasjonene beregnet på en av de to.

Selve dupliseringen av ressursen kan utsettes til eksistensen av to uavhengige ressurser virkelig er nødvendig, dvs. i korrespondanse med en tilstandsendringsoperasjon (vanligvis skriving av et nytt innhold, hvorfra kopi-på-skriv- ) av noen av de fiktive kopiene .

Hovedfordelen med kopi-på-skriv-strategien ligger i det faktum at hvis en duplikatressurs senere frigjøres eller ødelegges uten at verken originalen eller kopien noen gang har blitt endret i mellomtiden, har systemet effektivt unngått unødvendig duplisering, noe som resulterer i tidsbesparelser. Kopier-på-skriv er derfor desto mer fordelaktig jo dyrere dupliseringsoperasjonen er og jo sjeldnere skriveoperasjonene er.

Implementering

Ressursvirtualisering

Implementeringen av en kopi-på-skriv-strategi krever at identifiseringen av de aktuelle ressursene i systemet er uavhengig og uavhengig (i det minste fra brukernes synspunkt) fra deres faktiske fysiske plassering; det vil si at det er nødvendig at disse ressursene virtualiseres .

Det brukere vet og bruker er en virtuell ressursidentifikator , gjennom hvilken de kan be om tilgang til ressursen fra systemet; systemet på sin side assosierer hver identifikator med informasjonen som er nødvendig for å få tilgang til den virkelige fysiske ressursen. Følgende vil konvensjonelt bli indikert:

Virtuell ressursduplisering

I normalsituasjonen er hver fysisk ressurs knyttet til en unik identifikator:

Når systemet mottar forespørselen om å duplisere den virtuelle ressursen IA , genereres en ny virtuell ressurs IB , men ingen ny fysisk ressurs opprettes: den nye identifikatoren er også assosiert med den fysiske ressursen R 1 :

Den fysiske ressursen R 1 er ennå ikke duplisert: fra og med dette øyeblikket blir den den konkrete representasjonen, lik og umulig å skille, av begge virtuelle ressurser, og gjennom den administrerer systemet alle lesetilganger som gjøres gjennom identifikatorene I A og I B. _

For korrekt kopiering-på-skriv-håndtering må systemet holde styr på det faktum at I A og I B egentlig ikke deler den fysiske ressursen R 1 , og at derfor må ethvert forsøk på å skrive tilgang til ressursen gjennom noen av dem bli avlyttet og hensiktsmessig administrert for ikke å påvirke andre. [1]

Skrive en virtuell ressurs

Forutsatt at en skriveoperasjon er nødvendig (for eksempel på den virtuelle ressursen I A ), merker systemet at denne identifikatoren refererer til en fysisk ressurs som deles i et kopier-på-skriv- regime og følgelig:

På dette tidspunktet er systemet i følgende tilstand:

Skriveoperasjonen som opprinnelig ble suspendert kan deretter fortsette, og modifisere tilstanden til R 2 uten å forstyrre den til R 1 , som fortsetter å være tilgjengelig gjennom identifikatoren IB.

Hovedapplikasjoner

Kopier- på -skriv- teknikken brukes ofte av operativsystemer for å administrere minnesider i virtuelt minnemodus : delte sider kan merkes som skrivebeskyttet slik at skrivetilgang blir fanget opp av MMU -en til prosessoren, som gir et unntak og passerer kontroll til en spesifikk kjerneadministrasjonsfunksjon som sørger for fysisk duplisering av den aktuelle siden før skrivingen gjenopptas og utføres.

Kopier-på-skriv kan for eksempel utnyttes når en prosess krever ( gjennom gaffelsystemanropet eller lignende) opprettelse av en ny underordnet prosess , opprinnelig identisk med seg selv, [2] eller for å optimere opprettelsen av store, spesielt når spredt . [3]

Merknader

  1. ^ Tilfellet med reell deling av ressursen er annerledes, der det i stedet er normalt og forventet at enhver endring som gjøres gjennom en identifikator som er knyttet til den, også er synlig gjennom alle de andre.
  2. ^ Fordelen med denne tilnærmingen er spesielt tydelig i systemer der lasting i minnet til et nytt program dekomponeres i de to operasjonene til forkog exec: den underordnede prosessen som stammer fra forktrenger egentlig ikke å kopiere dataene til den opprinnelige prosessen, siden den påfølgende call to execit vil erstatte dem nesten umiddelbart med de i det nye programmet.
  3. ^ Store buffere initialisert til null, slik som de som produseres av funksjonen calloci C , kan simuleres av systemet ved å peke alle de virtuelle minnesidene som er nødvendige for å inneholde den mot en enkelt fysisk side som bare inneholder nullbyte; først senere, hvis og når applikasjonen prøver å skrive til denne bufferen, vil systemet fysisk tildele de strengt nødvendige minnesidene.

Relaterte elementer

Andre prosjekter

Eksterne lenker