[운영체제] Memory Management Strategies

in #operating7 years ago (edited)

메모리는 현대 컴퓨터 시스템의 구동에 있어서 매우 중요하다.

메모리는 Large Array of bytes로 이루어져 있고, 각각은 주소를 가지고 있다.

CPU는 Program Counter를 참조하는 메모리로부터 명령들을 가지고 온다.

그리고 이러한 명령들은 추가적인 로딩이나 특정한 메모리 어드레스의 저장을 불러일으킨다.

전형적인 Instruction-Execution cycle에서 예를들어 처음에 메모리로부터 instruction을 가지고 온다.

instruction은 해독되고 메모리로부터 가져온 피연산자를 발생시킨다.

Instruction이 피연산자로 실행되고나서 결과는 다시 메모리에 저장될 것이다.

메모리유닛은 메모리 주소의 흐름만을 볼 것이다 ;

(어떻게 생겨났는 지, 무엇을 위한 것인지 전혀 모른다.)

그에 맞추어, 우리는 프로그램이 어떻게 메모리 주소를 생성했는지 무시해도 된다.

우리는 단지 실행되는 프로그램에 의해 메모리 생성과정의 순서만 관심이 있다.



기본 하드웨어



메인 메모리와 레지스터는 프로세서 내에 생성 되어있고

CPU가 직접 접근할 수 있도록 일반적인 목적의 저장소이다.

메모리 주소를 argument로 가져가는 기계명령어가 있지만 디스크 주소를 차지하지는 않는다.

그러므로 실행에서 어떤 명령어이든, 명령어에 의해 사용되는 데이터가 어떤 것이든,

이러한 직접-접근 저장소 기기중 하나여야 한다.

만약 데이터가 메모리안에 없으면 CPU가 그것을 구동하기 이전에 옮겨져야만 한다.

CPU안에 있는 Register는 일반적으로 한 Cycle의 CPU clock안에 접근이 가능하다.

대부분의 CPU는 instruction을 해독하고 register contents 위에서

한 clock tick당 한개 혹은 여러개의 구동률로 단순한 구동을 한다.

메모리 버스 위에서 전송을 통해 접근하는 메인 메모리가 같지는 않다.

메모리 접근을 완료하는 것은 많은 CPU clock Cycle이 요구된다.

몇몇 케이스에서, 프로세스는 stall해야하고 왜냐하면 실행되고 있는 명령을

완수할 데이터가 부족하기 때문이다.

이러한 상황은 메모리접근의 빈도 때문에 용납될 수 없다.

조치법은 CPU와 메인메모리 사이에 빠른 메모리를 추가하는것이다.

전형적으로, 빠른 메모리를 위한 CPU chip같은 것 들

각 프로세스는 분리된 메모리 공간을 가져야 한다.

프로세스별로 메모리 공간을 나누고 프로세스들을 다른 것들로 부터 지키는것이 다중 프로세스의 기초다.

우리는 두개의 레지스터를 이용해 보호를 제공할 수 있다. (base and a limit .)

Base register는 가장 작은 physical memory address이고,

Limit register는 범위의 Size를 의미한다.

Capture.PNG