CO&D는 Computer Organization and Design의 준말로, 컴퓨터구조론을 배우면서 필기한 내용들을 담도록 하겠다.
이번 시간에는 컴퓨터의 구조에 대해 알아보도록 하겠다.
-컴퓨터 구조론이라는 과목은 컴퓨터의 성능 향상 방향으로 구조를 개선해왔던 과정을 배우는 것이다.
→ 성능 향상은 속도, 에너지, 전력 소비량(특히 모바일은 배터리 제한)을 줄이는 것이다.
- 논리회로 과목에서의 (ALU, Adder, MUX(멀티플렉스))의 개념이 필요하다.
● Computer Architecture
- 컴퓨터의 세 가지 기본 구성 요소 : CPU, Memory, I/O
① CPU(Central Process Unit) : 컴퓨터에서 유일하게 일하는 곳
→ 연산 작업 (+, -, *, /, AND, OR, SHIFT 등), 명령어 처리
② Memory(MEM)
- 명령어, data, stack으로 구성되어 있음.
→ 모두 기계어로 저장되어 있음. 컴퓨터가 이해할 수 있는 건 2진수 기계어뿐.
③ I/O
- printer, modems, secondary storage(disks, tapes, etc), analog converters, motor controllers, displays, ...
④ Optional Additional Memory Storages (보조기억장치)
- main memory보다 훨씬 크지만 CPU에서 접근하는 데 더 시간이 오래 걸릴 것.
- off-board memory, multiprocessor shared momory
* 구성 요소들 간 상호작용 단계
① CPU가 첫 번째 명령어를 수행하기 위해서 주소를 main memory에게 버스를 통해 준다.
② 그에 해당하는 명령어를 main memory가 CPU에게 넘겨줌.
→ 예: 만약 덧셈이라면 두 개의 피연산자가 main memory로부터 전달될 것.
③ CPU 안에는 여러 회로가 있지만 만약 덧셈을 한다면 대표적인 ALU HW를 쓸 것.
→ 메모리로부터 불러온 데이터를 바로 ALU라는 논리회로에 연결해서 덧셈을 구현하는 게 아니라 메모리로부터 들어온 데이터, 명령어들은 다 CPU 안에 있는 메모리인 register에 일단 저장
④ 이렇게 레지스터에 저장된 데이터를 논리회로에 넣는 것. 덧셈이라는 control 신호도 전달됨.
⑤ 연산한 결과값도 다시 레지스터에 저장.
⑥ 필요에 따라 bus를 통해 main memory의 어떤 공간에 다시 저장.
* Memory
-메모리는 2개의 큰 구역으로 나뉘어짐.
→ RAM, ROM
- ROM은 비휘발성, RAM은 휘발성.
- ROM은 Read-Only Memory로 이 안에 booting program이 있는 것.
* HDD(Hard Disk Drive)
- 여러 프로그램들이 저장되어 있다.
→ OS, HWP, I/E, Game, ...
* HDD와 MEM의 관계
① HWP, I/E 등이 하드디스크에 있을 때는 "프로그램(program)"이라고 불린다.
전원이 켜지면 부팅 프로그램(booting program)은 하드 디스크 드라이브를 쫙 훑어서 OS를 찾아서 Main Memory RAM에 올린다.
② 그 뒤 OS는 메인 메모리 빈 공간에 다른 필요한 프로그램들을 올린다.
③ 이렇게 프로그램들이 메인 메모리에 올라가면 "프로세스(process)"가 된다.
→ 하드 디스크에 있는 건 CPU에 연결되어 있지 않아서 아무런 일을 할 수 없다. 그러나 일단 프로그램이 메인 메모리에
올라가면 버스를 통해서 CPU에서 사용 가능.
● Classes of Computers
⊙ Personal Computers (PC)
- 개인 혼자 사용함. 한 명의 사용자.
- 큰 목적이 있는 것이 아니라 범용이다. 여러가지 프로세스를 사용할 수 있게 하는 것.
- 게임, 한글 프로그램, 인터넷 익스플로러 등 여러 다양한 소프트웨어를 사용할 수 있다.
⊙ Server Computers
- 여러 명이 사용하는 것
- 용량이 크고 성능이 좋고 신뢰도가 높아야 한다. (High capacity, performance, reliability)
→ 여러 명이 사용해야하니 용량이 크고 성능이 좋아야 한다.
→ 어떤 사용자가 사용하다가 문제가 생기면 OS는 interrupt 시킨다. 그러면 다른 사용자가 사용을 할 수 없으므로
reliability가 중요하다.
→ 사용자 수에 따라, 목적에 따라, 용량에 따라 서버는 크기가 다르다.
- 작은 서버부터 건물 크기의 서버 등 범위가 넓다.
⊙ Supercomputers
- 과학적이고 공학적인 큰 계산들을 처리한다.
→ 예: 날씨 예측 (기상청), 전세계 강수량, 실시간 초단위 정보 등
- computation power가 굉장히 세야한다.
- 슈퍼 컴퓨터를 사용하고자하는 사용 기관이라던지 사용자들이 많지 않아서 컴퓨터 시장에서는 굉장히 작은 부분을
차지한다.
⊙ Embedded computers
- 어떤 디바이스들 안에 속해있어서 주로 보이지 않는다.
→ 카메라, 프로젝터, 프린터, 냉장고, 세탁기 등 안에 있는 작은 구성 요소
- 엄중한 power, performance, cost constraints를 지켜야 할 것.
● 컴퓨터구조론에서 배우게 될 것
- 프로그램을 기계어로 바꾸는 능력 & 어떻게 하드웨어가 그 기계어를 실행하는지
→ 기계어로 잘 구조화시켜야 한다. 우리가 짠 소스코드를 기계어로 얼마나 잘 바꾸는가.
- 기계어 → 하드웨어와 소프트웨어 인터페이스의 역할을 한다.
- 프로그램 성능과 어떻게 향상될 수 있는지
-어떻게 하드웨어 디자이너가 성능을 향상시키는지
● Below your Program
① Application software
- High-Level Language(HHL)로 작성되어있다.
② System software
- Compiler : HHL code를 기계어로 바꿔준다.
- Operating System : 시스템들을 관리하기 때문에 "시스템 소프트웨어"라고 한다.
→ 입출력 관리
→ 메모리와 저장소 관리
→ Scheduling Tasks & sharing resources
→ 메모리에 한 개 만이 아니라 여러 개의 프로세스를 올려서 사용할 때 어떤 프로세스를 먼저 수행할 것인가
③ Hardware
- processor, memory, I/O controller
* 계층 구조
- application에는 HHL로 본인이 짠 프로그램이 C, C++ 등의 소스코드로 존재할 수 있고, 주로 Hard Disk Drive에
저장되어있다.
- O/S는 소프트웨어를 하드웨어와 관련되게 잘 연결하고 manage하는 소프트웨어이다.
- 한글 파일을 메모리에 올릴 때 Memory Management OS라는 소프트웨어를 통하고, 다시 Hard Disk Drive에
올리던지 한다.
● Levels of Program Code
① High-level language
- 프로그램 도메인에 가까운 추상화 단계
- productivity
- portability : 쉽게 실행하게 여러 다양한 기계에서 독립적으로 돌릴 수 있다.
② Assembly Language
- 명령어의 글자적 표현
③ Hardware representation
- 2진수 (비트 단위)
- 명령어와 데이터가 기계어로 바뀐 것(인코딩)
- 프로그램 코드는 위의 3개의 단계로 이루어져 있다.
① High-level language
HHL은 기계가 이해하지 못하기 때문에 기계어로 바꿔야한다.
- HHL은 사용자(사람)가 컴퓨터에 수행하고자 하는 명령들이다.
② Assembly Language Program
- 사람이 이해하기 쉬운 기계적 과정을 거친다.
→ 어셈블리어가 있는 이유는 사람과 컴퓨터 모두 서로 이해하기 쉽게 하기 위해서이다.
HHL에서 기계어로 바꿀 때 기계어를 실행시키는 데 향상시키도록 컴퓨터를 구조화시켜야한다.
③ Binary machine language program
- 각각은 비트이다.
- 각 명령어에 대해서 기계어로 바로 바꾸면 좋은데 그러려면 컴퓨터 구조를 아주 잘 알아야한다.
바로 바꾸는 것은 굉장히 빨라서 해킹할 때 쓰이는 방법이다.
컴퓨터 구조를 매우 자세히 알아야 명령어를 쓸 수 있다면 생산성이 떨어지게 되고, 그래서 쉽게 코드를 작성할 수
있는 HHL을 사용한다.
● Inside the Processor (CPU)
① Datapath : 데이터에 대한 연산을 수행한다.
② Control : sequences datapath, memory, ...
③ Cache Memory → register
- 작고 빠른 SRAM 메모리이고 데이터의 직접 접근을 위해 필요하다
* SRAM과 DRAM
- SRAM : CPU 안에 있는 레지스터들로 접근이 굉장히 빠르다.
- DRAM : 메모리에 있는 메모리. 굉장히 작으면서 굉장히 빠르지만 매우 비싸다. CPU가 바로 데이터에 접근할 수 있다.
다음 시간에는 본격적으로 어떻게 컴퓨터의 성능을 향상시키는지 보도록 하겠다.