五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Mit6.s081---Lec01學(xué)習(xí)筆記

2022-01-16 16:44 作者:_dys_  | 我要投稿

一、操作系統(tǒng)具有的一些共同目標

1、抽象硬件,實現(xiàn)高層次的接口和抽象,例如進程,文件系統(tǒng),既方便了應(yīng)用的開發(fā),也提供了更好的移植性

2、在多個應(yīng)用程序之間共用硬件資源,通常成為multiplex

3、isolation,即不同應(yīng)用程序之間不會互相干擾

4、程序之間的數(shù)據(jù)共享,sharing

5、Security 或者 Access Control System

6、high performance

7、支持大量的用戶場景 range of users


二、操作系統(tǒng)結(jié)構(gòu)

分層的思想

有Userspace和Kernel

system call與function的區(qū)別:system call會跳到系統(tǒng)內(nèi)核中

學(xué)生提問:系統(tǒng)調(diào)用跳到內(nèi)核與標準的函數(shù)調(diào)用跳到另一個函數(shù)相比,區(qū)別是什么?

Robert教授:Kernel的代碼總是有特殊的權(quán)限。當機器啟動Kernel時,Kernel會有特殊的權(quán)限能直接訪問各種各樣的硬件,例如磁盤。而普通的用戶程序是沒有辦法直接訪問這些硬件的。所以,當你執(zhí)行一個普通的函數(shù)調(diào)用時,你所調(diào)用的函數(shù)并沒有對于硬件的特殊權(quán)限。然而,如果你觸發(fā)系統(tǒng)調(diào)用到內(nèi)核中,內(nèi)核中的具體實現(xiàn)會具有這些特殊的權(quán)限,這樣就能修改敏感的和被保護的硬件資源,比如訪問硬件磁盤。我們之后會介紹更多有關(guān)的細節(jié)。

三、系統(tǒng)調(diào)用

read:接收3個參數(shù),第一個是文件描述符,第二個是指向某段內(nèi)存的指針,第三個是讀取的最大長度,返回值是可能讀到的最長長度

文件描述符本質(zhì)上對應(yīng)了內(nèi)核中的一個表單數(shù)據(jù)。內(nèi)核維護了每個運行進程的狀態(tài),內(nèi)核會為每一個運行進程保存一個表單,表單的key是文件描述符。這個表單讓內(nèi)核知道,每個文件描述符對應(yīng)的實際內(nèi)容是什么。這里比較關(guān)鍵的點是,每個進程都有自己獨立的文件描述符空間,所以如果運行了兩個不同的程序,對應(yīng)兩個不同的進程,如果它們都打開一個文件,它們或許可以得到相同數(shù)字的文件描述符,但是因為內(nèi)核為每個進程都維護了一個獨立的文件描述符空間,這里相同數(shù)字的文件描述符可能會對應(yīng)到不同的文件。

fork:?fork會拷貝當前進程的內(nèi)存,并創(chuàng)建一個新的進程,這里的內(nèi)存包含了進程的指令和數(shù)據(jù)。之后,我們就有了兩個擁有完全一樣內(nèi)存的進程。fork系統(tǒng)調(diào)用在兩個進程中都會返回,在原始的進程中,fork系統(tǒng)調(diào)用會返回大于0的整數(shù),這個是新創(chuàng)建進程的ID。而在新創(chuàng)建的進程中,fork系統(tǒng)調(diào)用會返回0。所以即使兩個進程的內(nèi)存是完全一樣的,我們還是可以通過fork的返回值區(qū)分舊進程和新進程。特點(讀時共享寫時復(fù)制)


學(xué)生提問:fork產(chǎn)生的子進程是不是總是與父進程是一樣的?它們有可能不一樣嗎?

Robert教授:在XV6中,除了fork的返回值,兩個進程是一樣的。兩個進程的指令是一樣的,數(shù)據(jù)是一樣的,棧是一樣的,同時,兩個進程又有各自獨立的地址空間,它們都認為自己的內(nèi)存從0開始增長,但這里是不同的內(nèi)存。 在一個更加復(fù)雜的操作系統(tǒng),有一些細節(jié)我們現(xiàn)在并不關(guān)心,這些細節(jié)偶爾會導(dǎo)致父子進程不一致,但是在XV6中,父子進程除了fork的返回值,其他都是一樣的。除了內(nèi)存是一樣的以外,文件描述符的表單也從父進程拷貝到子進程。所以如果父進程打開了一個文件,子進程可以看到同一個文件描述符,盡管子進程看到的是一個文件描述符的表單的拷貝。除了拷貝內(nèi)存以外,fork還會拷貝文件描述符表單這一點還挺重要的,我們接下來會看到。


exec: 這個系統(tǒng)調(diào)用會從指定的文件中讀取并加載指令,并替代當前調(diào)用進程的指令,從某種程度上來說,這樣相當于丟棄了調(diào)用進程的內(nèi)存,并開始執(zhí)行新加載的指令。

有關(guān)exec系統(tǒng)調(diào)用,有一些重要的事情,


  1. exec系統(tǒng)調(diào)用會保留當前的文件描述符表單。所以任何在exec系統(tǒng)調(diào)用之前的文件描述符,例如0,1,2等。它們在新的程序中表示相同的東西。


  2. 通常來說exec系統(tǒng)調(diào)用不會返回,因為exec會完全替換當前進程的內(nèi)存,相當于當前進程不復(fù)存在了,所以exec系統(tǒng)調(diào)用已經(jīng)沒有地方能返回了。

wait:wait會等待之前創(chuàng)建的子進程退出,wait的參數(shù)status,是一種讓退出的子進程以一個整數(shù)(32bit的數(shù)據(jù))的格式與等待的父進程通信方式,status是內(nèi)核向這個地址寫入子進程向exit傳遞的參數(shù)






Mit6.s081---Lec01學(xué)習(xí)筆記的評論 (共 條)

分享到微博請遵守國家法律
丹阳市| 溧水县| 双牌县| 凭祥市| 南充市| 江津市| 叙永县| 甘洛县| 习水县| 休宁县| 永清县| 平阴县| 高州市| 孟州市| 穆棱市| 南昌县| 保康县| 敦化市| 武宁县| 寿光市| 辰溪县| 读书| 宣城市| 博兴县| 抚顺市| 芒康县| 陆川县| 乌拉特后旗| 康马县| 怀远县| 如东县| 铁岭市| 苍梧县| 南开区| 鱼台县| 凤凰县| 凤山市| 都昌县| 闻喜县| 建宁县| 中宁县|