반응형

리눅스 16

리눅스 커널2.6 에서의 proc 생성

- 리눅스 소스파일 위치/Documentation/DocBook/procfs_example.c 위의 파일을 참고하면 된다. - 커널 2.4 와 비교하여 struct proc_dir_entry 의 멤버가 바뀌었다. ** 참고 ** - /proc/net 아래에 디렉토리나 파일 생성할 경우. - root 가 net 이 되며, 이때 net 디렉토리는, net/core/net_namespace.c 파일에 있는 init_net을 사용한다. struct net init_net; EXPORT_SYMBOL(init_net); 예) macro_root = proc_mkdir("macro", &init_net->proc_net);

리눅스 2010.09.16

IO 계열에서 time out 설정하기

* 상황 : 패킷을 받는 역할을 하는 쓰레드에서 recvfrom 함수 사용중, 종료 시그널을 받으면 프로그램을 종료시키기 위해 쓰레드를 종료하기 위함. * 문제 : 이때 read, readv, recv, recvfrom, recvmsg 등의 함수는 그냥 사용시 block 된다. 따라서 block을 피하기 위한 time out 이 필요함. -> write 계열도 마찬가지. * 해결 방법 1. SIGALRM 을 사용하여, read 계열 리턴시 errno == EINTR 인지 확인함. r 2. read 계열의 함수를 select 로 구현함. UNP v1. p.385 참고. 3. 소켓 옵션으로 타임아웃을 설정함. read계열 리턴시 errno == EWOULDBLOCK 으로 확인. UNP v1. p.210 * ..

리눅스 2010.04.16

Alarm Clock - 유닉스 계열에서 alarm signal 설정

리눅스, 유닉스에서 SIGALRM 을 설정하여 테스트를 해 봤는데, 리눅스에서는 signal함수가 잘 되었지만, 유닉스에서는 Alarm Clock 이라는 메시지가 나오면서 클락이 죽어버리고 프로그램이 종료되었다. 아래는 모든 유닉스계열에서 잘 돌아가도록 만들어진, UNP 책에 나온 시그널 함수다. 특히 SIGALRM을 전처리기를 이용하여 처리되도록 되었고, 리눅스, HP, SUN, AIX 테스트 해본 결과 이상없었다. #include void (*signal(int signo, void (*func)(int)))(int); typedef void Sigfunc(int); Sigfunc *Signal(int signo, Sigfunc *func); --------------------------------..

리눅스 2010.04.02

리눅스 2.6 에서의 proc을 이용한 성능데이터 확인

cpu : /proc/stat 에서 cpu 항목 가져와서 처리함. 단 5초 단위로 변화율을 계산하므로 5초 전의 항목을 메모리에 들고 있어야한다. → 2.4버전은 뒤 3개항목 빼고 계산하라!! memory 와 swap : /proc/meminfo 에서 항목을 가져와서 kb로 만든다. page in out : /proc/stat 에서 cpu항목 아래 page 항목이 있다. 여기에 없다면 /proc/vmstat 을 본다. network : /proc/net/dev 에서 가져온다. process 정보 : /proc/pid/stat → 2.4버전 확인 필요!! user : uid 가지고서 getpwuid() 함수 사용 pid : 1번 항목 vsg : 23번 항목. 바이트 이므로 kb로 변환 필요 comm : 2..

리눅스 2010.02.04
반응형