[라즈베리파이] 라즈비안: 리눅스 커널 소스의 구조
By Guillermo Austin Kim | 2020년 1월 7일 |
지금까지 라즈비안 리눅스의 커널 코드를 내려받고 빌드하는 방법을 알아봤습니다. 리눅스 커널 코드를 수정해서 실습 코드를 빌드할 수 있는 준비를 끝낸 것입니다. 이번에는 리눅스 커널 코드의 디렉터리 구조를 살펴보겠습니다. 참고로 저도 처음으로 리눅스 커널 코드를 내려받고 디렉터리를 봤을 때 어떤 코드를 먼저 봐야 할지 감이 오지 않았습니다. 10여년 동안 커널을 빌드하면서 커널 소스는 다음과 같은 구조로 디렉터리가 구성돼 있다는 것을 알게 됐습니다. arch arch 하부 디렉터리에는 아키텍처별로 동작하는 커널 코드가 있습니다. arm: 32비트 계열 ARM 아키텍처 코드가 있으며, 라즈비안도 이 하부 디렉터리 코드를 실행합니다. arm64: 64비트 계열 ARM 아키텍처 코드가 있습니다. x86
[라즈베리파이] 프로세스: 컨택스트 스위칭 이란
By Guillermo Austin Kim | 2019년 1월 9일 |
마운드에 A란 투수가 있습니다.마운드에는 투수 한 명만 공을 던질 수 있습니다. 그런데 마운드에 오르고 싶어하는 B, C란 투수가 불펜에서 몸을 풀고 있습니다. 감독은 마운드에서 혼자 공을 던지고 있는 A란 투수가 불펜에 있는 B, C 투수보다 잘 던지는지 꾸준히 모니터링합니다. 시간이 흘러 감독이 B란 투수틀 마운드에 올려야 겠다고 결단을 내렸습니다. 감독은 마운드에 있는 A 투수를 마운드에서 내리고 B 투수를 마운드에 올립니다. 컨택스트 스위칭에 대한 이해를 돕기 위해 잠깐 야구에서 투수 교체에 대해 설명을 했습니다. 그럼 다시 컨택스트 스위칭에 대한 설명으로 되돌아 가겠습니다. 사용자 입장에서 컴퓨터나 휴대폰에서 여러 프로그램을 동시에 실행할 수 있습니다.프로그램을 구성 중인 프로세스도 동
[리눅스커널] 시간관리: 커널 타이머 관리 주요 개념 소개
By Guillermo Austin Kim | 2019년 7월 1일 |
커널 타이머는 리눅스 커널 핵심 기능 중 하나입니다. 커널 내부에서 배경 작업으로 다음 동작을 수행합니다. - 커널 스케줄링 함수들은 커널 타이머를 써서 프로세스를 제어합니다. - 시스템 시간은 타이머 인터럽트를 받아 주기적으로 갱신됩니다. - Soft IRQ 타이머 서비스를 주기적으로 실행해 동적 타이머를 관리합니다. 또한 리눅스 커널 세부 알고리즘과 디바이스 드라이버는 실행 시간을 기준으로 세부 제어를 합니다. 예시를 들면 다음과 같습니다. - 어떤 함수를 현재 시각 기준으로 200ms 초 후에 실행 - 어떤 함수가 500ms 내에 실행 안 하면 예외 처리 - 특정 함수를 1초 주기로 실행해서 시스템 상태를 점검 리눅스 커널이나 드라이버 코드를 분석하면 커널 타이머와 시간 흐름을 제어하는
[라즈베리파이] 워크큐(Workqueue) - 워크를 워크큐에 어떻게 큐잉할까?(1)
By Guillermo Austin Kim | 2018년 9월 8일 |
워크를 초기화만 하면 워크를 실행할 수는 없습니다. 우선 워크를 워크큐에 큐잉해야 워커 쓰레드는 워크를 실행할 수 있습니다. 이번절에서는 워크를 워크큐에 큐잉하면 워크큐 전체 흐름으로 어떤 동작을 하는지 알아 보겠습니다. 워크 초기화는 struct work_struct 타입 변수를 INIT_WORK() 함수에 전달하거나 DECLEAR_WORK() 함수로 struct work_struct 변수를 선언하면 됩니다. 이 워크를 워크큐를 큐잉하려면 struct work_struct 타입 변수를 schedule_work()이라는 함수에 파라미터로 전달하면 됩니다. 이번에는 워크를 워크큐에 큐잉하는 코드는 다음과 같습니다.[https://elixir.bootlin.com/linux/v4.14.43/source/d