13. Virtualization) Paging
·
운영체제/Operating Systems in Three Easy Pieces
이전 글들에서 OS가 메모리를 관리하기 위한 방법 중 하나인 Segementation에 대해 알아봤다.하지만 Segementation은 다양한 크기의 chunk로 나누어지기 때문에 Segmentation와 free space를 관리하는데 있어서 어려움이 있었다. OS가 메모리를 관리하기 위한 첫번째 방법이 Segementation이었고 두번째 방법도 존재한다.바로 Paging이라 불리는것이다. OS는 variable size로 메모리를 나누는 것이 아닌 fixed-size로 메모리를 나누고, 이것을 page라고 부른다. physical memory를 page frames이라고 불리는 고정된 크기의 slot 배열이라고 생각하는 것이다.  그럼 Paging은 정확히 어떤 장점이 있을까?첫번째로, flexib..
12. Virtualization) Free-Space
·
운영체제/Operating Systems in Three Easy Pieces
이번 챕터는 메모리 관리 측면에 대해 살펴 볼것이다. frees space가 고정된 크기로 나뉘어 있으면 공관관리가 편할 것이다. 하지만 OS가 segementation으로 virtual memory를 관리하고, 사용자 레벨의 메모리 할당 라이브러리 (malloc, free등)로 인해 free space는 다양한 크기를 갖게 된다.이와 같이 free space가 서로 다른 크기의 조각으로 분리되는 것을 external fragmentation이라고 한다.만약 15k의 메모리를 요청할 때, 총 free space의 공간은 20k로 충분하더라도, 하나의 연속된 메모리 공간이 없기 때문에 실패할 것이다.그리고 free list는 위와 같이 표현될 수 있을것이다.반대로 10K보다 작은 메모리를 1K 메모리를 요..
11. Virtualization) Segmentation
·
운영체제/Operating Systems in Three Easy Pieces
이전 글에서 base, bounds 레지스터를 통해 OS는 physical memory의 다른 파트들을 프로세스에 relocate할 수 있었다. 하지만 큰 문제가 남아 있다.할당된 Address space에서 Heap과 Stack 사이의 사용하지 않는 메모리가 보이는가?이는 매우매우 낭비적이고, physical memory를 효율 있게 사용할 수 없게된다. 이 문제를 해결하기 위한 Segmentation 이라는 기술이 있다.해결법은 단순하다! MMU에 base레지스터와 bounds레지스터를 갖고 있는 대신에 address space의 segment마다 base레지스터, bounds레지스터 쌍을 갖고 있는건 어떨까? 한 segment는 특정 길이의 address space의 연속된 부분이다. 이 segme..
10. Virtualization) Address Translation
·
운영체제/Operating Systems in Three Easy Pieces
CPU와 마찬가지로 메모리를 가상화하는 이유는 각 프로그램이 private 메모리를 갖고 있게끔 착각을 주기 위해서이다.메모리 가상화는 어떤 방식으로 이루어지고, 또 어떤 기술이 필요할까? 이제부터 알아보도록 하자. 예시를 들기 전에, 말도 안되지만 몇가지 가정을 둘것이다.1. address space는 physical memory에 연속적으로 존재한다.2. address space의 크기는 physical memory보다 작다.3. 각 address space의 크기는 동일하다.위의 코드를 시킨다면 컴파일러는 아래와 같이 어셈블리어로 전환 할 것이다.코드는 매우 단순하다. 변수 x는 레지스터 ebx에 존재하고, ebx의 값을 레지스터 eax로 load한다.eax에 3을 더한 후, 결과 값을 ebx로 다..