프로그래밍[Univ]/운영체제

[OS] Main Memory

Cloud Travel 2012. 5. 27. 22:15

* Main Memory

 - Issue

  > Memory Utilization

  > Memory Speed

  > Virtual Memory ( Memory Size )

 - background

  > program이 실핻되려면, memory에 process가 올라가야 한다.

  > CPU가 직접적으로 접근 가능한 memory = Main memory, register ( cache X )

  > MMU(Memory Unit) : "주소 + 읽기 요청", "주소 + 쓰기(데이터)" 요청을 처리

  > Register speed > Memory speed


* Base and Limit Register

 - 어떤 Process는 특정 시작 위치(Base)부터 Limit(Process의 최대 용량)까지만 Access가능하다.

 - logical address vs Physical address

  > logical address : 프로세스와 CPU가 사용하는 memory 주소 값으로 process 시작주소를 0으로 잡고 

                              Memory를 계산하는 가상 주소 값

  > Physical address : 실제 memory에 저장된 주소값

 - MMU(Memory - Management Unit) : Logical address를 Physical address로 변환

   ※ Physical address로는 MMU만 접근이 가능하다.


* Address Binding : 프로세스를 메모리중 어느 공간에 할당할 것인지를 판단

 - 일반적인 Binding

  > Source code는 기호로 보통 주소를 대체하여 나타낸다.

  > 컴파일된 코드는 Process 시작 위치로부터 상대적인 시작 위치를 나타낸다.

  > Linker 또는 Loader는 절대적인 주소를 결정한다. ( 메모리의 어느 위치에 프로세스를 올릴지 결정)

 - Binding Time

  ⓐ Compile Time : Memory의 시작 주소를 프로그래머가 알고 있다면, 이때 Binding 된다.

                            예전의 OS의 경우(하나의 Process만 돌리는 경우) Process의 시작 주소를 알 수 있었다.

                            멀티프로세스 개념이 도입되면서, program이 실행 될 때마다 시작 주소를 얻어와 다시 컴파일

                            해야 하는 불편함이 발생. >> 이런 이유로 Compile Time에는 상대적인 위치만 결정한다.

  ⓑ Load time : Compile time에 정해진 상대적인 위치를 절대적 위치로 변경한다.

                      만약, Compile Time에 주소가 Binding 됬다면, 이 단계에서는 아무 것도 하지 않는다.

  ⓒ Execution time : Hardware support가 필요한 요즘에는 실행시간에도 위치가 지속적으로 변한다.

                             현대에는 이때가 가장 중요하며, 이 시간에 binding이 가장 많이 발생한다.

  ※ 실행시간에 주소값이 계속 변하기 때문에 Logical address로 process를 control하는 것이다.


* Dynamic Loading & Swapping

 - Dynamic Loading 

  > Process의 일부만 Memory에 올려 놓았다가 특정 함수가 호출되면 Linking을 따라서 memory에 올려 놓는다.

  > Shared Libraries call에 많이 사용된다.

 - Swapping

  > Memory 한계로 인해 HW와 Memory사이에서 Swapping이 발생한다.

  > Swapping이 될때마다 Process address가 변하게 된다.

 - Dynamic Loading과 Swapping 등에 따라서 실행중에 memory 주소가 지속적으로 변하기 되며,

    Dynamic Loading과 Swapping 모두 HW의 도움을 받는 일들이다.


-------------------------------------------------------------------------------------------------------


* Memory Allocation

 ⓐ contiguous Allocation

  - Process가 메모리상에 연속적으로 위치하는 것

  - Process가 실행, 종료됨에 따라 Fragmentation이 존재하게 된다.

  ex)

  

  - Dynamic Storage - Allocation Problem

   > Contiguous Allocation 방법에서 여러개의 Memory Hole중에서 어느 공간에 새로운 Process를 넣을것인가?

   1) First fit : process가 진입 가능한 Memory hole중에서 가장 처음 hole에 할당

   2) Best fit : Process할당 memory와 memory hole의 크기의 차이가 가장 작은 memory hole에 할당

   3) Worst fit : 가장 큰 Memory hole에 Process 할당

   ex)

   


* Fragmentation

 - External Fragmentation : 전체 메모리에서 발생하는 Fragmentation

 - Internal Fragmentation : Process가 할당 받은 memory내에서 발생하는 Fragmentation

 - Internal Fragmentation은 SW 구현 문제이다.

 - External Fragmentation 을 줄이는 것이 OS 문제

  ⓐ Compaction : Memory 조각 모음을 실시

  ⓑ Paging 사용


* Paging

 - Process를 일정한 크기로 나누서 할당한다.

 - Logical memory를 Memory Frame크기에 따라 같은 크기의 Page로 나눈다.

 - Process를 나눠서 저장하기 때문에 연속적으로 오지 않는다.(Non-contiguous)

 - Process마다 Page table을 관리하여 process page와 frame을 연결한다.

 ex)

  

 - 장점 : External Fragmentation이 발생하지 않는다.(거의 최소화하여 나타난다.)

 - Paging의 Memory Access법

 ex) 

 


  > Process의 Table의 Val는 편의상 적어 놓은 것이다.

  > 위의 화살표에 나타났듯이 P1의 Logical Address 3번에 해당하는 Memory 값에 접근해보겠다.

  ⓐ ( Page No, Offset Value ) 값을 찾아낸다.

   > ( 0 , 3 ) / Computer가 찾아내는 방법 : 3 = 0011(2) > ( Page No, Offset Value ) = (00(2), 11(2)) = (0,3)

    >> LA를 사용하여 Page No 및 Offset catch가 가능하다. 

    >> 2진 숫자를 나는 방법은 Logical Address 크기가 2^n이고, Page size가 2^m일 경우 앞의

         (m-n)만큼이 Page No를 나타내고, 그뒤 n만큼이 Offset Value를 나타낸다.

    >> 위의 예에서는 Logical Address 크기가 16 = 2^4이고, Page size가 4 = 2^2이기 때문에 2/2로 나눈다.

         Page No와 Offset value를 결정한다. 이에 따라서 Page Size와 Logical Address의 크기는 2^n이여야 한다.

  ⓑ Page Table을 통해 Frame No를 알아낸다. 

   > 3

  ⓒ Physical Address를 계산한다.

   > Physical Address = Frame No * Frame Size + offset = 3 * 4 + 3 = 15 >> main memory 15번째 값은 d!!

    >> 3 * 4 + 3 = 0011(2) * 2^2 + 0011(2) = 001100(2) + 0011(2) = 001111(2) = 15

    >> 아까 Page size가 2^m 꼴이라고 했는데, 그 이유는 여기서도 또 나온다. 

    >> 컴퓨터가 계산할때는 2진수이기 때문에 Frame Size(Page Size)를 2^m꼴로하여 곱을 빠르게 할 수 있다.

 - Page Hardware

  ⓐ Register에 Page table을 저장한다면, Register의 용량때매 부족하다.

  ⓑ Register에 Page table의 시작 위치를 저장후, table을 memory에 저장(Access Time에 의해 효율이 떨어진다.)

  ⓒ Hardware를 제작한다!