1. 2013-2컴퓨터기초설계 중간 고사(100)
Basic Computer Design
Date: 2013-10-25
1. Computer 구조에서 CPU – northbridge - southbridge 구조가 필요한 이유는
무엇인가? (20)
- CPU는 고속으로 구동되지만 CPU 외부에 있는 memory, graphics, 주변 장
치는 저속으로 구동됨
- 빠른 CPU가 느린 memory, graphics, 주변 장치의 속도에 맞추면 전체
system의 속도가 느려지므로 이를 해결하기 위한 controller로 northbridge,
southbridge 구조를 사용함
- Northbridge는 상대적으로 속도가 빠른 memory, graphics와 같은 고속 소자
를 CPU에 연결하기 위해 사용하며, southbridge는 상대적으로 속도가 느린
소자를 northbridge를 통해 CPU와 연결함
2. CPU 내부에 장착된 cache가 register 및 memory(DRAM or SRAM)와의 공
통점 및 차별화되는 특성을 구체적으로 설명하시오. (20)
- 공통점: cache, register, memory는 모두 정보를 저장하기 위한 소자임
- Register와의 차이점: register는 memory 용량이 매우 소형이나 cache는 상
대적으로 큼, register는 data read/write 속도가 매우 빠르나 cache는 상대
적으로 느림
- Memory와의 차이점: cache는 memory보다 상대적으로 저용량, 하지만
CPU 내부에 장착되어 있고 data read/write 속도도 빠르기 때문에 memory
보다 data 처리 속도가 훨씬 빠름
3. Machine cycle을 구성하는 4대 요소를 쓰고 각 요소가 하는 일을“a = 12 x
34”명령 처리를 예로 들어 구체적으로설명하시오. (20)
2. - Fetch: memory(주로 DRAM)에 있는 instruction/data를 register로 가져옴
예) memory에 “a = 12 x 34” 형태로 표현된 instruction/data를 register로 가
져옴
- Decode: CU에서는 instruction을 해독하여 ALU가 실행할 수 있는 준비를
함
예) CU에서 “12 x 34”를 분석하여 ALU가 곱셈을 할 준비를 함
- Execute: ALU에서 실제 연산을 수행함
예) ALU에서 12와 34를 실제로 곱함
- Store: ALU에서 계산된 결과를 register나 memory에 저장함
예) ALU에서 얻은 곱셈 결과를 memory에 있는 a 변수에 저장함
4. Arduino Sketch 언어를 이용해 다음 작업을 programming하시오.반드시
setup()과 loop() 함수를 사용할 것. (40)
1) Arduino Uno의 Digital 7번에 연결된 LED를 1초 동안 켠 후 1초 동안 끄고
Digital 8번에 연결된 LED는 2초 동안 켠 후2초 동안 끄는 작업을 계속 수행
(20)
int nLed1 = 7;
int nLed2 = 8;
void setup() {
pinMode(nLed1, OUTPUT);
pinMode(nLed2, OUTPUT);
}
void loop() {
digitalWrite(nLed1, HIGH); digitalWrite(nLed2, HIGH);
delay(1000);
digitalWrite(nLed1, LOW), delay(1000);
digitalWrite(nLed1, HIGH); digitalWrite(nLed2, LOW);
delay(1000);
3. digitalWrite(nLed1, LOW), delay(1000);
}
2) PC keyboard로 문자열 입력을 받아 monitor에 출력하고 문자열의 수만큼
Arduino Uno의 내장 LED(Digital 13번에 연결됨)를 문자수 만큼 0.5초 on, 0.5
초 off가 반복되는 작업, 여기서 serial port의 연결 속도는 9600 bps를 가정
(20)
intnLed = 13;
void setup() {
pinMode(nLed, OUTPUT);
Serial.begin(9600);
}
void loop() {
String str;
while (Serial.available() > 0)
str += (char)Serial.read();
intnLen = str.length();
if (nLen> 0) Serial.println(str);
else
delay(100);
for (inti = 0; i<nLen; i++) {
digitalWrite(nLed, HIGH); delay(500);
digitalWrite(nLed, LOW), delay(500);
}
}