ÍÀÇÂÀÍÈÅ
sbrk, brk - pacïpeäeëÿeò ïaìÿòü â ceãìeíòe äaííûx
ÑÈÍÒÀÊÑÈÑ
char *sbrk (incr) int incr; int brk (addr) char *addr;
ÎÏÈÑÀÍÈÅ
Sbrk è brk ècïoëüçyþòcÿ äëÿ äèíaìè÷ecêoão èçìeíeíèÿ paçìepa
ceãìeíòa äaííûx òeêyùeão ïpoöecca; cì. exec(3). Èçìeíeíèe
paçìepa äeëaeòcÿ ïyòeì ycòaíoâêè äëÿ òeêyùeão ïpoöecca
ãpaíèöû ceãìeíòa äaííûx, ò.e. aäpeca ïepâoé ÿ÷eéêè ïaìÿòè,
íaxoäÿùeécÿ ça êoíöoì ceãìeíòa äaííûx ïpoöecca. Paçìep
ceãìeíòa yâeëè÷èâaeòcÿ, ecëè ãpaíèöa âoçpacòaeò.
Sbrk äoáaâëÿeò incr áaéòoâ ê çía÷eíèþ ãpaíèöû ceãìeíòa è cooòâeòcòâyþùèì oápaçoì èçìeíÿeò âûäeëeííoe ceãìeíòy ìecòo. Incr ìoæeò áûòü oòpèöaòeëeí, ÷òo yìeíüøaeò çía÷eíèe ãpaíèöû è paçìep ceãìeíòa.
B cëy÷ae áoëüøoé ìoäeëè ïaìÿòè äëÿ 286 ïpoöeccopa, ecëè incr áoëüøe ÷ècëa áaéòoâ, ocòaâøèxcÿ äo êoíöa ceãìeíòa, sbrk aâòoìaòè÷ecêè paçìeùaeò òpeáyeìûe áaéòû â íoâoì ceãìeíòe äaííûx. Teì caìûì ãapaíòèpyeòcÿ ïpèíaäëeæíocòü çaïpoøeííûx áaéòoâ oäíoìy ceãìeíòy. Ecëè incr oòpèöaòeëeí è eão aácoëþòíoe çía÷eíèe paâío äëèíe òeêyùeão ceãìeíòa äaííûx, ceãìeíò aâòoìaòè÷ecêè ocâoáoæäaeòcÿ. Ecëè incr oòpèöaòeëeí è eão aácoëþòíoe çía÷eíèe áoëüøe äëèíû òeêyùeão ceãìeíòa, ceãìeíò ocâoáoæäaeòcÿ è äoïoëíèòeëüíûe áaéòû yäaëÿþòcÿ èç ïpeäûäyùeão ceãìeíòa äaííûx. Ïpeäûäyùèì ÿâëÿeòcÿ ceãìeíò, coäepæaùèé äaííûe, âûäeëeííûe ïocëeäíèì âûçoâoì sbrk, íe oòíocÿùèìcÿ ê äaííoìy ceãìeíòy.
Sbrk aâapèéío çaâepøaeòcÿ è paçìep ceãìeíòa íe èçìeíÿeòcÿ, ecëè âûïoëíÿeòcÿ xoòÿ áû oäío èç cëeäyþùèx ycëoâèé:
Ïoïûòêa ocâoáoäèòü ïaìÿòè áoëüøe, ÷eì ee áûëo y ïpoöecca.
Ïoïûòêa ycòaíoâèòü ãpaíèöy ceãìeíòa ìeíüøe ïepâoía÷aëüíoé. Ïepâoía÷aëüíaÿ ãpaíèöa ýòo ãpaíèöa â ìoìeíò còapòa ïpoöecca ïëþc äëèía paçäeëÿeìûx äaííûx, êoòopûe áûëè âûäeëeíû ïocëe ýòoão.
Brk ycòaíaâëèâaeò ãpaíèöy ceãìeíòa paâíoé çía÷eíèþ addr è cooòâeòcòâyþùèì oápaçoì èçìeíÿeò âûäeëeííoe ceãìeíòy ìecòo. Brk çaâepøaeòcÿ c oøèáêoé, ecëè yêaçaííûé aäpec çaäaeò íecyùecòâyþùèé ceãìeíò èëè ïpeâûøaeò äoïycòèìûé cècòeìoé ïpeäeë.
BOÇÂPAÙAEÌOE ÇÍA×EÍÈE
B cëy÷ae ycïeøíoão çaâepøeíèÿ sbrk âoçâpaùaeò yêaçaòeëü ía
ía÷aëo âûäeëeííoão ìecòa, a brk âoçâpaùaeò 0. Èía÷e
âoçâpaùaeòcÿ çía÷eíèe -1 è â errno çaíocèòcÿ êoä oøèáêè. B
cëy÷ae áoëüøoé ìoäeëè ïaìÿòè sbrk coçäaeò íoâûé ceãìeíò
äaííûx è âoçâpaùaeò eão còapòoâûé aäpec.
ÑÌ. ÒÀÊÆÅ
exec(3)
ÇAÌE×AÍÈß
B cëy÷ae áoëüøoé ìoäeëè ïaìÿòè äëÿ 286 ïpoöeccopa âûçoâ
"sbrk(0)" íe oáÿçaòeëüío âoçâpaùaeò còapòoâûé aäpec
cëeäyþùeão âûçoâa sbrk. B ÷acòíocòè, òaê áyäeò, ecëè
cëeäyþùèé âûçoâ coçäaeò íoâûé ceãìeíò äaííûx. Boçâpaùaeìoe
âûçoâoì "sbrk(0)" çía÷eíèe cëeäyeò ècïoëüçoâaòü äëÿ
oïpeäeëíèÿ ècxoäíoé ãpaíèöû ceãìeíòa äaííûx.