[리눅스] 리눅스 시스템에서 메모리가 부족할 때
By Guillermo Austin Kim | 2019년 1월 10일 |
OOM의 기본적인 원인은 간단합니다. 즉, 여러분은 사용 가능한 가상 메모리 공간보다 더 많은 것을 요구했을 것입니다.여기서 "가상"이라고 말한 이유는 RAM이 free 메모리로 계산되는 유일한 공간이 아니며 어떠한 스왑 영역도 해당되기 때문입니다. OOM 조사하기 OOM 조사를 시작하기 위해 먼저 대량의 메모리 블록을 할당하는 아래의 코드를 입력하고 실행시킵니다: #include <stdio.h>#include <stdlib.h> #define MEGABYTE 1024*1024 int main(int argc, char *argv[]){ void *myblock = NULL; int count = 0; while (1)
csvtool - 리눅스에서 CSV 파일 처리
By 반달가면 | 2021년 3월 15일 |
csvtool은 리눅스에서 CSV(comma-separated values) 형식의 파일을 처리할 때 유용한 명령어 기반 프로그램이다. CSV 파일은 쉼표(,)를 구분자로 사용하는데, csvtool을 이용해서 특정 항목(column)을 출력하거나 구분자를 변경할 수 있다. 우선 터미널창에서 아래와 같이 작업하여 설치했다. 데비안/우분투 계열 배포판 기준이다. # S/W 저장소 정보 갱신 sudo apt-get update # csvtool 설치 sudo apt-get install csvtool 도움말을 보려면 --help 옵션을 지정하면 된다. # 도움말 표시 csvtool --help 기본적인 사용법은 아래의 예시를 보면 감이 잡힐 것이다. # input.csv
[리눅스커널] 프로세스는 어떻게 생성하나? - _do_fork() 함수 호출
By Guillermo Austin Kim | 2018년 10월 21일 |
프로세스에 대한 이해를 하려면 프로세스가 어떻게 생성되는 지 알면 좋습니다. 프로세스 생성 과정에서 프로세스를 관리하는 자료구조 관계를 알 수 있기 때문입니다. 리눅스에서 구동되는 프로세스는 크게 유저 레벨에서 생성된 프로세스와 커널 레벨에서 생성된 프로세스가 있습니다. 유저 레벨에서 생성된 프로세스는 유저 공간에서 프로세스를 생성하는 라이브러리(glibc) 도움을 받아 커널에게 프로세스 생성 요청을 합니다. 커널 프로세스는 kthread_create() 함수를 호출해서 커널 내부에서 프로세스를 생성합니다. 커널 프로세스는 커널 스레드라고 부르며 커널 내부에서 스레드를 직접 관리합니다. 공통으로 리눅스에서 생성된 프로세스는 _do_fork() 함수를 호출합니다. 프로세스 생성하는 핵심함수는 _do_
[라즈베리파이] 커널 타이머 -동적 타이머는 누가 언제 호출하나? (2)
By Guillermo Austin Kim | 2018년 8월 27일 |
커널 타이머는 타이머 인터럽트가 발생 후 동작을 시작합니다. 다음 그림은 커널 시스템 타이머 전체 흐름도 중 1단계 부분입니다. [그림] 커널 타이머 전체 흐름도 1단계 타이머 인터럽트가 발생하면 인터럽트 핸들러 함수인 arch_timer_handler_phys() 가 실행하고 HZ (100)만큼 jiffies를 증감시키는 tich_sched_timer() 함수를 호출합니다. 이후 update_process_times() 함수를 호출하고 나서 run_local_timers() 함수가 run_local_timers() 함수를 호출합니다. 먼저 update_process_times() 함수를 봅시다.1 void update_process_times(int user_tick)2 {3struct ta