非情報系インフラエンジニアの情報系お勉強

OS自作、ネットワーク、セキュリティの備忘録

OS自作入門 9日目/30日(メモリ管理)

OS自作入門 9日目/30日(メモリ管理)

1.はじめに

9日目では、ソースファイルの整理とメモリ管理を行う

特に躓くところはなし。

2.harib06a

ソースファイルを整理する。

  1. keyboard.cの作成(bootpack.cint.cの分割)
  2. mouse.cの作成(bootpack.cint.cの分割)
  3. bootpack.hの修正
  4. ソースファイルの整理に伴い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言語で記述すると、コンパイルした際にコードが最適化され確認できないため、アセンブラで記述する。

  1. asmfunc.asmへ追記(30日本ではnaskfunc.nas
  2. bootpack.cの追記・修正
  3. 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

使用可能なメモリの領域を管理し、使用可能なメモリの総量を確認する。

  1. bootpack.cの追記・修正

修正内容は下記の通り

No. 対象ファイル 修正内容
1 bootpack.c memman_init, memman_total, memman_alloc, memman_freeの実装