본문 바로가기

리눅스 커널의 구조와 원리

(88)
[리눅스커널] 인터럽트(Interrupt)의 주요 개념 앞에서 인터럽트에 대해 소개했으니 리눅스 커널에서 인터럽트를 처리하는 방식을 이해하기 위해 알아야 할 주요 개념을 소개합니다.  인터럽트 핸들러  인터럽트 벡터  인터럽트 디스크립터  인터럽트 컨텍스트 인터럽트 핸들러란? 인터럽트가 발생하면 이를 핸들링하기 위한 함수가 호출되는데 이를 인터럽트 핸들러라고 합니다. 예를 들어, 키보드를 타이핑해서 인터럽트가 발생하면 키보드 인터럽트를 처리하는 키보드 인터럽트 핸들러가 호출됩니다. 마찬가지로 휴대폰에서 화면을 손으로 만지면 터치 인터럽트가 발생하고 터치 인터럽트를 처리하는 터치 인터럽트 핸들러가 호출됩니다. 다음 그림을 보면서 각 디바이스별로 인터럽트 핸들러가 처리되는 과정을 알아보겠습니다. 그림 5.2 디바이스별로 실행되는 인터럽트 핸들러 그림 5...
[리눅스커널] 인터럽트(Interrupt)란 인터럽트란 무엇일까요? 인터럽트란 일반적인 상황에서 갑자기 발생하는 비동기적인 통지나 이벤트라고 볼 수 있습니다. 이번 절에서는 인터럽트라는 용어와 그것의 의미를 알아보겠습니다. 일상 생활에서의 인터럽트 인터럽트란 단어가 생소하신가요? 낯설게 들리는 분도 있고 귀에 익은 분도 있을 것입니다. 일상생활에서 인터럽트란 갑자기 생긴 일이나 하던 일을 멈춘다는 의미입니다. 일상적으로 하던 일을 멈추게 하는 무엇인가가 갑자기 발생한 상황을 뜻합니다. 예를 들면, 책을 읽다가 갑자기 전화가 와서 읽던 책을 덮어 놓고 전화를 받는 상황이 그러합니다. 하드웨어 관점에서 인터럽트란? 임베디드 시스템 관점에서 인터럽트는 무엇일까요? 먼저 하드웨어 관점에서 생각해 봅시다. 하드웨어 관점에서 인터럽트란 하드웨어의 변화를 감지..
gzip의 분할 압축 명령어 사용하기 gzip의 분할 압축 명령 $ tar zcvfp - 대상파일(들) | split -b 4m - 압축할이름.tar.gz [엔터] 또는, $ tar zcvfp - 디렉토리/ | split -b 4m - 압축할이름.tar.gz [엔터] 실행하면 *.tar.gzaa, ....gzab, ....gzac 이런 식으로 파일 확장자의 문자열이 증가하면서 파일이 생성된다. gzip의 분할된 압축 파일 하나로 합치기 $ cat 압축파일이름.tar.gza* > 합쳐진파일이름.tar.gz [엔터] 실행하면 통짜로 된 .tar.gz 파일만 얻을 수 있다. (참고: tar + gzip 압축 파일 해제) ~$ tar zxvf 압축파일이름.tar.gz [엔터] 실행하면 압축했던 디렉토리를 복구할 수 있다. // example cat..
[GIT] initial configuration GIT $ git config --global user.name "Austin Kim" $ git config --global user.email austindh.kim@gmail.com $ git config --global alias.ch checkout $ git config --global alias.b branch $ git config --global alias.co commit $ git config --global alias.s status $ git config --global alias.fp format-patch $ git config --global alias.ap apply https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-G..
[라즈베리 파이 4B] 라즈비안 커널 빌드 (크로스 컴파일러 - cross compile) 32비트 라즈비안 커널 커널 빌드 (arm32_rpi_kernel_build.sh) #!/bin/bash KERNEL=kernel8 echo "configure build output path" TOP_PATH=$( cd "$(dirname "$0")" ; pwd ) OUTPUT="$TOP_PATH/out32" BUILD_LOG="$TOP_PATH/rpi_build_log.txt" rpi_build_start_time=`date +%s` pushd linux > /dev/null make ARCH=arm O=$OUTPUT CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig -j16 2>&1 make ARCH=arm O=$OUTPUT CROSS_COMPILE=ar..
[Linux kernel] Quick Review over OOM(Out of Memory) Killer routine Log at the moment of OOM [ 126.809058] sysrq: Manual OOM execution [ 126.809184] kworker/0:2 invoked oom-killer: gfp_mask=0x6000c0(GFP_KERNEL), nodemask=(null), order=-1, oom_score_ adj=0 [ 126.809217] kworker/0:2 cpuset=/ mems_allowed=0 ... [ 126.810045] lowmem_reserve[]: 0 0 1204 1204 [ 126.810093] HighMem free:1054428kB min:512kB low:7216kB high:13920kB active_anon:22608kB inactive_anon:9220k..
64비트 기존 라즈비안 이미지 위치 Each raspbian image is attached under below directory. https://downloads.raspberrypi.org/raspios_arm64/images/ [PARENTDIR] Parent Directory - [DIR] raspios_arm64-2020-05-28/ 2020-05-28 06:01 - [DIR] raspios_arm64-2020-08-24/ 2020-08-24 18:56 - [DIR] raspios_arm64-2021-04-09/ 2021-04-09 15:57 - [DIR] raspios_arm64-2021-05-28/ 2021-05-28 16:08 - [DIR] raspios_arm64-2021-11-08/ 2021-11-08 07:49 - [..
[mm] 'vm_flags' of 'struct vm_area_struct' 'vm_flags' is important field in the 'struct vm_area_struct'. struct vm_area_struct { /* The first cache line has the info for VMA tree walking. */ unsigned long vm_start; /* Our start address within vm_mm. */ unsigned long vm_end; /* The first byte after our end address within vm_mm. */ /* linked list of VM areas per task, sorted by address */ struct vm_area_struct *vm_next, *vm_prev; ... unsig..