深入淺出記憶體管理--頁描述符(Page)
核心中採用struct page來描述實體記憶體頁,它的主要成員如下(非全部成員):
- unsigned long flags;
標誌位,核心中每個page的狀態可以由此標誌位來表示,列舉幾個標誌位:
PG_locked 頁被鎖定,比如在磁碟I/O操作中涉及到的頁,不能被頁框回收演算法回收。
PG_reserved 頁留給核心程式碼或者沒有使用,這種頁是不受記憶體管理系統用於分配的,所以不能被回收演算法回收。
PG_dirty 表示頁已經被修改
PG_lru 頁在活動或者非活動頁連結串列中
PG_active 頁在活動頁連結串列中
- atomic_t _count;
頁被引用的計數器,如果為-1代表該頁空閒,每被一個程序引用該計數器就加1。 - atomic_t _mapcount;
頁框中的頁表項計數,該成員在頁框回收時會用到,用於反向對映查詢並釋放對應的頁表項。 - struct address_space* mapping;
當頁被作為“對映頁”或者作為匿名頁時使用。 - struct list_head lru;
這是一個連結串列頭,用於把該頁加入都lru(最近最少使用)連結串列中,作為頁面回收時使用。
相關推薦
深入淺出記憶體管理--頁描述符(Page)
核心中採用struct page來描述實體記憶體頁,它的主要成員如下(非全部成員): unsigned long flags; 標誌位,核心中每個page的狀態可以由此標誌位來表示,列舉幾個標誌位: PG_locked 頁被鎖定,比如在磁碟I/O操作中涉及到的頁,不
linux 記憶體管理---頁框回收(十)
為什麼需要頁回收?linux的設計哲學之一:儘可能多的使用記憶體,比如儘可能的多使用memory cache,disk cache,因為這在系統負載比較小時,能夠提升系統性能,但是隨著cache越來越多
進程管理—進程描述符(task_struct)
umask 之間 css_ linux平臺 contexts cor 順序 unlock code http://blog.csdn.net/qq_26768741/article/details/54348586 當把一個程序加載到內存當中,此時,這個時候就有了進程,關於
深入淺出記憶體管理--頁表的建立
頁表的建立 Linux在啟動過程中,要首先進行記憶體的初始化,那麼就一定要首先建立頁表。我們知道每個程序都擁有各自的程序空間,而每個程序空間又分為核心空間和使用者空間。 以arm32為例,每個程序有4G的虛擬空間,其中0-3G屬於使用者地址空間,3G-4G屬於核心地址空間,核心地址空
Linux原始碼解析-記憶體描述符(mm_struct)(轉)
轉自 1.簡介 一個程序的虛擬地址空間主要由兩個資料結構來描述。一個是最高層次的:mm_struct(定義在mm_types.h中),一個是較高層次的:vm_area_structs。最高層次的mm_struct結構描述了一個程序的整個虛擬地址空間。較高層次的結構vm
linux一切皆檔案之Unix domain socket描述符(二)
一、知識準備 1、在linux中,一切皆為檔案,所有不同種類的型別都被抽象成檔案(比如:塊裝置,socket套接字,pipe佇列) 2、操作這些不同的型別就像操作檔案一樣,比如增刪改查等 3、主要用於:執行在同一臺機器上的2個程序相互之間的資料通訊 4、它們和網路檔案描述符非常相似(比如:TCP
linux一切皆檔案之tcp socket描述符(三)
一、知識準備 1、在linux中,一切皆為檔案,所有不同種類的型別都被抽象成檔案(比如:塊裝置,socket套接字,pipe佇列) 2、操作這些不同的型別就像操作檔案一樣,比如增刪改查等 二、環境準備 元件 版本
什麼是描述符(descriptor)
只要是定義了__get__()、__set()__、__delete()__中任意一個方法的物件都叫描述符。那描述符協議是什麼呢?這個協議指的就是這三個方法。 descr.__get__(self, obj, type=None) --> value descr.__set__(
linux一切皆檔案之檔案描述符(一)
一、知識準備 1、在linux中,一切皆為檔案,所有不同種類的型別都被抽象成檔案。如:普通檔案、目錄、字元裝置、塊裝置、套接字等 2、當一個檔案被程序開啟,就會建立一個檔案描述符。這時候,檔案的路徑就成為了定址系統,檔案描述符成為了位元組流的介面 3、相對於普通檔案這類真實存在於檔案系統中的檔案,tcp
Linux記憶體管理之slab機制(概述)
通過前面所有程式碼的分析和總結,已經把各個部分熟悉了一遍,在此對Linux核心中slab機制做最後的總結。 夥伴系統演算法採用頁作為基本記憶體區,這適合於大塊記憶體的請求。對於小記憶體區的申請,比如說幾十或幾百個位元組,我們用slab機制。 Slab分配器把物件分組放進快取
Linux下 檔案描述符(fd)與 檔案指標(FILE*)
一、檔案描述符(fd) 我們都知道在Linux下一切皆檔案。當然裝置也不例外,如果要對某個裝置進行操作,就不得不開啟此裝置檔案,開啟檔案就會獲得該檔案的檔案描述符fd( file discriptor), 它就是一個很小的整數,每個程序在PCB(Process
簡析檔案描述符(fd)和FILE結構體的關係
檔案描述符(fd) 檔案描述符(file descriptor)用來訪問檔案。檔案描述符是非負整數。開啟現存檔案或新建檔案時,核心會返回一個檔案描述符。讀寫檔案也需要使用檔案描述符來指定待讀寫的檔案。 通常情況下,將一個程式從硬碟載入到記憶體後,這個程式就化
Python描述符(descriptor)詳解及應用場景
Python中包含了許多內建的語言特性,它們使得程式碼簡潔且易於理解。這些特性包括列表/集合/字典推導式,屬性(property)、以及裝飾器(decorator)。對於大部分特性來說,這些“中級”的語言特性有著完善的文件,並且易於學習。 但是這裡有個例外,那就是描
探索檔案描述符(fd)與FILE結構體之間的關係
檔案描述符(fd) 對於linux而言,所有對裝置(對於linux而言,一切皆檔案)和檔案的操作都使用檔案描述符來進行的。 檔案描述符是一個非負的整數,它是一個索引值,指向核心中每個程序開啟檔案的記錄表。 當開啟一個現存檔案或建立一個新檔案時,核心就向程序返回
程序與程序描述符(task_struct)
一、 程序 程序(Process) 計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。在早期面向程序設計的計算機結構中,程序是程式的基本執行實體;在當代面向執行緒設計的計算機結構中,程序是執行緒的容器。程
圖像特征提取——韋伯局部描述符(WLD)
分享圖片 認識 角度 width 利用 進行 範圍 來看 strong 一、原理及概述 韋伯局部描述符(WLD)是一種魯棒性好、簡單高效的局部特征描述符。WLD由兩個部分組成:差分激勵和梯度方向。 其具體算法是對於給定的一幅圖像,通過對每個像素進行這兩個分量的計
Linux進程描述符task_struct結構體詳解--Linux進程的管理與調度(一)【轉】
mage ase 設備 兩種 等價 而且 當前 結構體 技術 Linux內核通過一個被稱為進程描述符的task_struct結構體來管理進程,這個結構體包含了一個進程所需的所有信息。它定義在include/linux/sched.h文件中。 談到task_struct結構體
深入淺出記憶體管理-Linux核心頁表
核心頁表實現 新版本的Linux核心程式碼中支援4級對映,那麼一個虛擬地址是包含有如下幾個部分: PGD:Page Global Directory,L0級別頁表 PUD:Page Upper Directory,L1級別頁表 PMD : Page Middle Direc
深入淺出記憶體管理--高階記憶體對映之pkmap(永久對映)
我們知道系統中的高階記憶體是不能作為直接對映區對映到核心空間的,那麼我們想要使用它怎麼辦呢?前面的文章我們已經有過相關的介紹,可以使用三種方法,分別是pkmap(永久對映)/fixmap(臨時固定對映)/vmlloc,本文主要介紹pkmap,也就是永久對映。 入口函式 首先我們來
深入淺出記憶體管理-- 夥伴系統(buddy system)
buddy system 夥伴系統是核心中用來管理實體記憶體的一種演算法,我們知道記憶體中有一些是被核心程式碼佔用,還有一些是被特殊用途所保留,那麼剩餘的空閒記憶體都會交給核心記憶體管理系統來進行統一管理和分配, 核心中會把記憶體按照頁來組織分配,隨著程序的對記憶體的申請和釋放,系統