/DeodeokOS

64 Bits Multicore OS Project(Mint64 OS)

Primary LanguageC

DeodeokOS

64비트 멀티코어 OS 원리와 구조 서적을 바탕으로 작성된 OS 프로젝트 입니다.

개인 기록용이므로 잦은 변경 및 오류가 있을 수 있습니다!

환경 및 구축

  • Apple M1 Macbook Air
  • Docker(ubuntu 18.04 / amd64)
  • gcc, qemu... 가 x86_64 환경에서 작성된 OS 이므로 M1인 경우 docker의 platform 옵션을 추가하셔야 합니다.
docker build --platform linux/amd64 -t os:1.0 .
docker-compose up -d
docker exec -it os bash
./build.sh && ./qemu.sh

참고사항

  • '64비트 멀티코어 OS 원리와 구조' 서적에서 소개하는 QEMU 환경이 0.10.4 버전이라 최신 QEMU를 사용한다면 OS가 제대로 올라오지 않습니다. 필자는 QEMU 2 버전대를 쓰고 있으며 이를 해결하려면 부트로더의 수정이 필요합니다. Bootloader.asm의 80번 줄 cmp al, 19cmp al, 37로 변경하면 작동이 됩니다.

디버깅

gdb

gdb를 통해 디버깅을 진행한다면 2개의 쉘이 필요합니다.

docker exec -it os bash
./build.sh && ./qemu_debug.sh
gdb
target remote:1234
file 02.Kernel64/Temp/Kernel64.elf

breakpoint 설정 후 디버깅 진행

vscode

먼저 Native Debug extension을 설치 합니다.

vscode 환경에서 디버깅을 진행한다면 다음의 과정을 따릅니다.

  1. .vscode/task.json의 QEMU Build 실행
  2. .vscode/task.json의 QEMU Debug 실행
  3. breakpoint 찍기
  4. F5으로 디버깅 진행

.vscode/launch.json.vscode/task.json 내용을 수정하여 명령어 실행을 커스텀 할 수 있습니다.

변경점

  • 210125: Spinlock 동기화 구현
  • 211220: 대칭 I/O모드로 인터럽트 분산 처리
  • 211116: 멀티코어 구현2(코어 활성화)
  • 211028: 멀티코어 구현1(MP 테이블 구현)
  • 211020: 시리얼 포트 디바이스 드라이버 구현
  • 211017: 파일 시스템 캐시 및 램디스크 구현
  • 211002: 파일 입출력 구현
  • 210927: 디버깅 환경 구성
  • 210902: 간단한 파일 시스템 구현
  • 210830: 하드디스크 드라이버 추가
  • 210824: 동적 메모리 할당 구현
  • 210813: 멀티스레딩 구현
  • 210809: Mutex를 통한 race condition 해결
  • 210807: 멀티 레벨 큐 스케줄러 구현
  • 210802: 라운드 로빈 스케줄러 구현
  • 210725: 간단한 멀티태스킹 구현
  • 210723: 타이머 디바이스 추가
  • 210720: 콘솔 쉘 구현
  • 210719: PIC 컨트롤러를 이용한 인터럽트 구현
  • 210717: 기본 키보드 인터럽트 추가(polling 방식)
  • 210716: 키보드 드라이버 추가
  • 210712: 보호모드에서 IA-32e 모드로 전환
  • 210708: 첫 번째 커널 작성
  • 210706: 리얼모드에서 보호모드로 전환
  • 210701: 부트로더 추가