[리눅스커널] preempt_disable() 함수: 스케줄링을 지원하는 함수 실행 금지
By Guillermo Austin Kim | 2020년 2월 20일 |
preempt_disable()/preempt_enable() 함수를 사용할 때 주의해야 할 점이 있습니다. 그것은; * preempt_disable()/preempt_enable() 함수를 사용하는 구간에서 스케줄링을 지원하는 함수가 호출되면 안된다. 라는 점입니다. 다들 아시다시피, 커널 드라이버에서 preempt_disable() 함수를 호출하면 프로세스 struct thread_info 의 preempt_count를 +1만큼 증가시켜 Preemption을 비활성화합니다. 다음 예제 코드를 보면서 설명을 시작 하겠습니다. bool try_module_get(struct module *module)02 {03 bool ret = true;0405 if (module) {06 + preempt
[리눅스커널] 워크큐: 워커 스레드는 누가 언제 만들까
By Guillermo Austin Kim | 2019년 9월 25일 |
이번 챕터 앞 부분에서 워크큐에 대해 다음과 같이 소개했습니다. 워크를 처리하는 워커 스레드를 미리 생성해 놓고 워크 실행 요청이 오면 해당 워커 스레드가 이를 처리한다. 이번 시간에는 워커 스레드의 핸들인 워커를 언제 생성하는지 알아보겠습니다. 그렇다면 워커는 어느 함수를 실행할 때 생성할까요? 워커는 create_worker() 함수를 호출할 때 생성합니다. 워커를 생성하는 create_worker() 함수를 분석하기 전 이 함수를 호출하는 경로를 알아보겠습니다. maybe_create_worker() get_unbound_pool() workqueue_prepare_cpu() 커널 내부에서 워크를 사용해 후반부 처리를 하므로 커널은 워커 스레드를 미리
리눅스 커널 기여(Contribution) 및 참여하기 - 1.설정
By Guillermo Austin Kim | 2019년 8월 29일 |
Overview 리눅스 커널을 익히기 위한 방법은 여러 가지가 있습니다. 예를 들면 다음과 같습니다. 리눅스 커널 스터디 모임에 참석한다. 리눅스 커널을 디버깅해본다. 리눅스 커널 소스를 직접 분석해본다. 이렇게 다양한 방식으로 리눅스 커널을 접할 수 있습니다. 그런데 리눅스 커널을 익히고 접하는 좋은 방법은... 리눅스 커널 오픈 소스 프로젝트에 직접 참여하는 것입니다. 리눅스 커널은 가장 유명한 오픈 소스 프로젝트로 어느 누구나 리눅스 커널 프로젝트에 참여할 수 있습니다.우리가 작성한 커널 코드가 전 세계 리눅스 시스템에 적용이 될 수 있는 것입니다. "여러분이 작성한 리눅스 커널 소스를 전 세계 리눅스 개발자들이 쓴다." 참 뿌듯하고 가슴 떨리는 일이 아닐 수
[리눅스커널] 크래시 유틸리티: 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