mint64os icon indicating copy to clipboard operation
mint64os copied to clipboard

메모리 관리 문제

Open Juha3141 opened this issue 4 years ago • 6 comments

안녕하세요, 운영체제 개발을 하고 있는 사람인데.. 제 생각에는 메모리를 관리하는 방법에서 manual probing이라는 방법을 mint64os에서는 사용하는 것 같아요(자세한거 https://wiki.osdev.org/Detecting_CPU_Speed 참고하시면 될 것 같아요). 제가 운영체제를 개발할 때에도 그 방법을 사용했는데 그 방법은 메모리가 8GB나 있어도 4GB밖에 인식하지 못하는 (치명적인 문제가)있는 것 같아요. 그래서 저는 E820이라는 방식을 사용하였습니다. 그랬더니 정상적으로 8GB를 사용할 수 있는 데에다가 메모리를 사용 가능한 부분와 사용 불가능한 부분까지 다 자세하게 알려줘서 "제 생각에는" mint64os에 메모리 감지 방식을 Manual probing보다는 바이오스 인터럽트 0x15를 사용해서 메모리를 관리하는 방법이 더 안전상(osdev 위키에 따르면 컴퓨터를 손상시킬 수 있다는것 때문에) 좋을 것 같아요. 거기에다가 메모리를 일일이 체크하는건 시간도 오래 걸리지만 이 방법은 바이오스 인터럽트 한번이면 모두 읽을 수 있기 때문에 이 방법이 더 효율적이기도 한 것 같아요. (저도 물론 운영체제를 배우고 있는 사람이라서 잘 모르지만 아마도 이럴 것 같다..라고 추측해본 것 뿐입니다)

Juha3141 avatar Feb 08 '21 05:02 Juha3141

안녕하세요, @Juha3141 님 ^^

좋은 의견 감사합니다. Linux와 같은 Major 운영체제들도 E820을 사용해서 초반 메모리 맵을 구성하고 있기에, TODO에 올려놓고 반영하겠습니다.

감사합니다. ^^

kkamagui avatar Feb 09 '21 03:02 kkamagui

E820 서비스 제가 MINT64OS에 구현해둔게 있습니다. 01.Kenrel32/Source/EntryPoint.s 처음 시작줄에 E820을 구현해 놨습니다. memory map entry 갯수는 0x20000 에 저장되고 entry 시작 주소는 0x20004입니다. 관련 함수도 memory map으로 사용하도록 바꿔놨고요. 02.Kernel64/Source/Utility.h, 02.Kernel64/Source/Utility.c

그리고 memorymap을 CH15에서 볼 수 있도록 함수도 하나 만들었습니다. 02.Kernel64/Source/ConsoleShell.c 파일을 보시면 printMemoryMap이라는 함수가 있습니다. 이걸로 free memory와 reserved memory 볼 수 있도록 해놓았습니다.

책 2권 다 정말 재밌게 보고 있습니다. 수고하세요.

ybjeon01 avatar Jun 07 '21 07:06 ybjeon01

@ybjeon01 님, 안녕하세요! E820 구현체 감사합니다. 제가 틈이 나는대로 확인해보겠습니다.

ps) 책 즐겁게 보고 계신다니 다행입니다 ^^)/~

kkamagui avatar Jun 09 '21 03:06 kkamagui

E820 서비스 제가 MINT64OS에 구현해둔게 있습니다. 01.Kenrel32/Source/EntryPoint.s 처음 시작줄에 E820을 구현해 놨습니다. memory map entry 갯수는 0x20000 에 저장되고 entry 시작 주소는 0x20004입니다. 관련 함수도 memory map으로 사용하도록 바꿔놨고요. 02.Kernel64/Source/Utility.h, 02.Kernel64/Source/Utility.c

그리고 memorymap을 CH15에서 볼 수 있도록 함수도 하나 만들었습니다. 02.Kernel64/Source/ConsoleShell.c 파일을 보시면 printMemoryMap이라는 함수가 있습니다. 이걸로 free memory와 reserved memory 볼 수 있도록 해놓았습니다.

책 2권 다서 정말 재밌게 보고 있습니다. 수고하세요.

혹시(초보자라서 잘 모르는데)CH15가 뭔가요..?

그리고 E820 서비스 너무 멋지네요!

Juha3141 avatar Jun 12 '21 17:06 Juha3141

@Juha3141 님, 안녕하세요.

까마귀님이 운영체제 원리를 이해하고자 하는 사람들을 위해 책을 쓰셨고 MINT64OS는 그 책에 소개되는 운영체제입니다. 따라서 chapter 1부터 chapter 57까지 MINT64OS를 만드는 과정을 하나하나 설명하셨고요. Ch15는 단순히 Chapter 15를 뜻하는 겁니다. 저도 책보고 공부하는 사람으로써 제 Github 계정에 MINT64OS repository를 만들었습니다. 그 안에는 chapter별로 디렉토리가 있고 Ch15 디렉토리에 memory map 관련 함수를 만들어기 때문에 "Ch15에서 memory map 관련 함수를 볼 수 있다" 한겁니다.

MINT64OS 책을 보시면 Chapter 15에 처음으로 메모리 크기를 검사하는 방법에 나옵니다. 그래서 그에 맞게 제 repository안 CH15 directory에 memory map 관련 함수를 만들었습니다.

ybjeon01 avatar Jun 13 '21 15:06 ybjeon01

아 챕터라는 뜻이었군요! 저는 또 무슨 운영체제 용어인줄 알고 열심히 찾아봤거든요.. ㅋㅋ

Juha3141 avatar Jun 13 '21 15:06 Juha3141