Protection issue를 해결하는 방법
앞선 글에서 memory를 address space라고 부르기도 한다라고 이야기를 했는데
사실 Address Space는 process마다 소유하고 있는 Virtual memory를 의미한다.
code, data, heap, stack으로 구성되어 있다.
process는 자신의 address space만 보고 실행되는 것, process가 실제 physical memory를 볼 수 없다.
process마다 자신의 address space를 가지고 있으므로 다른 process의 address space에 접근 불가능
A process의 address space와 B process의 address space가 둘다 주소값을 0KB~16KB를 사용하기 때문에 접근할 수 없다.
local variables, parameters, return address가 많이 저장될수록 stack의 크기는 커지고 저장 공간을 넘어서면 stack overflow 발생 ex) 재귀함수
그러니까 밑의 코드에서 출력되는 주소값이 virtual address인 것.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
printf("location of code : %p\n", (void *) main);
printf("location of heap : %p\n", (void *) malloc(1));
int x = 3;
printf("location of stack : %p\n", (void *) &x);
return x;
}
location of code : 0x40057d
location of heap : 0xcf2010
location of stack : 0x7fff9ca45fcc