[라즈베리파이] 시그널 - 커널에서 시그널은 어떻게 처리할까?
By Guillermo Austin Kim | 2018년 12월 2일 |
리눅스 커널 입장에서 시그널은 프로세스 간 통신을 위한 간단한 인터페이스입니다. 커널은 상황에 따라 시그널을 생성하고 전달해주는 역할을 수행합니다. 리눅스 커널에서 시그널에 대한 처리는 2단계로 나눌 수 있습니다. 1> 시그널 생성유저 공간에서 시그널을 설정하면 커널은 해당 프로세스의 태스크 디스크립터에 시그널 정보를 써줍니다. 시그널을 받을 프로세스 스택 최상단 주소에 있는 struct thread_info flags 멤버에 _TIF_SIGPENDING 매크로를 써 줍니다. 시그널을 받을 프로세스에게 누군가 시그널을 생성했고 해당 시그널이 전달될 것이라고 알려주는 것입니다. 이후 시그널을 받을 프로세스를 깨웁니다. 2> 시그널 처리시그널을 받을 프로세스가 시스템 콜이나 인터럽트 처리를 마무
[리눅스커널] 프로세스 태스트 디스크립터 디버깅: 스레드와 스레드 그룹
By Guillermo Austin Kim | 2018년 10월 6일 |
T32로 프로세스 목록을 보면 다음과 같이 계층 구조를 볼 수 있다.magic___|___command_________|#thr|state_____|spaceid|pids_|C1A171B8| swapper/0 | 420|current | 0000 | 0. 2. 3. 5. 6. 7. 8. 9. 10F1618000| init | - |sleeping | 0001 | 1.E9AF8740| ueventd | - |sleeping | 01D0 | 464.E9AFAB80| logd | 7. |sleeping | 0208 | 520.E9AFC140| logd.daemon | |sleeping |
[리눅스] insmod 명령어로 드라이버 설치 시 커널 내부 동작 디버깅해보기(ftrace)
By Guillermo Austin Kim | 2020년 6월 28일 |
이전에 다음 글에서 insmod 명령어를 통해 모듈 타입 디바이스 드라이버가 설치될 때,커널 내부 함수가 어떤 흐름으로 작동하는지 코드를 리뷰했습니다. [리눅스] 드라이버: module_init 키워드로 지정한 함수가 호출되는 원리 - sys_finit_module()http://rousalome.egloos.com/10016090 이어서 이번 시간에는 ftrace를 통해 hello_module_init() 함수가 어떻게 호출되는지 살펴보겠습니다. insmod 명령어로 디바이스 드라이버를 설치할 때의 전체 흐름 먼저 다음 그림은 insmod 명령어로 디바이스 드라이버를 설치할 때의 전체 흐름을 나타냅니다. 그림의 윗 부분에서 '유저 공간'으로 표기된 부분을 봅시다. insmod가 실행되어 시
[bash: if, grep] 특정 문자열의 존재유무에 따른 작업 지정하기
By 반달가면 | 2017년 10월 31일 |
어떤 파일에 특정한 문자열이 있는 경우와 없는 경우에 각기 다른 작업을 해야 할 경우, if 조건문과 grep을 적절히 조합해서 간편하게 구현할 수 있다. 우선 if 조건문의 -z 옵션을 보자. 이것은 문자열의 길이가 0이면 참, 0이 아니면 거짓이다. 아래의 예시를 보자. string="abc" # 변수 abc에 저장된 문자열의 길이가 0인 경우 메시지 출력 if [[ -z $string ]] then echo "변수 string에 저장된 문자열의 길이는 0입니다." fi 이제 원래의 문제로 돌아가서, 예를 들어 파일 my_file.txt에 문자열 "abcd"가 존재하느냐 여부에 따라서 뭔가 다른 작업을 해야 하는 경우를 생각해 보자. if 조건에 grep을 이용한 문자열 검색의