본문 바로가기

[OS개발] 9일차 - 메모리를 깔끔하게 관리해보자 9일차9일차에서는 메모리를 페이지 단위로 효율적으로 관리하는 방법을 알아본다. # 본 내용으로 들어가기 전에 현재까지 OS가 사용하고 있는 메모리 테이블을 정리해보자. 0x00000000 - 0x000FFFFF 1 MB 부팅용, 부팅 후에는 비어있음 0x00100000 - 0x00267FFF 1440 KB 플로피 디스크 내용 기억 0x00268000 - 0x0026F7FF 30 KB 비어있음 0x0026F800 - 0x0026FFFF 2 KB IDT 0x00270000 - 0x0027FFFF 64 KB GDT 0x00280000 - 0x002FFFFF 512 KB bootpack.hrb 0x00300000 - 0x003FFFFF 1 MB 스택 등 0x00400000 - 비어있음 # 먼저 메모리의 용량을 .. 더보기
[OS개발] 8일차 - 움직여줘 마우스! 8일차7일차에서 마우스가 보내는 데이터를 FIFO에 훌륭히 저장했으므로 드디어 움직이는 처리를 해본다! # 일단 데이터부터 분석해볼까! /* bootpack.c 메인루프 중 일부 */ } else if (fifo8_status(&mousefifo) != 0) { i = fifo8_get(&mousefifo); io_sti(); if (mouse_phase == 0) { /* 마우스의 0xfa를 기다리고 있는 단계 */ if (i == 0xfa) { mouse_phase = 1; } } else if (mouse_phase == 1) { /* 마우스의 1바이트째를 기다리고 있는 단계 */ mouse_dbuf[0] = i; mouse_phase = 2; } else if (mouse_phase == 2) {.. 더보기
[OS개발] 7일차 - 반응해라 마우스! 7일차(점점 글쓰는 텀이 길어지는 듯한...) 7일차에는 인터럽트로 받은 값을 FIFO(First In First Out) 구조체를 만들어 넣고 빼는 방법을 배우고 마우스 제어의 밑밥을 깔았다. # 일단 키보드의 인터럽트에 OS가 반응하도록 6일차에 만들었으므로 이제는 키 코드를 받아오도록 해보자. 지난 시간에 만든 인터럽트 함수를 수정한다. #define PORT_KEYDAT0x0060 void inthandler21(int *esp) { struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO; unsigned char data, s[4]; io_out8(PIC0_OCW2, 0x61);/* IRQ-01 접수 완료를 PIC에 통지 */ data = io_i.. 더보기