1. 컴퓨터 시스템과 프로그래밍
1.1 컴퓨터 시스템
2
컴퓨터 시스템
컴퓨터 시스템
– 컴퓨터 시스템은 하드웨어와 소프트웨어로 이루어진다.
하드웨어 소프트웨어
사용자
컴퓨터시스템
4
컴퓨터 시스템
컴퓨터 하드웨어 구성
CPU 주 메모리
보조메모리 HDD SSD DVDROM
DRAM
Pentium I7
입출력장치 키보드 마우스 모니터
Xeon FX
컴퓨터 하드웨어 구성 요소
중앙처리장치(Central Processing Unit; CPU)
– 프로그램의 명령(또는 계산)을 실행하는 주체
– Intel, AMD 에서 제조
– 초당 수백 만개 이상의 명령을 수행. 가장 빠른 컴퓨터 구성요소.
주 메모리(Main Memory)
– CPU가 일을 할 때 공급할 자료를 저장하는 곳. 프로그램과 데이터가 저장되어 있다 (DRAM). 4-16GB를 장착
– 장점 : 속도가 빠르다 단점 : 휘발성 (volatile, DRAM의 특성)
보조 메모리 장치(Secondary Memory)
– 프로그램이나 데이터를 영구적으로 저장하는 기억장치
– 하드 디스크 드라이브, SSD, DVD/CD-RW 드라이브
– 장점 : 자료의 영구 저장 단점 : 속도가 많이 느리다(상대적으로)
입출력 장치(Input/Output Device)
스마트폰 하드웨어 구성 요소
6
중앙처리장치(Central Processing Unit; CPU)
– Application Processor (저전력 설계)
– Qualcomm, Apple, Samsung
주 메모리(Main Memory)
– Mobile DRAM (크기가 더 작고, 전력을 덜 소비)
– 1-3 GB
보조 메모리 장치(Secondary Memory)
– Flash Memory
– 16-128GB
입출력 장치(Input/Output Device)
– 터치스크린, 스피커, WIFI, NFC, GPS, 각종 센서
모든 장치에서 전력 소비가 중요한 요소
생각해 보아야 할 것들
각 장치는 무엇으로 연결되어 있나
– System Bus, USB
시스템의 성능은 무엇에 의해 좌우되는가
– Windows 체험 지수를 살펴보자
더 빠른 시스템을 구성하는 방법은 무엇이고, 이를 위해 어떻게 구성되나
CPU는 계산 이외에 어떤 일을 하는가
– 다른 장치들에게 명령
소프트웨어
컴퓨터 하드웨어를 이용하여 사용자의 목적을 달성하도록 구성된 명령어의 집합
– 운영체제
– 오피스 프로그램 – 게임
– 앞으로 우리가 만들 프로그램
용어
– 운영체제, 시스템 소프트웨어(프로그램), 응용 소프트웨어(프로 그램)
– 응용프로그램, 애플리케이션, App
8
컴퓨터에서 프로그램의 실행
폰 노이만 구조(von Neumann architecture)
– 프로그램 내장 방식(stored program)의 컴퓨터
보조 메모리 주 메모리
프로그램 데이터
명령
CPU 사용자
실행 명령
스마트폰에서 프로그램 실행
한번에 실행되는 프로그램의 수 제한
실행이 완료된 프로그램이더라도 메모리에 일정 시간 동 안 남겨둔다.
AP의 일을 최대한 줄여 배터리 소모를 줄인다.
절전 !!!
1.2 프로그래밍 언어
12
프로그래밍 언어
프로그램을 작성하기 위한 언어
– 사람이 컴퓨터에게 시키고 싶은 내용을 표현하기 위한 표기법 – 그 발전 단계에 따라 기계어, 어셈블리어, 고급언어로 분류
사람 컴퓨터
사람의 언어
기계의 언어
중간 언어
비교적 사람도 잘 이해할 수 있고 쉽게 기계의 언어로 변형할 수 있는 언어 컴파일러란 중간 언어로 작성된 명령을 기계의 언어로 번역하는 도구
프로그래밍 컴파일러
차이가 너무 크다
C 언어의 역사
1972년 Dennis Ritchie가 설계함
– UNIX 운영체제 개발에 사용됨
C 언어에 직접 영향을 준 언어들
– Algol, CPL, B 등 다수
C 언어가 영향을 준 언어들
– C++, Java, PHP, Python 외 대부분
현황
– 지금도 운영체제를 만들 때 C 언어를 이용한다.
– Java 가상머신, Python 등 언어의 컴파일러 모두 C 언어로 만든 다.
C 언어의 특징
장점
– 성능이 좋다(처리속도가 빠르다).
– 이식성이 높다(다양한 하드웨어에서 사용 가능).
– 언어 사용에 융통성이 있다.
– 하드웨어 제어용으로 좋다.
– 운영체제의 신기술이 가장 먼저 적용된다.
– 적용 분야가 넓다.
– 구조화된 언어로서 모듈별 설계가 가능하다(OLD).
– 동적 메모리 관리가 가능하다(OLD).
단점
– 어렵다. 기계어에 가깝다.
– 개발자가 제한되고, 생산성에 한계가 있다.14
C 프로그래밍의 단계
C 언어 Windows Programming
응용 프로그램
개발
C++ / Java
중소 규모 프로젝트 참여
모바일 프로그래밍
3D 그래픽 / 게임
서버 프로그래밍
그 외
C 언어의 활용 (전공과목)
C 프로그래 밍 자료구조
알고리즘 데이터베이
스
네트워크
운영체제 컴퓨터구조
주요 고급 언어
옛날 언어
– C 언어 이전에 개발되어 충분히 많이 사용되었던 언어들.
– FORTRAN, COBOL, BASIC
현재 많이 사용되는 언어
– 호황을 이미 누렸던 언어로, C언어와 동시대 또는 다음 세대를 보낸 언어 – C++, C#, Objective-C, Java, Perl
최근 인기를 얻고 있는 언어
– 강력한 기능과 쉬운 사용법으로, 전문가가 아니더라도 프로그래밍을 가능하 게 해준 언어
– Python, Ruby
새로 나온, 기대되는 언어들
주요 프로그래밍 언어의 특징
C++
– AT&T 벨 연구소의 B. Stroustrup이개발
– C 언어의 기능을 확장하여 만든 객체 지향 프로그래밍 언어
Java
– 1990년대에 선 마이크로시스템 사의 James Gosling이 개발 – 인터넷 환경을 위해 개발된 객체지향 언어
– Java 프로그램은 JVM이 구동되는 어느 플랫폼에서나 실행 가능
Python
– 1989년 Guido van Rossum이 개발한 객체지향형 스크립트 언어 – 문법 구조가 간단하고 확장이 용이.
프로그래밍 언어
고급 언어(고수준 언어, high-level language)
– 영어와 비슷한 구문으로 표현되며, 사람이 읽고 쓰기 쉽다.
– 사람에게 가까울수록(사람이 쉽게 이해할 수 있음) 더 고급 언어이다.
저급 언어(저수준 언어, low-level language)
– 기계에 가까운 언어. 2진수로 이루어진 기계어 – 수행은 빠르지만, 사람이 이해하기 매우 어렵다.
대부분의 프로그래밍 언어는 고급언어이며, 최근 언어는 사람에게 더 가까워지는 추세이다.
사람
고급언어
C : 고급언어이지만, 저급에도 가깝
저급언어
Java : 좀 더 고급언어
Python : 좀 더 더 고급언 컴퓨터
어렵지만 빠르다 느리지만 쉽다
어셈블리어 : 완전 저급언 어
컴파일러와 인터프리터
컴파일러
– 소스코드 전체를 기계어로 번역한 후, CPU에서 실행 – 성능이 좋다. 컴파일에 시간이 다소 소요된다.
– C, C++ 등
인터프리터
– 실시간으로 인터프리터가 소스코드를 한 행씩 번역 후 실행 – 다양한 기능을 제공하고, 융통성이 있다.
– 인터프리터가 항상 동작해야 한다. 성능에 한계가 있다.
– Python
중간 형태
– 소스코드 전체를 중간코드로 일괄 번역한 후, 한 행씩 실행 – 컴파일러와 인터프리터의 장점.
– Java
소스코 드
기계어 명 령 CPU 컴파일
소스코 드
인터프리터 CPU
. . . .
한 행씩 번역, 실행
인터프리터 CPU
한 행씩 실행
소스코
드 컴파일 중간코드
C 언어의 성장
ANSI란
– 표준협회
ANSI C란
– 표준협회에서 정한 C 언어
C언어는 성장한다.
– C89, C99 – C11
1.3 소프트웨어의 개발 단계
22
소프트웨어 개발과정
앞 단계가 끝나야 다음단계가 진행된다.
앞 단계의 결과물이 다음 단계에 사용된다.
요구사항 정의
분석/설계
개발
시험
유지보수
24
소프트웨어 개발과정
요구사항 정의(requirement analysis)
– 사용자의 필요사항과 소프트웨어가 해야 할 일을 파악하는 단계
분석(analysis), 설계(design)
– 요구 사항을 만족시키는 소프트웨어/시스템의 구조를 만들고 이를 상세화하는 과정
개발(implementation)
– 설계된 소프트웨어/시스템의 내용을 구체적인 프로그래밍 언어로 작성하는 단계
테스트(testing)
– 프로그램의 오류를 찾아내고 이를 수정하는 단계
유지보수(maintenance)
– 개발된 소프트웨어를 실제 상황에서 운영하면서 상황 및 변화된 요 구에 따라 소프트웨어를 적절하게 수정하는 단계
1.4 그 외
26
이진 저장 단위
단위 크기(2𝐧) 크기(𝟏𝟎𝐧)
KB (kilo) 2
10대략 10
3MB (mega) 2
20대략 10
6GB (giga) 2
30대략 10
9TB (tera) 2
40대략 10
12PB (peta) 2
50대략 10
15EB (exa) 2
60대략 10
18ZB (zetta) 2
70대략 10
21YB (yotta) 2
80대략 10
24이진수와 십진수
십진수
– 열 개의 숫자(0에서 9)를 이용하여 값을 표현한다.
– 사람이 이용하는 단위
– 123 = 1 x 102 + 2 x 101 + 3 x 100
이진수
– 두 개의 숫자(0과 1)를 이용하여 값을 표현한다.
– 컴퓨터가 이용하는 단위
– 10102 = 1 x 23 + 0 x 22 + 1 x 21 + 0 x 20
= 10 (10진수)
28
16진수
16진수(hexadecimal)
– 사람의 10진수와 기계의 2진수의 중간 단계의 수
– 0 ~ 9, A(10), B(11), C(12), D(13), E(14), F(15)로 표현 – 2진수 네 자리를 묶으면 16진수가 된다.
– 3F4 16 = 3 x 162 + F(15) x 161 + 4 x 160
= 1012 10
– 3F4 16 = 0011 : 1111 : 0100 3 F 4
= 001111110100 2
진수
2진수
16진수
2진수 10진수 2진수 10진수 2진수 10진수
25 32 211 2,048
26 64 212 4,096 220 = 1M 1,048,576 27 128 213 8,192 224 = 16M 16,777,21 6 28 256 214 16,384 230 = 1 G 약 10억 29 512 215 32,768 232 = 4 G 약 40억 210 = 1 K 1,024 216 = 16K 65,536
10진수 16진수 10진수 16진수 10진수 16진수
7 7 13 D 31 1F
8 8 14 E 32 20
9 9 15 F 48 30
10 A 16 10 64 40
11 B 17 11 160 A0
12 C 18 12 256 100