LINUXKERNEL

포스트: 40|조회수: 0|ORGANIZATION
Items

Posts

40 posts

[리눅스커널][스케줄링] 컨택스트 스위칭이란 무엇인가

Guillermo Austin Kim|2019년 3월 3일

컨택스트 스위칭이란 무엇인가컨택스트 스위칭 세부 동작을 알기 위해서 context_switch() 함수를 분석할 필요가 있습니다. context_switch() 함수를 분석하기 전 컨택스트 스위칭의 개념을 소개하겠습니다. 먼저 컨택스트 스위칭이란 용어에 대해서 살펴봅시다. 컨택스트 스위치란 용어는 컨택스트 + 스위치란 단어의 합성어입니다. 컨택스트를 바꾼다는 의미입니다. 여기서 컨택스란 용어는 무슨 뜻일까요? 컨택스트는 프로세스가 실행 중인 그 자체를 의미합니다. 이 표현은 추상적이라 이해하기 어렵습니다. 프로세스 실행 그 자체를 어떻게 표현할까요? 그것은 레지스터 세트입니다. CPU 레지스터 세트가 프로세스 실행 자체를 표현하기 때문입니다.  다음 테이블을 보면서 컨택스트 스위칭에 대한 개념을 알아봅시

[리눅스커널][인터럽트후반부] IRQ 스레드 동작 확인하기

Guillermo Austin Kim|2019년 2월 27일

IRQ 스레드 동작 확인하기 이제 실제 라즈베리안에서 IRQ Thread가 어떻게 수행되는지 ftrace 로그로 분석할 시간입니다. 이를 위해 다음과 같이 ftrace 로그를 설정해야 합니다. #!/bin/sh echo 0 > /sys/kernel/debug/tracing/tracing_onsleep 1echo "tracing_off" echo 0 > /sys/kernel/debug/tracing/events/enablesleep 1echo "events disabled" echo secondary_start_kernel > /sys/kernel/debug/tracing/set_ftrace_filter sleep 1echo "set_ftrace_filter init" echo f

Spinlock(스핀락) - 소개

Guillermo Austin Kim|2017년 12월 5일

스핀락. 리눅스 커널 책에서 언제나 볼 수 있는 개념이죠.싱크로나이제이션, 동기화, 어쩌구. 실제 Spinlock 구현부를 좀 살펴볼께요. 아래 코드를 전처리해서 코드를 보면,[kernel/fs/jbd2/commit.c]void jbd2_journal_commit_transaction(journal_t *journal) {//snip spin_lock(&commit_transaction->t_handle_lock); 아래 순서로 함수 콜이 수행되는 걸 알 수 있죠. 실제 스핀락 구현부는 arch_spin_lock() 함수라고 할 수 있어요. 우리 눈에 보이는 spin_lock()의 실체는 arch_spin_lock()군요.spin_lock() -> _raw_spin_lock()

[Linux][Kernel] T32 - Linked List 디버깅 cmm Script

Guillermo Austin Kim|2017년 12월 3일

리눅스 커널 데이터 스트럭쳐 내 수 많은 linked list를 확인할 수 있어요.예를 들어 struct kset이란 구조체도 첫번 째 멤버로 list란 링크드 리스트죠. struct kset { struct list_head list; //<<-- spinlock_t list_lock; struct kobject kobj; const struct kset_uevent_ops *uevent_ops;}; 실제 코어 덤프를 T32로 열어서 상세 구조체를 보면 아래와 같거든요.kset_find_obj( [R5] kset = 0xED74A980 -> ( [NSD:0xED74A980] list = ( //<<-- [NSD:0xED74A980] next = 0