728x90
1. 개요
오늘은 가상메모리와 가상메모리의 관리에 대해 공부하겠습니다.
2. 가상메모리란?
가상메모리는 운영체제에서 크고 느린 장치인 디스크를 어떻게 메모리에 다 담을지 또한 메모리 용량이 부족할지? 그리고 어떻게하면 메모리의 보안을 유지할수있을지 많은 선배 개발자분들이 고민을 하였다.
그 결과 일부 페이지들을 스왑 아웃하는 기능을 사용하여 멀티 프로그래밍과 사용 편의성 등의 이유로 실제 물리 메모리보다 더 많은 용량의 메모리가 필요하다고 판단, 그것이 가상 메모리가 되었다.
- Non-Contiuous allocation
- 사용자 프로그램을 block으로 분할하여 적재/실행
- paging/segmentation system
- 가상 메모리 관리의 목적
- 가상 메모리 시스템 성능을 최적화
- cost model, 다양한 최적화 기법이 존재
- 가상 메모리 시스템 성능을 최적화
3. Other Considerations
가상 메모리를 관리할 때 신경써야 할 것들 몇 개 말해보겠다.
- Page Size
- Program restructuring
- TLB reach
3-1 Page Size
- 시스템 특성에 따라 다르다
- No best answer
- Page Size가 점점 커지는 경향이 있음
- HW의 발전과도 연관이 깊다.
- CPU의 성능이 발전하고 Memory Size도 점점 커지면서 상대적인 Page fault의 처리 비용이 증가중
- 일반적인 page size : 2^7(128) bytes ~ 2^22(4M)bytes
- Small page size일 경우
- Large page table/ # of PF -> High overhead(kernel)
- 내부 단편화 감소
- I/O 시간 증가
- Locality 향상
- Page fault 증가
- Large page size
- Small page table/# of PF -> Low overHead(kernel)
- 내부 단편화 증가
- I/O 시간 감소
- Locality 감소
- Page fault 감소
3-2 Program Restructuring
- 가상 메모리 시스템의 특성에 맞도록 프로그램을 재구성
- 사용자가 가상 메모리 관리 기법에 대해 이해하고 있다면, 프로그램의 구조를 변경하여 성능을 높일수 있다.
// program-1
int main()
{
int zar[256][256]; // 행, 열
int i, j;
for(j=0; j < 256; j++)
for (i=0; i < 256; i++)
zar[i][j] = 0;
return 0;
}
// program-2
int main()
{
int zar[256][256];
int i, j;
for(i = 0; i < 256; j++)
for(j = 0; j < 256; j++)
zar[i][j] = 0;
return 0;
}
3-3 TLB Reach
- TLB를 통해 접근 할 수 있는 메모리의 양
- number of entries * page size
- TLB hit ratio를 높이려면
- TLB의 크기를 증가->비쌈
- Page크기를 증가 or 다양한 page size 지원
- 현대 OS의 발전으로 인해 OS의 지원이 가능함
4. Ref
https://velog.io/@minu/7.1.-%EA%B0%80%EC%83%81-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B4%80%EB%A6%AC
'개발자 면접 공부 > 운영체제,CS' 카테고리의 다른 글
메모리 영역 (1) | 2024.03.23 |
---|---|
TCB (0) | 2023.12.14 |
캐시메모리와 지역성 그리고 캐시라인 (0) | 2023.11.30 |
Race Condition 경쟁상태 (0) | 2023.10.28 |
라이브러리 vs 프레임워크 (0) | 2023.05.21 |