[OS] Virtual Memory

parkheeddong·2023년 5월 29일
0

Operating System

목록 보기
42/63
post-thumbnail

요즈음 대부분의 컴퓨터들은 Virtual Memory를 이용하여 메모리를 할당한다.

🔔 Virtual Memory 란

메모리에 완전히 로딩되어 있지 않은(존재하지 않는) 프로세스를 실행할 수 있도록 허가해주는 기술

프로세스 이미지를 여러 조각으로 분할하고, 실행 중에 각 시기에 필요한 블록들을 메모리에 로딩한다.

➡ Logical Memory의 사이즈는 Physical Memory의 사이즈에 제한 받지 않는다.

Logical Memory와 Physical Memory를 완전히 분리시키는 효과가 발생한다. 즉 Logical Memory가 Physical Memory에 의해 제한을 받거나, 영향을 받지않는다.

🌱 장점

1) 프로그래밍이 쉬워진다.

프로그래머는 총 메모리 용량을 고려하면서 코딩할 필요가 없다.

2) Multiprogramming Degree가 더 높아진다.

메모리를 할당받는 프로세스의 개수가 더 많아진다. 한 프로세스가 사용하는 메모리 공간의 양이 더 작아지기 때문이다.

3) CPU의 활용도와 Throughput이 높아진다.

다만, 한 프로세스의 기준으로 봤을 때 response time과 turnaround time은 좋지 않을 수 있다.

4) 프로세스를 swapping 할 때 걸리는 시간이 줄어든다.

Virtual Memory에서 프로세스의 일부만 메모리에 들어 있으므로, swapping과 loading에 걸리는 시간이 줄어든다.

🌱 단점

1) Address Mapping Overhead가 존재한다.

Contiguous Allocation에선 오버헤드가 적지만, Virtual Memory나 Discontiguous Allocation에서는 페이지 테이블을 이용해야 하고 mapping해야 하므로 오버헤드가 존재한다.

2) Page Fault Handling Overhead

✔ 내가 원하는 프로세스 조각이 현재 메모리에 없는 현상
프로세스 이미지가 메모리에 전부 들어있지 않은 상태에서 프로세스를 실행시키는데, address를 generation했는데 메모리에 현재 없는 경우이다.
-> 디스크 스토리지에서 해당 조각을 읽고 들어와야 하는데, disk I/O 가 발생하므로 CPU에서 Context Switching이 발생한다. 이 또한 오버헤드로 작용한다.

➡ 따라서 Real Time이나 embedded 시스템에서는 Virtual Memory 기법을 아주 신중히 사용해야 한다.

👇 방법

1) Demand Paging

사용자 프로그램을 같은 사이즈의 블록으로 나누는 것

2) Segmentation

사용자 프로그램을 다른 사이즈의 논리적 블록으로 나누는 것

3) Hybrid paging/segmentation

위 방법들을 믹스한 방법

0개의 댓글