欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
你真的理解Helloworld嗎從編譯鏈接到OS內核系列專(zhuān)題(經(jīng)過(guò)了大半年的努力查閱了大量資料分析了Linux VxWorks 以及國外一些大牛開(kāi)發(fā)的OS內核代碼之后 一個(gè)玩具級的OS內核終于開(kāi)發(fā)出來(lái)了)


      (經(jīng)過(guò)了大半年的努力查閱了大量資料分析了Linux VxWorks 以及國外一些大牛開(kāi)發(fā)的OS內核代碼之后 一個(gè)玩具級的OS內核終于開(kāi)發(fā)出來(lái)了)

https://m.toutiaocdn.com/group/6817454101966619148/?app=news_article&timestamp=1587392162&req_id=202004202216020100260771980C224EBE&group_id=6817454101966619148 




轉眼間,做程序開(kāi)發(fā)已經(jīng)超過(guò)十年了。這么多年是眼睜睜地看著(zhù)頭發(fā)一天天地減少,額頭一天比一天亮,脊椎越來(lái)越不好啊。

個(gè)人經(jīng)歷和心得體會(huì )

這十多年間,做過(guò)OS內核開(kāi)發(fā),虛擬機,電信級的分布式集群系統,嵌入式,高性能中間件,系統性能優(yōu)化等各種工作。

時(shí)間越久,對學(xué)無(wú)止境的體會(huì )越深,越來(lái)越能理解了那句'學(xué)得越多,越感到無(wú)知'。

從接觸計算機軟件開(kāi)發(fā)開(kāi)始,我就一直好奇于計算機內部的工作原理,一直有著(zhù)各種各樣的疑問(wèn),比如從計算機上電到看到操作系統界面,中間都做了什么事情?我們平時(shí)用C/C++、JAVA、Python等編程語(yǔ)言開(kāi)發(fā)程序軟件,那這些編程語(yǔ)言本身又是用怎么開(kāi)發(fā)的呢?我們寫(xiě)的源碼文本文件,是如何轉變成可執行文件的?這些可執行文件又是怎么被操作系統加載執行的呢?

有了疑問(wèn),一定會(huì )有答案。于是,我就一直嘗試著(zhù)各種方法尋找這些問(wèn)題的答案??珊髞?lái)發(fā)現,費了九牛二虎之力搞清楚一個(gè)疑問(wèn)之后,緊接著(zhù)就會(huì )有第二個(gè)第三個(gè)甚至更多新的疑問(wèn)出現。越深入研究,自己的疑問(wèn)越多,發(fā)現自己需要學(xué)習的東西越多。

Atlantis OS Kernel

幾年前,在嘗試搞清楚一個(gè)程序究竟是如何被操作系統執行的過(guò)程中,我逐漸被操作系統內核深深吸引了。

為了弄清楚OS內核是如何工作的,我瘋狂查閱各種書(shū)籍資料,分析內核代碼,幾乎達到了癡迷的程度。

后來(lái),甚至在工作之余,利用晚上下班和周末時(shí)間,自己開(kāi)始嘗試從零實(shí)現了一個(gè)OS內核。終于,經(jīng)過(guò)了大半年的努力,在查閱了大量資料,分析了Linux、VxWorks、以及國外一些大牛開(kāi)發(fā)的OS內核代碼之后,一個(gè)玩具級的OS內核終于開(kāi)發(fā)出來(lái)了。

雖然只是玩具,但麻雀雖小五臟俱全,OS內核的所必備的一些基本功能都有支持,如boot、內存管理、中斷管理、進(jìn)程管理和調度、IPC、文件系統、磁盤(pán)驅動(dòng)、鍵盤(pán)驅動(dòng)、簡(jiǎn)單的終端等。來(lái)張截圖吧:

Atlantis OS Kernel 歡迎界面

是不是滿(mǎn)滿(mǎn)的VxWorks風(fēng)呢 :-)

隨后,為了研究調試器的工作原理,又在這個(gè)OS內核上實(shí)現了一個(gè)小的調試器,支持基本的斷點(diǎn)、單步執行、反匯編、內存dump等功能。再來(lái)張圖:

Atlantis 調試界面

一個(gè)編譯器

再后來(lái),我又漸漸地迷上了編譯器。為了搞清楚編譯器的原理,我又開(kāi)始自己動(dòng)手從零開(kāi)始實(shí)現了一個(gè)編譯器。

目前已經(jīng)實(shí)現了手寫(xiě)的詞法分析器,語(yǔ)法分析器、語(yǔ)義分析、基于A(yíng)ST(抽象語(yǔ)法樹(shù))的interpreter(程序解釋器)、基于寄存器的虛擬機等部件。

這個(gè)編譯器作為一個(gè)業(yè)余項目,目前仍然在持續開(kāi)發(fā)中,但是已經(jīng)支持了C語(yǔ)言的大部分語(yǔ)法,還有一些我覺(jué)得比較cool的feature,如語(yǔ)言?xún)戎玫挠邢逘顟B(tài)自動(dòng)機、消息通信、并行計算、定時(shí)器等針對分布式系統開(kāi)發(fā)的feature。

還有很多feature也在計劃當中,如類(lèi)的支持,異常處理,JIT(Just-In-Time),機器碼生成等,等時(shí)間充裕的時(shí)候,也會(huì )逐個(gè)實(shí)現。

老規矩,來(lái)個(gè)'Hello, World!'感受一下吧:

'Hello, World!' 示例

簡(jiǎn)單解釋下:

  • 第1行 message關(guān)鍵字定義了一個(gè)ID為1234的消息test_msg_s,這個(gè)消息只有一個(gè)字段,是大小為32的字符數組。

  • 第5行 automata關(guān)鍵字定義了一個(gè)名字為master的狀態(tài)機

  • 第7行 state關(guān)鍵字定義了一個(gè)名字為wait_msg的狀態(tài),一個(gè)狀態(tài)機里可以有多個(gè)不同狀態(tài),狀態(tài)之間可以相互遷移。這里為了簡(jiǎn)單,只定義了一個(gè)狀態(tài)

  • 第9行 input關(guān)鍵字表示等待接收test_msg_s的消息,一個(gè)狀態(tài)里可以接收多個(gè)不同的消息,這里為了演示方便,只接收一條消息

  • 第11行 接收到消息后,用內置函數print把消息內容打印出來(lái)

  • 第12行 output關(guān)鍵字表示發(fā)送一條消息test_msg_s給名字為slave的狀態(tài)機

  • 第13行 stop關(guān)鍵字表示結束當前狀態(tài)機,也就是master狀態(tài)機

  • 第17~27行 定義了一個(gè)名字為slave的狀態(tài)機,與master狀態(tài)機類(lèi)似

  • 第28~34行 定義程序入口main函數,其中第32行表示開(kāi)始運行狀態(tài)機

這便是一個(gè)完整的可運行的程序了,沒(méi)有任何其它的依賴(lài)。

整個(gè)程序很簡(jiǎn)單,就是定義兩個(gè)狀態(tài)機master和slave,main函數里面打印出'Hello, World!'后,發(fā)一條test_msg_s給master狀態(tài)機,master狀態(tài)機默認處于wait_msg狀態(tài),等接收到消息后,把消息內容打印出來(lái),然后發(fā)送一條消息給slave狀態(tài)機,然后退出。同樣,slave狀態(tài)機收到消息把消息打印出來(lái),然后退出。程序執行結果如下所示:

越是看似簡(jiǎn)單的東西,背后越不簡(jiǎn)單

這一路走來(lái),我越來(lái)越體會(huì )到,越是看似簡(jiǎn)單的東西,其背后往往隱藏著(zhù)非常復雜的機理。正是由于其背后這一系列強大而復雜的支持系統的存在,才使得我們在做這件事情的時(shí)候變得如此輕松簡(jiǎn)單,甚至可以不需要任何大腦思考的過(guò)程。

越是一些如呼吸一般被我們習以為常的東西,越是容易被我們忽略,我們把它們的存在當做是理所當然,慢慢產(chǎn)生依賴(lài),但一旦離開(kāi)它們,我們會(huì )馬上變得不適應,甚至無(wú)所適從。

拿我們日常寫(xiě)代碼使用的各種各樣的IDE為例,現在流行的各種IDE,如Virtual Studio Code, SubText, Eclipse等,幾乎無(wú)一例外,全都提供了一系列提高開(kāi)發(fā)效率的輔助功能,如語(yǔ)法高亮、自動(dòng)補全,上下文關(guān)聯(lián)檢索,錯誤檢查等功能。我們對這些功能早已習以為常,認為這些都是IDE理所當然必須提供的基本功能。

以至于如果現在讓我們去使用一個(gè)沒(méi)有語(yǔ)法高亮,沒(méi)有自動(dòng)補全功能的IDE,我們便會(huì )各種不適應,甚至難以忍受。設想一下,如果現在要求你必須使用Windows記事本編寫(xiě)代碼,你還能愉快的敲代碼嗎?你覺(jué)得你最多能堅持多久呢?離發(fā)瘋還遠嗎?

那么,大家有沒(méi)有想過(guò),這些我們自認為的“基本功能”是如何實(shí)現的呢?這其中涉及到哪些技術(shù)?實(shí)現這些功能的難度有多大?如果要求你自己動(dòng)手實(shí)現一套這樣的功能,能做到嗎?

你對Hello World究竟了解多少呢?

同樣,對于'Hello, World!',我們再熟悉不過(guò)了,幾乎所有人都是被它帶進(jìn)編程的大門(mén)的,它是如此的簡(jiǎn)單,我們甚至閉著(zhù)眼睛都能寫(xiě)出來(lái)。但它真的就僅僅是往控制臺窗口上打印一句'Hello, World!'字符串那么簡(jiǎn)單嗎?你有沒(méi)有思考過(guò)隱藏在'Hello, World!'背后的那些并不為大多數人所知的技術(shù)呢?

不妨嘗試回答下下面幾個(gè)問(wèn)題,看你是否能夠一下子給出一個(gè)清晰明確的答案呢?

  • 編譯器把“Hello, World!”從C語(yǔ)言源碼轉換成可執行文件,中間經(jīng)歷了哪些過(guò)程?每個(gè)過(guò)程具體做了什么呢?

  • 對于可執行文件中都有哪些內容呢?你對ELF文件格式了解多少呢?

  • gdb調試程序的時(shí)候,是怎么把可執行文件和源代碼關(guān)聯(lián)到一起的呢?

  • 程序被加載起來(lái)之后,在內存中的布局是什么樣的呢?

  • C語(yǔ)言程序的全局變量、局部變量、靜態(tài)變量、函數體、參數、字符串分別是在哪里存儲的呢?函數參數是怎么傳遞的?返回值呢?

  • “Hello, World!”是怎么運行起來(lái)的呢?入口地址是什么呢?操作系統是怎么知道這個(gè)地址的呢?

  • C語(yǔ)言程序真的是從main()函數開(kāi)始執行的嗎?main()函數之前發(fā)生了什么?

  • main()函數的參數是什么嗎?它的參數是誰(shuí)傳遞過(guò)去的呢?

  • main()函數執行完后,程序真的就結束了嗎?main()函數的返回值返回到哪里了呢?

  • “Hello, World!”是怎么打印出來(lái)的呢?真的是printf()函數打印出來(lái)的嗎?

  • 你知道printf()函數的原型是什么嗎?它跟普通的函數有什么區別呢?是如何實(shí)現的呢?

  • 程序調用printf()之后究竟發(fā)生了什么?它是怎么跟OS內核聯(lián)系起來(lái)的呢?

  • 你知道動(dòng)態(tài)鏈接庫和靜態(tài)鏈接庫的區別嗎?程序執行的時(shí)候,是怎么找到動(dòng)態(tài)鏈接庫里的函數呢?

  • 你能夠在不中斷一個(gè)程序正常執行的情況下,替換掉程序中的某個(gè)函數嗎?

對上面的問(wèn)題,如果你確信能夠非常清晰明確地解釋清楚每個(gè)細節,那么說(shuō)明你對計算機系統的基本原理和程序的執行原理已經(jīng)基本掌握了。

如果你對其中一些問(wèn)題不是很了解,或者有些東西只知其然而不知其所以然,甚至都沒(méi)有想到一個(gè)簡(jiǎn)單的'Hello, World!'背后具體還有這么多值得思考的問(wèn)題,那也不要緊。

接下來(lái)我會(huì )更新一系列文章,會(huì )從編譯,鏈接、加載到程序的執行過(guò)程,從ELF文件格式到動(dòng)態(tài)鏈接庫、靜態(tài)鏈接庫,從C語(yǔ)言程序各要素的基本存儲到操作系統內存管理,詳細解析其中涉及到的每一個(gè)技術(shù)細節。力爭通過(guò)這一系列專(zhuān)題的講解,讓你對計算機程序運行背后的隱藏機制有一個(gè)全面而清晰的理解。

Hello World背后的故事系列文章

計劃要更新的內容,初步規劃大綱如下:

前言 (本篇)

第1章 編譯器的工作原理

第2章 鏈接器的工作原理

第3章 深入分析ELF文件格式

第4章 動(dòng)態(tài)鏈接庫與靜態(tài)鏈接庫

第5章 程序的數據存儲

第6章 函數參數、返回值的傳遞過(guò)程

第7章 虛擬內存

第8章 程序的加載和重定位

第9章 程序在內存中的布局

第10章 帶你重新認識main()函數

第11章 從應用程序到系統調用

第12章 程序的退出和資源回收

后續根據需要可能會(huì )進(jìn)行細微調整,可能會(huì )添加新的內容。另外,有些章節涉及的知識點(diǎn)比較多,為了盡可能解釋清楚,會(huì )分為幾篇文章進(jìn)行講解。

我認為這些都是作為程序員必須要掌握的東西,理解了這些知識之后,會(huì )完善自己的技術(shù)知識體系,增強自己程序開(kāi)發(fā)調試的能力都大有裨益。相信掌握這些知識以后,你對整個(gè)計算機技術(shù)的體系結構會(huì )有更加深刻的理解。

感興趣的童鞋不妨關(guān)注一下,一起討論學(xué)習,相信你會(huì )有所收獲的。

也歡迎在下面留言討論,聊聊你對本系列內容有什么建議,或者你想知道的,感興趣的東西。

右上角關(guān)注一下吧!

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
利用函數參數和返回值提高嵌入式軟件質(zhì)量
關(guān)于uC/OS的簡(jiǎn)單學(xué)習
uC/OS II在S3C2410上的移植
宋寶華: 關(guān)于Linux編譯優(yōu)化幾個(gè)必須掌握的姿勢
μC/OS微內核簡(jiǎn)單運用
一百年后,人類(lèi)怎樣編程? [組圖]
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久