2장에서는 컴퓨터가 어떤 논리와 장치를 가지고 계산을 하는지 알아봤고, 컴퓨터가 가지고 있는 혹은 계산한 값을 어떻게 저장하는지, 순차 논리에 대해 배우는 장이다.
가장 먼저 소개 되는 시간을 측정하는 기준은 "발진자, oscillater"이다. 이 발진자의 핵심 원리는 되먹임(feedback)인데, 인버터, inverter의 출력을 입력으로 연결했을 때를 생각할 수 있겠다. (마이크와 스피커를 가까일 가져가면 하울링 되는)
이 아이디어를 갖고 적은 비용으로 안정적인 주파수를 만드는 발진자의 재료로 크리서털, crystal이다. 크리스털과 전기의 반응을 이용해 (피에조 전기 효과 or 압전 효과) 음성 진동을 잡아내거나 만들어낼 수 있었다.
전자적인 단극쌍투 스위치를 사용해 크리스털에 전기를 가해서 다시 전기를 얻어낸다. 입력한 전기로부터 크리스털이 전기를 다시 만들어내는 시간은 예측이 가능하며 매우 정확하다. (특히 석영quartz라는 크리스털이)
발진자는 컴퓨터에 클록(clock, 시간을 셀 수 있게 해주는 신호)를 제공한다. 이 클록은 회로의 페이스(pace)를 결정한다. 이 클록의 페이스를 최대로 끌어낸다면, 회로가 작업할 수 있는 최대 속도로 작업한다면, 전파 지연에 따라 이 속도가 결정되겠다.
비닝(binning)을 통해 부품을 측정해 그 특성에 따라 여러 다른 빈이나 무더기로 분류한다. -> 이런 이유로 부푼의 전파 지연 시간을 표시할 때도 범위를 사용한다. (무한히 많은 빈을 만드는것은 실용적이지 못하니)
오버클로킹이란 단어도 통계적으로 빈의 중간 정도에 위치하는 부품을 부품이 고장 나지 않을 범위 안에서 클록을 빠르게 공급하는 도박을 한다는 뜻이다.
여기부터는 그림 없이는 이해하기 힘드니 책을 보는것을 추천한다.
OR게이트 하나짜리 래치(latch)를 사용해 1비트를 사용하는 방법 소개
되먹임을 끊고 회로를 재설정(reset)할 수 있는 AND-OR 게이트 래치 소개, reset-bar와 표기법을 소개하고 어떻게 되먹임을 끊는지 설명해준다.
S-R 래치 : 액티브 로우 입력을 받고 보수(complementary)출력을 제공한다. (출력의 한쪽은 액티브 하이, 다른 쪽은 액티브 로우)
게이트가 있는 S-R 래치 : S-R 래치 입력에 OR 게이드 한 개씩 추가한 래치. gate-bar 입력값이 거짓(하이)인 경우 상관없이 출력이 1이 된다.
게이트가 있는 D래치 : gate-bar 입력 외 다른 입력을 D로 넣은 래치. D 입력 중 하는 인버를 추가했다.
위에 말했던 불안정한 결과를 안정화하기 위해 가장 일반적으로 사용하는 방법은 논리 수준이 특정 값에 머무는 동안 데이터를 잡아내지 않고 논리 수준이 한 수준에서 다른 수준으로 전이되는 중간에 데이터를 잡아내는 것이다.
이런 전이를 에지(edge)라고 한다. 에지를 시간에 대한 판정 기준이라고 생각할 수 있다. 에지에 의해 데이터 변화가 촉발되는 래치(edge-triggered latch)를 플립플롭(flip-flop)이라고 한다.
플립플롭을 만들 때는 래치를 기본 요소로 사용한다. 3개의 S-R 래치를 연결해 양의 에지에 의해 변화가 촉발되는(positive edge-triggered)플립플롭을 만들 수 있고 이를 D플립플롭이라고 한다.
최초의 전자적 플립플롭의 역사와 스키매틱 기호, 동작 방식 (p.144)
에지에 의해 상태 변화가 촉발되는 장치의 상태 병화 타이밍을 볼때는 전파 지연 외레 요소도 고민해야 되고 이에 대한 해결책으로 설정 시간(setup time)과 유지 시간(hold time)이 있다.
플립플롭을 응용한 회로 중에는 순서대로 수를 세는 카운터(counter)가 있다.
리플 카운터(ripple coutner) : 물에서 물결이 퍼져나가듯이 개수를 센 결과가 왼쪽에서 오른쪽으로 퍼져나가기 때문에 이렇게 부른다. 각 플립플롭의 D 입력이 자기 자신의 Q-bar 풀려에 연결되어 있기 떄문에, 각 플립플롭은 자신의 CK 신호가 0에서 1로 전이될 때마다 상태가 바뀐다.
비동기 시스템은 언제 결과를 봐야 맞는지 알기 어렵다는 단점이 있다. (위에 카운터에서도 상태가 퍼져나가는 동안에는 올바르지 않겠다.)
리플 자리올림 가산기에서 봤던 것처럼, 동기적 카운터(synchronous counter)를 설계해서 리플 카운터의 타이밍 문제를 해결할 수 있다. (모든 플립플롭을 병렬로 연결)
카운터 스키매틱 기호와 설명 (p.147)
레지스터 (register) : 클록을 공유하는 여러 D 플립플롭을 한 패키지에 넣은 것이다.
가장 큰 사용은 결과값 저장이겠다. 가산기 출력을 클록을 사용해 레지스터에 넣고 나면, 가산기의 입력을 바꿔도 결과는 바뀌지 않는다.
카운터에 있던 enable 입력 신호를 제공하는 경우도 자주 있다.
레지스터에 저장해야 되는 데이터 양보다 많은 양을 저장해야 되는 경우를 알아본다.
가장 쉬운 방법은 레지스터를 여러개 쌓아 올리는 것이겠다.
(p.149)에 메모리 회로 스키매틱 기호
하지만 이런 메모리 컴포넌트는 연결 지점이 굉장히 많다. (비트 수 만큼 입,출력을 비트 수 만큼 연결해야 한다.)
(p.151)에 메모리 팁 크기 표기법, 성능 향상법 설명
위에서 말한 메모리 구조는 사실 임의 접근 메모리(random access memory, RAM)이다. RAM을 사용하면 메모리 위치 중 원하는 곳 어디든 순서로 쓰거나 읽을 수 있다.
위에 SRAM, DRAM은 휘발성(volatile) 메모리지만 비휘발성(non-volatile) 메모리인 코어(core) 메모리를 소개한다. (p.152)
한 번만 쓸 수 있는 읽기 전용 메모리(Read-Only Memory, ROM)을 소개한다. (작가는 한 번만 쓸 수 있는 Write-Once Memory라 명명하는게 더 좋을 것 같다 한다.)
임베디드 프로그래밍에 유용하겠다. ex) 전자레인지, 토스트기, 에어컨
ROM 메모리의 역사를 훑는다. 홀러리스 카드(hollerith card), 천공 종이 테이프(punched paper tape), 코어 로프 메모리(core rope memory) 등 읽으면 재밌다.
그리고 드디어 프로그래머들이 프로그래밍 할 수 있는 마스크 프로그래머블(mask-programmable) ROM, 내용을 지우고 다시 쓸 수 있는 EPROM(erasable programming ROM), EERPOM(electrically EPROM)을 소개한다.
대형 저장장치(mass storage)인 디스크 드라이브(disk drive)를 소개한다.
자화된 판(platter)에 비트를 저장하고, 디스크가 돌면 디스크 헤드(disk head)가 정보를 가져온다.
가장 큰 특징으로는 비휘발성이고, 굉장히 많은 데이터 저장이 가능하다만, 속도가 느리다는 점이겠다.
디스크 구조로는 바이트 단위로 주소를 지정해 읽는 대신 블록 단위로 주소를 지정해 읽는다.
이 블록(block)은 역사적으로 섹터(sector)로 불렸다. -> 디스크에서 읽고 쓰기가 가능한 가장 작은 단위
모든 섹터에 같은 수의 비트가 들어있다. 그렇다면 원의 특성산 비트 밀도(bit density, bit/mm^2) 바깥쪽보다 안쪽이 더 높다. -> 바깥쪽 트랙에는 비트를 더 집어 넣을 수 있는 여유가 있어 낭비가 된다.
최신 디스크들은 위에 문제를 해결하기 위해 방사상 영역(radial zone)으로 구분해 해결했다.
디스크 성능 수치로는
디스크 드라이브 종류로는
플래시 메모리, flash memory : EEPROM 유형의 한 매채이다. DRAM과 마찬가지로 버킷에 전자를 담지만, 크고 견고해서 전자가 새지 않는다. 하지만 여러 번 읽고 쓰면 뚜껑이 여닫아지고, 경처비 닳아서 끊어진다. EEPROM 보다 빨리 지울 수 있고 더 저렴하게 만들어진다. RAM처럼 원하는 위치를 마음대로 읽을 수 있는 임의 접근(random access)이고 쓸 때 블록 접근(block access)이다.
고체 상태 드라이브, solid-state drive, SSD : 디스크 드라이브는 점차 SSD로 교체되고 있는 추세다. 디스크 드라이브 모양의 패키지에 넣은 플래시 메모리와 같다. 플래시 메모리는 점차 낡기 때문에 여러 블록의 쓴 횟수를 기억해 모든 블록이 가능하면 똑같은 수준으로 낡도록 조정(wear leveling)하는 프로세서가 들어 있다.
오류와 정정의 개념을 시작으로 여러 기법들을 소개한다.
(p.161)에 홀수, 짝수 설명과 스키매틱 기호
해밍 코드, hamming code : 리처드 해밍이 발명, 더 많은 오류를 사용해 더 많은 오류를 감지하고, 횟수가 작다면 오류가 일어난 부분을 바로 수정한다. 이러한 회로를 내장한 오류 검사와 정정(ECC, error checking and correction)메모리 칩도 있다.
체크섬, checksum : 데이터의 각 지점을 n 비트값으로 더하고, n 비트를 넘어가는 값은 무시한다. 체크섬에 사용하는 값이 크면 클수록 위양성(false positive) 결과가 발생하기는 더 어려워진다. (위양성 설명 p.161)
순환 중복 검사, CRC, cyclic redundancy check : 수학적으로 체크섬보다 더 나은 대체제이고, 해시 코드 또한 또 다른 더 나은 대체재이다. (궁금하니 나중에 찾아보자)
이 주제도 읽으면 유익하다!
대부분 기술, 구조적인 얘기라 어느정도 암기가 필요하다. 암기가 되야 큰 그림이 잡히는 순차 논리 챕터이다.
어지럽기 시작!