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

김기오 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 콘솔에서도 ecb가 되네요 [1] 김기오 2008.03.28 5239
74 스프링 노트 계정 [1] 백창우 2008.03.27 5048
73 이번 기회에 저도 emacs로 갈아타야.. [2] 김기오 2008.03.26 5042
72 인텔 CPU 매뉴얼은 다들 받으셨나요? [1] 정찬호 2008.03.25 4774
71 우리도 스프링 노트로 바꿀까요? [9] 백창우 2008.03.24 4410
70 3.2.0을 분석하면서 주석을 달아 놓았는데... 참고가 될까해서 올립니다. [1] 이일렬 2008.03.24 5207
69 오늘 참석이 힘들거 같습니다. [1] 김광태 2008.03.22 4441
68 드디어 Windows에서 Emacs를 사용하여 소스 브라우징 하는 방법에 대해서 정리 했습니다. [4] file 정성욱 2008.03.20 8548
67 Xen 부팅과정 메모리 맵 [4] file 백창우 2008.03.20 5924
66 여기요... [4] file 이일렬 2008.03.17 4943
65 창우씨가 만드신 vimrc 파일 주실 수 있나요? 김기오 2008.03.15 5375
64 부팅 메모리 맵 그림 [5] 김기오 2008.03.15 4758
63 환절기 건강 조심하세요 ㅠㅠ 정찬호 2008.03.15 4353
62 제가 지지난주부터 자꾸 빠지고 있는데.... 정성욱 2008.03.13 4397
61 가상화 기술로 사설 IP에서 여러 웹서버를 운영할 수 있을까요? [3] 김기태 2008.03.13 6522
60 putty로 ssh터널링하기 file 정찬호 2008.03.12 6528
59 e820을 직접 찍어 보면 어떨까요..? [5] 박세율 2008.03.09 4791
58 오늘 참석이 힘들 것 같습니다. [3] 장동일 2008.03.08 4211
57 Tunneling SSH over an HTTP-Proxy Server 이일렬 2008.03.05 8681
» 스터디 복습을 하려는데 도무지 알수가 없네요 [3] 김기오 2008.03.04 4608
XE Login