MMU가없는 프로세서를위한 멀티 태스킹 운영 체제 작성


9

ARM 프로세서 중 일부를위한 취미 운영 체제를 작성하려고했습니다. ARM MPU를 사용하는 인기있는 단일 보드 컴퓨터가 많이 있으므로 간단히 그 중 하나를 구입하고 싶었습니다 (더 많은 공개 문서가있는 컴퓨터 선택). 메모리가 충분한 보드조차도 메모리 관리 장치가있는 MPU가 없다는 사실을 알고 놀랐습니다.

나는 항상 i386 + 프로세서로 작업 해 왔으며 다른 마이크로 칩 PIC를 제외하고는 아무것도 사용하지 않았기 때문에 혼란스러워서 OS와 비교할 때 기능이 제한되지 않는 작동중인 운영 체제를 작성할 수 있는지 확실하지 않습니다. MMU가있는 MPU의 경우.

"대체"또는 "시뮬레이션"MMU에 대한 솔루션은 거의 없으며 몇 가지 질문이 있습니다.

  • 16 비트 및 32 비트 모드의 인텔 프로세서에는 세그먼트 및 세그먼트 선택기를 사용하여 작업별로 다른 메모리 블록을 사용하는 방법이 있습니다. 즉, x86에서 작업 전환을 수행 할 때 세그먼트 레지스터의 내용을 변경하여 메모리 공간을 변경할 수 있습니다. ARM 아키텍처에서 사용할 수있는 메모리 분할에 대한 일반적인 개념이 있습니까?
  • 실행 파일 대신 연결된 개체 파일을로드하면 페이징 구조를 사용하여 메모리를 매핑 한 것과 같은 방식으로 재배치 (수정) 또는 위치 독립적 인 코드를 사용하여 메모리 조각에 작업을 지정할 수 있습니다. 이것이 효과적일까요?
  • ARM 프로세서의 메모리 보호 장치에 대한 내용도 읽었습니다. 이것들이 도움이 될 수 있습니까?

MMU가없는 시스템에서 작업을 관리하는 "일반적인"방법이 있습니까?

답변:


16

실제로 MMU가 필요없는 운영 체제를 설계하는 것은 그리 어렵지 않습니다. 없이 편리하게 수행 할 수있는 몇 가지 편의가 있지만 극복 할 수없는 것은 없습니다.

  • 서로 다른 작업을 다른 주소에로드해야하므로 모든 코드 (커널, 표준 라이브러리 및 기본 런타임 환경의 일부인 다른 코드 제외)는 위치 독립적으로 컴파일해야합니다. 이것은 상대 점프와 레지스터에 저장된 힙 액세스의 기본 주소를 의미합니다. x86-32의 4 개의 일반 레지스터에 익숙하다면 하나의 레지스터를 기본 주소로 사용하는 것이 비용이 많이 드는 것처럼 보일 수 있지만 대부분의 최신 아키텍처에는 더 많은 것이 있으며 8088조차도 세그먼트 레지스터가 정확하게 있습니다.
  • 구현할 수 없기 때문에 유닉스 계열 아키텍처를 수정해야 fork합니다. 괜찮습니다. 대부분의 운영 체제에는 없습니다 fork. (당신은 가질 수 있습니다 vfork.)
  • 해당 메모리를 할당하지 않으면 많은 공간을 미리 할당 할 수 없습니다. 즉, 한 번에 하나 이상의 페이지를 할당하여 스택 또는 힙이 늘어나지 않습니다.

MPU가있는 경우 멀티 태스킹 운영 체제에서 평소처럼 작업을 서로 분리 할 수 ​​있습니다. MPU가 없으면 작업이 임의의 코드를 실행하도록 허용하는 경우에만 메모리 분리가 협조적 일 수 있습니다. MPU없이 메모리 분리를 수행하는 한 가지 방법은 가상 시스템에서 확인 된 코드 만 사용하도록 작업을 제한하고 VM 엔진의 일부로 소프트웨어에서 메모리 보호를 구현하는 것입니다.

uClinux 는 MMU없이 프로세서 (ARM Cortex-M 포함)에서 실행되는 Linux 커널 기반 프로젝트입니다. 자사의 멀티 태스킹에 대한 제한은 내가 위에서 설명한 본질적으로 무엇인가.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.