리눅스 커널 패치를 보내려 하는데 도무지 lock 과 관련된 내용이 이해가 안되고 있다. 그래서 패치에선 잠시 손 놓고 다시 초심으로 돌아가 한번 더 커널을 분석해보려 한다. 예전부터 읽어야지~ 읽어야지~ 하면서 책장에 박아두었던 디버깅을 통해 배우는 리눅스
실습에 필요한 제품 구매 및 라즈베리 파이 커스텀 커널로 실행하기
삽질 과정에서 이것저것 많이 테스트해보고, 특히 ftrace 를 이것저것 만져봤는데 이거 상당히 괜찮은 물건이다. 잘 활용하면 디버깅에 큰 도움이 될 것 같다. 지금은 파일 시스템을 조작해서 컨트롤 하는데 이건 너무 불편하고 bash script 로 적절하게 매핑하면
다시 한번 정리하는 프로세스, 쓰레드, 그리고 태스크
커널 스레드 는 커널 공간에서만 실행되는, 유저 공간과 상호 작용하지 않는 스레드이다. 따라서 커널 스레드는 실행과 휴면 등의 모든 동작을 커널에서 직접 제어 · 관리하며, 대부분의 커널 스레드는 시스템이 부팅할 때 생성되고 시스템이 종료할 때까지 백그라운드로 실행된
프로세스의 속성 정보를 표현하는 구조체는 task_struct 구조체로 이를 통해 프로세스 정보를 관리한다. ps -ely 같은 명령을 입력했을 때 나오는 정보들도 task_struct 의 필드 정보를 출력한 것이다.char comm[TASK_COMM_LEN]: 프
커널에서는 프로세스의 세부 실행 정보를 저장하거나 로딩하는 자료구조가 필요한데 이를 thread_info 구조체에서 관리한다
thread_info 구조체의 필드 중 preempt_count 는 프로세스의 컨텍스트 정보를 저장한다. 그리고 다음의 상황에서 preempt_count 필드의 값이 바뀌게 된다. 인터럽트 컨텍스트 실행 시작 및 종료 설정 Soft IRQ
이전 글에서 설명한 것처럼 프로세스를 처음 생성할 때에는 copy_process() 함수를 호출한다. 이 과정에서 dup_task_struct() 함수를 호출하게 되는데, 이 함수가 태스크 디스크립터와 프로세스가 실행될 스택 공간을 새로 만들게 된다.dup_task_
하드웨어 관점에서 인터럽트란 하드웨어의 변화를 감지해서 외부 입력으로 전달되는 전기 신호를 뜻한다.