PREEMPT

포스트: 2
Tags

Posts

2 posts

[리눅스커널] 스케줄링: __schedule() 함수와 'bool preempt' 인자

Guillermo Austin Kim|2020년 1월 15일

다음과 같이 __schedule() 함수의 구현부를 보면 'bool preempt' 인자를 전달한다. void __sched notrace __schedule(bool preempt){ struct task_struct *prev, *next; unsigned long *switch_count; struct rq_flags rf; 이번 시간에는 이 함수에 'bool preempt' 인자가 추가된 이력을 확인해보자. __schedule() 함수에 'bool preempt' 인자가 추가된 패치 출처는 다음과 같다.https://lkml.org/lkml/2015/9/30/100 패치 코드의 내용은 다음과 같다. From fc13aebab7d8f0d19d557c721a0f25cdf7ae9

[Linux][Kernel] preempt_disable()/preempt_enable() 주의 사항

Guillermo Austin Kim|2019년 1월 2일

preempt_disable() 함수를 쓸 때 주의해야 할 점이 있습니다.preempt_disable() 함수는 preempt_enable() 함수와 반드시 Pair로 써야 합니다. preempt_disable() 함수를 호출한 다음 스케줄링 동작을 수행하는 함수를 쓰면 리눅스 시스템은 오동작합니다. 예를 들어 다음과 같은 드라이버를 초기화하는 코드를 예를 들겠습니다.1 void configure_something_driver(void) 2 {3 preempt_disable();4 5 do_something();6 mdelay(100);7 do_something();8 9 preempt_enable();10 } 5~7 번 코드가 실행할 때 Preemption이 되면 안된다고 판단했습니다.그래서 3 번