8 인터럽트8.1 인터럽트의 개념8.1.1인터럽트란?프로세서(cpu, gpu ..) 에 즉각적인 주의를 요청하기 위한 시그널하드웨어나 소프트웨어에서 생성8.1.2 인터럽트 컨트롤러여러 디바이스들이 보내는 인터럽트를 인터럽트 컨트롤러에서 멀티플렉싱(하나의 통신 채널을 통해 여러 개의 신호나 데이터 스트림을 동시에 전송하는 기술) 한다.인터럽트 컨트롤러의 역할멀티플렉싱 및 라우팅인터럽트 우선순위 지정인터럽트 마스킹인터럽트 컨트롤러를 여러개 사용하기도 한다. 종속 구조, 계층 구조를 사용.8.2 리눅스 인터럽트 서브 시스템리눅스는 인터럽트 컨트롤러와 신호를 추상화 하여, 아키텍처와 플랫폼에 상관없이 동일한 디바이스 드라이버로 인터럽트 처리가 가능하다.8.2.1 include/linux/irq.h irq_chi..
7.3 Secondary Bootingboot cpu 로 커널을 초기화 한 후 non-boot cpu 를 초기화7.3.1 ARM: SMP 오퍼레이션bootcpu 가 smp cpu 를 init 후 boot_secondary 호출ARM 의 SMP 오퍼레이션cpu_kill, cpu_die, cpu_can_disable, cpu_disable7.3.2 AEM64: cpu 오퍼레이션ARM64 커널을 활용하는 플랫폼은 부팅을 위해 펌웨어나 다른 인터페이스가 필요한 경우가 생겨, SMP 오퍼레이션을 사용하지 않는다.기존 ARM 의 smp_operations 을 사용하지 않고 cpu_operations 구조체를 사용한다.ARM64 의 cpu operation 종류디바이스 트리에따라 결정됨. cpu_operations ..
7 smp 와 cpu topologySMP각각의 코어가 동일한 메모리 인터페이스를 공유하며, 동등한 액세스 권한을 얻는다.태스크들은 모든 코어에서 동시에 실행될 수 있다.고려사항cache coherencytask migrationexplicit parallelism: 유저가 병렬처리를 실제로 제어자원 동기화7.1 SMP 를 위한 커널 지원여러 cpu 를 상용하며 소비전력이 증가, 전력 관리의 필요성이 높아짐cpu 토폴로지IPC 인터페이스cpu hotplugcpufre/cpuidle : cpu 부하에 따라 성능과 전력 균형을 유지7.2 cpu 토폴로지토폴로지 : 물리적인 배치의 형태로 이루어진 구조를 설명하는 것.멀티코어 cpu 를 추상화하기 위해 구성한다.Hardware 구성클러스터코어쓰레드리눅스 커널에..
6.3 CFS(Completely Fair Scheduling)SCHED_NORMAL, SCHED_BATCH, SCHED_IDLE 정책을 사용하는 태스크를 처리하는 스케줄러6.3.5 스케줄링 엔티티의 실행시간 관리하기실제 실행시간 : exec_start, sum_exec_start가상 실행시간 : vruntime, min_vruntime6-38 kernel/sched/fair.c update_currcurrent task 의 sched_entity 와 run queue 의 런타임 정보 갱신static void update_curr(struct cfs_rq *cfs_rq){ struct sched_entity *curr = cfs_rq->curr; curr->exec_start = now; //..
6.3 CFS(Completely Fair Scheduling)SCHED_NORMAL, SCHED_BATCH, SCHED_IDLE 정책을 사용하는 태스크를 처리하는 스케줄러6.3.1 태스크를 런큐에 삽입하기레드 블랙 트리에 enqueue6-23 kernel/sched/fair.c enqueue_task_fairstatic void enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags){ struct cfs_rq *cfs_rq; struct sched_entity *se = &p->se; for_each_sched_entity(se) { // 내 se 부터 부모 se 를 순회 if (se->on_rq) // se ..
6.2.6 태스크 깨우기: try_to_wake_up (ttwu)잠들어있던 task 가 깨우기에 적절한 실행 상태인지 체크하고 실행할 cpu 를 결정6-13 kernel/sched/core.c try_to_wake_up태스크가 이전 실행되던 cpu 에서 wakeup새로운 cpu 에서 wakeuptry_to_wake_up { ttwu_remote 먼저 시도 6-14 ttwu_queue 6-15}6-14 kernel/sched/core.ctask 가 runqueue 에 이미 들어가있는 상태라면, 현재 task 가 선점할 수 있는지 확인후 스케줄링 요청static int ttwu_remote(struct task_struct *p, int wake_flags){ if (task_on_rq_queued..
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_..
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 가 쓰여..
- Total
- Today
- Yesterday
- Visual Studio
- 에러 위치 찾기
- shared_from_this
- print shared_ptr class member variable
- set value
- 잘못된 빨간줄
- Quest2
- RVO
- vr핏
- C++
- ad skip
- 코어 남기기
- it's called a vrpit
- 봄날에 스케치
- red underline
- 카카오
- vrpit
- boost
- Reciprocal n-body Collision Avoidance
- 면접
- 우리는 vr핏이라고 부릅니다
- cockroach db
- Golang
- Obstacle Avoidance
- 클래스 맴버 변수 출력하기
- 영상 픽셀화 하기
- hole-punching
- mysql
- SuffixArray
- chrome-extension
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 |
30 | 31 |