2014년 6월 24일 화요일

OS

Chapter 8 (Memory Management Strategies)



컴퓨터는 실제로 사용할 수 있는 Memory보다 사용자에게 더 많은 공간을 제공한다.
memory에 load될 수 있는 Data의 양은  한정되어 있는데 사용자는 여러 프로그램을
사용한다.
따라서 memory의 Data는 적절하게 load되고 또는 쫒겨나기도 한다, (swap in, swap out) Disk로 부터 Data를 읽어들여 memory에 load시키는 것은 overhead가 상당히 커서 한번 load된 Data는 최대한 많이 쓰이게 하여야 한다. 즉 Hit rate를 높여야한다.

이번 장에서는 Memory를 관리하는 전략에 대해서 공부를 할 것이다.


1. Virtual address


컴퓨터는 사용자에게 많은 공간을 제공하기 위해 Virtual address를 사용한다.
(예를 들어 우리가 코딩을 할 때 pointer로 출력하는 값은 Virtual address이다.)



virtual address는 주소 변환 과정을 거쳐 Physical address로 바뀐다.

*여기서 중요한 것은 Address Translation 과정은 매우 빠르게 되어야 한다.
그래서 Hardware의 도움을 받는다. Address Translation을 돕는 Hardware를
Memory management unit 줄여서 MMU라고 한다.                                                         


2. Memory의 교체 전략

  • Contiguous Memory Allocation : 연속적 할당 (현재 쓰이진 않는다.)
  • Paging
  • Segmentation
*Memory의 교체 전략은 크게 3가지가 있다.(이 방법들은 뒤에서 설명)
간단하게 말하면 Virtual address에서 Physical address로 바꿀 시 Table과 TLB등 Hardware를 이용한다.

3. Memory Protection



현재는 좀더 복잡한 방법을 사용하지만 보통 Base register, Limit register
2개를 이용하여 Memory 접근을 할 때 마다 체크한다.                          

                 

4. Address binding


Program이 수행 되려면 memory에 load되어야 하는데 load되는 것을 Address binding이라 한다.(memory의 어떤 주소로 program을 load할 것인가?)

그럼 Address binding은 언제 되는가? 
  • Compile time : 만약 Compile대 주소가 고정된다면 memory에서 해당 process가 밀려                      나면 Recompile을 해야 하는 문제가 발생한다.
  • Load time : Compile과 비슷한 문제점이 발생한다.
  • Execution time : 현재 OS는 Execution time때 주소를 고정시킨다.


5. Dynamic loading, Dynamic linking

 - Dynamic loading : routine is not loaded until it is called 
                              필요 할 경우 memory에 load시킨다. memory space을 보다 효과적으                                 로 이용할 수 있으며 많은 양의 코드를 다뤄야 할 경우에도 효과 적이                                 다. OS의 특별한 도움도 필요가 없다. 대시에 Library에서 지원을 해야                                 한다.
 - Dynamic linking :  Linking을 run time까지 미룬다. 이유는 library같은 경우는 용량이 큰데
                             모든 program에 넣으면 memory space에 상당히 부담이 많이간다.
                             그래서 대처법으로 stub을 사용한다. 
                  
                             Dynamic linking <-> Static library

                             stub이란 Shared library의 주소를 담고 있으며 어떻게 참조 할 것이지에
                             대한 정보가 담겨있다.

                             Dynamic linking의 장점은 효과적인 memory space사용과 library의
                             업데이트시 모든 program은 그대로 최신 library를 사용할 수 있다.

                            각 process들은 자기 영역이 아닌 shared 영역을 접근할 권한을 얻어야                             하므로  Dynamic linking은 OS의 지원이 필요하다. 



*Memory 교체 전략*


    internal fragmentation : 할당의 최소단위 보다 작은 memory hole이 발생하여 memory 
                                      낭비가 발생하는 경우
    external fragmentation : 분산되어 있는 hole들을 합치면 새로운 process보다 큰데 분산                                        되어 있어서 할당을 못하는 경우

  • 1. Contiguous Memory Allocation : 연속적 할당 (현재 쓰이진 않는다.)

    문자 그대로 '연속적'으로 memory에 저장을 하는 것이다.

    memory protection
    process의 시작 주소를 가지고 있는 Relocation registers와
    process의 크기를 저장하는 Limit register를 이용한다.



        process allocation : 연속적으로 memory에 할당을 하면 위와 같이 Hole이 발생한다.
        Hole에 하당을 해야 하는데 First-fit, Best-fit, Worst-fit 이 3가지 방법이 있다.
       
           • First-fit : 처음 나오는 가장 하위 번지에 할당  
            Best-fit : 할당 하고자 하는 Process의 크기와 가장 비슷한 곳에 할당 
           • Worst-fit : 가장 Hole의 사이즈가 큰 곳에 할당

        Contiguous Memory Allocation의 장점은 memory protection이 쉽고 복잡하지 않다.
        단점으로는 internal fragmentation과 external fragmentation이 둘 다 발생한다.

        external fragmentation의 해결법으로는 Compaction이 있다.(작은 hole들을 합치는것)


  • 2.  Paging : Virtual address page단위로 분할하여 관리 (실제 OS에서 사용)

        Virtual address를 page단위로 분할, Physical address를 frame단위로 분할하여
        memory를 관리한다. (page size = frame size)

















댓글 없음:

댓글 쓰기