Guillermo Austin Kim

Sources

Posts

998 posts

[라즈베리파이] 시스템 콜 - 유저 공간 시스템 콜 발생 어셈블리 코드 분석

Guillermo Austin Kim|2018년 11월 18일

아키텍처별로 시스템 콜을 실행하는 동작은 다릅니다. 시스템 콜을 실행하는 동작은 어셈블리 코드로 구현되어 있습니다. 라즈베리파이가 탑재한 ARM(ARM32) 아키텍처에서는 시스템 콜은 다음과 같이 구현돼 있습니다.1. r0 ~ r5 레지스터에 시스템 콜로 전달할 인자 지정2. r7 레지스터에 시스템 콜 번호 저장3. "svc 0x00000000" 명령어 실행 GNU C 라이브러리 파일에서 실제 시스템 콜을 실행하는 어셈블리 코드를 봅시다. write() 함수에 대한 시스템 콜을 실행하는 코드를 소개합니다.00000020 :1 20: e59fc060 ldr ip, [pc, #96] ; 88 2 24: e79fc00c

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

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을 받은 프로세스의 기본적인 반응은 거의 대부분 해당 프로세스의

[라즈베리파이] 시스템 콜 - 유저 공간에서 시스템 콜 발생

Guillermo Austin Kim|2018년 11월 14일

유저 공간에서 커널 공간까지 어떤 코드로 시스템 콜을 구현했는지 분석을 시작합니다. 유저 모드에서 시스템 콜을 발생하면 커널 모드로 어떻게 스위칭하고 이후 시스템 콜 핸들러가 실행하는지 파악하는 것입니다. 가장 먼저 이런 의문이 생깁니다. 시스템 콜은 실행 시작점은 어디일까요? 유저 공간에서 리눅스 저수준 함수를 호출했을 때가 시스템 콜 실행의 출발점입니다. 다음 전체 시스템 콜 흐름도에서 검은색으로 된 부분입니다. 리눅스 저수준 함수를 호출하면 실행하는 GNU C 라이브러리(glibc)가 어떤 흐름올 시스템 콜을 호출하는지 알아봅시다. GNU C 라이브러리 실행 흐름유저 공간에서 시스템 콜을 실행하기 위해서는 저수준 표준 함수를 호출해야 합니다.저수준 표준 함수는 glibc 라이브러리에 구현돼 있어 실

[라즈베리파이] 시스템 콜 테이블이란

Guillermo Austin Kim|2018년 11월 13일

시스템 콜 테이블을 알아보기 전 POSIX 규약에 대해서 점검합시다.POSIX(Portable Operating System Interface)란 응용 어플리케이션이 다양한 유닉스 계열 운영체제에서 호환성을 유지하면서 실행할 수 있게 만든 표준 규약입니다. 대표적인 POSIX 규약은 리눅스 저수준 함수, 시스템 콜 테이블, 프로세스 통신용으로 쓰는 시그널 번호입니다. 응용 어플리케이션은 각자 알고리즘과 구현 시나리오에 집중하고 리눅스 저수준 함수 세부 구현 내역과 리눅스 커널 동작에 신경을 쓸 필요가 없습니다. 리눅스 POSIX 표준으로 시스템콜 번호와 핸들러는 지정되어 있습니다. 시스템콜 테이블은 시스템콜 번호를 인덱스로 시스템 콜 핸들러를 분기시키는 역할을 수행합니다. 시스템 콜 테이블은 시스템 콜

한국 개발업체에서 절대 리눅스 전문가가 나올 수 없는 이유(2: 쓰레기 관리자들)

Guillermo Austin Kim|2018년 11월 12일

From한국 개발업체에서 절대 리눅스 전문가가 될 수 없는 이유(1) - SW문화 2. 쓰레기 관리자들운이 좋게 개발 능력을 키워가는 고참 개발자가 보이면 한국 개발 업체 조직 책임자들은 투명 완장을 채워준다.개발과 관리를 동시에 하라는 것이다. 개발자가 조직 책임자에게 개발만 집중하고 싶다라고 말하면 조직 책임자는 업무의 폭이 좁다라고 말한다.업무의 폭이라? 고참 개발자가 되면 개발과 관리를 동시에 진행해서 프로젝트를 리딩해야 한다는 소리다. 그럼 고참 개발자에게 관리를 시키는 이유가 뭘까? 그 이유는 간단한다.고참 개발자에게 관리 업무를 시키면 그 위 조직 책임자는 편하게 일할 수 있기 때문이다.고참 개발자가 관리를 하면 우선 자신은 최신 기술에 대해 파악할 필요가 없다. 고참 개발자에게 투명 완