전체 글 128

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.12.09

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.12.09

Linux Memory 관리

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

Linux_system 2022.12.09

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.12.09

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.12.09

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.12.09

User ID/Group ID

ls -l 로 출력 되는 항목을 보면 , 다음과 같이 카테고리를 나눌 수 있다. ben@ben-ubuntu-server:~/share/apue_github/apue/ben$ ls -l total 180 -rw-rw-r-- 1 ben ben 21 Jun 15 08:14 data -rwxrwxr-x 1 ben ben 17632 Jun 17 02:26 fig1_3 -rw-rw-r-- 1 ben ben 397 Jun 15 07:21 fig1_3.c 1) 파일 유형. '-' 는 일반파일, 'd'는 디렉토리, 'b' 는 블록 디바이스, 'c'는 문자 디바이스, 'I'는 링크를 뜻한다. 2) 허가권 'r' 은 read able , 'w' 는 write able , 'x' sms execute able 이다. 3자리씩..

Linux_system 2022.12.09

POSIX.1 이 뭐지?

OSIX (Portable Operating System Interface) 1003.1 operating system interface standard 만약 어떤 운영체제가 "POSIX compliant" 하다면, 반드시 제공해야 하는 service 들을 정의 한것이 1003.1 operating system interface standard 이다. 대부분의 computer vendor 들이 이 standard 를 채용 했다 해당 문서는 계속 진화해 왔다. IEEE Standard 1003.1-1988 IEEE Standard 1003.1-1990 (Insternational Standard ISO/IEC 9945-1:1990) 이 1003.1-1990을 일반적으로 POSIX.1 이라고 한다.

Linux_system 2022.12.09

netplan 고정 IP 설정시, 서브넷 마스크 작성법

netmask 255.255.255.0 게 어떻게 24가 되는가? netmask 를 모두 2진수로 변경한 다음 , 왼쪽에서 부터 1이 모두 몇개인지 쓴다. 예) 255.255.255.0 = 11111111.11111111.11111111.00000000 = 8 + 8 + 8 + 0 = 24 255.255.254.0 = 11111111.11111111.11111110.0 = 8+8+7+0 = 23 ## 참조 ## netplan 설정하는 방법: https://blog.dalso.org/article/ubuntu-20-04-lts-nework Ubuntu 20.04 LTS 네트워크 연결하기.(고정IP 할당) - 달소씨의 하루 Connection failed Activation of network connect..

Linux_system 2022.12.09

C/C++ 에서 실행 시간을 측정하는 8가지 방법

https://levelup.gitconnected.com/8-ways-to-measure-execution-time-in-c-c-48634458d0f9 8 Ways to Measure Execution Time in C/C++ Unfortunately, there isn’t a one-size-fits-all solution. Here you will find some of the available options. levelup.gitconnected.com 참조는 위와 같으며, 혹시 page 가 삭제될 경우를 대비하여, 코드를 다시 복사 함 #include #include int main () { double sum = 0; double add = 1; // Start measuring time au..

Linux_system 2022.12.09