[라즈베리파이] 프로세스: 태스크디스크립터(프로세스 실행 시각 정보)
By Guillermo Austin Kim | 2019년 1월 31일 |
태스크 디스크립터에는 프로세스 실행 시각 정보를 알 수 있는 멤버들이 있습니다. u64 utime; 유저 모드에서 프로세스 실행한 시각을 표현합니다. 이 멤버는 account_user_time() 함수 6번째 줄 코드에서 변경됩니다.1 void account_user_time(struct task_struct *p, u64 cputime)2 {3 int index;45 /* Add user time to process. */6 p->utime += cputime; u64 stime; 커널 모드에서 프로세스가 실행한 시각을 표현합니다. 이 멤버는 다음 코드와 같이 account_system_index_time() 함수에서 변경됩니다.1 void account_system_index_time(s
[라즈베리파이] 동기화 - 스핀락(spinlock) 소개
By Guillermo Austin Kim | 2018년 12월 21일 |
리눅스 커널에서 가장 많이 쓰는 동기화 기법 중 하나가 스핀락입니다. 먼저 스핀락의 특징을 알아봅시다. 1. 뮤텍스락 비해 구현 복잡도가 낮습니다.2. spin_lock_irq(), spin_lock_irq_save() 등등 추가 기능이 포함된 함수를 제공합니다.3. 스핀락 구현부는 아키텍처에 의존적입니다. ARM, ARM64 그리고 x86 CPU에 따라 구현부가 다릅니다. 스핀락 동작을 제대로 이해하기 위해선 어셈블리 코드를 분석해야 합니다. 임계 영역에 특정 프로세스에 접근하기 위해서 임계 영역 코드 구간에 스핀락을 걸어 다른 프로세스 접근을 막아야 합니다. 이를 위해 다음과 같은 함수를 호출해야 합니다.static DEFINE_SPINLOCK(static_spinlock);void kernel_fu
[리눅스커널] 워크큐(Workqueue) - 딜레이워크(delayed_work)는 어떻게 초기화하나?
By Guillermo Austin Kim | 2018년 9월 26일 |
딜레이 워크를 실행하기 위해서 먼저 딜레이 워크를 초기화해야 합니다. 이를 위해 INIT_DELAYED_WORK() 매크로 함수를 호출해야 합니다. 먼저 딜레이 워크를 초기화하는 디바이스 드라이버 코드를 열어 봅시다.[https://elixir.bootlin.com/linux/v4.14.43/source/drivers/thermal/da9062-thermal.c#L248]1 static int da9062_thermal_probe(struct platform_device *pdev)2 {3 struct da9062 *chip = dev_get_drvdata(pdev->dev.parent);4 struct da9062_thermal *thermal;...5 INIT_DELAYED_WORK(&th
[bash: strings] 바이너리 파일에서 문자열만 골라 출력하기
By 반달가면 | 2017년 4월 6일 |
strings는 바이너리 파일에 포함되어 있는 문자열만 골라 화면에 출력해 주는 기능을 제공한다. 별도의 옵션을 지정하지 않을 경우 4바이트 이상의 문자열이 존재할 경우 화면에 출력해 준다. 아래의 예시를 보자. # my_data.bin 파일에 포함된 문자열 출력 strings my_data.bin 화면에 출력할 문자열의 최소 길이는 기본값이 4이나, -n 옵션을 이용해서 사용자가 직접 지정해 줄 수도 있다. # my_data.bin 파일에 포함된 길이 8바이트 이상의 문자열 출력 strings -n 8 my_data.bin 만약 출력 결과에 파일명을 같이 표시해 주고 싶다면 -f 옵션을 이용한다. # 파일명을 함께 출력(-f) strings -f my_data.bin my