編譯後在
/usr/src/linux/arch/i386/boot/
成功後你應該
cp /usr/src/linux/arch/i386/boot/ /boot/bzImage-2.4.18
也就是在
/boot/下
B. Linux - 用戶態內存映射 和 內核態內存映射
操作系統的內存管理,主要分為三個方面。
第一,物理內存的管理,相當於會議室管理員管理會議室。
第二,虛擬地址的管理,也即在項目組的視角,會議室的虛擬地址應該如何組織。
第三,虛擬地址和物理地址如何映射,也即會議室管理員如果管理映射表。
那麼虛擬地址和物理地址如何映射呢?
每一個進程都有一個列表vm_area_struct,指向虛擬地址空間的不同的內存塊,這個變數的名字叫mmap。
其實內存映射不僅僅是物理內存和虛擬內存之間的映射,還包括將文件中的內容映射到虛擬內存空間。這個時候,訪問內存空間就能夠訪問到文件裡面的數據。而僅有物理內存和虛擬內存的映射,是一種特殊情況。
如果我們要申請小塊內存,就用brk。brk函數之前已經解析過了,這里就不多說了。如果申請一大塊內存,就要用mmap。對於堆的申請來講,mmap是映射內存空間到物理內存。
另外,如果一個進程想映射一個文件到自己的虛擬內存空間,也要通過mmap系統調用。這個時候mmap是映射內存空間到物理內存再到文件。可見mmap這個系統調用是核心,我們現在來看mmap這個系統調用。
用戶態的內存映射機制包含以下幾個部分。
物理內存根據NUMA架構分節點。每個節點裡面再分區域。每個區域裡面再分頁。
物理頁面通過夥伴系統進行分配。分配的物理頁面要變成虛擬地址讓上層可以訪問,kswapd可以根據物理頁面的使用情況對頁面進行換入換出。
對於內存的分配需求,可能來自內核態,也可能來自用戶態。
對於內核態,kmalloc在分配大內存的時候,以及vmalloc分配不連續物理頁的時候,直接使用夥伴系統,分配後轉換為虛擬地址,訪問的時候需要通過內核頁表進行映射。
對於kmem_cache以及kmalloc分配小內存,則使用slub分配器,將夥伴系統分配出來的大塊內存切成一小塊一小塊進行分配。
kmem_cache和kmalloc的部分不會被換出,因為用這兩個函數分配的內存多用於保持內核關鍵的數據結構。內核態中vmalloc分配的部分會被換出,因而當訪問的時候,發現不在,就會調用do_page_fault。
對於用戶態的內存分配,或者直接調用mmap系統調用分配,或者調用malloc。調用malloc的時候,如果分配小的內存,就用sys_brk系統調用;如果分配大的內存,還是用sys_mmap系統調用。正常情況下,用戶態的內存都是可以換出的,因而一旦發現內存中不存在,就會調用do_page_fault。
C. Linux中的配置文件是什麼
一般在用戶/root 文件下面,.config
linux中的配置文件一般都是這種格式的,前面有個.
類似windows中的隱藏文件。
D. linux中虛擬地址和物理地址怎樣映射
虛擬就是虛擬的,不是實際真是的物理地址。你可以認為,這兩個地址之間沒關系。
這個虛擬是通過系統和硬體的雙重工作,做的一種點對點的映射(當然實際內存分配是按照頁來處理)。
也就是軟體不需要考慮內存數據的物理地址,只需要用虛擬地址做數據存儲處理就行了。
這樣一個好處是,軟體不需要自己做內存分配,也不需要考慮別的軟體的內存佔用問題。操作系統會根據當前的內存使用情況,動態的分配內存空間。虛擬內存地址還一個好處是因為是虛擬的,所以內存並不一定非要在物理內存中。可以存放在任何位置,比如把暫時不用的數據放進硬碟上的虛擬內存,騰出真實的物理內存交給程序運行而提高多程序時運行的效率。而且因為每個軟體的虛擬內存地址都是從 0 開始,每個軟體的定址都是獨立而且順序的。程序編寫和運行時,都好像是機器裡面只有自己一個程序在運行,程序開發起來也很容易。軟體不需要考慮內存分配的問題,也不需要擔心內存不足和兩個程序搶同一片內存導致系統整個崩潰的情況。
E. Linux將設備地址映射到用戶空間內存映射與VMA
一般情況下,用戶空間是不可能也不應該直接訪問設備的,但是,設備驅動程序中可實現mmap ()函數,這個函數可使得用戶空間能直接訪問設備的物理地址。實際上,mmap ()實現了這樣的一個映射過程:它將用戶空間的一段內存與設備內存關聯,當用戶訪問用戶空間的這段地址范圍時,實際上會轉化為對設備的訪問。
這種能力對於顯示適配器一類的設備非常有意義,如果用戶空間可直接通過內存映射訪問顯存的話,屏幕幀的各點像素將不再需要一個從用戶空間到內核空間的復制的過程。
mmap ()必須以PAGE_SIZE為單位進行映射,實際上,內存只能以頁為單位進行映射,若要映射非PAGE_SIZE整數倍的地址范圍,要先進行頁對齊,強行以PAGE_SIZE的倍數大小進行映射。
從file_operations文件操作結構體可以看出,驅動中mmap ()函數的原型如下:
int ( *mmap)(struct file *, struct vm_area_struct* ) ;
驅動中的mmap () 函數將在用戶進行mmap ()系統調用時最終被調用,mmap ()系統調用的原型與file_operations中mmap ()的原型區別很大,如下所示:
caddr_t mmap (caddr_t addr,size_t len,int prot,int flags,int fd,off_t offset);
參數fd為文件描述符,一般由open ()返回,fd也可以指定為-1,此時需指定flags參數中的MAP_ANON,表明進行的是匿名映射。
len是映射到調用用戶空間的位元組數,它從被映射文件開頭offset個位元組開始算起,offset參數一般設為0,表示從文件頭開始映射。
prot參數指定訪問許可權,可取如下幾個值的「或」:PROT_READ(可讀)、PROT_WRITE(可寫)、PROT_EXEC(可執行)和PROT_NONE(不可訪問)。
參數addr指定文件應被映射到用戶空間的起始地址,一般被指定為NULL,這樣,選擇起始地址的任務將由內核完成,而函數的返回值就是映射到用戶空間的地址。其類型caddr_t實際上就是void*。
當用戶調用mmap ())的時候,內核會進行如下處理。
1)在進程的虛擬空間查找一塊VMA。
2)將這塊VMA進行映射。
3)如果設備驅動程序或者文件系統的file_operations定義了mmap ()操作,則調用它。
4)將這個VMA插入進程的VMA鏈表中。
file_operations中mmap ()函數的第一個參數就是步驟1)找到的VMA。
由mmap ()系統調用映射的內存可由munmap ()解除映射,這個函數的原型如下:
int munmap(caddr_t addr, size_t len ) ;
驅動程序中mmap ()的實現機制是建立頁表,並填充VMA結構體中vm_operations_struct指針。
F. 如何在linux下用mmap映射超大文件,並讀取其內容
manpage裡面的東西:
void *mmap(void *start, size_t length, int prot, int flags,
int fd, off_t offset);
The mmap() function asks to map length bytes starting at offset offset from the file (or other object) specified by the file descriptor fd into memory,
就是說,從offset位置開始,把文件fd的length位元組映射到地址start上。
如果是64位的應用,4G是沒有問題的,32位的應用不能。
G. linux系統主要配置文件目錄及說明
1. bin目錄
binary(二進制的):許多「指令」對應的可「執行程序文件」目錄
2. sbin目錄
說明:super binary 超級的 二進制 許多「指令」對應的可「執行程序文件」目錄,該目錄文件對應指令都是"root"用戶可以執行的指令普通用戶不能使用該目錄里的命令:
普通用戶:用$開頭
root用戶:用#開頭
3. usr目錄
說明:unxi system resource
unix system resource (unix系統資源文件目錄)
該目錄類似win系統的 C:/Program files 目錄
該目錄經常用於安裝各種軟體
4. dev目錄
說明:device 系統硬體設備目錄(linux系統所有的硬體都通過文件表示)
例如:/dev/cdrom是光碟機 /dev/sda 是第一塊scsi硬碟
5. home目錄
說明:普通用戶的「家目錄」
系統每增加一個普通用戶的同時,都會在該目錄為該目錄設置一個文件目錄代表該用戶的「家目錄」用戶後期使用系統的時候首先會首先進入其目錄家目錄名字默認與當前用戶名字一致用戶對家目錄擁有絕對最高的許可權
6. proc目錄
內存映射目錄,該目錄可以查看系統的相關信息
7. var目錄
variable 可變的、易變的
該目錄存儲的文件經常會發生變化(增加、修改、刪除)
經常用於部署項目程序(php)文件
/var/www/shop
/var/www/book
8. boot目錄
說明:系統啟動核心目錄,用於儲存系統啟動文件
9. etc目錄
系統主要配置文件目錄
例如:
/etc/passwd 用於存儲用戶信息的文件
/etc/group 用於存儲組別信息的文件
10. lib目錄
library:系統資源文件類庫目錄
11. selinux目錄
說明:安全增強型的linux對系統形成保護
在安裝軟體時會有一定的影響
12. mnt目錄
說明:存放臨時的映射文件系統,我們常把軟碟機和光碟機掛裝在這里的floppy和cdrom子目錄下。
13. tmp目錄
說明:存放臨時文件的目錄
H. linux伺服器IP地址映射問題
首先你要確認你的linux系統防火牆有沒有開放22埠(默認是開放的),第二個就是你的ip地址了,你linux的ip地址是區域網的ip地址,第三就是你的埠映射是否做的正確,你的linux防火牆是否允許你外網的映射的那個地址進入 第四就是你訪問的時候是否是通過外網地址訪問的