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

김기오 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
95 부팅 메모리 맵 그림 [5] 김기오 2008.03.15 4758
94 저는 CaOS-64bit를 준비해보려구요 [4] 김기오 2008.04.23 4732
93 오늘 삽질 [1] 김기오 2008.02.03 4731
92 성욱씨 emacs 문의요 김기오 2008.03.27 4726
91 게시판 생성 [4] 백창우 2007.11.15 4707
90 세종대 음식점 백창우 2008.01.19 4671
89 교재 추천 하나 해도 괜찮을런지요? [9] 동선 2011.03.27 4666
88 이번 주 스터디는 쉬는게 어떨런지요? [8] 최창훈 2008.04.15 4657
87 내일 세미나 있는거죠? ^__^; [1] 김광태 2008.01.18 4654
86 I/O Ring Buffer [3] 박은병 2010.04.27 4651
85 Intel CPU를 사려고 합니다 추천부탁드립니다 [1] 박세율 2008.05.08 4641
84 스프링 노트 주소를 변경하였습니다. [3] 백창우 2008.04.14 4624
» 스터디 복습을 하려는데 도무지 알수가 없네요 [3] 김기오 2008.03.04 4608
82 안녕하세요. ^^ [1] 정성욱 2008.05.06 4576
81 Unix Systems for Modern Architectures 제본했습니다. [1] 김기오 2008.05.13 4554
80 [이번주] 벌금 처리 및 시작 시간 변경 논의 [7] 백창우 2008.04.14 4549
79 [제안]주중에 미리 소스분석하고 commit하기 [1] 장동일 2008.01.18 4533
78 몇가지 참고 자료 입니다 정찬호 2008.06.04 4525
77 노트북 문제. [1] 백창우 2008.07.19 4523
76 창우씨 책읽고 드디어 vi 설정을 할 수 있었습니다. 김기오 2008.03.31 4515
XE Login