系統呼叫與記憶體虛擬位址空間聯絡

2022-03-07 03:39:39 字數 604 閱讀 9181

怎麼說呢?最近在寫系統呼叫的時候,牽扯到從user空間拷貝記憶體到kernel空間的問題,因為當前寫的程序都是和kernel一起編譯的,也沒有什麼虛擬位址的問題,就都是保護模式下的4g空間的位址。所有的kernel中的**包括好幾個程序都是在這個空間執行的。

比如tty程序雖然是自己單獨執行在task特權級上的,但是因為和kernel一起編譯,kernel中的**隨時可以呼叫tty中的**並修改tty中的資料結構或者變數的值。

如果程序是單獨編譯,並且不使用虛擬位址空間,那麼需要鏈結時候指定自己在記憶體中的位址,但是由於ldt的存在使得它其實還是可以被存放到其他實際記憶體位址的,如果它的記憶體位址已經有程序在用了。這裡就要涉及到記憶體管理了,會稍微複雜一些。

所以這裡暫時先不考慮 虛擬位址,不考慮記憶體管理,每次都先將程序和kernel一起編譯,並且ldt都設為初始位址為0,這樣能降低複雜度,等我掌握基本知識之後,再去看linux核心,學習虛擬位址和記憶體管理。

並且明白當前系統呼叫將指標傳給kernel,並讓kernel到user空間中複製資料在加入了虛擬位址後也是這麼做的,所以暫時可以不考慮虛擬位址,不然那樣會增加我學習的複雜度。

VC 記憶體虛擬位址空間

windows使用一組固定的範圍來分割程序的4gb虛擬位址空間,因此有時可以通過檢視指標的返回值來判斷指標是否有效。虛擬位址空間 大小範圍 作用0x00000000 0x0000ffff 64kb 不能用來檢測空指標賦值 訪問衝突 0x00010000 0x7ffeffff 64kb 2gb 64k...

虛擬位址空間

當處理器讀或寫入記憶體位置時,它會使用虛擬位址。作為讀或寫操作的一部分,處理器將虛擬位址轉換為實體地址。通過虛擬位址訪問記憶體有以下優勢 程序可用的虛擬位址範圍稱為該程序的 虛擬位址空間 每個使用者模式程序都有其各自的專用虛擬位址空間。對於 32 位程序,虛擬位址空間通常為 2 gb,範圍從 0x0...

虛擬位址空間

14 共 14 對本文的評價是有幫助 評價此主題 程序可用的虛擬位址範圍稱為該程序的 虛擬位址空間 每個使用者模式程序都有其各自的專用虛擬位址空間。對於 32 位程序,虛擬位址空間通常為 2 gb,範圍從 0x00000000 至 0x7fffffff。對於 64 位程序,虛擬位址空間為 8 tb,...