0. 시작하기 전에
- 이전 포스팅 까지 CPU의 내부구조에 대해서 다음과 같이 공부했다.
▶ CPU의 동작방식(연산 방법)
▶ CPU의 내부 연산처리에 필요한 요소(여러가지 레지스터, 명령어, 마이크로연산)
▶ CPU 설계방식
▶ CPU가 입출력을 처리하는 과정
- 지금까지 HW에 집중했다면,
- 이번 포스팅 부터는 HW를 더욱 잘 활용하기 위한, SW적인 측면에 대해서 알아볼 예정이다.
1. 프로그램이란?
- 컴퓨터는 복잡한 계산(= 산술논리연산)을 하기 위한 목적으로 만들어진 도구다.
- 그러므로 컴퓨터에게 어떤 작업을 시킨다는 것은 어떤 계산을 시킨다는 의미다.
- 사람은 어떤 것을 계산하기 위해 순차적인 연산과정을 거친다. 컴퓨터도 동일하다.
- 이 순차적인 연산과정을 컴퓨터에게도 알려줘야 하는데, 이를 컴퓨터가 이해할 수 있도록 정리한 것이 프로그램이다.
- 프로그램이란, 어떤 계산을 수행하기 위해 필요한 과정을 정리한 것이다.
- 계산 과정의 순서를 정리한다는 의미는, 컴퓨터가 실행할 명령어의 순서를 정리한 것을 말한다.
- 즉, 프로그램은 순서에 맞게 정리된 명령어의 집합이라고 해석할 수 있다.
2. SW란 무엇인가?
- SW란, 컴퓨터의 HW를 더욱 잘 활용할 수 있도록 제어하고 지시하는 모든 종류의 프로그램을 의미한다.
- 조금 더 디테일하게 설명하자면, SW = 프로그램 + 자료구조 + 문서
▶ 자료구조 - 프로그램 실행에 필요한 컴퓨터 자원(HW)의 활용 계획서
▶ 문서 - 프로그램의 사용설명서 또는 메뉴얼
- 비유를 하자면, 프로그램은 햄버거 단품과 같은 것이고, SW는 햄버거 세트와 같은 것이다.
a) SW의 종류
- SW는 크게 두가지 분류로 나뉘는데, 시스템 SW와 응용 SW로 나뉜다.
3. Software Engineering이란?
- 예를 들어, 건축공학을 배운다고 한다고 해보자.
- 건축공학을 배우면 기초적인 역학, 물리, 수학부터 시작해서 건물을 짓는법까지 배운다.
- 여기서 한가지를 더 배우게 되는데, 최소비용으로 최대 효율의 건축물을 짓는 법을 배운다.
- 즉, 건축공학은 안전하게, 빠른시간 내에, 최소비용으로, 최대효율을 내는 건축물을 짓는 방법을 배운다.
- 소프트웨어 공학도 이와 같은 맥락이다.
- 다만 한가지 차이점이 있다면, 최대효율보다 최적화에 집중한다는 것이다.
- 즉, 소프트웨어 공학은 최소비용으로 최적의 소프트웨어를 만드는 모든 도구와 방법에 대해 연구하는 학문이다.
- 여기서 말하는 도구란, 다음과 같은 의미를 갖는다.
▶ 자동화 도구 - 프로그램
▶ 수동적 도구 - 방법론
4. 프로그램을 만드는 언어
- 프로그래밍 언어는 다음과 같이 분류할 수 있다.
▶ 1세대 언어
- 이진법으로 표현된 컴퓨터가 바로 이해하는 언어
ex) 기계어
▶2세대 언어
- 기계어를 사람이 이해할 수 있도록, 기계어와 대응하는 기호언어(= Mnemonic)
ex) 어셈블리어
▶ 3세대 언어(절차적 언어)
- 고급언어의 시작
- 사람의 언어(자연어)에 가까운 형태를 가진 프로그래밍 언어
- 폰 노이만 구조를 바탕으로 설계된 언어
- 컴퓨터의 순차적인 동작을 기반하여 실행순서에 중점을 두고 있는 언어(절차적 언어)
- 컴파일러 또는 인터프리터를 통해 기계어로 번역되는 언어(기계 독립적 언어)
ex) Fortran, Cobol, Basic, C언어, Java
▶ 4세대 언어 (비절차적 언어)
- 문제 해결형 또는 비절차적 언어
- 내부 도구를 이용해 코딩을 통한 프로그램 작성이 아닌 그림(visual)을 조합해서 프로그램을 만드는 것이 가능
- 최종 사용자 또는 비전문 프로그래머도 이전세대 언어보다 상대적으로 쉽게 프로그램을 만들 수 있음
- 컴퓨터의 보급속도에 비해 SW의 개발 속도가 느린 상황(= SW 위기)을 극복하고자 도입된 언어
ex) PL/SQL, Visual C++, Visual Basic
b) 프로그램 언어를 처리하는 과정
- 고급 언어는 아래의 사진과 같은 번역 프로세스를 거친다.
- 즉, 프로그래밍 언어는 반드시 기계어로의 번역이 필요하다.
[참고자료]
'컴퓨터공학기초 개념 > 컴퓨터구조' 카테고리의 다른 글
22. 컴퓨터구조 - 파이프라인과 병렬처리 (0) | 2021.08.19 |
---|---|
21. 컴퓨터 구조 - 소프트웨어 구조 (0) | 2021.08.17 |
19. CPU 내부구조 - 입출력과 인터럽트 (0) | 2021.08.12 |
18. CPU 내부구조 - 명령어와 주소지정방식 (0) | 2021.08.12 |
17. CPU 내부구조 - 마이크로 연산과 ALU (0) | 2021.08.12 |
댓글