[책] 그래서 컴퓨터는 어떻게 동작하나요? - 4

깨미·2021년 10월 17일
0

💻 배워가기 💻

목록 보기
19/30
post-thumbnail

다중 입력 게이트와 다중 출력 게이트

첫 번째 조합 게이트


출력 d가 1이 되는 조건은 a, b, c 모두가 1인 경우.

만약 입력들을 AND 게이트로 대체하게 되면 입력이 무수히 많은 AND 게이트를 만들수 있다. 입력이 1개 추가될 때마다 현재 입력 조합은 그 전보다 두 배씩 늘어난다. 앞서 만든 2입력 AND 게이트에서 가능한 입력 조합은 4개. (a, b = c 에서 입력 a, b를 각각 AND 게이트로 만들면 조합이 4개로 바뀐다.)

두 번째 조합 게이트(= 디코더)

입력 개수보다 출력 개수가 더 많다.
입력이 2개이고 출력이 4개인 게이트를 만들어 보자.
NOT 게이트 2개와 AND 게이트 4개만 있으면 만들 수 있다.

그림 16-2에서 a와 b는 왼쪽에서 들어오는 입력. a와 b를 각기 다른 NOT 게이트와 연결. a와 b에서 들어온 원본 입력과 원본 입력을 한 번 뒤집은 출력을 합하여 총 4개의 전선을 수직 방향으로 연결.

원본 입력은 a와 b가 1일 때 맨 마지막 AND 게이트의 출력 1이 되고, 반전된 입력은 a, b 입력이 0일 때만 맨 위 AND 게이트를 거쳐 1이 된다.

표 16-2를 통해 a, b의 입력에 따른 출력을 살펴볼 수 있다. 어떤 입력이 들어와도 출력 4개 중 1개는 무조건 1이 된다. 어떤 출력이 1이 될지 결정하는 요인은 a와 b의 상태.

이런 조합 게이트를 디코더라고 부른다. 이 장치의 이름은 코드를 해독한다는 뜻을 지니고 있다. 입력 2개로 가능한 상태 4개를 코드로 간주하면 출력은 입력으로 어떤 코드를 사용했는 지 말해 준다.

디코더는 확장할 수 있다. 입력을 하나 더 추가해 3입력 디코더로 만들면 가능한 입력 조합이 8개 된다. 3입력 AND 게이트를 8개 연결하면 3입력-8출력 디코더가 완성.

비슷한 방법으로 4*16, 5*32, 6*64 등으로 확장할 수 있다.
이전에 NAND 게이트로 NOT 게이트와 AND 게이트를 만듦.
지금 NOT 게이트와 AND 게이트를 연결해서 디코더라는 장치 만듦. 이는 디코더를 NAND 게이트만으로 만든 것.

디코더는 입력으로 받는 비트 사이에 해당하는 출력 하나만 1로 만들어 주는 장치.

컴퓨터의 절반, 램

레지스터

입력 단자 a는 컴퓨터의 다른 장치에서 내보낸 바이트가 버스를 통해 레지스터로 들어오는 입구.
어떤 8비트 패턴이 버스를 통해 이 레지스터로 들어올 때 입력 제어 단자 sa를 잠깐 1로 설정했다가 다시 설정을 0으로 바꾸면 a를 통해 들어온 비트 패턴과 일치하는 디코더의 출력은 단 1개만 선택.
4개 비트는 위쪽에 있는 4*16 디코더로 연결. 하위 비트 4개는 왼쪽에 있는 4*16 디코더에 연결. 16*16개 또는 256개의 교차점. 디코더는 결국 많은 출력 중에 한 번에 1개만 열어 주고 나머지는 전부 0으로 만들어 차단. 격자에는 디코더가 2개 달려 있음. 디코더 1개는 수평 격자에 있는 전선 하나를 선택, 또 다른 디코더는 수직 격자에 있는 전선 하나만 선택.
그림 17-1 아래에 bus, s, e 라고 쓰인 전선은 교차점 256개 모두에 개별적으로 연결.

동그라미 표시가 된 부분을 확대하면 그림 17-2처럼 그 안에 AND 게이트 3개와 레지스터 1개가 보일 것이다.

x로 표시한 AND 게이트, 줄여서 x는 이 교차점에서 수직 격자 전선과 수평 격자 전선을 입력 받음. x는 격자에 연결된 유일한 부품.
256개 x 중에서 하나의 x만 출력이 1이 된다. x에서 내보낸 출력은 분배된 후 AND 게이트 2개의 입력으로 들어간다. 위쪽 AND 게이트는 입력 제어 비트 s2를 이용해서 버스에서 들어오는 바이트를 오른쪽에 있는 레지스터 안에 쓸지 결정할 수 있다. 아래쪽 AND 게이트는 출력 제어 비트 e2를 이용해서 오른쪽 레지스터 안에 들어 있는 바이트를 버스로 흘려보낼지 결정할 수 있다. 그런데 x가 0을 출력한다면 레지스터와 버스 사이에서 입출력이 불가능.

x가 1을 출력한다면 위쪽 AND 게이트에서 s가 1이면 s2도 1이 되므로 버스에서 레지스터로 데이터를 입력할 수 있고, 아래쪽 AND 게이트에서 e가 1이면 e2도 1이 되므로 레지스터에서 버스로 데이터를 출력할 수 있다.

지금까지 설명한 다이어그램은 바로 주기억 장치(main memory)가 작동하는 구조를 설명한 것. 또 다른 이름으로 무작위 접근 메모리(random access memory) 또는 램(RAM)이라고 부른다.

그림 17-3처럼 램 안에는 레지스터가 257개 들어 있고, 256개는 바이트를 저장하는 데 사용. 나머지 1개는 저장 장치에서 특정한 바이트의 위치를 가리키는 데 사용. 이것을 메모리 주소 레지스터 (memory address register) 또는 MAR 이라고 한다.

더 커다란 용량을 가진 램을 만들려면 MAR 을 만드는 레지스터를 2개 사용해야 한다. 각 레지스터는 출력 8개 모두를 8*256 디코더와 연결한다. 65,536개의 다른 위치에 1바이트를 읽고 쓸 수 있다.

그림 17-4는 64KB 크기를 가진 램을 묘사했음.
버스는 한 번에 1바이트씩 실어 나를 수 있고, 램 안에 있는 65,536개의 레지스터에서 특정한 주소를 선택하려면 MAR이 2단계 과정을 거쳐야 한다.

  1. 수평 주소를 가리키는 바이트 1개를 a에 적재하고 레지스터 R0에 넣기.
  2. 수직 주소를 가리키는 바이트를 a에 적재한 후, 레지스터 R1에 넣기.
    원하는 교차점 위에 있는 레지스터를 선택하고, s와 e를 설정해서 버스를 통해 레지스터에서 데이터를 읽거나 버스에 채워진 데이터를 레지스터 안에다 쓸 수 있다.

    MAR이 표시할 수 있는 주소의 길이를 늘려주기만 하면, 얼마든지 램 용량을 확장하고 원하는 바이트에 접근할 수 있다.

컴퓨터의 내부 주소

컴퓨터에서는 주소를 어떻게 식별하는 걸까
MAR 안에 있는 바이트에 램 주소를 이진수 코드로 넣어주기만 하면 된다.
바이트에 램의 주소를 나타내는 숫자만 넣어 주면 그 곳이 어딘지 바로 찾을 수 있다. 부가적인 정보도 전혀 필요 없다.
컴퓨터 주소란 MAR에 입력되는 숫자. 이 주소를 이용해서 램의 특정한 위치에 들어있는 바이트에 접근 할 수 있다.

profile
vis ta vie

0개의 댓글