C ++ 질문에서 OS 개발


9

석사 프로젝트로 간단한 운영 체제를 설계하고 있습니다. x86 아키텍처에서 16 비트 리얼 모드로 실행되도록 설계되었습니다. 이상적으로는이 OS를 C ++로 개발하고 필요한 경우 어셈블리 만 사용하고 싶습니다. 지금까지 어셈블리로 작성된 부트 로더가 있는데 C ++과 asm이 혼합 된 커널을로드합니다. 내 질문은 C ++ 사용과 관련이 있습니다. 현재로서는 컴파일되어 실행할 수 있지만 동적 메모리 할당을 사용하지 않았습니다.

C를 사용하는 경우 메모리 할당을 처리하는 malloc 함수를 작성하는 것이 합리적이지만 C ++에서는 새 키워드가 사용됩니다. 그래서...

메모리를 할당하기 위해이면에서 '새로운'작업은 어떻게되며 어떻게 처리해야합니까?

그리고 추론으로 ...

더 높은 수준의 abstaction을 이용하기 위해 C ++를 사용하는 것이 합리적입니까? 아니면 그것을 사용하는 것이 더 두통일까요? C를 고수해야합니까?

C ++이 좋은 선택이 아니라고 생각되면 근거를 제시하십시오.

답변:


9

new의 실제 할당 해제 키워드 손 operator new에 오히려 비슷한 동작, malloc:이 곳에서 메모리를 가져옵니다. 그러면 컴파일러는 모든 생성자 마술을 수행합니다. 따라서 C ++ 컴파일러는 C ++ 런타임 lib (또는 코드)가의 구현을 제공 할 것으로 예상합니다 operator new.

특정 추상화에 C ++을 사용하는 것이 좋습니다. OS가 자체 롤을해야하는 이유는 없습니다 std::list<>. 예외는 훨씬 더 번거 롭습니다. 그 사이에는 유용한 것에서 쓸모없는 것까지의 그라디언트가 있습니다. std::complex? 완벽하게 작동하지만 왜 필요할까요?


5

C에 비해 C ++의 많은 장점은 런타임 지원과 아무런 관련이 없으며,이 경우 C로 작성된 코드와 C ++로 작성된 코드 사이에는 아무런 차이가 없습니다. 예를 들어 템플릿은 런타임에 아무것도하지 않습니다. 그들은 여분의 타이핑으로 할 수 없었습니다. C ++은 운영 체제를 작성하기에 매우 합리적인 언어로, 비트 트위들 링에 집중할 필요가없는 경우 C보다 높은 수준의 추상화와 결합하여 필요할 때 저수준 액세스를 제공하므로 운영 체제를 작성하는 데 매우 합리적인 언어입니다.

new두 가지 작업을 수행합니다. 어딘가에서 메모리를 가져오고 필요한 생성자를 실행합니다. 메모리를 얻을 때와 다릅니다 malloc.


3

아마도 new표현식에 일반적으로 생성되는 코드에 대한 대략적인 아이디어를 제공하는 것이 합리적 일 것 입니다. 컴파일러에서 생성되지만 함수로 구현하는 경우 다음과 같습니다.

template <class T>
T *new_object() { 
    void *raw_data = ::operator new(sizeof(T));
    return new(raw_data) T;
}

new작동 방식에 관심이 있다면 (거의) 불가피한 후속 조치는 delete작동 방식입니다.

template <class T>
void delete_object(T const *object) { 
    object->~T();
    ::operator delete(object);
}

다른 사람이 이미 지적했듯이 ::operator new::operator delete아주 기본적인 메모리 할당 자이다. 예를 들어, 유닉스 계열 시스템에서는 아마도 많은 양의 메모리 청크를 할당 brk하거나 sbrk할당하기 위해 큰 블록에서 작은 청크를 나눠 줄 것입니다. 자신의 OS에서 여전히 일종의 아날로그를 원할 sbrk것입니다. 본질적으로 모든 메모리에서 "무료"로 시작하고 필요에 따라 메모리 조각을 할당하는 것입니다. 당신이 진짜 모드에서 작업하고 있음을 감안할 때, 그것은 아마있을 것이다 매우 간단한 - 사용할 수있는 메모리의 적은 양의 제공, 실제 디자인은 거의 정교한 알고리즘을 통해 작은 크기를 강조 할 필요가있다.


-4

대부분의 운영 체제는 CI think로 작성됩니다. 반면에 그것은 마스터의 프로젝트이므로 다르고 흥미로운 것을하십시오.


1
대부분의 큰 운영 체제는 처음에 C ++을 사용하기 전에 작성되었습니다. 그것은 선택을 제한했다. :-)
Bo Persson

1
때로는 공감자가 전염성이 있다고 생각합니다.
Kevin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.