[리눅스커널] 동기화 - 커널 프로세스 레이스 컨디션
By Guillermo Austin Kim | 2018년 10월 9일 |
이번에 커널 공간에서만 실행하는 커널 쓰레드에서 발생하는 Race를 확인합니다. 커널 쓰레드 중 많이 알려진 워커 쓰레드를 예를 듭시다. 이를 위해 다음 패치 코드를 적용할 필요가 있습니다.1 diff --git a/kernel/workqueue.c b/kernel/workqueue.c2 --- a/kernel/workqueue.c3 +++ b/kernel/workqueue.c4 @@ -2187,6 +2187,12 @@ static void process_scheduled_works(struct worker *worker)5 *6 * Return: 07 */8 +9 +static unsigned int global_func_exe_times = 0;10 +11 +extern void trace_f
[리눅스 커널] 유저 레벨 프로세스란
By Guillermo Austin Kim | 2018년 10월 15일 |
유저 레벨 프로세스에 대해 알아보기 전에 유저 모드가 무엇인지에 대해서 먼저 살펴봅시다. 우리가 라즈베리파이에서 바탕 화면에 있는 아이콘을 클릭해서 어떤 프로그램을 실행하고 있다고 가정합시다. 이 때 프로그램은 유저 모드나 커널 모드 중 하나로 동작합니다. ftrace 로그로 이 커널이 동작을 확인하면 정확히 유저 모드와 커널 모드를 자주 스위칭합니다. 유저 모드와 커널 모드로 나누는 기준은 무엇일까요? 이는 메모리 접근과 실행 권한으로 두 모드로 분류합니다. 실행 모드를 유저 모드와 커널 모드로 나누는 이유를 알기 위해 예를 들겠습니다. 어떤 시스템 메모리 공간을 0~4G까지 가상 메모리에서 연속으로 쓰고 있다고 가정합시다. 이 때 커널 코드와 전역 변수가 0~4G 메모리 구간에 메모리 주소로 매핑
리눅스에서 PDF 파일을 텍스트(txt) 파일로 변환
By 반달가면 | 2023년 1월 11일 |
리눅스에서 PDF 파일을 텍스트 파일로 변환하는 방법이다. 데비안/우분투 기준으로 poppler-utils 패키지에 포함된 pdftotext를 이용하면 된다. 만약 해당 패키지가 없다면 설치해 주면 되겠다. # S/W 저장소 정보 갱신 sudo apt-get update # 패키지 설치 sudo apt-get install poppler-utils 이제 변환을 해 보자. 예를 들어 my_text.pdf 파일을 텍스트 파일로 변환하여 my_text.txt로 저장하고 싶다면 아래와 같이 하면 된다. pdftotext my_text.pdf my_text.txt
[리눅스커널] 메모리관리/디버깅: kmalloc() 함수로 메모리 할당 후 슬랩 캐시 종류 확인하기
By Guillermo Austin Kim | 2019년 9월 3일 |
이번 소절에서는 가상주소를 물리주소로 변환하는 과정을 실습으로 알아봅시다. 3장 3.6 절에 소개한 rpi_debugfs.c 소스를 활용해 실습을 진행합니다. 먼저 rpi_debugfs.c 소스를 입력하고 커널 빌드를 하시기 바랍니다. 패치 코드 입력 방법 알아보기 먼저 입력할 패치 코드부터 소개합니다.[drivers/soc/bcm/rpi_debugfs.c] 01 static int rpi_kernel_debug_stat_set(void *data, u64 val)02 {03 int ret;04 05 raspbian_debug_state = (uint32_t)val;06 07 if ( raspbian_debug_state == 1402 ) {08 unsigned long ph