달력

12

« 2024/12 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 9. 30. 11:11

0930) 업무 / signed,unsigned / 자료형 최대수 2010. 9. 30. 11:11

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 9. 29. 16:49

0929) 공부 / (펌) 실수를 2진수로 표현 공부2010. 9. 29. 16:49

 

 부호                                                    <---------------    e   ---------------->

 1  0  0  0  0  0  0  1  0  0  0  0  0  1  0  1
        <-------------    m   ------------->

정수부를 m, 실수부를 e로 정의했을 때 실수를 2진수로 표현하는 방식은 다음과 같습니다. (2바이트 = 16비트를 이용한다.)





중요한건 저 공식이 아니라, 저런 공식을 사용하여. 처리한다는 것입니다..

m은 정수부를 표현할만큼의 저장공간을 의미하고 e는 소수부를 표현할만큼의 저장공간을 의미합니다..

그러니까..

개념적으로 이해하고 넘어가실것은, 어떠한 식(위의식)에 따라 실수부를 표현한다는 것입니다.

 

이젠, 실수부의 특징 몇가지를 살펴보겠습니다..

 

혹시 여러분중에서 float형으로 변수선언을 했더니 오차가 생겼다! 라는 이상한 경험을 하신적 있으신가요?~

여러분이 지금 사용하는 컴퓨터는 만능이아닙니다. 

모든 일을 처리할수있습니다. 하지만, 모든 일을 정확히 처리할순 없습니다.

무슨 소리일까요..? 같이 살펴 보시죠.

 

 

저게 .. 몬 지는 아직 공부하지 않아서 잘 모르겠습니다. 하지만,

전체적인 간단한 설명을 하자면 a와 b가 같으면 같습니다를 출력하고 다르면  다릅니다 를 출력하는 프로그램입니다.

하지만, 보시면.... 당당하게 " 같습니다 " 가 출력됬습니다.

분명히, 저정도 근사한 차이가 무슨 문제가 되겠느냐, 하시는 분들도 계시기에 몇가지 붙여보겠습니다.

만약에 변수 b에 연산을 한다면 어떻게 될까요.. 물론, 간단한 연산은 표현조차 안되겠지만,

반복해서 b를 더해준다면... 1000번만 실행해도 눈에 띄는 오차가 되어있을 것입니다.

우리가 쓰는 프로그램은 정말 엄청난 연산으로 이루어진 프로그램도 많답니다..

 

그렇다면, 저 오차가 어디서 생기는 것일까요..?

맨처음 보셨던 식에서 생기는 것입니다. 맨처음식에 어떤 수를 대입하셔도 0은 만들지 못합니다.

그럼 0을 표현하지 못한다는 얘긴가요?..0.0은 없는것인가요..?

아니죠. 컴퓨터는 정확한수를 표현하는것보단, 정말 미세한 오차로, 전혀 문제가없을 만큼의 근사치를 통해

실수를 표현합니다. 그래서, 오차는 당연하것이죠..

이런것이 , 부동소수점의 오차라고 표현합니다.

부동소수점 방식이랑, 위의식대로 소수점을 처리하는 방식이죠.

 

오차란 사람이 정한 값과 컴퓨터가 표현할수있는 형식상 오류때문에 어쩔수없이 생길수밖에없습니다.

하지만 얼마나 오차를 작게 만들어서 무리없이 사용하느냐도 중요합니다.

 

간단하게 , 저번포스트부터 정수와 실수의 표현방식에 대해서 알아보았습니다 .

두개를 같이 쓸까하다가  지루할것같아서 나눠봤습니다.

읽느라 수고하셨구요. 그럼 다음 포스트에서 뵙겠습니다.

'공부' 카테고리의 다른 글

1011) 마우스 오른클릭 막음 해제 (펌 방지 해제)  (0) 2010.10.11
1008) C언어로 2 ~ 50까지 소수 구하기 (코드)  (0) 2010.10.08
0923) C 보충  (0) 2010.09.23
0920) 컴파일  (0) 2010.09.20
0920) 환경변수 등록  (0) 2010.09.20
:
Posted by 투잌

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 9. 24. 17:39

수정 따위는 말년에 하는거다!! 주절2010. 9. 24. 17:39

자료따위! 선 포스팅, 후 수정인 것이다 ㅋㅋ

동헌이는 티스토리 이쁜데 나는 왜 이리 허하지 -_-;

'주절' 카테고리의 다른 글

부산 ITS의 추억  (1) 2010.11.12
헉.. ㅡㅡ;  (0) 2010.10.14
1004  (0) 2010.10.04
헉...  (0) 2010.10.01
Tistory 시작!  (3) 2010.09.15
:
Posted by 투잌

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 9. 23. 15:37

0923) C 보충 공부2010. 9. 23. 15:37

비공개용

= : 오른 쪽에 있는 값을 왼쪽에 대입한다. 

+ : 왼쪽과 오른쪽에 있는 값을 더한다.

- : 왼쪽에 있는 값에서 오른쪽에 있는 값을 뺀다.

* : 왼쪽에 있는 값을 오른쪽에 있는 값으로 곱한다.

/ : 왼쪽에 있는 값을 오른쪽에 있는 값으로 나눈다.

% : 왼쪽에 있는 값을 오른쪽에 있는 값으로 나눠서 나머지를 반환한다.

========================================================

a+=b   >> 같은의미 >> a=a+b : a의 값을 b만큼 증가시킨다.

a-=b   >> 같은의미 >> a=a-b : a의 값을 b만큼 감소시킨다.

a*=b   >> 같은의미 >> a=a*b : a의 값을 b만큼 곱한다.

a/=b   >> 같은의미 >> a=a/b : a의 값을 b만큼 나눈다.

a%=b   >> 같은의미 >> a=a%b : a의 값을 b만큼 나눈 뒤의 나머지를 구한다.

========================================================

++a : 값을 1증가 후 연산을 진행(선 증가, 후 연산)
 >> ex) printf("%d", ++a);

a++ : 연산을 진행한 후 값을 1증가(선 연산, 후 증가)
 >> ex) printf("%d", a++);

--b : 값을 1 감소 후 연산을 진행(선 감소, 후 연산)
 >> ex) printf("%d", --b);

b-- : 연산을 진행한 후 값을 1감소(선 연산, 후 감소)
 >> ex) printf("%d", b--);

========================================================

< : ex) a<b 
     a가b보다 작은가?

> : ex) a>b
     a가b보다 큰가?

= : ex) a=b
     a와 b가 같은가?

!= : ex) a!=b
     a와 b가 같지 않은가?

<= : ex) a<=b
     a가 b보다 작거나 같은가?

>= : ex) a>=b
     a가 b보다 크거나 같은가?

========================================================

&& : 피연산자가 모두 참이면 true를 반환(and의 의미)
       ex) a && b

|| : 피연산자 중 하나라도 참이면 true를 반환(or의 의미)
       ex) a || b

!  : 피연산자가 true면 false를, false면 true를 반환(not의 의미)
       ex) a!



'공부' 카테고리의 다른 글

1008) C언어로 2 ~ 50까지 소수 구하기 (코드)  (0) 2010.10.08
0929) 공부 / (펌) 실수를 2진수로 표현  (0) 2010.09.29
0920) 컴파일  (0) 2010.09.20
0920) 환경변수 등록  (0) 2010.09.20
0917) 유닉스 계보  (0) 2010.09.17
:
Posted by 투잌
2010. 9. 20. 14:18

0920) 컴파일 공부2010. 9. 20. 14:18


* 인터넷 검색의 결과로 한 포스팅이기 때문에 사전적 의미나 정확한 사실과 차이가 날 수 있음을 양해 구합니다. 공부용 목적으로 포스팅 하였습니다.
* 저작권의 문제 발생시 바로 삭제, 비공개하겠습니다. 지적 부탁드립니다.

목표 : 컴파일의 뜻과 단계, 각 중요단어를 이해한다.

목차 : 1. 컴파일이란?
         2. 컴파일의 단계
         3. 중요단어

1. 컴파일(compile) 이란?
 
고급언어로 쓰여진 프로그램을 그와 의미적으로 동등하며 컴퓨터에서 즉시 실행될 수 있는 형태의 목적 프로그램으로 바꾸어 주는 번역 프로그램.

고급언어로 쓰여진 프로그램이 컴퓨터에서 수행되기 위해서는 컴퓨터가 직접 이해할 수 있는 언어로 바꾸어 주어야 한다. 이러한 일을 하는 프로그램을 컴파일러라고 한다. 예를 들어 원시언어가 파스칼(Pascal)이나 코볼(Cobol)과 같은 고급언어이고 목적언어가 어셈블리 언어나 기계어일 경우, 이를 번역해 주는 프로그램을 컴파일러라 한다.

컴파일을 하기 위하여 입력되는 프로그램을 원시 프로그램이라 하고 이 프로그램을 기술한 언어를 원시언어(source language)라 한다. 또 번역되어 출력되는 프로그램을 목적 프로그램이라 하고 이 프로그램을 기술한 언어를 목적언어(object language 또는 target language)라 한다. 한 프로그램을 컴파일하여 목적 프로그램으로 바꾸어 놓으면, 원시 프로그램을 수정하지 않는 한 계속 반복해서 수행할 수 있다.

크로스 컴파일러(cross-compiler)라는 것은 원시 프로그램을 컴파일러가 수행되고 있는 컴퓨터의 기계어로 번역하는 것이 아니라, 다른 기종에 맞는 기계어로 번역하는 컴파일러를 말한다. 이 밖에 다른 번역기를 살펴보면 어셈블러(assembler), 인터프리터(interpreter), 그리고 프리프로세서(preprocessor) 등을 들 수 있다.


어셈블러는 어셈블리 언어로 쓰여진 프로그램을 입력으로 받아 기계어 프로그램으로 바꾸어 주는 번역기이며, 어떤 번역기는 원시언어를 특수한 형태의 중간언어로 변환하는데 인터프리터는 이러한 중간언어를 입력으로 받아 목적언어로 변환하지 않고 직접 수행하는 프로그램이다.


고급언어로 쓰여진 프로그램의 의미를 수행하는데 있어서 컴파일러는 그와 동등한 의미를 갖는 목적 프로그램으로 바꾸어 목적 프로그램을 수행함으로써 결과를 얻고, 인터프리터는 원시 프로그램의 의미를 직접 수행하여 결과를 얻는다. 원시 프로그램의 수정 없이 계속 반복 수행하는 응용 시스템에서는 컴파일러가 효율적이며, 개발 시스템이나 교육용 시스템에서는 인터프리터가 더 능률적이다.

출처 : 네이버 지식사전
=================================================================

2. 컴파일의 단계





프로그램을 작성하는 과정은 (C언어 기준)

첫 번째 : 프로그램을 작성한다.
두 번째 : 컴파일이라는 과정을 거친다.
세 번째 : 링크라는 과정을 거친다.
네 번째 : 실행 파일이 생성된다.

로 나눌 수 있다. 이 중 자신이 구현하고자 하는 것을 C언어를 이용하여 논리적으로 작성하게 되는데 이렇게 해서 작성된 것을 소스-코드(source-code) 라고 하고 그 파일을 소스-파일 이라고 한다. 더불어 이렇게 프로그램을 작성하는 과정을 흔히 코딩(cording)이라 한다.

컴파일과 프로그래밍 과정은 다음과 같다.
처음의 소스 파일은 우리가 작성하는 ".c"파일이다 실행파일을 만들기 위해 가장 먼저 실행되는 것은 전처리기(Preprocessor)이다. 전처리기를 통해서 ".i"파일이 생성되고, 컴파일러에서 하드웨어 종속적인 어셈블리코드(".asm")를 생성하게 된다. 이후 어셈블러(Assembler)에 의하여 어셈블리어가 오브젝트 파일을 생성하고, 이 오브젝트 파일들이 링킹(Linking)과 재배치(Relocation)과정을 거쳐 실행 파일이 생성된다.

=================================================================

3. 중요단어

전처리(preprocess)
컴파일러는 사용자가 작성한 코드를 컴파일하기에 앞서 전처리문에서 정의해 놓은 문장들을 먼저 처리한다.

종류로는 #include, #define, #if, #error, #line, #pragma 등이 있다.
이것은 방대한 소스 코드를 지우지 않고 활성화와 비활성화하는 데에 가장 많이 이용된다.
즉, 기존에 있는 소스 코드를 건드리지 않고 부분적인 컴파일을 하는 것이다.
어떤 C 컴파일러는 전처리문의 첫 문자 #이 항상 그 라인의 첫 문자이어야 한다.


★ i파일
전처리 과정이 끝난 후 생성되는 파일이다.

★ asm 파일
기계가 이해할 수 있는 어셈블리 코드가 생성된 파일이 .asm 이다.

★ obj 파일
.asm 파일이 어셈블러(Assembler)에 의하여 오브젝트 파일 내에 저장되게 된다. 오브젝트 파일은 .obj라는 확장자를 가지고 있다.

어셈블 컴파일
어셈블러(assembler)는 어셈블리어를 기계어 형태의 오브젝트 코드로 해석해 주는 컴퓨터 프로그램을 말한다.

이것은 어셈블리 명령 부호를 오피코드로 해석할 뿐만 아니라 메모리의 위치들을 이름으로 표시하는 기능, 매크로를 통한 문장 치환 기능 등을 함께 제공한다. 높은 수준의 어셈블러는 고급 제어 구조, 높은 수준의 프로시져/함수 선언 및 호출, 높은 수준의 자료형 추상화 같은 높은 수준의 언어 추상화 기능을 제공하기도 한다.

★ 링커(Linker)
링커의 역활은 생성된 오브젝트 파일과 라이버러리 함수를 연결해 하나의 실행파일을 만드는것이다 이것을 링킹이라 한다


'공부' 카테고리의 다른 글

0929) 공부 / (펌) 실수를 2진수로 표현  (0) 2010.09.29
0923) C 보충  (0) 2010.09.23
0920) 환경변수 등록  (0) 2010.09.20
0917) 유닉스 계보  (0) 2010.09.17
0916) 20100916  (0) 2010.09.16
:
Posted by 투잌
2010. 9. 20. 11:02

0920) 환경변수 등록 공부2010. 9. 20. 11:02

시스템 등록정보 -> 고급 -> 환경 변수 -> Admin

INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\atl\include;C:\Program Files\Microsoft Visual Studio\VC98\mfc\include;C:\Program Files\Microsoft Visual Studio\VC98\include

lib
C:\Program Files\Microsoft Visual Studio\VC98\mfc\lib;C:\Program Files\Microsoft Visual Studio\VC98\lib

MSDevDir
C:\Program Files\Microsoft Visual Studio\Common\MSDev98

path
C:\Program Files\Microsoft Visual Studio\Common\Tools\WinNT;C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin;C:\Program Files\Microsoft Visual Studio\Common\Tools;C:\Program Files\Microsoft Visual Studio\VC98\bin

'공부' 카테고리의 다른 글

0923) C 보충  (0) 2010.09.23
0920) 컴파일  (0) 2010.09.20
0917) 유닉스 계보  (0) 2010.09.17
0916) 20100916  (0) 2010.09.16
0915) CPU의 구조(2) - 정리중  (0) 2010.09.16
:
Posted by 투잌
2010. 9. 20. 10:33

0920) 업무 / printf 연습 / vmware 설치 및 실행. 2010. 9. 20. 10:33

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 9. 20. 08:16

0917) 업무 / 교양 / 전기, 전자 / 반도체 2010. 9. 20. 08:16

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 9. 17. 11:02

0917) 유닉스 계보 공부2010. 9. 17. 11:02


Unix

AT&T에 의해 1960년대 말에 개발되어 지금까지 사용되고 있는 컴퓨터 운영체제이 다. 마이크로소프트의 MS-DOS, 윈도 3.1, 윈도 95/98 등이 원래는 PC용 운영체제로 개발되어 점차 윈도 NT, 윈도 2000(엔터프라이즈) 등의 서버 시스템용 운영체제로 발전하는 것과 달리, 유닉스는 메인프레임, 중형, 소형 컴퓨터 시스템용 운영체제로 사용되어 오다 최근 PC용 운영체제로 거듭나고 있다. 오랜 역사를 지닌만큼 개발 과정에서 BSD, SYSⅤ와 같은 계열로 분화되었고, SunOS, OSF/1, AIX, HP-UX, 솔라리스(Solaris), IRIX, SCOUNIX, 리눅스(Linux) 등과 같은 다양한 버전의 유닉스 운영체제들이 등장하였다.

출처 : http://www.unix.co.kr

unix.jpg

다양한 유닉스들

unix_tree.jpg

  • BSD(Berkeley Software Distribution) 계열 유닉스
    캘리포니아 버클리대학에서 무료로 배포하기 시작한 유닉스 버전들을 일컫는다. BSD 유닉스 개발자들은 가상 메모리 지원, C shell, 작업 제어, TCP/IP 네트워킹 추가 등 여러 가지 기능을 추가해 발전시켰다. 1980년대에 발표된 4.2 BSD와 4.3 BSD는 SYSⅤ 계열의 유닉스에 많은 영향을 끼쳤고, 1993년에는 4.4 BSD가 발표된바 있다.

  • 시스템Ⅴ(SYSV: System Five) 계열 유닉스
    AT&T에서 초기에 개발한 유닉스 버전은 계속 개선되어 버전 7까지 이르렀고, 이후 1980년대부터는 BSD 계열 유닉스에서 선보인 갖가지 성과를 포함하여 시스템Ⅲ, 시스템Ⅴ로 발전하게 된 유닉스 버전들을 통칭하여 시스템Ⅴ(알파벳 'V'가 아닌 로마자 '5'이다)라고 부른다. 시스템Ⅴ의 후속 버전들은 '시스템Ⅴ 릴리즈4'이므로 간단히 'SVR4'로 표시한다. 1994년 이후부터는, 상용화된 유닉스 계열 운영체제 업체들의 업계 표준화 방침에 따라, 상용 유닉스는 대체로 SYSⅤ 유닉스 계열의 버전을 채택한다.

  • POSIX(Portable Operating System Interface for Computer Environment) 유닉스
    IEEE/ANSI의 각 위원회가 안을 제시한 개방형 운영체제에 대한 권고안을 토대로 작성한 개념적인 운영체제로, 유닉스 운영체제를 기본으로 하고 있다. 리눅스가 따르고 있는 POSIX(포식스) 1003.1은 유닉스 형태의 운영체제로, 최소의 인터페이스만을 정의하고 있다.

unix_history-simple.png

리눅스 배포판 계보



'공부' 카테고리의 다른 글

0920) 컴파일  (0) 2010.09.20
0920) 환경변수 등록  (0) 2010.09.20
0916) 20100916  (0) 2010.09.16
0915) CPU의 구조(2) - 정리중  (0) 2010.09.16
0914) OS의 역사  (0) 2010.09.15
:
Posted by 투잌
2010. 9. 16. 16:19

0916) 20100916 공부2010. 9. 16. 16:19

'공부' 카테고리의 다른 글

0920) 환경변수 등록  (0) 2010.09.20
0917) 유닉스 계보  (0) 2010.09.17
0915) CPU의 구조(2) - 정리중  (0) 2010.09.16
0914) OS의 역사  (0) 2010.09.15
0913) PC의 역사  (0) 2010.09.15
:
Posted by 투잌
2010. 9. 16. 10:03

0916) 업무 / 기본 교양공부 / 2010. 9. 16. 10:03

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 9. 16. 09:26

0915) CPU의 구조(2) - 정리중 공부2010. 9. 16. 09:26

=============================================================================

CPU의 정의

 

  • 우리는 보통 컴퓨터를 부를때 386,486,팬티엄,팬티엄IV 들과 같이 이름을 붙이는데 이것은 컴퓨터에 장착되어 있는 CPU의 종류에 따라 붙여진 명칭입니다.

 

  • 컴퓨터의 성능을 첫 번째로 좌우하는 것이 바로 CPU이기 때문에 발생한 현상이라 할 수 있습니다

 

  • 중앙처리장치(Central Processing Unit).

 

  • 컴퓨터를 구성하는 모든 장치를 제어하고 동작을 감시하는 제어기는과 컴퓨터에서 실행되는 모든 명령을 해석하고 실행하며 데이터의 연산을 담당 하는 기능.

 

CPU의 종류

 

  • CISC(Complex Instruction Set Computer) 
  1. 명령어가 가변적이고 복잡한 방식.
  2. 다량의 명령어를 처리하는 형식으로 많은 트랜지스터가 양이 적다       
  3. 호환성이 뛰어나고 사용할 수 있는 프로그램이 많다.
  • RISC(Reduced instruction Set Computer)
  1. 고정된 길이의 명령어를 사용하는 방식.
  2. 단축 명령어 방식으로 트랜지스터 양이 적다.
  3. 매킨토시,모토롤러 CPU,서버급에 사용.

 

CPU의 구조

 

 

  • 실행 유닛 (Euc Execution Unit)
  1. 실행 유닉은 마이크로 프로세서의 각 명령어를 수행하는 유닛이다.
  2. 실행유닛에는 ALU(Arithmetic Logic Unit)와 제어 유닛(CU:Control Unit),레지스터로 구성된다.ALU에서는 덧셈이나 비교 연산과 같은 산술연산, 논리연산을 수행한 후 중간 결과를 레지스터에 보관한다.
  • 명령어 유닛(Instruction Unit)
  1. 명령어 유닛(Instruction Unit)은 메모리에서 가져온 명령어를 실행유닉에서 정확히 수행할 수 있도록 제어하는 유닛이다. 이때 제어 유닛은 ALU나 레지스터들이 잘 작동되도록 하여준다.
  • 어드레싱 유닛(Addressing Unit)
  1. 어드레싱 유닛은 CPU가 메모리나 입출력 장치에서 데이터를 읽거나 쓸때 메모리나 입출력 어드레스를 만들어 주는 유닛이다.
  • 버스 인터페이스 유닛(Bus Interface Unit)
  1.  버스 인터페이스 유닛은 어드레스, 데이터, 컨트롤 버스를 통해서 마이크로 프로세서 외부와 연결시켜 주는 유닛이다.

 

cpu 대역폭

  • CPU와 주변기기 사이에 한번에 주고 받을 수 있는 데이터 폭을 의미
  • 데이터를 전달하는 통로인 버스의 폭.
  • 동시처리 가능한 데이터의 처리 용량에 따른 분류
  • 8Bit -> 16Bit -> 32Bit -> 64Bit로 발전.

     Pentium(32Bit) → Pentium Pro(32Bit) → Pentium MMX(32Bit) →  

     Pentium II(32Bit) → Pentium II(32Bit) → Pentium III(32Bit) →  

     Pentium 4(32/64Bit) → Core2Duo(64Bit)

 

CPU의 처리 기준

 

  • CPU가 데이터를 처리하는 속도의 기준은 초당 얼마 만큼의 데이터를 처리할 수 있는 가로 나타냅니다.
  • IPC(Instruction Per Clock) : 클럭당 처리 명령수

  • 클럭(Colock)
  1. 전류가 흐르는 상태(on)와 흐르지 않은 상태(off)
  2. 클럭 발생 장치로 부터 만들어지는 일정한 주기로 진동하는 전기적인 리듬.

 

  • 1Hz란 1초에 1주기를 진동하는 클럭
  • CPU는 기본적으로 1번의 클럭에 1개 명령 처리 (CPU 및 시스템의 속도 표현 단위)

 

   Cache 메모리

 

  • 속도가 다른 두 장치 사이에 위치하는 임시 기억 장치.
  • 장치간의 속도를 향상 시키는 구실
  • 반복적인 엑세스에서 처리 속도를 향상 시킨다.

 

CPU에서 Cache 메모리

 

  • L1캐시
  1. 아무리 메모리의 속도가 빠르다 하더라도 CPU의 클럭 소도를 따를 수는 없습니다. 결국 CPU 는 명령을 처리한 후에 메모리로 그결과를 보내고 다시 새로운 데이터가 전송되어 오는 시간 동안 아무일도 할 수 없게 됩니다.
  2. 메모리는 CPU가 필요로 하는 만큼의 데이터를 공급해 줄 수 없기 때문인데 그래서 CPU는 자체적으로 캐시(Cache)라는 빠른 속도의 메모리 공간을 두어 자주 사용하는 데이터나 명령어를 저장하여 빠른 속도로 처리하게 됩니다
  3. 1차 캐시의 처리속도는 CPU의 클럭과 같기 떄문에 속도차이에 의한 병목현상을 극복할 수 있는 것입니다. 2차 캐시와 마찬가지로 SRAM을 사용합니다..
  • L2캐시

 

  1. 외부 캐시라고도 하는 2차 캐시는 CPU가 1차 캐시에서 데이터를 찾을수 없을 때 찾는 곳입니다. 만약에 2차 캐시에서도 필요한 데이터를 찾지못하면 비로소 메인 메모리에 접근하게 됩니다.
  2. 2차 캐시의 속도는 1차 캐시의 1/2속도로 동작하며 CPU 클럭과 함께 CPU의 성능을 좌우하는 핵심적인 요소로 취급되어 집니다.
  3. 2차 캐시의 용량에 따라 CPU의 가격에 크게 변화 합니다. 

 

CPU 의 작동 속도

 

 

 


'공부' 카테고리의 다른 글

0917) 유닉스 계보  (0) 2010.09.17
0916) 20100916  (0) 2010.09.16
0914) OS의 역사  (0) 2010.09.15
0913) PC의 역사  (0) 2010.09.15
0913) 프로그래밍 언어  (0) 2010.09.15
:
Posted by 투잌
2010. 9. 15. 17:26

0914) OS의 역사 공부2010. 9. 15. 17:26


* 인터넷 검색의 결과로 한 포스팅이기 때문에 사전적 의미나 정확한 사실과 차이가 날 수 있음을 양해 구합니다. 공부용 목적으로 포스팅 하였습니다.
* 저작권의 문제 발생시 바로 삭제, 비공개하겠습니다. 지적 부탁드립니다.

목표 : OS의 역사와 발전상, 그리고 여러 종류에 대해 알아본다.

목차 : 1. OS란?
         2. OS의 시대별 변천사
         3. 종류별 OS의 발전상

1. OS란?

Operating System 의 약자이다. 우리나라로 넘어올 때 '운영체제'라는 단어로 번역되어 지금까지 사용중이다. 뜻을 풀이하자면 컴퓨터의 하드웨어와 소프트웨어를 제어하여, 사용자가 컴퓨터를 쓸 수 있게 만들어주는 프로그램을 말한다.

컴퓨터 안의 디바이스(장치)들이, 예를 들어 프린터가 홀로 알아서 인쇄를 한다던가, 모니터가 홀로 알아서 화면을 출력할 수는 없다. 장치들이 각각의 기능을 하려면 그것을 관리하고 명령하고 제어하는 시스템이 있어야 하는데 이것이 운영체제, 즉 OS인 것이다.

OS는 1950년대부터 지금까지 꾸준히 발전하여 왔고, 현재는 가장 많이 쓰이는 윈도우즈 부터 맥 OS, 그리고 유닉스와 리눅스등이 발전하고 있다.

2. OS의 시대별 변천사

1) 일괄처리 시스템(1950년대)
초기 운영체제의 형태로 일괄 처리 시스템(batch processing system)이 있다. 여러개의 작업을 단일 작업으로 묶어서 일괄 처리하는 시스템으로 전송 속도가 빠른 자기 테이프나 자기 디스크와 같은 보조기억장치를 이용해서 프로세서를 구동시켰으나 보조 기억장치의 속도가 느려 자료를 처리하는 시간이 많이 걸렸다. 이를 보완하기 위해 모니터링 (monitoring), 버퍼링(buffering), 스풀링(spooling) 등 여러 가지 방법을 생각하게 되었는데, 이것들은 아직도 운영체제에서 중요한 개념들이다.
'모니터링'은 CPUT의 유휴시간(idle time)을 효율적으로 사용하기 위해 CPU의 프로세스를 지속적으로 관찰하여 작업 순서를 자동으로 바꾼다. '버퍼링'은 CPU가 어떤 작업을 처리하는 동안, 버퍼에 다음에 처리할 작업을 미리 읽어 자장해 두는 것이다. '스풀링'은 속도가 빠른 디스크를 버퍼처럼 사용해서 미리 입출력 장치에서 익는 것이다.

이러한 일괄처리 방식은 현대의 일반 시스템에서는 거의 사용하지 않는다. 아직까지 일괄 처리 방식을 사용하는 시스템이라면 펜 등으로 마킹한 카드를 읽어 점수를 처리하는 성적 처리 시스템 정도일 것이다.


2) 다중 프로그래밍 시스템(1960년대)
일괄 처리 방식이 CPU를 비효율적으로 사용하는 것을 착안해 이를 개선하여 발전시킨 것이 다중 프로그래밍 시스템(multi-programming system)이다. 이 방식은 CPU유휴시간에 다른 프로세스를 처리하여, 입출력 장치와의 속도차이를 해소한다.

따라서 실제 CPU 에서는 한 개의 프로그램만 실행되며, 나머지 프로그램은 입출력을 수행하거나 대기 상태가 된다. 단점은 메모리에 여러 프로세스를 수용해야 하므로 메모리 관리가 복잡해지며, 실행 대기중인 프로세스간에 처리 순서를 스케줄링 해야 한다는 것이다.


3) 실시간 처리 시스템(1960년대)
일괄처리 시스템과 다중 프로그래밍 시스템 모두 사용자가 지금의 시스템처럼 명령을 내리고 이를 바로 실행할 수 있는 형태가 아니었다. 운영체제에 특정한 작업을 동작시키면 끝날때 까지 아무것도 못하는 시스템이었다.

실시간 처리 시스템(real-time processing system)은 일정시간 동안 정해진 프로세스를 실행한 후 다음 프로세스에 대한 대기와 실행 등을 제어할 수 있다. 이 시스템은 공정 제어 기계나 의료기 시스템 등에 사용되고 있다.


4) 시분할 처리 시스템(1960년대)
우리가 현재 가장 일반적으로 사용하고 있는 운영체제와 비슷해진 것은 시분할 처리 시스템(time-sharing system)부터다. 시분할 처리 시스템은 프로세스의 사용시간을 작게 나누어 다중 사용자(multi-user)나 여러 작업을 한대의 컴퓨터에서 할 수 있게 되었다.


5) 분산 처리 시스템(1980년대)
분산 처리 시스템(distributed data processing system)은 하나의 대형 컴퓨터에서 수행하던 기능을 분산된 여러 컴퓨터에 분담시킨 후, 네트워크를 통하여 처리하는 방식이다. 이에 대한 표준으로는 코바(CORBA, Common Object Request Broker Architecture)가 있다. 코바는 네트워크에서 분산 프로그램 객체를 생성, 배포, 관리하기 위한 구조와 규격이며, 네트워크에서 이기종간의 시스템이 서로 통신할 수 있도록 하였다.


6) 다중 처리 시스템(1990년대)
다중 처리 시스템(multi-processing system)은 여러 개의 작업을 하나의 시스템에서 동시에 처리할 수 있는 시스템을 말한다. 그 대표적인 경우로는 리눅스 시스템이 있는데, 각각의 CPU가 언제나 실행중인 프로세스를 갖도록 하여 CPU의 활용을 극대화하는 것이다. 프로세스의 수가 CPU보다 많은 경우(대부분의 경우가 이렇다), 나머지 프로세스들은 실행되기 위해서 CPU를 사용할 수 있을때까지 기다려야 한다.

다중 처리는 간단히 설명하면, 프로세스가 무언가를 기다려야 하기 전까지는(보통은 시스템 자원을 기다린다) 계속 실행되며, 기다리고 있다가 자원을 얻으면 프로세스는 다시 실행되는 것이다. DOS와 같은 단일 처리(uni-processing)시스템에서 cpu는 아무 것도 하지 않고 대기시간을 낭비한다.

반면에 다중 처리 시스템에는 동시에 많은 프로세스가 메모리내에 존재하며, 프로세스가 무언가를 기다려야 할 때마다 운영체제는 다른 대기중인 프로세스가 CPU를 사용하도록 한다. 어떤 프로세스가 다움에 실행되는 것이 가장 적당한 것인지를 선택하는 일은 스케줄러의 역할이다. 리눅스는 공정한 여러가지의 스케줄링 정책을 사용한다.

 

운영체제에 대한 다른 관점으로는 윈도우, 리눅스, 유닉스, 넷웨어(Netware), 매킨토시(Macintosh)와 같이 그 종류를 생각할 수 있다. 좀 더 세분화하면 매우 다양하지만 윈도우가 운영체제의 80% 이상을 차지하고 잇는 것이 현실이며, 서버 역시 윈도우 제품군의 사용률이 많이 증가하고 있다.
 
하지만 대형 서버의 경우에는 IBM의 AIX, HP의 HP-UX, SUN의 Solaris가 아직도 강세다. 아직까지 윈도우가 대형 서버로 동작하고 있는 경우를 본 적이 없지만 앞으로는 어떻게 될지 예측할 수 없다. 하지만 역시나 서버 시장에서 윈도우 시스템은 그다지 환영받고 있지 못하다. 서버 관리자 중 윈도우 서버를 좋아하는 관리자 역시 아직 본 적이 없다.

3. 종류별 OS의 발전상

★유닉스 
1) 유닉스의 탄생
UNIX가 탄생하게 된 시기는 1960년대 후반이었다. UNIX OS(Operating System)를 말 할 때는 두 사람을 빼놓을 수 없는데, 그 중 한 사람은 켄 톰슨(Ken Tompson)이고, 나머지 한 사람은 데니스 리치 (Dennis Richie)라는 인물을 꼽을 수 있다. 그 중에서 켄 톰슨은 "UNIX의 아버지"라고 불리고 있으며, UNIX OS를 직접 만든 장본인이기도 하다.

1965년에 MIT공대와 GE(General Electric)사에서 합작하여 다중 사용자 환경을 구현하기 위한 일환으로 AT&T사의 BELL LAB연구소에서 MULTICS(MULTIplexed Information Computing System ) OS개발 PROJECT를 추진하게 되었는데, 켄 톰슨은 그 PROJECT의 한 일원으로 시스템 프로그래머로 일하게 되었고, 결국 MULTICS OS가 완성되어 GE사 제품의 "GE 645" 컴퓨터에 탑재하였으나, 수행 SPEED가 너무 느리고 사용이 복잡하여, 불행하게도 MULTICS PROJECT는 1969년에 중단 되었다.

그러나 톰슨은 MULTICS OS와 CMAS(Cambrige Multiple Access System), CTSS(Compatible Time Sharing System)의 장점을 수용하여, 새로운 OS 즉 "PROJECT에 참여하는 여러 프로그래머 간에 개인의 DATA는 보호하면서, 공유해야 할 DATA는 여러 사람이 쉽게 사용할 수 있도록 해주는 OS"를 개발하였는데, 그것이 바로 최초 "UNIX OS"로 1969년에 PDP-7 미니 컴퓨터 장비에서 움직이는 OS가 된 것이다.

당시 OS명칭은 다목적용인 MULTICS OS에 대응시켜 단일목적의 의미를 갖는 UNICS(UNIplexed Computing System) OS로 불리였으나, 후에 UNIX로 정식 명칭을 바꾸었고, 최초 UNIX OS는 상업적인 목적에서 개발된 것이 아니고, 숙련된 프로그래머를 위해 PROJECT 개발시 보다 편한 개발환경 제공차원에서 만들어진 것이 다른 OS와 주된 차이점이라 할 수 있다.

그러나, 최초에 만들어진 UNIX OS는 단일 사용자를 지원하는 OS였으며, OS 소스 코딩도 PDP-7 컴퓨터의 ASSEMBLY 언어로 작성되어, 기계 종속적인 OS로 주로 AT&T사의 BELL LAB연구소에서만 사용 되었다. 켄 톰슨은 시스템 프로그래머로 프로그램 언어에도 상당한 관심을 가지게 되었는데, 당시 ALGOL언어를 수정하여 Cambrige 대학에서 만든 BCPL( Basic Combined Procedure Language) 언어의 구조적 프로그래밍 개념을 도입하여 B 언어를 1971년에 완성하게 되었고, 이때 데니스 리치는 켄 톰슨의 B언어를 대폭 수정하여, 영문 알파벳 "B" 다음의 "C"를 의미하는 C 언어를 1972년에 고안하게 된다.

당시 C 언어는 다른 고급수준 언어와 대별되는 차이점이 있었는데, 그것은 구조적 프로그래밍 기법을 갖는 고급언어(High Level Language)의 성격과 저급 수준언어(Low Level Language)가 갖는 BIT단위 처리가 가능한 점으로 OS의 소스 코딩을 C 언어로도 가능하게 된 점인데, 이러한 C 언어의 개발이 없었더라면 오늘날의 업계의 표준인 UNIX OS로 자리를 굳히지 못하였을 것이다.

켄 톰슨과 데니스 리치는 1973년 PDP-11 장비에서 탑재된 UNIX OS를 C 언어로 코딩하는데 성공하였으며, 이때부터 UNIX OS는 이식성이 강한, 다중 사용자를 지원하는, 간결하면서 프로그램 개발이 용이한 언어로 탄생하게 된다.

최초 C 언어로 작성된 소스코드는 약 11000 라인으로 그 중 95%인 10000 라인은 C 언어로 작성되었고, 나머지 1000 은 ASSEMBLY 언어로 작성 되었는데, 그 중에 800 라인은 기계 종속적인 부분 때문이고, 나머지 200 라인은 수행 SPEED를 높이기 위한 목적으로 작성되었으며, 이후 다른 장비에 이식(PORTING)은 약 5% 의 소스만 수정하면 간단하게 되었다.

2) UNIX OS의 탄생 이후 ......?
어떻게 UNIX OS가 세상에 알려지게 되는가? 또 UNIX OS가 갑자기 급 부상하게 된 것은 무엇 때문인가? 70년대와 80년대까지의 역사를 위주로 살펴 보겠다.

처음 UNIX OS가 탄생하게 된 배경은 단지 프로그래머의 개발 환경을 개선해 주겠다는 순수한 취지만은 아니었고, 그 이면에는 켄 톰슨의 개인적인 문제와 AT&T의 회사정책도 포함되어 있다.

MULTICS OS개발이 무산되고 난 후 켄 톰슨은 태양계 행성의 움직임을 알아보는 우주여행(SPACE TRAVEL) 모의실험( SIMULATION)을 연구 중이였는데, 당시 PDP-11장비에 MULTICS OS를 이용하기에는 비용이 너무 비싸다는 문제와, 또 MULTICS OS의 실패 등으로 연구 개발 비용 지원이 용이하지 않아 경영진이 만족 할만한 또 다른 제품개발을 해야 하는 등 여러 가지 문제에 봉착하게 되었고, 결과적으로 값싼 PDP-7장비에 문서처리 기능을 갖춘 UNIX OS를 개발하게 되었다.

여하튼 1971년 UNIX OS는 AT&T사의 정식제품으로 등록 되었고, AT&T사 내에서 원하는 사람은 무료로 사용할 수 있도록 허가 되었다. 1974년 7월에는 최초로 일반인에게 UNIX OS가 소개되었는데, 이는 켄 톰슨과 데니스 리치가 CACM 학술지에 " The UNIX Time-Sharing System "이라는 논문을 내놓으면서부터 이다.

1976년에는 UNIX OS가 오늘날 세계적으로 알려지게 되는 중요한 계기를 맞는 해가 되었는데, 그것은 AT&T사에서 UNIX OS를 일반 대학교나 연구소에 거의 무료로 UNIX OS 전체 소스코드를 보급하기로 결정하면서부터 시작 되었다..

그 당시만 해도 UNIX OS를 제외한 운영체제(OS)는 해독하기 어려운 ASSEBLY 언어로 구성되어 있었고, 그나마 KNOW-HOW로 알려져 그 중 일부만 공개되어 있는 실정이기 때문에, 일반 대학이나 연구기관에서 특정 OS의 내용을 분석한다는 것은 거의 불가능한 것으로 여겨 졌으나, AT&T사에서 OS 소스코드를 비영리기관이나 교육기관에 공개하므로 일대 변혁을 가져오게 되었다.

AT&T사의 이와 같은 결정은 두 가지 이유가 있었는데 하나는, 당시 AT&T사는 전신 전화를 담당하는 대표기관으로서, OS나 컴퓨터 판매로 이윤을 얻는 사업은 할 수 없도록 법적으로 제제가 되어 있었고, 두 번째 이유로는 어떻게든 UNIX OS를 개선 발전시켜야 한다는 목적에서 취해진 결정이다.


UNIX OS를 헐값에 공급 받아 가장 큰 발전을 기하게 된 대학으로는, 캘리포니아 대학의 버클리 분교인데, 1970년대
말에서 1980년대 초까지 기존 OS를 전면적으로 연구하여 많은 기능을 추가 시켰고, 나름대로 "BSD(BERKELEY SOFTWARE DISTRIBUTION)"라는 명칭으로 VERSION을 체계적으로 관리하게 된다. BSD3, BSD4, BSD4.3 VERSION으로 계속 발전을 거듭하면서 C SHELL, VI EDITOR, LISP, PASCAL, SOKET COMMUNICATION, VIRTUAL MEMORY등 아주 유용한 기능들이 새로 추가 되었다.

한편 AT&T에서도 UNIX OS에 대한 계속적인 연구가 진행되었는데, AT&T에서는 1976년에 UNIX V6을 무료로 공급한 후 UNIX V7으로 VERSION UP을 하고 "SYSTEM" 이라는 명칭을 부여하여 체계적으로 VERSION을 관리하게 되었는데, SYSTEM III, SYSTEM V 가 대표적인 AT&T의 UNIX OS로 자리잡게 된다.

1980년대 초까지 UNIX OS는 기업체나, 연구소, 대학에서 사용하기 편하게 기능을 부여한 수정판이 몇 백 본이 될 정도로 폭 넓게 사용 되어지게 되니 그야말로 춘추 전국시대가 된다.

3) 통합화를 통한 UNIX OS의 성숙기......?

1980년 초, UNIX OS를 제공했던 AT&T사에서는, 드디어 UNIX OS를 상업적 이윤을 목적으로 판매할 계획을 하게 되지만, 가장 큰 문제는 여기 저기에서 사용되고 있는 많은 UNIX OS의 여러 기능들을 잘 통합하여 일원화된 UNIX OS를 보급하는 것이였다.

상업적 판매를 위한 일환으로 1982년에 AT&T사에서는 그 당시 주류를 이루어 왔던 SYSTEM계열과 BSD계열의 특징적인 기능을 통합하여, SYSTEM III를 발표하게 되고, 1983년에 BSD의 최종판인 4.3 VERSION의 기능까지 통합하여 SYSTEM V를 내놓으면서 본격적인 판매를 시작하게 된다.

물론 AT&T사에서 이러한 결정을 하기에는 자사의 많은 권한을 포기 해야 했고, 그래도 당시 UNIX의 인기는 급상승하여, 세계에 널리 알려져 있었으므로, 그 수익성도 많을 것으로 기대되어 이러한 결정을 강행하게 된다.

AT&T사는 점점 UNIX OS에 대한 성장잠재력을 알게 되었고, 당시 UNIX WORKSTATION 부문에서 가장 잘 알려진, SUN 마이크로 시스템즈사와 함께 "UI(UNIX INTERNATIONAL)"라는 기구를 창설하여, 세계 UNIX시장의 석권을 꿈꾸게 된다. 그때 SUN의 WORKSTATION에는 SunOS라는 UNIX OS가 탑재 되었는데, 그것은 버클리 대학의 BSD 4.3 VERSION을 기반으로 한 UNIX OS 였다.

이러한 UI기구 결성은, UNIX의 2대 조류가 연합하였다는 사실 하나만으로도 다른 컴퓨터 업계에서는 큰 충격으로 받아들여 지게 되었다. 이러한 컴퓨터 업계로는 UNIX 사업에 비교적 빨리 뛰어 들었던 휴렛팩커드(HP), 대형 컴퓨터에서 타의 추종을 불허하는 IBM, DEC사로, 각 사는 SYSTEM계열과 BSD계열의 OS특징에 자체적으로 여러 가지 KNOWHOW를 가미한 약간 독자적인 OS를 제공하고 있었다.

HP는 "HP-UX",IBM은 "AIX", DEC은 "Ultrix"라는 OS가 바로 그것이다.

위협을 느끼게 된 HP, IBM, DEC사도 UI기구에 맞설 수 있는 기구를 창설하게 되었는데,그것은 바로 "OSF(OPEN SYSTEM FOUNDATION)"이다. 눈뜨고 당할 수는 없다는 차원이었다. 일반 UNIX를 사용하는 업체에서는 이러한 현상에 우려의 목소리가 높았고, 그것은 어렵게 UNIX OS가 통합되는가 했더니, 또다시 서로 다른 형태로 분리 발전되어 나가는 점을 우려한 것이었다. 결국 UI와 OSF는 서로 경쟁하면서 서로 다른 신제품을 계속 개발하게 된다.

예를 들면 UNIX에서 제공하는 GUI(Graphical user interface)로 UI에서는 OPEN LOOK을 지원하게 되고, OSF에서는 Motif를 지원하게 되어, UNIX에서 제공하는 X-WINDOW가 어느쪽의 기술구조를 따르는가에 따라 내부적으로 서로 상이한 구조를 가지게 된다.

당시 UNIX OS는 PC업계에서도 많은 관심을 가지게 되었으며, 마이크로 소프트웨어사의 Zenix와, 또 다른 제품인 LINUX가 PC용 UNIX OS로 발표되었고 이외에도 약 10여종의 PC용 UNIX가 발표되어 PC이용자에게 각광을 받게 된다.

또한 UNIX시스템의 여러 분야에 "표준화 기구"가 참여하여 표준을 정하게 되는데, 이것은 UNIX시스템에서 사용되는 모든 S/W를 일정한 규칙이나 틀에 맞추어 개발하게 함으로, 비록 UNIX DB, UNIX OS, UNIX SYSTEM이 서로 다르더라도 상호간에 원활히 운영할 수 있는 호환성을 목적으로 추진되어 오늘날 "OPEN시스템"이 등장하게 되는 계기를 마련되게 된다.

이러한 표준화 기구로는 ANSI, IEEE, ISO, POSIX, XOPEN, FIPS등을 들 수 있는데, 그 중에 최근 XOPEN 기관에 의한 1170 SPEC의 표준은 UNIX OS설계에 대한 표준으로, 이 표준에 맞추어 OS를 개발하게 되면, 향후 기종에 무관하게 적합한 OS를 사용자가 선택하여 사용할 수 있는 등 사용자의 기존 투자비용을 보호 받을 수 있는 이점도 제공 받을 수 있게 된다.

최근에는 UI나 OSF도 각자의 독자노선에서 벗어나 UNIX를 통합하여 통일성 있게 개발하자는데 뜻을 같이하여 결국 AT&T사의 SYSTEM V 계열의 OS인 SVR4를 UNIX 표준OS로 정하였고, UNIX업체에서도 그에 맞추어 OS를 재 설계하게 되는데, SUN사의 SunOS도 SYSTEM V OS구조로 바꾸면서 그 명칭을 "SOLARIS"라고 바꾸게 되며, HP사의 HP-UX도 VERSION 10부터 SYSTEM V OS를 완벽하게 수용하게 된다.

UNIX OS의 취약한 기능들 즉 OLTP 처리기능, 시스템 보안기능, 분산 처리기능, 시스템통합 관리 기능 등이 계속 보완 되었으며, 주변기술 즉 전세계를 하나의 망으로 연결하는 INTERNET 기술, 대용량의 데이터를 처리할 수 있는 데이터베이스 기술, 지역적으로 떨어져 있는 컴퓨터간에 연계 처리하는 분산처리 기술, 일반 사용자를 위한 GUI기술들이 상당히 급진전하고 있다. 물론 컴퓨터 하드웨어 기술도, 최근 해를 거듭할수록 발전하여 하나의 CPU로 TIME SHARING하여 다중 처리하던 방식에서, MEMORY를 수 십 개의 CPU가 공유하면서 병렬 처리하는 SMP(SYMMETRIC MULTI-PROCESSOR) UNIX 장비도 개발되었으며, MEMORY를 공유하지않고 UNIX 컴퓨터를 여러 대로 묶어, 고속의 통신라인을 통해 병렬 처리하는 MPP(MASIVELY PARALLEL PROCESSORS) UNIX장비가 발표되어, 이제는 기존 HOST컴퓨터와 거의 동일한 성능의 UNIX장비가 계속 발표되고 있고, 실 사용업체도 많아지고 있다.


★리눅스 (Linux)
리눅스는 1991년 당시 헬싱키 대학 2학년생이던 리누스 토발즈가 자신이 수강하던 유닉스 과정의 교재였던 한정판 유닉스인 미닉스를 보고 단지 재미로 자신의 PC에서도 써보고자 하는 의도에서 만든 운영체제이다.

리눅스의 첫 공식 버젼은 1991년 10월 에 발표되었으며 1992년 1월에는 100명의 이용자가생겼다.

리눅스가 뉴스 그룹을 타고 공개되면서 많은 사람들이 이 공개용 리눅스에 대해 관심을 가지게 되었다. 더욱이 이 소스는 AT&T의 유닉스 관련 저작권에도 저촉되지 않는 것이었다.

그 후 스톨만 교수가 주축이 된 GNU그룹에서 이 리눅스 소스 코드를 가지고 프로젝트를 진행하게 되었고 이일을 계기로 전세계 의 수많은 개발자들이 리눅스의 소스코드를 받아 자신이 원하는 기능을 추가하고 다시 인터넷에 공개하는 방식으로 발전해갔다. 

이와 같은 전세계적인 개발 방식이 리눅스의 급속한 성장의 계기가 되었다.
현재 IBM과 같은 대기업에서도 리눅스에 대해 상당한 관심과 투자를 아끼지 않고있고 윈도우즈와 인텔사에 대해 반대하는 회사들의 투자와 지원으로 많은 관심을 끌고 있다.

<리눅스의 특징>
1. 리눅스는 무료판이며 완전한 공개 운영체제이다. (소스가 공개되있다,)
2. 유닉스와 유사한 형태를 가지고 있다. 리눅스는 유닉스의 한 계열이라고 불러도 될 정도로 유사한 모습을 가지고 있다.
3. 서버용 소프트웨어를 기본적으로 제공한다. 
4. 무료로 다운받아 설치할 수 있으며 수많은 배포판이 있다.

<리눅스의 단점>
리눅스의 단점은 유닉스가 가지고 있는 단점들과 유사한 점 이 많다.
1. 책임지고 개발하는 사람들이 적다.
2. 현재도 개발되고 있는 운영체제이다.
3. 리눅스는 컴퓨터에 대한 많은 지식을 요구한다.

리눅스는 전세계 개발자들이 자발적으로 참여하고 만들어가는 운영체제이기 때문에 사용자가 곧 개발자인 경우가 많다. 또한 문제가 생겼을때 알아서 해결해야 한다.

★ OS/2

 IBM사가 개인용 컴퓨터를 위해 만든 GUI 운영체제 입니다. 맨 처음에는 마이크로소프트사와 함께 개발하다가 결국에는 결별을 선언하고 단독으로 개발하게 되고, 이후 윈도와 치열하게 경쟁하는듯 하다가 윈도 95의 등장과 함께 서서히 역사의 뒤안길로 사라져버린 불운의 운영체제 이다.

윈도보다 뒤지는 부분도 없었고, 오히려 상당히 많은 부분에서 안정성과 성능이 뛰어났지만
"훌륭하게 잘 만들어진 제품은 알아서 잘 팔릴것"이라는 생각으로 마이크로소프트에 비해 상대적으로 마케팅을 소홀히 하는 바람에 치명적 타격을 입게 된다.

뿐만 아니라, Windows 3.0때부터 윈도는 수 많은 컴퓨터와 함께 번들되어 제공되었지만 OS/2는 독립된 비싼 패키지로 판매되었으며, 윈도가 많은수의 하드웨어를 지원하는데 반해 OS/2는 IBM계열을 제외하곤 하드웨어 지원이 상대적으로 많이 부족했기 때문에 윈도와의 경쟁에서 밀려버렸다.

OS/2는 원래 마이크로소프트사와 IBM사가 함께 노력해서 개발되었고 1987년에 첫번째 버전이 출시되었다.
IBM과 마이크로소프트 둘 다 각자의 상표를 붙여서 자신들만의 버전을 발표한다.
OS/2 1.x 버전은 80286에서 실행되도록 설계된 16비트 운영체제 였다.


OS/2 1.3 버전은 1991년에 출시되었는데 이 시기가 바로 마이크로소프트사와 IBM사가 결별을 선언하고 운영체제에서 자신들만의 길을 걷기 시작한 시기이다. IBM은 IBM OS/2 2 버전의 개발에 착수했고, 마이크로소프트사는 기술의 일부를 가져와서 Windows NT를 만드는데 사용하게 된다.

★ 맥 OS
 
매킨토시 컴퓨터의 운영 체계(OS). 매킨토시 OS라고도 한다. 맥 OS는 당초 매킨토시 시스템 소프트웨어의 일반적인 호칭이었으나 현재는 매킨토시용 OS의 이름으로 정식 채용, 상표가 되었다. 1984년에 처음으로 매킨토시를 발매한 이래 매킨토시의 OS는 마우스 조작에 의한 그래픽 사용자 인터페이스(GUI)나 윈도 표시를 재빨리 채용한 것으로 주목을 끌었다. 앞으로 랩소디(Rhapsody)라는 코드명으로 새로운 OS가 등장할 예정인데, 이것은 맥 OS의 조작 감각(look and file)을 가진 내부 구조를 대폭 변경해서 성능 향상을 도모한 것이다. 또 개인용 컴퓨터(PC) 호환기나 윈도즈상에서도 랩소디를 동작시킬 예정이다.
 

4. 1998년 이전까지의 OS 변천사 정리 (출처 네이버 블로그 http://blog.naver.com/dbman/40006608589)

1981년 10월
새로운 IBM PC를 위한 PC-DOS 1.0 이 발표되다. 곧 Microsoft는 MS-DOS를 발표했고,모든 희망자에게 라이선스를 부여한다.

1983년 1월
애플 컴퓨터는 최초의 그래픽 기반 인터페이스를 가진 마이크로컴퓨터의 하나인 Lisa를 개발했다. 신뢰성이 약한 하드웨어와 약 1만 달러에 달하는 가격으로 Lisa는 실패하게 된다. 그러나, 일년 후 적당한 가격의 Macintosh를 내놓는 계기를 마련하게 된다. Lisa와 Mac은 DOS 신봉자들을 비웃기라도 하듯 WIMP(Windows, Icons, Mice, Pointers) 인터페이스를 제공한다. 또한 폴더와 긴 파일 이름도 이 때 나오게 된다. 이것은 Windows 2.0에서야 겨우 지원하기 시작한 것이었다. 또한 몇몇 기능은 윈도95가 나와서야 겨우 구현되었다.

1983년 3월
사실상 다시 제작된 MS-DOS 2.0은 하드 디스크, 큰 프로그램들과 설치 가능한 디바이스 드라이버, Unix를 모방한 계층적 파일 시스템을 지원하게 된다. 여전히 파일 이름은 8자를 넘을수 없었고, 텍스트 모드의 인터페이스를 갖고 있었다.

1983년 10월
DOS 스프레드시트인 VisiCalc의 개발사에서 떨어져 나온 VisiCrop.는 최초의 PC를 위한 GUI인 "환경 통합적인" VisiOn을 발표했다. VisiOn은 512KB의 램과 하드 디스크를 필요로 했다. 이때까지만 해도 이것은 최첨단 기술이었다.

1983년 11월 10일
Microsoft는 DOS를 그래픽 인터페이스를 통해 기능을 확장하는 윈도우 환경을 발표했다.

1984년 9월
Digital Research에 의해GEM (Graphics Environment Manager)가 발표되었다. GEM은 DOS 어플리케이션을 실행할 수는 없었고 이로 인해 경쟁력이 없었다. GEM과 VisiOn은 윈도 시장을 공격했지만, 오리지날 윈도우가 그랬듯이 똑같은 문제에 부딪치게 되었다. 이 새로운 플랫폼들에서 사용할 수 있는 어플리케이션이 거의 없었던 것이다.

1985년 2월
IBM은 텍스트를 기반으로 한 DOS에서 다중 작업을 할 수 있는 TopView를 발표했다. TopView에서는 몇몇 도스 명령만 사용할 수 있었다. TopView는 거의 모든 DOS 인터럽트를 가로채었기 때문에 DOS의 배치 파일이 실행될 수 없었다. IBM은 TopView에 GUI 환경을 덧붙이겠다고 약속했지만 결국엔 그것은 실현되지 않았다.

1985년 7월
Quarterdeck Office Systems이 또 다른 DOS를 위한 다중 작업 도구인 DESQview를 발표했다. 이것은 한동안 일부 사용자들 사이에서 성공을 거두었다. Quarterdeck은 DESQview를 플랫폼으로 만들기 위해 개발자들을 독려했다. 그러나 Windows 3.0이 표준이 되면서 결국 두 손을 두는 수 밖에 없었다.

1985년 11월 20일
Windows 1.0이 발표되었다. 1.0 버전은 사용자들이 한번에 여러개의 프로그램을 사용할 수 있도록 했다. 개별 어플리케이션을 종료하거나 다시 실행할 필요없이 쉽게 어플리케이션을 전환할 수 있었다. 그러나, 윈도우 위에 윈도우를 겹쳐서 배열할 수 없어서 큰 불편함이 있었다. Windows 1.0을 위한 소프트웨어가 충분하지 않았고 시장을 공략하는데는 실패했다.

1987년 1월
Windows 1.0에서 작동하는 Aldus PageMaker 1.0이 발표되었다. PageMaker는 최초의 PC에서 WYSIWYG 방식을 지원하는 출판 도구였다. 데스크탑 출판 어플리케이션의 인기와 레이저 프린터의 발매는 Windows가 데스크탑을 석권하는데 큰 힘이 되었다.

*WYSIWYG 란?
 What You See Is What You Get (당신이 보는 것이 당신이 얻는 것)의 약어. 화면에 보이는 것과 동일한 인쇄 출력을 얻을 수 있는 기술을 가리키는 말로 매킨토시가 제공하는 탁상출판기능(DTP: Desk Top Publishing)이 대표적이다.

1987년 4월
IBM과 Microsoft는 운영 체제에 대한 원대한 꿈인 OS/2 1.0을 발표했다. Microsoft는 Windows의 개발을 계속했고 차세대 PC의 운영 체제에 대한 방책을 생각하고 있었다. OS/2 1.0은 GUI를 갖추지 않았다. 그리고 결국엔 부족한 어플리케이션, 하드웨어 지원 미흡, DOS 어플리케이션에 대한 미약한 지원, 이것을 사용하기 위해 PS/2를 사야하는지에 대한 혼동등으로 인해 실패하고 말았다.

1987년 10월 6일
PC에서 GUI 를 지원하는 최초의 스프레드 시트인 Excel for Windwos 2.0이 Lotus 1-2-3의 아성에 도전하며 시장에 나섰다. Excel은 Windows가 정통성을 얻는데 조력했지만, 많은 자원을 요구하고, Windows 디바이스 드라이버에 의존하는 것은 이 새로운 도전자의 약점이 되었다.  

1987년 12월 9일
Windows 2.0이 발표되었다. 이것은 이전 버전의 제목창으로 나열되던 윈도우 구성 대신 겹쳐질 수 있는 윈도우 시스템을 사용했다. 또한 80286 시스템이나 그 이상의 보호 모드를 사용할 수 있었고, 프로그램들이 DOS의 640KB 한계를 넘어설 수 있도록 했다. 1988년 6월에 이르러 2.1 버전이 나왔을 때 이것은 Windows 286으로 이름이 바뀌었다.
 
1987년 12월 9일
Intel의 최신 칩에 최적화된 2.0 버전인 Windows 386이 발표되었다. 이것은 시장성에 취약점이 있었지만 대부분에 있어서 사용자들이 DOS 프로그램들을 386 칩의 "가상 머신"을 통해 다중 작업할 수 있도록 했다. 이것은 Windows 3.0 개발에 상당한 기반을 제공했다.

1988년 6월
Digital Research는 DR-DOS를 발표했는데 언론은 이것의 강력한 유틸리티로 인해 MS-DOS보다 뛰어나다고 평가했다. 그러나 DR-DOS는 더 이상 발전하지 못했다.
왜냐면 Windows와 함께 동작하려면 패치(patch)가 필요했고, DR-DOS는 시장에서 주목할만한 자리를 차지하지 못했다.

1998년 10월 31일
IBM이 프리젠테이션 매니저를 포함한 OS/2 1.1을 발표했다. GUI를 구현한 최초의 OS/2 1.1은 OS/2 1.0에서 크게 업그레이드한 것이었다. 그러나 여전히 대중적인 DOS 어플리케이션에 대한 지원이 미약했고 현존하는 하드웨어에 대해서도 마찬가지였다.
OS/2의 이러한 문제점은 Microsoft가 Windows를 계속 개발하는데 용기를 주었다.
또한 IBM은 OS/2를 계속 개발해 나갔다. 한동안 시간이 지난 후 IBM은 Microsoft가 Windows에 목적이 있다고 비난했으며 2마리 토끼를 잡으려 한다고 했다.
 
1988년 12월
최초의 Windows용 워드 프로세서인 Samna Ami가 발표되었다. 사용자들은 출력물의 글꼴과 닮은 글꼴로 편집할 수 있었고, 실제로 나타나는 것과 마찬가지로 여백을 볼 수 있었다. WordPerfect는 워드 프로세서 가운데 독보적인 자리를 차지하고 있었으나, Ami 또한 아주 근소한 차이로 시장에서 상당한 영향력을 갖고 있었다.
Microsoft의 Word for Windows는 조만간 나오게 될 것이었다.

1990년 5월 22일
괄목할만한 사용상 편리함이 개선된 Windows 3.0이 발표되었다. 프로그램 관리자와 아이콘으로 작업하는 것은 MS-DOS가 관리하던 구형 Windows 2보다 훨씬 나았다.
파일 관리자도 새롭게 추가되었다. 개발자들은 자극을 받았고, 곧 윈도우 소프트웨어의 붐이 시작되었다. 안정성은 완벽하지 못했지만 Windows 3.0은 광범위한 제 3의 하드웨어와 소프트웨어 지원 그리고 PC 제작사들의 번들로 제공되므로써 즉시 시장을 장악했다.
Microsoft의 Windows 만들기 작업은 끝내 성과를 거두게 되었다.

 

1990년 11월
또다른 DOS를 위한 GUI인 GEOS 1.0이 소개되었다. 그러나, 결코 Windows의 경쟁자가 되지는 못했다. PC 매거지과 몇몇 다른 출판물들이 GEOS의 기술상 이점을 떠들어 댔지만, GEOS에서 작동하는 소프트웨어는 없었다. 개발용 소프트웨어조차 OS가 발표된 후 6개월이 지나도록 나오질 않았다.

1992년 3월
OS/2 2.0이 판매를 시작했다. 이 버전은 DOS/Windows 3.x를 잘 지원했다. 그러나, 복잡한 Object- Oriented Workplace 셀과 당시로는 과한 자원이 필요한 것이 부담이었다. OS/2는 여전히 광범위한 드라이버와 제 3의 소프트웨어 지원이 미약했고, Windows가 시장의 선두 주자로 나서고 있었다.

1992년 4월 6일
Windows 3.1이 발표되었다. 여러가지 버그가 수정되었고 보다 안정적이며 몇몇 교체 가능한 트루 타입 폰트들을 포함한 새로운 기능들이 첨부되었다. Windows 3.x는 미국에서 PC들 가운데 가장 많이 인스톨되는 운영체제가 되었고 이것은 1997년까지 계속 되었다.

1992년 7월 4일
Microsoft는 32비트 Windows NT를위한 차세대 API인 Win32를 발표했다. 최초로 "시카고"(윈도95의 코드 네임)에 대한 공개적 언급이 있었다. 또한 NT 제품이 어떻게 현존하는 Windows 아키텍쳐를 대신할 것인지도 얘기 되었다.

1992년 10월 27일
Windows for Workgroups 3.1이 발표되었다. E-메일, 그룹 미팅 스케쥴링, 파일/프린트 공유, 일정 관리, 네트워크와 작업 그룹을 연결시키는 기능을 가지고있었다. 3.1이 소규모 LAN의 붐을 일으킬 조짐을 보였지만 이것은 상업적으로는 실패했다. 덕분에 "Windows for Warehouses (정신병자 수용소를 위한 Windows)"라는 불명예스런 이름을 얻게 되었다.

1993년 4월
6.0 버전에 이르러서 IBM은 PC-DOS를 Microsoft와는 별개로 판매하기 시작했다.
PC-DOS 6.0은 1981년 오리지날 IBM PC에서 Microsoft가 라이선스를 갖고 있던 것과는 다른 종류의 optimizer와 메모리 관리자를 포함하고 있었다. Novell은 DR-DOS를 사서 fancier 네트워킹과 함께 1993년 12월에 Novell DOS 7.0이라는 이름으로 내 놓았다. 이 두 형태의 노력은 너무 미미했고, 또한 너무 늦었다.
왜냐면 DOS가 그 의미 자체에 도전을 받고 있었기 때문이다. 모든 실제적인 PC 신기술은 Windows에서 발생하고 있엇다. Microsoft의 OS가 아니라 말이다.

1993년 5월 24일
Windows NT (New Technology의 약OO만 일부에선 Not Today, No Thanks, Nice Try의 약자라고도 한다)가 발표되었다. 처음부터 파워 유저와 서버 시장을 겨냥한 최초 버전인 3.1은 실행을 위해 최고의 PC를 요구했고 다소 불안정했다. 그러나 Windows NT는 개발자들의 많은 지원을 받게 된다. 왜냐면 보안, 안정성, Win32 API는 보다 쉽게 강력한 프로그램들을 제작하도록 해주었기 때문이다. OS/2 3.0을 위한 프로젝트가 시작되었지만 코드를 몽땅 다시 쓰는 일이 되었다.

1993년 11월 8일
Windows for Workgroups 3.11이 발매되었다. Netware와 WindowsNT에 대한 개선된 기능을 지원하고, 여러 종류의 아키텍쳐와 호환되며 실행속도와 안정성이 개선되었다. 결국 Windows95가 가야할 길을 여기서 찾게 된다. 미국에서는 지금도 이것은 많은 기업에서 사용되고 있다.

1994년 3월
새로운 다중 사용자 유닉스 운영 체제인 Linux 1.0이 취미삼아 시작한 프로젝트로 선을 보였다. 이것은 소스 코드가 공개되어 있어서 누구라도 이것을 자신에 맞게 개조하거나 그 결과물을 전파할 수 있다. 새로운 하드웨어와 소프트웨어는 재빨리 Linux로 포팅되었으며, 자주 Windows보다 더 빠르게 진행되기도 했다. Linux는 큰 시장성을 갖지 못했음에도 계획은 계속 진행되었다( 넷스케이프조차 Windows NT에 대항하기 위해 Linux와 커뮤니케이터와의 결합을 고려한 정도였다). 또한, Linux는 이것에 열광하는 사람들의 큰 도움으로 인해 PC 시스템에서 선택할 수 있는 Unix가 되었다.

1995년 8월 24일
몇번의 지연과 전례에 없는 사전 광고가 끝난 후 Windows 95가 발표되었다. 흥분한 몇몇 사람들은 자신들은 컴퓨터도 없으면서 이것을 사기 위해 대열에 끼어들기도 했다. 최초로 미리 DOS를 설치할 필요가 없는 Windows 95는 여전히 가장 친근한 Windows다. 또한 PC의 주요한 흐름에 박차를 가하는 계기가 되었다. 매우 향상된 인터페이스는 Mac 플랫폼과의 격차를 없었으며 마침내, Mac을 주변부로 밀어내게 된다. 또한 Windows 95는 통합된 TCP/IP 스택, 전화 접속 네트워킹, 긴 파일 이름 지원등이 포함되었다.

1996년 7월 31일
Microsoft는 Windows NT 4.0을 내 놓았다. 3.51에 비해 대단히 진보한 이 버전은 Windows95의 인터페이스와 디바이스 지원이 강화되었고, 몇몇 번들 IIS 웹 서버와 같은 서버 프로세서가 포함되었다. NT 4.0은 기업계에서 Microsoft의 입지를 강력히 굳혀 주었다. Unix를 대신할 지위로써 미국 기업체에서 시작은 작았지만 성장 속도는 그야말로 극적이었다. 또한 인트라넷과 인터넷 사이트를 위한 플랫폼으로 점차 자리를 잡아가고 있다.

1996년 10월October 1996
Windows 95를 위한 OEM Service Release 2 (OSR2)가 새롭게 판매되는 PC에 미리 설치되어 보급되었다. 기능을 향상시키는 Windows95의 제어판 애플릿과 내장된 많은 기능들뿐만 아니라 잠재된 버그를 치료했다. FAT32나 개선된 전화 저속 네트워킹등과 같은 몇몇 "새로운 " 기능들은 윈도98의 기능을 미리 선보인 것이다.
OSR2는 또한 인터넷 익스플로러 3.0을 내장하고 있는데 이것은 Microsoft에서 개발한 최초의 웹 브라우저다.

1997년 9월 23일
Windows NT 5.0의 최초 베타 버전이 개발자들에게 배포되었다. 새로운 버전은 차세대 하드웨어를 지원하게 되며 관리와 보안 기능이 보다 강화되어 있다. 이 버전은 1999년에 발표될 것으로 예상된다.
 
1998년 6월 25일
Microsoft는 Windows98을 발표했다. 이것은 DOS위에서 움직이는 오래된 커널에 기반한 마지막 Windows 버전이다. Windows 98은 인터넷 익스플로러 4와 결합되어 있으며 USB에서 ACPI 전원 관리와 같은 새로운 디바이스 타입을 지원한다. 차기 Windows의 소비자판은 NT 커널에 기반하여 제작될 것이다.
[출처] OS의 역사|작성자 플래너








'공부' 카테고리의 다른 글

0916) 20100916  (0) 2010.09.16
0915) CPU의 구조(2) - 정리중  (0) 2010.09.16
0913) PC의 역사  (0) 2010.09.15
0913) 프로그래밍 언어  (0) 2010.09.15
0915) CPU의 구조  (0) 2010.09.15
:
Posted by 투잌
2010. 9. 15. 16:23

0913) PC의 역사 공부2010. 9. 15. 16:23


첨부파일로 올립니다.

'공부' 카테고리의 다른 글

0916) 20100916  (0) 2010.09.16
0915) CPU의 구조(2) - 정리중  (0) 2010.09.16
0914) OS의 역사  (0) 2010.09.15
0913) 프로그래밍 언어  (0) 2010.09.15
0915) CPU의 구조  (0) 2010.09.15
:
Posted by 투잌
2010. 9. 15. 16:20

0913) 프로그래밍 언어 공부2010. 9. 15. 16:20

* 인터넷 검색의 결과로 한 포스팅이기 때문에 사전적 의미나 정확한 사실과 차이가 날 수 있음을 양해 구합니다. 공부용 목적으로 포스팅 하였습니다.
* 저작권의 문제 발생시 바로 삭제, 비공개하겠습니다. 지적 부탁드립니다.

목표 : 프로그래밍 언어의 시작과 종류에 대해 알아본다.

목차 : 1. 프로그램이란?
         2. 프로그램 언어의 종류

1. 프로그램이란?

 컴퓨터라는 기계는 사람이 지시한 명령을 수행할 수 있는 능력을 가지고 있다. 사람이 1+2를 계산하라는 명령을 내리면 계산을 통해 3이라는 결과를 만들어 내며 결과를 화면으로 출력하라는 명령을 내리면 어김없이 그 값을 화면에 출력한다. 계산식이 다소 복잡하더라도 정확하고 신속하게 명령을 실행한다.

 그러나 컴퓨터 혼자서는 어떤 일도 하지 못하며 반드시 사람의 명령이 필요하다. 매법 사람이 컴퓨터에게 이렇게 해라. 저렇게 하라고 지시를 내려야만 이 지시대로 동작한다. 이런 식이라면 사람이 컴퓨터를 위해 일일이 지시를 내려야 하므로 컴퓨터가 사람을 위해 일을 하는 것이 아니라 오히려 컴퓨터가 사람을 부려먹는 꼴이 될 것이다. 실제로 초창기의 컴퓨터(ENIAC 등)는 명령을 기억할 공간이 좁거나 아예 없이 사람이 케이블 연결을 바꾸거나 이진 스위치를 조작해야 동작하는 식이었다.

 다행이 현대의 컴퓨터는 여러 개의 명령을 순서대로 실행할 수 있는 능력이 있으므로 매번 사람이 명령을 내릴 필요없이 일련의 명령들을 한꺼번에 전달할 수 있다. 1+2를 계산해서 화면에 출력하라, 입력되는 모든 값을 저장하고 합계와 평균을 구해 프린터로 인쇄하라는 식으로 작업에 필요한 명령들을 전달하면 컴퓨터는 이 명령들을 순차적으로 실행한다. 이런 명령의 집합이 바로 프로그램이며 보통 수백~수만개의 명령들이 모여 하나의 실용적인 프로그램이 된다.

 그렇다면 명령을 무조건 모아 놓기만 하면 다 프로그램이 되는가 하면 그렇지는 않다. 프로그램이란 현실의 문제를 해결하기 위해 존재한다. 예를 들어 계산 프로그램은 주어진 값을 연산해서 결과를 출력하는 동작을 하므로 계산하라, 출력하라는 명령이 필요할 것이다. 문제를 해결하기 위한 명령들은 실행 순서를 지켜야 한다. 만약 계산 프로그램에게 출력하라, 계산하라는 명령을 내린다면 순서가 틀렸으므로 제 역할을 하지 못할 것이다.

 또한 조건에 따라 적절한 명령을 선택해야 하고 어떤 명령들은 여러 번 반복 처리해야 하는 것들도 있고 때로는 실행중에 사용자와 상호작용을 할 필요도 있다. 그래서 명령들끼리는 순서가 있을 뿐만 아니라 논리적으로 긴밀하게 연관되어 있어야 한다. 프로그램의 정의를 좀 더 정확하게 내려 보면 다음과 같다.

◆ 프로그램 : 문제를 풀기 위한 명령들의 조직적인 집합

 컴퓨터 프로그램은 컴퓨터가 인식할 수 있는 언어로 구성된다. 근본적으로 컴퓨터는 그렇다와 아니다만 이해할 수 있으므로 0과 1의 상태만 이용할 수 있다. C, C++, 델파이, 베이직 등의 프로그래밍언어로 만든 문자코드를 컴퓨터가 인식할 수 있게 변환시킨 것으로 기계어라고 한다.

 프로그램의 고전적인 정의는 이렇지만 최근의 그래픽 환경에서는 명령 외에 프로그램의 외형을 장식하는 데이터까지도 프로그램의 일부로 포함된다. 예를 들어 프로그램의 배경을 장식하는 그림이나 사용자와의 대화를 위한 대화상자, 사운드, 아이콘, 메뉴 등도 프로그램을 구성하는 일부분이다. 또한 프로그램 사용법을 설명하는 도움말이나 주의 사항 등의 문서도 프로그램의 일부라고 할 수 있다.

 컴퓨터라는 기계는 사람이 지시한 명령을 수행할 수 있는 능력을 가지고 있다. 사람이 1+2를 계산하라는 명령을 내리면 계산을 통해 3이라는 결과를 만들어 내며 결과를 화면으로 출력하라는 명령을 내리면 어김없이 그 값을 화면에 출력한다. 계산식이 다소 복잡하더라도 정확하고 신속하게 명령을 실행한다.
 
2. 프로그래밍 언어의 종류

 1) 저급 언어
저급 언어란 컴퓨터 내부에서 바로 처리가능한 프로그래밍 언어로, 일반적으로 기계어와 어셈블리어를 일컫는다. 강력하나 배우기 어려운 것이 단점으로, 현재는 특수한 경우가 아니면 사용되지 않는다. 저급언어와 반대되는 것으로 고급 프로그래밍 언어가 있다.

▶기계어 (Machine Language)
프로세서에서 작업을 직접 지시하기 위한 언어로 0과 1의 2개의 숫자로 작성되며, 작성된 프로그램을 컴퓨터에 기억시켜 놓으면 컴퓨터가 직접 수행할 수 있다.

▶어셈블리어 (Assembly Language)
기계어에 1대 1로 대응하는 연상코드를 정하여 사용하는 언어.
약호는 문자, 숫자, 부호들로 구성되어 있어 프로그램을 작성하기가 난해한 언어

 2) 고급 언어 (High Level Language)
인간이 일상 사용하는 문장과 유사한 자연어로 구성되어 있어 이해와 기술이 용이하며, 대부분의 기계에 통용되는 호환성이 있어 가장 범용성을 갖고 있다.
기계어로 번역하려면 컴파일러 또는 인터프리터가 필요하다. 베이직, C, 자바 등이 있다.

▶베이직
베이직(BASIC : Beginnr's All-purpose Symbolic Instruction Code)은 프로그래밍 언어의 하나입니다. 절차형 언어로 1964년 다트머스 대학교의 존 케메니(John Kemeny)와 토머스 커츠(Thomas Kurtz)가 개발했습니다.
 교육용으로 개발되어 언어의 문법이 쉬우며, 다트머스의 최초 제품 이래로 인터프리터 방식이 많았으나 최근에는 컴파일러 방식도 많습니다. 현재는 다양한 종류의 베이직이 존재하며 서로 문법도 많이 차이가 나고, 서로 다른 종류 사이의 소스코드는 호환되지 않습니다.

▶C언어
C프로그래밍 언어는 1970년대 초 켄 톰슨과 데니스 리치가 당시 새로 개발된 유닉스 운영체제에서 사용하기 위해 만든 프로그래밍 언어입니다. 켄 톰슨은 BCPL언어를 필요에 맞추어 개조해서 "B"언어라 명명했고, 이 B언어에서 C언어가 탄생했습니다. 유닉스 시스템의 바탕프로그램은 모두 C로 씌여졌고, 많은 운영체제의 커널도 또한 C로 만들어졌습니다. 오늘날 많이 쓰이는 C++은 C에서 객체 지향형 언어로 발전된 것이다. 또 다른 다양한 최신 언어들도 그 뿌리를 C언어에 두고 있다.
C#은 마이크로소프트에서 개발한 객체지향 프로그래밍 언어로, 닷넷 프레임워크의 한 부분으로 만들었으며 나중에 ECMA(ECMA-334)와 ISO(ISO/IEC/23270)의 표준으로 자리 잡았습니다. C++와 자바와 비슷한 문법을 가지고 있습니다.

C#은 닷넷 프로그램이 동작하는 닷넷 플랫폼을 가장 직접적으로 반영하고, 또한 닷넷 플랫폼에 강하게 의존하는 프로그래밍 언어이다. C#은 그 문법적인 특성이 자바와 상당히 유사하며 C#을 통하여 다룰 수 있는 닷넷 플랫폼의 기술들 조차도 자바를 염두에 둔 것이 많아서 자바와 가장 많이 비교되고 있다. 하지만 C#은&nbsp;자바와 달리 불안전 코드(unsafe code)와 같은 기술을 통하여 플랫폼 간 상호 운용성에 상당히 많은 노력을 기울이고 있다. C#의 기본 자료형은 닷넷의 객체 모델을 따르고 있고, 런타임 차원에서의 메모리 수거(garbage collection)가 되며 또한 클래스, 인터페이스, 위임, 예외와 같이 객체 지향 언어로서 가져야 할 모든 요소들이 포함되어있다.

▶C++
C++는 AT&amp;T 벨 연구소의 비야네 스트롭스트룹이 1983년 발표하여 발전한 프로그래밍 언어이다. C언어의 문법을대부분 사용할 수 있으며, 객체지향성이 더해진 C언어의 확장형이라고 생각할 수도 있다.
C언어에 객체지향 프로그래밍을 지원하기 위한 내용이 덧붙여진 것이라고 할 수도 있지마, 애초부터 객체지향을 염두에 두고 만들어진 언어와는 다르게, 단지 더 좋은 C언어로서 수속형 언어로 취급하기도 한다. 초기의 C++은 C위에 놓인 트랜스레이터로 구현되었다. 즉, C++프로그램을 일단 C프로그램으로 변환하고 나서 C 컴파일러로 컴파일하는 식이었고 따라서 C언어에 대해 상위 호환성을 갖는 언어였다.
그 후, C언어의 표준 규격이 바뀔 때 const 수식 등 C++의 기능이 C언에 받아들이기도 했다. 현재 C언어와 C++와의 사이에는 엄격한 호환성은 없다. 특히 C99의 출현으로 C언어와의 호환성은 완전하게 없어져 버렸다. 현재는 C와 C++가 명확한 구별없이 혼재되어 사용되는 컴파일러가 대부분이다.

▶D
D는 디지털 마르스의 월터 브라이드가 설계한 객체 지향 명령형 프로그래밍 언어이다. D는 C++의 후손으로 만들어졌으며, C++의 복잡도를 줄이면서 몇몇 기능을 추가하여 설계되었다. C++의 후손으로 제시된 다른 언어에는 Java와 C#등이 있다.

▶파이썬(Python)
파이썬(Python)은 1991년 프로그래머인 귀도 반 로섬(Guido van Rossum)이 발표한 고급 프로그래밍 언어로, 플랫폼 독립적이며 인터프리터식, 객체지향적, 동적 타이핑(dynamically typed)대화형 언어이다. 파이썬이라는 이름은 귀도가 좋아하는 코미디 &lt;Monty Python's Flying Circus&gt;에서 따온 것이다. 파이썬은 비영리의 파이썬 소프트웨어 재단이 관리하는 개방형, 공동체 기반 개발 모델을 가지고 있다. 사실상의 표준은 CPython의 구현이다.

▶루비(Ruby)
루비(Ruby)는 동적 객체 지향 프로그래밍 언어이다. 현재 루비 온 레일즈라는 신속한 웹 개발을 지원하는 웹 개발 프레임워크의 인기로 많은 주목을 받고 있다.

▶자바(Java)
자바(Java)는 썬마이크로시스템즈의 제임스 고슬링(James Gosling)과 다른 연구원들이 개발한 객체지향적 프로그래밍 언어이며, 썬마이크로시스템즈에서 무료로 제공하고 있다.&nbsp;1991년 그린 프로젝트(Green Project)라는 이름으로 시작해 1995년에 발표했다. 처음에는 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발했지만 현재 웹어플리케이션 개발에 가장 많이 사용하는 언어 가운데 하나이고, 모바일 기기용 소프트웨어 개발에도 널리 사용하고 있다. 현재 버전 6까지 출시했다.

▶파스칼(Pascal)
파스칼(Pascal)은 1980년대와 1990년 초반에 걸쳐 널리 사용된 프로그래밍언어로, 당대의 가장 인기있는 교육용 언어 중 하나였으며, 현재까지도 폭넓은 분야에서 사용되고 있다.
파스칼은 1969년에 스위스의 컴퓨터 과학자 니클라우스 버트가 개발하였다. 발표당시에는 아주 기본적인 컴퓨터 언어의 요소만을 가지고 있었으므로 시스템을 직접 다루기에는 부족하였다. 파스칼이라는 이름은 프랑스의 수학자이자 철학자 블레즈 파스칼의 이름을 딴 것이다. 포인터를 사용한 구조적 프로그래밍을 그 특징으로 한다.
과학연구를 목적으로 만들어진 고급언어인 알골 60의 영향을 받은 까닭에, 같은 시기에 마찬가지 영향을 받아 제작된 C와 여러가지 면에서 유사한 점을 갖는다. 그러나 코드를 간결하게 하고 버그를 더 쉽게 잡아내기 위한 목적으로 몇가지 기능을 제한함으로써 결과적으로 C언어에 비해 활용도가 떨어지는 언어가 되었다. 그러나 완전히 비실용적인 언어라는 뜻은 아니며, 실제로 TeX나 초기 매킨토시 운영체제 제작에 사용되기도 하였다. 최근에는 파스칼 컴파일러 자체가 크게 개선되고 소프트웨어 개발 기술의 발전으로 이런 사소한 차이점은 거의 무시할 수 있는 단점이 되었다. 어셈블리를 직접 사용하기도 한다. 현재는 초기의 파스칼에 비해 많은부분이 추가되고 개선되어 다른언어의 장점들을 따와 상용 파스칼 컴파일러인 델파이는 C++과 거의 기능 차이가 없습니다.

'공부' 카테고리의 다른 글

0916) 20100916  (0) 2010.09.16
0915) CPU의 구조(2) - 정리중  (0) 2010.09.16
0914) OS의 역사  (0) 2010.09.15
0913) PC의 역사  (0) 2010.09.15
0915) CPU의 구조  (0) 2010.09.15
:
Posted by 투잌
2010. 9. 15. 14:30

0915) CPU의 구조 공부2010. 9. 15. 14:30

* 인터넷 검색의 결과로 한 포스팅이기 때문에 사전적 의미나 정확한 사실과 차이가 날 수 있음을 양해 구합니다. 공부용 목적으로 포스팅 하였습니다.
* 저작권의 문제 발생시 바로 삭제, 비공개하겠습니다. 지적 부탁드립니다.

목표 : PC의 중요장치인 CPU의 구조와 기능에 대해 이해한다.

목차 : 1. CPU란?
         2. CPU의 구성요소
         3. CPU의 장치적 구조


1. CPU란?




1) CPU의 정의
PC(Personal Computer)라고 명칭하는 상대적으로 작고, 저렴한 개인형 컴퓨터는 여러가지 장치로 구성되어 있습니다. 컴퓨터를 잘 모르는 분들도 램, 하드, 시디롬, CPU등 어디선가 들어봤을 듯한 명칭이 여러가지가 있다.

PC안의 장치를 주변기기, 디바이스 등으로 명칭할 수 있고 이 디바이스들은 스스로 움직이지 않는다. 모두 명령이 오는 것을 기다리고 있으며 명령이 오면 거기에 따라서 동작을 하게 된다. CPU는 PC안의 디바이스중 유일하게 다른 장치에게 명령을 내리는 입장에 있다. 그래서 CPU를 PC의 중싱점이라던지, 중추라는 설명을 많이 찾아볼 수 있다.

CPU는 Central Processing Unit의 줄임말로 우리말로 중앙처리장치 라고 바꿀 수 있다. 외부에서 정보를 입력 받고, 기억하고, 컴퓨터 프로그램의 명령어를 해석하여 연산하고, 외부로 출력하는 역할을 하게 된다. 따라서 CPU 는 컴퓨터 부품과 정보를 교환하면서 컴퓨터 시스템 전체를 제어하는 장치로, 모든 컴퓨터의 작동과정이 CPU의 제어를 받기 때문에 컴퓨터의 두뇌에 해당한다고 할 수 있다. 실제의 CPU 칩엔 실행 부분뿐만 아니라 캐시 등의 부가 장치가 통합된 경우가 많다.

CPU의 기능을 풀이하면 다음과 같다.
- 명령어 인출(Instruction Fetch): 기억장치에서 명령어를 읽어온다.
- 명령어 해독(Instruction Decode): 수행해야 할 동작을 결정하기 위하여 명령어를 해독.
- 데이터 인출(Data Fetch): 명령어 실행을 위하여 데이터가 필요한 경우에는 기억장치 또는 I/O장치로부터 데이터를 읽어온다.
- 데이터 처리(Data Process): 데이터에 대한 산술적 혹은 논리적 연산을 수행.
- 데이터 저장(Data Store): 수행한 결과를 저장

2) CPU의 성능
최근에 나오는 중앙 처리 장치의 성능은 크게 클럭(Clock) 속도와 코어 수로 결정된다.
CPU에서 클럭이라고 하는 수치는 중앙 처리 장치 내부에서 일정한 주파수를 가지는 신호로 이 신호에 동기화되어서 중앙 처리 장치의 모든 명령어가 동작되게 된다. 전자 계산기 원론적으로 말하면, 컴퓨터(프로세서)는 0과 1을 On/Off하면서 작동하는데 그것을 클럭이라고 하고, 한번 클럭 하는게 1헤르츠(Hz)다. 이에 따라 만약 3.0GHz라면 1초에 30억번 On/Off 할 수 있는 속도를 나타낸다. 클럭수가 높을 수록 성능은 높아진다. 따라서 클럭 주파수가 빠를수록 제한된 시간에 더 많은 명령을 처리할 수 있기에 더 좋은 성능의 중앙 처리 장치라고 할 수 있다.

또, 중앙 처리 장치안의 코어의 수로도 성능의 차이가 난다. 코어는 중앙 처리 장치의 역할을 하는 블록으로 예전에는 한 개의 칩 안에는 한 개의 코어의 구조를 가졌으나, 최근에는 한 개의 칩 안에 여러 개의 코어를 가지는 구조를 채택하고 있다. 이렇게 한 개의 칩 안에 여러 개의 연산을 처리할 수 있는 장치를 병렬적으로 연결한 멀티 코어 시스템을 통하여 더 좋은 성능의 중앙 처리 장치를 얻을 수 있게 된다. 따라서 더 많은 수의 코어를 한 개의 칩에 가질수록 더 좋은 성능의 중앙 처리 장치라고 할 수 있다.


2. CPU의 구성요소

CPU 에서 중요한 요소로는 크게 ALU(Arithmatic Logical Unit)와 CU(Control unit), 레지스터(Register)의 세 가지가 있다.


1) ALU (Arithmetic-Logic Unit) ; 산술논리 연산장치 
마이크로 프로세서에 전달된 실제 데이터의 조작과 계산을 수행하는 것으로, 덧셈, 뺄셈, 논리 연산인 OR, AND, 데이터의 2진값 처리 등을 수행하므로 모든 CPU에서 계산을 수행하는데 가장 필수적인 구성 요소이다.

대체로 ALU는 입력과 출력을 위해 프로세서와 메인 메모리 그리고 입출력 장치에 직접 액세스를 하는데, 입력과 출력은 버스라고 부르는 전자적인 통로를 따라 흐르게 된다.
입력은 연산코드 (때로 이것을 줄여서 "op code"라고 부른다) 을 포함하고 있는 기계 명령어, 하나 또는 그 이상의 연산자 그리고 형식코드로 구성된다. 연산코드는 수행해야 할 연산이 무엇인지를 ALU에게 알려주며, 연산자는 그 연산을 위해 사용된다. (예를 들어 두 개의 연산자를 서로 더하거나 논리적으로 비교하라는 연산일수도 있다).
형식코드는 연산코드와 함께 결합되어, 연산의 대상이 고정 소숫점 형식인지, 부동 소숫점 형식인지를 알려준다.
출력은 레지스터 내에 있는 결과와, 수행된 연산이 성공적이었는지에 관한 상태를 알려주는 값들로 구성된다. 

일반적으로 ALU는 입력된 연산자와, 현재 더해지고 있는 연산자, 누산기에 저장된 결과, 그리고 시프트된 결과들을 저장하기 위한 공간을 가지고 있다.
ALU 내의 비트의 흐름과, 그 안에서 수행된 연산들은 게이트 회로에 의해 통제되는데, 게이트 회로는 다시 각 연산코드에 대해 특별한 알고리즘이나 순서를 사용하는 순차 논리 장치(sequence logic unit)에 의해 통제된다.
연산장치 내에서 곱셈이나 나눗셈은 일련의 덧셈이나 뺄셈 그리고 자릿수를 이동하는 방법(shift) 등을 통해 이루어지며, 음수를 표현하는 방법에도 여러 가지가 있다.
논리장치 내에서는 16개의 논리 연산중 하나가 수행될 수 있는데, 예를 들어 두 개의 연산자를 비교해서 서로 맞지 않는 비트가 어떤 것인지를 찾아내는 것 등이 그것이다.

2) CU (Control Unit)
CPU의 중요한 구성 요소로, 마이크로 프로세서 뿐만 아니라 대부분의 컴퓨터 시스템을 제어하는데 사용되는 요소인데, 메모리로부터 데이터 명령, 메모리 해석 및 실행 등을 수행한다. CU는 ALU에 의한 데이터의 입출력과 명령의 흐름을 제어하는데, 이를 위해서 주 기억 장치에서 명령을 읽어들이고 분석한다. 또, 메모리와 주변 장치를 포함해서 시스템 다른 부분들과 버스를 통해서 정보를 주고받는데, 이런 작업도 CU에 의해 제어된다.

3) 레지스터 (processor register)
프로세스 레지스터라고도 한다. 레지스터는 CPU 내의 데이터를 저장한다. 이 레지스터 값은 CPU가 데이터 처리를 위한 기본적인 저장 공간이다.
메모리와 다른 점은 하드웨어 적으로 직접 ALU와 연결되어 계산이 이루어 지며, 또한 메모리의 버퍼 역할을 하게된다. 메모리의 값을 레지스터로 옮겨 놓고 계산을 한 다음 다시 메모리로 갈 수 있다.
이때는 버스를 이용하여 신호를 주고 받는다.

각 동작을 기계어 코드의 실행에 의해 기능 별로 이루어 지며 산술연산, 논리연산 등의 다양한 프로그램이 가능하다. 레지스터의 표기 방식은 각 CPU 마다 다르며, 갯 수와 길이 역시 다르다. CPU가  몇 비트 인가를 결정하는 가장 중요한 길이가 레지스터 이다.

가장 중요한 레지스터로는 프로그램 카운터(PC, Program Counter)와 명령 레지스터(IR, Instruction Register)가 있다. 프로그램 카운터는 다음에 수행할 명령의 주소를 보관하고 명령 레지스터는 현재 수행하고 있는 명령을 보관하는 역할을 한다. 그밖에 연산의 결과나 기타 값을 저장하는 범용 레지스터(general purpose register)와 기억장치에 쓰여질 데이터 또는 기억장치로부터 읽혀진 데이터를 일시적으로 저장하는 버퍼 레지스터 등이 있다.

4) 그외 ..

 ● 계수기(counter)
  >> 수를 저장하고 또 명령어가 요구하는 데로 수를 자동적으로 증가시키거나 감소시키는 장치이다.

 ● 가산기(adder)
  >> 산술 논리 연산장치의 산술 연산을 수행하는 회로이다.

 ● 해독기(decoder)
  >> 프로그램의 명령어 코드(instruction code)를 분석하고 또 명령어 실행을 시작하는 회로이다.

 ● 내부시계(internal clock)
  >> 1초당 수백만에서 수억에 이르는 주파수로 펄스(pulse)를 발생시키는 회로.
       내부 시계는 중앙처리장치의 회로에 에너지를 부여하는데 사용되는 전기 펄스(electrical pulse) 를
       생성하며, 또 그것을 적절하게 운영하는데 필요한 정확한 타이밍을 보장해준다.

 ● 버퍼(buffeR)
  >> 처리가 이루어지는 동안에 프로그램이나 자료의 일부를 저장하는데 사용되는 고속의 일시적인
       기억 영역. 캐시 기억장치cache memory)가 여기에 속한다.

* 버스란?
 컴퓨터의 내부나 외부의 각 장치와의 정보나 신호를 주고 받는 데 사용되도록 구성된 전기적 통로를 말한다. 자료와 명령을 이동시키기 위한(상호연결) 경로들의 집합이라고 보면 된다. 버스가 16개 있다면 16비트.

- 데이터 버스 : 데이터가 이동하는 통로
- 어드레스 버스 : 주소 및 해당 주소의 데이터를 전송하기 위해 필요한 버스
- 컨트롤 버스 : CPU와 메모리 간에 제어신호가 오가는 통로

3. CPU의 장치적 구조

CPU는 시대별, 제조사별 모양이 차이가 나게 됩니다. 대략적인 CPU의 모습은 다음과 같습니다.




1) CPU 캐시(CPU cache)
CPU 캐시는 CPU가 메모리 접근 시간을 줄이기 위해 사용하는 캐시입니다. CPU 캐시는 메인 메모리에서 가장 자주 사용되는 위치의 데이터를 갖고 있는 크기는 작지만 빠른 메모리입니다. 대부분의 메모리 접근은 특정한 위치의 근방에서 자주 일어나는 경향이 있기 때문에, 데이터를 크기는 작지만 속도가 빠른 메모리에 복사해 두면 평균 메모리 접근 시간을 아낄 수 있습니다.

프로세서가 메인 메모리를 읽거나 쓰고자 할 때는, 먼저 그 주소에 해당하는 데이터가 캐시에 존재하는지를 살핍니다. 만약 그 주소의 데이터가 캐시에 있으면 데이터를 캐시에서 직접 읽고, 그렇지 않으면 메인 메모리에 직접 접근합니다. 이때 대부분의 프로세서는 메인 메모리에 직접 접근해서 전송된 데이터를 캐시에 복사해 넣음으로써 다음번에 같은 주소에 프로세서가 접근할 때 캐시에서 직접 읽고 쓸 수 있도록 합니다.

메모리에 접근하는 순서대로 L1, L2, L3캐시라고 하거나 그림에서 나온 것처럼 1차 캐시, 2차캐시라고 합니다. 3차 캐시는 요즘의 CPU에는 장착 안된 경우가 많습니다. 오히려 메인보드에 장착되어 있는 경우도 있습니다.

2) 방열판과 쿨링팬
CPU는 그래픽카드와 함께 컴퓨터 내부에서 열을 많이 발생시키는 디바이스입니다. 열이
높아질수록 성능은 떨어지고, 치명적인 오류(다운)등으로 이어질 수 있습니다. 그래서 방열판으로 열을 분산시키고, 쿨링팬으로 공기를 순환해 열을 식힙니다.


'공부' 카테고리의 다른 글

0916) 20100916  (0) 2010.09.16
0915) CPU의 구조(2) - 정리중  (0) 2010.09.16
0914) OS의 역사  (0) 2010.09.15
0913) PC의 역사  (0) 2010.09.15
0913) 프로그래밍 언어  (0) 2010.09.15
:
Posted by 투잌
2010. 9. 15. 11:01

Tistory 시작! 주절2010. 9. 15. 11:01

도움 주신 모모냥이(momocathy) 님 너무 너무 감사합니다.

기동아 너는 한국 오면 탕수육이나 한그릇 주마 ㅋㅋ.

'주절' 카테고리의 다른 글

부산 ITS의 추억  (1) 2010.11.12
헉.. ㅡㅡ;  (0) 2010.10.14
1004  (0) 2010.10.04
헉...  (0) 2010.10.01
수정 따위는 말년에 하는거다!!  (0) 2010.09.24
:
Posted by 투잌