컴퓨터 구조 및 설계 1장
1장 컴퓨터 추상화 및 관련 기술
1.2 컴퓨터 구조 분야의 8가지 위대한 아이디어
- Moore의 법칙을 고려한 설계
- Moore의 법칙: 18~24개월마다 칩에 집적되는 소자의 수가 2배가 된다.
- 빠른 변화를 고려한 설계를 해야한다.
- 프로젝트의 시작 시점보다 종료 시점의 기술을 예상해야한다.
- 설계를 단순화하는 추상화
- 하위 수준의 상세한 사항을 안보이게 함으로써 상위 수준 모델을 단순화한다.
- 자주 생기는 일을 빠르게(common case fast)
- 드물게 생기는 일을 최적화하는 것보다 성능 개선에 도움이 된다.
- 병렬성을 통한 성능 개선
- 작업을 병렬적으로 수행하여 성능을 높이는 설계를 해야한다.
- 파이프라이닝을 통한 성능 개선
- 파이프들은 파이프라인의 각 스테이지에 해당된다.
- 예측을 통한 성능 개선
- 메모리 계층 구조
- 최상위 계층: 비트당 가격이 제일 비싸지만 작고 빠른 메모리를 사용한다.
- 최하위 계층: 느리지만 비트당 가격이 제일 싼 메모리를 사용한다.
- 삼각형 모양이 속도와 가격과 크기를 나타낸다.
- 여유분을 이용한 신용도 개선
- 장애를 감지하고 장애가 난 소자를 대치할 수 있도록 여유분을 준비하면, 컴퓨터의 신용도를 개선할 수 있다.
1.3 프로그램 밑의 세계
- 시스템 소프트웨어 중 핵심이 되는 두가지는 운영체제와 컴파일러이다.
- 운영체제(operating system)
- 사용자 프로그램과 하드웨어 간의 인터페이스 역할
- 각종 서비스와 감독 기능을 제공한다.
- 기본적 입출력 작업의 처리
- 보조기억장치 및 메모리 할당
- 컴퓨터를 동시에 사용하는 여러 응용들 간의 컴퓨터 공유 방법 제공
- ex) Windows, Linux, iOS
- 컴파일러(compiler)
- 상위 수준 언어(C, C++, 자바, Visual Basic, …)로 작성된 프로그램을 하드웨어가 실행할 수 있는 명령어로 번역
- 운영체제(operating system)
상위 수준 언어에서 기계어까지
전자장비와 on, off로 전기신호를 보내 대화할 수 있다. 그래서 기계어는 0, 1로 나타내며 이진수라고 생각한다. 각 문자를 이진 자리수(binary digit) 또는 비트(bit)라고 부른다.
우리가 컴퓨터에 내리는 지시를 명령어라고 한다. 다시말해, 컴퓨터 하드웨어가 이해하고 수행하는 명령이다. 이는 비트들의 집합으로 되어 있으므로 숫자로 생각할 수 있다.
명령어와 데이터를 숫자로 표현하는 것이 컴퓨터의 기초이다.
컴퓨터와 이진수로 대화하는 것이 아닌 사람이 생각하는 것과 비슷한 새로운 표시 방법을 고안해 기호로 된 명령어를 이진수 프로그램으로 번역하는 어셈블러(assembler)를 만들었다. add A, B
를 프로그래머가 작성하면, 어셈블러가 1000110010100000
으로 바꾼다. 여기서 기계 명령어를 기호 형태로 표현한 것을 어셈블리 언어(assembly language)라고 부르며, 기계가 이해하는 언어를 기계어(machine language)라고 한다. 어셈블리 언어는 컴퓨터가 수행할 명령어를 한 줄에 하나씩 써야 하기 때문에 프로그래머에게 기계식 사고방식을 강요한다.
프로그램을 상위 수준 언어(high-level-programming language)로 작성하고 컴파일러가 어셈블리 언어로 번역한다. 다시 어셈블리 언어는 어셈블러가 기계어로 해석해 기계와 대화할 수 있다.
상위 수준 언어의 장점
- 프로그래머가 영어 단어와 수학 기호를 사용해 자연스러운 언어로 생각할 수 있다.
- 일반 문장과 비슷한 읽기 좋은 모양이 된다.
- 사용 목적에 적합한 언어가 다양하게 설계될 수 있다.
- 프로그래머의 생산성을 높여 준다.
- 아이디어를 표현하기 위해 필요한 문장 수가 적다(간결성).
- 프로그램을 개발한 기종과 상관없이 어느 컴퓨터에서든 실행이 가능하다.
- 컴파일러나 어셈블러가 상위 수준 언어 프로그램을 어떤 컴퓨터의 기계어로도 번역할 수 있기 때문이다.
1.4 케이스를 열고
하드웨어는 데이터 입력, 데이터 출력, 데이터 처리, 데이터 저장의 네가지 기본 기능을 수행한다.
컴퓨터의 고전적 구성 요소 다섯가지는 입력, 출력, 메모리, 데이터패스(datapath), 제어(control) 유닛이다.이 중 마지막 두 개는 합쳐서 프로세서(processor)라고 부르기도 한다. 이 구성은 하드웨어 기술과는 독립적이다. 이제까지 존재한 어느 컴퓨터의 어떤 부분이라도 이 다섯 가지 요소 중 하나에 대응시킬 수 있다.
입력장치는 컴퓨터에 데이터를 공급하고, 출력장치는 사용자에게 계산 결과를 보여주는 역할을 한다. 그 외에 무선 네트워크와 같이 입력과 출력을 겸하는 장비도 있다.
프로세서는 프로그램의 지시대로 일을 하는 부분이다. 숫자를 더하고, 검사하고, 입출력장치에 신호를 보내 작동을 지시하는 것 등이 하는 일이다. 프로세서를 CPU(Central Processor Unit)라고 부르기도 한다. 프로세서는 논리적으로 데이터패스와 제어 유닛의 두 부분으로 구성된다. 데이터패스는 연산을 수행하고, 제어 유닛은 명령어가 뜻하는 바에 따라 데이터패스, 메모리, 입출력장치가 할 일을 지시한다.
메모리(memory)는 실행 중인 프로그램과 프로그램이 필요로 하는 데이터를 기억한다.
- DRAM(Dynamic Random Access Memory)
- RAM은 순차 접근 메모리와는 반대로 메모리의 어떤 부분을 읽든지 같은 시간이 걸린다는 것을 의미한다.
- 접근 시간은 50ns 정도
- 집적회로로 만든 메모리의 일종
- DRAM 여러 개를 한데 묶어서 프로그램의 명령어와 데이터를 기억하는 데 사용한다.
- RAM은 순차 접근 메모리와는 반대로 메모리의 어떤 부분을 읽든지 같은 시간이 걸린다는 것을 의미한다.
- 캐시 메모리(cache memory)
- DRAM의 버퍼 역할
- 작고 빠른 메모리
- SRAM(Static Random Access Memory)를 이용한다.
- SRAM은 DRAM보다 빠르지만 집적도(한 개의 집적 회로에 편성되어 있는 소자의 수)가 낮아서 가격이 비싸다.
명령어 집합구조(instruction set architecture)
- 하드웨어와 최하위 소프트웨어 간의 인터페이스
- 기계어 프로그램을 작성하기 위해 알아야 하는 모든 정보
- 명령어, 레지스터, 메모리 접근, 입출력 등
- ABI(Application Binary Interface): 응용 프로그래머에게 제공되는 기본 명령어 집합 + 운영체제 인터페이스
- 실행 하드웨어와 독립적으로 컴퓨터의 기능을 생각할 수 있게 해준다.
- 구조와 구조의 구현(implementation)을 분리해서 생각한다.
- 구현: 구조 추상화를 준수하는 하드웨어
하드웨어와 소프트웨어는 모두 추상화를 이용하여 계층적으로 구성되며, 각 하위 계층의 세세한 부분이 상위 계층에서는 보이지 않도록 한다. 여러 계층의 추상화 중에서 가장 중요한 것은 하드웨어와 하위 계층 소프트웨어 간의 인터페이스인 명령어 집합 구조이다. 이렇게 인터페이스를 추상화함으로써 같은 소프트웨어를 실행하지만 가격과 성능이 다른 여러가지 컴퓨터를 구현할 수 있다.
데이터의 안전한 저장소
- 휘발성 메모리(volatile memory)
- 전원이 끊기면 모든 기억이 지워진다.
- 실행되는 동안 데이터와 프로그램을 기억한다.
- 메인 메모리(main memory/primary memory)
- DRAM
- 비휘발성 메모리(nonvolatile memory)
- 전원을 꺼도 지워지지 않는다.
- 다음번 실행 때까지 데이터와 프로그램을 저장한다.
- 보조기억장치(secondary memory)
- 자기 디스크(magnetic disk)
- 하드 디스크라고도 한다.
- 자성 기록 매체가 코팅된 회전 원ㄴ반으로 구성
- 플래시 메모리(flash memory)
- 개인 휴대용 기기에서 사용
- DRAM보다 느리지만 훨씬 싸고 비휘발성이라는 장점을 가진다.
- 100,000 ~ 1,000,000번 쓰기를 한 후에는 못 쓰게 된다.
- 자기 디스크(magnetic disk)
컴퓨터 간의 통신
네트워크로 컴퓨터를 연결할 때 장점
- 통신
- 컴퓨터끼리 고속으로 정보를 주고 받을 수 있다.
- 자원 공유
- 컴퓨터마다 입출력장치를 따로 갖출 필요 없이 네트워크상의 모든 컴퓨터가 입출력장치를 공유할 수 있다.
- 원격 접근
- 멀리 떨어져 있는 컴퓨터도 쉽게 이용할 수 있다.
네트워크 종류
-
근거리 네트워크(LAN: Local Area Network)
- 지리적으로 제한된 지역에서 데이터를 주고받도록 설계된 네트워크
- ex) 이더넷(Ethernet): 연결 가능 거리 1km, 초당 40Gb 전송 가능
- 라우팅 서비스와 보안을 제공하는 스위치를 사용하면 LAN들을 서로 연결할 수 있다.
-
원거리 네트워크(WAN: Wide Area Network)
- 대륙 전체를 연결할 수 있는 수백 km 이상의 네트워크
- ex) 웹(World Wide Web)
- 광섬유(optical fiber)로 구성하며 통신회사에서 임대해준다.