Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

메모리 관리 문제 #4

Open
Juha3141 opened this issue Feb 8, 2021 · 6 comments
Open

메모리 관리 문제 #4

Juha3141 opened this issue Feb 8, 2021 · 6 comments

Comments

@Juha3141
Copy link

Juha3141 commented Feb 8, 2021

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

@kkamagui
Copy link
Owner

kkamagui commented Feb 9, 2021

안녕하세요, @Juha3141 님 ^^

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

감사합니다. ^^

@ybjeon01
Copy link

ybjeon01 commented Jun 7, 2021

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권 다 정말 재밌게 보고 있습니다. 수고하세요.

@kkamagui
Copy link
Owner

kkamagui commented Jun 9, 2021

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

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

@Juha3141
Copy link
Author

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 서비스 너무 멋지네요!

@ybjeon01
Copy link

ybjeon01 commented Jun 13, 2021

@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 관련 함수를 만들었습니다.

@Juha3141
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants