1. 程式人生 > >【linux】頁表的簡單理解!!!

【linux】頁表的簡單理解!!!

在使用的計算機記憶體(4G)上面使用者可以使用的記憶體只有0~3G,3~4G是系統核心使用的區域。
這裡寫圖片描述

但是在實體記憶體上面,任何的區域和位置都是可讀可寫操作的,假如程序直接訪問的是實體記憶體,那麼系統就會存在很大的不安全性。

頁表
頁表的存在很好的協調了實體記憶體和虛擬記憶體,從而很好的提高系統的安全性。
在一個程序裡面使用的記憶體可能是很少的一部分,但是存在的實際記憶體確實很大的,所以在使用頁表的時候可能會對映很小的一部分。

這裡寫圖片描述

由於每個程序都存在自己的頁表資料結構,那麼很有可能在相同的虛擬記憶體上面看到不一樣的資料,那時候因為在使用者看到的記憶體地址都是虛擬地址,而資料儲存是在實體記憶體,實體地址的不同則資料就會不同。

多級頁表

假如在系統裡面,實體記憶體和虛擬記憶體是一一對應的,那麼在程序空間裡面就會存在很多的頁表,同時也會佔據很多的空間,那麼解決這個問題就出現了多級頁表。

liunx裡面使用的4級頁表:
這裡寫圖片描述

在計算機系統體系結構裡面,將頁表劃分成不同的項,從而不同的項儲存地址的不同位。
- cr3裡面儲存的是程序的PID

地址的翻譯過程:
- bit22~bit31作為頁目錄索引項,在cr3裡面找到相應的頁目錄項
- bit12~bit21作為尋找到的頁目錄項的頁表索引,在頁表項裡面找到相應的頁表
- bit0~bit11作為頁表索引項,在頁內找到也得偏移量和頁得到相應的實體地址

所以在程序進行替換的時候只需要將cr3的指向替換即可

相關推薦

linux簡單理解

在使用的計算機記憶體(4G)上面使用者可以使用的記憶體只有0~3G,3~4G是系統核心使用的區域。 但是在實體記憶體上面,任何的區域和位置都是可讀可寫操作的,假如程序直接訪問的是實體記憶體,那麼系統就會存在很大的不安全性。 頁表 頁表的存在很好的協調了

Linux實現一個簡單的shell

1.shell原理 shell就是運用程式替換的原理進行實現的。 何為程式替換? 假如作業系統正在執行某一個程式,然後我們利用程式替換函 數指定一個新的程式,讓作業系統去執行我們新指定的程式。也就是這樣一種情形下,我們fork一個程序,如果for

LinuxCentos6.9簡單搭建LAMP

關閉centos6.9防火牆 開啟centos6.9命令列輸入 service iptables stop  setenforce 0 安裝環境 1、 安裝vim命令列 yum install vim 2、安裝apache web伺服器軟體 yum i

Linux設計模式-----簡單工廠模式

概念:簡單工廠模式即,只需要輸入例項化物件的名稱,工廠類就可以例項化出來需要的類。 核心:實現工廠模式的核心就是多個派生類public繼承基類,同時根據使用者的需求在簡單工廠類裡面例項化基類的物件,從而根據基類裡面的虛擬函式來實現對派生類的函式呼叫,同時實現多

Linuxvim的簡單配置

vim配置: Linux自帶的vim配置過於簡陋,不太方便操作,下面是一個最簡單的vim配置。 首先在你的檔案中查詢一個.vimrc,如若沒有,touch一個.vimrc(不能忽略"."的存在),即: 注意:在當前使用者的主目錄下進行配置的只對當前使用者有效。 再將以下簡

Linux必會 常用又簡單的10個命令

目錄 一、cp 複製檔案或目錄 二、mv 為檔案/目錄改名、或移動檔案/目錄的位置 三、rm 刪除一個檔案或目錄 四、ls 顯示指定目錄下的內容 五、touch 建立檔案和修改檔案或目錄的時間屬性 六、mkdir 建立目錄 七、su 與 su - 與sudo 切換使用者身

Linuxmalloc和free底層的簡單實現

從作業系統角度來看,程序分配記憶體有兩種方式,分別由兩個系統呼叫完成:brk和mmap(當然在這裡是不考慮共享記憶體) brk是將資料段(.data)的最高地址指標_edata往高地址推; mmap是在程序的虛擬地址空間中(堆和棧中間,稱為檔案對映區域的地方

C單鏈簡單實現和應用

在單鏈表裡面,每個節點包含一個指向下一個節點 的指標。連結串列的最後一個節點的指標欄位是一個值為NULL的指標,他的作用就是提示連結串列後面不再有其他的節點。在你找到連結串列的第一個節點的時候呼叫節點裡面的指標就可以依次訪問剩下所有的節點。為了記住連結串列的起始位置,可以用

Linux關於理解fork()函式的簡單例子

1.fork()函式 fork()是一個系統呼叫,用於建立程序。建立的這個程序與原來程序幾乎完全相同。這個新產生的程序稱為子程序。一個程序呼叫fork()函式後,系統先給新的程序分配資源,例如儲存資料和程式碼的空間。然後把原來的程序的所有值都複製到新的新程序中,

linuxlinux 環境下 安裝禪道(轉載) -- 跟web服務器無關,無視apache、nginx

sdn php 修改 鏈接 net 壓縮 操作 tps 數據庫 參考文章 鏈接 :https://blog.csdn.net/xinxin19881112/article/details/46813991 講的非常完美、透徹,不像其他的文章,都是抄襲的,沒一點註意事項和自己

Linuxlinux常用幾個基本命令 小白專區簡單易懂

ls -l 17. 命令補全 linu 刪除目錄 poweroff 環境 密碼 family 顯示日期的命令 date顯示日歷的命令 cal -s, --hctosys以硬件時鐘為準,校正系統時鐘hwclock,clock:顯示硬件時鐘 -w, --sy

Linux- 對find,xargs,grep和管道的一些理解

問題 相信大家都知道在目錄中搜索含有固定字串檔案的命令: find . -name '*.py' |xargs grep test 剛開始的時候,我不熟悉xargs命令,所以直接使用的命令是: find . -name '*.py' |grep test 結果並不是自己所期望的。

C 轉移(理論與實踐)(實現一個簡單的計算器)

首先借用《C 與指標》上對於轉移表的解釋,然後我們自己程式設計序操作下: 轉移表最好用個例子來解釋。下面的程式碼段取自一個程式,它用於實現一個袖珍式計算器。程式的其他部分已經讀入兩個數(op1和op2

Linux 通用的vim簡單配置方法

【 Linux 】Vim的基本配置以及出現問題解決(su認證失敗)上次,我用這篇博文的方法去配置了下我的vim,但是後來使用的使用出現了一個問題,就是我必須首先通過命令su進入超級使用者狀態下才能使用這

linuxlinux:nginx 簡單web配置設定使用示例

目錄 一、一個簡單的Nginx轉發例子 二、例子2(暴露介面,但隱藏web專案的根目錄) 三、例子3 檔案對映 一、一個簡單的Nginx轉發例子 (1)需求 ①簡訊伺服器列表三臺,提供服務的地址如下: http://192.168.88.21:8091/smsserv

原創實現一個簡單的移動端左右滑動翻+ 點選下標翻 利用:HTML5+CSS+Js

//【如何做一個簡單的手機端頁面的翻頁】//第一步:建立移動端頁面內  HTML + CSS  【注】可用彈性佈局   但需要注意的是  外層盒子的定位//第二步: 思考問題  要實現怎樣的效果?//1. 手指滑動時觸發事件【左右】兩個方向  //2.點選footer部分的下

Linux如何簡單快捷的將CentOS 6.x的核心升級到3.10版本

在安裝Docker時,一般會要求Linux系統的核心版本在3.8以上,因為太低會導致Docker執行不流暢等問題。但是,一般CentOS 6.x系統的核心大多是2.6版本,需要升級到3.10。網上有一些教程,例如http://elrepo.org/tiki/tiki-inde

Linux深入理解HTTP協議

本文參考自: 原文地址 基本概念及作用 首先HTTP協議屬於應用層協議,應用層協議就是我們程式設計師自己定協議,但如果每次都自己定麻煩並且很容易出錯,所以有了一些現成的(HTTP,DNS)等,所以大多是直接拿來用就行,而應用層的作用就是雙方達成某種約定,一段按照約

Linux配置一個強大的Vim

配置好的vim如圖: 但是我配置的不是很強大,但是夠用!!! 配置vim第一步 - 進入到`~/.vimrc`這個檔案裡面 - 執行 `vim ~/.vimrc`進入配置檔案 這個檔案是linux裡面使用者自己配置的檔案

Linux程序組、作業、回話、守護程序的基本概念

程序組 每一個程序在建立的時候就有自己的程序ID,同時也有自己的ID(PGID)。一個程序組,可以含有一個或者多個程序,程序組也有自己的ID,通常是程序組裡面第一個程序的ID。 程序組的特點: 每一個程序組有一個組長程序,程序組長的ID等於程序組ID 程