[라즈베리파이] 워크큐(Workqueue) - 딜레이워크(delayed_work) 소개
By Guillermo Austin Kim | 2018년 9월 22일 |
워크큐는 대표적인 커널 후반부 처리 기법으로 후반부 처리 코드를 워크 핸들러에서 실행합니다. 동기적으로 처리 할 필요가 없는 코드를 워크 핸들러에 위치시켜 비동기적으로 커널 쓰레드 레벨에서 처리하는 겁니다. 이런 구조로 드라이버를 설계하면 다양한 디바이스 드라이버 시나리오에 맞게 코드를 구성할 수 있습니다. 워크에서 유연성을 추가한 기법이 딜레이 워크입니다. 구체적으로 딜레이 워크란 무엇일까요? 딜레이 워크는 워크를 일정 시각(HZ 단위) 후에 지연시켜 실행합니다. 여기서 말하는 지연 시각은 디바이스 드라이버 시나리오에 맞게 변경할 수 있습니다. 예를 들어 다음 온도를 콘트롤하는 드라이버 시나리오를 생각해 봅시다.1. 온도가 높아지면 인터럽트가 발생2. 인터럽트 핸들러에서 워크를 워크큐에 큐잉3. 워크
[리눅스커널][스케줄링] 컨택스트 스위칭 관련 자료 구조 알아보기
By Guillermo Austin Kim | 2019년 3월 6일 |
컨택스트 스위칭 관련 자료 구조 알아보기이전 소절에서 컨택스트는 프로세스가 실행 중인 그 자체라고 소개했습니다. 프로세스 실행 그 자체는 레지스터 세트 표현할 수 있습니다. 어떤 프로세스가 CPU에서 실행하면 CPU 레지스터 세트에 프로세스가 실행 중인 코드와 함수 정보가 채워집니다. 컨택스트 스위칭으로 CPU 레지스터 세트를 어딘가에 저장할 것입니다. 그러면 CPU 레지스터 세트를 표현하는 자료구조는 무엇일까요? 다음 8 번째 줄 struct thread_info 구조체에서 cpu_context 필드입니다.[https://elixir.bootlin.com/linux/v4.14.70/source/arch/arm/include/asm/thread_info.h]1 struct thread_info {2un
Linux Desktop에 대한 고찰
By 지훈현서 | 2018년 12월 1일 |
현재 사용하고 있는 컴퓨터 운영체제를 꼽으라면Linux, Mac, Windows 로 대변된다고 해도 틀린 말은 아닐 겁니다.이런 구도가 상당히 오래 되어 왔지요.불과 리눅스가 세상에 알려지기 전, SUN-OS, HPUX, OS2 등등의*NIX 시스템을 비롯하여 MS-DOS 에서 비롯된 Windows 계열까지..거기에다 맥, NEXT, OS X 으로 이어지는 애플의 운영체제까지... 이런 다양한 운영체제가 실은 기능에 따라 역할이 많이 달라지는 것 같습니다.(개인적인 견해이니 딴지는 댓글로 부탁드립니다) Mac - 당연히 개발자 혹은 좀 튀고싶은 사용자 와 같은 이미지Windows - 당연히 아무런 생각없이 컴을 배우는 사람부터 대부분 사용하던 관습대로Linux - 주로 백엔드 서비스를 동작시키는 서버
[Linux][Kernel] data abort@cpuacct_charge - 리눅스 커널
By Guillermo Austin Kim | 2018년 1월 25일 |
CPU3에서 실행 중인 "Binder:15701_2" 프로세스가 데이터 어보트로 커널 크래시가 발생했습니다.커널 로그가 데이터 어보트 발생 시 어떤 동작을 했는지 레지스터 정보와 함께 알려주네요. [69350.929482] <26>Unable to handle kernel paging request at virtual address 11ad4e80[69350.929511] <26>pgd = d57f0000[69350.929527] <22>[11ad4e80] *pgd=00000000[69350.929548] <6>Internal error: Oops: 5 [#1] PREEMPT SMP ARM[69350.929563] <c2>Modules linked in: