728x90
Memory hierarchy
- 주 메모리에는 프로그램과 데이터가 저장
- 한편 모든 프로그램을 할당하기에는 메모리 용량이 모자람
- 주 메모리는 CPU와 연결
- 현 시점에서 사용되는 프로그램/데이터가 주 메모리에 저장
- 보조 저장소에는 그 외의 데이터가 저장
- 싸고 빠를수록 CPU에 가깝고(레지스터, 메모리, ...), 느리고 쌀수록 주변장치에 저장(HDD, SSD, ...)
Main memory
- CPU가 동작시키는 프로그램과 데이터가 저장
- Static RAM / Dynamic RAM
- 비용, 전력, 접근 시간 등에서 차이
- ROM : 초기 프로그램(부트로더)가 저장
- 전원 인가 후
- 컴퓨터는 부트로더 맨 앞 주소의 데이터를 불러옴
- 부트로더는 디스크에서 메인 메모리로 데이터를 가져옴
- ROM
- 읽기 기능이 없어 Chip select와 주소 입력만이 존재
- 칩에 따라 read 입력이 있을 수도 있음
- RAM
- ROM에서 read, write 신호 입력이 추가
- chip select 입력이 맞지 않거나, read/write 신호가 모두 low인 경우 high-z상태로 사용되지 않는 상태가 됨
Hard Disk
- HDD의 구성 단위
- Track : hdd에서 지름이 같은 하나의 동신원 구역
- Sector : hdd를 중심을 기준으로 n등분했을 때 1개 구역
- Cylinder : HDD는 여러 개의 판(platter)로 구성되는데, 플래터들의 같은 트랙의 집합을 실린더라고 칭한다.
- HDD의 데이터 저장 : 헤드가 자기장을 가하면 데이터가 1, 가하지 않으면 0으로 인식
Assiciative memory(CAM)
- 메모리 내용 자체가 주소 역할
- RAM 대비 고기이나, 탐색 시 시간이 매우 빠름
- CAM 동작
- m개 word, n개 bit
- Argument register에 데이터가 입력
- 해당 데이터가 존재 시 Match register의 인덱스가 set
- Argument register과 메모리 내용 사이에서 탐색할 범위를 Key register로 설정 (Masking)
- 데이터를 쓸 때는 tag register가 사용 : 데이터의 저장 여부를 판단
Cache memory
- 캐시 메모리의 동작
- CPU가 데이터를 필요로 할 때, 캐시로 먼저 접근
- 캐시 데이터 존재시 읽음
- 캐시에 데이터가 존재하지 않을 경우 메모리 접근
- hit ratio
- CPU가 찾는 데이터가 캐시에 있을 확률
- (1 - hit ratio) * main memory 접근시간 + cache memory 접근시간 = 평균 접근 시간
- 반대어 : miss ratio(없을 확률)
- mapping
- RAM 데이터를 캐시로 옮기는 과정
- Associative mapping
- CAM을 이용한 addressing - 주소 | data로 된 표 형태로 저장
- direct mapping
- 주소 필드의 일부를 cache memory 접근 시 사용
- cache memory의 tag register과 주소 필드의 tag register를 비교하여 동일할 경우 데이터를 가져옴
- 불일치 시 원래 캐시 정보를 메인메모리로 갱신하고, 새로운 메인메모리 정보의 tag와 데이터 갱신
- set associative mapping
- direct mapping의 개선
- 캐시의 tag-data 표가 2중으로 존재
- replacement policy
- 캐시 메모리의 용량이 제한되어 있기 때문에, miss로 인한 새 데이터 진입 시 갱신 알고리즘이 필요
- LRU(Least Recently Used) : 가장 과거에 사용된 데이터가 갱신됨
- FIFO : 가장 먼저 들어온 데이터가 갱신됨
- cache의 read/write 정책
- CPU가 캐시 word를 읽을 때 : 메인 메모리에 접근 x
- 캐시에 쓸 때 : 메인 메모리는 갱신된 데이터를 저장해야 함 (coherency problem)
- write through
- 캐시 업데이트시마다 메모리 갱신
- 이동하는 데이터가 많아짐(traffic problem)
- write back : 캐시에 replace 발생 시 메모리 갱신
- write through
- cache initialize
- 캐시 각 주소에는 valid, dirty의 2가지 bit가 할당
- valid는 데이터의 가용성을, dirty는 데이터의 변형 여부(coherence problem 여부)를 나타냄
- write-back 정책의 경우 dirty bit가 설정되어 있으면 갱신하게 됨
Virtual Memory
- 프로그램 실행 시 보조 장치(ex. HDD)의 데이터를 주 메모리에 적재 후 실행하게 됨
- 이때 주 메모리의 크기보다 큰 프로그램은 다 적재할 수 없게되는 문제가 존재
- 보조 저장 장치의 Controller를 이용하여 저장소 주소를 주 메모리로 Mapping함
- 캐시 - 주 메모리의 관계와 유사하게 동작
- 가상 메모리 존재 시 주소 space 크기는 실제 메모리 공간보다 크게 할당
- 임베디드 등 가상메모리가 사용되지 않는 경우 주소필드와 메모리 영역은 동일
- page를 이용한 주소 매핑
- 실제 메모리는 일정 크기의 block으로 분할
- 가상 메모리 주소는 일정 크기의 page로 분할 = 프로그램 실행 시 page 단위로 나누어 메모리에 적재
- virtual address = page number + page line
- virtual address 중 page number는 memory page table에 접근
- page table의 주소로 접근하여 address를 반환
- virtual address의 line number와 mem.page table에서 반환받은 값을 합쳐 실제 메모리로 접근
- 실제 메모리가 할당 가능한 block 크기에 따라 memory page table도 갱신을 거쳐야 함(FIFO or LRU)
- 경우에 따라 associative memory table을 이용하여 page / block을 대응시켜 mapping하기도 함
Memory management
- segment : 논리적으로 연관 있는 명령어나 데이터의 집합
- 서브루틴, 데이터 배열, symbol, 프로그램 등
- 세그먼트 관리 시 인증되지 않은 접근에서 보호할 필요 존재
- logical address는 segment, page, word로 구성됨
- segment는 table을 거쳐 page와 합쳐짐
- page table에서 block 위치를 탐색하여 word와 함께 실제 주소를 탐색
- 최대 접근 가능한 메모리 주소는 page와 word 개수의 곱으로 나타남
728x90