From a4a06a81a087c2466bfc8de02a919d16784b8598 Mon Sep 17 00:00:00 2001 From: pathoswithin Date: Sat, 13 May 2017 06:41:42 +0000 Subject: [PATCH] no need for manual heap initialization (68.11) git-svn-id: svn://kolibrios.org@6893 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/trunk/core/heap.inc | 10 ++-------- kernel/trunk/docs/sysfuncr.txt | 21 +++++---------------- kernel/trunk/docs/sysfuncs.txt | 24 ++++++------------------ 3 files changed, 13 insertions(+), 42 deletions(-) diff --git a/kernel/trunk/core/heap.inc b/kernel/trunk/core/heap.inc index 48fc3de3b0..422911edff 100644 --- a/kernel/trunk/core/heap.inc +++ b/kernel/trunk/core/heap.inc @@ -595,19 +595,13 @@ endp align 4 proc user_alloc stdcall, alloc_size:dword - - push ebx - push esi - push edi - - mov ebx, [current_process] + push ebx esi edi + call init_heap lea ecx, [ebx+PROC.heap_lock] call mutex_lock - mov ecx, [alloc_size] add ecx, (4095+PAGE_SIZE) and ecx, not 4095 - mov esi, dword [ebx+PROC.heap_base] ; heap_base mov edi, dword [ebx+PROC.heap_top] ; heap_top .scan: diff --git a/kernel/trunk/docs/sysfuncr.txt b/kernel/trunk/docs/sysfuncr.txt index 3e96ae4a69..0a739776da 100644 --- a/kernel/trunk/docs/sysfuncr.txt +++ b/kernel/trunk/docs/sysfuncr.txt @@ -2577,8 +2577,6 @@ dword-значение цвета 0x00RRGGBB * 3 = RAW * 4 и выше зарезервировано * +8: более детально смотрите файл clipboard_container_rus.txt - * Функция должна использоваться совместно с 68.11. Приложение должно - предварительно проинициализировать локальную кучу вызовом 68.11. ---------------------- Константы для регистров: ---------------------- eax - SF_CLIPBOARD (54) @@ -2991,10 +2989,8 @@ IPC применяется для посылок сообщений от одн * eax = 1 - недостаточно памяти Замечания: * Есть другой способ выделения/освобождения динамической памяти - - подфункции 11, 12, 13 функции 68. - * Функция не может использоваться совместно с 68.11, 68.12, 68.13. - Вызов функции будет игнорироваться, если приложение создаст - локальную кучу вызовом 68.11. + подфункции 12, 13 и 20 функции 68, но после их использования будет + создана куча процесса и вызов функции 64 будет игнорироваться. ---------------------- Константы для регистров: ---------------------- eax - SF_MEMORY_RESIZE (64) @@ -3296,7 +3292,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); eax - SF_SYS_MISC (68) ebx - SSF_WRITE_MSR (4) ====================================================================== -===== Функция 68, подфункция 11 - инициализировать кучу процесса. ==== += Функция 68, подфункция 11 - вручную инициализировать кучу процесса = ====================================================================== Параметры: * eax = 68 - номер функции @@ -3306,10 +3302,9 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * иначе размер созданной кучи Замечания: * Вызов функции инициализирует кучу, из которой впоследствии можно - выделять и освобождать блоки памяти подфункциями 12 и 13. + выделять и освобождать блоки памяти подфункциями 12, 13 и 20. + * Если куча уже создана, функция вернёт размер существующей кучи. Размер кучи равен размеру всей свободной памяти приложения. - * При повторном вызове функции тем же процессом функция вернёт - размер существующей кучи. * После создания кучи вызовы функции 64 игнорируются. ---------------------- Константы для регистров: ---------------------- @@ -3325,8 +3320,6 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); Возвращаемое значение: * eax = указатель на выделенный блок Замечания: - * Предварительно следует инициализировать кучу процесса вызовом - подфункции 11. * Функция выделяет целое число страниц (4 Кб) так, что фактический размер выделенного блока больше или равен запрошенному. @@ -3454,8 +3447,6 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); Возвращаемое значение: * eax = указатель на перераспределённый блок, 0 при ошибке Замечания: - * Предварительно следует инициализировать кучу процесса вызовом - подфункции 11. * Функция выделяет целое число страниц (4 Кб) так, что фактический размер выделенного блока больше или равен запрошенному. * Если edx=0, то вызов функции эквивалентен выделению памяти @@ -3519,8 +3510,6 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * E_NOMEM = 30 * E_PARAM = 33 Замечания: - * Предварительно следует инициализировать кучу процесса вызовом - подфункции 11. * Если создаётся новая область, то флаги доступа устанавливают максимальные права доступа для остальных процессов. Попытка открытия другим потоком с неразрешёнными правами провалится diff --git a/kernel/trunk/docs/sysfuncs.txt b/kernel/trunk/docs/sysfuncs.txt index 7917f4f959..67d44a300b 100644 --- a/kernel/trunk/docs/sysfuncs.txt +++ b/kernel/trunk/docs/sysfuncs.txt @@ -2548,9 +2548,6 @@ Returned value: * eax = if successful - pointer to a memory with data * eax = 1 - error * eax = -1 - main list area not found -Remarks: - * The function must be used in conjunction with 68.11. The - application must pre-initialize the local heap by calling 68.11. ---------------------- Constants for registers: ---------------------- eax - SF_CLIPBOARD (54) @@ -2958,10 +2955,8 @@ Returned value: * eax = 1 - not enough memory Remarks: * There is another way to dynamically allocate/free memory - - subfunctions 11, 12, 13 of function 68. - * The function cannot be used together with 68.11, 68.12, 68.13. - The function call will be ignored after creation of process heap - with function 68.11. + subfunctions 12, 13 and 20 of function 68, but after creation + of the process heap 64 function call will be ignored. ---------------------- Constants for registers: ---------------------- eax - SF_MEMORY_RESIZE (64) @@ -3263,7 +3258,7 @@ Remarks: eax - SF_SYS_MISC (68) ebx - SSF_WRITE_MSR (4) ====================================================================== -======= Function 68, subfunction 11 - initialize process heap. ======= +=== Function 68, subfunction 11 - manually initialize process heap === ====================================================================== Parameters: * eax = 68 - function number @@ -3272,11 +3267,10 @@ Returned value: * eax = 0 - failed * otherwise size of created heap Remarks: - * The function call initializes heap, from which one can in future - allocate and free memory blocks with subfunctions 12 and 13. + * The function call initializes heap for subfunctions 12, 13 and 20. + * If the process heap is already created, this function will return + the size of the existing heap. Heap size is equal to total amount of free application memory. - * The second function call from the same process results in - returning the size of the existing heap. * After creation of the heap calls to function 64 will be ignored. ---------------------- Constants for registers: ---------------------- @@ -3292,8 +3286,6 @@ Parameters: Returned value: * eax = pointer to the allocated block Remarks: - * Before this call one must initialize process heap by call to - subfunction 11. * The function allocates an integer number of pages (4 Kb) in such way that the real size of allocated block is more than or equal to requested size. @@ -3421,8 +3413,6 @@ Parameters: Returned value: * eax = pointer to the reallocated block, 0 = error Remarks: - * Before this call one must initialize process heap by call to - subfunction 11. * The function allocates an integer number of pages (4 Kb) in such way that the real size of allocated block is more than or equal to requested size. @@ -3485,8 +3475,6 @@ Error codes: * E_NOMEM = 30 * E_PARAM = 33 Remarks: - * Before this call one must initialize process heap by call to - subfunction 11. * If a new area is created, access flags set maximal rights for other processes. An attempt from other process to open with denied rights will fail with error code E_ACCESS.