2016-10-21 2 views
0

ARM Cortex M3/M4 프로세서 용 MPU를 갖춘 멀티 태스킹 시스템을 구현해야합니다.ARM Cortex CPU에 대한 메모리 보호 전략은 어떻게해야합니까?

해당 시스템에는 Privileged 모드의 자원과 Unrivilege 모드의 사용자 응용 프로그램을 관리하는 Kernel이 있습니다. 나머지 부분과 시스템 리소스에서 User Application을 분리하려고합니다.

따라서 새 작업으로 전환하면 사용자 응용 프로그램의 스택 및 전역 메모리 영역이 해제됩니다. ARM Cortex MPU 레지스터를 사용하여 쉽게 수행 할 수 있습니다.

그러나 문제는 컨텍스트 스위칭이 발생할 때 커널의 일부 전역 변수를 사용해야한다는 것입니다.

예를 들어 컨텍스트 전환 중에 PendSV Handler에서 다음 TCB를 가져 오는 함수를 호출 중이지만 작업 풀이 사용자 응용 프로그램 영역 밖에 있으며 사용자 응용 프로그램으로부터 보호됩니다.

그래서 균형이 있어야합니다. 맞습니까? 메모리 보호를위한 안전하고 효율적인 전략은 무엇입니까?

수확 기능이 호출 될 때 컨텍스트 전환 전에 권한 모드가 발생할 수 있지만 좋은 해결책은 아닙니다.

그 문제에 대한 일반적인 전략은 무엇입니까?

+1

컨텍스트 전환을 초래할 수있는 모든 운영 체제 기능은 컨텍스트 전환을 완료하기 위해 "반환"한 후에 만 ​​권한이없는 모드로 되돌아 가야합니다. 이것이 내가 컨텍스트 스위치를 처리 할 때 사용했던 커널의 모습입니다. 권한 모드에서 보호되는 메모리 영역은 필요에 따라 컨텍스트 전환의 일부로 변경할 수 있습니다. – rcgldr

답변

2

아마도 기존 오픈 소스 구현을 살펴보고 거기에서 어떤 디자인 결정이 내려 졌는지 확인할 수 있습니다. 예를 들어 FreeRTOS는 Cortex-M MPU를 지원합니다. here; 정확한 질문에 직접 답하지 않을 수도 있으며 소스 코드를 검사해야 완전한 세부 정보를 얻을 수 있습니다.

아마도 데이터 메모리를 사용자, 커널 및 공유의 세 영역으로 나눌 수 있습니다.