導航:首頁 > 物理學科 > linux系統怎麼查物理地址查詢

linux系統怎麼查物理地址查詢

發布時間:2023-01-26 23:03:03

① Linux下怎樣在進程中獲取虛擬地址對應的物理地址

Linux文件目錄中的/proc記錄著當前進程的信息,稱其為虛擬文件系統。在/proc下有一個鏈接目錄名為self,這意味著哪一個進程打開了它,self中存儲的信息就是所鏈接進程的。self中有一個名為page_map的文件,專門用來記錄所鏈接進程的物理頁號信息。這樣通過/proc/pid/page_map文件,允許一個用戶態的進程查看到每個虛擬頁映射到的物理頁

/proc/pid/page_map中的每一項都包含了一個64位的值,這個值內容如下所示。每一項的映射方式不同於真正的虛擬地址映射,其文件中遵循獨立的對應關系,即虛擬地址相對於0x0經過的頁面數是對應項在文件中的偏移量

* /proc/pid/pagemap. This file lets a userspace process find out which
physical frame each virtual page is mapped to. It contains one 64-bit
value for each virtual page, containing the following data (from
fs/proc/task_mmu.c, above pagemap_read):

* Bits 0-54 page frame number (PFN) if present//present為1時,bit0-54表示物理頁號
* Bits 0-4 swap type if swapped
* Bits 5-54 swap offset if swapped
* Bit 55 pte is soft-dirty (see Documentation/vm/soft-dirty.txt)
* Bit 56 page exclusively mapped (since 4.2)
* Bits 57-60 zero
* Bit 61 page is file-page or shared-anon (since 3.5)
* Bit 62 page swapped
* Bit 63 page present//如果為1,表示當前物理頁在內存中;為0,表示當前物理頁不在內存中

在計算物理地址時,只需要找到虛擬地址的對應項,再通過對應項中的bit63判斷此物理頁是否在內存中,若在內存中則對應項中的物理頁號加上偏移地址,就能得到物理地址

通過程序獲取物理地址並驗證寫時拷貝技術

#include <stdio.h>


#include <stdlib.h>


#include <sys/types.h>


#include <unistd.h>


#include <sys/stat.h>


#include <fcntl.h>


#include <stdint.h>


//計算虛擬地址對應的地址,傳入虛擬地址vaddr,通過paddr傳出物理地址
void mem_addr(unsigned long vaddr, unsigned long *paddr)
{
int pageSize = getpagesize();//調用此函數獲取系統設定的頁面大小

unsigned long v_pageIndex = vaddr / pageSize;//計算此虛擬地址相對於0x0的經過的頁面數
unsigned long v_offset = v_pageIndex * sizeof(uint64_t);//計算在/proc/pid/page_map文件中的偏移量
unsigned long page_offset = vaddr % pageSize;//計算虛擬地址在頁面中的偏移量
uint64_t item = 0;//存儲對應項的值

int fd = open("/proc/self/pagemap", O_RDONLY);。。以只讀方式打開/proc/pid/page_map
if(fd == -1)//判斷是否打開失敗
{
printf("open /proc/self/pagemap error ");
return;
}

if(lseek(fd, v_offset, SEEK_SET) == -1)//將游標移動到相應位置,即對應項的起始地址且判斷是否移動失敗
{
printf("sleek error ");
return;
}

if(read(fd, &item, sizeof(uint64_t)) != sizeof(uint64_t))//讀取對應項的值,並存入item中,且判斷讀取數據位數是否正確
{
printf("read item error ");
return;
}

if((((uint64_t)1 << 63) & item) == 0)//判斷present是否為0
{
printf("page present is 0 ");
return ;
}

uint64_t phy_pageIndex = (((uint64_t)1 << 55) - 1) & item;//計算物理頁號,即取item的bit0-54

*paddr = (phy_pageIndex * pageSize) + page_offset;//再加上頁內偏移量就得到了物理地址
}

const int a = 100;//全局常量

int main()
{
int b = 100;//局部變數
static c = 100;//局部靜態變數
const int d = 100;//局部常量
char *str = "Hello World!";

unsigned long phy = 0;//物理地址

char *p = (char*)malloc(100);//動態內存

int pid = fork();//創建子進程
if(pid == 0)
{
//p[0] = '1';//子進程中修改動態內存
mem_addr((unsigned long)&a, &phy);
printf("pid = %d, virtual addr = %x , physical addr = %x ", getpid(), &a, phy);
}
else
{
mem_addr((unsigned long)&a, &phy);
printf("pid = %d, virtual addr = %x , physical addr = %x ", getpid(), &a, phy);
}

sleep(100);
free(p);
waitpid();
return 0;
}

測試結果如下:

全局常量:符合寫時拷貝技術

子進程修改動態內存

*其實想要知道虛擬地址對應的物理地址,通過這樣的方式也可以得到物理地址而不用操作MMU。。。*

以上就是Linux下怎樣在進程中獲取虛擬地址對應的物理地址的全文介紹,希望對您學習和使用linux系統開發有所幫助.

② linux 下通過某個ip查找mac 地址 命令

1.首先,右鍵點擊桌面,選擇「打開終端」,或者按CTRL+Alt+T打開終端。

③ linux下怎麼查看程序中變數的實際物理地址

python3
>>object = 1+2
>>print(id(object))

④ linux嵌入式 怎麼查看內存外設在cpu中的物理地址

查看CPU信息:cat /proc/cpuinfo
查看內存信息:cat /proc/meminfo
查看USB設備:cat /proc/bus/usb/devices
查看鍵盤和滑鼠:cat /proc/bus/input/devices
查看各分區使用情況:df
查看體系結構:busybox uname -a
查看中斷信息:cat /proc/interrupts

⑤ linux怎樣查看字元設備249的物理地址

1、查看cpu型號
#
more
/proc/cpuinfo
|grep
-i
model
2、顯示有幾塊物理網卡
#
lspci
|
grep
Eth
|
wc
-l
3、顯示主板序列號
#
dmidecode
|
grep
'Serial
Number'
4、查看硬碟型號
#
more
/proc/scsi/scsi
|grep
-i
model
5、查看物理CPU的個數
#cat
/proc/cpuinfo
|grep
"physical
id"|sort
|uniq|wc
-l
6、查看邏輯CPU的個數
#cat
/proc/cpuinfo
|grep
"processor"|wc
-l
7、查看CPU是幾核
#cat
/proc/cpuinfo
|grep
"cores"|uniq

⑥ linux中哪個命令可以查看自己的IP地址

查看方法如下:

  1. 打開linux操作系統在進入到界面。

拓展資料:

Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的UNIX工具軟體、應用程序和網路協議。它支持32位和64位硬體。Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多用戶網路操作系統。

Linux操作系統誕生於1991 年10 月5 日(這是第一次正式向外公布時間)。Linux存在著許多不同的Linux版本,但它們都使用了Linux內核。Linux可安裝在各種計算機硬體設備中,比如手機、平板電腦、路由器、視頻游戲控制台、台式計算機、大型機和超級計算機。

⑦ MAC地址查詢 Linux/Unix操作系統mac地址怎麼查

1.首先按住鍵盤上的「開始鍵+R鍵」,然後在彈出的對話框中輸入「CMD」
2.另外還可以依次點擊
開始>所有程序>附件>命令提示符
接下來在彈出的命令提示符窗口中輸入「ipconfig
/all」並按鍵盤上的回車,(註:ipconfig
命令為查看IP配置信息,參數「all」表示查看所有網卡的全部配置信息)
接下來找到自己的物理網卡,在網卡的下面即是網卡的物理地址。

⑧ linux查看物理地址命令

1、 ip -a 、 cat /sys/class/net/ens39/address 其中 HWaddr欄位就是MAC地址,這是最常用的方式.

2、cat /proc/net/arp 查看連接到本機的遠端IP的MAC地址

閱讀全文

與linux系統怎麼查物理地址查詢相關的資料

熱點內容
word中化學式的數字怎麼打出來 瀏覽:459
乙酸乙酯化學式怎麼算 瀏覽:1131
沈陽初中的數學是什麼版本的 瀏覽:1047
華為手機家人共享如何查看地理位置 瀏覽:777
一氧化碳還原氧化鋁化學方程式怎麼配平 瀏覽:610
數學c什麼意思是什麼意思是什麼 瀏覽:1099
中考初中地理如何補 瀏覽:1049
360瀏覽器歷史在哪裡下載迅雷下載 瀏覽:475
數學奧數卡怎麼辦 瀏覽:1078
如何回答地理是什麼 瀏覽:800
win7如何刪除電腦文件瀏覽歷史 瀏覽:839
大學物理實驗干什麼用的到 瀏覽:1185
二年級上冊數學框框怎麼填 瀏覽:1393
西安瑞禧生物科技有限公司怎麼樣 瀏覽:547
武大的分析化學怎麼樣 瀏覽:978
ige電化學發光偏高怎麼辦 瀏覽:1070
學而思初中英語和語文怎麼樣 瀏覽:1299
下列哪個水飛薊素化學結構 瀏覽:1134
化學理學哪些專業好 瀏覽:1221
數學中的棱的意思是什麼 瀏覽:751