2010년 11월 28일 일요일

Information Systems

<바이러스의 기원 및 역사>

최초의 컴퓨터 바이러스는 1985년 파키스탄에서 발견된 브레인(Brain) 바이러스이다. 파키스탄의 프로그래머가 자신이 개발한 프로그램의 복제품이 성행하자 사용자들을 골탕먹이기 위해 데이터를 파괴하는 악성 바이러스를 처음으로 유포하기 시작했다고 한다.

이어 88년
예루살렘 대학에서 13일의 금요일에 맞춰 실행되는 예루살렘 바이러스가 발견됐다. 우리나라에는 88년 이같은 바이러스가 유입됐으며 이에 대항한 백신 프로그램이 최초로 개발됐다.

컴퓨터 바이러스라는 개념을 받아들여서 대량의 컴퓨터 바이러스를 만들기 시작한 나라는 미국이다. 미국의 해커들은 브레인 바이러스와 예루살렘 바이러스를 모방한 수많은 컴퓨터 바이러스를 만들었으며, 전세계적으로 수많은 변형 바이러스가 만들어지고 전파되었다.

이 당시 바이러스로 유명해진 나라는
불가리아로 어둠의 복수자, Dir-Ⅱ등의 바이러스를 양산해 `바이러스 제작소'라는 악명을 얻게됐다.

■ 1세대 원시형 바이러스
처음 출현한 제 1세대 '원시형 바이러스(Primitive Virus)는 실력이 그다지 뛰어나지 않은 아마추어 프로그래머들이 만든 것으로, 프로그램 구조가 단순해 분석하기가 매우 쉬운 바이러스이다. 돌바이러스(Stoned), 예루살렘바이러스(Jerusalem) 등 대부분의 바이러스가 여기 속한다.

*돌바이러스(Stoned)
돌바이러스는 1987년에 만들어진 부트섹터 컴퓨터 바이러스의 이름이다. 최초의 부트섹터 바이러스로 알려진 돌바이러스는 뉴질랜드 웰링턴에 있는 한 대학생에 의해 쓰였다. 돌바이러스는 뉴질랜드와 호주에서 1989년까지 널리 퍼졌다. 이 바이러스는 초기 바이러스들중 하나였고 이 바이러스의 많은 변종들과 함께 1990년 대 초반에 매우 흔하고 널리 퍼진 바이러스였다.
#출처 :http://en.wikipedia.org/wiki/Stoned_(computer_virus)

*예루살렘바이러스 (Jerusalem)
브레인 바이러스 외에 가장 잘 알려져 있는 바이러스가 예루살렘 바이러스입니다. 이 예루살렘 바이러스는 일명 13일의 금요일(Friday the 13th) 바이러스라고도 부릅니다.
이 바이러스는 1987년 12월중 예루살렘에 있는 헤브류 대학(Hebrew University_에 처음으로 감염되었읍니다. 이 바이러스는 팔레스타인이 이스라엘에 의해 쫓겨난지 40주년 되는 1988년 5월 13일(금요일)에 이스라엘 전역에 있는 모든 컴퓨터가 crash되도록 만들어졌읍니다. 따라서 이 바이러스를 PLO(팔레스타인 해방 전선)바이러스라고도 부름니다.
감염된 프로그램이 실행되면, 제일 먼저 날짜와 요일을 체크하여, 금요일이면서 날짜가 13일이면 이 프로그램의 파괴 활동을 시작하고, 그렇지 않으면 정상적으로 프로그램이 작동됩니다.
이 바이러스는 .exe나 .com 파일 내에 침투합니다. 따라서 일단 이 바이러스에 감염되면 감염된 .exe나 .com 파일의 사이즈가 약 1800바이트 정도 늘어나게 됩니다. 따라서 프로그램의 크기를 보고 감염여부를 알 수 있습니다.
#출처 : http://hkpark.netholdings.co.kr/index.asp

■ 2세대 암호형 바이러스

암호형 바이러스(Encryption Virus)는 어느 정도 실력을 갖춘 프로그래머들이 만들었으며, 백신 프로그램이 진단할 수 없게 하기 위해서 바이러스 프로그램의 일부 또는 대부분을 암호화시켜 저장한다. 그러나 실행이 시작되는 부분에 존재하는 암호 해독 부분은 항상 일정하기 때문에 어렵지 않게 퇴치할 수 있다. 폭포바이러스(Cascade), 느림보바이러스(Slow)가 대표적이다.

*폭포바이러스(Cascade)
폭포바이러스는 1980년대와 1990년대 초반에 널리 퍼졌던, 어셈블러에서 쓰여진 거주자 컴퓨터 바이러스였다. 폭포바이러스는 컴파일을 감염시켰고 스크린에 있는 텍스트를 망가뜨리는(?) 효과가 있고 스크린 아래에 힙을 형성한다. 이 바이러스는 감지되는 것을 피하기 위해한 암호화 알고리즘을 사용한 것으로 유명했다.
이 바이러스는 1980년대 후반에 MS-DOS에 처음으로 출현했다.
#출처 : http://en.wikipedia.org/wiki/Cascade_(computer_virus)

■ 3세대 은폐형 바이러스

은폐형 바이러스(Stealth Virus)는 자신을 은폐하고 사용자나 백신 프로그램에 거짓 정보를 제공하기 위해서 다양한 기법을 사용한다. 즉, 기억 장소에 존재하면서 감염된 파일의 길이가 증가하지 않은 것처럼 보이게 하고, 백신 프로그램이 감염된 부분을 읽으려고 하면 감염되기 전의 내용을 보여줌으로써 바이러스가 존재하지 않는 것처럼 백신프로그램이나 사용자를 속이는 것이다. 이 경우 기억 장소를 먼저 검사해서 은폐 기능을 무력화시키면 쉽게 진단할 수 있다. 은폐형 바이러스에는 브레인바이러스(Brain), 조쉬바이러스(Joshi), 512바이러스, 4096바이러스 등이 있다.

*브레인바이러스(Brain)
1985년 파키스탄의 펀잡 대학을 졸업한 두 형제(Amjad Farooq Alvi와 Basit Farooq Alvio)에 의해 만들어진 파키스탄 브레인 바이러스는, 1987년 펜실바니아와 와이오밍 대학에서 처음으로 발견되었다. DOS를 사용하던 시절, 우리나라에서도 유행했던 브레인 바이러스가 바로 이 파키스탄 브레인 바이러스다.
이 두 형제는 Lotus 1-2-3나 Wordstar와 같은 상용 소프트웨어의 해적판을 판매하는 브레인 컴퓨터 서비스(Brain computer service)라는 회사를 만들었는데, 아이러니컬하게도 자신들의 해적판 프로그램을 다시 불법으로 복제하는 것을 보고, 자신들이 판매하는 프로그램을 복제하지 못하도록 경고를 하기위해 이 바이러스를 만들었다고 한다.
더욱 아이러니한 것은, 이 프로그램 안에 이 바이러스를 누가 만들었는지, 또한 이 바이러스를 예방하기 위한 백신 프로그램을 사려는 사람들을 위해 전화번호와 주소까지 들어있다. 아래는 이러한 내용을 나타내는 이 프로그램의 일부이다.
DB      ' WELCOME TO THE DUNGEON'
DB      ' 
DB      '      (C) 1986 BASIT & AMJAD(PVT) LTD.,
DB                          BRAIN COMPUTER SERVILES....'
DB      ' 730 NIZAN BLOCK ALLAMA IQBAL TOWN'
DB                          LAHORE-PAKISTAN'
DB      ' PHONE:430 791, 443248,280530.'
DB      '                   BEWARE OF THIS VIRUS.....'
DB      ' CONTACT US FOR A VACCINATION'
DB      ' .$#@%$!!'

이 프로그램은 디스크 내의 boot sector에 숨겨져 있어서 일반인들이 볼 수가 없게 되어 있다. 시스템이 booting될 때 DOS의 일부로서 메모리에 들어와 있다가 사용자기 해적 프로그램을 수행시키려고 할 때 이 프로그램의 파괴활동이 시작된다.
#출처 : http://hkpark.netholdings.co.kr/index.asp

■ 4세대 갑옷형 바이러스

2, 3세대 바이러스가 암호화나 은폐 기법을 통해 백신 프로그램을 무력화시키는데 실패한 후 새롭게 등장한 것이 제 4세대 갑옷형 바이러스(Amour Virus)이다. 컴퓨터 바이러스 제작자들은 이제 백신 프로그램 자체가 아닌 백신 프로그래머를 공격 목표로 삼아 여러 단계의 암호화와 고도의 자체 수정 기법을 동원함으로써, 백신 프로그래머가 바이러스를 분석하고 백신을 제작하는 과정을 어렵게 만드는 작전을 구사하기 시작했다.
갑옷형 바이러스의 일종으로 다형성 바이러스(Polymorphic Virus)가 있다. 이것은 암호화 바이러스의 일종이지만 암호화를 푸는 부분이 항상 일정한 단순 암호화 바이러스와는 달리, 암호화를 푸는 부분조차도 감염될 때마다 달라지는 바이러스다. 다형성 바이러스 중에는 한 바이러스가 100만 가지 이상의 변형을 만드는 경우도 있어 백신 프로그래머를 혼란에 빠뜨린다.
이러한 갑옷형 바이러스들은 최상급의 실력을 가진 전문 프로그래머가 개인 혹은 단체로 만들어낸 것이라고 추측된다. 대표적인 예에 해당하는 고래바이러스(Whale)의 경우는 그것을 분석하는 데 여러 명의 전문가가 동원된 것으로 알려져 있다. 현재로서는 갑옷형 바이러스의 종류가 많지 않지만 앞으로 제작될 가능성은 매우 높다. 그러나 은폐형 바이러스와 마찬가지로 다형성 바이러스도 진단이나 치료가 불가능한 것은 아니며 실제로 대부분의 백신 프로그램을 사용하면 진단 및 치료가 가능하다.

*고래바이러스(Whale)
고래바이러스는 1990년 7월 1일에 발견된 컴퓨터 바이러스다. 그 파일 크기는 9,216바이트로 그 당시까지 발견된 바이러스 중에서 가장 크기가 컸다. 이 바이러스는 독일 프로그래머인 R. Horner에 의해 만들어 졌다. 이 바이러스는 여러 진보된 은폐 방법을 사용한 것으로 알려져있다.
파일이 640k DOS 경계 아래에 시스템 메모리에 상주하게 된 후에, 운영자는 바이러스의 다형성 코드의 결과로써 전체 시스템이 느려지는 것을 경험할 것이다. 파일이 결국 제대로 실행될지라도 파일은 아마 장애가 있는 것처럼 보일지도 모른다.(?) 이것은 단지 전체 시스템이 시스템 메모리 내부에서 느려진 것의 결과이다.
#출처 : http://en.wikipedia.org/wiki/Whale_(computer_virus)

■ 5세대 매크로 바이러스

매크로 바이러스는 전세계적으로 급속히 확산되고 있는 새로운 형태의 바이러스로 마이크로소프트사의 오피스 프로그램에 있는 매크로 기능을 이용한 매크로 바이러스가 전세계적으로 계속 발견되고 있다. 지금까지 발견된 매크로 바이러스는 크게 마이크로소프트 워드와 엑셀에 감염되는 2가지 종류가 있으며, 1997년까지 무려 2,000여 종 이상 발견된 것으로 알려져 있다. 앞으로는 기존의 1 ~ 4세대의 바이러스보다는 매크로 바이러스가 급증할 것으로 예상된다.


##출처 : http://blog.naver.com/minminmang?Redirect=Log&logNo=50070168399

2010년 11월 21일 일요일

11. File Systems and Directories

PHP 기본함수의 종류에 대해서 알아봤습니다!
1. 날짜 및 시간 관련함수
*
time() - 용도 : 현재 시각을 timestamp값으로 구한다.
- 방법 : time()


* date()
- 용도 : 사용자가 지정한 형태로 시간을 표시. 특정시간의 날짜와 요일등을 배열로 리턴한다.
- 방법 : date("표시할 시간의 포맷형태","특정한 timestamp값")


* mktime()
- 용도 : 지정된 날짜를 timestamp값으로 변환한다.
- 방법 : mktime(시,분,초,월,일,년)


* checkdate()
- 용도 : 날짜와 시간이 올바른 범위 안에 있는지 검사한다.
- 방법 : checkdate(월,일,년)


* getdate()
- 용도 : 특정timestamp값으로 시간,요일,날짜정보를 배열로 반환한다.
- 방법 : getdate(timestamp값) 또는 getdate()


* gettimeofday()
- 용도 : 현재 시스템의 현재 시간 정보를 배열로 리턴한다.
- 방법 : gettimeofday()


* gmmktime()
- 용도 : 그리니치표준 시간으로 지정한 날짜의 timestamp값을 리턴한다.
- 방법 : gmmktime(시,분,초,월,일,년)


* strftime()
- 용도 : 특정한 포맷으로 날짜 정보를 출력하는데 언어를 지정할수 있다.
- 방법 : strftime("표시할 시간의 포맷형태","특정시간의 timestamp값")


* microtime() - 용도 : 현재시간의 마이크로타임 값과 timestamp값을 표시한다.
- 방법 : microtime()


* localtime() - 용도 : 현재 서버의 로컬 타임을 표시
- 방법 : localtime() 또는 localtime("timestamp값")
2. 문자열 처리함수

* addslashes()
- 용도 : 작은따옴표 큰따옴표와 같은 특정문자 앞에 역슬래시 문자를 붙인다.
- 방법 : addslashes()
*
stripslashes() - 용도 : allslashes로 역슬래시 처리된 문자를 원상태로 되돌린다.
- 방법 : stripslashes()
*
htmlspecialchars() - 용도 : HTML코드를 소스 그대로 출력해준다.
- 방법 : htmlspecialchars()
* nl2br()
- 용도 : 문자열에 포함된 개행 문자를 <br>태그로 모두 바꿔준다.
- 방법 : nl2br()
* echo()
- 용도 : 문자열 출력
- 방법 : echo("변수명" 또는 "문자열")
*
sprintf() - 용도 : 포맷 문자열을 통해 지정해 준 포맷으로 문자열을 표시한다.
- 방법 : sprintf("포맷","변수명")
*
printf() - 용도 : 지정할 수 있는 포맷에 따라 문자열을 출력한다.
- 방법 : printf("포맷","변수명")
*
explode() - 용도 : 문자열을 지정해준 구분자로 분리하여 배열에 저장한다.
- 방법 : explode("구분자","문자열인수")
* implode()
- 용도 : 구분자로 나누어 배열에 담은 문자열을 다시 지정해준 구분자로

           연결하여 전체 문자열을 반환한다.
- 방법 : implode("구분자",배열변수명)
* join()
- 용도 : implode()와 동일한 기능을 수행한다.
- 방법 : join("/", "배열변수명")
* split()
- 용도 : 주어진 문자열을 정규표현식의 패턴에 따라 분리하여 배열에 저장한다.
- 방법 : implode("정규표현식","문자열")
* strcmp()
- 용도 : 두개의 문자열을 비교하여 참이면1, 거짓이면 0을 반환한다.
- 방법 : strcmp("문자열","문자열") 또는 strcmp("문자열","변수명") 또는 strcmp(변수명, 변수명)
* substr()
- 용도 : 문자열에서 특정시작 문자부터 길이만큼의 문자열을 추출하여 반환한다.
- 방법 : substr("문자열", 시작문자번호, 문자열의 길이)
* strchr()
- 용도 : 문자열이 처음으로 나타나는 위치부터 끝까지 반환
- 방법 : strchr("문자열","찾을 문자열")
* strstr()
- 용도 :strchr()함수와 동일한 수행을 한다.
- 방법 : strstr("문자열","찾을 문자열")
* strrchr()
- 용도 : 문자열이 마지막으로 나타나는 위치부터 끝까지 반환한다.
- 방법 : strrchr("문자열","찾을문자열")
* strpos()
- 용도 : 문자열 대신 처음으로 나타나는 위치를 숫자로 반환, 이때 숫자는 0부터 시작.
- 방법 : strpos("문자열","찾을 문자열")
* strrpos()
- 용도 : 찾고자 하는 문자열에서 마지막으로 나타나는 위치를 반환한다.
- 방법 : strrpos("문자열", "찾을 문자열")
* strlen()
- 용도 : 문자열의 길이를 반환한다.
- 방법 : strlen($변수명) 또는 strlen("문자열")
* strtolower()
- 용도 : 알파벳 대문자를 모두 소문자로 바꾸어 반환한다.
- 방법 : strtolower("문자열")
* strtoupper()
- 용도 : 알파벳 대문자를 소문자로 바꾸어 반환한다.
- 방법 : strtoupper("문자열")
* ucfirst()
- 용도 : 알파벳 문자열의 첫 글자를 대문자로 반환한다.
- 방법 : unfirst("문자열")
* ucwords()
- 용도 : 알파벳 문자열의 첫 글자를 대문자로 반환한다.
- 방법 : ucwords("문자열")
* strrev()
- 용도 : 인자로 전달한 문자열의 순서를 역전시킨다.
- 방법 : strrev("문자열")
*
strtr() - 용도 : 문자열에서 변경하고자 하는 문자열을 변경할문자열로 1:1 변경해준다.
- 방법 : strtr("문자열","변경하고자하는 문자열","변경할 문자열")
* str_replace
- 용도 : 문자열 중에 변경하고자 하는 문자열을 찾아 변환한다.
- 방법 : str_replace("찾을 문자열","변경할 문자열","문자열 원본")
* chop()
- 용도 : 문자열의 뒷부분의 공백 문자를 제거한 후 반환한다.
- 방법 : chop("문자열")
* trim()
- 용도 : 문자열의 앞과 뒤에 있는 공백을 제거한 후 문자열을 반환한다.
- 방법 : trim("문자열")
* quotemeta()
- 용도 : 메타문자 앞에 역슬래시를 붙인다.
- 방법 : quotemeta()
* ord/chr()
- 용도 : ord()함수는 문자열에서 첫번째 문자에 아스키코드값을 반환하고 chr()함수는

           아스키함수에 해당하는 문자를 반환한다.
- 방법 : ord("문자열"), chr("아스키값")
*
parse_str() - 용도 : get방식과 같은 형태의 변수형을 변수와 값으로 받을 수 있게 해준다.
- 방법 : parse_str(변수명)



3.파일관련함수 * fopen()
- 용도 : 로컬경로의 파일이나 url경로의 파일을 읽기 모드나 쓰기 모드로 열어준다.
- 방법 : fopen("절대경로명/파일", "모드")또는 fopen("url주소", "모드")
* fclose()
- 용도 : fopen으로 열린 파일을 닫는다.
- 방법 : fclose($fp)
* fread()
- 용도 : 파일포인터가 가리키는 파일의 내용을 지정한 크기만큼 읽어 들인다.
- 방법 :fread($fp,"읽어들일 바이트")
* feof()
- 용도 : 현재 파일 포인터가 파일의 끝인지를 알려주는 함수
- 방법 : feof($fp)
* fgets()
- 용도 : 파일을 읽어올때 한줄씩 읽어온다.
- 방법 : fgets($fp,"읽어들일 바이트")
* fputs()
- 용도 : 파일을 a 또는 w 모드로 열어 문자열을 파일에 기록한다.
- 방법 : fputs($fp, "문자열")
* fwirte()
- 용도 : 파일을 기록한다.
- 방법 : fwrite($fp, "문자열")
* fpassthru()
- 용도 : 파일포인터의 현재 위치에서 파일의 끝까지 읽어 들이도록 한다.
- 방법 : fpassthru($fp)
* readfile()
- 용도 : fpassthru와 비슷하지만 fopen()없이 직접 바로 파일을 읽어들일 수 있다.

           읽어들인 파일의 절대경로를 포함한다.
- 방법 : readfile("파일의 절대경로 또는 상대경로/파일명")
* fgetc()
- 용도 : 파일로부터 한문자를 읽어들인다.
- 방법 : fgetc($fp)
* filesize()
- 용도 : 파일의 크기를 바이트수로 반환한다.
- 방법 : filesize("파일경로/파일명")
* file_exists()
- 용도 : 파일이름으로 지정한 파일이 존재하는지 검사한다.
- 방법 : file_exists("파일경로/파일명")
* is_file()
- 용도 : 파일이름으로 지정한 이름이 파일면 true를 반환한다.
- 방법 : is_file("파일경로/파일명")
* is_dir()
- 용도 : 파일이름으로 지정한 이름이 디렉토리일경우 true를 반환한다.
- 방법 : is_dir("파일경로/파일명")
*
is_link() - 용도 : 파일이름으로 지정한 이름이 심볼릭 링크일경우 true를 반환한다.
- 방법 : is_link("파일경로/파일명")
* is_escutable()
- 용도 : 파일이름으로 지정한 파일이 실행 가능한 파일이면 true를 반환한다.
- 방법 : is_excutable("파일경로/파일명")
* is_readable()
- 용도 : 파일이름으로 지정한 파일이나 디렉토리가 읽기 가능한경우 true를 반환한다
- 방법 : is_readable("파일경로/파일명 또는 디렉토리명")
* is_writeable()
- 용도 : 파일이름으로 지정한 파일이나 디렉토리가 쓰기 가능한 경우 true를 반환한다
- 방법 : is_writeable("파일경로/파일명 또는 디렉토리명")
* copy()
- 용도 : 파일을 복사하고 제대로 수행이 되면 true를 반환한다.
- 방법 : copy("파일경로/복사할 파일명", "파일경로/복사된 파일명")
* rename()
- 용도 : 파일을 이름을 바꾼다. 제대로 수행이 되면 true를 반환한다.
- 방법 : rename("파일경로/변경할 파일명", "파일경로/변경후 파일명")
* unlink()
- 용도 : 파일을 삭제한다. 제대로 수행될 경우 true를 반환한다.
- 방법 : unlink("파일경로/삭제할 파일명")
* mkdir()
- 용도 : 디렉토리를 생상하고 동시에 권한도 함께 지정할 수 있다.
- 방법 : mkdir("경로/디렉토리명")
* rmdir()
- 용도 : 디렉토리 삭제
- 방법 : rmdir("경로/디렉토리명")
* basename()
- 용도 : 경로명과 파일명을 받아 파일명만을 반환한다.
- 방법 : basename("파일경로/파일명")
*
dirname() - 용도 : 경로명과 파일명을 받아 경로명만을 반환한다.
- 방법 : dirname("파일경로/파일명")
*
file() - 용도 : 줄단위로 읽어서 각 줄으 문자열을 배열로 하여 반환한다.
- 방법 : dirname("파일경로/파일명")


4.디렉토리 관련함수
* opendir()
- 용도 : 지정한 디렉토리에 대한 핸들을 얻는다.
- 방법 : opendir("디렉토리 경로")
* closedir()
- 용도 : opendir()함수 호출로 열어둔 디렉토리에 대한 핸들을 닫는다.
- 방법 : closedir($od)
* readdir()
- 용도 : 디렉토리에 있는 모든 디렉토리 및 파일들의 이름을 읽어 배열의 형태로 반환
- 방법 : readdir($od)
* rewinddir()
- 용도 : 디렉토리 핸들의 포인터 위치를 제일 처음으로 되돌린다.
- 방법 : rewinddir($od)
* chdir()
- 용도 : 지저한 디렉토리로 바꾼다.
- 방법 : chdir("경로명/디렉토리명")
*
dir() - 용도 : 디렉토리 관련 함수를 사용할 수 있는 클래스
- 방법 : dir("경로/디렉토리명")


5. URL관련함수
* parse_url()
- 용도 : url을 입력하면 해당 url에 대한 정보를 연관 배열로 저장하여 반환
- 방법 : parse_url("URL주소")
* urlencode()
- 용도 : 데이터를 url인코딩해준다.
- 방법 : urlencode("문자열")
* urldecode()
- 용도 : url을 통해 넘어온 값 중 인코딩된 문자열을 디코딩한다.
- 방법 : urldecode("문자열")


6.변수 및 수학 관련함수
* gettype()
- 용도 : 변수형을 반환한다.
- 방법 : gettype("변수명")
* settype()
- 용도 : 변수형을 변환한다.
- 방법 : settype("변수명", "변수타입")
* intval()
- 용도 : 변수값을 정수형 값으로 변환
- 방법 : intval("변수값")
*
doubleval() - 용도 : 변수값을 실수형 값으로 변환한다.
- 방법 : doubleval("변수값")
* strval()
- 용도 : 변수를 문자형 값으로 변환한다.
- 방법 : strval("변수값")
* isset()
- 용도 : 변수가 존재하는지 확인한다.
- 방법 : isset("변수명")
* unset()
- 용도 : 변수를 삭제한다.
- 방법 : unset("변수명")
* empty()
- 용도 : 변수에 값이 존재하는지 확인하여 없으면 true를 있으면 false를 반환한다.
- 방법 : empty("변수명")
*
is_array() - 용도 : 변수의 형이 배열인지 확인한다.
- 방법 : is_array("변수명")
*
is_double - 용도 : 변수의 형이 더블형인지 확인한다.
- 방법 : is_double("변수명")
* abs()
- 용도 : 변수의 절대값을 반환
- 방법 : abs("변수명")
* round()
- 용도 : 변수의 반올림한 값을 구한다.
- 방법 : round("변수명")
* ceil()
- 용도 : 변수 값의 무조건 올림 값을 구한다.
- 방법 : ceil("변수명")
* floor()
- 용도 : 변수값의 무조건 내림 값을 구한다.
- 방법 : floor("변수명")
* pow()
- 용도 : 인자 값만큼 제곱승 한 값을 구한다.
- 방법 : pow("변수명", "제곱할 횟수")
*
max & min() - 용도 : 최대값과 최소값을 구한다.
- 방법 : max("숫자값", "숫자값",...) min("숫자값", "숫자값",...)


7.기타 알아두어야 할 함수
* count()/sizeof()
- 용도 : 배열의 크기를 구한다.
- 방법 : count("변수명") sizeof("변수명")
* each()/list()
- 용도 : 배열의 내용을 출력할때 사용한다.
- 방법 : each("배열변수명"), list("배열의 인자를 받을 변수명", "배열의 인자를 받을 변수명"...)
* end()/next()/reset()
- 용도 : 현재 배열의 포인터를 끝이나 다음으로 이동시킨다.

            reset은 배열포인터를 다시 처음으로 되돌린다.
- 방법 : end("배열변수명") next("배열변수명")
* exec()
- 용도 : 리눅스 서버의 내부 명령어를 사용하게 한다.
- 방법 : exec("리눅스명령어", "결과를 저장할 변수명" ,"에러발생시 저장할 변수명")
* number_format()
- 용도 : 천단위마다 ","를 붙여준다.
- 방법 : number_format("변수명", "소수점자리수", "소수점 표시마크변경", "천단위 표시 마크변경")
* show_source() / highlight_string()
- 용도 : php파일의 소스를 보여준다.
- 방법 : show_source("경로명/파일명") highlight_string("변수명")
* uniqid()
- 용도 : 유일한 아이디 값을 만들어준다
- 방법 : uniqid()


http://flashcafe.org/?mid=php_study&page=31&listStyle=webzine&document_srl=11264

2010년 11월 14일 일요일

10. Operating System

*Thrashing

컴퓨터를 오래 쓰다보면 컴퓨터가 느려지는데 느려지는 원인 중 하나로 thrashing이 있는 것 같습니다. 정말 궁금해서 이렇게 조사해봤습니다!
1)개념
-빈번한 page swap으로 인해 컴퓨터가 느려지는 것.

2)원인
-다중 프로그래밍 하에서 전역 페이지 교환 알고리즘을 사용한 경우
-과도한 페이지 부재율 발생
-페이지에 보다 많은 시간 소비

3)해결 방법
가. WS(Working Set) policy
- 프로세스에게 작업 설정에 맞는 충분한 프레임을 할당
***이 부분은 수업시간에 했던 CPU Scheduling을 말하는 것 같습니다.
    그래서 turnaround time이 가장 짧은 방법을 택하거나 (Shortest Job Next)
    모든 프로그램이 동시에 시작을 빨리 할 수 있게 합니다 (Round Robin)
- WS : 프로세스가 액티브하게 참조하고 있는 페이지의 집합
- 기억장소참조의 locality 성질을 이용
***여기서 locality(구역성)이란?
    #프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로
    참조하는 성질이 있다는 이론
    #thrashing을 방지하기 위한 working set policy의 기반이 됨
    #프로세스가 집중적으로 사용하는 페이지를 알아내는 방법 중 하나로, 가상 기억
    장치 관리의 이론적인 근거가 됨
***구역성에는 시간 구역성(Temporal Locality)와 공간 구역성(Spatial Locality)가
    있습니다.
    #시간 구역성
    >프로세스가 실행되면서 하나의 페이지를 일정 시간동안 집중적으로 액세스하는
    현상
    -시간 구역성이 이루어지는 기억 장소
    1)Loop(반복, 순환)
    2)스택(Stack)
    3)부프로그램(Sub Routine)
    4)Counting(1씩 증감)
    5)Totaling(집계)에 사용되는 변수
    #공간 구역성
    >프로세스 실행시 일정 위치으 피에지리르 집중적으로 액세스하는 현상
    -공간 구역성이 이루어지는 기억 장소
    1)배열 순회(Array Traversal)
    2)순차적 코드의 실행
    3)프로그래머들이 관련된 변수(데이터를 저장할 기억장소)들을 서로 근처에 선언
    하여 할당되는 기억장소, 같은 영역에 있는 변수를 참조할 때 사용
- Working set 크기의 결정이 매우 중요
- 스레슁의 조절이 어렵다
- 프로그램이 효율적으로 실행되기 위해서는 working set은 항상 primary memory에 상주하고 있어야 함


나. PFF(Page Fault Frequency) policy
- 원하는 페이지 부재율의 상한과 하한을 정함
- 페이지 부재율 > 상한 : 그 프로세스에게 프레임을 더 할당
- 페이지 부재율 < 하한 : 그 프로세스로 부터 프레임을 회수

다. WS와 PFF의 차이점
- WS policy : 매번 참조시마다 resident page set 조정 -> high overhead
- PFF policy : 페이지 부재 발생시에만 resident page set 조정 -> low overhead

2010년 10월 24일 일요일

5. Computing Components


저는 견적을 위와 같이 뽑아 보았습니다.
우선 저는 영화 감상(주목적)과 더불어 게임을 위한 목적으로 견적을 내보았습니다. 목적이 영화감상인만큼 이와 관련된 모니터,  스피커, 그래픽카드에 관해서 설명드리겠습니다.
일단 모니터부터 말씀드리자면 와이드 모니터(16:9)를 골랐습니다. 넓게 보는게 좋을 꺼같아서요. 광원종류에는 LED백라이트와 CCFL백라이트가 있었는데 LED백라이트가 선명하고 환경에도 좋다고 해서 LED백라이트를 골랐어요. 크기는 적당하게 60cm인거로 골랏어요.
그래픽카드는 라데온 HD 5550인데요 아는게 제조 공정값이 작을 수록 좋다 해서 40nm면
적당하다 생각햇구요 코어 클럭이라든지 메모리 클럭이 정확히 뭔지는 모르지만 클럭이 높을수록 좋다고 해서 이것 역시 제 생각에 적당한 수준으로 골랐습니다.
(정확히 뭔지 몰라서 찾아봣습니다.)
1. 코어클럭 : GPU의 처리속도입니다.
2. 메모리클럭 : GPU가 처리한 내용을 메인보드를 통해서 화면에 뿌려주기 위해 계산하는 속도입니다. (GPU = Graphic Processing Unit)
- 출처 : http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1010306&docId=71648013&qb=7L2U7Ja0IO2BtOufrQ==&enc=utf8&section=kin&rank=3&search_sort=0&spq=0&pid=gKedtdoi5Tlssusy6NZsss--411745&sid=TMRK8-JJxEwAABegGHI

스피커는 5.1채널이 되는 것으로 골랐습니다.
5.1채널에 대한 정의 : http://terms.naver.com/item.nhn?dirId=210&docId=21776

CPU는 인텔과 AMD 두개의 회사가 있었는데 가격대비 성능을 위해서 AMD의 CPU를 골랐습니다. 코어는 굳이 쿼드코어까지 안해도 되겟다 싶어서 듀얼코어를 선택했구요.  동작속도도 무난하게 2.7GHz로 선택했습니다.
HDD는 영화를 주 목적으로 해서 용량이 큰 걸 선택했어요.
컴퓨터 견적을 조사하다가 벌크라는 용어를 많이 봤는데 이건 제품설명서, 제품보증서 이런걸 제외하고 오로지 제품만 간단히 포장해서 판매하는 상품을 벌크라고 한다고 하네요.

제 나름대로 호환이 되는 것들로 구성햇다고 생각하는데 아니라면 슬플꺼같아요..ㅠㅠ

2010년 10월 10일 일요일

4. Gates and circuits

The History of the Integrated Circuit

Integrated Circuits
Our world is full of integrated circuits. You find several of them in computers. For example, most people have probably heard about the microprocessor. The microprocessor is an integrated circuit that processes all information in the computer. It keeps track of what keys are pressed and if the mouse has been moved. It counts numbers and runs programs, games and the operating system. Integrated circuits are also found in almost every modern electrical device such as cars, television sets, CD players, cellular phones, etc. But what is an integrated circuit and what is the history behind it?
Photo: Nobelprize.org


Electric Circuits
The integrated circuit is nothing more than a very advanced electric circuit. An electric circuit is made from different electrical components such as transistors, resistors, capacitors and diodes, that are connected to each other in different ways. These components have different behaviors.
The transistor acts like a switch. It can turn electricity on or off, or it can amplify current. It is used for example in computers to store information, or in stereo amplifiers to make the sound signal stronger.
The resistor limits the flow of electricity and gives us the possibility to control the amount of current that is allowed to pass. Resistors are used, among other things, to control the volume in television sets or radios.
The capacitor collects electricity and releases it all in one quick burst; like for instance in cameras where a tiny battery can provide enough energy to fire the flashbulb.
The diode stops electricity under some conditions and allows it to pass only when these conditions change. This is used in, for example, photocells where a light beam that is broken triggers the diode to stop electricity from flowing through it.
These components are like the building blocks in an electrical construction kit. Depending on how the components are put together when building the circuit, everything from a burglar alarm to a computer microprocessor can be constructed.

The Transistor vs. the Vacuum Tube
Of the components mentioned above, the transistor is the most important one for the development of modern computers. Before the transistor, engineers had to use vacuum tubes. Just as the transistor, the vacuum tube can switch electricity on or off, or amplify a current. So why was the vacuum tube replaced by the transistor? There are several reasons.
The vacuum tube looks and behaves very much like a light bulb; it generates a lot of heat and has a tendency to burn out. Also, compared to the transistor it is slow, big and bulky.
The vacuum tube and the transistor.
Photo: Nobelprize.org
ENIAC-The first digital computer
Photo: U.S Army


When engineers tried to build complex circuits using the vacuum tube, they quickly became aware of its limitations. The first digital computer ENIAC, for example, was a huge monster that weighed over thirty tons, and consumed 200 kilowatts of electrical power. It had around 18,000 vacuum tubes that constantly burned out, making it very unreliable.
When the transistor was invented in 1947 it was considered a revolution. Small, fast, reliable and effective, it quickly replaced the vacuum tube. Freed from the limitations of the vacuum tube, engineers finally could begin to realize the electrical constructions of their dreams, or could they?

The Tyranny of Numbers
With the small and effective transistor at their hands, electrical engineers of the 50s saw the possibilities of constructing far more advanced circuits than before. However, as the complexity of the circuits grew, problems started arising.
When building a circuit, it is very important that all connections are intact. If not, the electrical current will be stopped on its way through the circuit, making the circuit fail. Before the integrated circuit, assembly workers had to construct circuits by hand, soldering each component in place and connecting them with metal wires. Engineers soon realized that manually assembling the vast number of tiny components needed in, for example, a computer would be impossible, especially without generating a single faulty connection.
Another problem was the size of the circuits. A complex circuit, like a computer, was dependent on speed. If the components of the computer were too large or the wires interconnecting them too long, the electric signals couldn't travel fast enough through the circuit, thus making the computer too slow to be effective.
So there was a problem of numbers. Advanced circuits contained so many components and connections that they were virtually impossible to build. This problem was known as the tyranny of numbers.

Jack Kilby's Chip - the Monolithic Idea
Jack S Kilby
Photo: Texas Instruments
Kilbys first chip
Photo: Texas Instruments


In the summer of 1958 Jack Kilby at Texas Instruments found a solution to this problem. He was newly employed and had been set to work on a project to build smaller electrical circuits. However, the path that Texas Instruments had chosen for its miniaturization project didn't seem to be the right one to Kilby.
Because he was newly employed, Kilby had no vacation like the rest of the staff. Working alone in the lab, he saw an opportunity to find a solution of his own to the miniaturization problem. Kilby's idea was to make all the components and the chip out of the same block (monolith) of semiconductor material. When the rest of the workers returned from vacation, Kilby presented his new idea to his superiors. He was allowed to build a test version of his circuit. In September 1958, he had his first integrated circuit ready. It was tested and it worked perfectly!
Although the first integrated circuit was pretty crude and had some problems, the idea was groundbreaking. By making all the parts out of the same block of material and adding the metal needed to connect them as a layer on top of it, there was no more need for individual discrete components. No more wires and components had to be assembled manually. The circuits could be made smaller and the manufacturing process could be automated.
Jack Kilby is probably most famous for his invention of the integrated circuit, for which he received the Nobel Prize in Physics in the year 2000. After his success with the integrated circuit Kilby stayed with Texas Instruments and, among other things, he led the team that invented the hand-held calculator.

Robert Noyce
Robert Noyce
Photo: Intel Museum Archives


Robert Noyce came up with his own idea for the integrated circuit. He did it half a year later than Jack Kilby. Noyce's circuit solved several practical problems that Kilby's circuit had, mainly the problem of interconnecting all the components on the chip. This was done by adding the metal as a final layer and then removing some of it so that the wires needed to connect the components were formed. This made the integrated circuit more suitable for mass production. Besides being one of the early pioneers of the integrated circuit, Robert Noyce also was one of the co-founders of Intel. Intel is one of the largest manufacturers of integrated circuits in the world.

Chip Production Today - in Short
Stepping.


Chip production today is based on photolithography. In photolithography a high energy UV-light is shone through a mask onto a slice of silicon covered with a photosensitive film. The mask describes the parts of the chip and the UV-light will only hit the areas not covered by the mask. When the film is developed, the areas hit by light are removed. Now the chip has unprotected and protected areas forming a pattern that is the first step to the final components of the chip.
Next, the unprotected areas are processed so their electrical properties change. A new layer of material is added, and the entire process is then repeated to build the circuit, layer by layer. When all the components have been made and the circuit is complete a layer of metal is added. Just as before, a layer of photosensitive film is applied and exposed through a mask. However, this time the mask used describes the layout of the wires connecting all the parts of the chip. The film is developed and the unexposed parts are removed. Next, the metal not protected with film is removed to form the wires. Finally, the chip is tested and packaged.
When making chips today, a process called "stepping" is often used. On a big wafer of silicon the chips are made one next to the other. The silicon wafer is moved in steps under the mask and the UV-light to expose the wafer. In this way, chip after chip can be made using the same mask each time.
Below is a more sequential description of the process of making a modern integrated circuit. But let us first take a look at the special place where integrated circuits are produced - the clean room.

The Clean Room
Child facing "bunny suit"
Photo: Intel Museum Archives


The sizes of the components on chips produced in a modern chip fabrication plant are extremely small. For a better understanding of how small they are, pick a hair from your head and cut it in half. Now look at the cross section. On this tiny area, hard to see with the bare eye, you can fit thousands of modern transistors.
With sizes this small, the production of a chip demands precision at an atomic level. Tiny particles like a hair, a speck of dust, a dead skin cell, bacteria or even the single particles in tobacco smoke become huge objects that are big enough to ruin a chip.
Therefore, chip production takes place in a clean room. This is a specially designed room, where furniture is built from special materials that don't give off particles, and where extremely effective air filters and air circulation systems change the air completely up to ten times a minute.
To further prevent contamination, workers wear special suits called "bunny suits." These protective outfits are made of ultra clean material and sometimes have their own air filtering systems.

Chip Production Today - in Detail
Building an integrated circuit like a computer chip is a very complex process. It is divided into two major parts, front end and back end. In the front end, you make the components of the circuit. In the back end, you add metal to connect the components and then you test and package the chip. Below is a simplified description of the steps.

Front End – Construction of the Components
 1.Just as in building a house, you need a construction plan to construct a chip. The construction plans for the chip are made and tested with a computer.
 2.
From the construction plans, masks with the circuit patterns are made.
 3.
Under precisely monitored conditions, a pure silicon crystal is grown. Circuit manufacturing demands the use of crystals with an extremely high grade of perfection.
 4.
The silicon is sawed into thin wafers with a diamond saw. The wafers are then polished in a number of steps until their surface has a perfect mirror-like finish
 5.
The silicon wafer is covered with a layer of insulating silicon oxide.
 6.
A covering film of protective material is put on top of the insulating silicon oxide. This material, a bit like the film in any ordinary camera, is sensitive to light.
 7.
UV-light is shone through a mask and onto the chip. On the parts of the chip that are hit by light, the protective material breaks apart.
 8.
The wafer is developed, rinsed and baked. The development process removes the parts of the protective material exposed to light.
 9.
The wafer is treated with chemicals in a process called "etching." This removes the unprotected insulating material, creating a pattern of non-protected silicon wafer parts surrounded by areas protected by silicon oxide.
 10.
The wafer is run through a process that alters the electrical properties of the unprotected areas of the wafer. This process is called "doping." Steps 5-10 are repeated to build the integrated circuit, layer by layer. Other layers of conducting or isolating layers may also be added to make the components.
 Back End – Adding the Connecting Wires
 11.
Finally, when all the components of the chip are ready, metal is added to connect the components to each other in a process called metalization. This is done in a way similar to the making of the components. First a conducting metal like copper is deposited over the chip.
 12.
On top of the metal a layer of UV-sensitive photo resist is added.
 13.
Next, a mask that describes the desired layout of the metal wires connecting the components of the chip is used. UV-light is shone through this mask. The light hits the photo resist that isn't protected by the mask.
 14.
In the next step, chemicals are used to remove the photo resist hit by UV-light.
 15.
Another step of etching removes the metal not protected by photo resist.
 16.
This leaves a pattern of metal that is the same as the one described by the mask. Now, the chip has a layer of wires that connect its different components.
 17.
Today, most integrated circuits need more than one layer of wires. Advanced circuits may need up to five different layers of metal to form all the necessary connections. In the last picture we have added another layer of metal to our example. As you can see, a layer of insulating material is put between the two metal layers to prevent the wires from connecting in the wrong places. Of course, to add the second layer we had to go through the same steps as when adding the first layer of metal.
 18.
When the final layer of connecting metal wires have been added, the chips on the silicon wafer are tested to see if they perform as intended.
 19.
The chips on the wafer are separated with a diamond saw to form individual integrated circuits.
 20.
Finally, each chip is packed into the protective casing and subjected to another series of tests. The chip is now finished and ready to be shipped to manufacturers of digital devices around the world.


The Evolution of the Integrated Circuit
The integrated circuit has come a long way since Jack Kilby's first prototype. His idea founded a new industry and is the key element behind our computerized society. Today the most advanced circuits contain several hundred millions of components on an area no larger than a fingernail. The transistors on these chips are around 90 nm, that is 0.00009 millimeters*, which means that you could fit hundreds of these transistors inside a red blood cell.
Jack Kilby examines a wafer filled with chips.
Photo: Texas Instruments


Each year computer chips become more powerful yet cheaper than the year before. Gordon Moore, one of the early integrated circuit pioneers and founders of Intel once said, "If the auto industry advanced as rapidly as the semiconductor industry, a Rolls Royce would get a half a million miles per gallon, and it would be cheaper to throw it away than to park it."

출처 : http://nobelprize.org/educational/physics/integrated_circuit/history/

2010년 10월 3일 일요일

3. Data Representation

벡터 그래픽스(Vector graphics)

벡터 그래픽스(Vector graphics)는 컴퓨터 과학에서 그림을 보여줄 때 수학 방정식을 기반으로 하는 , 직선, 곡선, 다각형과 같은 물체를 사용하는 것을 말한다. 객체 지향 그래픽스(문화어: 대상지향그라픽스)라고도 한다. 벡터 그래픽스는 사진에서 흔히 쓰이는 화소로 모인 그림을 대표하는 래스터 그래픽스의 대안이다.

대부분의 컴퓨터 디스플레이는 벡터 형태의 그림을 래스터 형식으로 변환한다. 드로잉 소프트웨어는 벡터 그래픽스를 만들고 편집하기 위해 쓰인다. 그림은 이러한 객체들을 편집함으로써 변경된다. 여러 도구를 사용하여 그림을 늘이고, 비틀고, 색을 입히는 등의 작업을 할 수 있다. 화면 위의 모든 화소마다 값을 포함하는 래스터 이미지는 메모리에 저장되어 있다. 1950년대에서 1980년대로 들어가는 초기 컴퓨팅이 시작하면서, 다른 종류의 디스플레이인 벡터 그래픽스 시스템이 사용되었다.
특별한 종류의 벡터 디스플레이는 Etch A Sketch와 매우 비슷하게 동작하는 영상관을 갖춘 축적관으로 알려져 있다. 전자빔이 화면을 지나갈 때, 작은 저전력 전자총의 배열이 "연속적으로 비추는" 빔의 경로를 유지시킨다. 비디오 디스플레이 자체가 컴퓨터를 위한 축적관의 역할을 담당할 수 있다. 그림의 해상도는 매우 높았기 때문에, 벡터 컴퓨터는 문자열의 문단과 복잡한 그림을 수분에 걸쳐 느리게 그려냈다. 반면 축적관은 이전에 그려 놓았던 부분을 연속적으로 표시한다. 축적관의 그림은 벡터 축적관의 전원이 켜져 있을 경우 여러 시간 동안 유지시킬 수 있지만, (여러 시간이 지나 그림이 깨끗하지 않을 경우) 벡터 컴퓨터의 단추나 신호를 바로 누른다면 그림은 다시 깨끗하게 표시된다.
 
벡터 그래픽 디스플레이를 처음 사용한 것은 미국 SAGE 항공 방어 시스템이었다.
현대의 벡터 그래픽스 디스플레이는 가끔 레이저 라이트 쇼에서 찾을 수 있다. 빠르게 움직이는 두 개의 X-Y 거울을 사용하여 모양과 글자를 큰 화면에 빠르게 그려낼 수 있다.
벡터 그래픽스라는 용어는 오늘날 2차원 컴퓨터 그래픽스 환경에서 주로 사용된다. 이는 예술가가 래스터 디스플레이 위의 그림을 만들어낸 몇 가지 방식들 가운데 하나이다. 다른 방식으로는 텍스트, 멀티미디어, 3차원 렌더링을 들 수 있다. 실제로 모든 3차원 렌더링은 2차원 벡터 그래픽스 기술 확장을 사용하여 구현해 낼 수 있다. 테크니컬 드로잉에 쓰이는 플로터는 벡터를 종이에 직접 그려낸다.


래스터 그래픽스 ( Raster graphics)

전산학에서 래스터 그래픽스(Raster graphics) 이미지, 곧 비트맵은 일반적으로 직사각형 격자의 화소, 의 점를 모니터, 종이 등의 매체에 표시하는 자료 구조이다. 래스터 이미지는 다양한 포맷의 그림 파일로 저장할 수 있다.
비트맵은 화면에 표시되는 그림의 비트 대 비트와 일치하며, 일반적으로 장치 독립 비트맵으로서, 디스플레이의 비디오 메모리의 기억 장치에 쓰이는 포맷과 일치한다. 비트맵은 기술적으로 화소 단위로, 또 화소 당 비트 수 (표시하는 색의 수를 정의하는 색 깊이)로 그림의 가로, 세로에 따라 구분한다.
인쇄 산업은 래스터 그래픽스를 연속 톤으로, 벡터 그래픽스를 선형 작업으로 부른다.
"래스터"(raster)라는 낱말은 라틴어 radere (문지르다의 뜻)에서 유래한 rastrum (갈퀴라는 뜻)에서 비롯하였다.
래스터 그래픽스의 해상도는 독립적이다. 화질의 명백한 손실 없이 해상도를 자유자재로 조절하는 것은 가능하지 않다. 이는 크기를 조절할 때 렌더링을 하여 화질을 떨어트리지 않게 하는 벡터 그래픽스와 대조되는 단점이기도 하다. 래스터 그래픽스는 사진에 있어 벡터 그래픽스 보다 더 실용적이다. 반면 벡터 그래픽스는 그래픽 디자인이나 조판에 더 잘 어울린다.

2010년 9월 25일 토요일

02. Binary Values and Number Systems

그레이스 호퍼, COBOL의 어머니, 여성 해군 제독

그레이스 호퍼(Grace Hopper)는 1906.12월 미국 뉴욕에서 태어났다. 병 때문에 다리를 모두 잘라낸 장애인이었으나, 여자도 남자와 마찬가지로 교육을 받고 신식 여성으로 살아야 한다는 아버지의 진취적인 가르침에 따라, 1928년 여자들의 대학 진학이 흔하지 않던 시절 바사르 칼리지(Vassar College)에서 수학과 물리학을 전공하였고, 1934년 예일대(Yale University)에서 수학으로 박사 학위를 받았다. 그리고 바사르 칼리지에서 수학을 가르치기 시작했다.

2차대전에서 일본이 진주만을 폭격하자, 1943년 애국심과 사명감으로 해군 소위로 자원 입대, Mark I을 만든 하워드 에이컨(Howard Aiken)과 함께 프로그램 개발을 시작하였다. 이후 Mark II, Mark III 개발에도 참여했다. Mark II로 프로그래밍을 하던 중 갑자기 컴퓨터 내부로 날아든 나방 때문에 컴퓨터가 작동을 멈춘 사건이 발생했는데, 이때부터 버그(bug)와 디버깅(debugging)이라는 용어를 사용하게 되었다.
  
1949년 Eckert-Mauchly Computer Corporation에 입사 UNIVAC I 개발에 참여하였으며, A 컴파일러를 개발하였다. A 컴파일러는 상용 버전인 ARITH-MATIC, MATH-MATIC 그리고 FLOW-MATIC 로 업그레이드 되었다.

1959년 CODASYL 위원회는 FLOW-MATIC과 IBM COMTRAN을 기반으로 COBOL(Common Business Oriented Language) 언어를 만들었다. COBOL의 기본 사상은 기계어나 어셈블리어가 아니라, 사람들이 쉽게 이해할 수 있는 자연어(영어)로 프로그램을 작성하려고 했던 그녀의 철학에 근거했다. COBOL의 주목적은 컴퓨터의 상업적인 이용도를 높이는 것이었으므로 누구나 쉽게 배우고 이해할 수 있고, 어떤 종류의 컴퓨터에서도 작동되도록 하는 것이었다.

1970년대에 그녀는 COBOL, FORTRAN 등의 언어들을 위한 테스팅 표준화를 개척하였으며, 그것은 지금의 National Institute of Standards and Technology (NIST)가 되었다.

1983년 컴퓨터 기술 발전에 이바지한 공로와 군에 대한 충성심을 높이 평가하여 대통령 특별지시로 그녀는 미 해군 최초의 여성 제독이 되었다. 1986년 80세의 나이로 전역하였는데, 이 또한 미 해군 역사상 가장 많은 나이에 전역한 기록이 되었다.

1992년 Digital Equipment Corporation의 선임 컨설턴트로 일하던 중 85세의 일기로 사망했다. 특별한 배경도 없었고, 비범한 천재도 아니었으며, 출중한 외모도 갖추지 못했던 그녀가 컴퓨터 역사에 큰 획을 그은 인물이 되었던 것은 오로지 자신의 의지와 노력 때문이었다.

출처 : http://www.acronet.kr/board/view.php?id=story&page=6&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=34&PHPSESSID=d6e5c9cc4e2fb3203cad71dd0df15072

코볼(COBOL : Common Business Oriented Language)

코볼(COBOL : Common Business Oriented Language)은 사무처리를 위한 프로그래밍 언어로서 가장 널리 사용되고 있다.
코볼은 1960년 컴퓨터 사용자와 제조업자의 그룹에 의해 사무처리에 적용될 수 있는 고급언어로 개발, 공표되었다. 코볼언어의 특징은 기계와 독립적으로 설계되어 컴퓨터 제조회사가 다르고 기종이 다르더라도 큰 변화없이 프로그램을 작성 및 수행할 수 있다는 점이다. 또한 일상에서 사용하는 영어와 같은 표현으로 기술하도록 설계되어 있다.
거의 모든 컴퓨터제조회사들이 코볼을 적용하기 시작했는데 코볼이 각광받기 시작한 것은 두 가지 이유에서이다.
첫째, 당시 저급언어를 이용하여 프로그램을 하는 것은 어렵고 에러가 많았으며, 포트란은 사무처리 업무에는 거의 부적합했기 때문에 사무처리에 편리한 프로그래밍 언어가 많이 필요하게 되었다. 둘째, 당시 컴퓨터제조회사의 가장 큰 고객이었던 미국 연방정부로부터 여러 기종에 공통적으로 사용할 수 있는 프로그래밍 언어의 필요성과 함께 당시 미국 연방정부에 컴퓨터를 팔고자 할 경우, 코볼프로그램이 처리될 수 있어야 한다고 했기 때문이다.
수차례의 수정 및 보완을 거쳐 1968년 코볼은 미국에서 사무처리 언어의 표준이 되었으며, 계속적인 보완으로 1974년 미국표준 코볼(ANSI cobol)이 완성되어 현재 거의 모든 컴퓨터에서 이용되고 있다. 또한 미국표준 코볼을 모델로 하여 소형 컴퓨터에서 사용하기 위한 RM-COBOL 85가 개발되어 마이크로컴퓨터개인용 컴퓨터에서 널리 사용되고 있다.
코볼은 사무처리 언어로서 몇 가지 중요한 장점을 가지고 있다.
둘째는 컴퓨터의 내부적인 특성과 별개로 설계된 것이다. 코볼컴파일러만 있다면 어떠한 컴퓨터이건 기종에 관계없이 코볼프로그램을 작성, 처리할 수 있다. 코볼은 파일처리 면에서 순차적인 처리, 비순차적인 처리 등으로 다른 언어에 비해 강력한 장점을 지니고 있으며, 누구나 쉽게 작성하고 또한 프로그램이 다른 프로그래머에 의해서도 쉽게 이해될 수 있다.
코볼 원시프로그램을 기계어로 번역하기 위한 번역프로그램, 즉 코볼컴파일러에는 이의 번역을 위한 많은 항목이 포함되어 있기 때문에 코볼프로그램 수행하기 위해서는 컴퓨터의 기억용량이 커야만 된다. 따라서 주기억용량이 적은 소형 컴퓨터에서는 코볼프로그램의 처리를 위해 RM-COBOL이 사용된다. 또한 코볼은 다른 언어에 비하여 프로그램 작성량이 많고 길어 전체적인 구성이 간결하지 못하다.


출처 : http://jus1170.tistory.com/1071

버그(Bug)

컴퓨터 기술 분야에서 "버그"란 컴퓨터 프로그램의 코딩 오류를 의미하는 용어이다. 프로그램 사용자가 이러한 버그를 발견하기 전에 찾아 수정하는 것을 "디버깅"(debugging)이라 하며, 디버깅은 프로그램의 개발 시작 단계부터 완료될 때까지 계속해서 이루어진다. 하지만 제품이 출시된 후나 베타 테스트 기간 중에도 버그는 여전히 남아있을 수 있다. 그러나 일반적으로 프로그램 개발 절차가 잘 확립되어 있고 프로그램의 설계를 잘하면, 그것이 비록 수천, 수만 개의 명령문이 조합된 대형 프로그램이라 해도, 버그를 최소한으로 줄일 수 있다.
버그의 어원은 1944년 하버드에서 MarkⅠ 컴퓨터로 프로그램을 개발했던 최초의 프로그래머인 그레이스 호퍼에 의해 비롯되었다. 젊은 해군장교였던 호퍼는 기술자들이 MarkⅡ 컴퓨터에서 오동작을 일으킨 벌레(모기)를 꺼낸 사건을 서술했다. 에릭 레이몬드는 그의 저서인 The New Hacker's Dictionary 에서 '그 벌레(모기)가 해군에 여러 해동안 전시되었고, 지금은 스미스쏘니언 박물관에 소장되어 있다'고 하였다. 이와 같이 버그라는 용어는, 현대의 컴퓨터 이전의 진공관 컴퓨터 시대부터 산업적 또는 전기적 오동작을 의미하는데 사용되었고, 때로는 컴퓨터 하드웨어 문제를 지칭하는 것으로 사용되기도 한다.

출처 : http://www.terms.co.kr/bug.htm

2010년 9월 14일 화요일

1. Big Picture - Java에 관하여

자바(Java, 문화어: 쟈바)는 썬 마이크로시스템즈의 제임스 고슬링(James Gosling)과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어이며, 썬 마이크로시스템즈에서 무료로 제공하고 있다. 1991년 그린 프로젝트(Green Project)라는 이름으로 시작해 1995년에 발표했다. 처음에는 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발했지만 현재 웹 어플리케이션 개발에 가장 많이 사용하는 언어 가운데 하나이고, 모바일 기기용 소프트웨어 개발에도 널리 사용하고 있다. 현재 버전 6까지 출시했다.
자바의 개발자들은 UNIX 기반의 배경을 가지고 있었기 때문에 문법적인 특성은 파스칼이 아닌 C++의 조상인 C 언어와 비슷하다.[1] 자바를 다른 컴파일언어와 구분짓는 가장 큰 특징은 컴파일된 코드가 플랫폼 독립적이라는 점이다. 자바 컴파일러는 자바 언어로 작성된 프로그램을 바이트코드라는 특수한 바이너리 형태로 변환한다. 바이트코드를 실행하기 위해서는 JVM(자바 가상 머신, Java Virtual Machine)이라는 특수한 가상 머신이 필요한데, 이 가상 머신은 자바 바이트코드를 어느 플랫폼에서나 동일한 형태로 실행시킨다. 때문에 자바로 개발된 프로그램은 CPU운영체제의 종류에 관계없이 JVM을 설치할 수 있는 시스템에서는 어디서나 실행할 수 있으며, 이 점이 웹 애플리케이션의 특성과 맞아떨어져 폭발적인 인기를 끌게 되었다.


역사
자바 언어는 1991년 6월 셋톱 프로젝트를 위해 제임스 고슬링(James Gosling)이 만들었다. 이 언어는 원래 제임스 고슬링의 오피스 밖에 있던 오크 나무를 따라 오크(Oak), 혹은 그린(Green) 이라고도 불렀으나 단어 리스트 중 무작위로 뽑은 자바(Java)를 선택했다. 고슬링의 목표는 C/C++ 스타일의 언어와 가상 머신을 구현하는 것이었다. 첫 공개 자바 버전은 1995년의 자바 1.0 이었다. 한번 쓰고 어느 곳에도 실행 "Write Once, Run Anywhere" 하는 것을 약속하였고 인기 플렛폼에 무료 런타임을 제공하였다. 이 플랫폼은 꽤 안정성을 지녔고 보안 시스템은 여러 설정을 통해 네트워크 및 파일 접근을 통제할 수 있었다. 대부분의 브라우져들은 곧 자바 애플릿(Java Applet) 을 웹 페이지 안에서 실행 할 수 있었고 자바의 인기는 급상승했다. 자바 2 (JDK 1.2 ~ 1.4) 의 출현으로 여러 다양한 플렛폼에서 사용 할 수 있는 설정(Configuration) 들을 만들었다. 예를 들어 J2EE 는 엔터프라이즈 애플리케이션을 실행할 수 있고 J2ME 는 모바일 애플리케이션을 실행할 수 있다. J2SE는 스탠다드 에디션 으로 지정되었다. 2006년에 마케팅 용으로 Java EE, Java ME, Java SE 순서대로 명칭을 바꾸었다.
썬사 (Sun Microsystems) 는 1997년 ISO/IEC JTC1 표준화 그룹, 그리고 나중에는 ECMA International 그룹과 접촉하여 정식 승인 받으려 했으나 곧 이 프로세스에서 철수 했다. 자바는 사실상 (de facto) 의 표준이며 자바 커뮤니티 프로세스(Java Community Process) 를 통해 관리가 된다. 썬사는 자바의 대부분을 무료로 배포하였으나 오픈이 아닌 Proprietary 소프트웨어였다. 썬사는 자바 엔터프라이즈 시스템같은 특정 라이선스를 팔아서 수입을 올렸다. 썬사는 자사의 개발용(Software Development Kit (SDK))과 개발용의 일부인 실행용 (Runtime Environment (JRE)) 을 구분한다. 실행용에는 컴파일러, 유틸리티 및 여러 개발용 헤더 파일이 포함되어 있지 않다.
2006년 11월 13일 썬사는 대부분은 자바를 GPL 라이선스로 소스를 오픈하였으며 2007년 5월 8일 이 과정을 마쳤다. 썬사가 권한을 가지고 있지 않은 대부분의 코어 부분을 오픈하였다.


핵심목표
자바 언어는 다음 5가지의 핵심 목표를 지니고 있다.
  1. 객체 지향 방법론을 사용해야 한다.
  2. 같은 프로그램이 여러 운영 체제에서 실행될 수 있어야 한다.
  3. 컴퓨터 네트워크 접근 기능이 기본으로 탑재 되어 있어야 한다.
  4. 원격 코드를 안전하게 실행할 수 있어야 한다.
  5. 다른 객체 지향 언어들의 좋은 부분만 가지고 와서 사용하기 편해야 한다.

버전
자바의 버전은 보통 자바SE(JDK/JRE)의 버전으로 말한다. JDK는 표준 라이브러리를 포함하며, JDK 버전이 바뀜에 따라 이 라이브러리가 확대되고 인터페이스(API)가 바뀐다.
초기 1.0/1.1 버전에서 JDK/JRE의 명칭을 사용하다가 Java 1.2가 발표되면서 J2SDK/J2RE라고 개명하여 사용했으나 기존의 명칭으로 사용하는 사람들이 많아 현재는 다시 JDK/JRE의 명칭으로 돌아왔다. 또한 J2SE(Java2 Standard Edition)라는 명칭 또한 Java SE(Java Standard Edition)으로 변경하였다. [2][3]

또한 버전체계의 메이저 버전(소숫점 위)이 계속 1.x로 고정되어 마이너 업데이트로 여기는 경우들이 있어 1.5 버전부터 5.0(1.5), 6.0(1.6)의 형태로 제품 버전을 코드버전과 별개로 발표하고 있다. [4]

언어 자체는 자바언어명세(JLS)에서 정의되며 판(edition)으로 구분한다. JDK가 확장되는 동안 언어는 2판에서 거의 변화가 없었으나, JDK 5와 함께 바뀐 JLS 3판에서 제네릭(generic) 타입, 애너테이션(annotation) 같은 기능이 도입되면서 상당히 바뀌었다. JDK 7에서도 클로저(closure) 등이 도입될 것으로 알려져 있다.
현재 자바언어는 JLS 3판, JDK는 버전 6이다.
  • JLS 1판
  • JLS 2판
    • JDK 1.4: assertion 기능 추가
  • JLS 3판(JDK 5)

출처 : http://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4)

2010년 9월 4일 토요일

컴퓨터과학개론과 컴퓨터교육과수업사이의 연관성 찾기

1.The big pictures : 이 단원은 프로그래밍 시스템의 전반적인 것에 대해 설명해주는 단원 같다. 그래서 어떤 전공과 관련 있다기 보다는 프로그래밍을 하는데 있어서 컴퓨터시스템의 대략적인 구조에 대해 말해주고 있다고 생각한다.

2.Binary values and number systems : 컴퓨터는 2진법으로 돌아간다. 이러한 체계에 대해서 설명해주는 단원이다. 그리고 컴퓨터에서 수체계의 쓰임에 대해 말하고 있다. 1학기때 C언어를 배울 때도 2진법에 관해서 들었다. 잘 생각은 안나지만 True - 0 False - 1이었던거로 기억한다.

3.Data representation : 여기서는 데이타를 표현하는 방법에 관해서 말하고 있는 것 같다. C언어를 배울때 봤던 아스키 코드?도 보이고 실수 음수 이런것들도 나오는 것 같다.

4.Gates and circuits : C언어로 코딩을 할때 자주 사용했던 and, or 이게 보인다. 또한 어떤 순환체계? 이런것들에 대해서 배우는 것 같다. C언어에서의 while for 문과 연관이 있지 않을까싶다.

5.Computing components : 프로그래밍을 하는데 있어서의 구성요소?에 관해 말해주고 있는 듯 싶다. 실행구조나 저장장치 실행써킷 평행컴퓨팅 등의 단어가 보이는데 자바에서 배우지 않을까 생각해본다. 또한 Data Sturucture라는 강의와도 꽤나 연관이 있어보인다.

6.Low-level programming languages and pseudocode : 여기서는 기계어와 알고리즘 표현등에 관해 배우는 것같다. 단원제목에 pseudocode가 있는 것으로보아 Data Structures 단원과 깊은 연관이 있을 것으로 보인다.

7.Problem solving and algorithms : 여기서는 문제를 해결하는 법과 알고리즘에 관한 내용이 나올 것 같다. 알고리즘은 2학년쯤에 배우는 과목으로 알고 있다. 알고리즘을 잘하려면 data structure란 과목을 잘 해야 한다고 들었다. 그래서 연관이 있을 것 같다. 또한 소단원에서 array가 보인다. C언어에서 배운 배열이 생각난다.

8.Abstract data types and subprograms : 여기서 약간은 새로운 개념인 추상적 데이타 타입에 대해 배우는 것 같다. Dats structures 시간에 추상적 데이타 타입에 대해 들어본 것같다. 추상적 데이타 타입과 반대 개념의 예로써 int, float, double 등이 있다. 기존에 존재하는 데이타 타입을 말하는 것이고 추상적 데이타 타입은 사용자가 데이타타입을 만드는 것이다. 이는 C언어에서 structure를 배울 때 배웠던 기억이 난다.

9.Object-oriented design and high-level programming languages : 이 단원에서는 컴파일러가 가장 눈에 띈다. C언어에서 컴파일링할때 'gcc 파일명.c -o 파일명' 이렇게 한다. 최근 배운 자바에서는 'javac 파일명.java' 이렇게 하면 된다.

10.Operating systems : 여기서는 OS 즉 운영체제에 대해서 배우는 것 같다. 내가 배운 운영체제로는 저번 1학기에 배운 리눅스가 있다.

11.File systems and directories : 파일과 디렉토리를 다루고 처리하고 어떤 유형이 있는지에 관해서 배우는 것 같다. 리눅스에서 파일과 디렉토리를 다루는 걸 배웠던 거로 기억한다. 기억나는 명령어가 몇개 없다. mkdir, rm.. Data structures 강의에서도 이 부분에 대해서 약간은 다룰 것 같다.

12.Information systems : 여기서는 정보를 다루고 정보체계가 어떻게 구성되어 있는지 배우는 것 같다. 또한 컴퓨터의 안전성, 정보의 안전성에 대해서도 배우는 것 같다. 전공과목에서는 다뤄보지않은 부분이라 생각된다. 관심이 생기는 단원이다.

13.Artificial intelligence : 이 단원에서는 인공지능이라는 흥미로운 주제를 다루는 것같다. 컴퓨터가 사람처럼 생각하고 행동하게 하는 것은 놀랍고 신기하다고 생각한다. 기계는 정해진 대로만 반응하지만 인공지능이 생기면 사람처럼 상황에 따라 대처방법이 달라진다. 이런 것을 C언어를 공부하면서 해본 것같다. 앞으로 배울 java에서도 여러 상황에 맞게 대처하는 프로그램을 만들게 될 거라 생각한다.

14.Simulation, graphics, gaming, and other applications : 여기서는 익숙한 단어들이 많이 보인다. 시뮬레이션, 그래픽, 게임, 그리고 어플리케이션. 특히 흥미로운 부분은 게임이다. 게임 그래픽을 디자인하고 게임을 프로그래밍하는 부분은 아주 흥미롭다. 이런 부분들이 모두 컴퓨터 언어를 이용해서 프로그래밍을 한다고 들은 것 같다. 즉 C언어, java등이 게임을 만드는 중요한 요소라는 것이 흥미로운 점이다.

15.Networks : 여기서는 네트워크, 프로토콜, 이런 단어들이 보인다. 인터넷과 관련된 단원이라고 생각된다. 이 부분은 중학교 혹은 고등학교때 컴퓨터 시간에 배웠던 것들로 기억한다.

16.The world wide web : 여기서는 인터넷할때 자주 보는 www에 관해 배우는 것 같다. 검색엔진, 블로그, 쿠키, HTML등과 같은 단어들은 자주 접하지만 정확히는 모르는 용어들이다. 배우고 싶은 단원이다. 어떤 전공과목과 관련이 있는지는 모르겠다.

17.Limitations of computing : 프로그래밍의 한계에 대해서 말하고 있는 것 같다. 기껏 열심히 배우고 있는 프로그래밍인데 한계라니 힘이 좀 빠진다. 이 단원에서 C언어라든지 java등과 같은 기계어의 한계에 대해서도 배울 것 같다.