본문 바로가기 메뉴 바로가기

두찡의 일상

프로필사진
  • 글쓰기
  • 관리
  • 태그
  • 방명록
  • RSS

두찡의 일상

검색하기 폼
  • 분류 전체보기 (131)
    • 개발 (120)
      • 알고리즘 (6)
      • 일상 (51)
      • 병렬프로그래밍 (8)
      • 도트도전기 (12)
      • 코드로 알아보는 ARM 리눅스 커널 TIL (33)
      • arm64 linux 6 분석 (10)
    • 게임근황 (7)
    • 개발 외 일상 (2)
  • 방명록

개발 (120)
c++ 와 typescript 를 통해 알아보는 언어별 generics 의 차이

개요얼마전 타입스크립트 교육을 받으면서, typescript 의 generics 를 다뤘습니다.교육을 받는 중 별 생각없이 c++ 개념으로 템플릿 특수화나 sfinae 같은걸 사용하면 되는게 아닌가? 라는 생각을 했고,문득 언어별로 generics 를 다루는 철학이 다르다는 생각을 했습니다.이를 간단하게 정리해봅니다.c++ 과 typescript 의 generics 공통점공통점은 type 을 변수처럼 사용하고 싶다라는 개념입니다.예를 들어 list 를 만들 때 primitive type 뿐 아니라 내가 만든 구조체나 타입의 리스트를 만들고 싶은 경우 이를 각각 구현하는 것이 아니라 코드 한벌로 구현이 가능합니다. c++template class ListNode { T data; ListNode* next..

개발/일상 2025. 6. 19. 11:03
cpu_uninstall_idmap (setup_arch)

TTBRTranslation Table Base Register가상 주소를 싥제 주소로 매핑시 사용하는 레지스터TTBR0_EL1 : 유저 스페이스Holds the base address of the translation table for the initial lookup for stage 1 of the translation of an address from the lower VA range in the EL1&0 translation regime, and other information for this translation regime.TTBR1: 커널 스페이스Holds the base address of the translation table for the initial lookup for stage..

개발/arm64 linux 6 분석 2025. 6. 1. 14:43
local_daif_restore (setup_arch)

primary cpu 는 커널에 진입할때 모든 exception 이 마스크된 채로 들어옵니다. DAIF = 1111디버깅과(D) SError(A) 를 마스킹 해제 해야 합니다.IF 는 irqchip (gic) 초기화 후 열수 있기 때문에 마스킹 합니다.#define DAIF_PROCCTX_NOIRQ (PSR_I_BIT | PSR_F_BIT)void __init __no_sanitize_address setup_arch(char **cmdline_p){ /* * The primary CPU enters the kernel with all DAIF exceptions masked. * * We must unmask Debug and SError before preemption..

개발/arm64 linux 6 분석 2025. 5. 31. 19:55
SHADOW_CALL_STACK [SCS] (setup_arch)

https://clucle.tistory.com/entry/procS-primaryswitchedhttps://clucle.tistory.com/entry/jumplabel 이전 포스팅에서 다뤘던 scs, jump label 을 사용하여 shadow call stack 을 초기화 합니다.void __init __no_sanitize_address setup_arch(char **cmdline_p){ // scs 초기화 dynamic_scs_init();scs 는 stack pointer 를 레지스터 뿐 아니라, task 구조체에 저장하고 불러옵니다.#ifdef CONFIG_DYNAMIC_SCSDEFINE_STATIC_KEY_FALSE(dynamic_scs_enabled);#endif#ifdef..

개발/arm64 linux 6 분석 2025. 5. 31. 19:42
early_param (setup_arch)

void __init __no_sanitize_address setup_arch(char **cmdline_p){ parse_early_param();early param 이란 어떤것이고, 어떻게 사용하는지 알아보자.early param.init.setup 섹션에 미리 등록한 parameter 가 early param 으로 사용 가능합니다.__setup_start 에 들어갈 수 있도록 매크로로 정의합니다.extern const struct obs_kernel_param __setup_start[], __setup_end[];/* * Only for really core code. See moduleparam.h for the normal way. * * Force the alignment so t..

개발/arm64 linux 6 분석 2025. 5. 31. 19:06
jump_label (setup_arch)

setup_arch jump_label_init 분석// arch/arm64/kernel/setup.cvoid __init __no_sanitize_address setup_arch(char **cmdline_p){ jump_label_init();}jump_label_init구조체 정의// arch/arm/include/asm/jump_label.htypedef u32 jump_label_t;struct jump_entry { jump_label_t code; jump_label_t target; jump_label_t key; };struct static_key { atomic_t enabled;#ifdef CONFIG_JUMP_LABEL/* * Note: * To ma..

개발/arm64 linux 6 분석 2025. 5. 31. 17:00
start_kernel 2 setup_arch

struct mm_struct init_mm = { .mm_mt = MTREE_INIT_EXT(mm_mt, MM_MT_FLAGS, init_mm.mmap_lock), .pgd = swapper_pg_dir,void __init __no_sanitize_address setup_arch(char **cmdline_p){ // vmlinux.lds.S 에 있는 값을 변수로 옮김 setup_initial_init_mm(_stext, _etext, _edata, _end); *cmdline_p = boot_command_line; // Kernel Address Space Layout Randomization kaslr_init(); // fi..

개발/arm64 linux 6 분석 2025. 5. 24. 19:08
start_kernel 1

kernel 을 초기화하는 start_kernel 는 여러 함수로 이루어져있다.우선은 하나씩 분석을 해보자 // stack 의 끝에 overflow detection 을 위해 magic 값을 설정 set_task_stack_end_magic(&init_task); // 시작 cpu 의 (0번) id 를 지정 smp_setup_processor_id(); // 디버그를 위한 lock 과 리스트 초기화 (간단해서 분석 x) debug_objects_early_init(); // notes 영역에서 빌드 id 를 획득해서 변수에 저장 init_vmlinux_build_id(); // cgroup subsystem 초기화 cgroup_init_early();..

개발/arm64 linux 6 분석 2025. 5. 24. 15:20
proc.S __primary_switch

primary_switchprimary_switchSYM_FUNC_START_LOCAL(__primary_switch) // vmlinux.lds.S 에 미리 위치가 정해져있는 reserved_pg_dir, init_idmap_pg_dir 을 x1, x2 인자로 설정 // init_idmap_pg_dir 은 초기에 사용할 페이지 테이블 // reserved_pg_dir 는 나중에 사용할 페이지 테이블 adrp x1, reserved_pg_dir adrp x2, init_idmap_pg_dir bl __enable_mmu adrp x1, early_init_stack mov sp, x1 mov x29, xzr mov ..

개발/arm64 linux 6 분석 2025. 5. 17. 15:59
proc.S __cpu_setup

| mov_q | move an immediate constant into a 64-bit register |arch/arm64/mm/proc.Sisb : 인스트럭션 fetch 됐던걸, 이전 명령 실행 전까지 미룸msr SCTLR_EL1, x0 ; 시스템 제어 레지스터 변경// 파이프라인에는 다음 명령들이 이미 들어왔음!add x1, x1, #1 // 엔디안값이 SCTLR 에서 바뀌었다면?? (정확한 예시인지는 잘 모르겠음) 확인해보고 싶다->msr SCTLR_EL1, x0isbdsb nshdsb: data synchronization barrier: 모든 이전 명령이 끝날때까지 대기nsh: non-shareable: 현재 코어내에서만 동기화tlbi vmalle1가상 주소를 물리 주소로 바꾸기 위해 ..

개발/arm64 linux 6 분석 2025. 5. 10. 15:39
이전 1 2 3 4 ··· 12 다음
이전 다음
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
  • 링크드인
  • 깃허브
TAG
  • Obstacle Avoidance
  • red underline
  • 코어 남기기
  • 면접
  • 영상 픽셀화 하기
  • Visual Studio
  • Reciprocal n-body Collision Avoidance
  • 우리는 vr핏이라고 부릅니다
  • vrpit
  • 잘못된 빨간줄
  • 카카오
  • SuffixArray
  • 에러 위치 찾기
  • 클래스 맴버 변수 출력하기
  • chrome-extension
  • set value
  • Quest2
  • boost
  • shared_from_this
  • vr핏
  • ad skip
  • 봄날에 스케치
  • C++
  • print shared_ptr class member variable
  • cockroach db
  • it's called a vrpit
  • Golang
  • mysql
  • hole-punching
  • RVO
more
«   2025/06   »
일 월 화 수 목 금 토
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
글 보관함

Blog is powered by Tistory / Designed by Tistory

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.