본문 바로가기

source-code/software

한 권으로 읽는 컴퓨터 구조와 프로그래밍

메모리 조직과 주소 지정

비트를 하나 기억할 때 플립플롭이 유용하고, 레지스터를 사용해 쉽게 여러 비트를 저장할 수도 있음.

but 훨씬 더 많은 정보를 저장해야 한다면? (ex 여러 가지 덧셈 결과 저장)

→ 레지스터를 많이 쌓은 후  디코더 를 기본 요소로 사용해 각 레지스터에 번호를 부여!

(이 번호를 주소address라고 함)

→셀렉터를 이용해 지정한 주소에 해당하는 레지스터의 출력을 선택!

==> 이러한 요소들을 합해 메모리 컴포넌트가 만들어짐.

 

  • 임의 접근 메모리(RAM)
    • 메모리 위치 중 원하는 곳은 어디든 원하는 순서로 쓰거나 읽을 수 있음
    • 정적 램(SRAM) / 동적 램(DRAM)
      • 휘발성 메모리 - 전원이 끊어지면 데이터가 사라짐
    • 코어(core) 메모리
      • 비휘발성 RAM - 비트를 도넛 모양의 쇳조각에 저장
  • 읽기 전용 메모리(ROM)
    • (정확한 의미상) 한 번만 쓸 수 있는 메모리

블록 장치

  • 디스크 드라이브

플래시 메모리와 SSD

  • 플래시 메모리
    • 음악 플레이어나 디지털카메라 등의 응용에 적합
    • EEPROM보다 더 빨리 지울 수 있고, 더 저렴하며, RAM처럼 원하는 위치를 마음대로 읽을 수 있음

오류 감지와 정정

여러 요인으로 인해(ex 우주 방사선) 비트가 잘못되었을 때 → 이를 어떻게 빨리 감지하고, 복구할 수 있을까?

=> 패리티, ECC메모리침, 체크섬, 순환 중복 검사...

 

하드웨어와 소프트웨어 비교

논리를 하드웨어로 만드는 것과 소프트웨어로 만드는 것의 차이?

→ 차이 거의 없음! (설계에 들어가는 시간이 하드웨어가 더 크다는 점 정도)

 

4장. 컴퓨터 내부 구조 - 컴퓨터 하드웨어는 어떻게 구성되는가

컴퓨터 = 전자 부품을 다양하게 조합해 비트를 조작하는 회로

= 메모리(기억 장치), 입력과 출력, CPU(중앙 처리 장치)로 나눌 수 있음.

 

메모리

컴퓨터에는 조작할 비트들을 저장할 장소가 필요하며, 이를 메모리라 부름.

마치 크기(1바이트)가 똑같고 정해진 개수만큼 비트를 저장할 수 있는 방을 가진 집이 빈틈없이 늘어선 것과 유사!

메모리를 읽을 때는 꼭 바이트 단위일 필요 x. (ex 32비트 컴퓨터-4바이트 덩어리, 64비트 컴퓨터 - 8바이트 덩어리)

최근의 컴퓨터는 정렬이 맞지 않는 접근(monaligned access)으로 데이터를 읽을 수 O.

사용하는 프로세서에 따라 0번 바이트의 왼쪽/오른쪽 위치가 달라짐.

입력과 출력

이전에는 I/O 거리를 메모리 거리와 분리하는 것이 타당.

but 메모리가 커지면서, I/O를 지원하기 위해 메모리 주소를 사용.

→ 설계상 표준 입력/출력 슬롯slot을 통해, 각 슬롯을 차지한 장치가 자신에게 할당된 주소를 사용하는 형태로 발전.

중앙 처리 장치

실제 계산을 처리하는 컴퓨터 부품.

  • 산술 논리 장치(ALU)
    • CPU의 핵심 부품 → 산술 계산, 불리언 대수 및 기타 연산 수행 방법을 알고 있는 장치
    • 피연산자 : 수를 표현하는 비트
    • 연산코드(opcode)(명령코드): 피연산자에 대해 ALU가 어떤 연산자를 적용할지 지정
    • 결과 : 피연산자에 연산자들을 적용한 결과
    • 조건 코드(condition code) : 결과에 대한 추가 정보가 들어감
  • 시프트
    • 왼쪽 시프트는 어떤 숫자의 모든 비트를 왼쪽으로 1비트씩 옮기고, 맨 왼쪽 비트는 버리고, 비게 되는 가장 오른쪽 비트에 0을 넣음(오른쪽 시프트는 그 반대)
  • 실행 장치(execution unit)
    • 메모리의 정해진 장소에서 명령코드와 피연산들을 가져와, ALU에게 어떤 연산을 수행할지 알려주고, 결과를 메모리에 돌려줌
    • 이때 실행 장치는 메모리에서 이러한 명령어를(ex 주소 10의 수를 12에 있는 수와 더해 결과를 14에 넣어라) 찾음!
      (이러한 방식으로 실행되는 컴퓨터는 프로그램 저장 방식 컴퓨터 라고 부름)
    • 명령어(instruction) : 컴퓨터에게 어떤 일을 할지 알려주는 비트 패턴
    • 프로그램 카운터 : 실행 장치가 메모리에서 명령어를 가져와야 하는 위치를 알 수 있게 해 줌
      • 레지스터의 일종, 메모리와 별도의 특별한 곳에 위치

명령어 집합

  • 명령어
  • 누산기(accumulator)
    • ALU가 계산한 결과를 저장
    • 한 메모리 위치에 있는 값과 누산기에 있는 값에 대해 연산을 수행하고, 결과를 누산기에 넣음
  • 주소 지정 모드
    • 직접 주소 지정 : 사용할 주소가 명령어에 직접 들어가 있음
    • 간접 주소 지정 : CPU는 명령어에 든 값을 명령어에 피연산자 주소를 얻을 수 있는 메모리 위치를 가리키는 주소로 해석
    • 즉시 주소 지정 모드 : 주소에 해당하는 비트를 그냥 값으로 간주(상수를 누산기에 넣을 때 사용)
  • 조건 코드 명령어
    • 조건 코드 레지스터의 값을 누산기로 복사하는 cca 명령어 추가 가능
    • 누산기의 값을 조건 코드 레지스터에 복사하는 acc 명령어 추가 가능
  • 분기 명령어
    • 프로그램 카운터의 값을 변경할 수 있는 명령어 → 코드 중 일부를 선택적으로 실행!
  • 최종 명령어 집합 구성
    • 모드(주소지정모드) - 명령코드 - 주소

마지막 설계

  • 명령어 레지스터
    • 명령어 실행 = 패치(메모리에서 명령어 가져옴) - 실행(어떻게 해당 명령어를 실행할지)
  • 데이터 경로와 제어 신호
    • 프로그램 카운터의 값을 메모리 주소 버스에 넣을 방법과, 메모리에 있는 데이터를 명령어 레지스터로 넣을 방법이 필요
  • 데이터 흐름 제어
  • RISC와 CISC 명령어 집합
  • GPU
    • 그래픽 처리 장치