2장 프로그래밍과 운영체제 1. 프로그래밍 언어(Programming Language) 2. 프로그램 설계 1.1 프로그래밍 언어의 발전 단계 1.2 주요 언어로 작성된 프로그램 2. 프로그램 설계 2.1 프로그램 작성단계 3. 운영체제와 소프트웨어 3.1 운영체제(OS : Operating System) 3.2 운영체제의 종류 3.3 소프트웨어(Software)
1. 프로그래밍 언어 사람과 컴퓨터의 상호작용을 위해 개발된 언어 1950년대 컴퓨터 개발 이후에 수 많은 프로그래밍 언어가 개발되고 사라졌다 현재 수 십 종류의 프로그래밍 언어들이 사용 컴퓨터 전문가들에 의해 프로그래밍 언어 개발
2.1 프로그래밍 언어의 발전 단계 1950년 이후로 프로그래밍 언어의 발전 단계 1세대 언어 (machine language) 0,1로 구성된 기계어. 컴퓨터에 직접 실행되는 언어 CPU에 종속 2세대 언어 (assembly language) 기계어에 가까운 언어. 기계어를 기호화한 언어 [그림2-4] 프로그래밍 언어의 발전 단계에 따른 세대별 구분
1.1 프로그래밍 언어의 발전 단계 3세대 언어 4세대 언어 5세대 언어 절차 지향 언어 (procedure/function-based) C, 포트란, 코볼, BASIC 언어 등 C 언어는 현재까지도 광범위한 응용 분야에서 많이 사용 CPU에 독립 4세대 언어 데이터 베이스 관련 프로그램을 개발할 수 있는 언어 윈도우 환경에서 개발: IDE (Integrated Development Environment) 비주얼베이직, 델파이, 파워빌더 등 5세대 언어 객체 지향 언어 (object-oriented) 네트웍 또는 웹 환경에서 강한 특성을 가진 언어 Java, C++, C#, ASP, JSP, PHP 등
1.2 주요 언어로 작성된 프로그램 주요 언어로 작성된 프로그램 비교 주요 프로그램 언어에 대한 전반적인 구조와 기초 지식 습득 Assembly 언어: CPU마다 다름, e.g., Intel, IBM, HP 등 TEST START 0 BEGIN BALR BASE,0 USING BEGIN+2,BASE SR 4,4 L 2,=F'1' L 3,=F'100' LOOP AR 4,3 SR 3,2 BCT 3,*-4 BR 14 LTORG BASE EQU 15 END 100부터 1씩 감소시켜가면서 반복하여 숫자를 더한다
Assembly 언어 INP : INPut - 입력 데이타를 기억 장치내의 지정된 장소에 저장. CLA : CLear and Add - 지정된 기억 장소의 데이타를 어큐멀레이터 레지스터에 저장 ADD : ADD - 어큐멀레이터 레지스터의 데이타와 지정된 기억 장소의 데이 타를 더하여 결과를 어큐멀레이터 레지스터에 저장. STO : STOre - 어큐멀레이터 레지스터의 데이타를 지정된 기억 장소에 저 장. OUT : OUT - 지정된 기억 장소의 데이타를 출력. HLT : HaLT - 컴퓨터를 정지. 입력 장치를 통하여 두 수를 기억 장치에 저장한 후에, 그 두 수를 더하고, 결과를 출력 장치를 통해 내 보내는 어셈블리(assembly) 프로그램이 다음과 같을 때, 빈 곳을 채우시오. INP 10 INP 11 CLA 10 ADD 11 STO 12 OUT 12 HLT 00
1.2 주요 언어로 작성된 프로그램 ISUM=0 DO 100 I = 1, 100, 1 ISUM=ISUM+I FORTRAN 프로그램: CPU에 상관없이 compiler가 번역함 ISUM=0 DO 100 I = 1, 100, 1 ISUM=ISUM+I 100 CONTINUE WRITE(6,200) ISUM 200 FORMAT(8X,I5) STOP END 1부터 100까지 1씩 증가시켜 가면서 ISUM 변수에 반복하여 숫자를 더한다
1.2 주요 언어로 작성된 프로그램 IDENTIFICATION DIVISION. PROGRAM-ID. HAP. COBOL 프로그램 IDENTIFICATION DIVISION. PROGRAM-ID. HAP. //……………………생략 CONFIGURATION SECTION. FD PR-F LABEL RECORD OMITTED. 01 PR-R PIC X(80). WORKING-STORAGE SECTION. 01 LIST. 03 N PIC 9(3). 03 HAP PIC 9(4). PROCEDURE DIVISION. AA. PERFORM BB UNTIL N = 100. DISPLAY "***1부터 100까지의 합*** ". DISPLAY "HAP = " HAP. STOP RUN. BB. ADD 1 TO N ADD N TO HAP. 1부터 100까지 1씩 증가시켜 가면서 HAP 변수에 반복하여 숫자를 더하고 결과를 출력하다
1.2 주요 언어로 작성된 프로그램 10 SUM = 0 20 FOR I=1 TO 100 30 SUM = SUM + I BASIC 프로그램 10 SUM = 0 20 FOR I=1 TO 100 30 SUM = SUM + I 40 NEXT I 50 PRINT SUM 60 END 1부터 100까지 1씩 증가시켜 가면서 SUM 변수에 반복하여 숫자를 더한다
1.2 주요 언어로 작성된 프로그램 program hap; uses Crt; var i,sum:integer; begin Pascal 프로그램 program hap; uses Crt; var i,sum:integer; begin clrscr; i:=0; sum:=0; for i:=0 to 100 do sum := sum + i; writeln('1부터 100까지의 합은 ===> ',sum); end. 1부터 100까지 1씩 증가시켜 가면서 SUM 변수에 반복하여 숫자를 더한다
1.2 주요 언어로 작성된 프로그램 #include <stdio.h> #include <conio.h> main() { int i, sum; clrscr(); i=0; sum=0; for (i=0; i<=100; i++) sum = sum + i; printf("1부터 100까지의 합은 ===> %d\n",sum); } 1부터 100까지 1씩 증가시켜 가면서 SUM 변수에 반복하여 숫자를 더한다
1.2 주요 언어로 작성된 프로그램 public class SumTest { Java 프로그램 public class SumTest { public static void main(String[] args) { int i, sum=0; for ( i = 1 ; i <= 100 ; i = i + 1 ) { sum = sum + i; } System.out.println("1부터 100까지의 합은 " +sum); 1부터 100까지 1씩 증가시켜 가면서 SUM 변수에 반복하여 숫자를 더한다
1.2 주요 언어로 작성된 프로그램 <HTML> <BODY> 자바스크립트 프로그램 <HTML> <BODY> <SCRIPT LANGUAGE = "JAVASCRIPT"> var sum=0; var i; for ( i = 1 ; i <= 100 ; i = i + 1 ) { sum = sum + i; } document.write("1부터 100까지의 합은 " + sum); // or alert(("1부터 100까지의 합은 " + sum); </SCRIPT> </BODY> </HTML> 1부터 100까지 1씩 증가시켜 가면서 SUM 변수에 반복하여 숫자를 더한다
1.2 주요 언어로 작성된 프로그램 주요 언어들의 특징 대부분의 언어들은 순서, 선택, 반복 논리를 제공한다. 각 언어들이 고유의 기능과 특징도 가지지만, 대부분 비슷한 구문구조를 가진다 어셈블리 언어를 제외한 대부분의 언어들이 우리들이 일반적으로 사용하는 용어를 사용한다 (변수명 : sum, hap 등, 예약어 : for, write, print, main 등) C, Java, 자바스크립트는 거의 유사한 구문구조를 가진다 (반복문 for의 구문구조가 거의 똑 같다)
2. 프로그램 설계 집을 짓기 위해서도 설계(design)가 우선되어야 한다 프로그램도 우선 명확한 설계가 이루어져야 한다 요구분석(requirement analysis) -> 설계(design) -> 구현(implementation) -> 시험(test) 프로그램도 우선 명확한 설계가 이루어져야 한다 설계가 명확하게 이루어지지 않은 경우 결국 오류 발생으로 추가 비용 발생 오류수정을 위한 비용은 기존에 설계를 명확하게 하든데 드는 비용보다 훨씬 더 많이 소요 프로그램의 정의 문제를 해결하기 위해 컴퓨터에게 일을 시키는 절차 프로그래밍 언어(C, Java 등)로 이러한 절차를 기술한다
2.1 프로그램 작성 단계 대규모의 소프트웨어 프로젝트는 소프트웨어 공학(Software Engineering)적인 방법과 절차에 의해 개발 요구분석(requirement analysis) -> 설계(design) -> 구현(implementation) -> 시험(test): α-test and β-test 이 책은 프로그램의 원리와 기초과정을 다루고 있으므로 소프트웨어 공학적인 방법론은 다루지 않고, 대신에 프로그래밍 기초과정으로서 작고 간단한 프로그램의 개발 방법을 설명한다
2.1 프로그램 작성 단계 작고 간단한 프로그램 개발을 위한 단계 [그림2-1] 프로그램 작성 안내
2.1 프로그램 작성 단계 1단계 : 입출력을 정의 실습 예제 2-1 두 개의 서로 다른 숫자를 입력 받아 두 숫자의 가감승제와 두 숫자를 비교하여 큰 수를 출력하고, 두 숫자 사이의 합을 구하는 프로그램을 작성하시오. Program Design Form에서 순서도 작성 [그림2-2] 프로그램의 입출력 정의
2.1 프로그램 작성 단계 2단계 : 절차(algorithm)를 정의 문제를 명확하게 정의 문제 : 두 개의 숫자를 입력 받아 두 숫자의 가감승제와 두 숫자를 비교하여 큰 수를 출력하고, 두 숫자 사이의 정수들의 합을 구하는 프로그램 두 개의 숫자가 정수인지, 실수인지? --- 정수로 정의 두 숫자가 같은 경우에는? --- 문제에서 서로 다른 두 개의 입력으로 정의 두 숫자 사이의 합에 두 숫자가 포함되는지? --- 포함됨 e.g., 10, 20인 경우 10 11 12 13 14 15 + 20 19 18 17 16 ----------------------- 30 * 5 + 15 = 165
2.1 프로그램 작성 단계 2단계 : 절차를 정의 문제를 작은 문제로 분해 문제가 복잡하면 나눌 수 있을 때까지 작은 문제로 분해 두 수의 입력 부분 1) 두 수의 가감승제 계산 2) 두 수중 큰 수를 구한다 3) 두 수 사이의 정수의 합산 결과 출력 부분
2.1 프로그램 작성 단계 2단계 : 절차를 정의 각각의 문제들을 순서, 선택, 반복의 논리로 절차를 정의하고, 연결 분해된 문제들을 논리와 연관시켜 정의 두 수의 입력 부분--순서 두 수의 가감승제 계산--순서 두 수중 큰 수를 구한다--선택 두 수 사이의 정수의 합산--반복 결과 출력 부분--순서
2.1 프로그램 작성 단계 2단계 : 절차를 정의 [그림2-3] 순서도를 사용하여 절차와 기억장소(변수)의 변화를 나타낸 예
2.1 프로그램 작성 단계 3단계 : 프로그램 코드 작성 순서도(설계도)에 따라 프로그램을 작성 <HTML> <BODY> <SCRIPT> var 첫번째수, 두번째수, 덧셈, 뺄셈, 곱셈, 나눗셈 var 큰수, 작은수, 임시변수, 합=0; 첫번째수 = parseInt(prompt("첫 번째 수 입력")); 두번째수 = parseInt(prompt("두 번째 수 입력")); 덧셈 = 첫번째수 + 두번째수; 뺄셈 = 첫번째수 - 두번째수; 곱셈 = 첫번째수 * 두번째수; 나눗셈 = 첫번째수 / 두번째수; if (첫번째수 > 두번째수) { 큰수 = 첫번째수; 작은수 = 두번째수; } else 작은수 = 첫번째수; 큰수 = 두번째수;
1.1 프로그램 작성 단계 임시변수 = 작은수; while (임시변수 <= 큰수 ) { 합=합 + 임시변수; 임시변수=임시변수 +1; } document.write("덧셈결과 : " + 덧셈 + "<BR>"); document.write("뺄셈결과 : " + 뺄셈 + "<BR>"); document.write("곱셈결과 : " + 곱셈 + "<BR>"); document.write("나눗셈결과 : " + 나눗셈 + "<BR>"); document.write("작은수 : " + 작은수 + " 큰수 : " + 큰수 + "<BR>"); document.write("작은수 : " + 작은수 + " 큰수 : " + 큰수 +"사이의 합은 "+ 합); </SCRIPT> </BODY> </HTML>
3. 운영체제와 소프트웨어 프로그램이 실행되는 환경을 이해하기 위해 운영체제(OS, Operating System)를 학습해야 한다 개인용(personal) 컴퓨터 서버용(server) 컴퓨터
3.1 운영체제(OS:Operating System) 컴퓨터 개발 초기 운영체제가 없거나 컴퓨터 회사별로 서로 다른 운영체제를 제공하였다. 컴퓨터 회사별로 컴퓨터의 사용방법이 다르다 특정 컴퓨터를 사용하던 사용자가 다른 컴퓨터를 사용하기 위해서는 OS 동작방법을 다시 배워야 한다
3.1 운영체제(OS:Operating System) “사용자가 컴퓨터를 편리하게 사용할 수 있도록 하드웨어 자원을 관리해주는 소프트웨어” 사용자가 운영체제만 배우면 같은 운영체제를 사용하는 어떠한 종류(회사)의 컴퓨터도 쉽게 사용할 수 있다 운영체제는 항상 하드웨어 자원을 최적의 상태로 유지한다 사용자는 각 회사의 컴퓨터를 배우지 않고, 운영체제를 배워 모든 컴퓨터를 사용한다.
3.2 운영체제의 종류 1950년대 컴퓨터가 개발된 이후에 운영체제는 꾸준히 발전되어 왔다 퍼스널 컴퓨터가 등장 이후로 마이크로소프트(MS) 사의 운영체제가 표준 운영체제로 자리를 잡았다 DOS(Disk Operating System) 퍼스널 컴퓨터 개발 초기의 운영체제 마이크로소프트사의 MS-DOS와 DR-DOS, Novel DOS 등이 있었으나 MS-DOS가 많이 사용되었다 [그림2-7] MS-DOS 화면
3.2 운영체제의 종류 윈도우 계열 운영체제 명령어 입력 방식이 아닌 마우스로 편리하게 사용할 수 있는 GUI(Graphical User Interface) 방식의 운영체제 MS-W indow 3.1=>Windows XP=>Windows Vista=>Windows 7 등으로 발전 현재 마이크로소프트사는 퍼스널 컴퓨터 운영체제 시장을 거의 독점하고 있다 [그림2-8] MS-윈도우 3.1 화면 [그림2-9] 윈도우 7의 시작화면과 초기화면
3.2 운영체제의 종류 유닉스(Unix) 계열 운영체제 1969년 미국의 AT&T사의 벨 연구소에서 개발된 운영체제 중.대형 컴퓨터의 운영체제 현재 솔라리스와 FreeBSD 유닉스 운영체제로 발전 중대형 컴퓨터에서 가장 많이 사용되는 운영체제: Open Source [그림2-10] FreeBSD 운영체제와 솔리리스 운영체제
3.2 운영체제의 종류 리눅스(Linux) 운영체제 1991년 핀란드 헬싱키 대학교 학생인 리누스 토발즈에 의해 만들어진 운영체제 Unix를 PC에서 다용할 수 있게 만든 운영체제 PC 또는 인터넷 서버용 운영체제로 많이 사용 현재 리눅스 배포판인 레드햇(Red Hat), 데비안(Debian) 등이 제공 [그림2-11] 리눅스 배포판인 레드햇과 데비안 화면
3.2 운영체제의 종류 Mac 운영체제 1984년 미국의 애플 컴퓨터사가 매킨토시 계열 컴퓨터의 운영체제로 개발 마우스를 사용한 최초의 GUI 형태의 운영체제 http://en.wikipedia.org/wiki/Macintosh [그림2-12] Mac 운영체제 화면
3.2 운영체제의 종류 스마트폰 운영체제 스마트폰 시장의 경쟁은 운영체제의 경쟁이라 해도 과언이 아니다 현재 스마트폰에서 제공되는 운영체제로는 구글의 안드로이드, 심비안, 애플의 iOS, 블랙베리 OS, 윈도폰7, 삼성 바다OS 등이 있다 [그림2-13] 2011년 스마트폰 운영체제의 점유율
3.3 소프트웨어(Software) 대부분의 응용프로그램들은 운영체제 상에서 실행된다. 대부분의 소프트웨어는 운영체제 별로 분류되어 판매된다 소프트웨어가 동작할 때 컴퓨터 하드웨어 자원에 접근하게 되는데, 이 경우 운영체제의 기능들을 이용한다 [그림2-13] 운영체제와 소프트웨어의 실행
감사합니다