#컴퓨터의 기본구조
1. 컴퓨터시스템의 구성 3가지
응용 소프트웨어 (application software) |
시스템 소프트웨어 (system software) |
하드웨어 (hardware) |
응용 소프트웨어 = 프로그램
시스템 소프트웨어 = 운영체제
2. 컴퓨터 하드웨어의 주요 요소
① 중앙처리장치 : 펜티얼 듀얼-코어프로세서, 쿼드-코어 옵테론등
② 기억장치
ⓐ 주기억장치:RAM, ROM, DDR, SDRAM 등
ⓑ 보조저장장치: 디스크, CD-ROM 등
③ 입출력장치
ⓐ 입력장치 : 키보드, 마우스 등
ⓑ 출력장치 : 모니터, 프린트, LCD, 스피커등
④ 전원공급장치, 냉각 송풍기 등
3. 컴퓨터의 기본 구조
#정보의 표현과 저장
① 컴퓨터는 크게 코드와 데이터 2가지로 나뉜다.
-코드란 명령어의 집합이며 데이터는 코드에서 선언한 변수를 뜻한다.
변수는 상태를 저장하게되는데, 메모리(Process)가 될때 데이터를 생산하게 된다. 그 이유는 변수는 메모리에 저장(즉, 선언)되기 때문이다.
② 프로그램 코드는 크게 3가지로 나뉜다.
- 기계어(machine language) : 기계 코드(machine code)라고도 한다.
- 어셈블리 언어(assembly code) : 하드웨어가 이해할수 있는 2진 비트로 구성되어 있다. 어셈블러로 번역시 기계어와 일대일 대응 을 한다.
- 고급 언어(high-level language) : C, C++등 사람이 이해하기 쉬운 언어이고, 컴파일러(compiler)를 이용하여 기계어로 번역한다
* 고급언어 → 어셈블리 언어 → 기계어
(리버스 엔지니어링) (컴파일)
* 일대일 대응을 하는 이유 ? c언어는 복합어로 되있기 때문에 일대일 대응을 해야한다.
# 프로그램 언어의 변환 과정
[예] Z = X + Y
- LOAD A, X : 기억장치(RAM) X번지(RAM의 주소)의 내용을 읽어서, 레지스터(Register) A에 적재(load || read)
- ADD A, Y : 기억장치 Y번지 내용을 읽어서 레지스터(Register) A에 적재된 값고 더하고, 결과를 다시 A에 적재
- STOR Z, A : 그 값을 기억장치 Z번지에 저장
*레지스터(Register) : 여러가지 레지스터가 있지만 여기서는 CPU안에 있는 메모리라 생각하자.
LOAD/ADD/STOR = 연산자(Operator)
A/ X /Y/ Z = 피연산자(Operand)
명령어란 ? 연산자 + 피연산자로 이뤄져있다.
컴파일러(compiler) : 고급언어 프로그램을 기계어 프로그램으로 변역하는 소프트웨어다.
어셈블러(assembler) : 어셈블리 프로그램을 기계어 프로그램으로 번역하는 소프트웨어
니모닉스(mnemonics)
- 어셈블리 명령어가 지정하는 연산을 가르키는 알파벳 기호
- 'LOAD' 'ADD' 'STOR' 등
# 기계 명령어의 형식
[예]
001 (연산코드) |
00101 (오퍼랜드) |
① 연산코드 (op code)
- cpu가 수행할 연산을 지정해 주는 비트들
- 비트수=3 이라면, 지정될 수 있는 연산의 최대 수 : 2^3 =8개
② 오퍼랜드(operand)
- 연산에서 사용될 데이터 혹은 그것이 지정되어 있는 기억장치 주소(memory address)
- 비트 수 = 5라면, 주소지정(addressing) 할 수 있는 기억 장소의 최대 수 : 2^5 = 32개
1024Byte → 1KByte → 2^10
1024KByte → 1MByte → 2^20
1024MByte → 1Gbyte → 2^30
즉, 32라면 32는 2^32 되고 2*2*2^30된다. 더 쉽게 풀게되면 2^32는 2^30으로 잘라내고 나머지 2^2은 지수로 표현했기때문에 2*2가 나온것이다.
1. 데이터의 기억장치 저장
단어(word) 단위로 저장된다. 1word=4byte(32bit)
단어 : 각 기억 장소에 저장되는 정보의 기본 단위로서, CPU에 의해 한번에 처리될 수 있는 비트들의 그룹이다.(레지스터크기와 비슷)
*메모리주소 저장값이 bits일때,4bit → 16Byte / 메모리주소 저장값이 word일때, 4word → 64byte
# CPU와 기억장치의 접속
시스템 버스(System bus) : CPU와 시스템 내의 다른 요소들 사이에 정보를 교환하는 통로.
-주소 버스(address bus) : CPU가 외부로 발생하는 주소 정보를 전송하는 신호 선들의 집합이고,주소 선의 수는 CPU와 접속될수있는 최대 기억장치 용량을 결정한다.
-데이터 버스(data bus) : CPU가 기억장치 혹은 I/O장치와의 사이에 데이터를 전송하기 위한 신호 선들의 집합이고, 데이터 선의 수는 CPU가 한번에 전송할 수 있는 비트수를 결정한다.
-제어 버스(control bus) : CUP가 시스템 내의 각종 요소들의 동작을 제어하기위한 신호 선들의 집합. 즉, 데이터나 주소가 잘 갔고, 잘받았는지 확인하는 작업
*메모리는 주소와 공간으로 이루어져있다.
메모리공간 |
00000000 |
00000001 |
|
00000002 |
|
00000003 |
|
00000004 |
|
00000005 |
|
FFFFFFFE |
|
FFFFFFFF |
공간과 주소
(주소는 8자리로 이루워져있고 하나가 4Byte이다. 4*8=32byte 총2^32개의 주소)
① 제어 버스(control bus)
ⓐ 기억장치 읽기/쓰기 신호
ⓑ I/O읽기/쓰기(I/O Read/Write)신호
ⓒ 인터럽트(interrupt)신호 : CPU에게 신호를 주는것. (I/O장치 → CPU) CPU는 하던일을 멈춘다. ex)학생이 선생한테 질문
ⓓ 버스 제어(bus control)신호
② 주소 버스(address bus)
ⓐ 주소 버스의 비트 수 = 16bit라면, 최대 2^16=64k개의 기억 장소들의 주소지정 가능하다.
③ 데이터 버스(date bus)
ⓐ 데이터 버스 폭 = 32bit라면, CPU와 기억장치 간의 데이터 전송은 한번에 32bit씩 가능하다.
# CPU와 시스템 버스 간의 접속
- 주소 버스 : 단방향성(unidirectional)
주소는 CPU로부터 기억장치 혹은 I/O장치들로 보내지는 정보
- 데이터 버스, 제어 버스 : 양방향성(bidirectional)
읽기와 쓰기 동작을 모두 지원
*명령어가 주소를 자르기때문에 CPU는 명령어한테 주소를 요청한다. 기억장치(memory)는 단순히 주소를 CPU에게 보내주는 역활만 한다. 순서를 보면 명령어(주소 전달) → CPU(주소를 알려주고 값요청) → 기억장치(주소값을 전달) →CPU
*PC(Program Counter) : 코드부분의 주소를 알려준다.(추후에 배울예정)