LINUX

포스트: 477|조회수: 0|TERM
Items

Posts

477 posts

[라즈베리파이] 시스템 콜 - 커널 모드에서 시스템 콜을 어떻게 실행할까?

Guillermo Austin Kim|2018년 11월 19일

이번 절에서는 커널 공간에서 시스템 콜을 어떻게 실행하는지 살펴보겠습니다.다음 그림 전체 흐름도에서 검은색으로 표시된 부분을 눈여겨봅시다. 위 그림에서 검은색으로 된 부분입니다. 유저 공간에서 소프트웨어 인터럽트를 유발했으니 소프트웨어 인터럽트 벡터인 vector_swi 레이블이 실행합니다. 유저 공간에서 “svc 0x0” 이란 명령어를 실행하면 vector_swi 이란 시스템 콜 처리용 인터럽트 벡터로 프로그램 카운터를 이동하는 것입니다. 유저 공간에서 지정한 시스템 콜 번호는 r7 레지스터에 실려서 옵니다. 이 시스템 콜 번호를 통해 시스템 콜 테이블에 접근한 후 시스템 콜 핸들러로 분기합니다. ARM 프로세서 관점으로 시스템 콜을 실행하면 커널 공간에서 다음과 같은 동작을 수행합니다.1>

[라즈베리파이] 시그널 - 시그널 핸들러 실행 및 커널 복귀 과정

Guillermo Austin Kim|2018년 11월 17일

signal은 특정 프로세스에게 어떤 메시지를 전달할 수 있는 가장 기본적인 수단입니다.signal은 다른 (user-level) 프로세스로부터 직접적으로 받거나 혹은 (주로 문제가 될 만한 동작으로인해) 커널로부터 받을 수 있습니다. 이러한 signal은 kernel-mode에서 처리가 되는데 주로 시스템 콜이나 인터럽트 처리 등을 마치고 user-mode로 돌아오기 직전에 해당 프로세스에게 전달된 signal이 있는지 검사하여 실행됩니다.(SMP 커널에서는 user-mode에서 실행 중인 프로세스가 signal을 처리해야 하면 강제로 scheduling하도록 IPI를 보내서 kernel-mode로 들어오게 만들기도 합니다.) signal을 받은 프로세스의 기본적인 반응은 거의 대부분 해당 프로세스의

[bash: awk] 문자열을 검색해서 일치하는 부분만 출력하기(match, substr)

반달가면|2018년 11월 13일

awk에서 특정 문자열 패턴과 일치하는 부분이 있을 경우, 일치하는 부분만 출력하는 방법이다. grep에서 -o 옵션으로 일치하는 부분만 골라서 출력하는 것과 동일한 기능이나(grep의 -o 옵션에 대한 내용은 이전 게시물을 참고하자. 여기로), awk에서는 좀 더 복잡한 작업들과 조합해서 사용할 수 있으므로 알아두면 편리하다. 아래의 예시를 보자. 입력된 행에 문자열 "abc"가 있는지 확인하여 있을 경우 해당 부분만 출력하는 경우다. echo "abcdefg" | awk 'match($0,/abc/) { print substr($0,RSTART,RLENGTH) }' abc match 함수를 이용하여 일치하는 부분이 있는지 확인한 후에 문자열 일부를 출력하기 위해 substr 함수를 사용

[bash: awk] 항목의 합계를 계산할 때 예외 처리

반달가면|2018년 11월 9일

awk를 이용해서 합계를 구할 때, 입력이 유효하지 않은 경우가 발생할 수 있다. 예를 들어 특정 파일에서 grep으로 특정 항목만 추출한 후에 해당 항목의 합계를 구하려는데, 그 항목 자체가 파일에서 존재하지 않는 경우다. awk를 이용한 항목별 합계 계산 방법은 이전 게시물을 참고하자. 여기로 예를 하나 생각해 보자. my_data.txt의 파일이 아래와 같다. # my_data.txt 파일 내용 확인 (구분자는 탭) cat my_data.txt 2018.1.3 apple 10 2018.1.3 orange 3 2018.3.10 apple 2 위의 파일에 대해서 사과(apple)가 몇개 팔렸는지만 궁금하다면 아래와 같은 작업을 할 수 있다. # 사과(apple) 항목의 합계 계