본문 바로가기

정글캠프-WIL/C언어

[C언어] - 운영체제 ptov() 함수


미리 보고 오면 좋은 자료


ptov() 함수란?
물리 주소(Physical Address)를 커널 가상 주소(Kernel Virtual Address)로 변환하는 함수

Why Used?

운영체제에선 메모리를 두 가지 관점으로 봄
구분 의미
물리 주소 (PA) 실제 RAM 주소
가상 주소 (VA) CPU가 사용하는 주소
CPU는 가상 주소만 사용함
하지만, 하드웨어나 일부 시스템 코드는 물리 주소를 다룰 필요가 있음
void *paddr = ...;  // 물리 주소
이걸 그대로 접근하면 CPU는 이해 못함(MMU 때문에)
*MMU (Memory Management Unit)
-> 가상 주소를 물리 주소로 변환하는 CPU 내부 하드웨어

함수 원형

// 물리 주소 -> 가상 주소 변환 함수
void *ptov(uintptr_t paddr);
paddr : physical address (물리 주소)
실제 RAM 기준 주소 ex. 0x1000, 0x2000, 0x12345000

사용 예시

표준 함수는 아니기 때문에 먼저 기준이 되는 커널 가상 주소값을 더하고, 물리 주소 paddr을 받아 결과를 void *로 주소 캐스팅후 반환
#include <stdint.h>
// PHYS_BASE는 0x8004000000와 같이 기준이 되는 가상 커널 주소
void *ptov(uintptr_t paddr)
{
    return (void *)(paddr + PHYS_BASE);
}

 

 

 

 

 

 

 

'정글캠프-WIL > C언어' 카테고리의 다른 글

[C 언어] - memset() 함수  (0) 2026.04.25
[C언어] - va_list 자료형  (1) 2026.04.25
[C언어] - connect() 함수  (0) 2026.04.23
[C언어] - accept() 함수  (0) 2026.04.23
[C언어] - listen() 함수  (0) 2026.04.23