2014-2 컴퓨터기초설계 중간고사(100)
Basic Computer Design
Date: 2014-10-23
1. Computer 구조에서 von Neumann 방식은 무엇을 뜻하나? (10)
- 어떤 특정한 계산을 수행하기 위해 관련된 산술-논리 연산을 Hardware적
으로 직접 구성하지 않고, 미리 효율적인 산술-논리부(ALU)를 설계한 후
계산에 필요한 ALU를 적절히 호출하여 계산하는 방식
- 이 방식은 순차적으로 ALU의 일부 기능을 사용해야 하므로 필요한 연산을
제어하기 위한 제어부(CU)가 있다.
- 또한, ALU 제어를 위한 계산 절차는 Memory에 담겨 순차적으로 CU에 의
해 해독되어 명령어로 해석되며, 이 명령어에 따라 ALU가 적절히 실행된
다.
2. CPU 내부에 장착된 Cache의 크기에 따라 CPU의 Data 접근 속도는 큰 영
향을 받는다. 다음에 답하라. (30)
1) Cache가 CPU에 도입된 이유를 써라. (10)
- CPU 내부의 Register는 고속 접근이 가능하나 용량이 매우 작으므로 대부
분의 명령어나 Data는 DRAM에 보관되어 있다. 하지만 DRAM은 Register
에 비해 상대적으로 느리므로, DRAM 정보의 복사본 역할을 하면서 CPU가
빠른 접근을 할 수 있는 대용량 저장소가 필요해진다. 이 역할을 하는
CPU 내부의 소자가 Cache이다.
2) Data 접근 속도가 커지려면 Cache는 적절한 용량을 가져야 한다. 이 이유
를 논리적으로 설명하라. (20)
- Cache가 너무 작으면 DRAM의 명령어나 Data의 극소량만 Cache에 보관할
수 있으므로 CPU는 빈번하게 DRAM에 접근하여 명령어나 Data를 가져와
야 한다. 그래서, 적은 Cache는 유용성이 거의 없을 수 있다.
- 어느 정도까지는 Cache가 클수록 DRAM 저장본을 CPU 내부에 있는
Cache에 저장할 수 있으므로 CPU의 DRAM 접근 속도가 등가적으로 빨라
2.
진다. 하지만 Cache가너무 크게 되면 Cache 자체를 검색하는데 과도한
시간이 발생하여 CPU의 등가적인 DRAM 접근 속도가 떨어질 수 있다. 왜
냐하면 Cache에 원하는 정보가 없는 경우, CPU는 DRAM에 접근하여 명령
어나 Data를 가져와야 하므로 정보 획득 속도가 저하된다.
3. 요즘 다양한 응용에 Flash Memory가 쓰이고 있다. DRAM 혹은 EEPROM
과 차별화되는 Flash Memory의 장점과 단점을 논증하라. (20)
- Flash Memory는 EEPROM보다는 정보 접근 속도가 높아 빠른 읽기/쓰기가
가능하다. Flash Memory는 EEPROM보다는 상대적으로 고용량인 기억 장치
로 제작이 가능하다.
- DRAM은 전압이 제거되면 내용이 없어지지만 Flash Memory는 전기 공급
이 없더라도 기록된 내용을 장기간 저장할 수 있다.
- DRAM은 쓰기 회수 제한이 없지만 Flash Memory는 쓰기 회수가 유한하므
로 Software적으로 쓰기 회수를 헤아려 전영역이 골고루 쓰여지도록 제어
해야 한다.
4. Arduino Sketch 언어를 이용해 다음 작업을 Programming하시오. 반드시
setup()과 loop() 함수를 사용할 것. (40)
1) Arduino Uno의 Digital 7번에 연결된 LED를 1초 동안 켠 후 1초 동안 끄
고, 다음에 2초 동안 켠 후 2초 동안 끄고, 이처럼 실행이 될수록 On/Off 시
간이 1초씩 계속 늘어나는 동작 (20)
int nLed = 7;
int nSec = 1;
void setup() {
pinMode(nLed, OUTPUT);
}
void loop() {
3.
digitalWrite(nLed, HIGH); delay(nSec*1000);
digitalWrite(nLed,LOW); delay(nSec*1000);
nSec++;
}
2) PC Keyboard로 영어 문자열을 입력받아 대소문자에 관계없이 대문자로만
Monitor에 출력하는 작업; 여기서 Serial Port의 연결 속도는 9600 [bps]를
가정(20)
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
char ch = Serial.read();
if (ch >= ‘a’ && ch <= ‘z’) {
ch += ‘A’ – ‘a’;
}
Serial.print(ch);
}
delay(100);
}