색다른 연결리스트들
·
프로그래밍/알고리즘
『디버깅을 통해 배우는 리눅스 커널의 구조와 원리』 책을 보다 색다른 연결리스트들을 보게 되었다. 1. 꼬리 비우기형 보통 연결리스트 라고 하면 아래의 코드를 떠올렸다. struct list_head = { struct list_node *head; struct list_node *tail; }; new_node->next = NULL; list_head->tail->next = new_node;// 마지막 노드에 새로운 노드를 연결한다. list_head->tail = new_node;// 새로운 노드가 tail로 대체됨. 그런데 tail 맴버를 수정하면 다음과 같이 tail을 항상 비워두는 것으로 할 수 있다. (코드를 보면 알겠지만 실제로 빈 공간이 생기는건 아님) struct list_head =..
스터디 계획(3주차)
·
디버깅을 통해 배우는 리눅스 커널의 구조
부터 까지
리눅스 커널 스터디 결산 (2주차)
·
카테고리 없음
https://2jun0.tistory.com/41 Soft IRQ Soft IRQ는 인터럽트 후반부 기법으로 쓰이는 방법중 하나다. Threaded IRQ는 스레드를 하나 만들고 스케줄링되서 처리하는 개념이지만, Soft IRQ는 인터럽트가 끝나고 나서 바로 처리된다. 1. 서비스 등 2jun0.tistory.com https://2jun0.tistory.com/39 IRQ 스레드 생성 실습 이번에는 IRQ 스레드를 직접 생성해보고 ftrace를 이용해서 동작을 확인해본다. 새로 인터럽트를 만들지 않고 기존의 인터럽트를 이용할 것이다. 기존의 인터럽트에 스레드만 추가한다. 그러므로 2jun0.tistory.com
Soft IRQ
·
디버깅을 통해 배우는 리눅스 커널의 구조
Soft IRQ는 인터럽트 후반부 기법으로 쓰이는 방법중 하나다. Threaded IRQ는 스레드를 하나 만들고 스케줄링되서 처리하는 개념이지만, Soft IRQ는 인터럽트가 끝나고 나서 바로 처리된다. 1. 서비스 등록 인터럽트 처럼 사전에 서비스를 등록해야 한다. open_softirq()를 통해 Soft IRQ 서비스 핸들러 함수를 softirq_vec에 등록한다. 2. 인터럽트 처리 인터럽트에서 Soft IRQ 서비스를 요청해야 실행된다. 요청하는 함수는 raise_softirq(id)이다. raise_softirq는 실행중인 cpu라인의 인터럽트를 비활성화 하고 raise_softirq_irqoff를 실행한다. raise_softirq_irqoff에선 아래와 같이 irq_stat.__softir..
direct mapped cache / set associative cache
·
프로그래밍/기타
캐시란? 캐시는 일종의 메모리로, CPU에서 메모리에 접근하는데 드는 시간을 줄이기 위해 만들어졌다. 캐시를 사용하는 다양한 방법이 연구되어 왔으며 이 글에서는 direct mapped cache와 set-associative cache를 알아볼 것이다 아래의 글을 읽기 앞서, 캐시와 메모리의 차이점에 대해 조금 알아보자 메모리 VS 캐시 DRAM vs SRAM 하드웨어적으로 SRAM이 DRAM보다 더 빠르기 때문에 캐시는 SRAM, 메모리는 DRAM을 사용한다. 여기서 이 글을 읽으시는 분들은 메모리를 모두 캐시처럼 SRAM으로 대체하면 안될까? 라는 생각이 들것이다. 하지만 SRAM이 더 비싸서.. 그렇게는 할 수 없다. . Address 단위 vs Block 단위 메모리는 byte단위로 주소를 매핑..
IRQ 스레드 생성 실습
·
디버깅을 통해 배우는 리눅스 커널의 구조
이번에는 IRQ 스레드를 직접 생성해보고 ftrace를 이용해서 동작을 확인해본다. 새로 인터럽트를 만들지 않고 기존의 인터럽트를 이용할 것이다. 기존의 인터럽트에 스레드만 추가한다. 그러므로 먼저 적당한 인터럽트를 찾는다. root@raspberrypi:/home/ejun0/user_procs# cat /proc/interrupts CPU0 CPU1 CPU2 CPU3 26: 0 0 0 0 GICv2 29 Level arch_timer 27: 157678 140878 179115 172456 GICv2 30 Level arch_timer 30: 0 0 0 0 GICv2 107 Level fe004000.txp 31: 106802 0 0 0 GICv2 65 Level fe00b880.mailbox 34: ..
스터디 계획(2주차)
·
디버깅을 통해 배우는 리눅스 커널의 구조
부터 까지
리눅스 커널 스터디 결산 (1주차)
·
디버깅을 통해 배우는 리눅스 커널의 구조
https://2jun0.tistory.com/33 bcm2711 라즈베리파이에서 bcm2835 라이브러리 사용 책을 보다가 이해할 수 없는 부분이 생겼다. 분명 내 라즈베리파이의 AP는 bcm2711인데 드라이버 라이브러리는 bcm2835버전을 사용하는 것이다. (AP는 Application Processor로 CPU라고 보면 된다) 알고보니 b 2jun0.tistory.com https://2jun0.tistory.com/34 인터럽트 디스크립터와 인터럽트 디버깅 인터럽트 디스크립터란? - 인터럽트에 대한 객체를 관리하는 자료구조. linux/include/linux/irqdesc.h에서 볼 수 있다. struct irq_desc { ... unsigned int __percpu *kstat_irqs..
2jun0
2jun0의 블로그