九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Unix起源:“一周,一周,再一周,我們就有了Unix

https://m.toutiao.com/is/eAdhbA5/ 



計算器曾經(jīng)是真實器物,后來成了手機應用。與之相比,計算機本質(zhì)上沒有特別多不同之處。計算機如今能以高達每秒十億次的極快速度做算術[1],但在20世紀70年代,運算速度遠遠低于每秒百萬次。

20世紀60年代和20世紀70年代典型的計算機有一個由數(shù)十種指令組成的指令集,它可以執(zhí)行:算術(加、減、乘、除),從主存儲器中讀出信息,將信息保存到主存儲器,以及與磁盤或其他連接設備通信。另外還有一件至關重要的事:其中有一些指令負責依據(jù)之前的計算結果,即已做完的事,決定后續(xù)執(zhí)行什么指令——這決定了計算機下一步做什么。這樣一來,計算機就掌控了自己的命運。

指令和數(shù)據(jù)存放在同一個主存儲器中,這個主存儲器通常被叫作RAM,也就是“隨機存儲器”(random access memory)。將一系列指令裝載到RAM,計算機就會根據(jù)指令內(nèi)容執(zhí)行不同任務。這就是你點擊Word或Chrome瀏覽器圖標時發(fā)生的事——操作系統(tǒng)將那個程序的指令裝入內(nèi)存,開始運行。

使用某種編程語言,為執(zhí)行某項要完成的任務創(chuàng)建操作序列,這就是所謂的編程。直接創(chuàng)建所需指令是有可能的,但這項工作實在繁難,哪怕是寫很小的程序也是如此,所以編程領域的大部分進步都與創(chuàng)造接近人類表達計算方式的編程語言有關。稱為編譯器的程序(當然得先把它寫出來)將高級語言(接近人類語言)翻譯為針對特定類型計算機的指令序列。

歸根結底,如同Word或瀏覽器等普通程序一樣,操作系統(tǒng)也是由那些指令構建而成的,只是它更為龐大和復雜。操作系統(tǒng)的任務是控制所有其他要運行的程序,并管理它們與計算機其他部分的交互。

這樣講太抽象了,用一個具體的小例子來說明什么是編程吧。假設我們想根據(jù)矩形的長和寬計算其面積。用人類語言可以這樣說:“面積是長和寬的乘積。”學校教師會在黑板上寫出面積計算的公式:

面積 = 長×寬

使用較高級別的編程語言時,我們會這樣寫:

area = length * width

這就是今天大部分主流編程語言中的確切形式。編譯器將其翻譯為人類仍然可讀但主要面向計算機的機器指令序列。在一臺虛構的簡單計算機上,該序列大概像下面這樣:

load length multiply width store area

最終,稱為匯編器(assembler)的程序把該序列轉(zhuǎn)換為人類不易讀懂的指令。這些指令能夠被載入計算機的主存儲器。執(zhí)行時,它們根據(jù)長和寬算出面積。當然這里沒談及很多細節(jié)(如何指定編譯和加載,如何讓長和寬的數(shù)值進入計算機,如何輸出面積數(shù)值,等等),但本質(zhì)大抵如此。

如果你想看看可工作的示例,以下這段完整的C語言程序輸入長和寬,輸出面積:

void main() {     float length, width, area;     scanf('%f %f', &length, &width);     area = length * width;     printf('area = %f\n', area); }

這段程序能在任意一臺計算機上編譯和執(zhí)行。

每個人都至少知道Windows或macOS這些現(xiàn)代操作系統(tǒng)的名字,手機上運行的是Android和iOS等操作系統(tǒng)。

操作系統(tǒng)是控制計算機的程序,它給正在運行的程序分配資源。它管理主存儲器,當運行中的程序有需要時,將主存分配給它們。在臺式計算機或筆記本式計算機上,操作系統(tǒng)讓你能夠同時運行瀏覽器、文字處理器、音樂播放器,或許還有我們的面積計算小程序,并且按需任意切換到其中之一。

操作系統(tǒng)也控制顯示,在收到程序請求時,使其在屏幕上可見。它還管理磁盤之類存儲設備,當你保存Word文檔時,文檔就會被存下來,以備之后恢復并繼續(xù)工作。

操作系統(tǒng)還負責協(xié)調(diào)與互聯(lián)網(wǎng)之類的網(wǎng)絡進行通信,這樣你就能用瀏覽器搜索、與朋友聯(lián)絡、購物、分享寵物貓視頻,一切齊頭并進。

在程序發(fā)生錯誤時,操作系統(tǒng)保護其他程序不受影響,還要防止有害程序或用戶誤操作對系統(tǒng)自身造成的危害。

手機上的操作系統(tǒng)也是如此工作的。在底層,需要做許多動作來維持經(jīng)由移動網(wǎng)絡或無線網(wǎng)絡的通信。雖然細節(jié)常有不同,但手機應用與Word這樣的程序在概念上完全一樣,并且用同樣的編程語言編寫。

現(xiàn)今的操作系統(tǒng)程序體量龐大,紛繁復雜。在20世紀60年代,它簡單得多,但相對于同時代的其他程序,它還是既龐大又復雜。一般而言,IBM或DEC(Digital Equipment Corporation,美國數(shù)字設備公司)等計算機制造商為各種不同硬件提供操作系統(tǒng)。每個制造商生產(chǎn)的硬件全無共通之處,有時甚至來自同一廠商的硬件都會有很大不同,所以操作系統(tǒng)也各自不同。

更加麻煩的是,操作系統(tǒng)用匯編語言寫成。匯編語言是人能讀懂的機器指令,與特定類型硬件的指令集緊密相關。每種計算機都有自己的匯編語言,所以操作系統(tǒng)是龐大且復雜的匯編語言程序,每個操作系統(tǒng)都針對特定硬件、使用特定語言編寫。

系統(tǒng)之間缺乏共通性,使用相互不兼容的低級語言,導致同時需要多個版本的程序:為某一操作系統(tǒng)編寫的程序,在移植到其他操作系統(tǒng)或硬件架構上時,必須完全重寫。這種狀況阻礙了進步。如后文所述,Unix操作系統(tǒng)在所有類型的硬件上都保持一致,而且用較高級的語言寫成,只需付出相對較少的成本,即可從一種計算機移植到另一種計算機。

Unix起源

貝爾實驗室退出Multics項目后,項目組成員得找其他事來做。肯·湯普森(圖2-2)還是想做操作系統(tǒng),但實驗室管理層被Multics傷透了心,不肯給操作系統(tǒng)項目買硬件。肯和其他人只能紙上談兵,設計操作系統(tǒng)的各種組件,無法開展具體的實現(xiàn)工作。

圖2-2 肯·湯普森,約1981年
(杰勒德·霍爾茲曼供圖)

恰在此時,肯找到一臺沒怎么用過的DEC PDP-7計算機。這種計算機的主要功能是做電路設計的輸入設備。

PDP-7于1964年推出,但計算機領域演進太快,到了1969年,它已經(jīng)過時。這臺機器本身不算很強大,只有8K(8192)個18位字長的內(nèi)存(16 KB),但其圖形顯示非常漂亮,所以肯就為它寫了個太空旅行游戲。在這個游戲里,玩家可以漫游太陽系、探訪各個行星。這個游戲有點讓人上癮,我玩了好幾個小時。

PDP-7還有一個好玩的外設——磁盤驅(qū)動器高聳,直直架著一塊磁盤。據(jù)傳,萬一盤片飛出來,站在它前面的人就有可能遇險。磁盤運轉(zhuǎn)速度遠高于計算機讀寫速度。為了解決這個古怪的問題,肯寫了個磁盤調(diào)度算法來提升磁盤的總吞吐量。這個算法在任意磁盤上都可用,但主要是為PDP-7的這塊磁盤設計的。

如何測試這個算法呢?這需要往磁盤上裝載數(shù)據(jù),肯認為他需要一個批量寫數(shù)據(jù)的程序。

“在某一時刻,我發(fā)現(xiàn)離實現(xiàn)一個操作系統(tǒng)僅有3周之遙了?!彼枰獙懭齻€程序,每周寫一個:用來創(chuàng)建代碼的編輯器;將代碼轉(zhuǎn)換為PDP-7能運行的機器語言的匯編器;再加上“內(nèi)核的外層——操作系統(tǒng)齊活了”。

正在那時,肯的太太休了3周假,帶著一歲大的兒子去加利福尼亞探望公婆,這樣肯就有了3周不受打擾的工作時間。正如他在2019年一次采訪中所說,“一周,一周,再一周,我們就有了Unix?!睙o論以何種方式來度量,這都體現(xiàn)了真正的軟件生產(chǎn)力。

肯和我都從貝爾實驗室退休幾年之后,我問他3周內(nèi)寫出Unix是否屬實。下面是他回復郵件的原文,談到的情況和最近那次采訪完全一致。

1969年年中至年末,有明確Unix特征的系統(tǒng)就已在運行,可以說那就是Unix誕生的時間了。

日期:2003年1月9日,星期四,13:51:56-0800

Unix是用來測試吞吐量之類的文件系統(tǒng)實現(xiàn)。實現(xiàn)出來之后,我發(fā)現(xiàn)很難用數(shù)據(jù)給它加上負載。我可以在循環(huán)中調(diào)用讀/寫操作,但做不了更復雜的事。這就是邦妮(Bonnie)去圣迭戈(San Diego)探望我父母時,我面臨的狀況。

我認為它已經(jīng)很接近分時系統(tǒng)了,只是還缺少執(zhí)行調(diào)用(exec call)、shell、編輯器和匯編器。(沒有編譯器)執(zhí)行調(diào)用手到擒來。其他三個每周做一個——加起來正好是邦妮在那邊待的時間。

計算機內(nèi)存有8k×18位。4k做內(nèi)核,4k供用戶程序換入換出。

早期系統(tǒng)有一小群用戶,其中當然包括肯和丹尼斯,還有道格·麥基爾羅伊、鮑勃·莫里斯、喬·奧桑納,以及撞了大運一般的我。每位用戶都有一個數(shù)字身份編號。有些編號代表系統(tǒng)功能而非人類用戶,例如根(root)用戶,或者說超級用戶,身份編號為0,此外還有一些特殊編號。人類用戶的編號從4開始。我記得丹尼斯是5,肯是6,我是9。在初版Unix系統(tǒng)中擁有個位數(shù)用戶身份編號,大概也算略具聲望了。

何以命名

新PDP-7操作系統(tǒng)誕生沒多久,就得了一個名字,但具體過程不得其詳。

我記得自己站在辦公室門口,和幾個人討論,其中好像有肯、丹尼斯和彼得 · 諾伊曼。那時系統(tǒng)還沒名字。(如果我記憶準確的話)我提議,從拉丁詞根看,Multics意圖提供“包羅萬象”的功能,而新系統(tǒng)頂多擇一而從,應該拿uni來替代multi[3],叫它“UNICS”。

也有人說,UNICS這個名字是彼得·諾伊曼想出來的,代表“毫不復雜的信息與計算服務”(UNiplexed Information and Computing Service)。彼得回憶說:

“我記得很清楚,有天早上,肯過來吃午飯,說他通宵為邁克斯·馬修斯(Max Matthews)借他用的PDP-7寫了一個數(shù)千行代碼的單用戶操作系統(tǒng)內(nèi)核。我建議他改為多用戶系統(tǒng),第二天他來吃午飯時,果然已經(jīng)寫出了支持多用戶內(nèi)核的數(shù)千行代碼。正是那個單用戶內(nèi)核啟發(fā)了UNICS的'閹割版Multics’概念。”

彼得自謙地說記不起更多細節(jié),所以,無論是否應當,我都獨占了為系統(tǒng)命名的榮耀。

UNICS后來變成了Unix,這名字顯然更好。(據(jù)傳,AT&T的律師們不喜歡Unics這個詞,因為它音近eunuchs[4]。)丹尼斯·里奇后來形容這個名字“正中Multics要害”,的確如此。

肯·湯普森小傳

2019年5月,在新澤西州沃爾鎮(zhèn)舉辦的美國東部復古電腦節(jié)上,我和肯做了一次非正式的“爐邊談話”。我負責提幾個問題,然后安坐傾聽。以下內(nèi)容部分來自那次活動,讀者可以在YouTube上找到活動視頻。

肯生于1943年。他父親在美國海軍服役,肯小時候隨軍住過全世界很多地方,包括加利福尼亞、路易斯安那,還有幾年住在那不勒斯。

他喜歡鼓搗電器,后來去加利福尼亞大學伯克利分校讀電子工程。他說,電子學課程確實簡單,因為入學之前他已經(jīng)玩過10年電器。在伯克利分校,他迷上了電子計算。

“我用計算機。我愛計算機。當時,伯克利分校還沒開設計算機科學課程,因為這東西剛嶄露頭角。

“畢業(yè)之后那個夏天,我無所事事。能畢業(yè)實屬驚喜,我都不知道自己居然滿足了那些畢業(yè)的條件要求。

“我只想待在學校,因為……一切盡在掌握。我手藝純熟。午夜時分,學校的'怪獸主機’會關閉。我用自己的鑰匙打開機房,啟動機器,在次日早上8點之前,它就一直是我的個人計算機。

“我很快樂,毫無雄心壯志,是一個沒有目標的工作狂?!?/span>

大學最后一年,肯選了埃爾溫 · 伯利坎普(Elwyn Berlekamp)的課。伯利坎普當時在伯克利分校任教授,后來不久就去了貝爾實驗室。畢業(yè)后那個夏天,肯沒申請讀研,因為他覺得自己還不夠優(yōu)秀。

“到那個夏末,(伯利坎普)說:'你去讀這個研究生班吧。’原來他替我申請了讀研,而且申請通過了!”

1966年,肯拿到伯克利分校的碩士學位。貝爾實驗室和另外幾家公司都想招他,但他明確表態(tài)不想去任何一家公司上班。

招聘官一試再試。如肯所言:“貝爾實驗室問了6~8次,我都拒絕了——也是因為我沒有雄心壯志。貝爾實驗室招聘官敲我家門,我請他進屋。據(jù)他說,我還用姜餅和啤酒招待了他。”(這大概是加利福尼亞的什么古怪減肥飲食吧。)

最后,肯接受邀請,由貝爾實驗室支付旅費,去新澤西看看,但是他只答應去一天,而且主要是為了探訪高中時代就結識的朋友。他到達貝爾實驗室時,被一些名字打動了:

“一到那兒,我就沿計算科學研究中心的走廊漫步,兩邊辦公室門上寫的名字如雷貫耳。太震撼了。面試官是兩位妙人……其中一位是林申。

“次日,我租車出行。他們不知怎么查到了我的行蹤,還在東海岸我停留的第三站留下一份入職邀請書。我拿了那份邀請書,繼續(xù)下一站兩個小時的行程,邊開車邊考慮。一到達朋友家,我就打電話去實驗室,說我接受邀請。”

肯于1966年加入貝爾實驗室,開始做Multics研發(fā)工作,后來又寫了Unix。這些事前面已談過,此處不贅述。

肯對游戲的興趣由來已久。他從小就熱愛國際象棋。他不愿輸棋,但又會替輸了的對手惋惜,所以最終只能做個看客。1971年,他為PDP-11寫了一個國際象棋程序。這路子似乎行得通,于是他著手制作用于加速運算(如算出從指定點開始的合規(guī)走法)的特殊用途硬件。這些工作累積成了Belle項目(圖2-3)。Belle是肯與喬·康登(Joe Condon)從1976年至1980年開發(fā)的國際象棋計算機。

圖2-3 肯·湯普森與喬·康登(計算機歷史博物館供圖)

Belle(圖2-4)賽績驕人。在與人類棋手的常規(guī)比賽中,斬獲2200等級分,成為第一臺榮升國際象棋大師的計算機。它還獲得了1980年世界計算機國際象棋大賽(World Computer Chess)冠軍。在被史密森學會(Smithsonian Institution)收藏之前,它還得過好幾次ACM計算機國際象棋錦標賽冠軍。

圖2-4 Belle國際象棋計算機(計算機歷史博物館供圖)

丹尼斯·里奇曾經(jīng)為國際計算機象棋聯(lián)盟(International Computer Chess Association)寫過一篇短文,介紹肯·湯普森對計算機游戲的貢獻[5]。文章寫道,肯對游戲的廣泛興趣,遠遠不止國際象棋。文章還寫了1978年12月5日Belle在ACM計算機國際象棋錦標賽上擊敗Blitz 6.5的過程。文中引用計算機圍棋先鋒蒙蒂·紐伯恩(Monty Newborn)及國際大師戴維·利維(David Levy)的評論:

1.e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Nd4 5. Bc4 Bc5 6. Nxe5 Qe7

7.Bxf7+ Kf8 8. Ng6+ hxg6 9. Bc4 Nxe4 10. O-O Rxh2!! 11. Kxh2 {加速損失} Qh4+ 12. Kg1 Ng3 13. Qh5 {無效拖延} gxh5 14. fxg3+ Nf3# {防住將軍,雙將且將死,難得一見。“截至目前,計算機程序下出的最妙招數(shù)……計算機國際象棋見證了新時代的開始?!眪

國際象棋有贏、輸或和3種終局?!?0步規(guī)則”規(guī)定,如果在50步棋以內(nèi),沒有吃子,或者兵沒有移動過,則棋手可以提出和局。這條規(guī)則能防止玩家在無法贏棋時干耗時間。

肯決定研究50步是否是合適的數(shù)字。他使用Belle和一些復雜的數(shù)據(jù)庫組織方式來評估所有4子或5子和局,發(fā)現(xiàn)如果采用最佳下法,其中部分棋局可以分出勝負。此時,肯在國際象棋圈已頗有名氣,時不時有特級大師來實驗室與Belle對弈,尤其是下殘棋。我曾經(jīng)只是因為周末剛好在實驗室,就見到了世界冠軍阿納托利·卡爾波夫(Anatoly Karpov)和維希·阿南德(Vishy Anand)。

肯熱愛飛行,常常自己或搭載乘客從莫里斯敦機場起飛,在新澤西上空巡航。在他的影響下,1127中心的其他成員也喜歡上了飛行。高峰時期,“1127空軍”擁有六七名私人飛行員。他們常常飛去看秋葉,或者到有意思的地方吃午飯。道格·麥基爾羅伊回憶說:

“除了去新英格蘭看秋葉,'1127空軍’還去阿迪朗達克山觀賞過月食。感謝肯駕駛飛機,羅布·派克提供望遠鏡。還有一次飛行是去觀測水星凌日。Unix組員為天文研究所做的貢獻從喬·奧桑納寫的azel[6]開始,這個程序用來控制'電星一號’(Telstar)的地面站,追蹤人造衛(wèi)星位置。然后是鮑勃 · 莫里斯寫的sky程序,還有肯寫的天體事件預測器、李·麥克馬洪(Lee McMahon)用我的map程序畫了星圖,最后是羅布寫的scat天體目錄程序?!?/span>

1992年12月,肯和弗雷德·格蘭普(Fred Grampp)到莫斯科駕駛一架米格29戰(zhàn)機,比他們平時開的賽斯納飛機更上一層級。圖2-5和圖2-6展示了肯起飛前和落地滑行的情形。

圖2-5 肯·湯普森準備起飛(cat-v供圖)

圖2-6 肯·湯普森降落滑行(cat-v供圖)

肯和我都于2000年年末從貝爾實驗室退休。我去了普林斯頓大學,他加入貝爾實驗室同事創(chuàng)辦的恩智斐(Entrisphere)公司。2006年,他加入谷歌公司,和羅布·派克及羅伯特·格里塞默(Robert Griesemer)一起發(fā)明了Go語言。我聽說他離開Entrisphere公司加入谷歌公司,去信詢問詳情。他回郵件說:

日期:2006年11月1日,星期三,16:08:31 -0800

主題:回復:舊時來聲

是真的。我沒有改變谷歌員工年齡中位數(shù)太多,但我想確實拉高了年齡平均線。

本文摘自《UNIX傳奇:歷史與回憶

《UNIX傳奇》[美] 布萊恩·W.克尼漢(Brian,W.,Kernighan) 著

  • UNIX的誕生記與發(fā)展史,計算機先驅(qū)布萊恩·W.克尼漢繼C程序設計語言后又一力作
  • 講述貝爾實驗室的幕后故事,C/C++等重要發(fā)明的起源,探尋計算科學之光!

自1969年在貝爾實驗室的閣樓上誕生以來,Unix操作系統(tǒng)的發(fā)展遠遠超出其創(chuàng)造者們的想象。它帶動了許多創(chuàng)新軟件的開發(fā),影響了無數(shù)程序員,改變了整個計算機技術的發(fā)展軌跡。

本書不但書寫Unix的歷史,而且記錄作者的回憶,一探Unix的起源,試圖解釋什么是Unix,Unix是如何產(chǎn)生的,以及Unix為何如此重要。除此之外,本書以輕松的口吻講述了一群在貝爾實驗室工作的發(fā)明天才的有趣往事,本書中每一個故事都是鮮為人知卻又值得傳播的寶貴資源。


本書適合對計算機或相關歷史感興趣的人閱讀。讀者不需要有太多的專業(yè)技術背景,就可以欣賞Unix背后的思想,了解它的重要性。

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Unix系統(tǒng)發(fā)展史
C 語言發(fā)展簡史
這篇是你可能不知道關于 Unix 操作系統(tǒng)的發(fā)展歷史
Unix 激蕩 50 年:驅(qū)動 Android、iOS 的操作系統(tǒng)是如何從失敗開始的?
閑話操作系統(tǒng)
Unix 的譜系
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服