본문 바로가기

RISC-V/레지스터

(4)
[RISC-V] tp 레지스터 (Register)의 핵심 정보 - task_struct Background리눅스 커널은 함수와 자료 구조로 구성되어 있다. 자료 구조 중에서 가장 중요한 것은 무엇일까? 정답은 없지만, 많은 커널 개발자들은 task_struct 구조체라고 답할 것이다. task_struct는 프로세스의 속성 정보를 나타내는 구조체이다. task_struct 구조체의 주소만 알면 커널의 대부분의 정보를 확인할 수 있다. 예를 들면: -모든 프로세스의 task_struct 구조체 주소 -모든 프로세스의 콜 스택 -모든 프로세스별로 오픈한 파일 디스크립터 정보그런데 이러한 task_struct 구조체가 범용 레지스터에서 확인될 수 있다면 어떤 생각이 들까? 아마 다음과 같을 것이다: 디버깅 관점: 디버깅을 매우 효율적으로 할 수 있겠다. 보안 관점: 시스템의 중요한 정보를 레지스..
[Linux Kernel] RISC-V: swapper_pg_dir 변수를 이용한 satp 주소 찾기 배경RISC-V 아키텍처에는 여러 가지 CSR(Control and Status Register) 레지스터가 있습니다. 그중 하나가 satp 레지스터입니다. satp 레지스터의 역할은 무엇일까요? 첫 번째(1st) 페이지 테이블 엔트리의 주소를 저장하는 역할을 합니다. 만약 TRACE32 같은 디버깅 장비를 사용하면 satp 레지스터 값을 직접 확인할 수 있습니다. 하지만 TRACE32 없이 리눅스 커널 내부에서 satp 값을 확인하는 방법은 무엇일까요? 이 글에서는 그 방법에 대해서 상세히 다룹니다. 리눅스 커널: swapper_pg_dirsatp 값(첫 번째 페이지 테이블의 엔트리 주소)을 확인하려면 swapper_pg_dir 전역 변수의 가상 주소를 먼저 알아야 합니다. 왜 swapper_pg_di..
[RISC-V] CSR (Control and Status) 레지스터 소개 RISC-V 아키텍처는 시스템의 세부 속성을 설정할 수 있는 CSR(Control and Status) 레지스터를 제공합니다. 다음과 같은 모든 속성은 CSR 레지스터를 통해 설정합니다:익셉션 벡터 베이스 주소 설정MMU를 통한 가상 메모리 설정주요 Privilege Mode에서 트랩되는 방식CSR(Control and Status) 레지스터는 시스템의 주요 속성을 설정하므로 부팅 과정에서 대부분 설정됩니다. CSR 레지스터를 소개했으니 CSR 레지스터에 접근할 수 있는 Privilege Mode에 대해 알아봅시다. Privilege Mode과 CSR 레지스터 CSR 레지스터의 이름을 보면 접두사로 m 혹은 s가 보입니다. 주요 CSR 레지스터의 목록은 아래와 같습니다: Machine Mode: msta..
[RISC-V] 레지스터: 범용 레지스터 RISC-V 아키텍처에서 레지스터를 배우려면 어떤 내용을 알아야 할까요? RISC-V 아키텍처에서는 다음과 같은 레지스터를 제공합니다.범용 레지스터CSRs(Control and Status) 레지스터범용 레지스터먼저 범용 레지스터에 대해 알아 봅시다. 범용 레지스터는 어셈블리 명령어의 입력과 출력을 저장하는 용도로 사용됩니다. 개념 상 C 언어의 변수와 비슷한 개념입니다. 어셈블리 명령어를 분석하실 때 반드시 레지스터를 알아야 합니다. RISC-V 아키텍처에서 정의된 범용 레지스터의 목록은 다음과 같습니다.  Armv8 아키텍처와 비슷하게 레지스터의 갯수는 X0에서 X31까지 있습니다. 레지스터의 갯수가 많은 편입니다. 대부분 어셈블리 명령어의 인풋과 출력 결과를 저장하기 위해 사용되는데, 함수가 호출될..