[리눅스커널] 커널동기화: 레이스 컨디션 커널 패치 소개
By Guillermo Austin Kim | 2019년 6월 24일 |
이번에는 리눅스 커널 커뮤니티에서 논의된 레이스 컨디션 관련 커널 패치를 소개합니다. 패치 코드를 분석하면서 다음과 같은 내용을 알아보겠습니다. - 레이스 컨디션 발생 원인 - 임계영역 구간 - 패치 코드와 관련 소스 코드 분석 임베디드 리눅스 입문자분들은 정상급 ‘리눅스 커널 개발자’들이 어떻게 리눅스 커널을 개발하는지 궁금해합니다. 이 궁금증을 해소할 수 있는 지름길은 ‘리눅스 커널 메일링 리스트’를 보는 것입니다. ‘리눅스 커널 메일링 리스트’를 읽으면 커널 개발 도중 생긴 문제와 해결 방법에 대한 심도있는 분석을 확인할 수 있습니다. 먼저 패치 코드에서 소개된 다음 함수 흐름을 같이 볼까요? [https://lore.kernel.org/lkml/CAARE==e6obTMLBeo3t2oJuw
[ARM] ARM 프로세서의 특징을 활용한 최적화는 왜 중요할까?
By Guillermo Austin Kim | 2020년 7월 4일 |
이번 포스팅에서는 'ARM 프로세서의 특징을 활용한 최적화는 왜 중요할까?'에 대해서 이야기하려고 합니다.본론에 들어가기 앞서 일반적인 SW 개발자들이 최적화에 대해 어떻게 생각하는지 짚어 보겠습니다. 생각보다 성능과 최적화는 중요하다 대부분 SW 개발자들은 주어진 스팩을 구현하기 위해 프로그램을 작성합니다. 화면을 꾸미는 프론트 엔드 개발자들은 화면이 제대로 구성됐는지, 메뉴나 폰트가 제대로 보이는 지 체크를 합니다. 네트워크 개발자들은 데이터 패킷이 제대로 전달이 됐는지 테스트를 할 것입니다. 프로그래머는 주로 주어진 스팩을 만족하면서 버그가 없도록 프로그래밍을 합니다. 하지만 프로그램이 스팩 내에서 올바르게 실행되도록 결함을 찾아 다듬는 것만으로는 충분하지 않을 수 있습니다. 고객이 사용
[리눅스커널] 시스템 콜: GNU C 라이브러리 실행 흐름
By Guillermo Austin Kim | 2019년 9월 6일 |
유저 공간에서 시스템 콜을 실행하려면 리눅스 저수준 표준 함수를 호출해야 합니다.저수준 표준 함수는 glibc 라이브러리에 구현돼 있습니다. 그래서 실제 시스템 콜을 발생하는 코드를 확인하기 어렵습니다. glibc 라이브러리 파일은 어디있을까요? 리눅스 배포판마다 다르지만 라즈베리파이에서는 glibc는 라즈베리파이에서 다음 경로에 있는 libc.a란 파일입니다.root@raspberrypi:/home/pi# ls /usr/lib/arm-linux-gnueabihf/libc.a/usr/lib/arm-linux-gnueabihf/libc.a libc.a 를 리눅스에서 제공하는 라이브러리라고 하며 표준 입출력 함수과 프로세스 생성 요청과 같은 핵심 동작을 수행합니다. 이번 시간에는 libc.a 파일에
[리눅스커널] 프로세스: 유저 프로그램 실행 흐름 추적하기
By Guillermo Austin Kim | 2019년 7월 14일 |
리눅스 시스템에서는 빌트인으로 제공하는 프로그램이 있습니다. 이를 명령어 형태로 쓰고 있는데 이 프로그램은 실행할 때 프로세스 포멧으로 구동합니다. ftrace 로그로 각 프로그램(프로세스)이 어떻게 생성, 실행 및 종료하는지 확인합시다. ftrace 로그 설정하기ftrace 로그 설정 코드는 다음과 같습니다.1 "echo 1 > /sys/kernel/debug/tracing/events/sched/sched_process_exec/enable"2 "echo 1 > /sys/kernel/debug/tracing/events/sched/sched_process_exit/enable"3 "echo 1 > /sys/kernel/debug/tracing/events/sched/sched_proc