6.2.4 스케줄링 요청하기, 요청 체크해서 스케줄링 시도하기6-4 kernel/sched/core./c resched_curr스케줄링이 필요한 경우 TIF_NEED_RESCHED 플래그를 설정_TIF_POLLING_NRFLAG : CPU가 스케줄러 인터럽트를 기다리지 않고, polling 방식으로 상태를 확인. (IDLE task 에서 주로 사용?, ARM64 는 사용하지 않음) -> 따라서 이 플래그가 켜있었으면 다른 cpu 가 알아치리도록 별도로 알림 줄 필요 없음.6-5 arch/arm64/kernel/entry.S work_pendingtbnz : Test bit and Branch if Nonzero. cbnz : Compare and branch if nonzero// arm64 의 WORK..

알고리즘을 풀다보면 fft 로 풀리는 문제가 참 많다.왜 이런 변환을 사용하게 됐는지, 어떤 문제에서 사용하면 되는지 알아보기위해 영상을 보면서 정리를 해보자 FFT 란 뭘까?https://www.youtube.com/watch?v=eKSmEPAEr2U 푸리에 변환이란 어떤 신호를 주파수 종류별로 분해하는 방법.기존 신호에, 사인파, 코사인파를 곱한 면적을 더하는 방식으로 해당 주파수가 얼마나 연관이 있는지 알아낸다. 신호가 여러 주파수의 합으로 구성된 경우, 어떤 주파수가 존재하고 어느 비율로 존재하는지 알수 있게됨.사인파와 코사인파의 진폭을 계산할때 오일러 공식을 사용하여, 하나의 지수항으로 계산이 가능실수부는 코사인파의 진폭, 허수부는 사인파의 진폭 그러나 실제로 얻는 신호는, 무한한 연속파가 아니..
5.7.3 idle 쓰레드가 설정되는 과정cpu 별로 idle 쓰레드를 생성하나, 초기화 과정은 0번 cpu 와 나머지 cpu 에 차이가 있다.0번0번 cpu 의 스케줄링 클래스를 idle 스케줄링 클래스로 설정void init_idle_bootup_task(struct task_struct *idle){ idle->sched_class = &idle_sched_class;}나머지 cpu 의 idle 쓰레드 초기화copy 하여 생성하고, 0번 cpu 의 idle 쓰레드의 pid 를 같이 사용하도록 설정struct task_struct *fork_idle(int cpu){ return copy_process(CLONE_VM, 0, 0, NULL, &init_struct_pid, 0, 0);}5...
5-16 kernel/fork.c copy_process 3clone 플래그에 따라 자원을 새로 할당하거나 공유// clone 인 경우 부모것을 공유if (clone_flags & CLONE_FILES) { atomic_inc(&oldf->count); goto out;}// clone 이 아닌경우 복사해서 새로 생성newf = dup_fd(oldf, &error);if (!newf) goto out;5-17 kernel/fork.c copy_process 4pid 구조체 & 정수형 pid 할당// global pidstatic inline pid_t pid_nr(struct pid *pid){ pid_t nr = 0; if (pid) nr = pid->number..
5-5 kernel/pid.c alloc_pidmappid namespace 에서 pid 를 할당여기서는 pid 를 보관할 수 있는 페이지가 없다면 페이지만 할당 해줌// pid 가 존재할수 있는 모든 페이지, offset 이 0이라면 1을 뺌// 그러나 페이지의 개념은 아니고, 실패시 offset 과 pid 를 새로 변경해서 할당max_scan = DIV_ROUND_UP(pid_max, BITS_PER_PAGE) - !offset;5-6 kernel/pid.c alloc_pidmap 2현재 page 에서 pid 할당이 가능한지 확인만약 안된다면 다음 페이지에서 할당 시도 or 다음페이지가 없다면 reserved pid 로 시도// 내껄 마지막에 등록하는걸 실패하더라도, 다른 더 뒤에있던 pid 가 쓰여..
4.9.5 per-cpu 동적 할당4-180 mm/percpu.c pcpu_alloc_areachunk 의 free entry 를 순회정렬들의 이유로 빈 공간이 생기는데 이를 head 라고 함 (실제로 사용하는지는 아직 모름)entry 에서 사용하고 남은 공간을 tail 이라고 함struct pcpu_chunk { int map_used; /* # of map entries used before the sentry */ int *map; /* allocation map */ int first_free; /* no free below this */};// map 에는 entry 의 주소들이 담겨있음for (i = chunk->first_free, p = chunk->map + i; i map_used..
오늘 생각한것그러니까 이게 무슨 개념이냐면 어떤 유닛에 static & reserve 영역에 진입할꺼면 전역 schunk 를 참조하고, dynamic 영역에 진입할꺼면 dchunk 를 참조하는 개념인 것 같다! 노드 하나당 chunk 를 하나씩 가지는데, enbedding 방식을 사용하면 연속된 공간에 잡는 것 같다. 그래서 이걸 그룹이라고 묶으면 해당 그룹안에는 cpu 가 하나당 하나의 유닛이 구성되고 first chunk 는 (static + (reserve) + dynamic) * unit 이 된다. schunk dchunk 는 이 first chunk 에 잇는 유닛의 정보를 사용할 때 쓰는듯 (공용 구조체같은 느낌! base addr 에 각 cpu 를 더해서 쓸것만 같아)4.9.3 first ch..
first chunk 의 맵 엔트리 관리map 으로 관리하는데, 코드를 봐야 명확한 개념을 알 수 있을 것 같다.struct pcpu_chunk { int* map}dchunk->map[0] = 1;dchunk->map[1] = pcpu_reserved_chunk_limit;dchunk->map[2] = (pcpu_reserved_chunk_limit + dchunk->free_size) | 1;per-cpu chunk 할당 방식embed 방식 large page 를 사용하여 tlb 캐시 효율을 올리는 방식. NUMA 는 각 노드 메모리 별로 할당 lowmem 영역을 사용 (ZONE_NORMAL)page 방식 vmalloc 영역에 최소 페이지 단위로 페이지 할당하여 매핑. chunk 를 노드별로 나누지..

기존 알고리즘 사이트와 다르게, 제출 방식이 굉장히 까다로운 대회였다. 그래서 Practice Round 를 제공해 준듯 하고, 답은 기본적으로 두가지 스텝을 거쳐 제출 할 수 있었다. - Validation 주어진 input file 에 대해 올바른 output file 을 만들어 제출한다. 여기서 통과하면 실제로 제출 할 수 있다.- Submit Validation 보다 큰 테스트케이스와 시간제한을 주고, 코드와 답을 제출해야 한다. 만약 시간제한이 지나면 다시 제출 할 수 없다. 그래서 이 대회의 주의점을 정리하면 다음과 같다.1. 미리 input, output file 처리를 만들어둔다2. 너무 오래걸리는 코드를 만들면 Submit phase 에서 주어진 시간 안에 제출 하지 못할 수 있다3..
4.8 kmalloc 과 vmalloc (p487)4.8.1 kmalloc과 vmalloc 의 특징구분kmallocvmalloc공통점커널에서 페이지 단위가 아닌 메모리를 할당 할당연속된 물리 메모리를 할당가상 메모리로 연속적인 것처럼 보이게 함4.8.2 GFP(Get Free Page) 플래그할당을 시도할 존을 지정페이지 MOBILITY와 장소 hint 관련 플래그워터마크 관련 플래그페이지 회수 관련 플래그액션 관련 플래그복합 GFP 플래그4.8.3 kmalloc 할당슬럽을 사용할때큰 크기나 DMA 요청에 대해서는 버디 시스템으로부터 페이지를 할당 (alloc_pages)그렇지 않은 경우, kmalloc kmem 캐시를 통해 메모리 할당 (slab_alloc)4-151 p491 include/linux/..
- Total
- Today
- Yesterday
- it's called a vrpit
- 에러 위치 찾기
- 잘못된 빨간줄
- Obstacle Avoidance
- Quest2
- hole-punching
- C++
- 코어 남기기
- vr핏
- chrome-extension
- 우리는 vr핏이라고 부릅니다
- 봄날에 스케치
- mysql
- red underline
- 클래스 맴버 변수 출력하기
- SuffixArray
- 카카오
- Reciprocal n-body Collision Avoidance
- RVO
- print shared_ptr class member variable
- Golang
- 면접
- cockroach db
- vrpit
- boost
- 영상 픽셀화 하기
- ad skip
- set value
- Visual Studio
- shared_from_this
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |