[라즈베리파이] 프로세스 - 스케줄링(Preemption): 커널 모드 인터럽트 발생
By Guillermo Austin Kim | 2018년 9월 16일 |
이번에는 커널 모드에서 인터럽트가 발생했을때 스케줄링(Preemption)하는 동작을 살펴봅니다. 커널 모드에서 커널 프로세스가 실행 중 인터럽트가 발생하면 __irq_svc 이란 인터럽트 벡터로 PC를 바꿉니다.__irq_svc 코드를 봅시다.[https://elixir.bootlin.com/linux/v4.14.49/source/arch/arm/kernel/entry-armv.S]1 __irq_svc:2 svc_entry3 irq_handler45 #ifdef CONFIG_PREEMPT6 ldr r8, [tsk, #TI_PREEMPT] @ get preempt count7 ldr r0, [tsk, #TI_FLAGS] @ get flags8 teq r8, #0 @ if preempt count
[라즈베리파이] 시그널 - 시그널 번호와 동작 알아보기
By Guillermo Austin Kim | 2018년 11월 27일 |
책을 읽다가 발생하는 여러 비동기적인 이벤트(인터폰, 전화)가 있듯이, 유저 레벨 프로세스 동작 중에 발생할 수 있는 시그널도 여러 가지가 있습니다. 유닉스나 리눅스 커널 버전이 달라도 시그널 종류는 비슷합니다. 시그널은 POSIX 규약으로 정의된 표준이며 이제 맞게 리눅스 시스템 개발자가 구현하기 때문입니다. 다음은 라즈베리파이 리눅스 커널 4.14.70 버전에서 지원하는 시그널 번호를 확인한 결과입니다.pi@raspberrypi:~ $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIGP
[라즈베리 파이] 라즈비안 버전과 커널 소스 버전
By Guillermo Austin Kim | 2020년 1월 7일 |
이번 절에서는 라즈베리 파이에서 라즈비안 리눅스 커널 소스코드를 내려받고 빌드하는 방법을 알아보겠습니다. 참고로 필자는 불필요한 권한 설정을 피하기 위해 터미널에서 다음 명령어를 입력해 root 권한을 획득했습니다. $ sudo su 실제 라즈베리 파이의 터미널에서 sudo su 명령어를 입력할 때의 모습은 다음과 같습니다. 그림 2.37 터미널에서 sudo su 명령어를 입력한 모습 라즈비안 버전과 커널 소스 버전 라즈비안 커널 이미지를 내려받는 방법을 설명하기에 앞서 라즈비안과 커널 버전에 대해 알아둘 필요가 있습니다. 이 책에서 다루는 커널 디버깅과 관련된 내용은 2019년 7월 10일에 라즈베리 파이 커뮤니티에서 배포한 다음 이미지를 기준으로 테스트했습니다. 라즈비안 이미지 파일
[라즈베리파이] 시스템 콜 - 전체 흐름도 소개
By Guillermo Austin Kim | 2018년 11월 6일 |
이전에 소개한 시스템 콜 흐름도와 시스템 콜 동작은 그리 간단하지 않습니다. 시스템 콜 세부 동작을 알려면 다음 시스템 전체 흐름도를 이해해야 합니다. 다음 그림은 이번에 다룰 전체 시스템 콜 흐름도입니다. open(), write() 그리고 read() 함수는 파일을 열고 읽어서 쓰는 파일 입출력 동작이고, fork()와 exit() 함수는 프로세스 생성과 종료와 연관된 동작을 실행합니다. 이를 리눅스 저수준 함수라고 부릅니다. 다른 관점으로 GNU C 라이브러리로 진입하는 함수이며 이를 API(Application Programming Interface) 라고 부릅니다. 리눅스 시스템에서는 390여 개의 표준 함수들이 있는데 위 그림에서 대표적인 함수 5개를 표현한 것입니다. 라즈베리파이에서 다음