• [ 운영체제 ] 메모리 관리 [1] (Memory Management)

    2021. 3. 19.

    by. KimBangg

     

    1. Base & Limit Register in Memory

     

    - 프로그램은 메모리로 이동하여, 프로세스 안에 배치 되야한다.

    - 이 때, 메인 메모리 안에서 독립된 공간을 User Processes끼리 사용하고, OS접근을 보호하기 위해서 Base & Limit Resigter라는 개념을 도입한다.

     

    Base & Limit 레지스터는 한 프로세스의 주소의 범위를 지정해주는 역할을 한다.

    Base [ Legal Physical Memory Address ] & Limit [ size of the process address Space ]

     

    1-2) Hard ware "Trap" ( Base <= Process < Limit )

    Base & Limit 레지스터를 이용해 유저의 프로세스가 운영체제와 같이 범위를 벗어난 메모리에 접근하려고 한다면, Trap을 발생시킨다.

     

     

    2.주소 할당 ( Address Binding [ Program -> Process ] )

    Program instruction과 data에게 실질적 메모리 주소를 할당하는 것을 의미한다.

     

    2-1) Input Queue

    프로세스는 디스크 안에서 bianry 형태의 실행 파일로 저장이 되어있다.

    프로그램을 실행 시키기 위해서는, 메모리로 옮겨져 프로세스 안에 배치 되어야 하는데, 이 때 Input Queue 에서 대기하게 된다.

     

    2-2) 주소할당 절차

    1) 소스코드가 가진 Symbolic 주소가 컴파일러 또는 어셈블러에 의해 오브젝트 파일 또는 링크 모듈의 형식으로 만들어진다. ( = Relocatable Address )

    : 이 때 주소의 시작은 '0'번지이다.

     

    2) 여러 개의 오브젝트 파일이 Linker에 의해 묶이거나 하나의 'OUT'파일이 된다.

    => 묶어주는 경우, 하나의 오브젝트로 파일로 묶이기 때문에 순서를 파악하여 주소를 재 배치 해주어야한다.

     

    3) Load Module은 Instructuin, 데이터, 사이즈, Relocatable addresss와 같은 정보등이 담겨있고, Loader에 의해 다른 파일들과 묶여 Absolute Address ( 절대적인 주소값)이 결정된다.

     

    4) 해당 메모리에 프로세스 안착.

     

     

    2-3) 주소할당 방법들

    => 아래로 갈수록 최신 방법들.

    [1]Compile Time

    - 컴파일러가 프로그램을 실행하는 동안 Symbolic address를 Absolute address로 전환

    - 만약 메모리 안에 있는 프로세스를 컴파일 타임에 알고 있는다면, Absolute address가 생성 ( Static : 정적 )

     

    [2] Load Time

    - 컴파일러가 Symbolic address[소스코드에서 사용] 를 Relocatable address [ 변환 가능] 로 전환

    - 로더는 변환 가능한 주소를 절대적인 주소로 변경

    - 만약 메모리 안에 있는 프로세스를 컴파 일 타임에 알려지지 않았다면, 컴파일러는 Relocatable Address를 생성.

     

    [3] Execution TIme

    만약 프로세스가 하나의 메모리 공간에서 다른곳으로 이동한 경우, 주소 할당은 실행이 되기 전까지 대기된다.

    Abolute Address는 하드웨어에[MMU Using Base & Limit register ] 의해 생성된다.

     

     

    * Logical vs Physical Address

    1) CPU에 의해 생성되며, 가상 주소라고 불린다.

    2) 실제 물리적 공간 ( =RAM ) 을 의미한다.

    => 논리적 주소와 물리적 주소는 다른 실행 & 로드 Binding을 구사한다.

     

     

    < 교수님 피셜>

     

    [3] Swapping

    일시적으로 메모리를 Banking store로 보내고 (Swap out) 사용하는 시기에 다시 불러오는 것 (Swap in)

     

    Roll in & out

    우선순위 중심의 알고리즘을 통해 높은 순위에 있는 작업을 주로 작동시키고, 낮은 작업을 swap out 시킨다.

     

    단점

    Disk Transfer Time이 오래걸린다.

     

    프로세스가 많아지면 Main memory [ = Physical memory ] 를 초과하게 된다.

    => 이 때 해결 방법으로 , Swapping ( 메인 메모리 -> Banking store 방출) 을 사용한다.

     

    사진 삭제

    사진 설명을 입력하세요.

    [4] 연속할당 ( Contiguous Allocation )

    - 메인 메모리는 주로, 운영체제(low memory) & User Process(High memory)로 나뉜다.

    - 각 프로세스는 여러 공간에 무작위로 배치 되지 않고, 연속적으로 할당 받는다

    사진 삭제

    사진 설명을 입력하세요.

     

    * Hole

    이용 가능한 메모리 중 하나의 블록을 의미.

    다양한 크기의 홀이 메모리에 존재한다.

    운영체제는 빈 공간 (hole)과 할당된 구역에 대한 정보를 가지고 있다.

    사진 삭제

    사진 설명을 입력하세요.

     

    [5] 동적 메모리 할당 [ Dynamic Storage Allocation Problem ]

    실행 중인 프로그램(= Process)가 운영체제에게 메모리의 한 블록[hole]을 요구하는 것을 의미한다..

     

    5-1) 동적 메모리 할당의 유형들

    [1] First Fit

    메모리의 첫 번째 홀을 프로그램에게 할당한다. [ 홀의 크기는 반드시 프로그램보다 크다 ]

     

    [2] Best fit

    프로그램에게 가장 적절한 크기의 홀을 할당한다.

    이를 위헤서 반드시 홀 리스트 전체를 점검하여, 할당하게 된다.

     

    [3] Worst fit

    메모리의 홀 중 가장 큰 홀을 프로그램에게 할당한다.

     

    5-2) 단편화 [ Framentation ]

    [1] 내부 단편화 ( Internal Fragmentation )

    할당된 홀이 프로그램보다 커서 공간이 남는 현상을 의미한다.

    [2] 외부 단편화 ( External Fragmentation )

    요청을 만족 시킬 수 있는 홀이 존재하지 않는 현상을 의미한다. ( 즉, 프로그램보다 작은 크기의 홀만 남았다는 것을 의미 한다 )

     

    [3] 압축 ( Compaction )

    - 외부 단편화 된 모든 홀을 모아서 하나로 합침으로써, 외부 단편화 문제를 해결하는 방법

    - 압축은 홀 자리의 이동이 가능하고, 프로그램이 실행 중인 경우에만 가능

     

    댓글