[라즈베리파이] 동기화 - 스핀락(spinlock): spin_unlock() 함수 분석
By Guillermo Austin Kim | 2018년 12월 23일 |
이번에는 스핀락을 해제하는 spin_unlock() 함수 코드를 살펴보겠습니다. spin_unlock() 함수도 spin_lock() 함수와 마찬가지로 여러 함수로 치환돼 do_raw_spin_unlock() 함수를 호출합니다.[https://elixir.bootlin.com/linux/v4.14.43/source/include/linux/spinlock.h]static __always_inline void spin_unlock(spinlock_t *lock){raw_spin_unlock(&lock->rlock);} void __lockfunc _raw_spin_unlock(raw_spinlock_t *lock){__raw_spin_unlock(lock);} static inline v
[리눅스커널] 크래시 유틸리티: files -p '아이노드 주소' + files -d '덴트리 주소' 디버깅
By Guillermo Austin Kim | 2019년 12월 17일 |
크래시 유틸리티는 다양한 메모리 및 파일 시스템 디버깅 기능을 제공합니다.그 중에 유용한 기능 중 하나를 소개합니다. * files -p '아이노드 주소' 먼저 다음 명령어를 입력해 오픈된 파일에 대한 파일 디스크립터, 아이노드 그리고 덴트리를 확인 합니다. * files <pid> crash> files 1664PID: 1664 TASK: dc270000 CPU: 1 COMMAND: "Chrome-proc.anim"ROOT: / CWD: / FD FILE DENTRY INODE TYPE PATH 0 de4d8200 e1a33ab0 e0ce8dd8 CHR /dev/null 1 de4d8200 e1a33ab0 e0ce
fd - file descriptor(파일 디스크립터) 갯수 확인 및 업데이트 방법
By Guillermo Austin Kim | 2017년 12월 23일 |
리눅스 커널에서는 하나의 프로세스가 소유할 수 있는 파일 디스크립터의 갯수를 정해 놓았는데요.그럼 이 갯수를 어떻게 알 수 있을까요? 아래 명령어로 확인할 수 있어요.ulimit -a 결과를 보니 "nofiles(descriptors) 1024" fd의 갯수는 1024이네요.adb shell ulimit -atime(cpu-seconds) unlimitedfile(blocks) unlimitedcoredump(blocks) 0data(KiB) unlimitedstack(KiB) 8192lockedmem(KiB) 64nofiles(descriptors) 1024processes 6609flocks
[라즈베리파이][리눅스커널]인터럽트 컨택스트란 (1) #CS
By Guillermo Austin Kim | 2018년 3월 2일 |
인터럽트 컨택스트란인터럽트 컨택스트란 용어가 좀 낯설진 않나요? 그래서 인터럽트 컨택스트를 배우기 전에 우선 컨택스트란 용어를 배울 필요가 있습니다. 혹시 컨텍스트 스위칭이란 단어 들어보신 적이 있나요? 리눅스 커널에서 많이 쓰는 용어인데요. 어렵게 설명하면 컨텍스트란 현재 실행하고 있는 레지스터 묶음을 의미합니다. ARM 프로세스에서는 15개의 레지스터(r0부터 pc)가 있다고 알고 있죠? 이 레지스터 중에 현재 실행 중인 코드 주소를 담고 있는 pc(Program Counter)란 레지스터가 있는데요. 만약 현재 커널이 start_kernel이란 함수를 실행하고 있는데 이 함수의 주소가 0xC000D000이면 pc란 레지스터는 0xC000D000 주소를 담고 있습니다. 이렇게 PC 레지스터를 포함한