메모리 保護

위키百科, 우리 모두의 百科事典.

메모리 保護 는 컴퓨터 메모리의 使用을 制御하는 方法이며 모든 運營 體制 에서 重要한 爭點事項 中 하나이다. 運營 體制에서 實行하고 있는 프로세스 가 自身에게 割當되지 않은 領域의 메모리에 接近하는 것을 막는 것이 메모리 保護의 주된 目的이다. 이를 통해 프로세스 內의 버그가 다른 프로세스의 動作에 影響을 미치는 것을 豫防하며 惡性 소프트웨어가 시스템에서 許可되지 않은 接近權限을 갖고 시스템에 影響을 끼치는 것을 막아준다.

驅動 方式 [ 編輯 ]

메모리 保護를 遂行하는 데에는 여러 方法이 있다. 이를테면 다음과 같다:

세그먼트 方式 [ 編輯 ]

세그먼트 方式 은 컴퓨터 메모리를 여러 個의 크기가 다른 작은 조각(以下 세그먼트)으로 나누어 세그먼트를 프로세스에게 割當하고, 다른 세그먼트에 對한 接近은 制限하는 方式을 말한다. x86 아키텍처 는 몇 가지 세그먼트 機能들을 가지고 있다. 이러한 機能들은 이 아키텍처에서 保護된 메모리를 使用하고자 하는 사람들에게 有用하다. [1] x86 아키텍처에서 轉役 敍述者 테이블 地域 敍述者 테이블 은 컴퓨터 메모리의 세그먼트를 參照하는 데에 使用할 수 있다. 또, x86 프로세서에서 메모리 세그먼트에 對한 포인터는 프로세서의 세그먼트 레지스터에 貯藏할 수 있다. 初期에 x86 프로세서는 4 個의 세그먼트 레지스터, 곧 CS, SS, DS, ES를 가졌으며 나중에 FS, GS라는 두 個의 세그먼트 레지스터가 追加되었다. [1]

페이징 [ 編輯 ]

페이징에서 메모리 住所 空間은 同等한 작은 조각으로 나뉜 페이지 들로 이루어진다. 假想 메모리 構造를 使用하여 各 페이지를 物理 메모리의 任意의 位置에 常住하게 만들거나 保護 處理되도록 플래그로 만들 수 있다. 假想 메모리는 線形 假想 메모리 住所 空間 을 가지게 할 수 있고 物理 메모리 住所 空間 위의 블록에 接近하도록 도와줄 수 있다.

特히 x86 아키텍처 와 같은, 페이지 基盤의 수많은 컴퓨터 아키텍처 도 메모리 保護를 위한 페이지를 使用하고 있다.

페이지 테이블 은 假想 메모리를 物理 메모리에 매핑하는 데 使用한다. 一般的으로 프로세스는 이러한 페이지 테이블의 存在 與否를 判斷하지 못한다. 페이지 테이블은 새로운 메모리 割當을 쉽게 하고 새로운 各 페이지는 物理 메모리의 어느 곳으로부터라도 割當될 수 있다.

이러한 設計로 應用 프로그램은 割當되지 않은 페이지에는 接近하지 못한다. 그 까닭은 應用 프로그램이 使用하기로 決定한 任意의 메모리 住所가 割當된 페이지를 가리키거나 페이지 失敗 (PF) 誤謬를 만들 수 있기 때문이다.

反面 페이지 失敗의 境遇 致命的이지 않을 수 있다. 페이지 失敗는 메모리 保護에뿐 아니라 다른 흥미로운 方法으로도 쓰인다. 運營 體制는 페이지 失敗를 가로챌 수 있고 前에 디스크에 스웨핑해 둔 페이지를 불러올 수 있으며 페이지 失敗를 일으킨 應用 프로그램으로 復歸할 수도 있다. 이에 따라 應用 프로그램은 必要하면 메모리 페이지를 受信한다.

스웨핑이라는 構造는 使用하고 있지 않는 메모리 안의 데이터가 디스크 記憶 裝置로 移動하거나 그 데이터를 디스크 記憶裝置에서 가져오게 할 수 있다. 이는 應用 프로그램에게는 보이지 않는 方式이며 全般的인 메모리 容量을 늘려 준다.

保護키 [ 編輯 ]

保護키(protection key) 構造는 物理 메모리를 특정한 크기 (이를테면 2KB)의 블록으로 나누며 各各 保護키라는 連結된 數字값을 가지고 있다. 各 프로세스도 이와 連結된 保護키 값을 가지고 있다. 메모리 接近 次元에서 하드웨어는 現在의 프로세스의 保護키가 接近되는 메모리 블록과 連結된 값과 一致하는지를 檢査한다. 그렇지 않을 境遇 例外 誤謬가 일어난다. 이러한 構造는 시스템/360 아키텍처에 使用되었다.

시뮬레이트되는 세그먼트 方式 [ 編輯 ]

시뮬레이션 은 監視 프로그램을 利用하여 一部 컴퓨터의 機械語를 解釋하는 것을 말한다. 이러한 시뮬레이터는 세그먼트 方式과 비슷한 構造를 使用하고 實行 前에 實時間으로 各 命令의 길이와 對象 住所의 無結成을 確認함으로써 메모리 保護를 提供할 수 있다. 이러한 시뮬레이터는 對象 住所와 길이를 計算하여 動的 메모리 블록과 같은 스레드 環境과 關聯한 有效한 住所 範圍 目錄과 比較해야 한다. "有效한"의 뜻은 環境에 따른 스레드의 壽命을 통해 바뀔 수 있다. 이는 現在의 實行 모드(storage key냐 supervisor 狀態이냐)에 따라 政敵 블록의 記憶을 바꾸는 것을 許容할 수 있고 許容하지 않을 수도 있다. [ 出處 必要 ]

性能 基盤 番地 指定 [ 編輯 ]

性能 基盤 番地 指定은 메모리 保護를 위한 흥미로운 構造이지만 現代의 컴퓨터에 쓰이지 않는다. 이 構造에서 포인터는 커널을 통해 實行할 수 있는 權限이 있는 命令語 使用을 통해서만 만들 수 있는 保護된 客體로 置換된다.

測定 [ 編輯 ]

保護 水準을 알아 보는 有用한 方法은 얼마나 最小 權限의 原則 을 固守하는지를 測定하는 것이다. [2]

다른 運營 體制의 메모리 保護 [ 編輯 ]

메모리 保護를 使用하지 않는 運營 體制는 거의 없다. CP/M 과 다양한 種類의 MS-DOS 는 이러한 機能이 不足하다. 그 뒤로 初期 버전의 마이크로소프트 윈도우는 도스 위에 메모리 保護를 追加하였다.

이러한 메모리 保護를 使用하는 運營 體制는 이를테면 다음과 같다:

같이 보기 [ 編輯 ]

各州 [ 編輯 ]

  1. http://www.intel.com/design/processor/manuals/253668.pdf
  2. Cook, D.J. Measuring memory protection , accepted for 3rd International Conference on Software Engineering, Atlanta, Georgia, May 1978.

外部 링크 [ 編輯 ]