일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- performance
- rocksdb
- USENIX
- FTL
- core dumped
- github
- ssd
- 시스템 소프트웨어
- hardware
- kernel
- 시스템 프로그래밍
- Samsung
- 커널 프로그래밍
- Machine Learning
- 포트 번호 변경
- memory
- Flash Memory
- software
- framework
- linux
- Operating System
- Intel
- 키워드
- Cache
- overflow
- storage system
- deep learning
- Git
- Today
- Total
목록Kernel & Linux programming with C Lang (7)
Happy to visit my research note ^^
Linux Kernel 개발에 도움되는 라이브러리들을 정리하는 글을 쓰게 되었습니다. " glib.h 라이브러리 " glib.h 헤더파일은 GLib 라이브러리를 사용하기 위해 필요한 헤더파일이다. GLib은 C 언어를 사용하는 개발자들이 자료구조와 관련된 기능들을 쉽게 구현할 수 있도록 도와주는 라이브러리이다. Glib.h 헤더파일 안에는 대표적인 자료구조들과 관련된 함수들이 포함되어 있다. 예를들면 .. 1. GArray : 동적 배열을 구현하기 위한 자료구조이다. #include GArray* array = g_array_new(FALSE, FALSE, sizeof(int)); ' g_array_new '함수는 새로운 ' GArray ' 구조체를 생성하고 초기화하는 함수이다. ' GArray '는 동..
저자는 linux kernel에서 각 layer간의 latency를 측정할 때, printf 혹은 printk로 인한 overhead를 최대한 출이기 위해 buffer에 기록 후 일정 크기가 차면 지정 file로 log들을 flush해주는 프로그래밍을 하였다. 모든 연구에서는 성능을 개발하기 전에 정확한 측정이 먼저 되어야하는 것과 같이 최대한 각 성능에서만 소모되는 시간을 측정하기위해 노력했다. 그 과정 속에서 썼던 파일 입출력에 대해 작성해보겠다. " 파일 입출력 " C Lang 측 linux에서 사용하는 파일 입출력은 stdio.h 헤더파일에 정의되어 있으며, fopen, fwrite, fread, fclose 등을 이용하여 파일을 생성, 읽고 쓰고 닫을 수 있다. FILE *fopen (const..
" stdarg.h 헤더파일에 있는 기능들 " stdarg.h 헤더파일에는 va_list, va_start(), va_end()가 정의되어있는데 해당 함수와 구조체는 stdarg.h 해더 파일에서 정의되는 @가변 인자 함수를 사용하기 위한 메크로와 타입이다. @ 가변 인자 함수란 매개 변수의 개수가 정해져 있지 않고 호출될 때마다 다른 개수의 인자를 받을 수 있는 함수를 의미한다. 가변 인자 함수는 va_start, va_arg, va_copy, va_end와 같은 매크로를 사용하여 가변 인자를 처리한다. va_start 매크로는 가변 인자 목록에서 첫 번째 가변 인자를 가리키는 포인터를 초기화하고, va_arg 매크로는 다음 가변 인자를 가져온다. 예를 들어 printf 함수는 가변 인자 함수의 대표적..
kernel에서 함수를 정의할 때 static 키워드를 사용하는 경우가 많은 이유는 크게 두 가지로 나누어본다. 첫째, static 함수는 컴파일러에 의해 해당 함수가 선언된 파일내에서만 사용 가능하도록 제한된다. 따라서, 다른 파일에서 해당 함수를 호출하는 것을 방지할 수 있다. 이것은 global namespace를 오염시키지 않아서 code maintenance 와 stability를 향상시킬 수 있다. 둘째, static 함수는 다른 파일에서 호출되지 않으므로, 함수 호출 시 발생하는 오버헤드가 없어져서 실행 시간이 빨라질 수 있다. 이는 특히 커널 내에서 자주 호출되는 함수에서 유용하다. 고로! static 키워드를 사용하여 함수를 정의하는 것은 compiler optimization 과 cod..
kernel에 대한 간략한 소개를 하자면, kernel은 운영체제의 핵심 부분으로, 하드웨어와 소프트웨어 간의 interface 역할을 한다. kernel은 컴퓨터 resource를 관리하고 응용 프로그램이 application이 하드웨어를 직접 제어하는 것을 마고, 시스템 resource에 대한 효율적인 접근을 가능하게 한다. 또한, kernel은 사용자와 하드웨어 간의 상호작용을 처리하며, 시스템의 안정성과 보안을 유지하기 위한 여러 기능을 제공한다. 즉, 운영체제의 핵심이라고 할 수 있습니다. 이러한 kernel을 개발을 할 때 사용되는 알아두면 편리한 각 keyword에 대해 이번 글에서 알아볼까 합니다. " inline keyword " W(저자)가 사용하는 c lang에서 inline 키워드는..
상위 레이어와 하위 레이어 함수 간에 코드를 공유하는 방법으로는 공통으로 사용하는 구조체나 함수들을 헤더 파일에 정의해서 include하는 방법을 사용한다. 이것을 통해 여러 파일에서 공유하는 코드를 중복해서 작성하지 않고도 간편하게 사용할 수 있다. 또한, 공유하는 코드가 많고 복잡한 경우에는 독립적인 모듈로 작성하고 이를 다른 파일에서 include해서 사용할 수도 있다. 이렇게 모듈화된 코드는 유지 보수 및 관리가 편하고, 재사용성도 높아지는 결과를 얻을 수 있다. W(`나`)는 kernel에서 callpath를 분석하여 각 레이어간의 code execution latency를 분석하기 위해 이 방법을 사용한다. 예시 코드 틀 #ifndef SHARED_H #define SHARED_H ... ....
sprintf와 printk는 모두 문자열을 출력하는 함수입니다. 그러나 둘은 매우 다른 용도로 사용됩니다. sprintf 함수는 문자열을 생성하여 버퍼에 저장하는 역할을 합니다. 버퍼는 메모리에 할당되어 있어야 하며, 생성된 문자열은 이후 프로그램에서 필요한 곳에서 사용될 수 있습니다. sprintf 함수는 메모리 할당과 해제, 문자열 생성 등을 처리하기 때문에 시스템 오버헤드가 발생할 수 있습니다. 반면에 printk 함수는 커널 디버깅에 사용되는 함수입니다. 따라서 printk는 커널 공간에서만 사용할 수 있으며, 사용 시에는 커널 모듈의 로그에 출력됩니다. printk 함수는 메모리 할당이나 해제 없이 출력을 수행하며, 장치 드라이버나 커널 모듈 개발 시 디버깅 목적으로 매우 유용합니다. 따라서,..