Subversion Repositories Kolibri OS

Rev

Rev 837 | Rev 841 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 837 Rev 839
Line 3... Line 3...
3
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
3
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
4
;; Distributed under terms of the GNU General Public License    ;;
4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 7... Line 7...
7
 
7
 
Line 8... Line 8...
8
$Revision: 837 $
8
$Revision: 839 $
9
 
9
 
10
 
10
 
Line 87... Line 87...
87
           mov [op+list_fd], 0
87
           mov [op+list_fd], 0
88
           mov [op+list_bk], 0
88
           mov [op+list_bk], 0
89
}
89
}
Line 90... Line 90...
90
 
90
 
91
align 4
91
align 4
Line 92... Line 92...
92
proc init_kernel_heap
92
init_kernel_heap:
93
 
93
 
94
           mov ecx, 64/4
94
           mov ecx, 64/4
95
           mov edi, mem_block_list
95
           mov edi, mem_block_list
Line 100... Line 100...
100
           mov ecx, 512/4
100
           mov ecx, 512/4
101
           mov edi, mem_block_map
101
           mov edi, mem_block_map
102
           not eax
102
           not eax
103
           rep stosd
103
           rep stosd
Line -... Line 104...
-
 
104
 
-
 
105
           stdcall alloc_pages, dword 32
-
 
106
           add eax, OS_BASE
104
 
107
 
105
           mov [mem_block_start], mem_block_map
108
           mov [mem_block_start], mem_block_map
106
           mov [mem_block_end], mem_block_map+512
109
           mov [mem_block_end], mem_block_map+512
Line 107... Line 110...
107
           mov [mem_block_arr], HEAP_BASE
110
           mov [mem_block_arr], eax
108
 
111
 
109
           mov eax, mem_used.fd-MEM_LIST_OFFSET
112
           mov ebx, mem_used.fd-MEM_LIST_OFFSET
-
 
113
           mov [mem_used.fd], ebx
-
 
114
           mov [mem_used.bk], ebx
-
 
115
 
-
 
116
           xor edx, edx
-
 
117
 
-
 
118
           mov [eax+block_next], edx
-
 
119
           mov [eax+block_prev], edx
-
 
120
           mov [eax+list_fd], edx
-
 
121
           mov [eax+list_bk], edx
-
 
122
           mov [eax+block_base], HEAP_BASE
Line 110... Line -...
110
           mov [mem_used.fd], eax
-
 
111
           mov [mem_used.bk], eax
-
 
112
 
-
 
113
           stdcall alloc_pages, dword 32
-
 
114
           mov ecx, 32
-
 
115
           mov edx, eax
-
 
116
           mov edi, HEAP_BASE
-
 
117
.l1:
-
 
118
           stdcall map_page,edi,edx,PG_SW
-
 
119
           add edi, 0x1000
-
 
120
           add edx, 0x1000
-
 
121
           dec ecx
-
 
122
           jnz .l1
-
 
123
 
-
 
124
           mov edi, HEAP_BASE
-
 
125
           mov ebx, HEAP_BASE+MEM_BLOCK_SIZE
-
 
126
           xor eax, eax
-
 
127
           mov [edi+block_next], ebx
-
 
128
           mov [edi+block_prev], eax
123
           mov [eax+block_size], page_tabs-HEAP_BASE
129
           mov [edi+list_fd], eax
-
 
130
           mov [edi+list_bk], eax
-
 
131
           mov [edi+block_base], HEAP_BASE
-
 
132
           mov [edi+block_size], 4096*MEM_BLOCK_SIZE
-
 
133
           mov [edi+block_flags], USED_BLOCK
-
 
134
 
-
 
135
           mov [ebx+block_next], eax
-
 
136
           mov [ebx+block_prev], eax
-
 
137
           mov [ebx+list_fd], eax
-
 
138
           mov [ebx+list_bk], eax
-
 
139
           mov [ebx+block_base], HEAP_BASE+4096*MEM_BLOCK_SIZE
-
 
140
 
-
 
141
           mov ecx, [MEM_AMOUNT]
124
           mov [eax+block_flags], FREE_BLOCK
142
           sub ecx, (HEAP_BASE - OS_BASE + 4096*MEM_BLOCK_SIZE)
-
 
143
           mov [heap_size], ecx
-
 
Line 144... Line 125...
144
           mov [heap_free], ecx
125
 
145
           mov [ebx+block_size], ecx
126
           mov [heap_size], page_tabs-HEAP_BASE
Line 146... Line 127...
146
           mov [ebx+block_flags], FREE_BLOCK
127
           mov [heap_free], page_tabs-HEAP_BASE
147
 
128
 
148
           mov [mem_block_mask], eax
129
           mov [mem_block_mask], edx
149
           mov [mem_block_mask+4],0x80000000
130
           mov [mem_block_mask+4],0x80000000
150
 
131
 
151
           mov [mem_block_list+63*4], ebx
132
           mov [mem_block_list+63*4], eax
152
           mov byte [mem_block_map], 0xFC
-
 
Line 153... Line 133...
153
           and [heap_mutex], 0
133
           mov byte [mem_block_map], 0xFE
154
           mov [heap_blocks], 4095
134
           and [heap_mutex], 0
155
           mov [free_blocks], 4095
135
           mov [heap_blocks], 4096
156
           ret
136
           mov [free_blocks], 4096
Line 327... Line 307...
327
           mov eax, [edi+block_size]
307
           mov eax, [edi+block_size]
328
           cmp eax, [size]
308
           cmp eax, [size]
329
           je .m_eq_size
309
           je .m_eq_size
Line 330... Line 310...
330
 
310
 
331
           call alloc_mem_block
311
           call alloc_mem_block
332
           and eax, eax
312
           test eax, eax
Line 333... Line 313...
333
           jz .error
313
           jz .error
Line 334... Line 314...
334
 
314
 
335
           mov esi, eax           ;esi - splitted block
315
           mov esi, eax           ;esi - splitted block
336
 
316
 
337
           mov [esi+block_next], edi
317
           mov [esi+block_next], edi
338
           mov eax, [edi+block_prev]
318
           mov eax, [edi+block_prev]
339
           mov [esi+block_prev], eax
319
           mov [esi+block_prev], eax
340
           mov [edi+block_prev], esi
320
           mov [edi+block_prev], esi
341
           mov [esi+list_fd], 0
321
           mov [esi+list_fd], 0
342
           mov [esi+list_bk], 0
322
           mov [esi+list_bk], 0
343
           and eax, eax
323
           test eax, eax
344
           jz @f
324
           jz @f
345
           mov [eax+block_next], esi
325
           mov [eax+block_next], esi