운영체제

The abstraction: Address space

땅콩콩 2023. 3. 27. 20:05

 

메모리의 가상화, virtual address space

virtual memory를 구성하는 핵심 요소.

오늘날의 컴퓨터는 프로그램 여러개를 cpu에 동시 탑재하여 time sharing하는 multiprogramming을 한다.

그리고 이 방법을 통해서 utilization(가용성), efficiency(효율성)을 높일 수 있다.

과거 컴퓨터의 메모리 구조(좌), 현대 컴퓨터의 메모리 구조(우)

같은 프로그램으로 생성된 두개의 프로세스가 있다고 할 때, virtual address는 두 프로세스에서 모두 동일하다. (program이 동일하기 때문.) 하지만 물리적으로는 두 프로세스가 다른 곳에 있어야 한다.

 

따라서 각 address space마다 각 덩어리들이 물리적인 위치로는 어디로 갔는지에 대한 매핑정보(주소변환정보)가 필요하다.

다시말해 매핑정보는 프로세스마다 다르게 가지고 있어야 하는것이다. 

 

pc이든 sp이든 cpu 내부의 주소는 virtual address이다.

따라서 메모리에 direct하게 접근할 수는 없고, 변환정보를 찾아서 어디로 가야할지. 즉 주소를 어떻게 변환해야할지를 어딘가에 물어서 알아내고 그 답을 통해 찾아가야하는데 이때 이 주소변환이 mmu라는 하드웨어에 의해서 일어난다.

 

프로그램의 로딩 단계부터 살펴보면 program 안의 주소(=virtual address)는 memory로 그대로 올라가니까, 그때의 코드도 virtual address이고 이것이 추상화되어 process 안에도 나타난다. 따라서 cpu에서 다루는 주소는 virtual address이지만 결국 마지막에 물리적 메모리에 접근할때는 mmu에 의해 변환된 physical address를 사용하는 것이다.

 

virtual memory의 목표

1. Transparency (투명성) 

process의 진행이 멈췄다가 다시 이어질 때 그 사이의 복잡한 일들이 보이지 않고,

 그 단면이 투명하게 보여서 process가 멈췄을때부터 그 뒤의 이어지는 실행이 마치 이어진 듯이 보이는 것.

 

2. Efficiency (효율성)

pc가 프로그램을 실행한다는것은 코드를 읽어서 가져오고 그때마다 주소변환을 한다는 것인데, 이것이 소프트웨어적인 방법이나 느린 방법을 통하면 안된다. 따라서 mmu라는 하드웨어를 통해 주소를 빠르게 변환하고, 그 변환 내용을 캐싱한다. (TLB)

 

3. Protection(isolation)

multiprogramming 환경에서 한쪽 프로세스를 실행하면서 다른쪽 프로세스의 data, heap, kernel data 등을 손상시키면 안된다. 다시말해 각각의 프로세스들을 위한 주소공간은 격리되고 고립되어야 하기 때문에 이를 address space로 별도로 관리한다.

이 protection을 위한 하드웨어의 도움에는 두가지가 있다.

  • dual mode (user mode, kernel mode) : 주소 변환 정보를 생성, 갱신시 물리적 주소에 접근하는데, kernel mode에서만 이러한 접근이 가능하게 한다. user mode에서는 만들어진 주소 변환 정보를 그저 사용하는 것만 가능하다.
  • 주소 변환 과정이 mmu라는 하드웨어를 통해 이루어진다.