第一次看見操作系統源代碼時是什麼感受?

題主大一汪。C語言課,教員給我們看了一下Linux的源代碼。瞬間獃滯,「我**你個**的,怎麼回事,這特么什麼玩意兒啊?好歹勞資也把C學得個八九不離十,啥看不懂。 」題主心裡那個無奈啊╭(°A°`)╮

下面有我自己的回答 和聽VOA差不多吧,不管常速、慢速反正就是聽不懂。你說:「哎!這個我會!」然而連在一起什麼又不會了。 源碼亦然,一看「唉?這個地方我能看懂。」,在仔細一看「哎,卧槽,這什麼鬼東東啊!」

大家回答都比較專業,有木有通俗易懂一點的?或者抖個機靈也行啊


在Solaris kernel組工作了三年 每次做點新東西看到新的模塊的代碼都覺得是另一個次元的東西。。


寫的真爛,什麼玩意啊,這麼多 goto, 注釋呢,變數名怎麼這麼不規範。


我在接觸到Windows的代碼那一刻就明白了,根本不會有人去看代碼的,網上說什麼【可以靠【使用能拿到代碼的操作系統】來提高編程水平】的都是謠言。


小學五年級的時候第一次聽說Linux,跑到一個地方花攢下來的錢去借用別人的電腦下載Linux 2.4的代碼,然後跑到列印社妄圖列印出來看。然而那個時候家裡並沒有電腦。後來才知道,要是真全部列印出來,我又沒那麼多錢。於是列印了什麼Readme,Makefile之流,也花了好多錢……依然記得因為換行符的問題,發現記事本不換行……要用寫字板。

匿了,是因為家庭條件所限,地域所限。轉眼十二年過去了,我也在所三流學校CS畢業。然並卵。現在開始慢慢補自己欠下的技術債,期望自己達到自己對自己最初的願景。

好在當下是一個好的時代,你能獲取到幾乎任何你想獲取到的東西,唯一需要做的是自己不要浮躁。(最後一段與題目無干)


第一次碰Pintos的時候沒覺得特別難. 不過只看了作業要求的那幾個點, 還是第一期的作業, 都不複雜.

第一次碰linuxkernel的時候真是有點兒驚. 從完全無從下手到修好一個實際的bug被upstream merge用了半年時間... 算是資質比較差的了...

我第一段讀懂的linux代碼是x86下處理page fault的代碼, 如果你想學, 也可以從這裡入手.: Linux/arch/x86/mm/fault.c

後來我又看了zbuddy/zswap/efi/pstore相關的代碼, 然後後來我轉行做獵頭去了.

鑒於這個是內核相關的問題, 我貼個簡短的硬廣:

招KVM內核態開發, 熟悉KVM/storage/net 之一的優先.


好歹勞資也把C學得個八九不離十,啥看不懂。

大型工程會構建自己的領域特異工具。對於C語言這種,會大量使用宏。你直接看到的是人家包了不知道多少層的東西。

而且C語言的課程肯定不會教所有的東西,比如__attribute()什麼的。

另外,Linux代碼高度依賴於GCC,會使用GCC的獨有擴展。


第一次看操作系統是Dos,翻開書是反彙編後加註釋那種,心裡有一萬頭草泥馬奔過。

第一次看正經的操作系統源碼是 Linux kernel,感覺是 ## 真好使呀,以及在書上看源碼真不合適。


《linux系統源代碼情景分析》序言上的話: 」廊腰縵回,檐牙高啄;各抱地勢,鉤心鬥角。盤盤焉,囷囷焉,蜂房水渦,矗不知乎幾千萬落。長橋卧波,未云何龍?復道行空,不霽何虹?高低冥迷,不知西東『』。

Linus的話:read the fuck code!

我的話:WTK!


第一次看操作系統代碼的時候,不是Linux,而是FreeRTOS的代碼,所以比較簡單,而且使用的處理器也是我熟悉的,有一種感覺:原來這玩意是這麼實現的!!!!

那個時候,我想起老師的一句話:這個世界上沒有黑魔法。


學完譚浩強的c,覺得學得還可以了,然後去看ucosii代碼,心裡草泥馬在奔騰,覺得自己什麼都不會。再去學c programming language ,結果什麼typedef,#include繞到你暈到不行。最後再去看linux的一堆庫文件,然後你會發現自己,你連c都沒學懂。我想說的是,看懂瞭然並卵,你還是不會編程。唯一的途徑就是多敲代碼,沒有任何捷徑


看μC/OS-II的時候覺得那些代碼都很順理成章,沒有太多疑問。

某一天終於開始要編譯Linux內核了,想弄明白第一個命令:

make ARCH=arm CROSS_COMPILE=xxxxx XXX_defconfig

都幹了些時候的時候,去看Linux的Makfile時,瞬間呆了…… 於是慌忙的去下載了GNU Make學習手冊。再接下來便是GNU的各種擴展讓人不明白。


Linux內核源碼也是挺煩的,太多typedef要跳來跳去,找好久才能找到它最初的樣子,稍微看了一點就不想看了 (╯‵□′)╯︵┻━┻

第一次看到安卓代碼,當時還是2.3時代,看的是cm的代碼,第一印象就是「大」,一個分支7個G(現在20多個G就不談了)。裡面也就二十來個文件夾,不知從何下手,也不知道每個都是幹啥的。

接觸過安卓的都知道它的架構分幾個層,層層依賴,可是在目錄結構里除了有個叫frameworks的跟framework名字挺像以外完全沒有體現啊,之後很長時間就是漫無目的地在各個文件夾中跳來跳去,只能根據用什麼語言寫的來大概判斷屬於哪一層,也沒啥進展。

真正讓我跨出第一步的是一篇博客,教大家怎麼從內核添加並實現一個驅動,然後在library層加入調用介面,再在framework層通過jni調用,並為應用層提供API,然後在應用層調用進行io操作。這是一個自底向上完全打通所有層次的例子。

看到這個例子我興奮不已,模仿他的方式想添加一個系統調用打通所有層次,用同樣的方式讓應用層去使用這個系統調用。花了很多天時間,終於……失敗了。。在library這一層斷掉了,怎麼也調不起來。至今兩年過去了,沒有再去動它,就讓這個失敗的作品靜靜地躺在硬碟的某個角落吧。。

不過這段經歷也讓我大致了解了這些代碼都是幹啥用的,也學會自己去看代碼了,想看哪一部分的代碼也能順藤摸瓜慢慢看了。也慢慢地發現安卓源碼里包含了大量的設計模式,framework里各種面向對象特性溜得飛起,堪稱包羅萬象的代碼範本。當然也發現了一些我覺得非常stupid的代碼(可能是我水平太渣還認識不到這麼做的意義。嗯,一定是這樣的。)還有各種吐槽式注釋,谷歌程序員也會賣萌。

最後想說一點,我一直不願意把安卓的kernel稱為linux kernel,因為差別真的很大……


我在水平不夠的情況下去看Linux源碼。

發現一個函數沒有說明有什麼用,名字也看不出來有什麼用,然後我就跳進去看看實現源碼,但源碼中也有沒注釋的函數,我又跳進去看。

就這麼跳了五六層,我已經忘了我是來幹嘛的了。


看懂某個函數等到要改的時候,會發現,媽蛋,這函數什麼時候被誰調用的?!!立馬就無從下手了…

基於機制與策略分離,我覺得與面向對象的介面和實現很像,很多文件就是實現了某些關鍵結構體里的函數指針。機制會在事件發生的時候通過函數指針調用具體函數(策略)。


第一次看的是ucsii,一看這是啥玩意,看完ppt在看,原來就這玩意。

看不懂的源碼,都是寫代碼的人的鍋,各種縮寫,目的就是為了讓你看不懂。


好像看了五分鐘左右就關了


最近也在學習系統方面的知識,不過不是linux是ucos。可能是ucos比較簡單的原因,很多源碼也不是很費解。個人覺得從應用層面來講會調用介面,理解工作方式,可以針對硬體作適當裁剪即可。


如果難寫,就要難讀。不然那麼容易讓你逆了抄代碼啊。。。


第一次看ucosii,大二,覺得簡單易懂啊。之後看Linux內核代碼,呵呵噠,目前還沒入門


第一次看Windows wrk發現注釋寫的好有個鳥用,依舊看不懂


推薦閱讀:

你有過什麼樣的被科技震撼的經歷?
你QQ的第一個昵稱叫什麼?
你拍過的最好看的證件照是哪張?
有哪些外國樂隊名字幾乎無法翻譯為漢語,即使勉強翻譯過來也失去了原文中的含義?
IT 男一般上些什麼網站?

TAG:調查類問題 | Linux | 程序 | 源代碼 |