Chapter 3. The Essentials of Memory and Disk Sequential Logic
Last updated
Last updated
컴퓨터는 비트를 어떻게 기억 하여 자신의 이전 데이터를 현재와 합산 하는 ALU를 구현 했을까s? 를 기반으로 한 순차 논리를 이해 하여 디지털 회로에서 주기를 나타내는 방법을 읽으면서 이해 하기 어려운 컴퓨터의 밑 바닥을 경험 해보자
디지털 시간적 개념에서 주기를 어떻게 사용 하고 있는지 알아보자.
이전 데이터를 어떻게 알 수 있는지 알아보자.
Sequential : 이전, 다음을 기억 하는 논리 회로로 이 것을 기반으로 ALU 역할의 논리 회로를 설계 할 수 있음
사람이 직관적으로 시간을 안다고 해서 디지털 회로에서도 시간을 자연스럽게 다룰 수 있는 것은 아니다.
발진자 : 시간을 측정 할 수 있는 장치
인버터의 출력은 다시 인버터 입력으로 들어가며, 이 입력은 다시 출력에 반영 된다. 이로 인해 출력이 0과 1 사이를 진동하는 것이 특징 -> 이 것을 피드백루프 라고 부른다.
진동하는 속도는 전파 지연에 따라 결정 되며, 온도에 따라 달라지는 경향이 있다. -> 이 뜻은 컴퓨터 오버클럭을 할 때 힌트가 될 것 같다.
Clock : CPU의 속도를 나타내는 단위
발진자와 클럭간의 관계는 발진자가 나타내는 0과 1사이의 진동 수를 통해 컴퓨터에 클럭을 제공함.
클록은 회로의 페이스를 결정하며, 회로의 최대 클럭 속도나 가장 빠른 템포는 회로의 전파 지연 시간에 의해 결정된다.
오버 클러킹
비닝이란?
지연시간이 짧아 빨리 반응 할 수 있는 부품과 아닌 부품을 분류 하여 부품 전체의 편차보다 더 작은 편차를 갖도록 부품을 나눠 담는 행위
오버클러킹은 빈의 중간 정도에 위치 하는 부품을 고장나지 않을 범위 안에서 클럭을 빠르게 공급 하는 도박 행위
Edge : 논리 수준이 특정 값에 머무는 동안 데이터를 잡아 내지 않고 논리 수준이 한 수준에서 다른 수준으로 전이되는 중간에 데이터를 잡아내는 것 -> 즉, 0에서 1로 이동 하는 주기의 시점에서 데이터를 기억한다.
Flip Flop : 에지에 의해 데이터 변화가 촉발되는 래치를 플립 플롭이라고 부르는데, 두 상태 사이를 넘나들 수 있는 게이트를 플립 플롭이라고 한다.
클록에 의한 Tik - Tok의 Tok 시점에서 입력 값이 플립 플롭에 저장된다.
Data FilpFlop (DFF) : 0과 1을 왔다 갔다 하는 클록에 맞춰 시간이 변함에 따라 응답 하도록 하는 게이트이다.
입력 및 출력이 1비트 데이터로 된 플립 플롭이라고 생각 하면 됨
병렬적인 클록에 연결 되어 각 클록 주기가 끝날 때 컴퓨터 내 모든 이전 클록 주기의 입력에 맞춰진다.
디지털 시계를 표현 하기 위해서 발진자에서 나온 시간을 세어 디코더에 공급 하고 디스플레이 유닛을 제어 하면 된다.
각 플립 플롭은 클럭 신호가 0에서 1로 바뀔 때 마다 상태가 변한다.
이러한 카운터를 리플 카운터 라고 부르며, 전파 지연에 의하여 전파 지연 보다 더 빠른 속도로 입력을 변화 시키는 현상이 있는데, 이 것을 방지 하기 위해서 동기적 카운터를 이용하면 된다.
Synchorus Counter: 모든 플립플롭에 같은 클록을 병렬로 연결 함.
모든 플립 플롭에 같은 클록이 들어가기 때문에 상태가 동시에 변하여 비동기 카운터의 주기 때문에 전파 지연보다 빨리 값이 변하게 되는 현상을 제어할 수 있다.
카운터를 활성화 하는 EN(enable) 입력이 제공 되며, EN != True
일 때 카운터는 수를 세지 않는다.
즉, 클록이 변하고 입력이 바뀌어도 카운터 값이 변하지 않는다는 뜻
info
이로써 카운터로써 얻을 수 있는 인사이트는 카운터를 사용 하면 시간을 셀 수 있다는 점이다.
레지스터는 클록을 공유하는 여러 Data-FlipFlop을 한 패키지에 넣은 형태인데, 이 또한 Counter 처럼 활성화 비트가 따로 제공된다. 마찬가지로, 값이 수정 되어도 활성화 되어 있지 않으면 메모리에 저장을 하지 않는다.
레지스터는 순차적인 번호를 갖고 있으며 이를 주소라고 부르며 레지스터의 입력을 활성화 하기 위해 사용한다.
CPU 사진을 확대 해보면 메모리 덩어리로 이뤄진 영역을 볼 수 있는데, 주소를 행과 열로 나눈다. 하지만, 메모리는 16바이트만 가지고 관리 할 수 없기 때문에 더 많은 메모리를 사용하기 위해 멀티플렉싱 방법으로 주소 라인의 수를 절반으로 줄일 수 있다.
Multiplexing: 행 주소를 먼저 지정하고, 열 주소만 변화 시키면 좀 더 빨리 처리할 수 있는데 오늘 날 사용중인 대형 메모리 칩에서는 이러한 방식으로 주소를 처리한다.
프로그래밍에서는 함께 사용되는 요소들을 같은 행에 넣어두면 성능이 좋아진다
Random Access Memory: RAM이라고 부르며 원하는 주소 어디든 원하는 순서로 쓰거나 읽기 가능
SRAM: 빠르지만 용량이 작고 비용이 비싼 하드웨어
DRAM: SRAM 보다는 느리지만 저장 용량이 크다. 멀티플렉싱 방식을 사용 해야하는 메모리 칩
Read-Only Memory: ROM 이라고 칭하며 읽을 수만 있다고 말 하지만 사실 알고 보면 한 번만 쓸 수 있는 메모리라고 말 해야한다. 이 메모리는 한 번 쓰고 나면 여러번 읽을 수 있다.
고전 ROM은 순차적이며 한 번 쓰고 나면 읽을 수 있었는데, PROM은 임의 접근이 가능 하다.
EEPROM은 지울 수 있는 읽기 전용 메모리이다. 지울 수 있다는 것은 레지스터에 저장된 데이터가 산처럼 쌓여있는 것을 지울 수 있다는 뜻으로, PROM이 산 처럼 쌓이기 쉬웠기 때문에 엔지니어들은 이 것을 기반으로 발전시켰다.
info
ROM
IBM카드, 종이 테이프, PROM, EEPROM의 순서대로 변경 되었음
즉, 순차적 읽기 전용 -> 임의 접근 읽기 전용 -> 지울 수 있는 읽기 전용으로 발전
디스크 드라이브는 엄청나게 많은 데이터를 저장하기 아주 좋은 장치로, 회전판과 비슷한 판(Platter)에 비트를 저장한다.
회전판에서 음식을 앞접시에 옮겨 담듯 디스크 드라이브에서는 디스크 헤드가 손 역할을 하며 데이터를 읽는다.
디스크 드라이브는 메모리에 비해 느린데, 이 이유는 방금 헤드를 지나간 데이터가 필요한 경우 그 데이터를 읽기 위해 회전판이 1바퀴 돌 때 까지 기다려야 하기 때문이다.
또 디스크의 문제점은 기계 부품이 시간이 지나면서 낡아진다는 점이다. 이로 인해 회전축의 마찰을 줄여주는 베어링의 마모로 디스크 오류를 일으키는 원인이 된다.
디스크는 DRAM 등과 달리 데이터 연결을 위한 공간이 필요 하지 않다.
여기서 말 하는 데이터 연결을 위한 공간이란 것은 디스크를 읽기 위한 메모리 주소를 의미 하는 것 같음
위 그림 처럼 이뤄진 원판(platter)이 하나 이상 회전축에 연결 되어 돌아간다.
탐색시간: 헤드를 한 트랙에서 다른 트랙으로 옮길 때 걸리는 시간
회전 지연시간: 원하는 데이터가 헤드 아래로 올 때 까지 디스크가 돌아야 하는데 이 때 걸리는 시간
보통 회전 지연시간은 밀리초 수준
플래시 메모리는 RAM처럼 원하는 위치를 마음대로 읽을 수 있다. 하지만, 빈 플래시 메모리에 데이터를 쓰기 위해 먼저 padding(0) 을 채워야한다.
플래시 메모리의 버킷은 DRAM보다 잘 만들어져 전자가 새지 않는다. 하지만, 여러 번 읽고 쓰기 위해 뚜껑을 여닫다 보면 뚜껑의 경첩이 닳아서 끊어진다.
플래시 메모리는 읽을 때는 RAM과 같고 쓸 때는 Disk와 같다.
즉, 쓸 때는 전체 블록을 읽고 원하는 바이트를 바꾼 다음 전체 블록을 다시 써야한다.
SSD : 디스크 드라이브 모양의 패키지에 넣은 플래시 메모리로, 여러 블록의 쓴 횟수를 기억 해서 모든 블록이 가능하면 똑같은 수준으로 낡도록 조정하는 프로세서가 들어있다.
플래시 메모리는 점차 낡기 때문에 SSD는 특정 블록만 닳지 않게 편차를 제거 하는 프로세서 인 것 같다.
패리티를 사용 하면 단 1비트만 데이터가 잘못된 경우를 감지 할 수 있다.
실제로 패리티 비트를 포함하는 전체 비트에서 1의 개수가 짝수인지 홀수인지 여부에 따라 오류가 검증된다.
패리티 비트 검사를 할 때 XOR 연산을 하기 때문에 1의 개 수가 홀수가 되면 출력 값이 1이된다. 그렇다면 오류가 발생 했다는 것을 알 수 있다.
하지만, 오류가 짝수 번 발생 했을 때와 오류가 발생하지 않았을 때를 구분 할 수 없다. 오로지, 오류가 홀수 번 발생한 경우를 알아낼 수 있다.
해밍 코드는 더 많은 비트를 사용 해 오류를 감지 할 수 있고, 오류 횟수가 작으면 오류가 일어난 부분을 바로 수정 할 수 있으며 오류 검사와 정정 메모리 칩도 있다.
[!info]
패리티 같은 방법은 끊임 없이 변화하는 데이터를 처리 할 때 유용
컴퓨터 프로그램 처럼 정적인 데이터 블록을 검사 하는 데 가장 단순한 방법은 체크섬이다
에지는 0에서 1로 변하는 순간 데이터를 잡아 내는데, 플립 플롭은 이러한 에지에 의해 데이터의 변화에 응답 하여 출력을 변경 한다. 그저, 플립플롭을 클럭 주기에서 Tik Tok의 Tok에 응답 하는 것 이라고 생각 했는데 이렇게 이해 하고 지나쳤다면 에지를 모르고 넘어 갔을 것 같다.
컴퓨터가 시간을 어떻게 인식하는지 이해 할 수 있었다. 순차논리 게이트와 데이터 플립플롭의 응용으로 레지스터가, 레지스터의 패키지가 메모리를 이루는 구성을 배웠다.
앞으로는 이 지식을 조합해 컴퓨터를 만드는 과정을 학습한다.