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