메모리
: 프로그램과 데이터를 구분없이 저장.(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이라는 성능 저하현상이 발생
'스파르타 부트캠프(spring)' 카테고리의 다른 글
[내일배움캠프] 자바 Spring_SQL_230109 (0) | 2023.01.09 |
---|---|
[내일배움캠프_spring] 주간회고 WIL - 9주차 (0) | 2023.01.08 |
[내일배움캠프_Spring] 자바 Spring 입문_JWT_230104 (0) | 2023.01.05 |
[내일배움캠프_Spring] 자바 Spring 입문_SQL쿼리_230104 (0) | 2023.01.04 |
[내일배움캠프_Spring] 자바 Spring 입문_메서드_230103 (0) | 2023.01.03 |