FreeBSD 핸드북 : FreeBSD의 내부 : PC 메모리 사용
Previous: 흥미로운 구동 방식
Next: DMA: What it Is and How it Works

24.2. PC 메모리 사용

Jörg Wunsch <joerg@FreeBSD.ORG> 저.
16 Apr 1995.

김승영 <nobreak@kr.FreeBSD.org> 역.
1998년 11월 23일

인텔 386 환경에서 FreeBSD의 메모리를 사용을 간략히 설명 합니다.

부트 섹터는 0:0x7c00에 올려진후 바로 0x7c0:0로 재배치 됩니다. (이것은 단지 ljmp를 행하여 %cs 셀렉터(selector)를 조정합니다.)

그리고 첫번째 15 섹터를 0x10000에 적재하고(biosboot Makefile의 segment BOOTSEG) 스텍이 0x1fff0 아래로 작동하도록 설정한후 코드내의 boot2로 점프 합니다. 즉, 부트 코드와 (여분의) 파티션 테이블을 건너 뛰어 %cs 셀렉터를 조정하게 됩니다. --- 아직 16 비트 모드입니다.

boot2는 부트 파일을 찾고 a.out 헤더를 검사합니다. 파일 엔드리 포인트(일반적으로 0xf0100000)를 0x00ffffff로 마스킹하여 그곳에 부트 파일을 적재합니다. 그러므로 통상적인 적재 위치는 1 MB (0x00100000) 입니다. 부트 파일을 적재하는 과정에서 부트 코드는 바이오스(BIOS)를 사용하기 위해 리얼(real) 모드와 프로텍티드(protected) 모드를 전환합니다.

부트 코드 자신은 프로텍티드 모드하에서 세그먼트 셀렉터 %cs, %ds/%es에 0x18, 0x20을 사용합니다. 그리고 리얼 모드로의 전환을 위해 0x28을 사용합니다. 마지막으로 커널이 시작될때 %cs는 0x08를 %ds/%es/%ss는 전체 주소 영역을 확보하는 여분의 디스크립터를 가르키는 0x10을 갖습니다.

커널은 적재된 곳에서 시작됩니다. 다른(상위) 주소에 커널이 위치하였을때 커널은 페이지 테이블과 디렉토리가 적절히 맞추어 질때까지 PIC (Position Independent Code)를 실행하게 되는데 이때 페이징이 가능하게 되고 마지막으로 커널은 커널이 링크된곳에서 시작 합니다.

David Greenman <dg@FreeBSD.ORG> 저.
16 Apr 1995.

김승영 <nobreak@kr.FreeBSD.org> 역.
1998년 11월 22일

물리적 페이지는 proc0 페이지 디렉토리, 페이지 테이블 그리고 upages를 담고있는 커널 BSS를 즉각적으로 따릅니다. 가상 메모리 시스템이 초기화되었을때, 0x1000-0x9ffff와 커널(text+data+bss+proc0 stuff+other misc)이후의 메모리는 일반적인 가상 메모리 페이지가 되며 비사용 페이지(global free page) 목록에 추가됩니다.


FreeBSD 핸드북 : FreeBSD의 내부 : PC 메모리 사용
Previous: 흥미로운 구동 방식
Next: DMA: What it Is and How it Works