No magic, just Basic—– 讀《Windows核心編程》前言

來源:互聯網
上載者:User

 

今天閑來將手頭上的《Windows核心編程》一書的前言認真讀了一遍,有些話說得很有道理,值得回味。==============================================================  前 言 
   
  Microsoft Windows是一個複雜的作業系統。它提供的特性非常豐富,對任何個人而言,要想完全透徹地理解整個系統幾乎不可能。其複雜性也使我們很難確定應該把主要精力集中在哪些地方。 萬丈高樓平地起,就我個人而言,我始終傾向於從最底層開始,深刻理解系統的基本構件。一旦掌握了最基本的東西,就很容易向自己的知識庫中逐步添加更多高層的東西。所以本書將集中介紹Windows的基本構件和基礎概念,對於構架和實現Windows應用程式來說,這些都是必須掌握的。簡而言之,本書是向讀者介紹各個Windows特性,並介紹如何通過C和C++語言來瞭解並使用這些特性。 
  雖然本書不會涵蓋某些Windows概念,比如元件物件模型(Component Object Model ,後面簡稱為COM),但COM是在進程、線程、記憶體管理、DLL、執行緒區域儲存區以及Unicode等基本構件的基礎上構建的。 如果瞭解了這些基本構件,那麼要理解COM就相當於理解如何使用這些基本構件。對於那些試圖跳過這些基本構件,悉心鑽研COM體繫結構的朋友,我深表同情。要完善知識庫,他們還有很長一段路要走,這必然會對他們的代碼和軟體開發進度產生很大的負面影響。(thinkhy: 09年我悶頭學習COM,走了一段彎路。No magic, just Basic!) 
  Microsoft .NET Framework的通用語言執行平台(Common Language Runtime,CLR)是本書未涉及的另一種技術(感興趣的朋友可以閱讀我的另一本專著《架構設計:CLR via C#》)。不過,CLR是作為動態連結程式庫(dynamic link library,DLL)中的一個COM對象來實現的,它需要被載入到進程中,它需要使用線程來執行代碼,它需要處理Unicode字串,它還需要在記憶體中對這些字串進行管理。因此,本書所介紹的基本構件仍然有助於軟體開發人員編寫Managed 程式碼。此外,藉助於CLR的平台叫用(Platform Invocation,P/Invoke)技術,我們可以調用本書所介紹的各種Windows API。
   如此一來,本書的宗旨是介紹每一個Windows開發人員都應該掌握的基本的Windows構件(至少在我看來如此)。(thinkhy:《windows  internal》的寫作目的是:這是講述內部機理的書籍,不是一本使用者指南、程式設計或系統管理類型的書籍,所以,本書沒有描述如何使用、編程或配置windows)。在介紹每一個構件的時候,我還會描述系統是如何使用這些構件的,我們自己的應用程式如何充分利用這些構件。在很多章中,我會介紹如何建立自己的構件。我們自己的構件一般都實現為普通函數或C++類,它們把一些Windows構件組合在一起,從而創造出一個整體,其結果遠遠大於各部分之和。 
  64位Windows作業系統 
  Microsoft發售支援x86 CPU體繫結構的32位Windows作業系統已經有多年的曆史。如今,Microsoft還提供支援x64和IA-64 CPU體繫結構的64位Windows作業系統。基於這些64位CPU體繫結構的電腦迅速為市場所接受。 事實上,在不遠的將來,所有台式機和伺服器都將使用64位CPU。(thinkhy:實際上,目前客戶的伺服器大多為64位機器,64位編程不是未來,而是當下的需求!)為此,Microsoft已發表聲明,Windows Server 2008將是最後一款32位版本的Windows作業系統!對於開發人員而言,現在是時候集中精力讓自己的應用程式能在64位Windows作業系統上正常運行了。貫穿本書,將全面覆蓋相關的知識,讓開發人員的應用程式能夠在64位Windows作業系統(同時也包括32位Windows)上正常運行。 
  應用程式從64位地址空間所獲得的最大的好處是,能夠輕鬆處理大量資料,因為應用程式的進程不再受限於2GB可用地址空間。即使應用程式並不需要所有這些空間,Windows本身也可以利用這個顯然大得多的地址空間(約8TB)來加快運行速度。 
  對於64位Windows作業系統,我們需要瞭解哪些呢?下面簡單看一看。 
   64位Windows核心是32位Windows核心的移植版本。這意味著以前所學的32位Windows所有細節和痛點均適用於64位Windows。事實上,Microsoft已經修改了32位Windows的原始碼,使其既可以編譯產生32位系統,也可以編譯產生64位系統。兩個系統使用同一個原始碼庫,所以新的特性和缺陷的修複會同時應用於這兩個系統。 
   因為核心使用相同的代碼和基本概念,所以在兩個平台上的Windows API是一樣的。這意味著我們不必重新設計或實現應用程式,就能讓它在64位Windows作業系統上運行。我們只需要對原始碼做少許改動,然後重新構建應用程式即可。 
   為了保持向後相容性,64位Windows作業系統是可以執行32位應用程式的。但是,如果應用程式是作為64位應用程式來產生的,那麼它的效能會有顯著的提高。 
   因為移植32位代碼非常容易,所以64位Windows作業系統中已經有很多的裝置驅動程式、工具和應用程式了。遺憾的是,Visual Studio是32位的,而且Microsoft似乎還並不急於將其移植為64位的。不過,好訊息是32位的Visual Studio在64位Windows作業系統上的確運行得非常好,只不過其資料結構的地址空間有限。而且,我們還可以用Visual Studio來調試64位應用程式。 
   並不需要學習太多新知識。大多數資料類型仍然保持32位寬度,這是很多讀者很高興看到的。它們是INT,DWORD,LONG和BOOL等。事實上,大多數情況下我們只需要擔心指標和控制代碼,因為它們現在變成64位了。 
  對於如何將現有原始碼修改為64位,Microsoft已經提供了相當豐富的資訊,所以我們不打算在本書中深入這些細節。不過,在我寫每一章的時候,我都會考慮到64位Windows作業系統。在適當的時候,我會加入64位Windows的特定資訊。同時,我還在64位Windows中編譯和測試了本書中的所有樣本程式。所以,如果讀者效仿書中的樣本程式和我的做法,那麼建立一個能夠為32位或64位Windows編譯的原始碼庫應該完全不成問題。 
  《Windows核心編程(第5版)》中有哪些新內容 
  在過去,本書曾經被冠以“Advanced NT”,“Advanced Windows”和“Programming Application for Microsoft Windows”等名字。為保持這個傳統,本書的第5版也有一個新的書名,即Windows via C/C++。新的書名表示本書是為打算理解Windows的C和C++程式員設計的。第5版全面覆蓋了Windows XP,Windows Vista和Windows Server 2008中的170個新增函數和Windows特性。 
  有些章已經全部重寫,比如第11章,這一章解釋了如何使用新的線程池API。第4版原有的各章都已經大幅修訂,以突出介紹新的特性。例如,在第4章,現在已經包含了使用者賬戶控制(User Account Control)的介紹,第8章現在介紹了新的同步機制。 
  同時,我還更全面地介紹了C/C++運行庫如何與作業系統互動,特彆強調安全性和異常處理。最後,第5版新增了兩章內容,解釋了I/O操作的工作原理以及如何深入理解新的Windows Error Reporting系統,此系統改變了我們必須考慮應用程式錯誤回報工具和應用程式恢複的方式。 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.