coding/CS

메모리 조직과 주소 지정

사과키라임파이 2022. 9. 21. 15:14

비트를 기억할 때 플립플롭이 유용, 레지스터를 이용하면 쉽게 여러 비트를 저장할 수 있다. 더 많은 정보를 저장하려면 레지스터를 더 많이 써야 된다.
레지스터를 많이 쓰면? 어떤 레지스터를 쓸지 어떻게 지정하는가?
그건 각 레지스터에 번호를 지정하는 것이다. 이것을 주소라고 함! 디코더 방식으로 번호 부여, 디코더의 출력은 입력을 활성화하기 위해 사용하는데, 지정한 주소에 해당하는 레지스터 출력은 셀렉터로 구현. 시스템에서 여러 메모리 컴포넌트의 출력을 한 출력으로 연결해야 한다면 트라이스테이트 출력이라는 기본 요소가 필요함. 이것을 합쳐 메모리 회로를 만듬.
메모리 컴포넌트는 연결지점이 매우 많음.
32비트 수를 다루려면 입력과 출력을 각 32개씩 연결해야하고, 주소, 제어 신호, 전원도 연결해야 함. 하드웨어 설계자는 회로를 패키지에 어떻게 넣을지, 선을 어떻게 잘 연결할지 고민해야 함. 그래서 메모리는 사실 동시에 읽고 쓸 경우가 거의 없기에 입력과 출력 데이터 연결을 합치고, read/write(bar) 제어 신호를 사용해서 연결을 줄였다.enable 제어 신호는 메모리 전체를 켜거나 꺼서 여러 메모리 칩을 함께 연결할 수 있게 한다. 그림 3-21에서 주소와 데이터에는 개별 신호 대신 큰 화살표를 사용했는데, 이렇게 연관된 신호를 버스(bus)라고 한다. 따라서 메모리 칩에는 주소 버스와 데이터 버스가 있다! 그렇다. 버스는 비트를 이동시키는 대량 교통 수단임!!

메모리 칩을 패키지에 넣을 때 해결해야하는 다른 문제는 메모리 크기가 커지면 주소로 연결해야 할 비트 수도 많아진다는 것.
메모리 설계자들은 도로 설계자와 비슷한 교통 관리 문제를 겪음. 많은 도시가 격자로 조직된 것처럼 메모리 칩 내부도 격자로 관리 됨.

CPU를 확대하면 메모리 덩어리로 이루어져있는데, 행과 열로 나눌 수 있음. 메모리 내부 위치는 그렇게 열과 행을 조합해 지정된다.
메모리가 만약 16장소밖에 없다면 주소 라인에 대해 고민할 필요 없지만 메모리가 더 크다면 주소 라인이 너무 많아짐. 이 문제를 행과 열을 멀티플렉싱하면 주소 라인의 수를 반으로 줄일 수 있다. 이런 절약을 위해 추가로 필요한 것은 멀티플렉싱한 주소를 저장하기 위한 레지스터뿐이다!!

주소가 두 부분으로 나뉘어 들어오기에 한 번에 한 부분씩만 변경할 수 있다면 성능이 더 좋아질 수 있음. 예로, 행 주소 먼저 지정 후, 열 주소만 변화 시키면 좀 더 빨리 처리할 수 있다. 오늘날의 대형 메모리 칩은 이렇게 주소를 처리함.
메모리 칩은 깊이(depth)X너비(width)로 크기를 표시한다. 예를 들어 256X8 칩은 열의 수가 8, 행의 수가 256개인 메모리 지점을 제공, 64MibX1 칩은 64메비비트가 들어있다.

우리가 지금까지 살펴본 메모리를 임의 접근 메모리, Random Access Memory, 램이라고 한다. Ram을 사용하면 메모리 위치 중 원하는 곳은 어디든 원하는 순서대로 쓰거나 읽을 수 있음.
정적램(Static RAM)은 비싸지만 아주 빠름. SRAM은 각 비트에 트렌지스터가 6개 들어감. 트렌지스터는 공간을 차지하기 때문에 sram은 수십억, 수조 비트를 저장하기에 좋은 선택은 아님.
DRAM은 집적도(밀도, 단위 면적당 비트 개수)가 뫂기에 큰 메모리 칩에 사용된다. 큰 메모리 칩=주소가 더 많음-> 멀티플렉싱 방식을 사용함.
내부 설계 시 고려해야 할 그 밖의 사항들로 인해, 행 주소 스트로브를 사용해 행 주소를 저장하는 속도가 열 스트로브오 열 주소 바꾸는 것보다 다 빠름.
행을 페이지라고 부르기도 함. 이는 마치 책에서 페이지를 넘기는 속도보다 한 페이지 안에서 각 줄을 건너뛰는 게 더 빠른 것과 비슷. 프로그래밍에서는 함께 사용되는 요소들을 같은 행에 넣어두면 성능이 훨씬 좋아진다는 것을 고려해야 함.
SRAM, DRAM 둘 다 휘발성 메모리임. 전원 꺼지면 데이터가 사라짐.

한권으로 읽는 컴퓨터 구조와 프로그래밍 책 3장에서..