전공/운영체제

13. The Abstraction: Address Space

nongdamgom 2024. 1. 4. 19:19

 

Memory virtualization ?
  • OS가 process에게 메모리 독점의 환상을 줌 
  • 한 process가 physical memory 전체를 사용한다는 느낌을 주는 것
  • 모든 procss는 같은 구조의 address space를 가짐

 

OS in the Early System

  • poor utilization and efficiency
  • 예전에는 한 프로세스가 피지컬 메모리를 사용하면, 다 끝날 때까지 다른 프로세스가 사용 x

 

 

 

 

Multiprogramming and Time Sharing

  • memory에 multiple process를 load 
  • memory 내에서 부분 부분을 각 process가 switch 하며 사용
  • 위 보다 utilization과 efficiency가 상승
  • protection issue 발생
  • 메모리 공간에 바운더리(장벽)이 없어서, 한 프로세스가 다른 프로세스의 메모리의 주소를 안다면, 다른 프로세서의 메모리를 읽거나 쓸 수 있게 됨 => 문제 발생 

 

 

Address Space 

  • 위 문제를 해결하고자 도입한 개념 
  • phsical memory를 virtualization 할 수 있는 방법 
  • address space는 code, data, heap, stack 을 포함, process의 거의 모든 것을 담고 있음
  • 각 process마다 address space가 존재하고, process들은 phsical memory를 볼 수 없고 address space만 볼 수 있음
  • 위에선 process마다 사용하는 physical memory 주소가 달랐는데, address space는 각 process마다 고유의 가상화 된 메모리 주소를 가지고 있고, 각 프로세스의 시작 addr와 끝 addr이 모두 같기 때문에 protection 문제가 발생하지 않는다. 
  • code => instruction
  • heap => malloc, new.. , dynamically allocate memory
  • stack  => local, 함수가 recursive하게 중첩 되거나, 많이 불리면 stack크기가 커짐 

 

 

Virtual address 

  • process가 보는 모든 address는 다 virtual address라고 보면 됨 
  • OS가 virtual memory address를 physical address로 바꿔 줌 
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){

	// 주소에만 관심 있으므로 (void *)로 형변환
    
    printf("location of code : %p\n", (void * ) main);  // main의 함수 포인터 
    /*main 함수가 존재하는 시작 주소와 근사하게 찍힘 */
    
    printf("location of heap : %p\n", (void * ) malloc(1));
    /* heap을 1 정도로만 할당 후 찍으면, heap의 시작 주소와 근사하게 찍힌다 */
    
    int x = 3;
    printf("location of stack : %p\n", (void * ) &x);
    /* 거의 첫 local var의 주소를 찍으면, stack의 시작주소와 근사하게 찍힘 */
    
    
    return x;
}