커널

포스트: 228|조회수: 0|CIVILIZATION
Items

Posts

228 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월 14일

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

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

Guillermo Austin Kim|2018년 11월 12일

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

[안드로이드][리눅스커널] 시그널 - 유저 공간 abort(SIGABRT) 시 동작 시 흐름

Guillermo Austin Kim|2018년 11월 7일

유저 공간에서 zygote가 강제 종료되면서 부팅을 못하는 상황입니다. 커널 로그로 아래 메시지를 볼 수 있습니다.아래 로그는 init 프로세스가 zygote에 SIGABRT(6) 시그널을 전달해서 zygote를 종료시키고 있습니다.[ 46.116831 / 01-02 01:20:24.859][0] init: Service 'zygote' (pid 1777) killed by signal 6[ 46.124107 / 01-02 01:20:24.869][1] init: Service 'zygote' (pid 1777) killing any children in process group 그럼 이 동작을 할 때 커널 관점으로 어떤 코드가 수행되는지 살펴보겠습니다. zygote는 커널 공간에서 "main"