in_interrupt 매크로
By Guillermo Austin Kim | 2017년 5월 13일 |
커널이나 드라이버 코드 리뷰를 하는 도중에 preempt_add, preempt_sub 그리고 in_interrupt 함수를 자주 마주칩니다. 이 함수들의 사용 예와 구현부에 대해서 좀 더 짚어 보도록 하겠습니다.in_interrupt 매크로의 역할을 간단히 말하면, 현재 실행 중인 코드가 process context 혹은 interrupt context 상에서 돌고 있는 지 알려줍니다. process context 혹은 interrupt context의 개념은 여러 리눅스 커널 교재에서 마르고 닳도록 설명하고 있는데요, 아래 스택 트레이스를 보면 간단히 파악할 수 있습니다. __irq_svc(asm) -- unwind_backtrace() 사이에 보이는 함수(붉은색으로 마킹)들은 irq context에서
[라즈베리파이] 스케줄링: 프로세스 상태 변화 관리
By Guillermo Austin Kim | 2019년 2월 6일 |
프로세스 상태 변화프로세스 상태 변화에 대해 알아보겠습니다. 프로세스 상태를 아는 것 보다 프로세스 상태가 변경될 때 세부 동작을 이해하는 것이 더 중요합니다. [1] 실행 대기 -> CPU실행 중프로세스가 생성된 다음 바로 TASK_RUNNING(실행 대기) 상태로 바뀌면서 자신을 런큐에 Enqueue 합니다. 스케줄러가 RUNNING_TASK(실행 대기) 프로세스 중에서 우선 순위가 가장 높은 프로세스를 선택한 다음 CPU에서 실행시킵니다. 프로세스가 CPU를 점유하면서 실행하기 위해서 먼저 TASK_RUNNING 상태로 변경해야 합니다. 실행 후보 프로세스 리스트가 되는 것입니다. 스케줄러에 의해 선택되기 위해 런큐에 Enqueue된 다음 실행 대기 상태를 관리하는 연결 리스트에 등록하는 것
[리눅스커널] 프로세스 - 커널 프로세스 생성 시 do_fork() 함수 흐름
By Guillermo Austin Kim | 2018년 10월 22일 |
커널 공간에서 시스템 리소스(메모리, 전원) 관리를 수행하는 프로세스를 커널 스레드라고 합니다. 커널 스레드는 어떻게 생성할까요? 다음과 같이 kthread_create() 함수에 적절한 인자를 전달하면 됩니다. 커널 스레드를 생성하는 코드를 같이 봅시다. [https://elixir.bootlin.com/linux/v4.14.70/source/drivers/vhost/vhost.c#L334]1 long vhost_dev_set_owner(struct vhost_dev *dev)2 {3 struct task_struct *worker;4 int err;...5 /* No owner, become one */6 dev->mm = get_task_mm(current);7 worker = kthread_c
데비안/우분투 계열 리눅스 배포판에서 폰트 관리(ttf 폰트 설치/삭제)
By 반달가면 | 2019년 10월 14일 |
우분투 계열 리눅스에서 새로운 ttf 폰트를 다운로드해서 추가할 때 편리하게 사용할 수 있는 GUI 프로그램이 있어서 정리해 두기로. font-manager라는 프로그램인데, 각 폰트가 어떤 모습으로 출력되는지 볼 수 있고 다운로드한 ttf 폰트 파일을 설치할 수도 있다. font-manager 설치는 터미널창에서 아래와 같이 진행하면 되겠다. # S/W 저장소 정보 갱신 sudo apt-get update # font-manager 패키지 설치 sudo apt-get install font-manager 실행은 터미널창에서 font-manager를 입력. 시스템에 폰트를 설치하려면 루트 권한을 필요로 한다. # font-manager 실행(루트 권한) sudo font