본문 바로가기

OS 개발 9챕터 9챕터는 IA-32e 모드로 전환하기 위해서 페이지 테이블들을 설정하는 작업을 했다. 처음에 페이징 공부할 때 진짜 머리가 터지는 줄 알았는데 직접 짜보면서 관계를 이해하고 보니까 좀 봐줄만 하다. 그래도 어렵다. 진짜 페이징 같은 것들을 다중 포인터로 해서 구상하는 사람들은 머리가 얼마나 좋은 건지를 모르겠다. 오류는 make 오류 메시지를 보고서 바로 알 수 있는 오류들이라서 많이 삽질 하지는 않았다. 하나하나 알아가는 맛이 쏠쏠한 것 같다. 더보기
OS 개발 8챕터 8챕터이다. 이번에는 A20 게이트를 이용해서 1MB 이상의 주소에 접근할 수 있도록 하고, IA-32e 모드로 넘어가기 위한 64비트 커널을 올릴 영역을 검사하는 부분을 만들었다. 그렇게 큰 어려움은 없었는데 빌드를 해서 부팅시켜 보면 이상하게 자꾸 글자가 중간에 짤리는 오류가 있었다. 그래서 이것저것 다 찾아보다가 저번에 만들어 놓은 ImageMaker가 오류라는 것을 알았다. 나는 책대로 소스를 잘 짰는데 어디가 오류인가 하고 봤더니 책 오탈자 리스트에서 lPosition = lseek( iTargetFd, 5, SEEK_SET ); 을 lPosition = lseek( iTargetFd, (off_t)5, SEEK_SET ); 라고 써야 한다는 것이다. 그래서 (off_t)5로 바꾸고 다시 컴파일.. 더보기
OS 개발 7챕터 이번에는 C언어로 짠 커널을 직접 로드하여 실행하는 부분을 했다.일단 무사히 잘 끝냈는데, 책에 있는 소스를 직접 손으로 옮겨 적었더니 진짜 오류가 장난 아니게 났다... 진짜 OS 목표 중 하나가 소스는 반드시 복붙 안하고 손으로 치기 였는데 고작 200줄 정도 따라 쳤는데도 오타만 6~7개가 났다.. 뒤에 막 파일시스템 만들고 하면 2000줄 정도 되던데 정말 큰일났다.. 더 웃긴건 오타가 너무 황당하다는 거였다. 오타 종류를 좀 적자면 확장자의 .을 ,로 적은거랑 목적 파일의 .o를 .0으로 적고, $를 안붙인다던가 objcopy 프로그램을 사용해야 되는데 평소 rop할 때의 버릇이 나와서 objdump 프로그램을 사용해서 또 오류 나고 ,를 m으로 적고 이것들 등등 진짜 여러가지 황당한 오류가 너.. 더보기