컴퓨터공학과 학부생이라면 운영체제는 필수로 수강해야 하는 수업입니다. 이론을 빠삭하게 공부하는 것도 좋지만, 실제로 운영체제가 어떻게 돌아가는지 만져보면서 공부하는 게 중요하다고 생각해요.
OS 개발 환경을 구축하라고 하면 어디서부터 시작해야 할지 막막하실 텐데요. 그런 분들을 위해 구름IDE로 실습용 운영체제 개발 환경을 구축해 보려고 합니다. 아주 간단해서 놀라실 거예요.
구름IDE를 사용하면 좋은 점
원래는 다음과 같은 단계를 거쳐 OS 개발 환경을 구축해야 했습니다.
- 리눅스 환경 설치
- 환경 변수 설정
- 컴파일러, NASM, QEMU와 같은 패키지 설치
- IDE 설치 등
시작부터 진이 빠지죠? 구름IDE를 사용하면 환경 구축에 대한 부담을 덜 수 있습니다. 구름IDE는 리눅스 환경(우분투)을 제공하고 있기 때문에 패키지 설치만 하면 개발 환경을 구성할 수 있어요.
내 로컬 사양을 신경 쓸 필요가 없다는 것도 장점이에요. 구름IDE에서 빌드하고 실행하는 모든 작업들은 서버 자원으로 돌아가기 때문이죠. 깔끔한 로컬 환경을 유지할 수 있습니다. 웹 기반 클라우드 개발 환경이라 어디에서든 개발 환경을 불러오거나 공유할 수 있어 장소에 구애 받지 않고 작업할 수 있어요.
이제 본격적으로 OS 개발 환경을 만들어 볼게요. 참고로 제가 소개할 운영체제 개발 환경은 ‘64비트 멀티코어 OS 원리와 구조’(한승훈 저)의 MINT64입니다.
MINT64 OS 환경 구축
- 구름IDE 로그인 후 ‘새 컨테이너’ 선택
- C/C++ 소프트웨어 스택 선택
- 운영체제 개발 환경을 위한 패키지 설치
apt update && apt install -y \\
gcc-multilib \\
g++-multilib \\
binutils \\
bison \\
flex \\
libc6-dev \\
libtool \\
make \\
patchutils \\
libgmp-dev \\
libmpfr-dev \\
libmpc-dev \\
nasm \\
qemu-kvm
끝입니다. 정말 간단하죠?
이제 간단한 부트로더를 작성해 보면서 잘 돌아가는지 확인해 볼게요. 부트로더를 작성하기 위해 ‘64비트 멀티코어 OS 원리와 구조’ 4장 내용을 참고해 세 파일을 적어보겠습니다.
00.BootLodaer/BootLoader.asm
[ORG 0x00]
[BITS 16]
SECTION .text
jmp 0x07C0:START
START:
mov ax, 0x07C0
mov ds, ax
mov ax, 0xB800
mov es, ax
mov si, 0
.SCREENCLEARLOOP:
mov byte [ es: si ], 0
mov byte [ es: si + 1 ], 0x06
add si, 2
cmp si, 80 * 25 * 2
jl .SCREENCLEARLOOP
mov si, 0
mov di, 0
.MESSAGELOOP:
mov cl, byte [ si + MESSAGE1 ]
cmp cl, 0
je .MESSAGEEND
mov byte [ es: di ], cl
add si, 1
add di, 2
jmp .MESSAGELOOP
.MESSAGEEND:
jmp $
MESSAGE1:
db "Hello World!", 0
times 510 - ( $ - $$ ) db 0x00
db 0x55
db 0xAA
00.BootLoader/makefile
all: BootLoader.bin
BootLoader.bin: BootLoader.asm
nasm -o BootLoader.bin BootLoader.asm
clean:
rm -f BootLoader.bin
makefile
all: BootLoader Disk.img
BootLoader:
@echo
@echo ========== Build Boot Loader ==========
@echo
make -C 00.BootLoader
@echo
@echo ========== Build Complete =============
@echo
Disk.img: 00.BootLoader/BootLoader.bin
@echo
@echo ========== Disk Image Build Start ======
@echo
cp 00.BootLoader/BootLoader.bin Disk.img
@echo
@echo ========== All Build Complete ==========
@echo
clean:
make -C 00.BootLoader clean
rm -f Disk.img
아래의 명령어를 터미널에 입력하면 반가운 부트로더 화면이 나타나게 됩니다.
# run
cd /workspace/[CONTAINER_NAME]
make
qemu-system-x86_64 -L . -m 64 -drive file=Disk.img,format=raw -localtime -M pc -curses
# stop
ESC-2
q
TIP!💡
구름IDE에는 split 기능이 있습니다. 오른쪽 화면에는 터미널 창(왼쪽 상단 위 메뉴바의 창 → 새 터미널 창), 왼쪽 화면에는 코드 창을 배치하면 보다 편안하게 작업하실 수 있어요.
F1을 누르면 파일을 검색해 찾을 수 있고, Alt + H의 검색 기능으로 함수와 변수를 찾을 수 있습니다. 빌드 과정과 실행을 구름IDE 명령어 탭으로 저장해두고 쓰시면 더욱 좋아요.
# build
cd volumes
make
make clean
# run
cd volumes
qemu-system-x86_64 -L . -m 64 -drive file=Disk.img,format=raw -localtime -M pc -curses
xv6 OS 환경 구축
교육 목적으로 만든 OS인 pintos와 xv6도 구름IDE에 올려서 확인할 수 있어요. xv6를 예로 들어볼까요?
- 구름IDE 로그인 후 ‘새 컨테이너’ 선택
- 템플릿 탭 → Git → Anonymous → Repository URL에 https://github.com/mit-pdos/xv6-public.git 입력
- C/C++ 소프트웨어 스택 선택
- 운영체제 개발 환경을 위한 패키지 설치
apt update && apt install -y qemu
xv6를 구동시키기 위해 하단의 명령어를 터미널에 입력하면 xv6 화면을 보실 수 있습니다.
# run
cd /workspace/xv6-public
make qemu-nox
# stop
CTRL-A + X
구름IDE로 실습용 운영체제 개발 환경 구축하는 법 어렵지 않으시죠?
구름IDE에서는 파이썬부터 시작해서 Node.js, Spring, Tensorflow 등 여러 환경을 쉽게 구축할 수 있습니다. 여러분만의 개발 환경을 구축하시는데 이 글이 조금이라도 도움이 되었기를 바랍니다.🙂
Text Teo Edit Sunny Design Lil
OS 개발 환경 구축
어렵지 않아요