스터디 복습을 하려는데 도무지 알수가 없네요

김기오 2008.03.04 17:04 조회 수 : 4608 추천:45

주석을 자세하게 써주셔서 잘 이해될줄 알았는데
역시 같이 보지 않고 혼자 보니까 전혀 이해가 안되네요..
담부턴 도망가지 않겠습니다..

head.S를 보면
물리 메모리 16MB를
가상 메모리 0xFFFF 8300 0000 0000 에 맵핑하고
또 동시에 가상 메모리 0xFFFF 828C 8000 0000 에 맵핑하는데요
3/1일 스터디한 부분을 보니까 나머지 물리 메모리를 맵핑하는것 같습니다.

제가 잘 이해가 안되는 부분이

            /*
             * address 0번 부터, bss 끝까지의 Data를 opt_xenheap_megabytes만큼 이동시킨
             * 영역의 address에 이동시킨다.
             */
            move_memory(e, 0, __pa(&_end) - xen_phys_start);

이 코드가 어떤 메모리 데이터를 opt_xenheap_megabyte 만큼
옮기는 것인가요?
그리고 왜 이 크기만큼 옮기고, 왜 옮겨야 하는 건가요?


그리고 아래 코드가 계속 이어지는데
이 코드들이 L3 페이지 테이블을 설정하는 것 같습니다.
아래 코드들이 결국 물리 메모리 전체를
가상 메모리 0xFFFF 8300 0000 0000 ~ 0xFFFF 83FF FFFF FFFF 로 맵핑하는 것 같은데
맞나요?


            /* Walk initial pagetables, relocating page directory entries. */
            pl4e = __va(__pa(idle_pg_table));
            //#define L4_PAGETABLE_ENTRIES    (1<<PAGETABLE_ORDER) = 512
            for ( i = 0 ; i < L4_PAGETABLE_ENTRIES; i++, pl4e++ )
            {
                if ( !(l4e_get_flags(*pl4e) & _PAGE_PRESENT) )
                    continue;

                // #define l4e_get_intpte(x)          ((x).l4)
                // #define l4e_from_intpte(intpte)    ((l4_pgentry_t) { (intpte_t)(intpte) })
                *pl4e = l4e_from_intpte(l4e_get_intpte(*pl4e) +
                                        xen_phys_start);
                pl3e = l4e_to_l3e(*pl4e);
                // #define L3_PAGETABLE_ENTRIES    (1<<PAGETABLE_ORDER) = 512
                for ( j = 0; j < L3_PAGETABLE_ENTRIES; j++, pl3e++ )
                {
                    /* Not present or already relocated? */
                    // 이미 map_pages_to_xen에서 16M 이상 영역 일부에 대해서는
                    // 페이지 테이블을 만들어 놓았다
                    // 때문에 그영역에 대해서는 SKIP
                    if ( !(l3e_get_flags(*pl3e) & _PAGE_PRESENT) ||
                         (l3e_get_pfn(*pl3e) > 0x1000) )
                        continue;
                    *pl3e = l3e_from_intpte(l3e_get_intpte(*pl3e) +
                                            xen_phys_start);
                }
            }

            /* The only data mappings to be relocated are in the Xen area. */
            pl2e = __va(__pa(l2_xenmap)); // PML4의 261번 엔트에 해당
            // #define L2_PAGETABLE_ENTRIES    (1<<PAGETABLE_ORDER) = 512
            for ( i = 0; i < L2_PAGETABLE_ENTRIES; i++, pl2e++ )
            {
                if ( !(l2e_get_flags(*pl2e) & _PAGE_PRESENT) )
                    continue;
                *pl2e = l2e_from_intpte(l2e_get_intpte(*pl2e) +
                                        xen_phys_start);
            }
번호 제목 글쓴이 날짜 조회 수
공지 [공지] 하이퍼바이져 스터디 관련 Q&A 게시판 입니다. woos 2016.04.09 237
75 세미나 문의 [3] 정성욱 2008.05.30 4509
74 방금 Import 했습니다. [3] 정성욱 2008.01.21 4491
73 소스를 어떻게 다운받나요? [1] 김기오 2008.01.21 4451
72 오늘 참석이 힘들거 같습니다. [1] 김광태 2008.03.22 4441
71 새로운 멤버들 접근 권한을 올려드렸습니다. 백창우 2008.01.10 4435
70 2월 23일날 분석된 소스 커밋좀 해주세요~ [1] 박세율 2008.02.29 4434
69 오늘 삽질 정성욱 2008.02.26 4426
68 자꾸 무단 결석해서 죄송합니다. [1] 김기오 2008.05.06 4424
67 오늘 참석하기 힘들 것 같습니다 죄송합니다 ㅠ 정찬호 2008.01.26 4422
66 우리도 스프링 노트로 바꿀까요? [9] 백창우 2008.03.24 4410
65 날씨도 무더웠는데 오늘 고생했습니다. [1] 박세율 2008.08.03 4405
64 제가 지지난주부터 자꾸 빠지고 있는데.... 정성욱 2008.03.13 4397
63 make 한글 메뉴얼 주소 이상철 2010.05.08 4391
62 이번주 정성욱 2008.01.26 4385
61 프로젝트 위키의 개인정보 노출 [1] 박세율 2008.05.15 4378
60 너무 오랜만에 인사를 드립니다. [1] 김광태 2008.07.01 4377
59 Hypervisor 세미나는 언제부터 시작인가요? [2] 정찬호 2007.12.12 4361
58 [re] 내일 하는 거 맞지요? [3] 장동일 2008.04.18 4354
57 환절기 건강 조심하세요 ㅠㅠ 정찬호 2008.03.15 4353
56 이번주 스터디 정리 [3] 김기오 2008.02.20 4347
XE Login