메모리
CPU가 직접 접근할 수 있는 기억장치
프로세스가 실행되면 프로그램이 메모리에 올라와야 한다.
프로그램 실행 시 필요한 주소와 정보를 저장하고, 가져다 사용할 수 있게 만드는 공간이다.
메모리의 특징
- 지역성: 데이터 접근이 시간적 || 공간적으로 가깝게 일어나는 것
> 시간적 지역성 (Temporal locality) : 특정 데이터가 한 번 접근되었을 경우, 가까운 먼 미래에 또 데이터에 접근할 가능성이 높음
> 공간적 지역성 (Spatial locality) : 액세스된 기억 장소와 인접한 기억 장소가 엑세스될 가능성 높음
- 성능 결정 요인: 기억용량(capcity), 접근 시간(access time), 사이클 시간(cycle time), 기억 장치 대역폭(bandwitdth), 가격(cost)
메모리 계층 (기억장치 계층)
세 가지 주요 특성인 용량, 접근 속도, 비용 간의 절충 관계를 파악해 필요에 따라 채택할 수 있게 나타낸 구조
- 메모리를 필요에 따라 여러 종률롤 나누면 CPU가 메모리에 더 빨리 접근 가능하다.
- 각각의 특징이 있는 서로 다른 종류의 저장 장치를 함께 사용하여 최적의 효율을 낼 수 있다.
- 지역성 원리를 이용하여 계층으로 구성됨
> 우측로 갈수록 접근 시간 감소, 빠른 속도, 비싼 비용, 적은 용량 !
1) 레지스터(Register)
- CPU가 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하는 기억장치
> 연산을 위해 반드시 레지스터를 거쳐야 하며, 특정 주소를 가리키거나 값을 읽어올 수 있음
- 프로세서에 위치한 고속 메모리, 프로세스가 바로 사용할 수 있는 데이터(소량의 데이터, 처리 중인 중간 결과 등)를 담고 있는 영역
CPU안에 있는 임시기억장치. CPU와 직접 연결되어 있어 연산 속도가 메모리보다 수십 배에서 수백 배까지 빠름. CPU는 자체적으로 데이터를 저장할 방법이 없기 때문에 레지스터를 거쳐 데이터를 전달 SSD or HDD → RAM → cache → register
2) 캐시 (Cache)
- 사용되었던 데이터는 다시 사용될 가능성이 높다는 개념을 이용하여 데이터를 미리 복사해 놓는 임시 장소
- 중앙처리장치와 주기억장치 간의 속도 차이 개선을 목적으로 사용됨
- 속도가 빠른 장치와 느린 장치 사이의 병목 현상을 완화하기 위한 범용 메모리
ㅁ 사용 메모리: SRAM (Static Random Access Memory) ; 빠른 속도가 요구되기 때문
▷ 캐시의 종류
- CPU 캐시: 대용량의 메인 메모리 접근을 빠르게 하기 위해 CPU 칩 내부나 바로 옆에 탑재하는 작은 메모리로 하드웨어를 통해 관리
-- > L1 캐시: CPU 칩 내에 내장되어 가장 먼저 사용되는 캐시 메모리
-- > L2 캐시: L1 캐시와 용도가 비슷하며, 속도는 L1 캐시보다 느림
-- > L3 캐시: L1, L2 캐시와 동일한 원리로 작동하지만, 대부분 CPU가 아닌 메인보드에 내장
- 디스크 캐시(디스크 버퍼): 하드 디스크에 내장된 작은 메모리
- 페이지 캐시: 운영체제의 메인 메모리를 하드 디스크에 복사해 놓는 캐시
(캐시가 효율적으로 동작하기 위해서는 저장할 데이터가 지역성을 가져야한다.)
▷ 캐시 히트 (Cache Hit)
- CPU가 필요한 데이터가 캐시에 존재하는 경우.
CPU는 데이터를 캐시에서 직접 가져올 수 있어 빠른 데이터 접근이 가능
▷ 캐시 미스 (Cache Miss)
- CPU가 필요한 데이터가 캐시에 존재하지 않는 경우.
CPU는 하위 메모리 계층(예: RAM, SSD/HDD)에서 데이터를 가져와야 하므로 더 많은 시간이 소요
컨텐츠 요청
=> 마침 해당 컨텐츠 캐시 서버에 있다?
캐시 hit 발생 ! (“캐시 힛이 났다”)
=>없네 ?
캐시 miss 났다~
▷ 캐시 매핑 (Cache Mapping)
- 캐시가 히트되기 위해 데이터를 매핑하는 방법
CPU가 데이터를 필요로 할 때:
- 먼저, 레지스터에서 데이터를 탐색
- 레지스터에 데이터가 있다면 히트(hit): CPU는 데이터를 레지스터에서 바로 가져와 빠르게 연산을 수행
- 레지스터에 데이터가 없다면 미스(miss): CPU는 캐시 메모리에서 데이터를 탐색
- 캐시 메모리에 데이터가 있다면 히트(hit): CPU는 데이터를 캐시에서 가져옴.
- 캐시 메모리에 데이터가 없다면 미스(miss): CPU는 RAM에서 데이터를 탐색
- RAM에 데이터가 없다면 미스(miss): CPU는 SSD/HDD에서 데이터를 가져옴
∴ CPU가 데이터를 가장 빠른 경로(레지스터)에서 찾고, 데이터가 없으면 차례대로 하위 메모리 계층에서 데이터를 찾는 과정을 설명
3) 메인 메모리 (Main Memory)
- 주 기억장치(=1차 기억장치)
- 컴퓨터에서 수치, 명령, 자료, 등을 기억하는 HW장치
ㅁ 사용 메모리: DRAM (Dynamic Random Access Memory)
□ RAM (Random Access Memory) : 휘발성 기억 장치
--> 빠른 액세스를 위해 데이터를 단기간 저장
--> 전원이 유지되는 동안 CPU의 연산 및 동작에 필요한 모든 내용이 저장됨 (주기억장치인 이유)
--> Random Access: 어느 위치에서든 동일한 속도로 접근하여 읽고 쓸 수 있다는 의미
--> DRAM과 SRAM이 있으며, 주기억장치는 주로 DRAM을 의미
-- DRAM (Dynamic RAM): 주기적으로 재충전되어야 내용을 유지할 수 있음 (캐시)
-- SRAM (Static RAM): 재충전이 필요 없고, 접근 속도가 빠르며 가격이 비쌈 (메모리)
□ ROM (Read Only Memory): 고정 기억 장치
--> 컴퓨터에 지시사항을 영구히 저장하는 비휘발성 메모리
--> 전원 종료 시에도 기억된 내용이 유지됨
--> 변경 가능성이 희박한 기능 및 부품에 사용(바이오스, 펌웨어 등..)
■ MMU (Memory Managment Unit, 메모리 관리 장치)
--> 논리 주소를 물리 주소로 변환해 주는 하드웨어
--> 메모리 보호, 캐시 관리 등 CPU가 메모리에 접근하는 것을 총 관리
--> 가상 주소를 물리 주소로 변환하여 사용자에게 더 많은 메모리를 제공
--> 프로세스의 크기가 실제 메모리의 용량을 초과해도 실행될 수 있게 함

▷ MMU의 메모리 보호
--> 프로세스는 독립적인 메모리 공간 가져야 하며, 자신의 공간만 접근해야 함
--> 한 프로세스에게 합법적인 주소 영역을 설정하고, 잘못된 접근 시 trap을 발생시켜 보호
--> base와 limit 레지스터를 활용한 메모리 보호 기법:
-- base 레지스터: 메모리상의 프로세스 시작 주소를 물리 주소로 저장
-- limit 레지스터: 프로세스의 사이즈를 저장
-- 합법적인 메모리 영역: base <= x < base+limit
-- 영역 밖에서 접근을 요구하면 trap을 발생시킴
-- base와 limit 레지스터는 커널 모드에서만 수정 가능
▷ 메모리 과할당 (Over Allocating)
--> 실제 메모리의 사이즈보다 더 큰 사이즈의 메모리를 프로세스에 할당한 상황
--> 페이지 기법과 같은 메모리 관리 기법을 통해 메모리를 할당
--> 과할당 해결:
-- 빈 프레임을 확보하기 위해 한 프로세스를 종료하거나, 프로세스 하나를 swap out하여 빈 프레임 확보
-- 페이지 교체를 통해 빈 프레임 확보
▷ 페이지 교체
--> 메모리 과할당 발생 시, 프로세스 하나를 swap out하여 빈 프레임 확보
--> 페이지 부재 발생 시:
-- 디스크에서 페이지 위치를 찾음
-- 메모리에 빈 프레임이 있는지 확인
-- 빈 프레임이 있으면 해당 프레임 사용
-- 빈 프레임이 없으면 victim 프레임을 선정해 디스크에 기록하고 페이지 테이블 업데이트
-- 빈 프레임에 페이지를 올리고, 페이지 테이블 업데이트
--> 오버헤드를 감소시키기 위한 해결법:
-- 변경 비트를 사용하여 디스크 기록 횟수 감소
-- 페이지 교체 알고리즘 선택 (FIFO, OPT, LRU)
4) 보조 기억장치 (Auxiliary Memory, Secondary Memory)
- HDD (Hard Disk Drive), SSD (Solid State Drive)
- 컴퓨터 전원을 꺼도 저장된 데이터가 사라지지 않음 (비휘발성)
- 중앙처리장치와 직접 자료 교환 불가능
- 접근 시간이 오래 걸림
메모리 계층 구조의 필요성
1) 디코딩 속도
- CPU는 주소 전달 버스, 데이터 전달 버스, 컨트롤 신호 버스를 통해 메모리에 접근
- 큰 메모리 용량을 사용할 경우 디코딩하는 데 더 많은 시간이 소요됨
- CPU가 빠르게 데이터에 접근하기 위해서는 데이터를 저장하는 메모리가 작아야 함
2) 자주 쓰는 데이터는 계속 자주 쓰임 (참조의 지역성)
- 큰 메모리를 사용해도 모든 데이터를 고르게 접근하지 않음
- 자주 쓰이는 데이터는 계속 자주 쓰임
- 자주 쓰이는 데이터는 전체 데이터 양에 비해 작은 양이므로 캐시는 메모리보다, 메모리는 하드디스크보다 더 작아도 됨
3) 경제성
- 메모리 구조에서 상층에 속할수록 더 비쌈
- 비싼 하드웨어는 꼭 필요한 만큼의 크기만 사용
- 싼 하드웨어는 넉넉한 크기만큼 사용
- 레지스터는 CPU 내부에 있는 임시기억장치로, 매우 빠른 속도로 데이터 접근과 처리 가능. 레지스터는 CPU의 연산에 직접 사용되며, 메모리 계층 구조에서 가장 상위에 위치
- 캐시 메모리는 주 메모리(RAM)보다 빠르고, 레지스터보다 느리지만 큰 용량을 가진 메모리. CPU와 RAM 사이에서 데이터를 임시로 저장하여 CPU가 더 빠르게 데이터를 접근할 수 있도록 도움
- SSD/HDD: 가장 느리고, 가장 큰 용량을 가진 저장 장치.
- RAM: SSD/HDD보다 빠르고, 레지스터와 캐시보다 느린 주 메모리.
- 캐시 메모리: RAM보다 빠르고, CPU에 더 가까이 위치하여 임시 데이터를 저장하는 고속 메모리.
- 레지스터: CPU 내부에 있는 가장 빠른 임시기억장치.
'CS' 카테고리의 다른 글
CS_운영체제_CPU 스케줄링 (2) | 2024.06.15 |
---|---|
CS_운영체제_프로세스 & 스레드 (1) | 2024.06.13 |
CS_운영체제_운영체제와 컴퓨터 (0) | 2024.06.13 |
CS_네트워크_로드밸런싱 (0) | 2024.06.07 |
CS_네트워크_대칭키 vs 비대칭키 (0) | 2024.06.07 |