※이 글은 [쉽게 풀어쓴 C언어 Express 개정판]을 읽고 정리한 내용입니다. 상업적 목적이 아닌 단순히 공부한 내용을 정리하려는 생각으로 쓴 것이니 그 점 유의하고 봐주시기 바랍니다.
http://book.naver.com/bookdb/book_detail.nhn?bid=6984786
1.1 프로그래밍이란?
● 프로그램의 중요성
- 컴퓨터를 사용하여 많은 작업을 할 수 있지만, 컴퓨터 하드웨어만 있다고 할 수 있는게 아닌 프로그램이 설치되어 있어야 한다.
- 하드웨어 조립이 끝났다고 해서 끝나는게 아니라 '윈도우즈'와 같은 운영체제 프로그램과 응용 프로그램을 설치해야만 비로소 우리가 사용할 수 있다.
- 가전제품과는 다르게, 컴퓨터는 범용적인 기계이기에 프로그램만 바꾸어주면 다양한 작업을 할 수 있다. ex) 한글 2010, 윈도우 미디어 플레이어 등등 ..
- 반대로 컴퓨터는 프로그램이 없으면 아무일도 할 수 없다. 근본적으로 미리 작성된 프로그램을 단순히 수행하는 기계이다.
● 컴퓨터와 프로그램
- 컴퓨터의 기본적인 임무는 숫자 계산을 빠르게 하는 것이다.
- 현대에 이르러서는 명령어(instruction)들의 리스트에 따라 데이터를 처리하는 기계라고 할 수 있다.
- 특정한 작업을 수행하도록 설계된 명령들의 리스트가 바로 프로그램(program)이다.
- 다양한 프로그램을 수행할 수 있는 능력은 컴퓨터를 범용적인 다재다능한 기계로 만들었으며, 이는 계산기와 컴퓨터를 구별하는 특징이 된다.
● 프로그램의 역사
- 프로그램이 가능한 최초의 기계는 '컴퓨터의 아버지' 찰스 배비지가 만든 '해석 기관(Analytical Engine)'이다.
- 범용적인 계산 기계를 만들기 위해 모든 종류의 계산을 하나의 기계에서 할 수 있도록 설계된 최초의 범용 컴퓨터였다.
- 특별한 점은 해석 기관에서는 프로그램이 작성하는 것이 가능했다. 그러나 해석 기관은 개념과 원리만 완성됐을 뿐 실제로 만들어지지 못했다.
- 수천 개의 기어, 바퀴, 축, 레버 등으로 구성하여 증기로 작동하는 것으로 설계되었다.
- 해석 기관에는 현대 디지털 컴퓨터의 기초적인 하드웨어와 소프트웨어의 원리가 구현돼 있었다.
- 해석 기관은 현대 컴퓨터에서도 사용하는 네 가지의 핵심적인 부품(component)이 모두 포함되어 있었다
중앙 처리 장치 |
계산을 담당, mill이라고 불림 |
기억 장치 |
중간 단계에서 임시적으로 숫자를 저장, store라고 불림 |
출력 장치 |
출력 숫자를 나타내는 다이얼 |
입력 장치 |
천공 카드 |
- 천공 카드 시스템을 이용해 계산에 필요한 숫자들, 수행할 연상까지도 지정할 수 있었다. 천공 카드를 적절히 사용해 계산 장치는 중간 결과를 메모리에 저장할 수 있었고 다음 프로시저가 사용하도록 저장된 숫자를 반환할 수 있었다.
- 이러한 입력 장치를 사용하여 해석 기관은 매번 서로 다른 계산을 할 수 있었다.
- 19세기 말까지 실용적인 컴퓨터를 구현할 수 있는 기술이 등장했다. ex) 펀치 카드, 부울 대수, 진공관, 텔레타이프 등등 ..
- 전자 공학의 발전으로 전자 스위치가 부울 대수(Boolean algebra)의 참/거짓을 나타낼 수 있다는 것을 깨닫게 되었다.
- 최초의 전자식 컴퓨터는 1943년 ENIAC이다. 산술 연산과 논리 연산을 수행할 수 있었고 변수 개념도 지원하였다. 십진법을 사용해 계산하며 최초의 범용 전자 컴퓨터이다.
- 탄도 궤적을 계산할 목적으로 개발되었으며 18000개의 진공관과 6000여 개의 스위치로 이루어져 있었다.
- 결정적인 문제점은 탄도 궤도 표를 계산만을 수행할 수 있었고 다른 연산을 수행시키려면 아주 복잡하였다. ENIAC의 프로그램은 스위치에 의하여 기억되었고 프로그램을 변경할 때마다 그 많은 스위치들을 처음부터 다시 연결하여야 했다고 한다.
- 이후 1945년 폰노이만이 발표한 프로그램 내장(stored program) 구조 또는 폰 노이만 구조가 등장하면서 훨씬 유연하고 깔끔한 설계를 할 수 있었다.
- 1948년 최초의 실용적인 프로그램 내장 방식의 컴퓨터인 EDVAC이 제작되었다.
- EDVAC은 최초의 메모리를 가지고 있었고 이 메모리 안에 프로그램을 내장하여 수행하였다. 0과 1의 이진 숫자들로 구성된 기계어를 사용하였으며 폰 노이만 구조는 다음과 같은 특징을 가진다.
프로그램과 데이터가 모두 메인 메모리에 저장된다. |
메인 메모리에 저장된 프로그램에서 이진수로 되어 있는 면령어 들을 순차적으로 가져와서 실행한다. |
● 프로그램이 하는 일
- 프로그램이란 우리가 하고자 하는 작업을 컴퓨터에게 전달하여 주는 역할을 하는 것이다.
- 우리가 원하는 작업을 기록해 둔 작업 지시서라고 보면 된다. 컴퓨터에게 무엇을 어떻게 시킬 지를 기록해놓은 문서가 프로그램이다.
● 컴퓨터가 이해하는 언어
- 컴퓨터가 알아듣는 언어는 0과 1로 구성되어 있는 이진수 하나이다.
- 모든 것을 0과 1로 표현하고 0과 1에 의하여 내부 스위치 회로들이 온오프 상태로 변경되면서 작업을 한다. 이와같이 이진수 형태의 언어를 기계어(Machine language)라고 한다.
- 기계어는 종속성을 가진다. 같은 이진수라도 나타내는 값이 다르다는 특징이 있다.
- 불편성을 없애기 위해 인간의 언어에 더욱 근접한 프로그래밍 언어를 만들었고 그 언어로 프로그램을 작성하면 컴파일러라고 하는 통역을 담당하는 소프트웨어가 프로그램을 기계어로 바꿔준다.