給老師與同學:作業系統投影片下載
發表於2010.08.05 13:57

喜歡這篇文章嗎?

 

給老師與同學:作業系統投影片下載
 
 
冼鏡光
August 5, 2010上線
 
這一篇不是與攝影有關的文字,它的主題是電子計算機科學中的作業系統
 
              作業系統(Operating Systems,以下簡稱OS)是個人授課生涯中次數最多而且也是時間最長的一門課,從台灣教到美國、從大學部教到研究所,雖然早就不做OS的研究,但教久之後就不會有同事願意接這門吃力不討好的課。也許一兩年後會卸下這個擔子改教Concurrent Computing,所以趁著這個機會把教材整理一番和各位老師同學分享。其實這些資料在國內論壇發表過,不過都十分簡略,因此從新整理在此地再貼一次、算是最後一版。
 
這一篇是我教大四OS的總整理,文中會談到這門課的背景、課程內容、課程網頁等等,也提供了在課堂中使用近500張投影片,三次考試的考題和部份解答,以及若干程式設計習題。希望這些材料對國內學習OS的學生、在職人士、以及教類似科目的老師有點幫助。
 
            您可以私下自由使用這些材料,一旦公開(含教學)使用部份或全部內容,請給我適當的credit,千萬要尊重我的智慧財產權,不要剖竊變成您的作品。本文末有引用的方式。
 
 
工作需要進入複線作業
 
            很多朋友都知道我不是電子計算機科班出身,但因為工作需要、誤打誤撞寫起程式來。在大學時程式設計課混了過關(見慘遭助教修理的一道程式習題一文),但工作就不一樣了,所以很用功地學會、也學通了ALGOLAPLCOBOLFORTRANPL/IRPG這些重要語言。然而程式總是要處理資料、叫用系統(IBM的術語是supervisor callUnixWindows則說成system call)等等,所以除了程式語言之外還得學一些OS的東西。
 
            開始玩OS時有點吃力,畢竟不是科班出身,很多東西都沒學過而得在黑暗中摸索,不過學會了就是自己的(我總是這樣告訴自己);這樣過了一段進度很慢的日子,一旦弄清楚來龍去脈就快多了。某天頂頭上司告訴我經費有點緊、得節省些,這是個令人頭大的問題,因為那時IBM收費的方式細到不得了,譬如run一個job多少錢、起動一個process多少錢、CPU多少時間多少錢、記憶體多少K多少錢、掛一卷磁帶或裝一個磁碟多少錢等等。捏指一算,CPU時間和記憶體的錢省不了,可以省的差不多就是其它拉拉雜雜的費用,而且帳單中這些費用的總和還不低。
 
            心裡頭的第一個想法就是降低程式的數目,這樣至少可以省下run job和起動process的錢,不過這個做法有個大風險,因為得把很多大程式合成為一個超大程式,一旦出錯的後果肯定會十分嚴重。有一天在讀PL/I F手冊時看到一個從來沒用過而且一直忽略了的關鍵字TASK,手冊上寫得很簡略,也許是非科班出身缺少了背景知識因而看不太懂,請教一些PL/I老手也得不到答案。花了不少時間,最後還是搞通了,用今天的話來說就是PL/I F的複線作業功能(multithreading,不過IBM和當時的說法是multitasking);同一時期的ALGOL 68也有類似的功能,但當時沒有編譯程式可用。
 
            搞懂這一項功能足足讓我興奮好多天,因為只要把手上的程式都當成一絛執作線(threadPL/I是說一個task),然後在主線(main threadmain task)上控制何時執行那一條子線就行了。當然,所有程式都得稍做修改,因為它們都是一條執行線而不再是主程式,還得仔細規劃overlay結構,讓只有正在執行的執行線在記憶體中(省記憶體),這樣執行超大程式時只起動一次,從而省下不少錢。更重要的是同步結構,讓子線之間溝通順暢、資料傳遞無誤。
 
            但麻煩的是,寫了幾個PL/I F測試程式都無法編譯、說是沒有這一項功能,問了IBM支援中心才知道PL/I F當時的版本根本不支援這項複線作業。轉念一想,複線作業應該是OS功能才能支援PL/I這樣的高階程式語言,所以查IBM的組合語言集體指令(macro)一定會有類似的東西。皇天不負有心人,幾分鐘後就找到ATTACHDETACHWAITPOST這幾道和PL/I F對應的集體指令,經過測試之後証實正是心目中想要的功能。此後,這一項技巧幫我省了不少錢,也讓我覺得玩OS的確不輸給寫程式,這是在1970年代後半段的事。
 
 
開始學OS
 
            下一個有趣的經驗是從換用VM/370開始的。那時手上有一些國外研究單位寄來的有用軟體,雖然都是IBM系統,但IBM至少有DOS/VSOS/MFTOS/MVT這三個常見的OS,這造成用某個軟體時得要等到系統中有對應的OS,相當麻煩。換用VM/370之後在每一個VMvirtual machine、虛擬機器)上都可以載入不同OS,當然也可以載入CMS做終端機式個人電腦作業。事實上,從終端機login時得到的是一台虛擬的IBM 370硬體,使用人可以選擇自己需要的OS
 
            因為使用人有一台虛擬IBM 370硬體,這是很難得的、可以完全摸熟IBM系統的機會。首先當然得有系統地了解OS,所以買了一本當時的名著,Stuart Madnick和John J. Donovan合寫的Operating Systems(1974),從頭讀到尾。Madnick和Donovan的書應該是當時科班學生的OS教科書,下左是國際平裝版的封面。這本書有個好處,它把IBM的IPL(initial program loader,就是今天的boot或bootstrap、把OS載入記憶體的程式)說得一清二楚,還有一個小小的範例OS,我就是由此開始在VM/370上徹底弄清楚中斷(interrupt)的結構和細節,也寫了一個大致上可以接收中斷訊號和虛擬記憶體的玩具OS,後來改用ASSIST V這套IBM System 360/370硬體模擬系統之後更是如魚得水。今天的學生要學這些OS基本和識就簡單太多了,Nachos這樣的軟體用來毫不費力。對我而言,VM/370和ASSIST V是搞清楚並且動手做(至少是一部份)OS的兩大功臣。題外話,如果對IBM機型的模擬軟體有興趣,請參看Hercules計畫還有CBTTAPE.ORG網頁,從那兒您可以找到像OS/360、MVS、VM/370等軟體。
 
 
 
 
            但是弄通了純OS層面的細節對更有效地使用複線作業用處並不很大,為了突破這一道瓶頸,又買了另一本名著,這本是Per Brinch Hansen寫的Operating System Principles(1973年,上右照片)。這本書和上一本的味道完全不同,用相當長的篇幅講解process(行程)之間的溝通和相關的同步機制,這正是我工作上需要的。然而Brinch Hansen的書比較理論性,比Madnick和Donovan的書難讀得多,當然閱讀時間也長很多,但這卻為自己在concurrent computing上打下十分紮實的基礎,對往後的工作和研究幫助十分大。
 
            學會這些技術後沒多久,主管建議去讀個碩士以便昇遷時多點好處,兩年後拿到學位在淡江計算機系教書,先是數值方法(見給老師與同學:數值方法投影片下載),後來改教OS和編譯程式,這是和OS這門課結緣的開始。這門課教了若干年、到出國唸書為止,其間還把Madnick和Donovan的書加上不少新資料翻譯出版(1982,見下面照片),不過這本書只出了上冊,因為興趣改變而且工作也忙,下冊一直沒出成。希望未來有機會重出一本OS書。
 
 
 
 
 
背景資訊
 
        這是開給計算機(CS)和計算機工程(CE)四年級學生的必修課,授課重點是傳統OS的基礎部份,而且不會講到網路、分散式處理等課題,因為本系開了相關課程。我們一個學期有十四週,第十五週是期末考,所以上課的時程相當緊湊。OS在秋季班和春季班都有,個人幾乎都是教秋季班。這是門三學分(加上一學分實習)的課,每週授課三小時,因此一個學期總共有42小時上課時間,不過有兩次一個半小時的期中考,扣掉考試和可能的假期,上課時間最多只有38小時。
 
            每週上完課後都有指定的閱讀材料與少數課本中的練習題,我既不收習題、也不改習題。因為這是CS的主課,程式寫作要求很高(大約1/3的授課時間會討論到和程式設計有關的論題),一個學期有五道程式習題和一個迷你計劃。這門課的網頁在此,在那兒可以找到公告事項、每一週的指定閱讀材料、程式題目、考試解答等等,不過我拿掉了學生的成績網頁。請注意,這是2009年秋季班的課程綱要,僅供參考用,其它年度的習題和考題等等不會完全相同。
 
            本課使用C/C++寫作程式、不能用Java其它語言,使用的系統以往是SunOS,後來換成Sun Solaris,目前是Linux,但不能用Windows;雖然學生可以用Windows設計程式、但改作業時只用Linux,而且有兩個程式只能在Unix上作業。另外,除了和本課有關部份的程式技巧之外,不會複習C/C++Linux的知識。
 
 
課程綱要
 
            這門課大致上分成三部份,中間有兩次期中考、加上一次期末考。第一節課先把話說清楚,交待上課時間、教室、教科書(Abraham Silberschatz, Peter Bear Galvin, Greg Gagne, Operating Systems Concepts, 8th edition,John Wiley & Sons, 2009,見下面照片)、注意事項、交習題方式、課程大綱等等。這部份的投影片在此(共5頁)。接下來,我們馬上進入正題、毫不浪費時間,因為38小時的授課時間的確很緊。接下來的討論以時間(不是教材)分成三部份,每一部份大致上是一個月,該部份結束後就是一個半小時的考試、第三部份結束後是期末考。以下是各部份的教學內容。
 
 
 
 
 
第一部份
 
            這部份討論課本的第一和第二章,算是OS的簡介,大約會用一星期的時間,這兩章的投影片如下:
 
第一章
Introduction
32頁
562K
第二
Operating System Structures
31
84K
 
            簡介完後就進入的重頭戲,也是學生最討厭、很多人學不好的部份:行程、執行線、同步機制、和複線作業程式寫作,這是課本第三、第四、和第六章的一部份。因為這部份比較難,而且有兩個程式習題,所以會警告學生不要溜課,因為錯過一小時的課很可能得自己花好幾個小時才能補回來;當然更會叮嚀他們複線作業的思考方式與他們學了好多年的單線模式是不同的。說歸說,總是有自以為程式設計段數高的學生會蹺課,所以第一節課就明講:If you failyou fail! 不要拿什麼奇奇怪怪的理由來要分數。好在是,學生可能會打嗑睡,但不會啃雞腿吃泡麵(真的,2009年的課排在中午12點半到下午2點,從來就沒有學生在教室中大嚼午餐的),如果非要在課堂上吃東西的話(一般是簡單的三明治),通常會問教授是否在意,而且多半會先在沒人的角落吃完。當然,不會有人會在意上課時吃餅乾之類的。
 
        第三章是講行程(process),強調行程狀態圖(process state diagram)、由此而來的排班(也叫做排程、scheduler)、以及環境切換(context switch)的觀念和細節。第四章講執行線(thread),強調執行線的觀念和各種執行線的系統模型。這兩章的投影片如下:
 
第三章
Processes
20
50K
第四章
Threads
26
966K
下載  
 
            個人的教法會跳過第五章而直接講第六章,因為第三章已經交待過排班的觀念,足夠讓學生開始寫複線作業和行程同步程式。在第一次期中考之前大致上可以講完行程同步(process synchronization)的觀念、軟硬體解法、和號誌(semaphore,學生最痛恨的課題)。第六章討論重點在競爭狀態(race conditions),由此而引出臨界區域(critical section)、互斥(mutual exclusion)、以及解決臨界區域問題的要件和軟硬體解法,基本的期望是學生可以找出一個程式中的可能競爭狀態,以及正確地証明一個簡單程式能夠(或無法)符合解決臨界區域問題的某個要件。
 
第二部份是最難的:號誌和它的應用。此地先定義何謂號誌,它的常見用法,並且用若干範例解釋使用號誌的技巧。用號誌一不小心就會產生競爭狀態,但競爭狀態是否會發生卻和系統排班等等程式無法掌握的外部因素有關,所以這一次執行時得到正確結果並不表示下一次執行也是正確的(換句話說,複線程式的行為是動態的,每次執行都不相同),於是如何找出程式中可能會出現的競爭狀態就是寫作複線作業程式必需學會的技巧。第三部份用一些例子說明如何找競爭狀態;這部份的內容也在William Stallings寫的Operating SystemsInternals and Design Principles的第5和第6版中使用。以下是這些投影片的下載資訊:
 
第六章之一
Basic Concepts
29
69K
第六章之二
Semaphores
30
290K
第六章之三
Race Condition Revisited
28
144K
 
            第一部份就到此為止,學生在這段時間內要做兩個程式習題,他們得用C++和我們發展出來的軟體ThreadMentor(見下文的說明)。第一個習題泿簡單、只是讓學生熟悉複線作業和ThreadMentor的一個熱身程式,題目網頁在此。第二個習題要求學生用號誌解決一個有趣的行程同步問題,題目比較難,通常會給他們三週的時間、考完第一次考試後再交習題,但會警告學生及早開始、要不然多半會做不出來,第二題的網頁在此
 
            學生在做第二個習題時是第一次考試,考試範圍包含第一部份全部題材,時間是80分鐘,學生不可以帶書、但可以使用計算機(含工程用計算機)。2009年的考題在此,各位不妨抽空做做看,完整的解答在此
 
第二部份
 
            第二部份接續第一部份的行程同步,討論監控程式(monitor)。一般而言,監控程式比較結構化、也比號誌好用,不過也有少數學生不作此想、認為限制太多;監控程式講完之後本課程就不再有絞腦汁的課題了。
 
接下來,我們倒回去講行程排班(第五章),然後是系統死鎖(第七章);這兩章的重點都只在基本觀念和演算法。除非有什麼意外,這一部份多半會講到記憶體管理的分頁(paging)技巧(第八章),內容都不難、全是知識性的東西,很多學生都耳熟能詳。下面是第二部份的投影片:
 
第六章之四
Monitor
26
353K
第五章
CPU Scheduling
46
470K
第七章
Deadlocks
30
130K
第八章
Memory Management
36頁
899K
 
            這一部份有兩個程式習題。第一個是用ThreadMentorMonitor功能解決一個有趣的行程同步問題,而且不能用號誌(為什麼?),習題的網頁在此。做完這個習題之後就不再用ThreadMentor了。接下來的程式設計會討論Unix的行程觀念,由於時間因素,只會講到如何產生行程、如何等待行程結束、如何在行程中執行另一固程式、以及行程之間的共用記憶體等(請參看Unix Multiprocess Programming的簡單介紹),但卻沒有討論到Unix的管線(pipe)、號誌(semaphore)、和訊息佇列(數message queue)。學會這些基本技巧之後,學生在Linux上做第四道習題(頗為簡單),網頁在此
 
            第二次期中考的範圍包含以上的章節、和一些第一部份的內容。第二次考試通常會有少數第一次考試的考古題,任何大錯或不完整就不計分。第二次的考題在此,時間仍舊是80分鐘,完整的解答在此
 
第三部份
 
            第三部份繼續把第八章教完,然後討論虛擬記憶體(Virtual Memory,第九章),題材相當傳統。從第十章起是檔案系統與I/O結構,因為時間因素、而且系統不同檔案和I/O結構就會有差異,因此本課程只討論最基本的部份。所以第十章只討論檔案的基本觀念、取存方式、目錄結構、共用檔案、和取存管制;第十一章只討論目錄製作、檔案空間管理、和磁碟中自由空間(沒用到的部份)管理三者;第十二章介紹磁碟結構、讀寫頭排班、和RAID磁碟陣列;最後的第十三章非常短,只瀏覽了最基本的I/O結構而已(譬如DMA和緩衝區)。
 
第九章
Virtual Memory
50
1MB
第十章
File System Interface
33
615K
第十一章
File System Implementation
27
1.5MB
第十二章
Mass Storage Structure
28頁
2.3MB
第十三章
I/O Systems
16頁
837K
 
            第三部份的程式寫作教學生如何掌握Unix的訊號(signal),這相當於在程式中建立某種中斷機制、方便處理一些突發性事件。Unix上的訊號處理有過很多代,目前以IEEE標準signal為大宗,往前推些是BSD版,再早的就是原始Unix版了。為了在短時間內可以讓學生了解觀念並且上機做題目,我選用早期、但威力不強(不過比較簡單)的signal版(請看此地),並且告訴學生要從這些觀念出發學會目前的IEEE標準版。討論完後就做第五道習題,網頁在此
 
            這道題目基本上是設計一個shell和一個假CPU排班程式,學生可以做最簡單的版本,但是可以選擇難度比較高的第二或第三版(當然會加分)。難度較高的版本要求產生若干Unix行程執行給定的函數(學生要提供主程式),然後用Unix的signal把這些行程在使用人空間內排班;第三版則進一步要求每一個行程在不同視窗中執行,於是使用人可以很明顯地看到那一個行程正在執行,那些行程正在等著執行。
 
        學生在做第五道習題時,課堂上會討論最後一項系統程式寫作的技巧:setjmp()longjmp(),這兩個函數可以用來設計協同程式(coroutine);事實上,系統中參與排班的程式就可以看成是一個大協同程式。這項技巧的說明在此。學生可以用這項技巧寫作第五題的程式,但它真正的用途是一個兩週內完成的迷你計劃,題目網頁在此。這個計劃提供給學生一個抽掉了若干關鍵部份的複線作業程式庫,要求學生把抽掉的了部份填回去,設計號誌和通訊管道(communication channel,嚴格來說是一郵箱mailBox),並且用這些機制解決若干同步的題目。如果想試著做這個迷你計劃,請用Windows版而不是Linux版(除非您的Linux是比較舊的版本)。後者的GNU C/C++編譯程式有所更動使setjmp部份無法正常作業,原因是GNU C/C++不讓使用人看得到和用得到BPSP這些名稱,於是很多使用這些名稱的程式變成無法編譯。十多年前當Linux開始流行並且宣稱會取代Windows時,很多IT專家就不看好,並且指出雖然免費但維護費用可能不低、而且終究某些軟體發展團體會基於某種奇怪的意識型態做出和以前不相容的軟體,這個現象在2004左右開始,於是一火大就把家中所有Linux全部清除,只有辦公室機器還保留Linux。
 
        本課程的期末考是兩小時,期末考題目在此;期末考的重點是第三部份,但仍然有考古題。很抱歉,期末考沒有答案。
 
 
關於ThreadMentor
 
            本課程有關複線作業程式設計部份都用我們發展出來的ThreadMentor。在此之前用過一些其它程式庫,譬如SunOS的LWP和Solaris複線作業(見Solaris Multithreaded Programming這份十多年前的教材)、甚至於Pthread,但發現效果都不理想,主要原因不外乎是語法複雜、而且初學者感覺不到也看不到複線作業(特別是執行線同步)的動作,所以在美國國科會(National Science Foundation)支助下發展了一組在課堂中給初學者使用的軟體,ThreadMentor是其中一項。ThreadMentor讓學生用教科書的簡單語法寫作複線作業的C++程式,支援鎖(lock)、號誌(semaphore)、監控程式(monitor)、通訊管道(channel)等等相當多的同步機制。程式執行時學生可以看到每一條執行線和每一個同步機制當時的狀態和過去的歷史,更可以看到那一條執行線透過那一個同步機制影響那一條執行線的關係等等,對初學者了解複線作業幫助很大。這個計劃已經結束多年ThreadMentor也用了差不多10年,算是穩定的系統。如果您有興趣,計劃的網頁在此;仔細的ThreadMentor教學網頁在此,縱使不用ThreadMentor這個網頁還是會教您不少同步的概念和技巧,但是卻一直沒寫完,很多ThreadMentor的功能都還沒講到;如果要試一試,Linux的Fedora版在此(2.2GB),Windows版在此(4.7GB),安裝FAQ在此。最後,請勿發e-mail或留言求救,因為計劃已經結束很久、不再提供技術支援,不過大多數本系的學生或校外人士安裝都沒有問題,不成功的話請先看FAQ或查手冊、或就近找懂您的系統的高手問問,很抱歉。
 
 
結語
 
        以上是把十多年來教大四作業系統的課程做了個介紹,並且提供投影片、考題、解答、和相關軟體,希望對在學學生、授課老師、以及職業人士有所幫助。對在學的同學(特別是用相同課本的同學)而言,誠懇建議您仔細看看投影片,相信對書本的內容會有進一步的了解(特別是複線作業和行程同步方面),再試做考題和程式練習,看您能否勝過我的美國學生?加油,祝您成功!
 
 
未經本人同意,請勿轉載轉貼本文任何片段,請尊重智慧財產(著作)權
引用方式:冼鏡光,給老師與同學作業系統投影片下載DCView.com達人部落格(http://blog.dcview.com/article.php?a=UW9QNABgADQHYA%3D%3D
 
 
│本站文章分類:概念解析
│今日人氣:12 │累計人氣:94226 │回應(3)

喜歡這篇文章嗎?

回應

Mark Yang  於2010.08.11 23:37  

冼老師您好,

請教您close-up lens, 其實就是加在鏡頭前面的放大鏡, 通常有 +1, +2, +3等規格, 它們會對主要鏡頭的焦距產生多少影響, 既然是凸透鏡, 我猜應該是會把焦距變短, but, I am asking, by what extent?

版主回應︰ 於 2010.08.12 14:50

若鏡頭和近拍鏡的焦距分別是F和f,在單片薄透鏡的前提下合成鏡頭的焦距是(F*f)/(F+f);近拍鏡的焦距是1000/屈光度,所以+2的焦距是500mm = 1000/2。不過這是極度簡化的值,因為鏡頭和近拍鏡都不是單片薄透鏡,而且兩者之間的距離也不是0,所以上式的結果會有誤差,有時還不小。請看拙著單元K的詳細討論。

Wang  於2010.09.30 12:58  

冼老師您好,
學生對於資訊工程很有興趣,
聽很多人推薦老師寫的"名題精選百則",
可是市面上似乎已經絕版了,
詢問出版社似乎也沒甚麼結果,
請問老師有打算再版這一本好書嗎?
謝謝老師

版主回應︰ 於 2010.09.30 13:39

前些日子儒林告訴我,他們會印這本書,請過幾天再和他們聯絡,也許開學期間太忙趕不及。

Hill  於2011.10.16 01:47  

您好 冼教授,
对于学好concurrent computing 这门课,你有什么好的建议? 有没有中文版的资料可以参考?

版主回應︰ 於 2011.10.20 13:41

(1) 好像沒有中文的concurrent computing的書,或許有翻譯書,但因為住在國外無法準確回答您的問題。

(2) 您可以參考我這門大三的concurrent computing課程,找相關中文補充知識: http://www.csl.mtu.edu/cs3331.ck/www/Home.html

  • 驗證碼:請點選拉車伕與拉車重換驗證

    • 0ff9606907d196a4ac957b0a2adcee5d
    • b1ae2a81b0325e2b7944264ec76884ec
    • c57eb310e9e97f3d629cc63e18c38ddb


<< 2019-12 >>
1234567
891011121314
15161718192021
22232425262728
293031

文章列表

  1. 模型 (1)
  2. 航太小語 (1)
  3. 手機配件 (15)
  4. 老鏡叢談:拆老機、玩老鏡 (6) NEW!
  5. 老鏡叢談:反射鏡頭(7)
  6. PC級電腦古董零件 (1)
  7. 中文攝影書書評 (2)
  8. 家居瑣記(8)
  9. SLR到DSLR之路 (2)
  10. 相機短篇 (4)
  11. 鏡頭短篇 (7)
  12. 部落格公告 (4)
  13. 後院紀事 (3)
  14. 急就章--各種器材紀事(24)
  15. 瑣瑣碎碎的話題 (9)
  16. 我寫的書 (4)
  17. Nikon鏡頭筆談 (7)
  18. 寫給新手 (21)
  19. 相機鏡頭 (6)
  20. 姑妄言之集 (3)
  21. 遊記 (8)
  22. 電子計算機(電腦)科學 (4)
  23. 老機雜記 (27)
  24. 攝影思潮回顧 (1)
  25. 數位相機(DC)隨筆 (13)
  26. 大湖燈塔巡禮 (3)
  27. 書!書!書! (11)
  28. 基礎知識 (14)
  29. 閒話SLR (24)
  30. 老鏡叢談 (33)

最新文章發表

  1. Vest Pocket Kodak口袋型相機的鏡頭(1912)
  2. BASIC的各種版本
  3. 可否請這位先生(或女士)收歛些
  4. 在1984年(蔡英文女士得博士學位)時有沒有右邊切齊的打字機或軟體?
  5. Nikon最早期的望遠鏡頭四兄弟(1964):NIKKOR-Q 400mm 1:4.5 Auto

最新回應訊息

  1. Re:冼老師您好:    by 路西法(12.13)
  2. Re:問題不在於是否打字機 by stupid woman(12.01)
  3. Re:即便對齊與否不是問題 by Chen(12.01)
  4. Re:感謝有您 by James(11.25)
  5. Re:真佩服洗鏡光老師考據 by Ben(11.23)

人氣指數

  1. 今日人氣指數:59096
  2. 累積人氣指數:208339855