의미 : 백과사전 ================================================================ 원격 프로시저 호출(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 옵션으로 수정하게 되면 굳이 재시작 할..
일반적인 프로그램의 표준출력은 현재 자신의 sh에 해당됩니다, sh은 리눅스 프로그램에 로그인 할때마다 새로운 PID를 갖고 시작되기 때문에, 현재의 sh이 아닌 곳에서 실행되는 결과는 출력이 되지 않습니다. 예를 들어, 아래와 같이 ping을 background 로 동작 시켰다고 보면, $ ping 168.126.63.1 &이 상태에서 계정을 로그아웃 하고 다시 콘솔에 접속하게 되면 ping에 대한 출력은 더 이상 보이지 않게 됩니다. 위에서 언급한대로 새로운 PID를 갖는 sh로 접속이 되었고 ping의 출력은 이전 PID의 sh에 출력을 하고 있기 때문인데요. 다른 예를 살펴봅시다. process내에서 실행되는 system 함수는 새로운 sh에 출력을 합니다. 무슨말인고 하니, 특정 프로그램에서 s..
shell(#mode)에서 간단하게 명령어를 통해 테스트를 진행하면서 "/dev/null 2>&1"의 의미를 알아봅니다.아래 명령어는 표준 출력을 /dev/null로 redirection 하라는 의미로 표준출력을 버리라는 의미입니다. $ rm test > /dev/null 하지만, test라는 file이 존재하지 않는 경우 아래와 같은 표준에러가 출력됩니다. $ rm test > /dev/null rm: cannot remove 'test': No such file or directory 방금 언급했지만, 이것은 "표준출력"이 아닌 "표준에러"이기 때문에 화면에 출력이 된것입니다. 다시 강조하면 위에 예제는 /dev/null 로 redirection 을 통해 화면 출력을 하지 않는것은 표준출력에 한해서 ..
Bandwidth 측정 tool인 iperf compile시에 아래와 같은 오류를 만날 때가 있습니다, 사실.. 포스팅 할 내용도 아니지만.. 혹시라도 검색의 힘을 빌리는 개발자가 있다면.. 약간의 도움이라도 주고자 포스팅...! 오류 내용은 아래와 같습니다. [root@app32 iperf-2.0.4]$ make make all-recursive make[1]: Entering directory `/root/app/iperf/iperf-2.0.4' Making all in compat make[2]: Entering directory `/root/app/iperf/iperf-2.0.4/compat' make[2]: `all'를 위해 할 일이 없습니다 make[2]: Leaving directory `/..
시스템 운영 중에 메모리 할당이 실패하면 kernel은 OOM killer에서 다른 process를 죽여 메모리를 확보합니다. 이때 아무 process나 종료시키는것이 아니라 각 process마다 점수를 매겨 가장 적합한(?) process를 죽이게 되는데 이 점수를 매기는것은 아래와 같습니다, (mm/oom_kill.c) /** * badness - calculate a numeric value for how bad this task has been * @p: task struct of which task we should calculate * @uptime: current uptime in seconds * * The formula used is relatively simple and document..
pid의 사전적 의미는 프로세스 인식자(Process identifier)로서 프로세스가 실행 될 때에 붙여지는 번호인데요, 그렇다면 이 pid의 최대값은 어떻게 결정될까요? 우선 kernel source를 살펴보면, kernel code 내부에 아래와 같이 pid_max값을 proc으로 남기도록 명시되어 있습니다. (linux kernel 2.6.20 version) .ctl_name = KERN_PIDMAX, .procname = "pid_max", .data = &pid_max, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec_minmax, .strategy = sysctl_intvec, .extra1 = &pid_max_m..
[kthreadd] : 커널 스레드를 생성한다, 모든 커널 스레드의 부모가 된다. [migration/0] : 프로세서 사이에서 프로세스들을 이주시켜주는 CPU에 각각 존재하는 커널 스레드 [ksoftirqd/0] : tasklet(소작업)을 실행한다. –(softirq, tasklet) [watchdog/0] : 하드웨어 watchdog뿐만아니라 소프트웨어 watchdog도 포함한다. 시스템이 비정상적으로 동작시, 끄고 재부팅한다. [events/0] : (keventd) : keventd_wq 작업 큐(workqueue)에 있는 함수들을 수행. –(워크큐) [khelper] : 커널의 일부.. [kblockd/0] : kblockd_workqueue 작업 큐에 있는 함수를 수행한다.–(워크큐) 블록 ..
리눅스의 메모리 메커니즘은 application에서 메모리를 사용하고 반환할 때에 바로 소진되지 않고, cache되어 있다, 그리고 cache를 재사용하는것이 리눅스의 기본적인 동작인데, 강제로 cache를 비우는 방법을 알아봅니다. 우선 cache는 /proc/sys/vm/drop_caches 경로에 있고, 이 경로에 1~3의 값 입력을 통해 cache가 비워지게 됩니다. 그렇다면 각 number에 대한 의미를 알아봅니다. 1 : To free pagecache 2: To free dentries and inodes 3: To free pagecache, dentries and inodes This is a non-destructive operation and will only free things t..
회선 대역폭을 측정하기 위한 툴로 다양햔 open-source가 존재합니다. 이번 포스팅은 그 중 가장 강력한(?) 툴인 iperf를 설명하고자 합니다 (굉장히 주관적인 생각). 우선 source는 여기에서 다운 받고 compile은 README에 있는 내용처럼, ./configure -- configure for your machine make -- compile Iperf 두가지만 해주면 됩니다. 간단하지 않은가요? compile 이 완료되었으면 회선 대역폭을 측정하고자 하는 장비(혹은PC)에 compile의 결과물인 iperf를 넣어주기만 하면 준비는 끝입니다. 이제 옵션을 알아 볼텐데, document 보다 더한 설명이 어디있을까요, 우선 document 를 참조합니다, 자세하게 옵션에 대해 설명..
보통 구조체의 사이즈라 하면 구조체 내에 선언되어 있는 모든 변수의 총합을 TOTAL로 여깁니다. 얼핏 보면 당연한 결과지만, 컴파일러는 그렇게 못합니다. 이는 컴파일러 내에서 구조체 관련 루틴을 수행할 때에 좀 더 빠른 연산을 위함인데, 그렇다면 어떻게 다른지 알아봅니다.#include typedef struct test{ int a; long c; char b; char d:1, e:1, f:1, g:2, i:1, k:1; long h; } test; int main(void) { test k; k.g=1; // printf("a:%d \n",k.g); printf("size : %d\n",sizeof(k)); return 0; } 간단한 코드입니다, test struct의 사이즈는 얼마일까요? 64..
pthread_cond_wait는 thread를 휴먼 상태로 만듭니다(해당 라인에서 thread의 동작이 멈추는 상태). 이 말은, 일종의 sleep 상태라고 생각해도 되는데, 휴먼 상태에 빠져 있는 이 thread는 다른 thread에서 pthread_cond_signal을 이용해서 깨웁니다 (깨워지게 되면, 그때 부터 pthread_cond_wait 의 다음 라인 코드가 실행됩니다). 그렇다면 다수의 pthread_cond_wait가 존재한다면, pthread_cond_signal은 어떤 pthread_cond_wait를 깨울까요? 답은 아래 있습니다. 일단 함수 생김새를 살펴보면 아래와 같고, int pthread_cond_signal(pthread_cond_t *cond); int pthread_..
자주 사용할 일이 없다보니.. 자주 잊고 구글링을 통해 정보를 얻게 되는데 이번 포스팅을 통해 구글링이 아닌 블로그를 통해 정보를 얻어야겠습니다, mysql 접속 mysql -u 유저 -p 패스워드 db 목록 확인 show databases; 특정 db 사용 use databases; 테이블 목록 확인 show tables; 테이블 상태 체크 check tables 테이블명 테이블 repair repair tables 테이블명 테이블 구조보기 desc 테이블명 테이블 내용 전체보기 select * from 테이블명 테이블의 특정 필드 보기 ( 콤마로 필드 구분, 또한 where 연산 가능) select 필드1,필드2 from 테이블명 특정 테이블 내용을 파일로 select * from 테이블명 into ..
우선 정보통신표준위원회를 참고해보면 2010-12-23 제개정일로 DTLS에 대한 정의가 담겨 있습니다, 출처 : http://www.tta.or.kr/index.jsp 표준번호 : TTAE.IF-RFC4347 제개정일 : 2010-12-23 한글 표준명 : 데이터그램 전송계층 보안 (DTLS) 프로토콜 영문 표준명 : Datagram Transport Layer Security 한글 내용요약 : DTLS 프로토콜은 데이터그램 프로토콜을 위한 통신 프라이버시를 제공한다. 이 프로토콜은 클라이언트/서버 응용 프로그램이 통신하는 과정에서 도청, 간섭, 위조를 방지하기 위해서 설계되었다. DTLS 프로토콜은 전송 계층 보안(TLS) 프로토콜에 바탕을 두고 있으며 동등한 안전성을 보장한다. 기초적인 전송의 데이..
- Total
- Today
- Yesterday