과제
p.51의 확인 문제 3번 (빈칸 채우기)
- 프로그램이 실행되려면 반드시 메모리에 저장되어 있어야 합니다.
p. 65의 확인 문제 3번 (1101의 음수를 2의 보수 표현법으로 구해보세요.)
1101 : 시작
0010 : 모든 0과 1 뒤집기
0011 : 1 더하기
1101을 음수로 표현한 값은 0011입니다.
p. 100의 스택과 큐의 개념을 정리하기
스택
- LIFO. Last In First Out. 후입 선출. 나중에 저장한 데이터를 가장 먼저 꺼내는 방식. 마치 프링글스 통.
- 저장은 PUSH, 꺼낼 때는 POP
큐
- FIFO. First In First Out. 선입선출. 스택과 다르게 파이프처럼 사용.
Chapter 1. 컴퓨터 구조 시작하기
성능, 용량, 비용
예산이 한정된 상황에서 비싼 컴퓨팅 파워는 필요하지 않다. 클라우드에서도 그렇다. 어떤 CPU, 메모리를 사용할지 판단해야 현명한 선택이 가능하다!
→ 그리고 이런 판단은 누군가 해주지 않으니까 스스로 잘 해야한다.
컴퓨터 구조 = 컴퓨터가 이해하는 정보 + 컴퓨터의 네 가지 핵심 부품
컴퓨터가 이해하는 정보
- 데이터
- 명령어
컴퓨터의 핵심 부품
- 중앙처리장치 (CPU)
- 주기억장치 (메모리)
- 보조기억장치
- 입출력장치
메모리
컴퓨터가 이해하는 정보(명령어, 데이터)를 저장하는 부품. 프로그램이 실행되려면 반드시 저장되어야 한다.
메모리에는 값에 접근하기 위해 주소(address) 개념을 사용한다.
CPU
컴퓨터의 두뇌. 메모리에 저장된 명령어를 읽어 들이고, 읽어들인 명령어를 해석, 실행하는 부품
내부 구성요소
- 산술논리연산장치(ALU, Arthmetic Logic Unit) : 계산기.
- 레지스터(register) : CPU 내부의 임시 저장 장치. 프로그램 실행시 필요한 값들을 임시로 저장. CPU 안에는 여러 개의 레지스터가 존재하고 각기 다른 이름과 역할을 한다.
- 제어장치(CU, Control Unit) : 제어 신호(전기 신호)를 내보내고 명령어를 해석하는 장치 (제어신호로는 메모리 읽기, 메모리 쓰기가 있다)
보조기억장치
메모리는 비싸고 저장 용량이 적다. 전원이 꺼지면 내용도 잃어버린다.
전원이 꺼져도 내용을 잃지 않도록 보조할 저장 장치.
입출력 장치
마우스, 키보드, 마이크, 스피커, 프린터
보조기억장치도 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보 교환을 한다는 관점에서 입출력 장치이다.
메인보드와 시스템 버스
메인보드(마더보드)는 부품을 부착, 연결할 수 있는 슬롯과 연결 단자가 있다.
메인보드에 연결된 부품들은 서로 정보를 주고 받을 수 있는데, 메인보드 내부에 버스(bus)라는 통로를 사용한다. 컴퓨터 내부 네 가지 핵심 부품을 연결하는 가장 중요한 버스를 시스템 버스라고 한다.
Chapter 2. 데이터
정보의 단위
비트(bit) : 0 (ON), 1 (OFF) → 바이트(byte) : 비트 8개 묶음
n개의 전구로 표현할 수 있는 상태는 2의 n제곱. 2진법을 통해서 여러가지 수를 표현할 수 있다.
바이트가 1024개면 킬로바이트.
이후엔 메가바이트, 기가바이트, 테라바이트.
워드 : cpu가 한 번에 처리할 수 있는 데이터의 크기.
이진법
0, 1만으로 숫자를 표현한다면 이진법(binary) 밖에 없다.
음수표현
이진수에서 음수를 표현하기 위해서는 2의 보수를 구해서 이 값을 음수로 간주한다.
- 2의 보수 : 어떤 수를 그보다 큰 2의 n제곱 수에서 뺀 값
- 구하는 팁 : 모든 0, 1을 뒤집고 거기에 1을 더하기
- 이 값이 보수가 된 음수인지 그냥 양수인지 확인하기 위해서 **플래그(flag)**를 사용한다.
십육진법
이진법으로 보면 숫자의 길이가 너무 길어지기 때문에 십육진법(hexadecimal)을 사용하게 된다. 십육진수는 이진수로 표현하기 편하기 때문에 사용한다.
- 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 로 나타낸다.
- 0x 를 붙여서 구분한다.
0, 1로 문자를 표현하는 방법
컴퓨터가 인식할 수 있는 문자 집합에 있는 문자로 사용자는 소통하게 되고 문자를 컴퓨터가 이해하려면 인코딩, 사람이 0, 1을 이해하기 위해서 디코딩을 한다.
- 문자 집합 : 컴퓨터가 인식하고 표현할 수 있는 문자의 모음
- 인코딩 : 문자를 0, 1로 변환
- 디코딩 : 0, 1을 문자로 변환
아스키 코드 (ASCII)
총 128개의 문자를 표현할 수 있는 문자 집합 표.
7비트로 표현되고 1비트를 패리티 비트(parity bit)라고 하여 오류 검출을 위해 사용되는 비트가 있어서 총 8비트.
한글 인코딩 (2바이트, 16비트)
- 완성형 인코딩 : 초성, 중성, 종성 조합이 다 이뤄진 완성된 하나의 글자에 고유 코드를 부여 (EUC-KR이 가장 대표적인 완성형 인코딩. 모든 한글을 표현할 수 없어서 CP949라는 확장된 버전이 나왔지만 여전히 아쉬움)
- 조합형 인코딩 : 초성, 중성, 종성을 위한 비트열을 할당하여 조합으로 하나의 글자를 완성하는 방식
- 유니코드 & UTF-8 : 언어별로 인코딩이 달라서 다국어를 지원하기 위해 제작.
Chapter 3. 명령어
컴퓨터는 명령어를 처리하는 기계. 프로그래밍 언어로 만든 소스 코드를 컴퓨터 내부에서 명령어로 변환하고 실행된다.
고급 언어와 저급 언어
사람을 위한 언어는 고급 언어, 컴퓨터가 직접 이해하고 실행할 수 있는 언어를 저급 언어라고 한다. 따라서 작성한 고급 언어의 소스코드를 저급 언어로 변환하는 과정이 꼭 수반되어야 실행할 수 있다.
(근데 요즘엔 사람에 가까운 언어를 고급 언어라고 하는 것 같다. C도 저급 언어라고 하는 느낌…)
- 저급 언어
- 기계어 : 0과 1로 이뤄진 언어인데 너무 길어져서 십육진수로 가독성(???)을 올리기도 한다.
- 어셈블리어 : 기계어를 읽기 편한 형태로 번역한 언어
- 고급 언어
- 컴파일 방식 : 코드를 저급 언어로 변환하는 컴파일 과정을 컴파일러로 하는 방식. 변환하면 저급 언어로 변환된 목적 코드(object code)가 나온다.
- 인터프리터 방식 : 소스 코드를 한 줄씩 저급 언어로 변환하여 실행. 따라서 N번째 줄에 오류가 있으면 N-1번째 줄까지는 실행됨.
명령어
연산 코드 + 오퍼랜드
- 연산 코드 : 명령어가 수행할 연산 (연산자)
- 데이터 전송
- 산술/논리 연산
- 제어 흐름 변경
- 입출력 제어
- 오퍼랜드 : 연산에 사용할 데이터가 저장된 위치 (피연산자)
- 주소 필드 : 메모리 주소나 레지스터 이름이 담김.
- 오퍼랜드가 몇 개인가에 따라 0-주소 명령어, 1-주소 명령어, …, 3-주소 명령어라고 한다.
주소 지정 방식
오퍼랜드 필드에 메모리나 레지스터의 주소를 담게 된다. 왜 데이터가 아니라 데이터의 주소를 담을까?
→ 명령어의 길이 때문. 연산 코드가 4비트이고 명령어가 16비트로 구성되있다면 12비트만으로 데이터를 표현해야한다.
- 유효 주소 : 연산의 대상이 되는 데이터가 저장된 위치
즉시 주소 지정 방식
- 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시. 데이터 크기의 한계가 있지만 일단 빠르다는 장점이 있다.
직접 주소 지정 방식
- 오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식.
간접 주소 지정 방식
- 유효 주소의 주소를 오퍼랜드 필드에 명시. 2번 메모리에 접근해야하기에 느리지만 유효 주소의 범위가 넓어지는 효과가 있음.
레지스터 주소 지정 방식
- 직접 주소 방식처럼 연산에 사용할 데이터를 저장한 레지스터를 명시.
레지스터 간접 주소 지정 방식
- 연산에 사용할 데이터를 메모리에 저장하고, 그 유효 주소를 저장한 레지스터를 오퍼랜드 필드에 명시. 따라서 간접 주소 지정 방식보다는 빠름.
'컴퓨터구조&운영체제' 카테고리의 다른 글
[혼공컴운] 6주차_가상 메모리 & 파일 시스템 (0) | 2024.02.07 |
---|---|
[혼공컴운] 5주차_프로세스 동기화 & 교착 상태 (0) | 2024.02.02 |
[혼공컴운] 4주차_운영체제 알아가기 (0) | 2024.01.25 |
[혼공컴운] 3주차_컴퓨터의 핵심 부품 (CPU 빼고) (1) | 2024.01.18 |
[혼공컴운] 2주차_CPU 알아가기 (2) | 2024.01.11 |