最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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í)筆記的評論 (共 條)

分享到微博請遵守國家法律
长治县| 澎湖县| 元朗区| 高碑店市| 庆城县| 灌阳县| 灵丘县| 泗阳县| 宣城市| 巫山县| 东港市| 杭锦后旗| 英吉沙县| 荔波县| 惠州市| 日土县| 河曲县| 婺源县| 甘南县| 宣化县| 于都县| 绥宁县| 江油市| 晋城| 星座| 康保县| 沙湾县| 马山县| 孝昌县| 昭觉县| 阜宁县| 延边| 瑞昌市| 淳安县| 古浪县| 玉树县| 阿拉善右旗| 灵武市| 通榆县| 临城县| 大同市|