포팅이 쉽다거나 이식성이 높다는 것이 어떤 의미일까요?

gurugio의 이미지

요즘 CaOS에 들어갈 메모리 관리에 관한 공부를 하고있습니다.

이왕이면 메모리 관리도 다른 시피유로 포팅이 가능하게

만들면 어떨까 생각하고 있습니다.

그래서 OS의 표준이라는 POSIX를 찾아보았는데요

제가 원하는 내용이 들어있는지도 모르겠고 메모리에 관한 말을 별로 없는것 같았습니다.

POSIX를 따른다는게 하드웨어에 민감한

메모리 관리부분에서 어떻게 적용되는 건가요? (제가 질문을 제대로 하는 건지도 잘 모르겠습니다.. oops )

포팅이 쉽게하고 이식성을 높이기 위해서 Hardware Abstraction layer라는

개념을 이용한다던데 메모리 관리 측면에서 보면 제 지식으로는

어떤게 하드웨어에 종속적인지 아닌지 구분하기가 애매합니다.

메모리 관리라는게 결국 메모리 하드웨어를 잘 관리하는 거 아닌가요?

저는 메모리 관리는 공유나 보호, 메모리 멥 파일같은

개념보다는 가장 직접적인 메모리 할당과 해제, 페이지 관리가 중심이 된다고

생각합니다.

메모리 관리에서 이식성을 높이기 위해 어떤 사항을 고려해야할지

조언을 구합니다.

(지식이 짧아서 질문 자체가 말이 안되더라도 이해해주세요.. oops

혹시 게시판 성격에 안맞으면 옮기겠습니다..

프로그래밍 질문은 아닌것 같아서 일단 여기 올립니다. )

hb_kim의 이미지

POSIX 는 시스템의 기본 라이브러리에 대한 인터페이스입니다. POSIX 를 따르면 "시스템 애플리케이션"의 플랫폼간 이식성이 좋아집니다. 따라서 커널의 맨 밑바닥 레이어인 HAL 과는 크게 상관관계가 없다고 봐야죠. HAL 을 잘 설계하면 이기종 하드웨어간 "운영체제"의 이식성이 좋아집니다.

리눅스에서는 HAL 의 개념이 거의 없거나 부실합니다. 거의 모든 하드웨어 플랫폼 변경은 조건부 컴파일로 해결됩니다. 3단계로 된 메모리 어드레싱 모델도 Alpha 로 포팅하는 도중에 만들어졌다고 합니다.

체계적으로 정립된 강력한 HAL 의 모델의 예를 보시고 싶으시면 윈도우즈 커널을 공부해보시면 좋을듯 합니다. 일례로 윈도우즈 커널의 HAL 은 다음과 같은 기능도 커널 컴파일 없이 HAL 레이어만의 변경으로도 가능합니다.
- UMP 와 SMP 사이의 변경
- HAL 레이어에 RTOS 탑재로 윈도우즈 커널 완전 프리엠션, hard-realtime 지원가능

정태영의 이미지

hb_kim wrote:
리눅스에서는 HAL 의 개념이 거의 없거나 부실합니다. 거의 모든 하드웨어 플랫폼 변경은 조건부 컴파일로 해결됩니다. 3단계로 된 메모리 어드레싱 모델도 Alpha 로 포팅하는 도중에 만들어졌다고 합니다.

체계적으로 정립된 강력한 HAL 의 모델의 예를 보시고 싶으시면 윈도우즈 커널을 공부해보시면 좋을듯 합니다. 일례로 윈도우즈 커널의 HAL 은 다음과 같은 기능도 커널 컴파일 없이 HAL 레이어만의 변경으로도 가능합니다.
- UMP 와 SMP 사이의 변경
- HAL 레이어에 RTOS 탑재로 윈도우즈 커널 완전 프리엠션, hard-realtime 지원가능

주제에 벗어난 얘기긴 하지만 :)
관련된 부분에 대해서 개선하기 위한 프로젝트들이 있습니다 :)

http://freedesktop.org/Software/hal
http://freedesktop.org/Software/dbus
http://freedesktop.org/Cairo/Home

이런 식으로 파일시스템도 추상화 시키는 것도 있구요 :D
http://developer.gnome.org/doc/API/2.0/gnome-vfs-2.0/index.html
http://lufs.sourceforge.net/lufs/

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

ganadist의 이미지

정태영 wrote:

주제에 벗어난 얘기긴 하지만 :)
관련된 부분에 대해서 개선하기 위한 프로젝트들이 있습니다 :)

정태영님이 말씀하시는것은 hb_kim님께서 말씀하시는것과 거리가 있어보입니다.

freedesktop의 프로젝트들은 어플리케이션 수준에서 주변기기를 다루는 방법에 대한 추상화를 제공합니다.

hb_kim님은 아키텍쳐에 따른(단순히 주변기기가 아니라) 커널수준의 추상화를 뜻하는거구요..

그런게 리눅스가 그렇게 포터빌리티가 떨어지나요? 이것저것 포팅된 기계는 많은거 같던데;;

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

방준영의 이미지

ganadist wrote:
그런게 리눅스가 그렇게 포터빌리티가 떨어지나요? 이것저것 포팅된 기계는 많은거 같던데;;

AMD64 아키텍쳐에 이식하는데 리눅스는 여섯 달이 걸렸고 NetBSD는 한달 걸렸습니다. 리눅스 커널 개발자는 네명이었고 NetBSD 커널 개발자는 한명이었습니다.
gurugio의 이미지

어떠한 설계가 이식성을 높이는 건지

제 짧은 지식으로는 상상할 수가 없네요.

커널 소스를 몽땅 들여다보기 전에는 짐작하기 힘들것도 같습니다..

지금은 일단 엉성하게나마라도 만들어보고

다시 처음부터 설계를 해보는 식으로 나갈까 합니다.

막막하게 진행하려니까 힘드네요. ?

charsyam의 이미지

기본적인 외부 interface 가 동일하면 내부 부분의 수정만으로

같은 효과를 볼 수 있겠죠. 얼마만큼 효과적인 외부 interface가 정의되는가가

중요하지 않을까요?

=========================
CharSyam ^^ --- 고운 하루
=========================

pyrasis의 이미지

다른건 몰라도 이식성에 대해서는 NetBSD를 따라갈 OS가 없죠

NetBSD 커널을 대략 살펴보시는게 좋겠습니다..

jj의 이미지

방준영 wrote:
리눅스 커널 개발자는 네명이었고 NetBSD 커널 개발자는 한명이었습니다.

혹시 이것때문에??? 하핫... 농담입니다. :)

--
Life is short. damn short...