64비트 모드까지 부팅시켰는데..! ㅠㅠ

스크린샷_2017-07-20_12-58-15

기분전환 삼아서 하는 운영체제 개발….

이제는 ia32-e 모드를 지나서 645비트로 동작시키도록 작업을 하고 있는데…

도중에 자꾸 덤프 뜬다. 작업 실행 도중에 코드 다 안짜고 멈추게 해서 그런가…ㅠㅠ

저기까지 진행한 작업이 메모리 구조를 페이징 구조로 변환해서 페이지와 세그멘테이션을 제대로 정리해서 메모리 관리가 될 수 있도록 한 기본 구조까지 만든 것이다.

틈ㅁ내서 만드는 거라 어차피 진도도 덜 나가고…ㅠㅠ

내 연구 테마가 메모리 매니지먼트닫 보니깐 여러모로 더 생각해서 짜게 되었다. 안그러면 그냥 단순한 레벨에서 걍 구현만 하고 끝내는 수준이었을 텐데…ㅠㅠ

자작 운영체제는 은근 단순한 구조를 가진다

리눅스, FreeBSD 등등 여러 운영체제의 코드가 공개되어 있다보니 많은 사람들이 여러모로 운영체제 구조를 보고 공부하는 데에는 익숙해졌다고 봐도 될 정도이다. (못하면 할 수 있도록 공부하는 사람들이라고 생각하겠다.)

그러나, 실제로 개발을 진행하다 보면 운영체제 개발은 그렇게 쉬운 개발이 아니게 된다. 리눅스 커널만 보더라도 자료구조가 상당히 복잡하다. 그런데, 그런 구조여야 될 수 있는 수준으로 규모가 커진 운영체제 또한 리눅스이다.

그런 걸 보다가 다른 사람들이 자작으로 만든 운영체제를 보면 은근 단순한 구조를 가지고 있는 것을 보게 된다. 실제로 지금 내가 만들고 있는 운영체제도 메모리 구조는 단순한 매칭 형식으로 지원되어 있다. 1:1 매핑이라던가, 단순 세그멘테이션으로만 이루어진 보호모드에서 걍 1:1 페이징을 구성한다던가….

이렇게 만드는 이유는 간단하다. 디버깅이 편하다. ㅠㅠ 운영체제 개발에 필요한 디버깅은 사람의 머리다. 그러다 보니 어느 정도 제어를 할 수 있는 자료구조를 가지고 운영체제 개발을 하게 된다. 그러다가 좀 더 규모가 커지면서 구조를 업데이트 하는 것이고, 그렇게 계속 튜닝을 하다 보면 어느샌가 어느 정도 이상의 규모를 지지할 수 있는 성능의 운영체제가 되는 것이다.

그렇다고 해서 대충 한다? 그건 아니다. 다들 운영체제의 이론에서 볼 법한 그런 내용들을 기반으로 생각해서 만드는 것이다. 그러므로 모르면 모르는대로 또 문제가 된다. 이거 은근 여러모로 사람 머리를 엄청 써야 하는 거니깐 은근 무시할 수 없는 수준까지 올라간다. 그러니, 단순한 구조라고 해서 무시할 것이 못된다.

p.s. 이런 운영체제 혼자서 설계해서 만들 수 있는 사람들은 널리고 널렸다는 게 문제다.

허접한 운영체제 개발 – 부트로더 제작과 운영체제 이미지 로딩, 보호모드 전환, 그리고 C 코드 실행까지 한방에!

20170529_040409.png

리눅스 환경에서의 개발은 내가 갖고있는 바이오 노트북에서 이루어지는데, 바이오 노트북이 사실 해상도가 무지 낮다. 게다가 11인치짜리 모델이라…ㅠㅠ 게다가 책상 위가 난잡해지는 게 싫어서 평상시엔 켜놓고 나서 원격으로 이용중이다. 뭐, 이 글과는 관련은 없다. 스샷과는 관련이 좀 있다. ㅠㅠ

규링은 운영체제를 가지고 석사 논문을 쓰고 있다. (여럿 쓴 것도 있다.) 그런 녀석이 운영체제 하나 직접 만들어보는 게 어려울까 싶어서 도전해 보려 해도… 어렵다. ㅇㅅㅇ

자료는 뒤지면 여러모로 나온다. 게다가 여기까지의 부트로더 기술과 32비트 보호보드는 인텔의 메뉴얼과 몇몇 정형화된 코드들이 있어서 어렵지 않게 작업할 수 있긴 하다. 근데 그걸 머릿속에서 막 쥐어짜면서 직접 코드로 짜니깐 안쉽다. (게다가 어셈블리어다.)

근데 막상 만들고 나니 실제로 다른곳에서 만든 것과 거의 유사한 코드들이 나온다. 그래서 그나마 조금은 덜 걸렸을지도 모르겠다.

p.s. 왜 사람들이 이 수준이 되면 비슷한 변수명을 가져다가 막 예시로 만드는지 알겠다. 그게 제일 안전하다. 내 코드스타일 식의 변수명을 붙이고 하는 건 좀 있다가의 작업이 되겠다. ㅇㅅㅇ