Linux_system 51

apue.3e 컴파일 하기

Advanced Programming in the UNIX Environment Thrd Edition 의 예제를 compile 하려면 다음과 같이 하면 된다. Source code download : https://github.com/vdpa4me/apue.git vdpa4me/apue Example of Advanced Programming in the UNIX Environment - vdpa4me/apue github.com /apue/apue.3e/lib 로 이동한다. Makefile 을 editor 로 열어서, 아래 부분을 수정한다. PLATFORM=$(shell $(ROOT)/systype.sh) 부분을 PLATFORM=linux 로 변경한다. (systype.sh 실행시 permission..

Linux_system 2022.08.19

Linux , caller (호출자) 가 누구인지 아는 방법

어떤 함수 a() 가 다양한 프로세스에 의에 빈번하게 호출 된다면, log 로 남길 때, 누가 본인을 호출 했는지 확인 하고자 하는 경우가 있다. 실험 환경은 Ubuntu Linux 5.3.1 계열의 x86_64 아키텍쳐 이다. backtrac 를 사용하는 예) #include #include #include #include int nptrs; void *buffer[BT_BUF_SIZE]; char **strings; nptrs = backtrace(buffer, BT_BUF_SIZE); rintf("backtrace() returned %d addresses\n", nptrs); strings = backtrace_symbols(buffer, nptrs); if (strings == NULL) { p..

Linux_system 2022.08.19

Linux 가상 메모리의 응용 #1 - file map

가상 메모리의 응용 파일 맵(file map) 일반적으로 프로세스가 파일에 접근할 때는 파일을 연 뒤에 'read()', 'write()', 'lseek()' 등의 시스템 콜을 사용한다. 뿐만 아니라 Linux에는 파일의 영역을 가상 주소 공간에 메모리 매핑하는 기능이 있다. mmap() 함수를 특정한 방법으로 호출하면 , 파일의 내용을 메모리에 읽어 들여 그 영역을 가상 주소 공간에 매핑할 수 있다. testfile 은 "hello" 라는 text를 담고 있는 file 이다. 다음 코드를 작성하고 실행하면 , 아래와 같이 file을 읽어 들이고 mmap() 함수를 통해 file mapping 을 하면, 파일의 내용을 메모리에 읽어 들여 그 영역을 가상 주소 공간에 매핑 할 수 있다. int fd; fd..

Linux_system 2022.08.19

Linux Memory 관리

>free free명령어 사용으로, 시스템의 총 메모리의 양과 , 사용 중인 메모리의 양을 알 수 있다. 모든 단위는 KB 임 total : 시스템에 탑재된 전체 메모리 용량임. 위 예시에서는 16GB 임 free : 표기상 이용하지 않는 메모리 buff/cache : 버퍼 캐시 또는 페이지 캐시가 이용하는 메모리. 시스템의 빈 메모리 (free) 가 부족하면 커널이 해제함 available : 실질적으로 사용 가능한 메모리. free 필드값의 메모리가 부족하면 해제되는 커널 내의 메모리 영역 사이즈를 더한 값이다. 해제될 수 있는 메모리에는 버퍼 캐시나 페이지 캐시의 대부분 혹은 다른 커널 내의 메모리 일부가 포함된다. >sar -r 1 1초 단위로 메모리에 관련된 통계 정보를 얻을 수 있다. free..

Linux_system 2022.08.19

sar : 프로세스(CPU core) 가 어떤 mode 로 작업 중인가?

설치: >sudo apt-get install sysstat 각 CPU core가 어떤 종류의 처리를 싱행하고 있는지 1초 단위로 측정함 >sar -P ALL 1 중간에 Ctrl+c 를 누르면, 평균 값이 저장 되며, sar은 종료 됨. %user + %nice : user 프로세스 %system : kernel 프로세스 >sar -P ALL 1 1 1초마다 1회만 출력 하도록 하기 무한 loop을 도는 loop 을 background로 실행하고, sar 출력 >./loop & >sar -P ALL 1 1 1초 동안 core 6 가 100% user 프로세스로 동작함 >kill 9082 //loop 를 죽인다. 이번에는 user 프로세스와 kernel 프로세스를 적당이 섞어 쓰도록 다음과 같은 코드를 작..

Linux_system 2022.08.19

strace : 어떠한 system call 이 호출되었는가?

//hello.c #include int main(void) { puts("hello world"); return 0; } >gcc -o hello ./hello.c >strace -o hello.log ./hello >cat hello.log printf("hello world %s\n","Man"); 각종 system call 처리에 걸린 시간을 microsecond 단위로 정밀하가 측정하여 보여 준다. >strace -T -o hello.log ./hello "hello world\n" 문자 처리에 32 microsecond 가 걸렸음을 알 수 있다. 출처 : 실습과 그림으로 배우는 리눅스 구조 , 다케우치 사토루저

Linux_system 2022.08.19

이 분야의 필독서 / 필독 사이트

books System Programming Advanced Programming in the UNIX Environment (APUE) 인사이드 안드로이드 리눅스 커널 심층분석(로버트러브) 리눅스 커널의 이해 (다니엘 보베이) Linux Device Driver Linux Device Drivers, Third Edition [LWN.net] This is the web site for the Third Edition of Linux Device Drivers, by Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman. For the moment, only the finished PDF files are available; we do intend t..

Linux_system 2022.08.19

size_t 와 string::size_type

size_t 는 또는 std에 정의 되어 있다. sizeof() 함수의 return 형 이다. unsigned 데이터 타입으로, 장비가 32bit 이라면, 32bit 으로 표현 가능한 가장 큰 수 장비가 64bit 이라면, 64bit 으로 표현 가능한 가장 큰 수 를 담을 수 있다. string::size_type string.size() 함수의 return 형 이다. string 이 담을 수 있는 최대 문자 개수를 저장할 수 있는 데이터 타입. 역시 장비가 지원하는 가장 큰 값을 담을 수 있다.

Linux_system 2022.08.19

MMIO (Memory-mapped I/O)

CPU가 입출력 장치를 access 할 때, 입출력과 메모리의 주소 공간을 분리하지 않고 하나의 메모리 공간에 취급하여 배치하는 방식을 말함. 전체 메모리의 주소공간에 입출력 장치의 메모리나 레지스터를 메모리로 취급하여 전체 메모리의 일부분으로 특정 영역에 할당하여 배치하는 방식이다. 입출력 장치의 메모리 주소가 나뉘어 있지 않기 때문에 access할 때는 메모리와 같은 주소공간 이므로 같은 기계어 코드로 수행한다.

Linux_system 2022.08.19