메인 메모리
- 컴퓨터 시스템에서 중앙 처리 장치(CPU)가 직접 접근하여 데이터와 명령어를 저장하고 읽어들이는 주 기억장치이다.
- 프로세스가 실행되기 위해서는 메인 메모리에 적재되어야 한다.
- 빠른 접근 속도를 제공하며, 프로그램 실행 속도와 성능에 직접적인 영향을 미친다.
- 전원이 종료되면 데이터가 지워지는 휘발성 메모리이다.
MMU (Memory Management Unit)
- 주 기억장치인 메인 메모리의 관리를 담당하는 장치
- CPU와 메인 메모리 사이에서 동작하며, 주소 변환과 메모리 보호 기능을 수행한다.
주소 변환(Address Translation)
- 프로세스는 가상 주소(Virtual Address)를 사용하여 메모리에 접근한다.
- 이때, MMU는 가상 주소를 실제 물리 주소(Physical Address)로 변환하는 작업을 수행한다.
- 주로 페이지 테이블(Page Table) 이라는 데이터 구조를 사용하여 가상 주소를 물리 주소로 매핑한다.
+ 가상 주소(Virtual Address) : 메모리 공간을 확장하여 사용자에게 더 많은 메모리를 제공하기 위해 도입되었다. 실제 메모리의 용량은 한정되어 있지만, 가상 주소를 사용하면 프로세스의 크기가 실제 메모리 용량을 초과해도 실행될 수 있다.
+ 페이지 테이블은 가상 주소 공간을 페이지라는 고정 크기의 블록으로 분할하고, 각 페이지에 대한 실제 메모리 주소를 저장한다.
+ TLB(Translation Lookaside Buffer) : 가상 메모리 주소를 물리 메모리 주소로 변환하는데 사용되는 캐시 메모리
메모리 보호(Memory Protection)
- 한 프로세스가 다른 프로세스의 메모리를 침범하지 않도록 제어하는 기능
- Base & Limit Register
- MMU는 각 프로세스마다 Base 레지스터와 Limit 레지스터를 설정한다.
- Base 레지스터 : 해당 프로세스의 메모리 시작 주소를 물리 주소로 저장
- Limit 레지스터 : 프로세스의 크기를 저장
- 프로세스의 접근 가능한 메모리 영역은 Base <= 메모리 영역 <= Base + Limit 으로 정의된다.
- 이를 통해 프로세스는 자신의 주소 공간만 접근할 수 있으며, 잘못된 접근이 발생하면 MMU가 trap을 발생시켜 보호한다.
메모리 과할당 (Memory Overallocation)
- 시스템이 실제로 사용 가능한 물리적 메모리보다 더 많은 가상 메모리를 할당하는 상황
메모리 과할당으로 인한 문제점
- 성능 저하 : 메모리 과할당이 발생하면 시스템이 물리적인 메모리 이상의 가상 메모리를 관리해야 하므로, 메모리 스와핑이나 페이지 폴트가 증가하여 성능 저하를 초래할 수 있다.
- 자원 고갈 : 메모리 과할당으로 인해 물리적 메모리가 부족한 상황에서 새로운 프로세스나 가상 머신을 실행하려고 할 때 자원 고갈 문제가 발생할 수 있다. 이는 새로운 프로세스나 가상 머신을 실행할 수 없는 상황을 초래할 수 있다.
메모리 과할당 해결 방법
- 빈 프레임을 확보하여야 한다.
1. 메모리에 올라와 있는 프로세스 중 하나를 종료시켜 빈 프레임 얻기
2. 프로세스 하나를 swap out 하고, 이 공간을 빈 프레임으로 활용하기
1번의 경우 사용자에게 페이징 시스템을 들킬 가능성이 높아서 사용하면 안되고 2번과 같이 swapping을 통해 페이지 교체가 이루어져야 한다.
캐시 메모리
- 컴퓨터 시스템에서 주 기억장치인 RAM과 CPU 사이에 위치한 빠른 속도의 메모리
- 플립플롭 소자로 구성되어 있으며, SRAM(Static Random Access Memory)으로 구성된다. SRAM은 기억 내용을 유지하기 위해 전력을 지속적으로 소모하지만, 빠른 액세스 속도를 가지고 있으며, 주기억장치인 RAM은 DRAM(Dynamic Random Access Memory)으로 구성되어 있어, 기억 내용을 유지하기 위해 주기적인 갱신이 필요하고 액세스 속도가 상대적으로 느리다.
- 그래서 CPU와 주기억장치 사이의 속도 차이가 발생하는데 이를 극복하기 위해 캐시 메모리를 사용하며, 주로 프로세서의 명령어나 데이터를 임시로 저장하는 역할
캐시 히트 (Cache Hit) & 캐시 미스 (Cache Miss)
CPU가 데이터를 요청할 때, 먼저 캐시 메모리에서 데이터를 찾는다.
캐시 히트 : 데이터를 찾았을 때 데이터가 캐시에 존재하는 것
캐시 미스 : 데이터가 캐시에 존재하지 않고 주기억장치에서 데이터를 가져와 캐시에 저장하는 것
캐시 히트가 발생하면 CPU는 빠르게 데이터를 가져올 수 있어 메모리 액세스 비용을 줄일 수 있다.
지역성 (Locality)
캐시 메모리는 지역성 원리를 기반으로 동작한다.
지역성 : CPU가 한 번 액세스한 데이터 주변의 데이터도 캐시로 가져올 확률이 높다는 개념
- 시간 지역성 (Time Locality)
- 최근에 액세스한 데이터는 다음에도 액세스할 가능성이 높다는 개념
- 최근에 액세스한 데이터는 다음에도 액세스할 가능성이 높다는 개념
- 공간 지역성 (Spatial Locality)
- 실제 프로그램에서 참조된 주소와 인접한 주소의 내용이 다시 참조될 가능성이 높다는 개념
- ex) 배열의 원소를 순차적으로 접근하는 경우, 현재 접근한 원소의 인접한 원소들도 참조될 가능성이 높은 것
캐싱 라인 (Caching Line)
필요한 데이터를 캐시에서 찾을 때 모든 데이터를 순회하는 것은 비효율적이다.
즉, set이나 map과 같은 특정 자료구조를 활용하여 캐시에 저장하는 데이터의 메모리 주소를 함께 저장하여 빠르게 원하는 정보를 찾도록 해야 한다.
이렇게 캐시 저장 시, 자료구조를 활용해 묶어서 저장하는데 이것을 캐싱 라인이라고 한다.
'Computer Science > Operating System' 카테고리의 다른 글
[OS] Blocking/Non-blocking & Synchronous/Asynchronous (0) | 2023.07.16 |
---|---|
[OS] 파일 시스템 (File System) (0) | 2023.06.17 |
[OS] Thrashing (0) | 2023.06.17 |
[OS] 페이지 교체 알고리즘 (0) | 2023.06.10 |
[OS] 페이징 (Paging) & 세그멘테이션 (Segmentation) (0) | 2023.06.10 |