C_and_CPP 板


LINE

※ 引述《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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1472313125.A.D59.html
1F:推 Eleina: 當需要的 stack 大小超過兩個 page... 看到 seg fault 改 08/28 00:02
2F:→ Eleina: stack size 不是嗎 XD 08/28 00:02
3F:推 kyuudonut: 謝謝前輩回文回覆我的問題,以下是我的理解: 08/28 17:37
4F:→ kyuudonut: 所以OS會替各個process分配好其stack之大小與起始位置 08/28 17:37
5F:→ kyuudonut: ,以避免process各自蓋到,如果超過大小即stack 08/28 17:37
6F:→ kyuudonut: overflow. 08/28 17:37
7F:推 kyuudonut: 另外我的問題三是指,OS是否還會在記憶體另外劃分code, 08/28 17:41
8F:→ kyuudonut: data的記憶體區段, 等process需要載入時,再從上面的s 08/28 17:42
9F:→ kyuudonut: section各自取page載入process的code, data section? 08/28 17:42
會的, page 會有其屬性, 唯讀、可寫可讀、只能執行, 將 elf segmentation 分配到相關的 page, 這是為什麼 const char* str="abc" 只能讀不能寫的原因。
10F:推 askacis: Linux 下可以打pmap [pid]觀察各Section 08/28 20:14
你對這問題這麼有興趣, 我建議你看這本, 跟著做一次, 除非你只是想 "理論上" 的理解。 深度探索嵌入式操作系统:从零开始设计、架构和开发
11F:推 kyuudonut: 前輩您好,最近我也在Taiwan Linux Kernel Hackers 08/30 14:50
12F:→ kyuudonut: 所舉辦的讀書會剛好也是選用這本書 08/30 14:51
13F:→ kyuudonut: 想請問這本書的操作需要購買額外的硬體還是有模擬器 08/30 14:52
14F:→ kyuudonut: 可以操作呢? 08/30 14:53
15F:→ kyuudonut: 抱歉...我看錯了,不是同一本 08/30 15:20
要買一個過時的硬體, 不過我覺得對於學習很有幫助, 那個平台也不會那麼複雜。 不過也因為是過時的, 我也很猶豫要不要買。 一步步写嵌入式操作系统: ARM 编程的方法与实践 這本也可以, 不過是用模擬器, 只是要知道的話應該可以從中學到不少。 也薄了不少。 讀書會那本在講 glibc 怎麼和 kernel system call 掛勾的, 可能和你想要知道的東西沒什麼關係。 ※ 編輯: descent (1.200.62.189), 08/30/2016 23:09:44







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP