[리눅스커널] 워크큐(workqueue): Trace32로 워크큐 자료 구조 디버깅하기
By Guillermo Austin Kim | 2019년 2월 21일 |
이번 시간에는 임베디드 디버깅 프로그램인 Trace32를 써서 워크큐 자료구조를 점검합니다. 리눅스 커널 시스템에서 커널 크래시가 나면 생성되는 vmcore를 올려 확인한 내용입니다. 참고로, vmcore는 라즈베리파이가 아니라 다른 ARM64비트 아키텍처를 적용한 시스템에서 받았습니다. 먼저 시스템 워크큐 전역 변수를 확인합니다.var.view %type %string system_wq1 (static struct workqueue_struct *) system_wq = 0xFFFFFFC632C15080 -> (2 (struct list_head) pwqs = ((struct list_head *) next = 0xFFFFFFC63A3B2870 3 (struct list_head)
[라즈베리파이] 시스템 콜 소개
By Guillermo Austin Kim | 2018년 11월 5일 |
리눅스에서는 실행 공간을 메모리 접근과 실행 권한에 따라 유저 공간과 커널 공간으로 분류합니다. 먼저 커널 공간이 무엇인지 알아봅시다. 커널 코드가 실행할 때는 모든 커널 함수 호출이 가능하며 제약 없이 메모리 공간에 접근해서 하드웨어를 제어할 수 있습니다. 이런 시스템 상태와 메모리 접근을 커널 공간이라고 부릅니다. 다음은 유저 공간을 소개하겠습니다. 유저 어플리케이션 코드가 구동하는 동작과 상태를 유저 공간이라고 합니다. 유저 어플리케이션은 유저 공간에서 실행하며 메모리 공간 접근에 제한이 있고 하드웨어에 직접 접근할 수 없습니다. 유저 어플리케이션에서 권한이 없는 메모리 공간에 접근하면 커널은 오류를 감지해서 해당 프로세스를 종료시킵니다. 시스템 콜은 누가 언제 실행할까요?시스템
리눅스 데스크톱으로의 여정에서 느껴지는 딜레마 몇가지
By 파란오이의 Beautiful Life | 2022년 8월 3일 |
최근 음... 몇 가지 이유로 노트북 한 대만 남기고는 모두 최신 리눅스 배포판으로 옮겨가고자 하는 시도를 해 본 적이 있습니다. 지난 블로그 포스팅을 보니 대략 한 달이 조금 넘었군요. 이런 시도를 해 봤던 마지막 시기가 근 10여년 전이니, 시대가 많이 바뀌긴 했습니다. 그리고 예전에 예상했던 문제들은 거의 다 해결된 모습이지만, 미처 예상치 못했던 문제 몇 가지가 발목을 잡아 딜레마를 만들고 있었습니다. 1. 이제 음... 메이저급 리눅스 배포판에서 대부분의 작업은 무리없이 잘 될 겁니다. 이건 오픈소스 생태계가 발전된 것도 있고, 구글과 크로미엄을 필두로 웹 생태계가 크게 확장된 것도 있습니다. 심지어 예전에는 참 삐걱대던 Wine 조차 이제는 오피스나 카카오톡 같은 앱들을 큰 무리 없이 돌려
[라즈베리파이][리눅스커널] 인터럽트 컨택스트에서 스케쥴링을 하면?
By Guillermo Austin Kim | 2018년 6월 16일 |
인터럽트 컨택스트에서 프로세스가 휴면하면 어떤 일이 벌어질까요? 커널은 이를 감지하고 커널 패닉을 유발시킵니다. 인터럽트 컨택스트에서 스케쥴링을 하면 안 됩니다. 왜냐면, 짧은 시간에 인터럽트 핸들러를 실행하고 인터럽트 벡터로 다시 돌아가 이미 중단시킨 프로세스를 다시 동작시켜야 하기 때문입니다. 그런데 인터럽트 컨택스트에서 스케쥴링을 하면 커널 입장에서 많은 동작을 수행해야 합니다. 당연히 시간이 오래 걸립니다. 이제 인터럽트 컨택스트에서 스케쥴링 할 때 어떤 흐름으로 커널 패닉이 발생하는지 살펴보겠습니다. 프로세스가 스케쥴링 즉 휴면할 때 __schedule() 함수를 호출합니다. 이 함수를 열어보면 앞 단에 schedule_debug()란 함수를 호출해서 현재 프로세스가 휴면할 수 있는 조건인지 점검