2011-08-28 4 views
6

MMU 지원없이 메모리를 어떻게 보호 할 수 있는지 알고 싶습니다. 나는 그것을 시험해 보았으나 가치있는 논문이나 연구를 보지 못했다. 그리고이를 처리하는 사람은 소프트 오류로 인한 메모리 손상이 아닌 초기화되지 않은 포인터와 같은 버그를 처리합니다. 즉, 하드웨어 일시적인 오류로 인해 메모리 위치에 쓰는 명령이 손상됩니다.MMU없이 메모리 보호

메모리 보호 기능이없는 독점적 인 manycore 플랫폼에서 작업하고 있기 때문에이 사실을 알고 싶습니다. 이제 내 질문은 소프트웨어를 사용하여 메모리를 보호 할 수 있으며 특히 소프트 오류로 인한 야생 쓰기 (프로그래머가 실수하는 것과 반대)에 사용할 수 있습니다. 이것에 대한 도움은 정말 감사하겠습니다.

+0

너는 무엇을해야합니까? –

+0

디버깅에는 필요하지 않지만 런타임에 손상된 메모리에 야생 쓰기를하지 않아야합니다. 기본적으로 나는 안전하고 신뢰할 수있는 시스템을 원합니다. – MetallicPriest

답변

5

런타임 메모리 보호를 찾고있는 경우에만 정상적인 옵션은 하드웨어 지원입니다. 하드웨어가 손상 될 수 있기 전에 나쁜 메모리 액세스에 개입하는 유일한 방법입니다. 모든 소프트웨어 솔루션은 보호하려고하는 바로 그 메모리 오류에 취약 할 수 있습니다.

소프트웨어를 사용하면 검증/탐지 체계를 구현할 수 있습니다. 현재 실행중인 프로그램이 액세스 할 수 없어야하는 메모리 부분을 주기적으로 검사하여 변경된 부분을 확인할 수 있습니다 (아마도이 ​​영역을 CRC로 처리하여 확인할 수 있습니다). 물론 불량 프로그램이 체크섬이있는 영역을 손상 시키거나 검사 프로그램의 코드가있는 곳을 손상 시키면 모든 베팅이 해제됩니다.

이 소프트웨어 검사 솔루션조차도 영구 런타임 보호보다 디버깅 유틸리티에 가깝습니다. MMU가없는 장치는 여분의주기가 없기 때문에 장치의 메모리를 지속적으로 검사 할 수있는 소형 임베디드 장치 일 가능성이 높습니다.

일반적으로 MMU가없는 장치는 커널이 없거나 다른 프로그램이 하나만 실행되도록 설계되어 있으므로 보호 할 내용이 없습니다. 여러 프로그램을 실행하고 보호가 필요하다고 느끼는 경우 원하는 기능을 지원하는 고급 하드웨어가 필요합니다.

+1

메모리 보호 기능을 하드웨어로 구현할 수 있다면 아마도 소프트웨어로 구현 될 수 있습니다. –

+1

@David : 물론, 하드웨어를 에뮬레이션합니다. 그 시점에서 그것은 단지 가상 머신이 될 것입니다. 그런 다음 실제 하드웨어의 속도가 재생됩니다. 아마도이 사람은 자신의 VM을 구현하는 데 관심이 없습니다. 왜냐하면 그것은 일종의 미친 짓일 것이기 때문입니다. – SoapBox

+1

나는 이것 모두에 동의합니다. 하드웨어가 유일한 방법이라고 말하면서 문제가 생겼습니다. 아마도 하드웨어 만이 유일하고 현실적인 방법이라고 말할 수 있습니다. 그게 다야! –

2

소프트웨어가 메모리 보호를 구현하려면 컴파일러와 관련 라이브러리의 지원이 필요합니다. 나는이 플랫폼에서만 하나의 컴파일러가 있기를 기대하며, 따라서 판매자에게 연락해야한다. 나는 긍정적 인 반응에 대해 많은 희망을 품지 않을 것이다. 그들이 그러한 도구를 가지고 있다고하더라도, 나는 소프트웨어 메모리 보호의 성능이 받아 들여지지 않을 것으로 기대한다.

+0

어떤 종류의 지원. 내 말은, 메커니즘은 무엇일까? – MetallicPriest

+3

컴파일러는 일반적으로 메모리에 액세스 할 때마다 간단한 읽기 또는 쓰기 명령어를 작성합니다. 그러나 당신은 당신이 찾고있는 런타임 보호를 수행하는 라이브러리 함수에 대한 호출로 대체되도록 모든 지시를 필요로 할 것입니다. –

+0

... 그리고 만약 당신이 그 극단으로 갈 예정이라면, 당신은 프로그램을 예를 들어, 파이썬 또는 루아와 그것을 함께 할 수 있습니다. 당신은 더 나은 성능과 비슷한 안정성을 얻을 것입니다. –

0

실행할 응용 프로그램 플랫폼에 따라 다릅니다. 소프트웨어 오류로부터 보호 할 수있는 Type-Safe Language (예 : ATS)라는 기술이 있습니다. 그리고 그러한 언어는 좋은 성능을 가질 수 있습니다 (예를 들어, 다시 ATS).

1

MMU 적은 시스템이 여러 임베디드 솔루션에 존재합니다.

메모리는 커널 코드로 관리됩니다. 전체 메모리 (힙)는 다양한 크기의 힙 목록으로 나뉩니다 (힙 목록은 1024 바이트까지 4 바이트, 8 바이트, 16 바이트 등이 될 수 있음). 각 힙 블록에 헤더가 첨부되어 있는지 여부를 알려줍니다 특정 힙 블록이 취해 지거나 그렇지 않습니다. 따라서 새로운 힙 블록을 할당해야하는 경우 힙 목록을 탐색하고 힙 블록을 볼 수 있으며 요청한 응용 프로그램에 할당 할 수 있습니다. 그리고 특정 크기의 힙 블록을 해제 할 때도 마찬가지입니다. 해당 블록의 헤더는 해당 블록이 해제되었음을 반영하도록 업데이트됩니다.

이제이 구현은 응용 프로그램이 특정 크기의 힙 블록을 요청했으며 힙 목록의 크기가 가득 찬 경우를 처리해야합니다. 이 경우 다음 힙 목록 크기에서 블록을 분할하거나 더 작은 크기의 힙 블록을 결합하여 요청 된 크기의 힙 목록에 추가하십시오.

구현이 훨씬 더 간단합니다.