Дадено е число „n“ и n числа, сортирайте числата с помощта на едновременно сортиране чрез сливане. (Съвет: Опитайте се да използвате системни извиквания shmget, shmat). Част 1: Алгоритъмът (КАК?) Рекурсивно направете два дъщерни процеса, един за лявата половина, един за дясната половина. Ако броят на елементите в масива за даден процес е по-малък от 5, изпълнете сортиране чрез вмъкване. След това родителят на двете деца обединява резултата и се връща обратно към родителя и т.н. Но как да го направите едновременно? Част 2: Логичното (ЗАЩО?) Важната част от решението на този проблем не е алгоритмично, а да обясни концепциите за операционна система и ядро. За да постигнем едновременно сортиране, имаме нужда от начин да накараме два процеса да работят върху един и същ масив едновременно. За да улесни нещата, Linux предоставя много системни извиквания чрез прости крайни точки на API. Две от тях са shmget() (за разпределение на споделена памет) и shmat() (за операции със споделена памет). Създаваме споделено пространство в паметта между дъщерния процес, който разклоняваме. Всеки сегмент е разделен на ляво и дясно дете, което е сортирано, като интересното е, че те работят едновременно! Shmget() изисква от ядрото да разпредели споделена страница и за двата процеса. Защо традиционният fork() не работи? Отговорът се крие в това какво всъщност прави fork(). От документацията „fork() създава нов процес чрез дублиране на извикващия процес“. Дъщерният процес и родителският процес се изпълняват в отделни пространства на паметта. По време на fork() и двете пространства на паметта имат едно и също съдържание. Записите в паметта, промените на файловия дескриптор (fd) и т.н., извършени от един от процесите, не засягат другия. Следователно имаме нужда от споделен сегмент на паметта.