Re: [問題] memory stack 的問題
看板C_and_CPP作者descent (「雄辯是銀,沉默是金」)時間9年前發表 (2016/08/27 15:52), 9年前編輯推噓5(5推 0噓 10→)留言15則, 3人參與討論串2/3 (看更多)
※ 引述《kyuudonut (善良老百姓)》之銘言:
: 最近寫 c code 一直想釐清一些問題
: 跟c程式沒有很直接相關,若發在這不妥再請麻煩版友告知了 m(_ _)m
: 最近在研讀virtual memory相關知識,大致上了解paging的運作模式
: 但仍不太懂 stack 往下長的實際情況是如何運作?
: stack就我的理解基本上是:
: 程式在執行 function call 時,堆疊便會一直往下長
: [問題一] process 是在 loading 時才知道分配到的 stack 的起始位置嗎?
載入一個 執行檔時, 要做一些事情, 設定這個 process sp 暫存器這是其中一件事。
: [問題二] stack overflow 如何判定? 在此 stack 的大小是由誰決定的呢?
編譯器可以插入檢查碼, 請參考
http://descent-incoming.blogspot.tw/2013/05/gcc-fstack-protector.html
作業系統可以運用 page fault 來知道 process stack 爆了。
stack 大小由作業系統決定, 執行檔格式可能也可以帶這個資訊, 讓作業系統參考。
: [問題二] 如果有多個 process 同時運作,各自 stack 的起始位置又是如何分配呢?
: (一直往下長不會撞到嗎@@)
在 process 切換時, sp 暫存器會被存起來, 作業系統會為每個
process 規劃好其 stack 使用大小, 在 context switch 時,
把 sp 指到分配好的那個 stack 區域。
看 os 設定, 可以設計成讓 process stack 相互蓋到,
也可以不要蓋到。你一定選那種不會蓋到的 os 吧
: (當某 process 需要的 stack 大小超過兩個 page 又是如何維護?
: page 如果不連續怎麼辦?)
沒研究, 但應該要連續的 page 才可以。
: [問題三] 一個程式有code, text區段,是直接從 heap 下面開始剩餘記憶體
: 隨機取一page各自載入嗎?還是 memory 還有在更細分區塊?
看不懂這個問題。你是要問載入執行檔時, code, text segment 怎麼被分配的
嗎?
: 還請各位前輩指教,或是指引我關鍵字QQ 我會去查資料
: 小弟目前正在研讀"程式設計師的自我修養-連結,載入,程式庫"
: 這本書寫的很詳細,卻又引出更多疑問 orz
你有2個問題二
--
紙上得來終覺淺,絕知此事要躬行。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.200.56.75
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1472313125.A.D59.html
推
08/28 00:02, , 1F
08/28 00:02, 1F
→
08/28 00:02, , 2F
08/28 00:02, 2F
推
08/28 17:37, , 3F
08/28 17:37, 3F
→
08/28 17:37, , 4F
08/28 17:37, 4F
→
08/28 17:37, , 5F
08/28 17:37, 5F
→
08/28 17:37, , 6F
08/28 17:37, 6F
推
08/28 17:41, , 7F
08/28 17:41, 7F
→
08/28 17:42, , 8F
08/28 17:42, 8F
→
08/28 17:42, , 9F
08/28 17:42, 9F
會的, page 會有其屬性,
唯讀、可寫可讀、只能執行, 將 elf segmentation 分配到相關的 page,
這是為什麼 const char* str="abc" 只能讀不能寫的原因。
推
08/28 20:14, , 10F
08/28 20:14, 10F
你對這問題這麼有興趣, 我建議你看這本, 跟著做一次,
除非你只是想 "理論上" 的理解。
深度探索嵌入式操作系统:从零开始设计、架构和开发
推
08/30 14:50, , 11F
08/30 14:50, 11F
→
08/30 14:51, , 12F
08/30 14:51, 12F
→
08/30 14:52, , 13F
08/30 14:52, 13F
→
08/30 14:53, , 14F
08/30 14:53, 14F
→
08/30 15:20, , 15F
08/30 15:20, 15F
要買一個過時的硬體, 不過我覺得對於學習很有幫助,
那個平台也不會那麼複雜。
不過也因為是過時的, 我也很猶豫要不要買。
一步步写嵌入式操作系统: ARM 编程的方法与实践
這本也可以, 不過是用模擬器, 只是要知道的話應該可以從中學到不少。
也薄了不少。
讀書會那本在講 glibc 怎麼和 kernel system call 掛勾的,
可能和你想要知道的東西沒什麼關係。
※ 編輯: descent (1.200.62.189), 08/30/2016 23:09:44
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):