原创 架構師之路007軟件運行機制以及內存管理

計算機運行的全過程,並對每一步的核心意義做了簡單的介紹。然後我們把話題轉到我們這一節的重心:內存管理。談內存管理,需要談清楚兩個核心問題:如何分配內存(給運行中的軟件,避免它們發生資源爭搶);如何運行外置存儲(比如硬盤)上的軟件?

原创 架構師之路033 桌面開發回顧與總結

桌面開發的知識迭代更新非常快,所以很難去列經典書籍。這裏我列一下我認爲值得重點關注的技術:JavaScript。毫無疑問,這是當前桌面開發的第一大語言,務必要精通。這方面我推薦程劭非(winter)的極客時間專欄“重學前端”。微信

原创 架構師之路031 輔助界面元素的架構設計

輔助界面元素,或者叫控件的架構設計。從大的實現邏輯來說,它和應用程序不應該有本質的不同。但控件總是要考慮支持多實例,這會帶來一些細節上的差異。支持多實例聽起來是一項簡單的工作,但是從我的觀察看,對很多工程師來說實際上並不簡單。不少

原创 架構師之路010 輸出和輸出設備

但是,僅通過簡單對比所有輸入和輸出設備的管理方式,我們就可以看出,不同輸入和輸出設備的管理方法差異非常大,沒有太大的共性可言。儘管對 CPU 而言,所有外部設備有着相同的抽象,但這些設備的業務邏輯卻如此不同,並不能統一抽象它們。正

原创 架構師之路034 服務端開發開始的宏觀視角

相比桌面程序而言,服務端程序依賴的基礎軟件不只是操作系統和編程語言,還多了兩類:負載均衡(Load Balance);數據庫或其他形式的存儲(DB/Storage)。爲什麼會需要負載均衡(Load Balance)?爲什麼會需要數

原创 架構師之路006 操作系統

多考慮一下系統的“收費需求”或者“商業模式”。嗯,很好。總結一下各個公司的成功途徑,就是先要滿足大量剛需或者打破現有商業壁壘,然後靠技術、工藝和法律形成新的商業壁壘迅速崛起,最後依靠積累的用戶基數和粘性,獲得規模效應,開發新產品以

原创 架構師之路004 編程語言進化

站在唯技術論的角度,業務架構與語言無關,影響的只是模塊規格的描述語法。但語言的選擇在實踐中對業務架構決策的影響仍然極其關鍵。原因之一是開發效率。拋開語言本身的開發效率差異不談,不同語言會有不同的社區資源。語言長期以來的演進,社區所

原创 架構師之路003 彙編語言

爲了不再用“0101”表達自己的思想,人們創造了彙編語言,這一步讓編程成爲一個純軟件行爲,程序員這一個分工也由此誕生。爲了進一步支持程序員這個職業,我們設計了 MVP 版(最小化可行產品)的可自我迭代的計算機。有了這個計算機,我們

原创 架構師之路005 可自我迭代的計算機設計

外置存儲的數據格式。對此,我們設計文件系統(或 Key-Value 存儲)子系統來負責這件事情。另外,我們也提供了 ls 程序來管理外置存儲中的文件。用戶最終拿到這個計算機後,會迭代出什麼能力。對此,我們設計了 sh 程序,讓它支

原创 架構師之路009 外存管理和文件系統

在物理內存不足的時候,操作系統會利用外存把一些很久沒有使用的內存頁的數據,保存到外存以進行淘汰。在 UNIX 系的操作系統中,操作系統爲此分配了一個磁盤分區叫 swap 分區,專門用於內存頁的保存和恢復。在 Windows 操作系

原创 架構師之路001 宏觀視角

架構能力的提升,本質上是對你的知識脈絡(全身經絡)的反覆梳理與融會貫通的過程。具備架構思維並不難,而且極有必要。不管今天的你是不是團隊裏的一位架構師,對任何一位程序員來說,具備架構思維將會成爲讓你脫穎而出的關鍵。

原创 架構師之路032 系統的概要設計

在概要設計階段,我們一般以子系統爲維度來闡述系統各個角色之間的關係。對於關鍵的子系統,我們還會進一步分解它,甚至詳細到把該子系統的所有模塊的職責和接口都確定下來。這個階段我們的核心意圖並不是確定系統完整的模塊列表,我們的焦點是整個

原创 架構師之路002 大廈基石

管道化可否理解爲隨着瀏覽器成爲事實意義上應用的使用平臺,操作系統的功能變得單一,單一到只爲瀏覽器提供服務,從邏輯概念上可以理解爲服務器與瀏覽器之間數據傳輸的管道 馮·諾依曼體系結構的不凡之處在於,它想“解決一切可以用‘計算’來解決

原创 架構師之路008 操作系統內核與編程接口

操作系統和我們寫的程序運行於兩個進程中 2.我們寫的程序無法直接訪問操作系統所在的內存 3.連接操作系統進程和用戶進程的橋樑是中斷地址 。 可以設想在還沒有出現操作系統的上古時代,有兩個普通的程序A和B在cpu上跑着,那麼程序A