[2015-1] 정보통신기초
Week 3 : 데이터의 조작
담당교수 : 최 윤 정
Chapt.2 데이터의 조작
2.1 컴퓨터 구조
2.2 기계어
2.3 프로그램의 실행
2.4 연산명령
2.5 다른 장치와의 통신
2.6 기타 구조
목차
2
2.1 컴퓨터 구조
CPU( 중앙처리장치 , 프로세서 ) 연산장치
제어장치
레지스터 : 범용 , 용도별
버스
메모리
메인보드
디스크 ..3
H/W 구성요소
4
기본레지스터
5
메인보드
6
7
칩셋 (Chipset) 여러 칩과 회로가 모여 서로 연관된 기능을 수행하도록 설계된 제어 칩 (chip) 들의 조합
(set) 모든 전자제품에는 특수 목적용 칩셋이 들어 있음
컴퓨터 , 휴대전화 , 디지털 TV 등
CPU 프로세서와 함께 시스템 전체를 제어 호환성 ! 대개 메인보드 상에 몇 개의 제어 칩들로 구성
칩셋 내부 회로☞ CPU 를 지원하는 각종 제어 장치들
버스 컨트롤러 , 메모리 컨트롤러 , I/O 컨트롤러 , 인터럽트 컨트롤러 , 타이머 등 다양한 장치들
8
칩셋과 ROM 은 메인보드에 장착
방열판으로 덮은 칩셋롬 바이오스 칩
칩셋
9
데스크탑 컴퓨터의 메인보드
대만 기가바이트 motherboard (2013)
I/O 확장 슬롯
I/O포트
I/O 커넥터
CPU 소켓
메모리 슬롯
칩셋
배터리
전원 커넥터
10
Quiz : 빈칸채우기
대만 ASUS motherboard (2013)
I/O 확장 슬롯
I/O 포트
I/O 커넥터
CPU 소켓
메모리 슬롯
칩셋
배터리
전원 커넥터
11
노트북의 메인보드
미국 Apple MacBook Air 13” (2013)
12
태블릿 컴퓨터의 메인보드
미국 Apple iPad Air (2013)
13
스마트폰의 메인보드 ①
미국 Apple iPhone 5s 메인보드 (2013)
14
스마트폰의 메인보드 ②
한국 Samsung Galaxy S4 메인보드 (2013)
15
컴퓨터 시스템의 동작
컴퓨터 시스템 : 디지털 형태의 정보를 입력 받아 메모리에 저장된 명령어 목록 ( 프로그램 )에 따라 처리하고 결과를 출력하는 일종의 고속 전자계산기 .
1) 컴퓨터 시스템의 동작과정
아래와 같은 순서로 동작하며 , 제어장치가 모든 동작을 제어한다 . 입력 장치를 통해 정보를 입력 받아 메모리에 저장한다 . 메모리에 저장한 정보를 프로그램의 제어에 따라 인출 , 산술 장치나 논리 장치에서 처리한다 . 처리한 정보를 출력 장치에 표시하거나 디스크 ( 보조기억장치 ) 에 저장한다 .
※ 정보 : 명령어와 데이터로 구분
- 명령어 : 실행할 산술 , 논리 연산 동작을 명시하는 문장 . - 프로그램 : 작업 하나를 수행하기 위한 명령어 집합 .
16
명령어 구성
연산 코드 (Operation Code) 와 오퍼랜드 (Operand) 로 구성 . 0 과 1 의 이진 코드화 되어 있으며 프로세서에 따라 길이가 달라짐 .
고정 길이 또는 기능에 따른 가변적 구성 가능 . 실행 전 메인 메모리에 저장 , 한번에 하나씩 프로세서에 전송되어 해석 및 실행 .
[ 그림 1-14] 명령어 구조의 간단한 예
[ 그림 1-15] 메인 메모리에 저장된 명령어 예
17
프로그램 내장 (stored program) 개념
기존 : 데이터는 메모리에 , 프로그램은 CPU 에 ..!
프로그램도 비트패턴으로 인코딩되어 주기억장치에 저장될 수 있다 .
CPU 는 주기억장치에서 명령들을 읽어와서 실행할 수 있다 . fetch - execute
또한 실행될 프로그램을 주기억 장치 안에서 쉽게 변경할 수도 있다 .
18
기계 명령 : CPU 가 인식할 수 있도록 비트 패턴으로 인코딩된 명령
기계어 (machine language): 기계가 인식할 수 있는 모든 명령의 집합
컴파일 과정
SOURCE 파일 기계어 코드로 변환하는 과정 .! .c .o .exe .java .class
19
CPU 구조에 대한 두 가지 철학 – 양대 축
RISC(Reduced Instruction Set Computing) 최소의 기계명령어를 실행하도록 설계하자 . 단순하고 , 빠르고 , 효율적인 소수의 명령
예 : Apple/IBM/Motorola 의 PowerPC
CISC(Complex Instruction Set Computing) 많은 수의 복잡한 명령을 실행하도록 설계하자 . 중복도 괜찮다 .! 편리하고 강력한 다수의 명령
예 : Intel 프로세서들
20
명령어의 종류
데이터 전송 : 한 장소에서 다른 장소로 데이터를 복사한다
mem mem , mem reg, regmem .. 예 ) 서랍 -> 서랍 , 서랍 -> 가방 , 가방 -> 서랍 같은 ^^
연산 : 기존의 비트 패턴을 사용하여 새로운 비트 패턴을
계산한다
and, or, add … 제어 : 프로그램 실행을 지시한다
21
주기억장치에 저장된 값들로 덧셈하기
+ 3 5 단계 1. 덧셈에 사용될 값 중의 하나를 주기억장치에서 가져와 레지스터에
넣는다 . 단계 2. 덧셈에 사용될 또 다른 값을 주기억장치에서 가져와 또 다른
레지스터에 넣는다 . 단계 3. 단계 1, 2 에서 사용된 레지스터들을 입력으로 사용하고 결과는 또
다른 레지스터에 저장하도록 덧셈 회로를 작동시킨다 . 단계 4. 결과를 주기억장치에 저장한다 . 단계 5. 멈춘다 . 끝 !
22
나눗셈 연산
/ 6 3 ( 보통 , / 는 몫을 % 는 나머지를 구합니다 ) 단계 1. 메모리에서 값 하나를 받아와서 레지스터에 LOAD 하라 . 단계 2. 메모리에서 또 다른 값 하나를 받아와서 또 다른 레지스터에 LOAD
하라 . 단계 3. 두 번째 값이 0 일 경우 , 단계 6 으로 점프하여라 . 단계 4. 첫 번째 레지스터의 내용을 두 번째 레지스터의 나누어 얻은 몫을 세
번째 레지스터에 넣어라 . 단계 5. 세 번째 레지스터의 내용을 메모리에 STORE 하라 . 단계 6. STOP.
23
그림 2.4 부록 C 의 컴퓨터 구조
2-24
** 이제 , 앞서 본 비트열을 이용하여 , 명령코드와 연산에 이용되는 데이터를 저장합니다 .
기계 명령어의 요소
명령 코드 (op-code): 실행할 명령을 지정한다
피연산자 (operand): 명령에 관한 추가 정보를 제공한다
피연산자에 대한 해석은 명령 코드에 따라 달라진다 .
예 )
25
부록 C : 12 개의 기계어 보기
3 번은 Store 기능 : reg 내용을 mem(addr) 작업판 (책상 , 도마 등 ) 위 물건을 빈 그릇으로 .!
26
덧셈코드 (slide 22 의 기계어 표현 ) 덧셈에 쓰일 operand 가 각각 6c, 6d 에 들어있다고
가정 1 번 : load (mem(addr) reg) : 그릇 안 데이터를
도마위로 ! 3 번 : store(reg mem(addr)) 5 번 : add C(12) 번 : halt.
인코딩된 명령 해설
156C 주소가 6C 인 메모리 셀에 들어있는 비트 패턴으로 5 번 레지스터를 채운다 .
166D 주소가 6D 인 메모리 셀에 들어있는 비트 패턴으로 6 번 레지스터를 채운다 .
50565 번 레지스터와 6 번 레지스터의 내용에 대해 2 의 보수 덧셈을 수행하고 , 그 결과를 0 번 레지스터에 넣는다 .
306E 0 번 레지스터의 내용을 주소가 6E 인 메모리 셀에 저장한다 .
C000 멈춘다 . 27
간단한 명령어의 예
3 6 8 A : 3 : store , reg memory 6 : 레지스터 코드 8A : 메모리 주소 즉 , 6 번 레지스터의 내용을 메모리주소 8A 에 store.
4 0 F 4 : 4 : move (==copy) , reg reg 0 : pass F : F 번 레지스터 4 : 4 번 레지스터
28
프로그램의 실행
두 개의 용도 지정 레지스터로 제어
프로그램 카운터 (PC): 다음 명령의 주소
명령 레지스터 (IR): 현재 명령
기계 주기 (machine cycle) 인출 (fetch) 해석 (decode) 실행 (execute)
29
기계어 사이클
30
B : JUMP
B 2 5 8 : 점프규칙 -0 번 레지스터 값과 비교한다 . 2 번 레지스터의 값과 0 번 레지스터의 값을 비교한다 . 같으면 메모리 주소 58 번으로 JUMP! 이제 , 58 번에 있는 명령어가 인출되어 실행됨 .
B 0 5 8 : 비교할 레지스터가 0 이므로 언제나 항상 같음 . 따라서 , 항상 58 번으로 JUMP.
31
32
연산명령
논리 연산 : AND, OR, XOR … 마스킹 (masking) :
AND : 비트패턴 중 임의의 값을 알아오거나 , 변경
OR : 비트패턴 중 임의의 값을 1 로 set 할 때 ..
예 ) 10101011 중 하위 4bit 만 가져올 때 00001111 과 AND
______________________________ 결과 00001011
예 ) 10101011 중 상위 4bit 를 모두 1 로 set 할 때 11110000 과 OR
______________________________ 결과 11111011
33
연산명령
회전 (rotate) 및 자리 이동 (shift): 회전식 자리 이동 (circular shift) 논리적 자리 이동 (logical shift) :
밖으로 나가는 비트는 버리고 빈자리는 0 으로 채우자 . 왼쪽이동은 곱하기
오른쪽 이동은 나누기 효과
산술적 자리 이동 (arithmetic shift) 오른쪽 이동시에는 빈자리는
원래 있던 값으로 채운다 .예 ) -0xFFFF vs. 0xFFFF
34
연산명령
산술 연산 : 덧셈 , 뺄셈 , 곱셈 , 나눗셈
정확한 동작은 값들의 인코딩 방식에 따라 달라진다
2 의 보수
부동소수점
35
다른 장치와의 통신
제어기 (controller): 컴퓨터와 장치와의 통신을 처리하는 중개 장치
각 장치유형마다 전용 제어기가 존재함
범용 제어기 : USB 와 파이어와이어 (FireWire) 포트 (port): 장치를 컴퓨터에 연결하는 지점
메모리 사상 (memory-mapped) I/O: CPU 가 주변장치를 메모리
셀처럼 취급하며 통신하는 방식
36
컴퓨터의 버스에 연결된 제어기들
37
메모리 - 사상 I/O 의 개념적 표현
38
다른 장치와의 통신
DMA(Direct Memory Access): 제어기가 버스를 경유하여
주기억장치에 접근
폰노이만 병목현상 : 폰노이만 병목현상 : 불충분한 버스 속도로 인한 성능 저하
현상
디스크에서 메모리로 데이터를 읽어오는 동안 ( 제어기가 담당 ) CPU 는 다른
작업을 할 수 있다 .! 즉 , 동시에 두 가지 일을 할 수 있다 .! 그러나 , 버스 사용권에 대한 경쟁으로 정체현상이 올 수 있다 .
핸드셰이킹 (handshaking): 컴퓨터 구성요소 사이의 데이터 전송 조정 과정
단방향 vs. 양방향 ! ‘상태단어’ 를 이용하여 장치들의 상태를 전송한다 .
예 ) 파일의 상태단어 : 쓰기중 , 읽기중
프린터의 상태단어 : 최하위비트 - 용지걸림 , 용지없음 …39
다른 장치와의 통신
장치들 사이의 통신을 처리하는 방식에 따라
병렬 통신 (parallel communication): 다중 통신 경로를 사용하여 비트들을 동시에 전송 . 빠르지만 복잡한 구조 .
직렬 통신 (serial communication): 단일 통신 경로를 사용하여 한 번에 한 비트씩 전송 . 단순한 회로 .
40
통신 속도
측정 단위
Bps: Bits per second Kbps: Kilo-bps (1,000 bps)
8Kb == 1kB , B = byte, b = bit Mbps: Mega-bps (1,000,000 bps) Gbps: Giga-bps (1,000,000,000 bps)
대역폭 (bandwidth): 최대 전송 속도
41
데이터 조작에 관한 프로그래밍
프로그래밍 언어는 기계의 세부사항들을 사용자로부터 감춘다 : 프로그래머는 앞서 본 기계의 환경적 요소를 고려하되 , 여러
내부 상황에 의존하지 않는다 .
하나의 파이썬 문장이 수십 개 이상의 기계어 명령에 대응될 수도
있다 . 프로그래머들이 프로세서가 RISC 인지 CISC 인지 신경 쓸 필요
없다 . 변수들에 값을 저장하는 것은 LOAD, STORE, MOVE 등의 명령
코드 조합에 대응될 수 있다 .
2-42
비트 단위 연산을 위한 파이썬 코드
print(bin(0b10011010 & 0b11001001)) # Prints '0b10001000'
print(bin(0b10011010 | 0b11001001)) # Prints '0b11011011'
print(bin(0b10011010 ^ 0b11001001)) # Prints '0b1010011'
2-43
제어 구조 : C 와 조금 다릅니다 . if 문 : if (water_temp > 140) : print('Bath water too hot!') while 문 : while (n < 10) : print(n) n = n + 1
2-44
함수
함수 : 주어진 매개변수들에 대해 수행될 일련의 연산을 위한에 대해 이름
함수 호출 (function call): 식이나 문장에서 나타나는 함수
2-45
x = 1034y = 1056z = 2078biggest = max(x, y, z)print(biggest) # Prints '2078'
함수 ( 계속 ) 인수 값 : 매개변수에 주어지는 값 결과 있는 함수는 값을 리턴한다 . void 함수 , 또는 프로시저는 값을 리턴하지 않는다 .
2-46
sideA = 3.0sideB = 4.0# Calculate third side via Pythagorean Theoremhypotenuse = math.sqrt(sideA**2 + sideB**2)print(hypotenuse)
입력과 출력
# Calculates the hypotenuse of a right triangle
import math
# Inputting the side lengths, first trysideA = int(input('Length of side A? '))sideB = int(input('Length of side B? '))
# Calculate third side via Pythagorean Theoremhypotenuse = math.sqrt(sideA**2 + sideB**2)
print(hypotenuse)
2-47
마라톤 훈련 지원 프로그램 예제
# Marathon training assistant.
import math
# This function converts a number of minutes and # seconds into just seconds.def total_seconds(min, sec): return min * 60 + sec
# This function calculates a speed in miles per hour given# a time (in seconds) to run a single mile.def speed(time): return 3600 / time
2-48
마라톤 훈련 지원 프로그램 예제 ( 계속 )# Prompt user for pace and mileage.pace_minutes = int(input('Minutes per mile? '))pace_seconds = int(input('Seconds per mile? '))miles = int(input('Total miles? '))
# Calculate and print speed.mph = speed(total_seconds(pace_minutes, pace_seconds))print('Your speed is ' + str(mph) + ' mph')
# Calculate elapsed time for planned workout.total = miles * total_seconds(pace_minutes, pace_seconds)elapsed_minutes = total // 60elapsed_seconds = total % 60
print('Your elapsed time is ' + str(elapsed_minutes) + ' mins ' + str(elapsed_seconds) + ' secs')
2-49
그림 2.15 마라톤 훈련 데이터 예
2-50
Time Per Mile Total Elapsed Time
Minutes Seconds Miles Speed (mph) Minutes Seconds
9 14 5 6.49819494584 46 10
8 0 3 7.5 24 0
7 45 6 7.74193548387 46 30
7 25 1 8.08988764044 7 25
기타 컴퓨터 구조
처리율 (throughput) 개선을 위한 기술 : 파이프라이닝 (pipelining): 일련의 작업주기에 따라 단계를
중첩시키자 . 쉬지 않도록 . 병렬 처리 (parallel processing): 여러 개의 프로세서를 동시에
사용하자 . SISD(single instruction stream, single data stream): 병렬처리 X
MIMD(multiple instruction stream, multiple data stream): 여러 개의 프로그램이 각자 다른 데이터를 사용하여 수행됨
SIMD(single instruction stream, multiple data stream) : 동일한 프로그램이 여러 데이터에 적용됨
자체적으로 Memory-cpu 를 갖는 여러 개의 장치들을 묶자 .51
과제 # 프로그래밍 코드 : Python/php/C/java 중 한가지는 시작합시다 . 단원 복습문제 : 4 문제
4,5,7,8
사회적 논제 : 4 번 : 다른 누군가가 만들고 , 유지하고 발생하는 문제를 고칠 것이기 때문에 개인이
기계의 내적 세부사항을 알 필요 없다는 개인의 태도는 윤리적으로 합당한가 ? 컴퓨터의 경우와 자동차 , 핵발전소의 경우 .. 같은 생각인가 ?
7 번 : 오버플로우나 절삭오차로 인해 발생하는 산술적 오류의 결과로 금융분야나 운항
시스템등에서 대형사고의 발생을 상상하는 것은 어렵지 않다 . 이미지 저장 시스템에서
미세한 부분을 잃음으로 발생할 수 있는 결과는 무엇인가 ? 감시 , 의료진단의 예로
생각해보자 . 처리단위의 문제 : 우주선 폭발사고의 원인 단위 해석이 달라서… . 금융 계산시 : 1007 원 89 전 올림 / 버림 52