묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Arm 아키텍처: 메모리 모델과 배리어 [저자직강 3부-3]
멀티 스레드 스택공간
안녕하세요,멀티 스레드 환경시 하나의 스택 공간을 사용하게 된다고 배웠는데요, arm 아키텍쳐 상에서 스레드 별로 스택을 공유하게 되는 것은 따로 지원이 되지 않는 것 같은데, 운영체제 상에서 전부 구현하게 되나요? 아니면 다른 방법이 있을까요(, arm 을 이용해서)?
-
미해결Arm 아키텍처: 메모리 모델과 배리어 [저자직강 3부-3]
ARM multi core programming
software 개발 관점에서 보았을 때 arm 에서 제공하는 명령어 들을 잘 구성해서(sharability 와 함께)여러 동시성 모델을 구현한 것인가요? 저 명령어 들이 캐시간의 정보 동기화 메커니즘multi core bus 점유 같은 문제들을 다 처리해 주나요?
-
미해결Arm 아키텍처: 메모리 모델과 배리어 [저자직강 3부-3]
리눅스 memory map
https://developer.arm.com/documentation/100166/0001/Programmers-Model/Processor-memory-modelhttps://m.blog.naver.com/sheld2/222021173697 Arm document 랑 St microelectronics 에서 구현한 m4 chip 인데 메모리가 묘하게 다른 것 같아요어디까지 구현했느냐의 차이인가요? 이러면 프로그램 실행에 문제가 없나요?
-
미해결Arm 아키텍처: 메모리 모델과 배리어 [저자직강 3부-3]
SoC
SoC 설계 메모리 맵과 arm 에서 말하는 메모리 맵, 그리고 process 가 보는 virtual memory map 이 다 다른데요, os 단에서 그러면 SoC 메모리 매핑 영역(memory mapped i/o) 을 모아서 운영체제에 알려주면 운영체제가 알아서 table 에 기록하게 되는 것인가요? 또 arm architecture 가 바라보는 memory map 으로 리눅스 커널의 로더 단에서 virtual memory 공간을 바꾸어주게 되는 것인가요? 역할이 다소 헷갈립니다
-
미해결Arm 아키텍처: 가상화(Virtualization) [저자직강 3부-2]
하이퍼바이져 스택
안녕하세요, 하이퍼바이져 단으로 컨트롤이 넘어 오면 프로세스 스택을 쓰게 되는지 궁금합니다. (커널에서 그렇게 하는 것 처럼)아예 새로 만들게 되나요?
-
미해결Arm 아키텍처: 가상화(Virtualization) [저자직강 3부-2]
하이퍼바이져
하이퍼바이져 단의 페이지테이블은 mapping 을 다시한다. 즉, os 단에서 할당해준다고 한 physical memory 는 hypervisor level 에서 보면 가상메모리가 된다.라고 이해하면 되나요? 속도가 많이 느려질 것 같긴 하네요..
-
미해결Arm 아키텍처: 메모리 모델과 배리어 [저자직강 3부-3]
device memory
안녕하세요, device memory region 은가상화가 되었다고 했을 때 translation 이 어떻게 일어나나요? 혹시 그냥 바로 물리 메모리로 링크 되나요? (os 단에서)
-
미해결Arm 아키텍처: 메모리 매니지먼트(MMU) [저자직강 3부-5]
mmu table 위치
안녕하세요mmu 가 page walk 를 한다고 나와 있는데요,mmu 가 multi level page 인 경우 page walk 를 알아서 찾아 가게 설계 되어 있는 건가요?(hardware 단에서 처리?) 어디까지 하드웨어 상에서 "알아서" 처리해서 가져가는지 잘 모르겠습니다..
-
미해결Arm 아키텍처: 메모리 매니지먼트(MMU) [저자직강 3부-5]
mmu page walk
안녕하세요, mmu 가 page walk 할 때 다음 레벨 페이지 주소가 가상주소인가요, 실제주소인가요? 가상주소라면 mmu 를 또 거치게 될 것 같은데, page walk 에서 page fault 가 너무 많이 일어날 수 있을 것 같아요.
-
미해결Arm 아키텍처: 가상화(Virtualization) [저자직강 3부-2]
exception handler 주소
안녕하세요, exception handler 에서 vectors: 라고 붙어있는태그의 주소는 가상주소인가요? 0xFFFF .. 로 시작하는 것으로 보아 가상주소 같은데, 그런데 만약 page fault 가 나게 되면 exception handler 를 실행하는데 시간이 추가로 더 걸려서 좋지 않을 수도 있지 않나요?
-
미해결시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 1부 저자 직강 (2024년 버전)
3.2.2.4 모드 복귀 부분
IRQ 모드에서 슈퍼바이저 모드로 복귀할 때의 SPSR_irq.M에 왜 다시 0x13을 넣어주는지 잘 모르겠습니다. 이미 해당 레지스터는 0x13으로 지정되어 있는데 SPSR_irq가 아니라 SPSR_svc.M에 CPSR.M을 넣고 오히려 CPSR.M을 0x13으로 변경해야하는 것이 아닌가요?
-
미해결시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 1부 저자 직강 (2024년 버전)
Armv8의 Exception Level에서 질문이 있습니다.
svc, hvc, smc와 같은 어셈블리 명령어를 수행하면, 내부적으로 exception이 발생하고 el이 변경된다고 말씀해주셨는데, 여기서 el이 변경된다는 건 하드웨어적으로는 단순히 PSTATE의 EL 비트 필드의 값이 갱신되는 것으로 이해해도 될까요?
-
미해결시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 1부 저자 직강 (2024년 버전)
5.4.3 실습에서 궁금한점이 있습니다.
해당 실습을 진행하던 도중 궁금한점이 있어 이렇게 글 남기게 되었습니다! data abort exception이 발생해서 vector_dabt라는 주소로 분기하게 된 상태에서는 SPSR_abt 레지스터에 이전 동작 모드인 user_mode bit encoding값이 설정이 되어있는 걸 볼 수 있었습니다. 그런데, Data abort를 처리하기 위해 supervisor mode로 진입하는 과정에서 movs pc, lr 명령어를 실행하면 supervisor mode로 진입은 하지만, SPSR_svc 레지스터에는 이전 동작 모드가 로드되지 않은 걸 볼 수 있었는데, 그렇다면 exception이 유발이 되어야만 SPSR_<mode>의 값이 갱신되는 것 인지 단순히 movs, subs와 같은 동작 모드를 변경하는 명령어로는 SPSR이 갱신되지 않는 것 인지 궁금합니다.
-
미해결Arm 아키텍처: 가상화(Virtualization) [저자직강 3부-2]
virtualization 예시
안녕하세요, virtualization hypervisor 도 보통 context switching 기능을 탑재하고 있나요? 자동차 쪽에서 많이 사용된다고 하는데, 어떻게 전환이 되는지 잘 연상이 안 되네요 계기판, 네비게이션 예시를 드셨는데, 계기판 같은 경우 RTOS 구현이 되게 되면 Virtualization context switching 기능이 있으면위험성이 있을 것 같습니다. 또 계기판 기능을 돌다가 네비게이션이 작동하면 계기판이 안돌아서 위험할 것 같은데요..
-
미해결Arm 아키텍처: 가상화(Virtualization) [저자직강 3부-2]
exception handler
exception handler 는 어느 공간에서 실행될까?를 듣고 hypervisor, trusted zone 을 듣고 나니일단 process 가 EL0 에서 실행되고 있었을 때 에는 프로세스 공간에서 스택에 쌓아 나간다는 사실(이게 프로세스 스택인가요, 커널 스택인가요?)을 알았는데요, 이 때 과연 hypervisor , trusted zone 의 level EL2, EL3 에서는 어떻게 처리가 되는지? 궁금해졌습니다.EL0 -> EL1 의 흐름에서는 유저 프로세스 스택에서 다 담을 수 있다고 해도, EL1 이나 EL2, EL3 가 관여하게 되면 프로세스라는 개념이 사실 커널(EL1) 단에서 에러 처리한다는 개념하고는 조금 달라져야 할 것 같아서요,
-
미해결Arm 아키텍처: 가상화(Virtualization) [저자직강 3부-2]
WFE, WFI, HVC
3가지 EL2 로 가는 instruction 이 있다고 했는데요,이 세 가지는 굳이 왜 나누었고,(찾아보니 이 질문은 동 강의 "트랩 명령어 질문" 에 나와 있네요)또 WFE, WFI 에 저전력 기능이 왜 같이 포함되어 있는지 궁금합니다.추가로 저전력모드가 hypervisor 모드 관련해서만 있는 것 같은데 하드웨어적으로 무슨 연관이 있는 건지.. 궁금합니다감사합니다.
-
미해결Arm 아키텍처: 가상화(Virtualization) [저자직강 3부-2]
virtualization
안녕하세요, 가상화에 대해서 질문이 있습니다. 가상화를 하드웨어 단에서 지원을 해준다는 것은, 여러가지 지원을 해준 다는 의미인 것 같습니다. hypervisor 에서 os 를 바꿀 때 각 os 별로 메모리 공간을 관리해주어야 하는 데, 각 os 는 다른 os 의 존재를 모를 테니 마치 context switching 하는 것 처럼 모든 os 의 정보를 백업하고 스위칭 해야 할 것 같은데요.. 이것을 hypervisor 에서 구현하고 있는지 궁금합니다.
-
해결됨한국에서 제일 쉬운 리눅스 커널 강의
current 매크로를 이용할때 sp_el0 를 활용하는 이유
안녕하세요. 좋은강의 감사합니다.설명해주신대로 코드를 보면 sp_el0 를 이용해서 current 주소를 얻어온다는것을 이해할 수 있었습니다. 그런데 문득 sp_el1 도 있을텐데 왜 sp_el0 를 활용한건지 궁금합니다. sp_el0 는 user process 들이 활용하는 sp 이고 sp_el1 은 kernel process 들이 활용하는 sp 로 알고 있는데 요,그런용도가 아니라 그냥 sp_el0 를 모든 process 의 task_struct 의 시작주소를 저장하는 용도로 활용하는걸까요? <arch/arm64/include/asm/current.h>15 static __always_inline struct task_struct *get_current(void) 16 { 17 unsigned long sp_el0; 18 19 asm ("mrs %0, sp_el0" : "=r" (sp_el0)); 20 21 return (struct task_struct *)sp_el0; 22 } <arch/arm64/kernel/entry.S>829 SYM_FUNC_START(cpu_switch_to) 830 mov x10, #THREAD_CPU_CONTEXT 831 add x8, x0, x10 832 mov x9, sp 833 stp x19, x20, [x8], #16 // store callee-saved registers 834 stp x21, x22, [x8], #16 835 stp x23, x24, [x8], #16 836 stp x25, x26, [x8], #16 837 stp x27, x28, [x8], #16 838 stp x29, x9, [x8], #16 839 str lr, [x8] 840 add x8, x1, x10 841 ldp x19, x20, [x8], #16 // restore callee-saved registers 842 ldp x21, x22, [x8], #16 843 ldp x23, x24, [x8], #16 844 ldp x25, x26, [x8], #16 845 ldp x27, x28, [x8], #16 846 ldp x29, x9, [x8], #16 847 ldr lr, [x8] 848 mov sp, x9 849 msr sp_el0, x1 850 ptrauth_keys_install_kernel x1, x8, x9, x10 851 scs_save x0 852 scs_load_current 853 ret 854 SYM_FUNC_END(cpu_switch_to) 855 NOKPROBE(cpu_switch_to)
-
해결됨한국에서 제일 쉬운 리눅스 커널 강의
context switching 을 할때 수행되는 asm 코드 관련 문의 드립니다.
안녕하세요. 강의 잘 보고 있습니다.어리석은 질문일수도 있습니다만 문득 든 생각이라 여쭤봅니다. X0 ~ X18 은 저장 및 복원 하지 않고,X19~X29, SP, LR 만 복원하는 이유가 있을까요? 829 SYM_FUNC_START(cpu_switch_to) 830 mov x10, #THREAD_CPU_CONTEXT 831 add x8, x0, x10 832 mov x9, sp 833 stp x19, x20, [x8], #16 // store callee-saved registers 834 stp x21, x22, [x8], #16 835 stp x23, x24, [x8], #16 836 stp x25, x26, [x8], #16 837 stp x27, x28, [x8], #16 838 stp x29, x9, [x8], #16 839 str lr, [x8] 840 add x8, x1, x10 841 ldp x19, x20, [x8], #16 // restore callee-saved registers 842 ldp x21, x22, [x8], #16 843 ldp x23, x24, [x8], #16 844 ldp x25, x26, [x8], #16 845 ldp x27, x28, [x8], #16 846 ldp x29, x9, [x8], #16 847 ldr lr, [x8] 848 mov sp, x9 849 msr sp_el0, x1 850 ptrauth_keys_install_kernel x1, x8, x9, x10 851 scs_save x0 852 scs_load_current 853 ret 854 SYM_FUNC_END(cpu_switch_to) 855 NOKPROBE(cpu_switch_to)
-
미해결시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 2부 저자 직강 (2024년 버전)
LDM
안녕하세요, ldm 명령어가 수업 중 몇번 등장하는데요,본론은, ldm r13, {r4, r5, r11, r13, pc}에서 r13위치 기준으로 쭉 읽어오는 것 같은데요, (맞겠죠?)이 명령어도 stack 의 pointer 를 바꾸는 것 같은데요, 그럼 사실상 POP 과 같은 명령어라고 보면 되는 건가요?