Salut,<br><br>Asa cum spune si titlul, am o mica problema cu sincronizarea datelor in fisierul de ram (functia w_sync_mapping). Mai exact, la testul 22, test_mapping_write_is_carried_through_to_file, in apelul w_sync_mapping, functia FlushViewOfFile imi iese cu eroare. Mai jos sa gaseste outputul meu:<br>

<br>============================================================================<br>Z:\so\tema3\win&gt;vmsim_test 22<br>[LIB][DEBUG] Page SIZE: 65536<br>[LIB][DEBUG] Init finished.<br>[LIB][DEBUG] Creating new allocation of 10 pages and 4 frames.<br>

[LIB][DEBUG]    VirtualAlloc (reserve) returned 00350000.<br>[LIB][DEBUG]    Virtual memory mapping successful at address: &#39;00350000&#39;.<br>[LIB][DEBUG]    Created &#39;.\swp361.tmp&#39; swap file.<br>[LIB][DEBUG]    Created &#39;.\ram362.tmp&#39; ram file.<br>

[LIB][DEBUG]    Page Table and Frame Table initialization complete.<br>[LIB][DEBUG] Alloc complete.<br>[TESTER][DEBUG] exception address: 004029B0<br>[LIB][DEBUG] Page Fault Handler triggered at address &#39;00352EE5&#39;.<br>

[LIB][DEBUG]    Page 0 starting at 00350000 (Dirty 0, Prot 2, State 2) on allocation starting at 00350000.<br>[LIB][DEBUG]    Page not alloc&#39;ed. Alloc&#39;ing on frame &#39;0&#39;.<br>[LIB][DEBUG]    Alloc&#39;ing on frame 0 with previous page table association 00000000.<br>

[LIB][DEBUG]            Ret Val: 00350000; Page Start: 00350000; 0<br>[LIB][DEBUG]    Page cleaning...<br>[LIB][DEBUG]            Ret Val: 00350000; Page Start: 00350000; 0<br>[LIB][DEBUG]    Page mapped on ram on frame 0.<br>

[LIB][DEBUG] Page Handler FINISHED.<br>[TESTER][DEBUG] exception address: 004029B0<br>[LIB][DEBUG] Page Fault Handler triggered at address &#39;00352EE5&#39;.<br>[LIB][DEBUG]    Page 0 starting at 00350000 (Dirty 0, Prot 0, State 0) on allocation starting at 00350000.<br>

[LIB][DEBUG]    Page in RAM. Changing protection to RW.<br>[LIB][DEBUG]    Old file mapping unmapped. Mapping with new rights on same frame 0...<br>[LIB][DEBUG]            Ret Val: 00350000; Page Start: 00350000; 0<br>[LIB][DEBUG] Page Handler FINISHED.<br>

[TESTER][DEBUG] After write, in memory: 18<br>EroareWSync: Attempt to access invalid address.<br>[TESTER][DEBUG] Found 0; Should&#39;ve been: 18<br>[TESTER][DEBUG] Found 0; Should&#39;ve been: 18<br>[TESTER][DEBUG] Found 0; Should&#39;ve been: 18<br>

[TESTER][DEBUG] Found 0; Should&#39;ve been: 18<br>test_mapping_write_is_carried_through_to_file...............failed  [  0/100]<br>============================================================================<br><br>Dupa cum se observa, in ultima portiune, FlushViewOfFile imi iese cu eroarea Attempt to access invalid address. Daca in apelul w_sync_mapping din functia de test pun 1 (sa imi flush-uiasca __doar prima pagina__), testul trece cu brio. Deci evident e o problema cand acel flush intra peste paginile care sunt mapate in memorie (VirtualAlloc), dupa pagina mapata peste fisier. <br>

<br>Si ca o scurta descriere a ce am facut in cod, initial am mapat (ca in exemplu), granular, fiecare pagina virtuala cu flagurile:<br>VirtualAlloc(  addr, page_size, MEM_RESERVE | MEM_COMMIT, PAGE_NOACCESS);<br><br>si apoi, la maparea fisierului ram, realizez VirtualFree, Creez un FileMapping cu flagurile:<br>

CreateFileMapping(  file_handle,    NULL,   (DWORD) PAGE_READWRITE,  0, 0, NULL);<br><br>si mapez fisierul:<br>MapViewOfFileEx(  mHandle,  desired_access,    0,    file_page_no*page_size,   page_size, address);<br><br>Am pus flagurile mai sus pentru ca probabil e o problema la alocare sau mapare.<br>

<br>Thanks for your help!<br><br>Sarbatori fericite,<br>Cosmin<br>