|
ncloader
0.1
|
| 이 책의 목적 | |
| 어떻게 만들 수 있을까? | |
| 최초의 프로그램 | |
| Bootloader 의 Stage 1 에서 사용된다. ; ; Floppy diskette 의 첫 번째 섹터 512 bytes 에 기록되는 코드로써 ; BIOS 에 의해 0x7c00 번지에 로딩되어 실행된다. ; FAT12 를 위해 BPB 를 포함하고 있다. ; (BPB: Boot Parameter Block) ; ; | |
| 시스템을 초기화 하고 커널을 로딩한다 | |
| Stage 2 for x86 | |
| 보호모드 메모리 초기화 | |
| 실제 코드로 구현 하면 아래와 같다 | |
| Interrupt Service Routine | |
| PIC 를 초기화 한다 | |
| DMA 콘트롤러를 제어하는 코드를 구현 | |
| 플로피 디스크 드라이버를 구현한다 | |
| 시리얼 접근을 위한 x86 전용 함수 인터페이스를 정의한다 | |
| X86 전용 비디오 메모리 접근을 위한 함수 인터페이스를 정의한다 | |
| Port In/Out 기능을 위한 함수 인터페이스를 정의한다 | |
| ELF 파일 로더를 구현한다 | |
| 파일 시스템 | |
| 다양한 종류의 파일시스템을 지원하기 위한 인터페이스 계층을 정의하고 구현한다. VFS 는 폴더와 파일의 계층 구조를 Binary tree 형태로 표현하고, 유지 관리한다. 다양한 종류의 파일 시스템들은 주어진 sinfo 구조체에 맞추어 함수를 구현한다. VFS 는 On-demand 형태로 tree 를 구축해 나간다. 즉, 실제 특정 폴더에 접근을 할 때, 해당 폴더의 자식 node 를 생성한다. 자식 노드들을 채우는 것은 파일시스템에서 구현한다 | |
| FAT 파일 시스템을 구현한다 | |
| 가상 루트 파일 시스템은 메모리상에 최초로 생성되는 것으로, 파일 시스템 환경을 구축하기 위한 기본 환경 을 구성한다 | |
| NCLoader 는 커널 쓰레드만 지원한다 | |
| Boot loader 가 접근 가능한 영역의 메모리를 관리해하는 컴포넌트이다 | |
| 외부 장치로의 입출력을 위한 공통된 디바이스 인터페이스를 정의한다 | |
| Linux kenrel 에서 가져온 List 관리 함수들의 구현체 | |
| 가장 기본적으로 사용되는 C Library 인터페이스를 정의한다 | |
| C Library 에서 디버깅을 위한 함수를 정의한다 | |
| Ctype | |
| 파일 제어 관련 함수들을 선언/정의 한다 | |
| POSIX 표준 문서 규약에 따라 두 함수를 정의한다 | |
| 표준에서 정의하는 라이브러리 함수들을 구현 | |
| POSIX 기준의 쓰레드 API set 을 정의하고 구현한다 | |
| POSIX 에 준하는 뮤텍스 API set 을 정의한다 | |
| 가변인자를 처리하는 표준 함수들을 정의한다 | |
| 표준 형을 정의한다 | |
| C Library 에서 입출력 함수들을 정의한다 | |
| 표준에서 정의하는 라이브러리 함수들을 구현 | |
| C Library 에서 문자열 처리 함수들을 정의한다 | |
| 시간과 관련된 함수들을 정의한다 | |
| 표준 기호 상수와 형을 선언한다 | |
| Slibc 에서 필요한 platform 의존적인 코드들을 구현한다 | |
| 개발에 필요한 도구들과 사용법 | |
| ELF 포맷을 파싱해서 링크 하고 메모리에 적재해서 실행시킨다. NCKernel 은 ELF 포맷이기 때문에, 이 로더가 커널을 로딩한다 | |
| Various sample codes | |
| 시작하는 사람들을 위해서 | |
| Page allocator 는 Page frame 을 관리한다. Buddy allocator 를 나름대로(독자적으로) 이해해서, 구현 하였다 |