게시판의 next 페이지와 prev 페이지 여부 확인... 방화벽 장비의 Log Data를 보여주는 게시판을 만들면서(사실 난 내부 함수와 쿼리만 담당하고 UI 작업은 다른 팀에서 지원 해주었지만), 참 난해한 부분이었다. 출력 개수 지정은 있지만 next버튼을 두는 시점에 대해서 말이다. 페이지 출력 개수 지정이 500개일때 limit절을 이용해서 query하는데, next 페이지의 경우 limit 500,500 과 같이 query하고, 그 다음페이지는 1000,500 하는 루틴이다. 그러다가 query 결과가 500개 미만인 경우 마지막 페이지로 인식하고 next 버튼을 비활성화 시키려 했지만..(참 단순..) 문제는 바로 발생했다. 만약 query에 대한 결과가 딱 500개이고, 501번째 데이터가..
임베디드 프로그래밍 C코드 최적화저자김유진 지음출판사한빛미디어 | 2008-02-29 출간카테고리컴퓨터/IT책소개최적화는 프로세서, 컴파일러, 사용할 수 있는 시스템 자원과 같... 팀의 고참으로부터 추천을 받고 구매하게 된 책, 얇고 작은 책이라 가볍게 읽을 수 있지만, 내용이 그리 가볍지만은 않습니다. 물론, 많은 경험과 지식이 있다면 화장실 책(?) 처럼 쉽게 읽을 수 있지만... 여튼, 책 내용은 두 사람의 대화로 흘러가고, 쉽게 할 수 있는 실수를 고치고, 코드를 어셈블로 비교해서 최적화 루틴을 일깨워 줍니다. 뭐랄까.. 한층 더 성능에 관련된 코드를 작성할 수 있는 팁이라고 해야되나.. 가벼운 책이지만, 배울것이 많은 책입니다. 추천 도서로 올려 봅니다^^
간단한 php Warning, 우선 코드상에 아래와 같은 구문을 찾아냅니다, $a = 5; $a[0] = 3 당연히 말도 안되게 쉬운 예로 들었지만, 코드가 길어지고 변수를 global 하게 사용하다 보면 종종 발생하는 실수입니다. (어쩌면 php 이기 때문에 발생하는 버그라는 생각도 듭니다, 왜냐하면 php는 왠지 모르게 뭐든 될것같은 .. 그런 느낌이 강해서일까..) scalar 와 array를 정확하게 구분지어 사용하는 버릇을 들이도록 합시다 :) 모든 코딩의 기본이고, 우리의 코드는 소중하니까요~
이름 그대로 pages를 Mbyte 단위로 return 하는 함수입니다. 일단 무식하게 산술 연산을 통해 pages를 Mbyte로 나타내봅시다, 예를 들어 pages가 4096이라 하면, 1 PAGE의 사이즈인 4096에 4096(bytes)를 곱하게 되면 byte 단위의 결과가 나오게 됩니다, 이를 Mbyte로 나타내려면, 결과에 /1024, /1024 두번을 통해 byte --> Kbyte --> Mbyte 연산을 해야될텐데 수식으로 나타내면 아래와 같습니다. (4096 * 4096)/1024/1024 = 16 MB 뭔가 연산이 많은데요, 그렇다면 오늘 알아보는 pages_to_mb는 내부적으로 어떤 동작을 보일까요? 함수 내용은 아래와 같습니다. static inline unsigned long p..
for_each_possible_cpu() 는 CPU(NR_CPUS)의 갯수만큼 루프를 도는 커널 매크로. (kernel 2.6 기준) #define for_each_possible_cpu(cpu) for_each_cpu_mask((cpu), cpu_possible_map) NR_CPUS는 Command-line option으로 제어가 가능하니 참고하도록 합시다. for_each_cpu_mask 내부는 아래와 같습니다. #if NR_CPUS > 1 #define for_each_cpu_mask(cpu, mask) \ for ((cpu) = first_cpu(mask); \ (cpu) < NR_CPUS; \ (cpu) = next_cpu((cpu), (mask))) #else /* NR_CPUS == 1 ..
dmesg는 커널에서 출력되는 메시지를 일정 수준 기록하는 버퍼입니다. 오늘은 이놈에 대해 조금 공부해봅시다, 특별한 기능 없어도, 아는것이 힘이니까. man page를 보면 아래와 같이 상당히 간략합니다. NAME dmesg - print or control the kernel ring buffer SYNOPSIS dmesg [ -c ] [ -n level ] [ -s bufsize ] DESCRIPTION dmesg is used to examine or control the kernel ring buffer. The program helps users to print out their bootup messages. Instead of copying the messages by hand, the us..
연속적이지 않은 메모리 공간을 사용할 수 있고, 물리 메모리의 크기와 관계없이 큰 주소 공간을 제공 받는 가상 메모리, vmalloc은 메모리의 어떤 영역을 차지하는지에 대한 궁금증이 생겼습니다. 우선 x86 System의 메모리 공간은 아래와 같이 나뉩니다 (절대적인 것은 아닙니다) ZONE_DMA 0~16M ZONE_NORMAL 16~896M ZONE_HIGHMEM 896 ~ end ZONE_NORMAL 영역이 896M까지인 이유는 vmalloc이 default 로 128M (상위 메모리 페이지 프레임을 매핑하기 위한 전용) 잡고 있기 때문, vmalloc을 kbyte단위로 너무 작게 설정할 경우 application영역의 메모리 size가 상대적으로 줄어 정상적인 kernel 부팅이 되지 않을수 있..
리눅스 커널 내부구조저자백승재, 최종무 지음출판사교학사 | 2008-09-20 출간카테고리컴퓨터/IT책소개이 책은 리눅스를 모르는 사람도 재미있게 읽을 수 있으며, 실습... 사수가 구매한 책으로 우연히 보게 된, "리눅스 커널 내부구조" 평소에 "리눅스 커널의 이해" 책만 보다가 두통이 사라지질 않았는데, 꽤 쉽게 풀이된 책입니다. (사실 그래도 제겐 좀 어렵네요;) 쉽게 접근하면 쉽게 알 수 있는 부분에 대해서 기본기를 다지기 좋고, 조금 더 커널과 친해질 수 있는 계기가 되길 바라며 ~ 추천합니다^^
ABS [anti-lock brake system] 요약 : 자동차가 급제동할 때 바퀴가 잠기는 현상을 방지하기 위해 개발된 특수 브레이크. 아직 Review도 올리지 않은 차에 ABS 점등이 꺼질 기미가 보이지 않는다, 오작동인지.. 아니면 정말 문제가 있는것인지.. 빨리 A/S 맡겨야지... Review는 그 다음에.. (검색을 해보니 나와 동일한 증상을 겪는 분들이 좀 있는듯 해서, A/S 맡길때 좀 말이 통할듯 싶다, 불행중 다행인가..)
기본적으로 mysql 유저 관리 Table은 "mysql" database에 user에서 관리됩니다. 자 그럼 일단 패스워드 변경을 위해 mysqld 데몬은 잠시 죽여(?)두고 mysql 을 접속합니다. 그리고 mysql DB를 선택하도록 합시다. mysql> use mysql; DB를 선택했으면 user Table을 잠깐 살펴봅니다 (뭐 대충 어떻게 생겼는지는 알아야 수정해도 개운할테니까) mysql> select user,password from user; 다른 필드는 지금 중요한것이 아니니, 당장 필요한것만 확인하도록 하고, 이제 변경할 user name을 확인했다면 변경하도록 합니다. (공백 입력은 no password 상태로 만듬) mysql> update user set password=pas..
max select max(column_name) as max from tables_name min select min(column_name) as min from tables_name sum select sum(column_name) as sum from tables_name avg select avg(column_name) as avg from tables_name as 구문이 없는 경우 결과를 나타내는 Column name은 default로 입력 받은 내용이 들어갑니다. 대략 아래와 같이.. +-------------------------+ | max(column_name) | +-------------------------+ | 4815716 | +-------------------------+ ..
의미 : 백과사전 ================================================================ 원격 프로시저 호출(Remote procedure call, RPC)은 컴퓨터 프로그램이 다른 주소 공간에서 원격 제어를 위한 프로그래머의 세세한 코딩 없이 함수나 프로시저의 실행을 허용하는 기술이다. 다시 말해, 프로그래머는 함수가 실행 프로그램에 로컬 위치에 있든 원격 위치에 있든 간에 반드시 동일한 코드를 짜게 된다. 어떠한 소프트웨어가 객체 지향의 원칙을 사용하여 프로그래밍 때, RPC는 원격 호출(remote invocation) 또는 원격 메소드 호출(remote method invocation)이라고 일컫는다. 가끔 ONC RPC와 DCE/RPC와 같은 비호환..
kernel 코딩을 하다보면 특정 process를 재워야(?)할 때가 반드시 있습니다. 반대로 재워 놓은 process를 깨워야 할 시점이 있을텐데, 이와 관련된 함수가 바로 sleep_on()과 wake_up() 입니다. 함수 형태를 살펴보면 아래와 같습니다. sleep_on void sleep_on(wait_queue_head_t *q) { wait_queue_t wait; init_waitqueue_entry(&wait, current); current->state = TASK_UNINTERRUPTIBLE; add_wait_queue(wq, &wait); /* wq는 대기 큐 머리를 가리킴 */ schedule(); remove_wait_queue(wq, &wait); } wake_up void w..
ssl 을 사용하는 Web Daemon, 요녀석에 대한 재미난 사실을 포스팅합니다. lighttpd Daemon이 사용하는 config file 를 살펴보면, 사용 가능한 cipher-list 부분이 있는데, 이를 살펴보면 아래와 같습니다, ( lighttpd version에 따라 다를 수 있습니다.) ssl.cipher-list = "DES-CBC3-SHA AES256-SHA" cipher-list는 lighttpd Daemon이 설치되어 있는 site에 Web 접속 시에 사용되는 cipher인데, 이것은 explorer version에 따라 유동적입니다. cipher-list를 없애거나, explorer에서 지원하지 않는 cipher로 설정할 경우 Web 접속이 되지 않는것을 확인 할 수 있습니다. ..
hash_hmac을 이용한 암호화, hash의 성격대로 복호화는 사실상 불가능입니다. 함수 설명을 간단히 살펴보면 "Generate a keyed hash value using the HMAC method" 자, 예를 들어봅시다. test라는 FILE에는 "1"만 기록되어 있고 이 파일을 hash_hmac_file()하면 87a7fa188c5f20be866a6de2eaba1ce71a6cf50 요런 값을 얻을 수 있습니다, 그렇다면 test라는 FILE에 2를 기록하고 hash_hmac_file()하게 되면? 26ae63ad577ee2071c66b09aab72f9247e76c743 전혀 다른 결과를 얻게 됩니다, hash_hmac_file()은 파일의 무결성을 검증하는데 사용되고.... 특정 문자열은 hm..
crontab 을 사용하여 특정 시간에 특정 명령어를 수행하도록 도와주는 Daemon 파일을 열어서 보면 위와 같은 형태이다, 탭이나 공백을 기준으로 총 6개의 필드가 존재하고, "분 | 시간 | 일 | 월 | 요일(0-6 0과7은 일요일, 1부터 월요일) | 명령" 형식으로 지정할 수 있습니다. */2 * * * * 명령 : 2분마다 명령을 실행한다는 의미 0 22 1-15 * * 명령 : 매월 1일부터 15일 동안 22시에 명령을 실행한다는 의미 0 22 */5 * * 명령 : 매월 5일 간격으로 실행한다는 의미 설정을 했다면 service restart를 실행하고 process number가 바뀌는것을 확인합니다. vim 등을 이용하지 않고 crontab -e 옵션으로 수정하게 되면 굳이 재시작 할..
- Total
- Today
- Yesterday