Кіріспе

Деректерді тиімді көшіруге арналған бағдарламалау әдісі. Жазу кезінде көшірмелеу (COW), кейде жасырын ортақтастыру немесе көлеңкелендіру деп те аталады, компьютерлік бағдарламалауда өзгертілетін ресурстарда (көбінесе жад беттері, сақтау секторлары, файлдар және деректер құрылымдары) "көшірме" немесе "дубликат" операциясын тиімді жүзеге асыру үшін қолданылатын ресурстарды басқару техникасы.

Виртуалды жадыны басқаруда

Жазуға көшіру (Copy-on-write) операциялық жүйелерде, бірнеше процесті іске асыратын компьютерлердің физикалық жадын бөлісуде және `fork` жүйелік шақыруын іске асыруда кеңінен қолданылады. Әдетте, жаңа процесс жадты өзгертпейді және бірден жаңа процесс ретінде іске қосылады, адрестік кеңістікті толығымен алмастырады. `fork` кезінде ескі процестің барлық жадын көшіру және көшірмені дереу жою процессор уақытын мен жадты ысырап етуге әкелер еді. Жазуға көшіруді беттер кестесін пайдалану арқылы тиімді жүзеге асыруға болады: жадтың белгілі бір беттерін тек оқуға рұқсат етіп белгілеу және осы бетке жасалған сілтемелердің санын есептеу қажет. Осы беттерге дерек жазылған кезде, операциялық жүйе ядросы жазу әрекетін тоқтатады және жазуға көшіру деректерімен инициализацияланған жаңа физикалық бетті бөледі. Бірақ егер бетке тек бір сілтеме болса, бөлуді өткізіп жіберуге болады. Содан кейін ядро беттер кестесін жаңа (жазуға рұқсат етілген) бетпен жаңартады, сілтемелер санын азайтады және жазуды орындайды. Жаңа бөлу бір процестің жадындағы өзгерістердің басқа процестерде көрінбеуін қамтамасыз етеді. Жазуға көшіру әдісін физикалық жадтың бір бетін нөлдермен толтыру арқылы жадты тиімді бөлу үшін кеңейтуге болады. Жады бөлінген кезде қайтарылатын барлық беттер нөлдер бетіне сілтеме жасайды және жазу кезінде көшіру ретінде белгіленеді. Осылайша, физикалық жад деректер жазылғанға дейін процеске бөлінбейді, процестерге физикалық жадтан гөрі көбірек виртуалды жадты резервтеуге және виртуалды адрестік кеңістік таусылу қаупімен жадты сирек пайдалануға мүмкіндік береді. Бұл біріктірілген алгоритм сұраныс бойынша беттерді алмастыруға (demand paging) ұқсас.

Бағдарламалық жасақтауда

COW кітапханада, қолданбада және жүйелік кодта да қолданылады.

Компьютерлік сақтау

COW сонымен қатар логикалық томды басқару, Btrfs, ZFS, ReFS және Bcachefs сияқты файлдық жүйелер, сондай-ақ Microsoft SQL Server сияқты деректер базасы серверлері ұсынатын снэпшоттар сияқты механизмдердің негізі ретінде де қолданылуы мүмкін. Әдетте, снэпшоттар тек өзгертілген деректерді сақтайды және бастапқы деректерге жақын орналасқандықтан, олар инкременттік резервтік көшірменің нашар түрі болып табылады және толық резервтік көшірменінің орнын толтыра алмайды.