Posts
556 posts[리눅스 커널] 유저 레벨 프로세스란
유저 레벨 프로세스에 대해 알아보기 전에 유저 모드가 무엇인지에 대해서 먼저 살펴봅시다. 우리가 라즈베리파이에서 바탕 화면에 있는 아이콘을 클릭해서 어떤 프로그램을 실행하고 있다고 가정합시다. 이 때 프로그램은 유저 모드나 커널 모드 중 하나로 동작합니다. ftrace 로그로 이 커널이 동작을 확인하면 정확히 유저 모드와 커널 모드를 자주 스위칭합니다. 유저 모드와 커널 모드로 나누는 기준은 무엇일까요? 이는 메모리 접근과 실행 권한으로 두 모드로 분류합니다. 실행 모드를 유저 모드와 커널 모드로 나누는 이유를 알기 위해 예를 들겠습니다. 어떤 시스템 메모리 공간을 0~4G까지 가상 메모리에서 연속으로 쓰고 있다고 가정합시다. 이 때 커널 코드와 전역 변수가 0~4G 메모리 구간에 메모리 주소로 매핑
[리눅스커널] 동기화 - 커널 프로세스 레이스 컨디션
이번에 커널 공간에서만 실행하는 커널 쓰레드에서 발생하는 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
우분투 계열 리눅스에서 시냅틱 패키지 관리자의 패키지 다운로드 위치
간혹 필요할 때가 있어 정리해 두기로. 리눅스 민트 등 우분투 계열 리눅스에서 시냅틱 패키지 관리자(Synaptic Package Manager)를 사용할 때, 선택한 패키지를 설치하지 않고 다운로드만 할 수도 있다. 설치 직전에 "download package files only" 항목을 체크하면 된다. 문제는 대체 이 패키지(.deb) 파일이 어디에 들어 있느냐는 것인데, /var/cache/apt/archives/ 디렉토리에 다운로드된다. 물론 "download package files only" 항목을 체크하지 않아도 이 위치로 다운로드된 후에 설치가 진행된다. 다운로드해 둔 패키지를 나중에 수동으로 설치하려면 아래와 같이 작업한다. # 패키지 다운로드 디렉토리 이동 cd /v
[안드로이드] 시스템 데몬 부분 빌드
안드로이드에서 리눅스 시스템 프로그래밍을 실습하고 싶을 때가 있습니다. android\system\core 폴더에서 simple_proc 폴더 하나를 생성합시다. android\system\core\simple_proc 다음과 같이 메이크 파일을 하나 작성한 후 android\system\core\simple_proc 폴더에서 Android.mk 이름으로 저장합시다.LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS) LOCAL_MODULE := test LOCAL_SRC_FILES := \ test.cpp \ LOCAL_MODULE_TAGS := optional LOCAL_FORCE_STATIC_EXECUTABLE := true LOCAL_STATIC_


