전체 글 144

Shared Memory (공유 메모리)

공유 메모리는 프로세스들 간에 필요한 데이터를 빠르고 쉽게 공유하기 위해 만들어진 방법이다. 이 공유 메모리를 통해 직접적으로 데이터 엑세스가 가능하기 때문에 여러 개의 프로세스가 데이터를 주고 받을 때에 이 공유 메모리를 사용한다. 공유 메모리를 사용하기 위해 C라이브러리에서는 다음과 같은 함수들을 제공한다. 1. shmget() : shared memory get synopsis - int shmget(key_t key, size_t size, int shmflg); 공유 메모리 키 값을 인자로 사용하여 공유 메모리의 ID값을 리턴한다. 2. shmat() : shared memory attach synopsis - void *shmat(int shmid, const void *shmaddr, int..

Backend/OS★ 2011.06.13

유용한 리눅스 명령어들.

.svn 디렉토리 삭제. svn export 안먹힐때 유용하게쓰임. find . -name .svn -exec rm -rf {} \; postgres 안될때 postgres사용중인 포트 있나 확인하고 모두 죽인다. 메시지큐 꽉 찼는지 확인 ipcs 메모리 사용량 proc/{PID}/status 에 대한 도움말. VmSize: 전체 할당된 가상 메모리의 크기 VmRSS: 실제 물리적 메모리가 할당된 크기 VmLck: 스왑아웃 될수 없는 메모리의 크기 VmData: Heap 영역 VmStk: Stack 영역 VmExe: 실행코드 영역 (전역변수 및 실행코드) VmLib: 동적으로 연결된 라이브러리 영역 실행중인 파일 디버깅 gdb, libexact.so 파일을 복사한다. export LD_LIBRARY_PA..

Backend/OS★ 2011.05.27

리눅스 커널 컴파일

리눅스 커널 컴파일을 해보았어요!! 우선 다음 사이트에서 리눅스 커널 소스를 다운받습니다. www.kernel.org 2.6.28 F 압축을 풀면.... tar xvfp linux-2.6.28.tar.bz2 다음과 같은 디렉토리가 생성됩니다. linux-2.6.28 아, 제 현재 버전은 다음과 같습니다. 현재 버전 알아보는 방법! # cat /proc/version Linux version 2.6.18-1.2798.fc6 (brewbuilder@hs20-bc2-3.build.redhat.com) (gcc version 4.1.1 20061011 (Red Hat 4.1.1-30)) #1 SMP Mon Oct 16 14:54:20 EDT 2006 # uname -r 2.6.18-1.2798.fc6 cd li..

Backend/OS★ 2011.05.27

valgrind

Valgrind : Linux-x86 용 실행 파일의 디버깅과 프로파일링을 위한 오픈 소스 툴. Valgrind는 Memcheck이나 Addrcheck 툴을 사용하여 실행중인 프로그램에서 메모리 누출(leak)/오염(corruption)을 찾아낼 수 있다. 그 외의 Cachegrind, Helgrind 툴을 사용하여 캐쉬 프로파일링을 하거나, 멀티 쓰레드에서의 데이타 경쟁을 발견을 할 수 있다. 64Bit Linux는 지원하지 않는다. Valgrind 에는 다음과 같이 다양한 툴들이 있다. 1. Memcheck - 초기화되지 않은 메모리의 사용 - free된 메모리에 읽기/쓰기를 시도하는 경우 - malloc된 메모리 블럭 외에 읽기/쓰기를 시도하는 경우 - stack의 부적절한 지역에 읽기/쓰기가 시도..

Backend/C 2011.05.26

gprof

gprof : 프로그램 수행시간동안 각 함수의 호출 횟수와 함수 호출시 진입에서 종료할때 까지 시간을 기록해 두고, 이 정보에 대한 통계를 제공하는 방식의 디버거이다. 사용법은 매우..간편하다 -_ - 심플한 사용법은 다음과 같다. ! 프로그램은 Makefile을 사용해 컴파일하지 않고 단순히 gcc를 사용해 컴파일하였다. Makefile 사용 시에도 아래와 같이 -pg옵션을 넣어주면 된다. 1. -pg 옵션을 넣어서 컴파일한다. [whitelka]$ gcc -o main main.c -pg 2. 생성된 파일을 실행한다. main main.c main.h main_profile sample.c url.txt [whitelka]$ ./main 3. 파일이 실행되면 gmon.out 이라는 파일이 생성된다. ..

Backend/C 2011.05.26

GDB

GDB란? GDB는 프로그램 실행동안 프로그램 내부에서 진행되고 있는 상황들을 Line by Line으로 훑어볼 수 있는 툴이다. GDB는 다음과 같은 일을 한다. 프로그램을 시작할때 프로그램의 행동에 영향을 줄수 있는 것을 지정할수 있다. 프로그램을 지정된 조건에서 멈추도록 만든다. 프로그램이 멈추었을때 무엇이 일어났는지를 시험할수 있다. 프로그램 내의 어떤것을 바꾸어서, 버그를 고칠수 있도록 테스트 할수 있다. C나 C++로 쓰여진 프로그램을 디버깅하기 위해 GDB를 사용할수 있다. 다음은 간단한 gdb 사용 예이다. ////////////////////////////////////////////////////////////////////////////////////// [whitelka]$ gdb ..

Backend/C 2011.05.26

시그널 (Signal)

* Signal - 특정 이벤트 발생시 프로세스에게 소프트웨어 인터럽트를 걸어줌으로써 알려준다. - 비동기적인 사건의 발생을 태스크에게 알리는 메커니즘 - 종류 : SIGKILL, SIGINT(DEL, Ctrl-C), SIGBUS, SIGUSR1.... - Task의 시그널 처리 방법 : 종료, 무시, 수행 중지, 시그널 처리 함수 수행 등. - 대부분의 시그널은 정상 종료(normal termination)가 일어남 - SIGABRT, SIGBUS, SIGSEGV, SIGQUIT, SIGILL, SIGTRAP, SIGSYS, SIGXCPU, SIGXFSZ, SIGFPE 시그널은 비정상종료(abnormal termination)을 발생시킴 *Signal의 생성 - 터미널에서 특수키를 누르는 경우(Ctrl..

Backend/OS★ 2011.05.26