9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
學習啦>學習電腦>網絡知識>網絡基礎知識>

物理地址空間是什么

時間: 春健736 分享

  地址空間(address space)表示任何一個計算機實體所占用的內存大小。比如外設、文件、服務器或者一個網絡計算機。地址空間包括物理空間以及虛擬空間。今天學習啦小編給大家介紹一下物理地址空間的相關知識。供大家參考!

  物理地址空間參考如下

  物理存儲器和存儲地址空間是兩個不同的概念。但是由于這兩者有十分密切的關系,而且兩者都用B、KB、MB、GB來度量其容量大小,因此容易產生認識上的混淆,弄清這兩個不同的概念,有助于進一步認識主存儲器和用好主存儲器。

  物理存儲器是指實際存在的具體存儲器芯片。如主板上裝插的主存條和裝載有系統的BIOS的ROM芯片,顯示卡上的顯示RAM芯片和裝載顯示BIOS的ROM芯片,以及各種適配卡上的RAM芯片和ROM芯片都是物理存儲器。

  存儲地址空間是指對存儲器編碼(編碼地址)的范圍。所謂編碼就是對每一個物理存儲單元(一個字節)分配一個號碼,通常叫作“編址”。分配一個號碼給一個存儲單元的目的是為了便于找到它,完成數據的讀寫,這就是所謂的“尋址”(所以,有人也把地址空間稱為尋址空間)。

  CPU在操控物理存儲器的時候,把物理存儲器都當作內存來對待,把它們總的看作一個由若干存儲單元組成的邏輯存儲器,這個邏輯存儲器就是我們所說的內存地址空間。

  有的物理存儲器被看作一個由若干存儲單元組成的邏輯存儲器,每個物理存儲器在這個邏輯存儲器中占有一個地址段,即一段地址空間。CPU在這段地址空間中讀寫數據,實際上就是在相對應的物理存儲器中讀寫數據。

  地址空間的大小和物理存儲器的大小并不一定相等。舉個例子來說明這個問題:某層樓共有17個房間,其編號為801~817。這17個房間是物理的,而其地址空間采用了三位編碼,其范圍是800~899共100個地址,可見地址空間是大于實際房間數量的。

  對于386以上檔次的微機,其地址總線為32位,因此地址空間可達2的32次方,即4GB。但實際上我們所配置的物理存儲器通常只有1MB、2MB、4MB、8MB、16MB、32MB等,遠小于地址空間所允許的范圍。

  Linux用戶空間訪問物理地址

  有時候因為項目需要,需要在Linux userspace 讀寫訪問實際物理地址。

  一)用戶空間可以直接通過打開 /dev/mem 設備文件,然后mmap() 影射進行訪問

  [cpp] view plain?

  static int read_type()

  {

  void * map_base;

  FILE *f;

  int type,fd;

  #define READ_REG32(reg) ( *((volatile int *) (reg)) )

  #define ALLOC_SIZE (1024)

  fd = open("/dev/mem", O_RDWR | O_SYNC);

  if (fd) {

  printf("Success to open /dev/mem fd=%08x\n", fd);

  }

  else {

  printf("Fail to open /dev/mem fd=%08x\n", fd);

  }

  map_base = mmap(0, ALLOC_SIZE, PROT_READ, MAP_PRIVATE, fd, 0x35004000);

  type = READ_REG32(map_base + 0x20);

  close(fd);

  munmap(map_base, ALLOC_SIZE);

  printf("reg32[%08x] = value[%08x] \n", map_base, type);

  type = (type & ( 1 << 27 )) >> 27 ;

  printf("reg32[%08x] = value[%08x] \n", map_base, type);

  return type;

  }

  mmap,通過內核建立一個虛擬地址到物理地址的映射,然后通過這一虛擬地址就可以在用戶空間訪問真實的物理地址了

  mmap() 其中有幾個參數需要說明:

  PROT_READ 區域可讀;

  PROT_WRITE 區域可寫;

  MAP_SHARED 對映射區域的寫入數據會復制回文件內, 而且允許其他映射該文件的進程共享。

  在Android 4.4上實際運行的結果:

  編譯生成的用戶空間可執行程序,需要root user權限才能運行。即使程序本身已經是 rwx-rwx-rwx權限。

  mmap()中映射的緩沖區必須是 PAGE size 的整數倍。 如果不是,會產生segmentation fault。

  實際訪問的物理地址如果不是恰好是PAGE size 的整數倍,必須要對mmap()返回的映射基地址加上對應的偏移量,得到最終的影射后地址。

  二)用戶空間驅動程序

  如果用戶空間可以訪問實際物理地址,則可以更進一步實現用戶空間的硬件驅動程序。

  用戶空間驅動的優點:

  完整的 C 庫可以連接. 驅動可以進行許多奇怪的任務, 不用依靠外面的程序(實現使用策略的工具程序, 常常隨著驅動自身發布).

  程序員可以在驅動代碼上運行常用的調試器, 而不必走調試一個運行中的內核的彎路.

  如果一個用戶空間驅動掛起了, 你可簡單地殺掉它. 驅動的問題不可能掛起整個系統, 除非被控制的硬件真的瘋掉了.

  用戶內存是可交換的, 不象內核內存. 一個不常使用的卻有很大一個驅動的設備不會占據別的程序可以用到的 RAM, 除了在它實際在用時.

  一個精心設計的驅動程序仍然可以, 如同內核空間驅動, 允許對設備的并行存取.

  如果你必須編寫一個封閉源碼的驅動, 用戶空間的選項使你容易避免不明朗的許可的情況和改變的內核接口帶來的問題.

  用戶空間的設備驅動的方法有幾個主要缺點:

  中斷在用戶空間無法用. 在某些平臺上有對這個限制的解決方法, 例如在 IA32 體系上的 vm86 系統調用.

  只可能通過內存映射 /dev/mem 來使用 DMA, 而且只有特權用戶可以這樣做.

  存取 I/O 端口只能在調用 ioperm 或者 iopl 之后. 此外, 不是所有的平臺支持這些系統調用, 而存取/dev/port可能太慢而無效率. 這些系統調用和設備文件都要求特權用戶.

  響應時間慢, 因為需要上下文切換在客戶和硬件之間傳遞信息或動作.

  更不好的是,

  如果驅動已被交換到硬盤, 響應時間會長到不可接受. 使用 mlock 系統調用可能會有幫助, 但是常常的你將需要鎖住許多內存頁, 因為一個用戶空間程序依賴大量的庫代碼. mlock, 也, 限制在授權用戶上.

  最重要的設備不能在用戶空間處理, 包括但不限于, 網絡接口和塊設備.

  如你所見, 用戶空間驅動不能做的事情畢竟太多. 感興趣的應用程序還是存在: 例如, 對 SCSI 掃描器設備的支持( 由 SANE 包實現 )和 CD 刻錄器 ( 由 cdrecord 和別的工具實現 ). 在兩種情況下, 用戶級別的設備情況依賴 "SCSI gneric" 內核驅動, 它輸出了低層的 SCSI 功能給用戶程序, 因此它們可以驅動它們自己的硬件.

  一種在用戶空間工作的情況可能是有意義的, 當你開始處理新的沒有用過的硬件時. 這樣你可以學習去管理你的硬件, 不必擔心掛起整個系統. 一旦你完成了, 在一個內核模塊中封裝軟件就會是一個簡單操作了.

  學習啦小編介紹了物理地址空間的相關知識,希望你喜歡。

579780 主站蜘蛛池模板: 亚洲av无码一区二区三区网站| 久久精品国产99亚洲精品| 亚洲国产精品第一区二区| 国产永久免费高清在线观看| 亚洲成人精品综合在线| 国产综合色产在线精品| 日韩精品国产二区三区| 成人免费无码视频在线网站| 一本无码在线观看| 国产精品美女黑丝流水| 综合亚洲网| 国产成人久久精品二三区| 国产一区二区三区国产视频 | 变态另类视频一区二区三区| 午夜av高清在线观看| 无码抽搐高潮喷水流白浆| 亚洲国产日韩精品久久| 99久久国产综合精品成人影院| 国产最新AV在线播放不卡| 亚洲一区二区约美女探花| 亚洲乱码一二三四区国产| 久久夜色国产噜噜亚洲av| 国产精品多p对白交换绿帽| 国产欲女高潮正在播放| 人妻精品久久久无码区色视| 日本视频一两二两三区| 激情六月丁香婷婷四房播| 色欲AV无码一区二区人妻| 日韩卡一卡2卡3卡4卡| 日韩视频一区二区三区视频| 国产av中文字幕精品| 少妇高潮水多太爽了动态图| 日韩精品国产二区三区| 尹人香蕉久久99天天拍| 亚洲人成人网站色www| 国产精品一区二区AV| 国产明星精品无码AV换脸| 久色伊人激情文学你懂的| 欧美性xxxxx极品| 4399理论片午午伦夜理片| 人妻中文字幕不卡精品|