AD
搜尋本站文章
贊助連結
摸摸耳遊戲Google Ads
我的mail

Tips
Recent Comments
- Aaron on iMac G3 Simplicity Shootout
- 元毓 on 從南投地院「公然侮辱罪」一案談起
- Luke on 從南投地院「公然侮辱罪」一案談起
- 元毓 on 「逕付二讀」又是怎樣的程序瑕疵?
- 一點點 on 「逕付二讀」又是怎樣的程序瑕疵?
Tags
Blogroll
Tag Archives: Mac OSX
【翻譯】為何選擇Mac OSX?
Bottom Line Mac OSX給我相當優的印象:如果說要選一個運算平台來滿足我的數位生活,那Mac OSX絕對是第一首選!除非我的工作或是特殊需求非得用其他平台不可。 當然我這樣想可不表示其他人也會如此。我這樣的結論也不代表說Mac OSX就全然沒有缺點可言,甚至我覺得還不少:像是它使用太多」舊技術」、舊包袱、某些方面的表現並不優秀、在美麗的介面下仍有一些醜陋的玩意兒、得花錢買、一定得用Apple的硬體(雖然我個人相當喜歡Apple的硬體)、有時後會出現kernel panic。即便是這樣,Mac在我個人的觀感裡仍是最值得擁有的終端平台:它是目前市面上唯一能讓你真正看得到也吃得到的好產品。 尋找理想的終端電腦 過去很長一段時間,我使用過相當多個作業系統來當我的主要工作平台,到現在仍在繼續使用的只有三個:Linux系列、Mac OSX、Windows系列(這是依字母排列)。 這邊我特別說明一下,我所使用的終端電腦(client computing)或是終端平台(client platform)這個詞彙,意義上其實比較接近桌面電腦,這個邏輯跟許多人用notebook取代桌上型電腦來使用的邏輯很像。在我的文章裡面,這一類的詞彙主要是指這樣的電腦會是每天處理多種目的、功用的電腦,例如我們會在同一台電腦上工作和玩遊戲。 * BSD與Solaris 各式各樣的BSD平台都可以是優秀的伺服器或是嵌入式應用平台。特別當你想要好好搞清楚作業系統是怎麼一回事時,它們絕對是最棒的學習範例!在一些特殊的、具侷限性的應用上,BSD表現也是相當優異。但是如果要作為一個終端平台,我不認為BSD系列中任何一個能夠出線(當然,BSD可以作為明日終端平台所使用的底層技術的中流砥柱,像Mac OSX就是)。我本身相當熟悉Solaris,並覺得它依然是相當可靠的系統(作為server)!這點倒是跟Sun昇陽公司本身的財務表現正好相反。 讓我們簡單地回顧一下三個終端電腦系統候選人: 對了,這三個平台各自都有server版本,但是我們今天只談它們的終端版本 Windows 市場上偏好選用Windows的情形已經到十分荒謬的程度,而我自己則儘量保持一個中立的態度來審視Windows:雖然自己常常在使用Windows時會有快得幽閉恐懼症的傾向,但我並沒有因此而討厭這個平台(我知道有些人對Windows已經是情緒性的厭惡了)。通常我都會將使用Windows所生的種種不適,歸咎於我自己的背景:我第一個使用的系統是 SVR4 ,之後分別是Linux與 * BSD。Windows有許多自己的調調,而讓我覺得跟我所熟悉的環境相較起來顯得陌生。過去幾年我嘗試過許多作給 Windows的仿 * nix-like環境,像是MKS toolkit for DOS、 Cygwin、MKS for Win32、Microsoft Services for Unix… 等等,而這些玩意兒的確是很努力試著模仿得唯妙唯俏,但畢竟是不一樣的東西。我承認單單只是無法提供一個「純粹的Unix環境」,這樣的理由是無法整個否定掉Windows的,事實上在很多方面它已經是一個很不錯的平台 —- … Continue reading
【翻譯】Mac OSX系統啟動
這篇我們來談談Mac OSX啟動過程會經歷的程序。 一些關於開機的細節部份,我已經在之前的文章「Mac OSX開機」與「XNU:核心」這兩篇文章中說明過了。略摘錄重點如下: 電源打開 執行韌體 硬體資訊匯集與初使化 開機項目選擇;此時可能會去詢問使用者要以何種裝置開機 控制權移轉至Boot loader(/System/Library/CoreServices/BootX)。BootX會去載入核心與標記OS。 BootX此時會嘗試去載入之前的系統裝置驅動程式快取(/usr/sbin/kextcache)。快取裡面會包含相關資訊、函示庫以及套件供核心使用。如果說核心找不到或是檔案已經毀損,那核心會自動去讀取/System/Library/Extensions來完成開機動作。 核心中重要參數此時會載入,同時有關裝置也會完成定義。在這個時點,Open Firmware跟著退出。 各種Mach/BSD資料架構由核心完成初使化。 I/O kit初使化 核心啟動/sbin/mach_init,開始各項系統上的服務與port。 此時,開機程序進入使用者層級 mach_init會去啟動/sbin/init(BSD基本init程序)。Init將會去定義系統上的運行層級,同時起動/etc/rc.boot來讓系統準備好進入單人模式。 rc.boot會去確定開機裝置為何(多人使用模式、安全模式、硬碟、光碟或是網路開機)。舉例來說,如果是網路開機模式,那rc.boot就會去啟動/etc/rc.netboot來進行開機程序。 rc.boot還會去確認是不是需要做磁碟修復的動作。單人模式或是光碟開機就不會有這個步驟;而安全模式開機不管如何都會做磁碟修復—fsck。 如果rc.boot功成身退,/etc/rc多人模式開機程序就會啟動。如果是光碟開機,這時候就會轉去/etc/rc.cdrom。 /etc/rc會去載入本地磁碟(HFS、HFS+、UFS…),並確認/private/var/tmp目錄存在、執行/etc/rc.installer_cleanup。 /etc/rc.installer_cleanup會去清空一些Mac/Unix檔案 BootCache啟動 各個sysctl變數設定完成,如果/etc/sysctl.conf存在,那變數就是這樣設定。 syslogd啟動 建立Mach符號檔 /etc/rc啟動kextd,從核心或是終端程序中載入核心延伸程序 /usr/libexec/Register_mach_bootstrap_servers會去載入/etc/mach_initd檔案中所包含的各個Mach bootstrap服務 portmap與netinfo啟動 如果/System/Library/Extensions.mkext檔案比/System/Library/Extensions舊,那麼/etc/rc會將之刪除並另外製作一個較新的。相對地,如果說那個檔案並不存在,則會製作一個全新的。 /etc/rc透過/usr/sbin/update將內部的檔案系統快取與各磁碟同步化 /etc/rc啟動虛擬記憶體。/private/var/vm會被設置成swap。 /etc/rc啟動/usr/libexec/fix_prebind來修復prebind binary的錯誤 /etc/rc透過/etc/rc.cleanup來清空並重新設置檔案和裝置 /etc/rc最後會載入/sbin/Systemstarter去啟動「啟動元件」,像是/System/Library/StartupItems和/Library/StartupItems。顧名思義,StartupItems這個Shell dcripts程式就是一個「啟動元件」,其中包含相當多的系統關鍵值,例如:Description、Provides、Requries、OrederPreference、開始/停止訊息…等等。你可以用root身分在Terminal底下輸入SystemStarter … Continue reading
【翻譯】XNU:核心
Mac OSX 核心叫做XNU。有關他的說明簡述如下: Mach XNU內的程式碼主要是基於Mach 3.0版所開發出來的。Mach本身是卡內基、梅隆大學在1980年代中期一個傳奇性的研究計畫的產物。目前Mach也漸漸成為許多重要系統的核心了。 較早版本的Mach還是一個擁有許多BSD程式碼的單一核心,Mach3.0則是第一個微核心。 XNU的Mach並不是微核心。核心中包含像是BSD的子系統以及其他具代表性的子系統。XNU的Mach還是負擔了一些系統裡較低層次的部份,像是: 核心執行緒支援先佔式多工。 記憶體保護 虛擬記憶體管理 內部程序通訊 ( IPC ) 中斷管理 即時支援 核心Debug支援 console I/O 如前一章所述,在核心接續接續開機程序之前,bootloader會去呼叫核心的「啟動」程式碼,以進一步進入不同的開機模式。這個低層程式碼是任何一種系統開機程序裡面都會有的。 各種不同的重要變數都會初始化,像是:最大虛擬或物理位址、CPU降速溫度調節閥,同時BAT也會清除,Altivec和快取也都會初始化。之後程式會跳到系統架構的初始程式碼(PowerPC 上的 ppc_init())。 其後程序如下: 一個模組執行緒將會插入,並從中產生一個初始化的執行緒來作為現時執行用的執行緒。 部份CPU終至在執行的程序完成。 「Platform Expert」初始化(PE_init_platform())。而同時設置旗標指出未被初始化的虛擬記憶體。 Mach 虛擬記憶體初始化 呼叫machine_startup()程序。這步驟會用到許多系統內部的變數。並呼叫calls setup_main() calls setup_main()會完成很多工作,像是:initializing the scheduler, IPC, kernel extension … Continue reading
【翻譯】Mac OSX開機
現在我們來談談有關Mac的韌體(很多時候這東西可以說很類似PC上面的BIOS),要大家注意的是新舊版的ROM之間非常不同。舊版像是68k這種舊世界的PowerMacs,新版的就像是目前可見的Mac,用的是Open Firmware3.x版。而我們只討論較新的版本。 雖然說這些韌體不包含在MacOSX裡面,但是對機器上運行的系統來說,它還是扮演著非常重要的角色,此外這玩意兒在除錯上也是非常有用,所以我們才會在這邊加以論述。 Open Firmware 背景 Open Firmare(IEEE-1275 開機韌體標準:執行以及條件核心)是個非專利的平台。這個就像是PC上的BIOS,寫在ROM裡面,是電源開啟時電腦第一個載入的程式。 Open Firmware是用Forth程式語言:FCode所編寫而成的。而目前主要使用Open Firmware工具的電腦系統有Apple和SUN(SUN把這個叫做OpenBoot)。 大家可以參考Open Firmware的網頁。 (譯者註:有關Forth語言大家可以參考http://www.figtaiwan.org/f_intro.htm和http://www.figtaiwan.org/f_history.htm) 正如前面所述,firmware是用Forth語言寫在ROM裡面,而以bytecode的方式執行,所以電腦的設備驅動程式也是以類似的模式在系統啟動之時運行。 這些驅動程式通常是在擴充卡上的延伸ROM裡面,並且在作業系統啟動之前就被載入。 相互作用 你可以在按下Mac電源時,同時按著cmd+opt+O+F 這四個鍵,來進入Open Firmware。cmd鍵就是所謂的蘋果鍵,而opt就是Option鍵。之後你應該會看到一個歡迎訊息並進入一個提示像是下面這樣: ok 0 > 你可以打入mac-boot來開機或是輸入shut-down來關機。 雖然說Forth “shell“提供一個還算不錯用的文字操作編輯模式(你可以藉著ctrl+a到該行的起始點;ctrl+e到結束點;ctrl+u殺掉該行;up-arrow鍵看輸入記錄), 但是你會發現透過網路從其他別的電腦來操作Mac的Open Firmware將更方便,特別是如果你想要在firmware上寫入些程式碼。下面是個指令範例(Open Firmware除了透過文字模式操作外,別無他法): 0 > dev /packages/telnet 注意: 當你輸入成功的時候,Open Firmware會在你按下的那一行列出ok字串。所以在這一篇文件中所舉的範例,如果你看到ok,記得這個是Open Firmware所列出的,不是要你輸入的指令喔! 前面所舉的例子,如果你的Mac的Open Firmware裡面有telnet … Continue reading
【翻譯】Mac OSX檔案系統
一如現今其他作業系統,Mac OSX使用物件導向的vnode層。XNU使用的VFS layer則是從FreeBSD而來。而這兩種檔案系統之間有點小小的不同(例如:FreeBSD使用mutexes,xnu使用simple locks) 本地檔案系統 HFS HFS(Hierachical File System)過去是Mac上面的主要檔案系統,從Mac OS 8.1之後則改為HFS+。 這個小節將會去簡述Mac OSX上所支援的幾個主要檔案系統。 HFS+ HFS+是Mac OSX上面的預設檔案系統,它支援了日誌式檔案系統功能、磁碟配額功能、位元範圍鎖定、Finder的「後設資料索引(metadata)」功能、多重編 碼功能、實體與記號連結檔、別名檔、隱藏檔…等。HFS+內部式使用B-Tree架構。 就像是目前多數的日誌型檔案系統,Mac OSX只針對後設資料索引(metadata)作日誌化的動作。而日誌功能係透過在既有的HFS上面,以XNU裡一個獨立的日誌型檔案系統層級,引入此功 能到HFS+上。HFS+卷宗上的日誌檔檔名叫:.journal或.journal_info_block。這個檔案系統還支援了其他許多獨立的功能, 並在Apple上運行良好。 與HFS相似之處 HFS+在架構上其實跟HFS十分相 近,但是它另外有許多重要的改進: 磁柱採用32位元(原本是16位元),HFS將磁碟空間分為等大的allocation-blocks,且最多支援到2的16次方個 allocation-blocks。因此使用32位元的檔案會是最節省磁碟空間的方法。 檔名最長支援到255個字元 Unicode檔名編碼 檔案/目錄的屬性都有可擴充性 加入System Folder ID(用以啟動Apple作業系統),在開機過程中這個非常容易被系統找到的開機用檔案會加速開機程序。另外這檔案也支援非Apple作業系統透過HFS +檔案系統來開機。 單一檔案最大支援到2的63次方位元。 別名檔(Aliases) 別名檔跟記號連結檔一樣可以同時指向多個檔案或是目錄,但是如果你今天將所指向的目標檔案搬移,記號連結檔就會失去連結,但是別名黨會自己去更改連結使得 其連結依然有效。這是因為在HFS+下面,所有的檔案都有一個獨一無二、永恆的認證,其中會包含它的路徑。如果二者之中有一個出錯(可能是路徑或是認 證),別名檔會自動去更新成對的(去檢視哪個能找到檔案)。這個功能就是為什麼你可以隨便搬移應用程式裡面的程式,但是Dock上面的icon永遠能連到 正確程式位置讓你輕鬆開啟程式。 最佳化 … Continue reading


