350 likes | 738 Views
2 장 프로그래밍과 운영체제. 1. 프로그래밍 언어 (Programming Language) 1.1 프로그래밍 언어의 발전 단계 1.2 주요 언어로 작성된 프로그램 2. 프로그램 설계 2.1 프로그램 작성단계 3. 운영체제와 소프트웨어 3.1 운영체제 (OS : Operating System) 3.2 운영체제의 종류 3.3 소프트웨어 (Software). 1. 프로그래밍 언어. 사람과 컴퓨터의 상호작용을 위해 개발된 언어
E N D
2장 프로그래밍과 운영체제 1. 프로그래밍 언어(Programming Language) 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) • 기계어에 가까운 언어. 기계어를 기호화한 언어 • CPU에 종속 [그림2-4] 프로그래밍 언어의 발전 단계에 따른 세대별 구분
1.1 프로그래밍 언어의 발전 단계 • 3세대 언어 • 절차 지향 언어 (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 주요 언어로 작성된 프로그램 • 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 주요 언어로 작성된 프로그램 • 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 주요 언어로 작성된 프로그램 • 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 주요 언어로 작성된 프로그램 • 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 주요 언어로 작성된 프로그램 • C 프로그램 #include <stdio.h> #include <conio.h> main() { inti, 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 주요 언어로 작성된 프로그램 • Java 프로그램 public class SumTest { public static void main(String[] args) { inti, 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> <SCRIPT LANGUAGE = "JAVASCRIPT"> var sum=0; vari; 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] 운영체제와 소프트웨어의 실행
감사합니다 감사합니다