커널은 어떻게 악성 프로그램이 모든 물리적 RAM을 읽지 못하게합니까?


10

가능한 모든 주소에서 메모리를 읽으려고하는 프로그램을 작성하고 "전체"Unix에서 실행하면 모든 실제 RAM에 액세스 할 수 없습니다. 그러나 운영 체제는 어떻게 그렇게하지 못하게합니까?

모든 어셈블리 코드가 모든 것에 액세스 할 수있는 작은 CPU 아키텍처에 더 익숙합니다. 프로그램 (커널)이 어떻게 이러한 악의적 인 작업을 탐지 할 수 있는지 이해하지 못합니다.


2
일반적으로 MMU는 허용 된 영역 외부의 메모리에 액세스 할 수 없도록 관리합니다.
ott--

1
MMU는 어셈블리로 구성됩니다. 따라서 어셈블리 코드는 MMU 구성을 변경하고 다른 메모리 페이지에 액세스 할 수 있습니다.
nowox

루트로 코드를 실행하는 경우에만 해당됩니다.
ott--

2
페이지 테이블과 커널 추상화에 대해 읽어야합니다.
Clarus

@ott : 루트조차도 MMU를 수정할 수 없습니다 (적어도 Linux에서는 아님). 커널 만이합니다.
Basile Starynkevitch 2016 년

답변:


12

나쁜 메모리 액세스를 막는 것은 커널이 아니며 CPU입니다. 커널의 역할은 CPU를 올바르게 구성하는 것입니다.

보다 정확하게는, 나쁜 메모리 액세스를 방지하는 하드웨어 구성 요소가 MMU 입니다. 프로그램이 메모리 어드레스에 액세스 할 때, 어드레스는 MMU의 내용에 기초하여 CPU에 의해 디코딩된다. MMU는 가상 주소에서 물리적 주소로의 변환을 설정합니다. CPU가 특정 가상 주소에서로드 또는 저장을 수행하면 MMU 내용을 기반으로 해당 물리적 ​​주소를 계산합니다. 커널은 각 프로그램이 권한이있는 메모리에만 액세스 할 수 있도록 MMU 구성을 설정합니다. 다른 프로그램의 메모리 및 하드웨어 레지스터는 프로그램의 메모리에 전혀 매핑되지 않습니다. 이러한 물리적 주소에는 해당 프로그램의 MMU 구성에 해당하는 가상 주소가 없습니다.

서로 다른 프로세스 간의 컨텍스트 전환에서 커널은 MMU 구성을 수정하여 새 프로세스에 대한 원하는 변환을 포함합니다.

일부 가상 주소는 전혀 매핑되지 않습니다. 즉, MMU는이 주소를 특수한 "주소 없음"값으로 변환합니다. 프로세서가 매핑되지 않은 주소를 역 참조하면 트랩이 발생합니다. 프로세서는 커널 코드에서 미리 정의 된 위치로 분기합니다. 어떤 함정은 합법적입니다. 예를 들어 가상 주소는 스왑 공간 에있는 페이지에 해당 할 수 있으며 ,이 경우 커널 코드는 스왑에서 페이지 내용을로드 한 다음 메모리 액세스 명령이 다시 실행되는 방식으로 원래 프로그램으로 다시 전환합니다. 다른 트랩은 합법적이지 않습니다.이 경우 프로세스는 기본적으로 프로그램을 즉시 종료 시키는 신호 를 수신 합니다 (프로그램의 신호 처리기로 분기되지 않는 경우 : 메모리 액세스 명령이 완료되지 않은 경우).


"주소는 MMU의 내용에 따라 CPU에 의해 디코딩됩니다" 라는 문장을 비트로 지정할 수 있습니까? 실행중인 프로그램에 주소를 해독하는 실제 코드가 있습니까? 또는 CPU가 주소에 액세스 할 때-MMU에 대한 액세스가 이루어 지므로 MMU가 올바르게 변환 / 처리됩니다 (메모리 또는 캐시에 액세스하여 결과를 반환하거나 커널 프로 시저를 트리거 함)? 따라서 마이크로 컨트롤러 / 조립 관점에서 MMU는 새로운 부분입니다. CPU는 메모리에 직접 연결되지 않고 MMU에 연결되며 가상 메모리 추상화가 수행되는 곳입니다.
xealits

3
@xealits 가상 주소에서 물리적 주소로의 변환은 하드웨어 회로 인 MMU 내에서 수행됩니다. 프로그램이나 커널에는 그렇게하는 코드가 없습니다. 프로그램이 MMU 항목이 "잘못된 주소"라고하는 가상 주소에 액세스하려고 할 때 예외적 인 경우에만 커널이 호출됩니다. 커널은 레지스터와 MMU가 사용하는 RAM의 테이블을 구성하는 작업도 수행합니다.
Gilles 'SO- 악마 그만
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.