메모리 조직과 주소 지정
비트를 하나 기억할 때 플립플롭이 유용하고, 레지스터를 사용해 쉽게 여러 비트를 저장할 수도 있음.
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
- 그래픽 처리 장치
'source-code > software' 카테고리의 다른 글
| 한 권으로 읽는 컴퓨터 구조와 프로그래밍 (0) | 2023.03.27 |
|---|---|
| 한 권으로 읽는 컴퓨터 구조와 프로그래밍 (0) | 2023.03.26 |
| 한 권으로 읽는 컴퓨터 구조와 프로그래밍 (0) | 2023.03.23 |
| 한 권으로 읽는 컴퓨터 구조와 프로그래밍 (0) | 2023.03.21 |
| 한 권으로 읽는 컴퓨터 구조와 프로그래밍 (0) | 2023.03.20 |