본문 바로가기

스파르타 부트캠프(spring)

[내일배움캠프_Spring] 자바 Spring 입문_CS강의-메모리_230106

메모리 

: 프로그램과 데이터를 구분없이 저장.(cpu는 메모리에서 이를 불러서 실행을 한다.)

 

프로그램의 실행

  • 파일 시스템에 존재하던 실행파일이 메모리에 적재된다는 뜻
  • 프로그램이 cpu를 할당받고 명령을 수행하고 있는 상태

파일시스템에 있는 실행파일이 메모리에 적재될 때 실행 파일 전체가 메모리에 올라기지 않는다. 일부분만 메모리에 올라가고 나머지는 디스크의 특정영역인 스왑 영역에 존재한다.

 

 

프로세스 메모리 구조(텍스트, 데이터, 스텍, 힙)

프로세스가 메모리 위에 올라오면 위의 그림같은 형태의 구조를 가진다.

text 영역

  • 실행 코드 및 함수를 담고 있다.
  • cpu가 이 텍스트 영역에 저장된 명령을 하나씩 가져가서 처리하는 구조

 

data 영역

  • 전역 변수 또는 static 변수 등 프로그램이 사용하는 데이터를 저장하는 공간
  •  전역 변수또는static 값을 참조한 코드는 컴파일이 완료되면 data 영역의 주소값을 가르키도록 바뀐다. 전역변수가 변경 될 수도 있어 Read-Write로 되어있다.

 

stack 영역

  • 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터(지역변수, 매개변수, 리턴값 등)를 임시로 저장하는 공간
  •  이 영역은 함수 호출시 기록하고 함수의 수행이 완료되면 사라진다. 메커니즘은 자료구조(stack)에서 배운 LIFO(Last In First Out) 방법을 따른다. 컴파일 시 stack 영역의 크기가 결정되기 때문에 무한정 할당 할 수 없다. 따라서 재귀함수가 반복해서 호출되거나 함수가 지역변수를 메모리를 초과할 정도로 너무 많이 가지고 있다면stack overflow가 발생한다.

 

heap 영역

  • 프로그래머가 필요할 때마다 사용하는 메모리 영역
  • heap 영역은 런타임에 결정된다. 자바에서는 객체가 heap영역에 생성되고 GC에 의해 정리된다.

 

가상메모리(virtual memory)

  •  한정된 메모리에서 여러 프로세스를 실행시킬 수 있도록 하는 메모리구조
  • 각 프로세스마다 각각의 가상 메모리를 할당받음 ⇒ 다른 프로세스의 가상 메모리를 침범할 일 X

  • 페이지 : 가상메모리에서 사용되는 메모리 영역을 일정한 크기로 나눈 블록
  • 프레임 : 물리메모리에서 사용되는 메모리 영역을 일정한 크기로 나눈 블록

 

  • 현재 사용중인 페이지는 실제 물리메모리 영역에 저장됨
    -> 물리메모리 영역(프레임) 어디에 저장되는지는 페이지테이블이 가지고 있다.
  • 쓰이지 않는 페이지들은 디스크로 간다.
    ->디스크는 쓰이지 않는 페이지들을 위한 일종의 임시거처

    쓰이지 않는 영역들
    1. 특정 프로세스의 페이지가 페이지 테이블에 매핑 규칙이 있는지 확인. → 있으면 상관이 없음.

    2. 매핑 규칙이 없다면 이것을 page fault라고 합니다. 이 때, OS는 프로그램 실행을 잠시 중단한 후 새로운 프레임을 확보하기 위해 움직입니다. 새로운 프레임을 확보하기 위한 대표적인 알고리즘으로는 LRU 알고리즘이 있습니다.
        a. LRU(Least Recently Used) 알고리즘: 가장 오랫동안 사용되지 않은 페이지의 프레임 영역을 선택

    3.새로운 프레임 영역이 확보가 되면 해당 페이지가 확보된 프레임으로 매핑된다. 이것을 page swap이라 함. 이후에 OS는 중단되었던 프로그램 실행 부분부터 재실행
    ->물리 메모리 영역이 상대적으로 부족해서 잦은 page swap이 발생하면 thrashing이라는 성능 저하현상이 발생