[리눅스커널] 시그널: 유저 공간에서 pause() 함수 호출 시 커널 실행 흐름 파악하기
By Guillermo Austin Kim | 2019년 6월 22일 |
유저 공간에서 pause() 함수를 호출하면 커널 공간에서 어떤 함수가 실행할까요? 다음 시그널 설정 흐름도에서 가장 하단에 표시된 박스를 확인합시다. [그림 ] 유저 공간에서 pause() 함수 호출 시 실행 흐름도 pause() 함수는 시그널을 기다릴 때 호출합니다. 라즈베리파이에서 다음 명령어를 입력해 pause 명령어에 대한 매뉴얼을 확인합시다. root@raspberrypi:/home/pi# info pausePAUSE(2) Linux Programmer's Manual PAUSE(2)NAME top pause - wait for signal 매뉴얼에서 출력하는 결과와 같이 시그널을 기다리는 역할을 수행합니다
[리눅스커널] 메모리: kcalloc() 함수와 kmalloc_array() 함수의 차이점
By Guillermo Austin Kim | 2021년 6월 9일 |
kcalloc() 함수는 어떤 역할을 수행할까요? 구현부를 보겠습니다. inline void *kcalloc(size_t n, size_t size, gfp_t flags){ return kmalloc_array(n, size, flags | __GFP_ZERO);} kcalloc() 함수를 보니 자신에게 전달된 인자를 kmalloc_array() 함수에 그대로 전달하는데,마지막 인자의 속성을 변경합니다. flags에 __GFP_ZERO 플래그와 OR 비트 연산을 한 결과를 마지막 인자로 전달하는 것입니다. kmalloc_array() 함수를 호출해 메모리를 할당할 때 0으로 초기화해 달라는 의미죠. 이 점만 빼면 kcalloc() 함수는 kmalloc_array() 함수와 같은 역할을 수행합니다.
[리눅스커널] CPU 코어의 주파수(Frequency) 확인하기 - cpufreq_cpu_data
By Guillermo Austin Kim | 2020년 5월 14일 |
리눅스 커널에서 CPU Frequency는 성능을 측정할 때 중요한 척도 중 하나입니다.이번 시간에는 리눅스 커널에서 CPU Frequency와 관련된 자료 구조를 소개합니다. cpufreq_cpu_data 선언부 cpufreq_cpu_data는 커널에서 CPU 주파수를 저장하는 중요한 변수입니다. 먼저 cpufreq_cpu_data 변수의 선언부를 봅시다. DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data); 보시다시피 DEFINE_PER_CPU 키워드와 함께 cpufreq_policy 구조체로 선언된 변수임을 알 수 있습니다.즉, CPU 코어 별로 cpufreq_policy 구조체의 정보를 cpufreq_cpu_data 변수가 저장하는 것입니다
[리눅스커널] 시간관리: jiffies란 무엇인가
By Guillermo Austin Kim | 2019년 8월 1일 |
jiffies란 많은 리눅스 커널 세부 함수에서 jiffies를 써서 실행 시간 기준으로 알고리즘을 제어합니다. 이번 시간에 jiffies의 개념을 소개하고 리눅스 커널에서 jiffies로 시간의 흐름을 제어하는 코드를 소개합니다. jiffies 소개jiffies는 커널 타이머를 실행하는 시간 단위입니다. 공학 용어로 Resolution와 비슷한 개념입니다. jiffies를 지피스라고도 부르기도 합니다. 하지만 이번 챕터에서 리눅스 커널에서 쓰는 jiffies란 용어를 그대로 쓰겠습니다. HZ란 무엇일까 jiffies 개념을 이해하려면 HZ가 무엇인지 알아야 합니다. HZ는 무엇일까요? HZ는 진동수라고 부르며 1초에 지피스(jiffies)가 업데이트되는 횟수이다. 만약 HZ가 300이면 지피