3장. 메모리와 디스크의 핵심: 순차 논리 - 컴퓨터는 비트를 어떻게 기억하는가
조합 논리는 입력의 현재 상태만을 다룬다. 하지만 조합 논리만으로는 상태를 기억해둘 수 없다.
때문에 순차 논리라는 것을 통해 입력의 현재 상태와 과거 상태를 함께 고려할 수 있도록 한다.
👉🏻 시간 표현과 상태 기억
컴퓨터에게는 주기적인 전기 신호가 필요하다. 과거에서부터 현재까지 어떤 방식을 사용했는지 알아본다.
- 발진자
인버터의 출력을 입력에 연결한다. 이를 피드백이라고 한다. 이는 마치 마이크와 스피커를 가까이 위치시킬 때 생기는 현상과 같다! 출력이 0과 1 사이를 진동하게 된다.
이 발진자를 효율적으로 만드는 방법은 크리스털을 활용하는 것이다.
크리스털 발진자는 전자적인 단극쌍투 스위치를 사용해 크리스털에 전기를 가해서 다시 전기를 얻어낸다. 입력한 전기로부터 크리스털이 전기를 다시 만들어내는 시간은 예측이 가능하며 매우 정확하다. 특히 석영이 가장 좋은 물질이다.
멋진 시계를 보더라도, 아주 좋은 크리스털 발진자의 소매가가 몇백 원에 불과하다는 사실을 기억하라!
- 클록
그래서, 이 발진자를 사용하면 시간을 잘 측정할 수 있다. 하지만 전파 지연은 회로가 작업을 수행하는 속도에 영향을 끼친다. 최악의 경우를 가정해, 지연 시간을 체크하면 좋겠다!
발진자를 통해 컴퓨터에 클록(시간을 셀 수 있게 해주는 신호)을 제공한다. 회로의 최대 클록 속도나 가장 빠른 템포는 회로의 전파 지연 시간에 의해 결정된다.
때문에 부품의 생산자는 전파 지연 시간을 표시할 때, 전형적인 값과 함께 최솟값과 최댓값으로 범위를 제공한다. 일반적인 논리 회로 설계 오류는 이때 최솟값과 최댓값을 사용하지 않고 전형적인 값을 사용하기 때문에 생긴다.
오버클로킹: 부품이 고장 나지 않을 범위 안에서 클록을 빠르게 공급하는 도박을 한다는 뜻!
- 래치, 플립플롭
이제 시간을 표현하는 근원을 만들었으니 정보를 기억할 방법을 찾아보자.
OR 게이트의 출력을 입력으로 보내는 피드백 회로를 사용하면 1이 나왔다는 정보를 기억할 수 있다.
이후 피드백을 끊고 회로를 재설정할 수 있도록 아래의 AND-OR 게이트 래치가 설계됐다.
그리고, 좀 더 똘똘하게 1비트 메모리를 만드는 방법으로 S-R 래치가 설계됐다.
이제 정보를 기억할 방법이 있으므로, 어느 시점에 무언가를 기억하려고 한다.
래치에 게이트를 추가하고 인버터를 추가하여, 게이트가 있는 D래치를 만든다.
D래치의 경우, 출력에 D의 변화가 나타나게 되어, 데이터의 변경으로 인해 잘못된 데이터가 생길 수 있다.
이런 잘못된 결과가 생길 가능성을 최소화하고자 일반적으로
논리 수준이 특정 값에 머무는 동안은 잡아내지 않고,
논리 수준이 전이되는 중간에 데이터를 잡아낸다.
이런 전이를 에지라고 부른다.
에지에 의해 데이터 변화가 촉발되는 래치를 플립플롭이라고 부른다.
클록이 L -> H로 변하는 순간 플립플롭의 출력이 바뀐다 : 양의 에지
D플립플롭은 S-R 래치와 같다. 양의 에지에 의해 촉발되고, 출력이 바뀌는 시점에 D 입력값이 저장된다.
에지에 의해 촉발되는 상태 변화 타이밍을 볼 때는 전파 지연 외의 요소도 고려해야 한다.
setup time / hold time, 이를 제외한 나머지 시간에는 D의 값이 무엇이든 출력에 영향이 없다.
👉🏻 메모리 조직과 주소 지정
플립플롭은 비트를 하나 기억할 때 유용하다.
그리고 만약 클록을 공유하는 여러 D플립플롭을 한 패키지에 넣으면 레지스터가 된다. 여러 비트를 저장한다.
하지만 훨씬 더 많은 정보를 저장해야 한다. -> 여러 레지스터를 쌓는다. -> 어떤 레지스터를 사용해야 하는지 알 수 없다. -> 레지스터에 디코더로 번호를 부여한다. 디코더의 출력(주소)을 레지스터의 입력을 활성화하기 위해 사용한다. -> 지정한 주소에 해당하는 레지스터의 출력을 셀렉터로 선택한다. -> 여러 메모리 컴포넌트의 출력을 한 출력으로 연결해야 한다면 트라이스테이트 출력을 사용한다.
메모리 컴포넌트는 연결 지점이 아주 많다.
32비트 수를 다루고 싶다면 입력과 출력을 32개씩 연결하고, 주소, 제어 신호, 전원을 연결한다.
때문에 메모리를 동시에 읽고 쓸 필요가 거의 없다는 사실을 활용해 연결을 줄였다. 입출력 데이터 연결을 합치고 read/write 제어 신호를 활용하면 많이 줄일 수 있다. 그렇게 단순화된 칩은 아래와 같다.
주소와 데이터에는 연관된 신호인 버스가 연결돼있다. 비트를 이동시키는 대량 교통 수단이다.
메모리 크기가 늘어나면 주소로 연결해야 할 비트 수도 많아진다. 이 연결의 교통 정리를 위해, 행과 열 주소를 멀티플렉싱하여 주소 라인의 수를 반으로 줄인다. 추가로 주소를 저장하기 위한 레지스터가 필요하다.
지금까지 살펴본 이 메모리를 임의 접근 메모리(random access memory, RAM) 이라고 부른다. 메모리 위치 중 원하는 곳 어디든, 원하는 순서로 쓰거나 읽을 수 있다.
- 임의 접근 메모리 (RAM)
SRAM (static) : 비싸다. 아주 빠르다. 각 비트에 트랜지스터 6개 들어간다. 엄청 많은 비트를 저장하기에 좋진 않다.
DRAM (dynamic) : 커패시터에 전자를 담고, 트랜지스터 1개로 뚜껑을 덮는다. 버킷이 새기 때문에 가끔 메모리를 갱신해줘야 한다. 이 버킷에 전자를 채우는 시점과, 정보를 쓰는 시간이 겹치지 않게 조심해야 한다.
집적도가 높아서 큰 메모리 칩에 사용된다. -> 주소가 많다. -> 멀티플렉싱 방식 사용
램은 모두 휘발성 메모리다. 전원이 끊어지면 데이터가 사라진다.
코어 메모리는 오래된 비휘발성 RAM으로, 비트를 토러스 모양의 쇳조각에 저장한다.
- 비휘발성 코어 메모리의 원리
토러스가 한 방향으로 자화되면 0, 반대 방향으로 자화되면 1이다.
토러스는 도넛 바깥쪽의 전자기 간섭에 대한 저항력이 아주 크다는 멋진 물리적 특성이 있다. 이런 유형의 메모리는 가로 세로 선이 통과하는 격자에 코어가 배열된 평면으로 배열된다.
그리고 코어를 읽기 위한 세 번째 선인 감지선이 있다. 코어에 담긴 정보를 읽는 유일한 방법은 코어의 자화 상태를 바꾸려고 시도하고 어떤 일이 벌어지는지 감지하는 방법뿐이기에 감지 선이 필요하다.
물론 자화 상태가 바뀌었다는 사실을 감지하면 원래의 상태로 코어 상태를 복귀시켜야 하며, 그렇지 않으면 데이터를 잃어버리고 코어가 표현하는 비트가 쓸모없어진다.
이로 인해 여러 선을 코어에 얼기설기 엮고 나서 수많은 회로를 추가해야 한다. 실제로 코어 메모리는 평면을 모아 브릭을 만들기 때문에 3차원 메모리였다.
코어는 아주 오래된 기술이지만 비휘발성은 여전히 가치가 있다.
- 읽기 전용 메모리 (ROM)
Read-Only Memory, 라는 이름은 그리 정확한 이름이 아니다. 읽을 수만 있는 메모리를 어따 쓰나 ?!
write-once memory라는 이름이 더 가까울 거다.
천공 종이 테이프는 너무 유명하니까 넘어가겠음.
아폴로호 비행 제어 컴퓨터의 코어 로프 메모리. 바느질을 통해서 비트를 기록했기 때문에 전자기 간섭의 영향을 받지 않았다고 한다.
1971년 최초의 마이크로프로세서에는 정해진 프로그램을 실행하는 초기 전자 계산기와 같은 장치에 마스크 프로그래머블 ROM이 도입됐다.
마스크는 집적 회로 생산 과정에서 사용하는 공판화를 뜻한다. 비싸다!
프로그램을 작성하고 -> 반도체 제조사에 보낸다 -> 비트 패턴을 마스크로 바꿔서 프로그램이 들어 있는 칩을 받는다.
따라서 프로그래머블 ROM, PROM이 만들어졌다. 직접 프로그래밍 할 수 있지만 역시 한 번만 입력할 수 있다.
너무 많이 버려지는 PROM을 보며 다음으로는 EPROM이 만들어졌다. 특별한 자외선 빛 아래에서 지울 수 있다.
EEPROM, 전기로 지울 수 있는 읽기 전용 메모리도 나왔다. 하지만 느려서 자주 할 순 없다. 이건 기술적으로는 RAM이지만, 시간이 오래 걸리고 RAM보다 비싸서 ROM을 대신하는 목적으로 쓰인다.
👉🏻 블록 장치
대량 저장장치인 디스크 드라이브는 많은 데이터를 저장하기 아주 좋은 장치다.
디스크 드라이브는 다른 유형의 메모리에 비해 상대적으로 느리다. 방금 헤드를 지나간 데이터가 필요한 경우, 그 데이터를 읽으려면 회전판이 1바퀴 돌때까지 기다려야한다. 최근 디스크들은 1분에 7,200번 회전한다.(7,200 RPM)
또 다른 디스크의 문제는 기계 부품이 시간이 지나면서 낡아진다는 점이다. 회전축의 마찰을 줄여주는 베어링의 마모는 디스크 오류를 일으키는 주 원인이다. (!! 내가 엄청 오래 쓴 하드디스크를 못쓰게 된 게 이 이유였군)
디스크 드라이브는 디스크의 영역을 자화시켜서 데이터를 저장한다. 코어 메모리와 마찬가지로 비휘발성이다.
디스크는 바이트 단위로 주소를 지정해 읽는 대신 블록 단위로 주소를 지정해 읽는다. (블록 = 섹터)
디스크에서 읽고 쓰기가 가능한 가장 작은 단위는 섹터이다. 최근에는 섹터당 4,096 바이트를 저장한다.
모든 섹터에 같은 수의 비트가 들어 있기 때문에 비트 밀도는 각 원판의 바깥쪽보다 안쪽이 더 높다. 바깥쪽 트랙에는 비트를 더 집어넣을 수 있는 여유가 많기 때문에 낭비가 심하다.
최신 디스크들은 이 문제를 방사상 영역으로 구분해 해결한다. 내부 영역보다 외부 영역에 더 많은 섹터가 들어간다.
👉🏻 플래시 메모리와 SSD
가장 최근 나타난 EEPROM 유형의 매체이다. DRAM과 마찬가지로 버킷에 전자를 담는 방식으로 작동한다. 하지만 플래시 메모리의 버킷은 전자가 새지 않는다. 하지만 여러 번 읽고 쓰기 위해 뚜껑을 여닫다 보면 뚜껑의 경첩이 닳아서 끊어져 버린다.
SSD(solid state drive)는 디스크 드라이브 모양의 패키지에 넣은 플래시 메모리와 같다. 플래시 메모리는 점차 낡기 때문에, SSD에는 여러 블록의 쓴 횟수를 기억해서 모든 블록이 가능하면 똑같은 수준으로 낡도록 조정하는 프로세서가 들어있다.
3장에서는 컴퓨터가 시간을 어떻게 인식하게 하는지 알아봤다. 순차 논리, 조합 논리, 메모리 등의 기본적인 하드웨어 요소를 알아봤다.
완-전 논리회로 수업! 수업 들을 때 지금처럼 태블릿 있었으면 공부를 더 잘 했을까나 ^~^
'full of life > book' 카테고리의 다른 글
[한 권으로 읽는 컴퓨터 구조와 프로그래밍] 조너선 스타인하트 - 5 (0) | 2021.10.24 |
---|---|
[한 권으로 읽는 컴퓨터 구조와 프로그래밍] 조너선 스타인하트 - 4 (0) | 2021.08.20 |
[한 권으로 읽는 컴퓨터 구조와 프로그래밍] 조너선 스타인하트 - 2 (0) | 2021.08.01 |
[한 권으로 읽는 컴퓨터 구조와 프로그래밍] 조너선 스타인하트 - 1 (0) | 2021.07.25 |
[한 권으로 읽는 컴퓨터 구조와 프로그래밍] 조너선 스타인하트 - 0 (0) | 2021.07.22 |