2012-02-09 90 views
0

我想了解當進程和線程之間的上下文切換髮生時,進程堆棧,不同段等發生了什麼。基本上我想知道如何在併發編程中的上下文切換之間修改每個段。什麼是閱讀這個最好的地方?你可以爲操作系統建議一些教程或視頻嗎?操作系統材料

我不知道如果我框架我的問題的權利,讓我知道。請建議。

回答

0

你問了一個相當有問題的問題。我建議你從一本教科書開始,從那裏開始工作。一本書幾乎永遠計算機科學的學生採用的是:

Operating System Concepts

+0

我讀過那篇文章,但它肯定沒有將所有這些低級別細節都包含在內嗎? – 2012-02-09 04:32:35

1

這可能是最好剛開始閱讀特定的操作系統代碼:

Linux內核的kernel/sched.c功能sched_fork()可能是個好位置至於任何開始閱讀;它開始了一個全新的任務,所以我覺得它可以讓你很好地瞭解調度程序的內部和任務內存管理。

FreeBSD內核的sys/kern/sched.c function sched_switch()在當前進程和下一個進程之間直接交換;它可能比Linux版本更易於閱讀。

其他操作系統可能會選擇以不同方式處理上下文切換。 (我的一位經理worked on an operating system that replaced the process table generic code with code to jump to the exact next task that would be scheduled,以及其他酷運行時數據特定的優化)。

FXR website使得在各種操作系統中很容易地遵循 代碼。 (感謝Robert,如果你正在閱讀的話!)在FXR列表中,我建議學習Plan9,Minix和OpenSolaris--它們距離FreeBSD的樹遠遠超過其他更相關的BSD派生的分佈。

+0

好吧看起來很有幫助。謝謝。你是通過評論去理解邏輯還是完全通過整個代碼邏輯?我恐怕我無法理解這一切。請建議像這樣的多件事物/文章。我真的很想在這些主題上得到很好的解答 – 2012-02-09 07:37:44

+1

經過更新也提供了FreeBSD代碼鏈接 - 這是一些非常好的代碼。談到評論與代碼,恐怕你需要同時使用兩者。 Linux內核開發人員非常強烈地認爲,代碼應該獨立運行,並使用註釋來指出微妙之處。 (這是對Knuth WEB詳細內聯文檔編程理念的強烈拒絕。)如果你只看註釋,你會忽略它的大部分,但如果你跳過評論,你永遠不會明白爲什麼有些東西是他們的方式...... – sarnold 2012-02-09 22:25:00

0

如果您希望瞭解h/w級別,請以英特爾系統編程指南3A開頭。然後進入linux內核源代碼,並按照sarnold的說法。