譯 x86程式設計師手冊00 翻譯起因

2022-06-10 21:03:09 字數 1263 閱讀 6941

從上一次學習mit的作業系統課程又過去了一年。上次學習並沒有堅持下去。想來雖有種種原因,其還在自身無法堅持罷了。故此次再鼓起勇氣重新學習,發現課程都已由2014改版為2016了。但大部分內容並沒有改變。在這一年多的時間裡,也曾學習過其他課程,比如孟寧的linux核心分析,也看過其他人寫的文章。但還是有很多內容無法全部理解,而且從網上文章或討論中也看出,象我這種似懂非懂的狀態很多人都有。比如,在看到linux0.11中的那個tss結構時就一直在想,為什麼要這樣設計呀?系統明明沒有使用到那麼多結構成員,為什麼還要保留呢?還有在呼叫系統呼叫時,講課的老師總是說,硬體幫我們把返回位址、棧資訊等自動儲存起來,但到底做了什麼呢?這個問題我發現其實很多人都存在。類似的問題還有很多。比如,如果有人問在linux下最多可以有多少個程序?這怎麼計算呢?由什麼來決定 ?網上也有文章介紹過,但為什麼是那樣呢?諸如此類。為此,我也困惑很久。再比如,總是說,在linux下,邏輯位址就是線性位址,可是線性位址是由三部分構成的,而邏輯位址是由兩部分構成的,由於在linux中段基址永遠是0,那程式中的偏移位址如何就是線性位址了呢?如果是,那如何與線性位址中的三部分對應的?程式中的位址到底是線性位址中的偏移位址還是三部分都包含在內呢?作業系統到底如何轉換的?還需要做轉換工作嗎?可以從**角度 看又沒有這種轉換呀?那程式如何轉換位址呢?頁目錄到底是所有程序用一套,還是每個程序各用一套?如此等等,都似乎有一層迷霧一般。為了解決這個問題,此次我並沒有在一開始學習mit課程的時候就急著去做那些實驗。而是跟隨著實驗指導的說明,把x86手冊內容看了一次。其實上次學習也曾想讀一讀,但內容實在太多,又都是英文的,所以最終放棄了。此次,終於下定決心看下去。而由於本人英文水平實在有限,讀手冊時太過艱辛,為了更方便以後檢視,遂決定將其內容翻譯一遍,這樣一來有助於理解,二來將來再看時就不用面對英文了,也方便查詢。之所以放在這裡,是想也許有許多人和我一樣,如果能讓我們這些人能有一絲幫助,就是最好的結果。

下面說一下我看完手冊的感覺。以前對linux作業系統中的很多內容都無法真正理解,此次看完手冊方才明白,linux之所以那樣設計,其實很多結構和內容都是因為x86就是那樣設計的。比如,段選擇子、特權級別、任務切換、埠訪問的對映位圖,等等,這些結構在x86設計之初就已經決定了,不是作業系統可以左右的。看完之後,對很多以前不理解的都有了近一步的了解,例如,授課老師總是說在系統呼叫時硬體幫我把很多內容自動儲存起來,在不同特級特權間進行切換時會導致棧切換,等等。看完這本手冊你就徹底明白這些話的真正含義。

注:本人並沒有對手冊的所有內容進行翻譯,其實有些章並沒有看,比如關於相容性的那一部分,還有協處理器和多處理器章節等,一來時間所限,二來覺得和理解linux0.11和mit的實驗系統並無多少相關,所以未做翻譯。

譯 x86程式設計師手冊02 基本的程式模式

chapter 2 basic programming model 基本的程式模式 介紹模式下的記憶體組織。資料型別的定義。能被程式使用的暫存器組。介紹棧。解釋字元操作。定義指令部分。解釋位址計算。介紹應用程式可以使用的中斷和異常。這章描述80386的應用程式環境,正象處理器在保護模式下執行時乙個彙...

譯 程式設計師開會的代價

簡評 這是 黑客與畫家 的作者 paul graham 的一篇經典文章。程式設計師作為抽象系統的創造者遵循 maker s schedule。寫 時需要整塊連續的時間思考,如果工作常常被幾個會議打斷,那一天下來根本做不了任何實質性的事情。程式設計師特別討厭開會的乙個原因是 他們的日程跟其他人不太一樣...

程式設計師的出路0

本週想圍繞程式設計師的出路為話題寫一些文章。作為開篇,先回顧一下自己身邊計算機畢業學生的不同出路。c和z本科畢業後又考了名校的研究生,然後畢業進入四大行之一的開發部門,收入中上,經常不加班,有工作也有生活。w和y選擇考公務員,收入一般,但工作很輕鬆,高興的時候還可以做一下兼職,日子過的也很輕閒。d畢...