OS自作入門 9日目/30日(メモリ管理)
OS自作入門 9日目/30日(メモリ管理)
1.はじめに
9日目では、ソースファイルの整理とメモリ管理を行う
特に躓くところはなし。
2.harib06a
ソースファイルを整理する。
keyboard.c
の作成(bootpack.c
とint.c
の分割)mouse.c
の作成(bootpack.c
とint.c
の分割)bootpack.h
の修正- ソースファイルの整理に伴い
Makefile
を修正
# --- オプション CFLAGS = -c -m32 -march=i486 -fno-pic -nostdlib # --- ファイル名 IMG=haribote.img IPL=ipl.bin HD=asmhead.bin FASM=asmfunc.asm FOB=asmfunc.o BT=bootpack.c BHRB=bootpack.hrb LD=har.ld HSYS=haribote.sys MFONT=makefont.c OFONT=makefont.o FONT=font.c CSPR=orisprintf.c OTBL=dsctbl.o OGRA=graphic.o OINT=int.o OFIFO=fifo.o OKEY=keyboard.o OMOUSE=mouse.o MAKEBHRB=$(BT) $(FOB) $(FONT) $(CSPR) $(OTBL) $(OGRA) $(OINT) $(OFIFO) $(OKEY) $(OMOUSE) #--- フォントの作成 $(OFONT) : $(MFONT) gcc $(MFONT) -o $(OFONT) $(FONT) : $(OFONT) ./$(OFONT) #--- イメージファイルの作成 $(FOB) : $(FASM) nasm -g -f elf $(FASM) -o $(FOB) $(BHRB) : $(LD) $(MAKEBHRB) gcc -march=i486 -m32 -fno-pic -nostdlib -T $(LD) -g $(MAKEBHRB) -o $(BHRB) $(HSYS) : $(HD) $(BHRB) cat $(HD) $(BHRB) > $(HSYS) $(IMG) : $(IPL) $(HSYS) mformat -f 1440 -C -B $(IPL) -i $(IMG) :: mcopy $(HSYS) -i $(IMG) :: # 一般規則 %.bin : %.asm nasm $*.asm -o $*.bin %.o : %.c gcc $*.c $(CFLAGS) -o $*.o # コマンド img : make $(IMG) dump : hexdump -C $(IMG) clean : rm -f *.lst *.bin *.sys *.img *.hrb *.o $(OFONT) $(FONT) $(OSPR)
3.harib06b,c
メモリの容量を確認する。C言語で記述すると、コンパイルした際にコードが最適化され確認できないため、アセンブラで記述する。
asmfunc.asm
へ追記(30日本ではnaskfunc.nas
)bootpack.c
の追記・修正bootpack.h
へ追記
修正内容は下記の通り
No. | 対象ファイル | 修正内容 |
---|---|---|
1 | asmfunc.asm | 関数load_cr0, store_cr0, memtest_sub の実装 |
2 | bootpack.c | unsigned int memtest(unsigned int start, unsigned int end); の追加 |
3 | bootpack.h | 関数load_cr0, store_cr0, memtest_sub の宣言 |
4.harib06d
使用可能なメモリの領域を管理し、使用可能なメモリの総量を確認する。
bootpack.c
の追記・修正
修正内容は下記の通り
No. | 対象ファイル | 修正内容 |
---|---|---|
1 | bootpack.c | memman_init, memman_total, memman_alloc, memman_free の実装 |