운영체제 - The Abstraction : Address Space

혀누·2024년 1월 4일
0

운영체제

목록 보기
8/10
post-thumbnail
post-custom-banner

Memory Virturalization

  • OS virturalizes its physical memory
  • 각 process가 자신만의 memory를 가지고 있다고 착각 (CPU virturalization처럼)

OS in the Early System

  • Load only one process in memory
  • Poor utilization and efficiency

Multiprogramming and Time sharing

  • Load multiple processes in memory
  • memory에서 process간의 switch
  • Increase utilization and effciency
  • Protection issue
    -> A라는 process에서 memory에 load된 다른 process(B나 C)의 주소를 알면 access할 수 있다.

Address Space

  • 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) 재귀함수

Virutal Address

  • Process에서 사용하는 모든 주소는 virtual address이다.
    따라서 A, B, C process가 모두 같은 주소값을 참조할 수 있지만 실제로 같은 곳은 아니다.
  • 실제로 process가 실행되기 위해서는 physical memory에 load되어야 하기 때문에 OS가 virtual address -> physical address로 바꿔준다.

그러니까 밑의 코드에서 출력되는 주소값이 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

profile
정리용 블로그
post-custom-banner

0개의 댓글